Условия (condition)
Условия — универсальный язык, который используется буквально везде: в вариантах текста стадии (texts), в
переходах (transfers), в точках на карте, в отрядах NPC и в чекпоинтах заданий. Выучив его один раз, вы
сможете управлять видимостью и доступностью чего угодно в игре — без кода.
Условие — это объект вида { ключ: [значение] }. Пустой объект {} означает «условие всегда выполнено».
Проверка наличия (has / !has)
{ "has": ["дело_сидоровича"] }
{ "!has": ["дело_сидоровича"] }
has проверяет, есть ли у игрока в инвентаре предмет или произвольный текстовый флаг. Флаг — это просто
строка-метка без визуального представления, которую можно выдать действием add и
использовать как «переменную состояния» истории (например, "дело_сидоровича" как отметку «квест начат»).
!has — отрицание: условие выполняется, если у игрока нет такого предмета/флага.
Это самый частый способ хранить прогресс истории: не нужен отдельный механизм «стадий состояния» — прогресс целиком описывается набором флагов и предметов в инвентаре.
Сравнение переменных
{ "money>=": ["500"] }
{ "xp<": ["1000"] }
{ "Разум>=": ["1"] }
Ключ — это <имя_переменной><оператор>, доступные операторы: =, ==, ===, !=, <, <=, >, >=.
Встроенные переменные — money (деньги) и xp (опыт), но можно использовать и собственное имя переменной,
заведённое автором истории (как Разум в примере выше) — движок хранит такие пользовательские счётчики в
параметрах игрока (parametersMap) наравне со встроенными.
Собственные числовые переменные удобны для морали/репутации персонажа, счётчика выполненных заданий фракции,
уровня доверия конкретного NPC и т.п. — всего, что не сводится к простому «есть/нет предмета». Меняются такие
переменные действием add с числовым значением.
Как выбирается подходящий вариант
Условия в списках (texts, transfers) проверяются по порядку, побеждает первый подошедший элемент.
Поэтому специфичные условия принято ставить в начало списка, а вариант «по умолчанию» (condition: {}) —
в конец.
Где ещё используются условия
| Где | Эффект условия |
|---|---|
texts[].condition | Какой вариант текста показать |
transfers[].condition | Показывать ли этот вариант ответа/перехода |
Точка на карте (points[].condition) | Видна ли точка на карте игроку прямо сейчас |
Отряд NPC (spawns[].condition) | Появляется ли отряд на локации |
Чекпоинт задания (checkpoints[].condition) | Засчитан ли этап задания |
Например, точка на карте с условием { "has": ["ключ_от_склада"] } физически не отображается на карте, пока
игрок не получит ключ, — и появляется сама, без дополнительного кода, как только условие выполняется.
Далее
- Действия — что меняет флаги/переменные, которые проверяют условия.
- Переменные и флаги — как проектировать систему флагов истории.