Написание сценариев и диалоговых древ игр
Игровой сценарий — это не киносценарий с пробелами под реплики. Это технический документ с состояниями, условиями и ветвлениями, который одновременно читает нарратив-дизайнер и парсит движок диалогов. Написать сценарий, который хорошо звучит и при этом корректно реализуется без армии флагов и хардкода — задача, требующая понимания архитектуры с обеих сторон.
Структура диалогового древа: узлы, ребра, условия
Диалоговое древо — это ориентированный граф, а не дерево в строгом смысле: один узел может иметь несколько входящих связей, и к нему можно прийти из разных точек нарратива. Каждый DialogueNode хранит: speaker ID, текст реплики, список исходящих рёбер (DialogueEdge[]), опциональный список условий входа и список actions (триггеры событий игрового мира).
Условия — это проверки игрового состояния: QuestFlag("rescued_merchant") == true, PlayerLevel >= 5, Reputation("thieves_guild") > 30. Если ни одно условие входящей реплики не выполнено — ветка скрыта или заменяется fallback-репликой.
Actions — это воздействия на игровой мир: выдать квест, добавить предмет, изменить репутацию, воспроизвести анимацию, запустить кат-сцену. Actions прикрепляются к узлам или рёбрам (при выборе варианта ответа).
Это разделение на conditions и actions — основа любой нарративной системы. Не важно, реализовано ли это в Yarn Spinner, Ink, Dialogue System for Unity или кастомном редакторе — логика одна.
Yarn Spinner и Ink: реальная разница
Yarn Spinner — текстовый формат с синтаксисом, близким к Twine. Условия пишутся прямо в скрипте: <<if $player_level >= 5>>. Команды: <<jump NodeName>>, <<set $flag = true>>. Хорошо подходит для линейных диалогов с ветвлениями, легко редактируется писателями без технического бэкграунда. Интегрируется в Unity через официальный пакет с DialogueRunner компонентом.
Ink — более мощный язык с концепцией «knots» и «diverts», поддержкой счётчиков посещений (visited, visit_count) и weave-структурой для параллельных нарративных потоков. Используется в Disco Elysium, 80 Days, Heaven's Vault. Для сложных нарративов с отслеживанием истории взаимодействий Ink обычно чище.
Выбор инструмента зависит от нарративной сложности проекта: для 200 строк диалога в action-RPG достаточно Yarn Spinner; для нарративной игры с 100k+ слов и ветвящейся историей — Ink или кастомное решение.
Как писать реплики, которые работают технически
Каждая реплика должна функционировать без предыдущего контекста — потому что игрок может прийти к этому узлу из разных ветвей. Проверяется просто: прочитать реплику в изоляции. Если непонятно, о чём речь — нужен fallback-контекст или реструктуризация.
Варианты ответов не должны быть семантически пустыми. «Да», «Нет», «Расскажи больше» — это плохие варианты: они не передают характер игрока. «Я уже слышал об этом» / «Продолжай, мне интересно» / «Некогда — что нужно?» — это варианты с голосом персонажа.
Локализационные метки. Каждая строка получает уникальный ID (NPC_MERCHANT_GREETING_01) — не порядковый номер. При локализации переводчик видит контекст в ID, а не гадает что такое строка №847. Это стандартная практика при работе с LocalizationTable в Unity Localization пакете.
Нарративный дизайн: квесты и структура
Отдельный масштаб работы — написание квестовых диалогов с учётом состояний квеста. Один NPC может иметь разные реплики в зависимости от QuestState: NotStarted, InProgress, ObjectiveComplete, Turned In, Failed. Это минимум 5 версий диалогового древа на квест, или одно древо с условными ветвями на каждый state.
Типичная ошибка: написать диалоги только для NotStarted и InProgress, забыв про Turned In — и игрок после сдачи квеста слышит выдачу задания повторно. QA отлавливает, но правки требуют работы как нарратива, так и программиста.
Диалог как обучение механике. Самые эффективные tutorial-диалоги не говорят «нажми X для атаки» — они встраивают обучение в нарратив: «Покажи мне, как ты умеешь обращаться с мечом» с последующим принудительным энкаунтером. Сценарий и дизайн уровня пишутся вместе.
Ориентировочные сроки
| Масштаб | Объём | Срок |
|---|---|---|
| Малый | 1–3 квеста, ~500 строк диалога | 1–2 недели |
| Средний | Основной сюжет + побочки, ~3000–5000 строк | 1–2 месяца |
| Крупный | Полная нарративная система, 20k+ строк | 3–6 месяцев |
Процесс работы над сценарием
Начинаем с нарративного документа: кто персонаж, каковы его мотивации, что игрок должен узнать и почувствовать после диалога. Только после этого — структура узлов в инструменте (Yarn Spinner Visual Editor или Articy:Draft). Черновик диалога → техническое ревью на выполнимость условий и actions → правка → финальный текст.
Обязательный этап — тест всех ветвей вручную в редакторе с включёнными логами: какой узел загрузился, какое условие сработало. Это находит «мёртвые» ветки, к которым нет пути, и узлы без выхода, зависающие диалог.





