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

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

Персонаж: имя и портрет

Как персонаж появляется в истории: реплика с именем, эмоция, спрайт и его место на экране.

Отдельной сущности «персонаж» в формате нет. Персонаж — это две независимые вещи, которые вы связываете сами: имя в реплике и портрет в директиве.

Ничего не нужно объявлять заранее: имя работает с первой же реплики, портрет — с первого @sprite.

Имя

Слово до двоеточия. Читатель видит его плашкой над репликой.

Марк: Кто здесь?
движок принял line

Имя — отображаемый текст, а не идентификатор: любой алфавит, пробелы, любые буквы. Смотритель, Голос из-за двери, Марк (не он) — всё это допустимые имена.

narrator зарезервирован. Реплика от него выходит без плашки — это повествование:

narrator: Дверь была приоткрыта.
Марк: Кто здесь?
движок принял line×2

Имя можно подставить флагом, если читатель называет героя сам:

@input hero "Как вас зовут?"
{hero}: Я вернулся.
движок принял lineinput

Подробно — подстановка {flag}.

Эмоция

В скобках после имени. Доезжает до читателя отдельным полем, а не частью текста:

mark (fear): Здесь кто-то был.
движок принял line

⚠️ Идентификатор эмоции — только латиницей. Марк (страх): сейчас не разбирается, хотя само имя кириллицей работает.

Портрет

Картинка загружается в ресурсы истории и получает идентификатор. В тексте вы пишете идентификатор, а не имя файла:

@sprite mark_calm left @alt "Марк, мокрая куртка, смотрит в сторону"
Марк: Я в порядке.
движок принял lineeffect

@alt — описание для скринридера. Для спрайта описывайте состояние, а не только кто это: смена портрета — это событие, и в линеаризованном виде оно существует только через подпись (alt-текст).

Места на экране

Три слота: left, center, right. Без указания слота портрет встаёт в center.

@sprite mark_calm left @alt "Марк слева"
@sprite anna_wary right @alt "Анна справа, руки в карманах"
Марк: Ты первая.
Анна: Я подожду.
движок принял line×2effect×2

Повторный @sprite в тот же слот заменяет того, кто там стоял, с перекрёстным растворением. @sprite_hide left убирает портрет из слота.

Имя и портрет не связаны

Движок не знает, что mark_calm — это тот же Марк, что говорит в реплике. Он рисует портрет там, где вы поставили @sprite, и плашку с тем именем, которое стоит в строке.

Практически это значит:

Несколько состояний одного персонажа

Каждое состояние — отдельная картинка со своим идентификатором. Договоритесь об именовании сразу, иначе через две главы вы не вспомните, что чем было:

@sprite mark_calm left @alt "Марк, спокоен"
Марк: Всё нормально.
@sprite mark_scared left @alt "Марк, отшатнулся, смотрит за спину рассказчику"
Марк: Не оборачивайся.
движок принял line×2effect×2

Что дальше