The Nyxtale platformReference
Directives
Every @ directive: signature, arguments, bounds, safety marks.
Every directive the engine has — 96 across 16 categories. This page is generated from the DIRECTIVES registry at build time: the same registry the compiler, the validator and Studio's mechanics palette read. A new directive appears here on its own; there is nothing to update.
Text 16
@autoadvance [mode]
Авто-адванс vs тап — темп чтения
Переключает чтение между автопрокруткой и тапом. Автопрокрутка забирает у читателя контроль над темпом, поэтому включайте её на короткий отрезок и выключайте явно.
modeenum, optionalon— само,off— по тапу.on·off
@autoadvance on
narrator: Дальше всё шло без него.
@autoadvance off
@font <face>
Смена гарнитуры (serif/mono/sans)
Меняет гарнитуру: с засечками (чтение), машинописная (терминал, документ) или рубленая. Держится до следующей смены.
faceenumserif,monoилиsans— гарнитуры, которые в приложении есть.serif·mono·sans
@font mono
narrator: ОТЧЁТ № 114. СТРАНИЦА 2 ОТСУТСТВУЕТ.
@instant
Мгновенный вывод реплики
Следующая реплика появляется целиком, без набора.
No arguments.
The reader seesСтрока возникает сразу.
@instant
narrator: БЕГИ
@lineheight <scale>
Межстрочный ритм (дыхание строк)
Межстрочный интервал — дыхание абзаца. Держится до следующей смены.
scalefloat- Множитель, 0.5…3. Больше — просторнее.0.5…3
@lineheight 2
narrator: Между строками было слишком много места.
@redact
Редакция: [ДАННЫЕ УДАЛЕНЫ]
Включает редакцию: следующие реплики выходят вымаранными. Снимается @unredact. Вымаранная строка сообщает больше написанной — читатель видит, что здесь что-то было.
No arguments.
The reader seesТекст закрыт полосой.
@classify keter
@redact
narrator: Субъект был доставлен в 03:40 в сопровождении двух сотрудников.
@unredact
narrator: Остальное в деле отсутствует.
@shout◐
Крик — крупный резкий текст
Следующая реплика выходит крупным резким текстом.
No arguments.
@shout
mark: УХОДИ ОТТУДА!
@stagger [per_word_ms]
Стаггер: слова проступают по одному
Следующая реплика проступает по одному слову.
per_word_msint, optional- Задержка между словами в миллисекундах.0…∞
@stagger 300
narrator: Кто-то. Стоял. В коридоре.
@text_corrupt [amount]◐
Порча текста — буквы искажаются
Порча букв в строке — символы подменяются. Знак того, что источник текста ненадёжен.
amountfloat, optional- Доля искажённых символов, 0…1.0…1
@text_corrupt 0.3
narrator: Он написал имя, но прочесть его было уже нельзя.
@text_erase
Самостирающийся текст
Строка стирает сама себя после того, как её прочли.
No arguments.
The reader seesТекст исчезает с экрана сам.
@text_erase
narrator: Запомни это. Второй раз не покажу.
@text_fade [dir]
Проявление/растворение строки
Строка проявляется или растворяется.
direnum, optionalin— проявиться,out— раствориться.in·out
@text_fade out
narrator: Голос стих раньше, чем закончил фразу.
@text_shake [amount]◐
Дрожь текста — нестабильная реплика
Дрожь самой строки — реплика, произнесённая нетвёрдо.
amountfloat, optional- Амплитуда, 0…1.0…1
@text_shake 0.5
mark: Я н-ничего не видел.
@textsize <level>
Размер текста — уровень 1–6
Размер текста уровнем от 1 до 6. Держится до следующей смены.
levelint- Уровень 1…6, где 1 — самый мелкий.1…6
@textsize 5
narrator: ОН СТОЯЛ ПРЯМО ЗА НЕЙ.
@textspeed <cps>
Скорость печати текста
Скорость набора текста в символах в секунду. Держится до следующей смены.
cpsint- Символов в секунду. Обычное чтение — 30…60, медленное — 10.
@textspeed 12
narrator: Он. Читал. Каждое. Слово.
@thought <who> <text> [tone]
Мысль персонажа — бабл рядом с ним
То, что персонаж думает, но не говорит. Пишется отдельной строкой под репликой: @thought <кто> "<мысль>" — мысль ОБЯЗАТЕЛЬНО в кавычках, без них она обрывается на первом пробеле. Выходит баблом рядом с персонажем, а не в панели реплик: сторона выбирается сама — персонаж слева, бабл справа; справа — бабл слева; в центре — сверху. Мысль — это текст, который читают, поэтому она держит кадр как обычная реплика, и на это время панель реплик уходит в тень, чтобы читалось одно: сначала реплика, потом мысль. Две мысли подряд не затирают друг друга — первая ещё пару секунд висит и растворяется, вторая встаёт под ней.
whostring- Тот же id, что стоит в
@sprite, без кавычек. Если персонажа сейчас нет на сцене, бабл выйдет по центру. textstring- Сама мысль, в кавычках — целиком, вместе с пробелами и знаками.
toneenum, optional- Настроение бабла:
dusk(по умолчанию, сумрачный),dark(почти чёрный),light(светлый, тёмным по светлому),blood(кровавый),ember(тёплый, как свеча),cold(холодный серый). Цвета берутся из палитры темы истории, поэтому тон везде свой.dusk·dark·light·blood·ember·cold
The reader seesРядом с персонажем всплывает овальный бабл с его мыслью, с тёмной дымкой за ним.
@sprite elena left
elena: Всё в порядке.
@thought elena "Он врёт."
@thought elena "И всегда врал." blood
@unredact
Снять редакцию — раскрыть скрытый текст
Снимает редакцию, включённую @redact. Без предшествующего @redact не делает ничего — снимать нечего.
No arguments.
@redact
narrator: Имя оператора: [вымарано]
@unredact
narrator: Дальше страница чистая.
@whisper
Шёпот — мелкий тусклый текст
Следующая реплика выходит мелким тусклым текстом.
No arguments.
@whisper
narrator: он всё ещё здесь
Timing 5Nightfall Stories
@cut
Резкий склейка-кат (flash-cut)
Резкая склейка, в том числе посреди фразы. Приём монтажа: обрыв на полуслове читается как смена кадра, а не как ошибка.
No arguments.
The reader seesКадр меняется мгновенно.
narrator: Он успел сказать только «не открывай»
@cut
@bg kitchen_day
narrator: Утром никто об этом не вспомнил.
@delay <seconds>
Отложенное появление элемента
Откладывает появление следующего элемента, не останавливая сцену целиком.
secondsfloat- Задержка в секундах.0…∞
@delay 1.5
narrator: И только потом стало слышно шаги.
@hold_black [seconds]
Fade-to-black и держать
Кадр уходит в чёрное и держится. Граница между сценами или удар по паузе.
secondsfloat, optional- Сколько держать черноту.
The reader seesЭкран чернеет на заданное время.
@hold_black 3
narrator: Когда свет вернулся, стул стоял иначе.
@pause <seconds>
Пауза/удержание
Пауза до следующей строки. Перед репликой работает сильнее любого выделения: читатель успевает поднять голову.
secondsfloat- Длительность в секундах.
narrator: Он позвал её по имени.
@pause 2
narrator: Никто не ответил.
@slowmo◐
Замедление момента
Растягивает происходящее. За эпизод работает один раз, дальше читается как торможение.
No arguments.
The reader seesВсё замедляется.
@slowmo
narrator: Стакан шёл к полу целую жизнь.
Audio 6Nightfall Stories
@ambient <audio> [loop] [volume]
Фоновый эмбиент
Фоновый звук. С loop играет петлёй, пока его не снимут @silence или другим @ambient.
audioasset- Идентификатор звука — из базовой библиотеки или из ресурсов истории.
loopenum, optional- Слово
loop, если звук должен идти петлёй.loop volumeint, optional- Громкость 0…100. Без неё — громкость по умолчанию.0…100
The reader seesЗвук идёт фоном.
@ambient wind_howl loop 60
narrator: Ветер не прекращался с самого вечера.
@dissonance [amount]◐
Нарастание диссонанса (↔ рассудок)
Нарастающий диссонирующий гул отдельным слоем, тоже синтезированный. Обычно связывают со шкалой рассудка: чем ниже, тем выше значение.
amountfloat, optional- Сила, 0…1.0…1
The reader seesПод сценой появляется гул, тем резче, чем выше значение.
@set sanity = 0
@dissonance 0.7
narrator: Звук шёл как будто из стен.
@heartbeat [bpm]◐
Сердцебиение (темп ↔ напряжение)
Сердцебиение отдельным слоем. Звук синтезируется движком, файл загружать не нужно; темпом показывают напряжение.
bpmint, optional- Ударов в минуту. Спокойное — около 60, паника — за 120.
The reader seesСлышно сердцебиение в заданном темпе.
@heartbeat 120
narrator: Он не слышал ничего, кроме себя.
@pan <x>
Бинауральный пан — «звук за спиной»
Смещает звук влево или вправо — «звук за спиной». Работает в наушниках.
xfloat- От −1 (слева) до 1 (справа), 0 — по центру.-1…1
The reader seesЗвук смещается в одно ухо.
@pan -0.8
@sound footstep
narrator: Шаг был слева, хотя слева была стена.
@silence
Тишина — обнулить аудио-слои
Обрывает все звуковые слои. Обрыв слышен сильнее удара: петля шла десять минут, читатель перестал её замечать, и вдруг её нет.
No arguments.
The reader seesЗвук пропадает.
@ambient wind_howl loop
narrator: Ветер не прекращался с самого вечера.
@silence
narrator: А потом прекратился.
@sound <audio> [volume]
Разовый звук/стингер
Разовый звук: удар, скрип, стингер. Играет один раз и заканчивается.
audioasset- Идентификатор звука — из базовой библиотеки или из ресурсов истории.
volumeint, optional- Громкость 0…100.0…100
The reader seesЗвук проигрывается один раз.
@sound door_creak
narrator: Дверь открылась сама.
Visuals 18Nightfall Stories
@bg <image> [@alt <alt>]
Фон сцены
Ставит фон сцены. Держится, пока другой @bg его не сменит, и переживает реплики, выборы и переходы по меткам; при переходе в другую сцену кадр сбрасывается.
imageasset- Идентификатор изображения из ресурсов истории, а не имя файла.
@altstring, named- Описание изображения для скринридера. Без него валидатор даёт
NSX_ALT_TEXT_MISSING.
The reader seesФон меняется под текстом.
@bg corridor_night @alt "Больничный коридор ночью, лампы горят через одну"
narrator: Свет доставал метра на три и там кончался.
@blink [times]◐
Моргание — глаза закрылись и открылись
Глаза закрылись и открылись: кадр смыкается сверху и снизу и снова расходится. Это не затемнение — это взгляд персонажа. Держать глаза закрытыми — @hold_black.
timesint, optional- Сколько раз моргнуть, 1…3. По умолчанию один.1…3
The reader seesКадр смыкается веками и открывается снова.
@blink
narrator: Когда я открыл глаза, стул стоял ближе.
@chromatic [amount] [@reduce_motion <reduce_motion>]⚡◐
Хроматическая аберрация
Хроматическая аберрация — цветные каналы расходятся по краям.
amountfloat, optional- Сила расхождения, 0…1.0…1
@reduce_motionstring, named- Что делать при сниженном движении:
off— не играть,keep— играть как есть, либо имя другого, спокойного эффекта на замену.
The reader seesКонтуры двоятся цветом. Фоточувствительный эффект: при мягких настройках он не сыграет вообще, поэтому смысл сцены должен читаться и без него.
@chromatic 0.4
narrator: Глаза не держали фокус.
@desaturate [amount]◐
Слив цвета — обесцвечивание кадра
Сливает цвет из кадра. Держится, пока не снимете: @desaturate 0 возвращает цвет.
amountfloat, optional- Сколько цвета убрать, 0…1.0…1
The reader seesКадр обесцвечивается.
@desaturate 0.8
narrator: Всё стало цвета мокрого бетона.
@flash [@reduce_motion <reduce_motion>]⚡
Вспышка-раскрытие (молния)
Короткая вспышка на весь кадр — молния, свет фар, срабатывание вспышки.
@reduce_motionstring, named- Что делать при сниженном движении:
off— не играть,keep— играть как есть, либо имя другого, спокойного эффекта на замену.
The reader seesКадр на мгновение белеет. Фоточувствительный эффект: при мягких настройках он не сыграет вообще, поэтому смысл сцены должен читаться и без него.
@flash
narrator: В зеркале, за секунду до темноты, стояли двое.
@flashlight [mode] [aim]◐
Луч фонаря — видно только конус света
Гасит кадр и оставляет видимым только конус света — он расходится от руки читателя вглубь сцены, поэтому углы кадра остаются тёмными. Свет холодный, в отличие от тёплой свечи, которая горит в сцене сама по себе. Это состояние, а не вспышка: держится, пока автор не сменит кадр. Снимается сменой фона (@bg), сменой сцены или явным @flashlight off.
modeenum, optionaloff— убрать фонарь. Без аргумента — включить.on·offaimenum, optionalaimed— луч ведёт читатель: он ходит за пальцем по кадру, и видно только то, на что читатель посветил. Без аргумента —fixed, луч стоит там, где его поставил автор.fixed·aimed
The reader seesКадр виден только в конусе света; с aimed читатель водит лучом сам.
@flashlight
narrator: Луч дрожал вместе с рукой.
narrator: За кругом света что-то переступило с ноги на ногу.
@flashlight on aimed
narrator: Свети сам. Где-то здесь были дрова.
@flashlight off
@flicker [tint] [@reduce_motion <reduce_motion>]⚡◐
Мерцание источника света
Мерцание источника света. Свяжите его с состоянием: фонарь, начавший мигать в третьей главе, к пятой должен сесть.
tintenum, optional- Цвет:
black(по умолчанию),red,green,amber. Оттенок берётся из темы истории, поэтому «красный» одной истории и «красный» другой — разные красные.black·red·green·amber @reduce_motionstring, named- Что делать при сниженном движении:
off— не играть,keep— играть как есть, либо имя другого, спокойного эффекта на замену.
The reader seesСвет мигает. Фоточувствительный эффект: при мягких настройках он не сыграет вообще, поэтому смысл сцены должен читаться и без него.
@flicker red
narrator: Лампа моргнула дважды и передумала.
@fog [density]
Туман/дымка — глубина и сокрытие
Дымка поверх кадра: даёт глубину и прячет детали. Не гасится настройкой интенсивности — это часть композиции кадра, а не атмосферный акцент.
densityfloat, optional- Плотность, 0…1.
@fog 0убирает дымку.0…1
The reader seesКадр затягивает дымкой.
@fog 0.6
narrator: Другой берег угадывался только по огням.
@fx <kind> [amount] [@reduce_motion <reduce_motion>]⚡◐
Пост-эффект
Общая форма записи для пяти пост-эффектов: то же самое можно написать отдельной директивой (@fx glitch 0.4 и @glitch 0.4 дают одно и то же).
kindenum- Какой эффект наложить.
film_grain·glitch·vhs·chromatic·desaturate amountfloat, optional- Сила, 0…1. Без неё берётся значение по умолчанию для этого эффекта.0…1
@reduce_motionstring, named- Что делать при сниженном движении:
off— не играть,keep— играть как есть, либо имя другого, спокойного эффекта на замену.
The reader seesКадр получает выбранный фильтр. Фоточувствительный эффект: при мягких настройках он не сыграет вообще, поэтому смысл сцены должен читаться и без него.
@fx film_grain 0.4
narrator: Плёнка шла с шумом, будто её уже кто-то смотрел.
@glitch [amount] [@reduce_motion <reduce_motion>]⚡◐
Глитч-искажение кадра
Искажение кадра — разрывы развёртки, сдвиги. Знак того, что запись повреждена.
amountfloat, optional- Сила, 0…1. Без неё берётся значение по умолчанию.0…1
@reduce_motionstring, named- Что делать при сниженном движении:
off— не играть,keep— играть как есть, либо имя другого, спокойного эффекта на замену.
The reader seesКадр рвётся и смещается. Фоточувствительный эффект: при мягких настройках он не сыграет вообще, поэтому смысл сцены должен читаться и без него.
@glitch 0.5
narrator: Запись дёрнулась, и на секунду в кадре был кто-то третий.
@jumpscare <image> [@sound <audio>] [@reduce_motion <reduce_motion>] [@alt <alt>]⚡◐
Джампскейр
Резкий показ изображения со звуком. На историю его хватает одного: второй уже не пугает, третий раздражает.
imageasset- Идентификатор изображения из ресурсов истории.
@soundasset, named- Идентификатор звука, который играет вместе с кадром.
@reduce_motionstring, named- Что делать при сниженном движении:
off— не играть,keep— играть как есть, либо имя другого, спокойного эффекта на замену. @altstring, named- Описание изображения для скринридера. Без него валидатор даёт
NSX_ALT_TEXT_MISSING.
The reader seesКадр на мгновение заменяется картинкой, играет звук. Фоточувствительный эффект: при мягких настройках он не сыграет вообще, поэтому смысл сцены должен читаться и без него.
@jumpscare face_in_window @sound stinger_01 @alt "Лицо в окне, вплотную к стеклу"
@reveal_bg <image> [@alt <alt>]
Явить/скрыть фон — что показано
Показывает или прячет фон — то, что было скрыто, становится видно.
imageasset- Идентификатор изображения из ресурсов истории.
@altstring, named- Описание изображения для скринридера. Без него валидатор даёт
NSX_ALT_TEXT_MISSING.
@reveal_bg cellar_full @alt "Погреб целиком: у дальней стены стоят ящики"
@sprite <image> [slot] [scale] [@alt <alt>]
Спрайт персонажа
Показывает персонажа поверх фона. Слот определяет место на экране: повторный @sprite в тот же слот заменяет того, кто там стоял.
imageasset- Идентификатор изображения из ресурсов истории.
slotstring, optional- Место на экране (
left,center,right). Без него берётся слот по умолчанию. scalefloat, optional- Множитель размера, 1 — обычный. Картинка всегда вписывается в отведённую полосу экрана, поэтому размер задаётся множителем, а не пикселями: 1.4 — крупнее (ближе к камере), 0.7 — мельче (в глубине кадра). Персонаж растёт вверх, ноги остаются на месте.0.25…3
@altstring, named- Описание изображения для скринридера. Без него валидатор даёт
NSX_ALT_TEXT_MISSING. Для спрайта описывайте СОСТОЯНИЕ: «Марк, весь в грязи, держится за плечо».
@sprite mark_hurt left 1.3 @alt "Марк, весь в грязи, держится за плечо"
mark: Я в порядке.
@sprite_hide [slot]
Убрать спрайт из слота
Убирает персонажа из слота. Без аргумента очищает слот по умолчанию.
slotstring, optional- Слот, который нужно освободить.
@sprite_hide left
narrator: Он ушёл, не дожидаясь ответа.
@sprite_shake [slot] [amount]◐
Тремор спрайта персонажа
Тремор персонажа в слоте. Без спрайта в слоте ничего не делает.
slotstring, optional- Слот, чей спрайт трясётся.
amountfloat, optional- Амплитуда, 0…1.0…1
@sprite shivering_man left @alt "Мужчина в мокрой куртке"
@sprite_shake left 0.4
@strobe [hz] [@reduce_motion <reduce_motion>]⚡◐
Строб — резкое мерцание (частота ограничена §17)
Резкое мерцание с заданной частотой. Частота ограничена жёстко: выше безопасного порога значение зажимается на стороне читателя, а валидатор предупреждает.
hzfloat, optional- Вспышек в секунду. Выше безопасного порога валидатор даёт
NSX_PHOTOSENSITIVE_LIMIT.0…∞ safe up to 3 @reduce_motionstring, named- Что делать при сниженном движении:
off— не играть,keep— играть как есть, либо имя другого, спокойного эффекта на замену.
The reader seesЭкран мерцает. Фоточувствительный эффект: при мягких настройках он не сыграет вообще, поэтому смысл сцены должен читаться и без него.
@strobe 2
narrator: Аварийный свет считал секунды за него.
@vhs [amount] [@reduce_motion <reduce_motion>]⚡◐
VHS-развёртка
Развёртка видеокассеты: полосы, дрожание строк. Заявляет носитель — читатель смотрит запись.
amountfloat, optional- Сила, 0…1. Без неё берётся значение по умолчанию.0…1
@reduce_motionstring, named- Что делать при сниженном движении:
off— не играть,keep— играть как есть, либо имя другого, спокойного эффекта на замену.
The reader seesКадр идёт как с кассеты. Фоточувствительный эффект: при мягких настройках он не сыграет вообще, поэтому смысл сцены должен читаться и без него.
@vhs
narrator: Счётчик в углу шёл назад.
@vignette [amount] [tint]◐
Виньетка — сжатие поля зрения
Затемняет края кадра, сужая поле зрения. Хорошо работает вместе с @flashlight: конус света и темнота вокруг него.
amountfloat, optional- Сила затемнения, 0…1.0…1
tintenum, optional- Цвет:
black(по умолчанию),red,green,amber. Оттенок берётся из темы истории, поэтому «красный» одной истории и «красный» другой — разные красные.black·red·green·amber
The reader seesКрая кадра темнеют — в чёрное или в названный цвет.
@vignette 0.7 green
@flashlight
narrator: Дальше конуса не было ничего.
Camera 5Nightfall Stories
@dutch [degrees]◐
Голландский угол — тревога
Заваливает горизонт. Классический приём тревоги — кадр перестаёт стоять ровно.
degreesfloat, optional- Угол наклона в градусах.0…12
The reader seesКадр наклоняется.
@dutch 8
narrator: Комната стояла неправильно, и он не сразу понял чем.
@letterbox [amount]
Киношные полосы на пике
Кинематографические полосы сверху и снизу. Не гасится настройкой интенсивности — это рамка кадра. @letterbox 0 убирает полосы.
amountfloat, optional- Высота полос, 0…1.0…1
The reader seesКадр обрезается полосами сверху и снизу.
@letterbox 0.8
narrator: Дальше всё шло как в чужом фильме.
@pan_cam <x> [y]
Панорама камеры по фону
Панорама камеры по фону — кадр едет, не меняя изображения.
xfloat- Смещение по горизонтали.-1…1
yfloat, optional- Смещение по вертикали.-1…1
The reader seesКадр плавно смещается.
@pan_cam 0.5
narrator: Взгляд прошёл вдоль стены до самого угла.
@shake [amount]◐
Тряска экрана
Тряска всего экрана: удар, взрыв, толчок.
amountfloat, optional- Амплитуда.0…1
The reader seesЭкран трясёт.
@shake 0.6
@sound impact_low
narrator: Что-то ударило в дверь с той стороны.
@zoom <scale>
Наезд/отъезд камеры
Наезд или отъезд камеры по фону.
scalefloat- Больше 1 — наезд, меньше 1 — отъезд.
The reader seesКадр приближается или отдаляется.
@zoom 1.4
narrator: На снимке, в углу, было ещё одно лицо.
Interaction 4Nightfall Stories
@choice_shake [amount]◐
Дрожащая кнопка выбора
Дрожь кнопки выбора — опция, которая даётся тяжело.
amountfloat, optional- Амплитуда, 0…1.0…1
@choice_shake 0.5
* choice "Признаться"
-> confess
* choice "Молчать"
-> silent
@choices_fade [seconds]
Опции проступают с задержкой
Опции выбора проступают с задержкой. Даёт прочитать сцену прежде, чем читатель потянется к кнопке.
secondsfloat, optional- Задержка перед появлением опций.0…∞
@choices_fade 1.5
* choice "Открыть"
-> inside
* choice "Уйти"
-> away
@haptic◐
Тактильная отдача
Тактильная отдача на телефоне. На устройствах без вибрации не делает ничего.
No arguments.
The reader seesКороткая вибрация.
@haptic
@sound impact_low
narrator: Пол под ногами дёрнулся.
@hold_to_act [duration_ms] [label] [@fallback <fallback>]
Удержание для действия — блокирующий жест (§17: с доступной альтернативой)
Блокирующий жест: сцена ждёт, пока читатель удержит нажатие. Рядом по умолчанию идёт доступная альтернатива — обычное нажатие.
duration_msint, optional- Сколько держать, в миллисекундах (200…10000).200…10000
labelstring, optional- Подпись для читателя, например «Удерживай».
@fallbackenum, namedon(по умолчанию) — есть альтернатива нажатием.offвалидатор помечает как риск: у части читателей удержания нет физически.on·off
The reader seesПоявляется элемент, который нужно удерживать.
@hold_to_act 2000 "Держи дверь"
narrator: С той стороны перестали толкать.
Reveal 4Nightfall Stories
@classify <class>
Классификация объекта (Safe/Euclid/Keter…)
Класс объекта в духе засекреченного досье. Заявляет носитель — читатель смотрит дело.
classenum- Класс объекта.
safe·euclid·keter·thaumiel·apollyon
@classify keter
narrator: Условия содержания пересмотрены после инцидента 12/04.
@clearance_gate <level>
Гейт контента по уровню допуска
Гейт по уровню допуска: часть материала показывается только тем, кто дошёл до нужного уровня. Язык документа — работает вместе с @classify и @redact.
levelint- Требуемый уровень допуска, целое число.0…∞
@clearance_gate 4
@redact
narrator: Приложение 4-B доступно с уровня 4.
@foreshadow <key>
Предзнаменование/обратный вызов (маркер)
Маркер предзнаменования: помечает деталь, которая выстрелит позже. Помогает вам самому проверить, что обещание было дано до того, как исполнилось.
keystring- Имя предзнаменования, латиницей — то же, что потом в
@reveal.
The reader seesnothing — a silent marker that shows up later.
@foreshadow the_second_key
narrator: На гвозде у двери висел лишний ключ.
@reveal <key>
Контролируемое раскрытие (маркер)
Маркер контролируемого раскрытия: отмечает, что читателю здесь стало известно нечто. Ставится для себя и для отчётов, ветвление на нём не строится — для этого есть флаги.
keystring- Имя того, что раскрыто, латиницей.
@reveal who_sent_the_letter
narrator: Подпись внизу была её.
Meta 6
@arg_code <code>
ARG-код: внешняя загадка/гейт
Код внешней загадки: строка, которую читатель ищет вне истории. Сам по себе гейтом не является — гейт вы строите условием.
codestring- Код, который читатель должен найти.
@arg_code SEVEN_DOORS
narrator: На обороте снимка было написано семь букв.
@fake_crash [@reduce_motion <reduce_motion>]⚡
Поддельный краш
Поддельный сбой приложения. Сильный и рискованный приём: часть читателей решит, что сломалось.
@reduce_motionstring, named- Что делать при сниженном движении:
off— не играть,keep— играть как есть, либо имя другого, спокойного эффекта на замену.
The reader seesЭкран изображает аварийное завершение. Фоточувствительный эффект: при мягких настройках он не сыграет вообще, поэтому смысл сцены должен читаться и без него.
@fake_crash
narrator: …
@meta_break
Слом 4-й стены
Слом четвёртой стены: история обращается к читателю напрямую. Приём одноразовый — второй раз он читается как манера, а не как событие.
No arguments.
@meta_break
narrator: Ты ведь уже читал это однажды.
@notify [text]
Поддельное системное уведомление
Поддельное системное уведомление — сообщение будто бы не от истории.
textstring, optional- Текст уведомления. Показывается читателю как есть, без обработки.
The reader seesПлашка «Уведомление» с вашим текстом. Несколько уведомлений подряд читатель видит по очереди — одно за другим, в порядке записи, а не пачкой поверх друг друга.
@notify "Батарея 4%. Подключите зарядное устройство."
@persona <field>
Персонализация: имя/время/устройство/дата
Подставляет в текст данные читателя: имя, время, устройство, дату. Сильнее всего работает один раз и в тот момент, когда история якобы не должна этого знать.
fieldenum- Что подставить.
name·time·device·date
@persona time
narrator: Сейчас у тебя ровно это время. Проверь.
@terminal
Диегетический терминал/консольный ввод
Диегетический терминал — текст выходит как консольный вывод.
No arguments.
The reader seesЭкран принимает вид терминала.
@terminal
@font mono
narrator: > доступ разрешён
narrator: > загружаю журнал за 12/04
Theme 1Nightfall Stories
@sanity_show
Показать индикатор рассудка
Показывает индикатор рассудка. Постоянно держать его не обязательно: часто сильнее, когда индикатор появляется в тот момент, когда стало плохо.
No arguments.
The reader seesНа экране появляется шкала рассудка.
@sanity_show
@set sanity = 0
@set sanity -= 20
Meters 3Nightfall Stories
@meter_hide <meter>
Скрыть шкалу состояния
Убирает шкалу с экрана. Значение флага при этом не меняется.
meterenum- Какая шкала.
sanity·fear·health·infection·will·faith·curse·suspicion·reputation·morale·hunger·thirst·fatigue·warmth·oxygen·battery·noise·visibility
@meter_hide sanity
narrator: Считать перестало иметь смысл.
@meter_show <meter>
Показать шкалу состояния в HUD
Выводит шкалу состояния на экран. Сама шкала — обычный целый флаг с границами, объявленный в схеме флагов; директива только показывает его читателю.
meterenum- Какая шкала. Имя должно совпадать с флагом в схеме.
sanity·fear·health·infection·will·faith·curse·suspicion·reputation·morale·hunger·thirst·fatigue·warmth·oxygen·battery·noise·visibility
The reader seesНа экране появляется шкала с текущим значением.
@set sanity = 0
@meter_show sanity
@set sanity -= 15
@sanity_distort [amount] [@reduce_motion <reduce_motion>]⚡◐
Искажение восприятия при низком рассудке
Искажает восприятие — подача меняется вместе с состоянием. Обычно связывают со шкалой рассудка: чем ниже, тем выше значение.
amountfloat, optional- Сила искажения, 0…1.0…1
@reduce_motionstring, named- Что делать при сниженном движении:
off— не играть,keep— играть как есть, либо имя другого, спокойного эффекта на замену.
The reader seesКадр и текст искажаются. Фоточувствительный эффект: при мягких настройках он не сыграет вообще, поэтому смысл сцены должен читаться и без него.
@set sanity = 0
@set sanity -= 20
@sanity_distort 0.6
narrator: Руки не слушались, и буквы расползались.
Resources 6Nightfall Stories
@craft <result>
Крафт: собрать предмет из частей
Объявляет, что предмет собран из частей. Проверку наличия частей делаете вы условием.
resultstring- Имя получившегося предмета, латиницей. Идентификатор показывается читателю: подчёркивания заменяются пробелами, первая буква становится заглавной (
old_photo→ «Old photo»). Поэтому пишите его так, как он должен читаться.
The reader seesПлашка «Собрано» с именем предмета.
@craft makeshift_torch
narrator: Тряпка, ветка и остаток керосина.
@currency <op> <amount>
Внутриигровая валюта (мир, не монетизация §07)
Внутриигровая валюта: монеты, патроны, свечи. К реальным покупкам отношения не имеет и в одной шкале с ними не считается.
openumadd— начислить,spend— потратить.add·spendamountint- Сколько.0…∞
The reader seesПлашка «Получено» или «Потрачено» с суммой.
@currency add 5
narrator: В кармане пальто нашлась мелочь.
@inventory_show
Открыть инвентарь
Открывает список предметов читателю.
No arguments.
@inventory_show
narrator: Всё, что у него было, помещалось в один карман.
@item_get <item>
Получить предмет в инвентарь
Кладёт предмет в инвентарь. Инвентарь — флаг типа set, повторное добавление ничего не меняет.
itemstring- Имя предмета, латиницей. Идентификатор показывается читателю: подчёркивания заменяются пробелами, первая буква становится заглавной (
old_photo→ «Old photo»). Поэтому пишите его так, как он должен читаться.
The reader seesПлашка «Получено» с именем предмета.
@item_get candle
narrator: Свеча была тёплой, будто её только что задули.
@item_lose <item>
Убрать предмет из инвентаря
Убирает предмет из инвентаря — потерян, отобран, оставлен.
itemstring- Имя предмета, латиницей — то же, что в
@item_get.
@item_lose candle
narrator: Свеча осталась там, на ступеньках.
@item_use <item>
Применить/израсходовать предмет
Применяет предмет. Расходуется он или нет, решаете вы — директива объявляет действие.
itemstring- Имя предмета, латиницей.
The reader seesПлашка «Использовано» с именем предмета.
@item_use candle
narrator: Огонь дошёл до фитиля и остановился.
Choice 2Nightfall Stories
@skill_check <stat> <difficulty>
Проверка навыка: стат против сложности (± RNG)
Объявляет проверку навыка. Исход считает не она, а ваше условие: директива показывает читателю, что проверка произошла, и с каким значением.
statstring- Имя флага-навыка, латиницей.
difficultyint- Порог сложности, целое число.0…∞
The reader seesПлашка «Проверка» с именем навыка, текущим значением и порогом.
@set nerve = 0
@set roll = 0
@skill_check nerve 14
@set roll = rand(1, 20) + nerve
@if roll >= 14 -> steady
-> shaking
@timer <duration_ms>
Таймер-бар на выборе, мс (§17 — доступное окно)
Таймер на выборе. Пишется ТОЛЬКО в шапке опции (* choice "…" @timer 8000) — отдельной строкой валидатор его отклонит. Истечение таймера должно быть осмысленным исходом, а не наказанием.
duration_msint- Миллисекунды: 8000 — это восемь секунд.0…∞
The reader seesПод меню идёт полоса времени.
* choice "Успеть закрыть" @timer 8000
-> closed
* choice "Отступить"
-> back
Occult 7Nightfall Stories
@divine [spread]
Гадание/таро — расклад влияет на путь
Гадание: расклад красит главу. Хорошее место для случайности — предсказание, которое может не сбыться, создаёт напряжение, а решающее судьбу читается как несправедливость.
spreadenum, optional- Чем гадают.
tarot·runes·bones
@divine tarot
narrator: Верхняя карта легла рубашкой вверх, и переворачивать её никто не стал.
@incantation <spell>
Заклинание: компоненты → эффект
Заклинание: компоненты складываются в результат. Тот же гейт, что и ритуал, но словами.
spellstring- Имя заклинания, латиницей.
@incantation open_the_seventh
narrator: Слова он произнёс правильно. Это и было ошибкой.
@pact <id>
Пакт/сделка: выгода сейчас, цена потом
Выгода сейчас, цена потом. Технически это флаг, который ставится здесь и читается далеко; если цена не придёт, пакт обманывает читателя, а не персонажа.
idstring- Имя пакта, латиницей — по нему вы потом строите условие.
@pact debt_to_the_ferryman
narrator: «Позже», — сказал он. И это было согласие.
@ritual <id>
Ритуал: порядок действий/символов как гейт
Ритуал как гейт: открывается не предметом, а порядком действий. Порядок должен называться в истории, а не подбираться читателем.
idstring- Имя ритуала, латиницей.
@sign_add salt
@sign_add ash
@ritual circle
narrator: Круг замкнулся, и в комнате стало на градус холоднее.
@sacrifice <give> [gain]
Жертва/обмен: отдать X ради Y
Отдать одно ради другого. Отдавать должно быть дорого — персонаж, воспоминание, возможность вернуться; «минус пять свечей» решением не становится.
givestring- Что отдают.
gainstring, optional- Что получают взамен.
The reader seesПлашка «Жертва» с тем, что отдано и получено.
@sacrifice memory_of_her_voice safe_passage
narrator: Он перестал помнить, как она смеялась. Дверь открылась.
@sign_add <sign>
Собрать знак/символ
Добавляет знак или символ в набор — как улику в расследовании.
signstring- Имя знака, латиницей. Идентификатор показывается читателю: подчёркивания заменяются пробелами, первая буква становится заглавной (
old_photo→ «Old photo»). Поэтому пишите его так, как он должен читаться.
@sign_add salt
narrator: Соль легла ровной линией у порога.
@vision [image] [@alt <alt>]◐
Сон/видение — альтернативный слой реальности
Сон или видение — слой реальности рядом с основным.
imageasset, optional- Идентификатор изображения, если видение показывает кадр.
@altstring, named- —
@vision drowned_hall
narrator: Вода стояла вровень с потолком, и в ней кто-то ждал.
Investigation 7Nightfall Stories
@accuse <target>
Обвинение/дедукция по собранному
Обвинение — момент, когда версия становится действием. Неполная версия должна вести к другой развязке, а не к худшей: расследование интереснее, когда ошибиться можно, не проиграв.
targetstring- Кого обвиняют, латиницей.
@accuse the_caretaker
narrator: Смотритель не стал спорить. Это и было страшнее всего.
@board_link <a> <b>
Связать улики на доске расследования
Связывает две улики на доске расследования — момент, когда факты становятся версией.
astring- Первая улика.
bstring- Вторая улика.
The reader seesПлашка «Связь» с обеими уликами.
@board_link letter_without_signature typewriter_in_office
@cipher <puzzle>
Шифр/головоломка/замок как гейт
Шифр или замок как гейт. Работает, когда решение лежит в тексте истории, а не в изобретательности читателя; оставляйте обходной путь.
puzzlestring- Имя головоломки, латиницей.
The reader seesПлашка «Замок» с именем головоломки.
@cipher cellar_padlock
narrator: Четыре цифры. Дата на надгробии подходила.
@clue_add <clue>
Добавить улику/доказательство
Добавляет улику. Улики — флаг типа set, поэтому условие на них пишется обычным способом, а повтор ничего не портит.
cluestring- Имя улики, латиницей. Идентификатор показывается читателю: подчёркивания заменяются пробелами, первая буква становится заглавной (
old_photo→ «Old photo»). Поэтому пишите его так, как он должен читаться.
The reader seesПлашка «Улика» с именем улики.
@clue_add letter_without_signature
narrator: Письмо было напечатано, но подписи не было.
@examine <hotspot> [image] [@alt <alt>]
Осмотр точки интереса (hotspot)
Осмотр точки интереса. За осмотром обычно стоит улика.
hotspotstring- Что осматривают, латиницей.
imageasset, optional- Идентификатор изображения, если осмотр показывает картинку.
@altstring, named- —
@examine desk_drawer
narrator: В ящике лежала вторая половина фотографии.
@interrogate <npc>
Допрос с детекцией лжи/правды
Допрос. Ложь собеседника должна быть распознаваема по уликам: у каждой лжи нужна улика-опровержение, иначе это шум.
npcstring- Имя персонажа, латиницей.
The reader seesПлашка «Допрос» с именем персонажа.
@interrogate the_caretaker
the_caretaker: Я ушёл в девять. Как всегда.
@map_move <location>
Переход по локации на карте
Перемещение по локации на карте. Хорошо работает петлёй с накоплением; следите, чтобы из круга локаций вела хотя бы одна дорога наружу.
locationstring- Имя локации, латиницей. Идентификатор показывается читателю: подчёркивания заменяются пробелами, первая буква становится заглавной (
old_photo→ «Old photo»). Поэтому пишите его так, как он должен читаться.
@map_move old_pier
narrator: На пирсе пахло соляркой и рыбой.
Relationships 3Nightfall Stories
@companion <npc> <action>
Спутник присоединяется/уходит
Спутник присоединяется или уходит. Уход, заслуженный поведением читателя, работает сильнее ухода по сюжету — поэтому чаще всего он стоит под условием на отношение.
npcstring- Имя персонажа, латиницей — то же, что в
@relation. actionenum- Присоединяется или уходит.
join·leave
The reader seesПлашка «Спутник с тобой» или «Спутник ушёл» с именем персонажа.
@set trust_anna = 0
@if trust_anna < 2
@companion anna leave
anna: Дальше сам.
@npc_remember <npc> <key>
Память NPC: запомнить выбор
Записывает конкретный выбор в память персонажа, чтобы отыграть его позже репликой. Отличается от @relation тем, что хранит не число, а факт.
npcstring- Имя персонажа, латиницей.
keystring- Имя воспоминания, латиницей — по нему вы потом строите условие.
The reader seesНичего: это скрытая пометка, которая проявится в более поздней сцене.
@npc_remember anna did_not_turn_around
narrator: Анна ничего не сказала. Но запомнила.
@relation <npc> <axis> <op> <amount>
Отношение NPC (доверие/страх/романтика/подозрение)
Меняет отношение персонажа по одной из осей. Оси независимы: страх и недоверие ведут к разному поведению, и одной общей шкалой «отношение» их не выразить.
npcstring- Имя персонажа, латиницей. Придумываете вы; связывать его с чем-либо заранее не нужно.
axisenum- Ось отношения.
trust·fear·romance·suspicion openum- Как изменить значение.
+·-·= amountint- На сколько.0…∞
The reader seesПлашка «Отношение» с именем персонажа и направлением изменения.
@relation anna trust + 1
anna: Ладно. Верю.
Progression 3Nightfall Stories
@achievement <id>
Разблокировать достижение
Отмечает достижение как открытое. Достижения не объявляются заранее: список собирается из того, что история назвала, и остаётся у читателя после прохождения.
idstring- Ваше имя достижения, латиницей. Идентификатор показывается читателю: подчёркивания заменяются пробелами, первая буква становится заглавной (
old_photo→ «Old photo»). Поэтому пишите его так, как он должен читаться.
The reader seesВсплывающая плашка «Достижение» с именем достижения.
@achievement never_looked_back
narrator: Он не обернулся ни разу за всю дорогу.
@codex_unlock <entry>
Открыть запись кодекса/журнала лора
Открывает запись в журнале лора. Запись переживает прохождение, поэтому годится как приглашение вернуться: читатель видит ссылку на событие, которого не нашёл.
entrystring- Имя записи, латиницей. Идентификатор показывается читателю: подчёркивания заменяются пробелами, первая буква становится заглавной (
old_photo→ «Old photo»). Поэтому пишите его так, как он должен читаться.
The reader seesЗапись появляется в журнале; плашки при этом нет.
@codex_unlock ritual_of_the_seventh_door
narrator: В тетради нашлась схема, нарисованная чужой рукой.
@ending_mark <ending>
Отметить коллекционируемую концовку
Отмечает концовку как найденную, для счётчика «найдено N из M». Знаменатель считается по объявленным в истории концовкам, поэтому перед публикацией проверьте бот-обходом, что все они достижимы.
endingstring- Имя концовки — то же, что стоит в
@end. Идентификатор показывается читателю: подчёркивания заменяются пробелами, первая буква становится заглавной (old_photo→ «Old photo»). Поэтому пишите его так, как он должен читаться.
The reader seesПлашка «Концовка открыта» с именем концовки, счётчик найденных увеличивается.
@ending_mark buried_alive
@end buried_alive