Платформа NyxtaleПроверка истории
Достижимость и тупики
Недостижимые узлы, тупики, ловушки-циклы: что это значит в тексте истории.
Структурные проверки читают историю как граф: узлы и переходы. Каждая находка указывает на конкретный узел.
Тупик — NSX_DEAD_END
Узел, из которого нет ни следующего шага, ни выбора, ни @end: читатель дочитывает реплику, дальше
ничего не происходит.
@label cellar
narrator: Дверь погреба захлопнулась за спиной.
Чинится переходом или концовкой:
@label cellar
narrator: Дверь погреба захлопнулась за спиной.
@end buried
Битая ссылка — NSX_BROKEN_REF
-> inside, а метки inside нет. Проверка называет узел,
из которого ведёт ссылка, и имя, которого не нашла.
Недостижимый узел — NSX_UNREACHABLE
От входа в сцену до узла нет ни одной дороги: текст написан, компилируется и никогда не будет прочитан.
Две обычные причины: развилку переписали, а старый текст остался ниже; или метку добавили, а перехода на неё ещё нет. Какая из двух — видно по узлу.
Недостижимая концовка — NSX_UNREACHABLE_END
Концовка написана, но ни один маршрут в неё не приводит. Читатель её не увидит, а в счётчике «найдено концовок» она остаётся в знаменателе: история выглядит непройденной, хотя пройдена вся.
Чаще всего причина в арифметике, а не в графе — условие на входе выше, чем можно накопить:
@set trust = 0
@set trust += 1
@if trust >= 5 -> forgiven
@end alone
Если trust за историю поднимается максимум до трёх, forgiven мертва. Такие случаи находит
бот-обход — он считает, до чего доходит состояние на каждом пути.
Ловушка-цикл — NSX_TRAP_CYCLE
Группа узлов, по которым можно ходить кругами, и ни из одного нет дороги к концовке. Читатель ходит, что-то происходит, и не сразу понимает, что выхода нет.
Сам по себе цикл законен — комната, куда возвращаются, разговор с несколькими темами. Ошибка появляется, когда из круга не ведёт ни одна дорога наружу; обычно теряется одно ребро, например опция «уйти», удалённая при правке меню.
Пустой выбор — NSX_EMPTY_CHOICE
Узел выбора без единой доступной опции: все удалены или все скрыты условием, которое на этом пути ложно.
Опция под @if пустоты не создаёт — движок покажет меню без неё.
Флаги
| Код | Что означает |
|---|---|
NSX_UNKNOWN_FLAG |
имени нет в схеме — обычно опечатка |
NSX_READ_BEFORE_WRITE |
есть маршрут, где флаг читают раньше, чем задают |
NSX_FLAG_TYPE |
сравнение строки с числом, добавление элемента к int |
Подробно — флаги и выражения.
Что дальше
Перечисленное видно по структуре. Ошибки времени выполнения, петли и экономику выборов находит бот-обход.