1-Разметка линейного текста
Начну с самой скучной темы — переноса линейного текста в Articy и нарративных юнитов.
Исходная задача: передо мной линейный текст, который мне нужно перенести в Articy, чтобы потом позже превратить в интерактивное повествование.
Нарративные юниты
Нарративный юнит (далее NU) я определяю как минимальный кусок повествования: фраза диалога, действие или минимальное описание. То, что будет появляться между пользовательскими выборами или кликами игрока на кнопку «Далее».
Нарративный юнит может иметь типизацию: быть обычным куском текста, быть действием, вариантом выбора, новой информацией. Для чего мне типы NU? Всё это нужно, чтобы потом понимать, что я буду делать с этим текстом.
«Пустые» NU без типа — это просто средство для возможного наложения типа в будущем. Но не факт что он будет, важно что отдельный NU существует для такой возможности. Пока что это просто кусочек текста между нажатиями игроком кнопки «Далее» (минимум интерактивности).
CHOICE — это выборы, места где будет ветвление диалогов, что означает, что к линейному тексту мне нужно будет дописывать дополнительный текст и реакции на него.
TRANSITION — это переход между сценами, здесь тоже часто логика бывает — например, это моменты, когда экран может постепенно угасать на пару секунд, происходит перемотка времени в духе «прошло столько-то», непосредственно описание и отображение новой сцены.
REVEAL — места, в которых игрок получает информацию, узнаёт что-то (переключаем булевы переменные, хоть и не всегда это нужно). Даже если при этом не переключаются никакие переменные, это может быть информация для игрока, влияющая на его поздние решения. К тому же, даже если переменной здесь нет сейчас, вовсе не факт, что я не решу добавить её в будущем.
DIALOG\ACTION — А какой смысл в разделении dialog и action? По сути это тоже равноправные куски контента, разница не ключевая, но между ними есть нюансы: прежде всего, они должны по разному показываться в диалоге, чтобы игрок мог отличать, что есть действие, а что фраза. Помимо этого, диалог чаще: зависит от отношений, имеет вариативность, может ветвиться внутри сцены, может переиспользоваться (при возврате в корень диалоговых выборов). Действие чаще: линейное, фиксирует факт, реже ветвится, реже переиспользуется. (Как показала дальнейшая практика, этот тип NU всё же избыточен).
Нуждается ли этот текст в разметке или стоит вначале перенести всё в Articy и всю дальнейшую работу провести уже там?
Здесь идёт борьба между двумя мнениями:
Нет — возможно я слишком всё усложняю для такого небольшого проекта, и настолько детальная типизация мне не нужна.
Да — возможно позже я пожалею, что не разделил NU на типы с дополнительными нюансами.
Я не стал размечать текст целиком, но всё же решил потренироваться немного, буквально на нескольких абзацах в том, как вообще текст в принципе может размечаться. Результатом этого короткого эксперимента как раз и стали типы нарративных юнитов, приведённые выше.
А ниже — пример разметки.
Исходный текст:
— Один человек покинул круг
Размеченный текст:
[REVEAL] [DIALOG]
— Один человек покинул круг
[CHOICE]
Проигнорировать / задать уточняющий вопрос
С размеченным текстом тупо проще работать в дальнейшем.
Но это всё чисто для тренировки. Довольно быстро стало понятно: если делать разметку вначале в тексте, а потом в Articy, то получится в значительной мере двойная работа. Но это даёт примерное понимание и практику: прикинув, какие типы возможны и потренировавшись, уже можно переносить текст прямо в Articy, не делая предварительную разметку — всё на ходу.
Articy Draft
В первые десять минут ничего не понятно. Но когда разбираешься в базовых вещах, всё становится предельно ясно и даже удобно. Ещё через десять минут всё превращается в рутину, но лишь до тех пор, пока не начинаешь добавлять что-то более сложное, чем фрагменты диалога.
Шпаргалка по элементам, которую я составил для себя чтобы не забыть, но вышло так, что уже через десять минут всё запомнил:
- Сцена — Dialogue
- Нарративный юнит — Dialogue Fragment
- Переход — Jump
- Развилка маршрутов — Hub
- Проверка — Condition
- Изменение состояния — Instruction
Dialogue Fragment и его поля
Dialogue Fragment — это база, из которой на 90% или больше состоит всё. В нём есть три поля.
- Menu Text — интерфейс выбора. Это диалоговая опция, которую увидит игрок. Как в диалоговом колесе, Cyberpunk 2077 или Witcher 3. «Glass him», в общем, в таком духе.
- Stage Directions — исполнение сцены. Это заметки для озвучки или анимации. Кто-то вздохнул, опустил голову или что-то в таком духе.
- Dialogue Text — это полный текст, который отобразится перед игроком, когда он выберет диалоговую опцию.
Так как в моём случае я делаю не диалоговое колесо, а следую принципу «что игрок выберёт, то он в точности и получит» (WYSIWYG), то по сути я получаю лишнее поле, для которого есть соблазн придумать собственное назначение, например для разных заметок и аннотаций. Но это антипаттерн, так делать не надо. Это поле относится к данным, а не к метаданным, участвует в UI/локализации. В общем загрязнять данные не стоит.
Но и дублировать, заполняя оба поля одинаковым текстом не стоит. Двойная работа, технический долг. Лучше смириться и оставить пустым. Либо отказаться от (WYSIWYG) и следовать современным трендам.
Пока что иду путём наименьшего сопротивления — заполняю одно поле из трёх — собственно, сам текст диалога (NU).
Итоговые аннотации к нарративным юнитам
Я решил не готовить линейный текст к диалоговому формату, перенося его как есть и подвергая минимальной обработке в Aritcy и отмечая аннотациями те места, которые потребуют дальнейшей обработки и ветвления.
Мне это решение показалось резонным, потому что сам текст финальный по смыслу и весь «канонический» сюжет готов от начала до конца. Но на этой стадии я ещё не решил где будут выборы, где и какие переменные будут меняться, а размечать такие вещи удобнее уже в Articy, а не в текстовом документе.
Я ввожу несколько условных типов комментов-аннотаций:
TASK: описание задачи, типа здесь надо сделать то-то, например, добавить целый вводный диалог.
CHOICE: здесь пока одно продолжение диалога, взятое из линейного текста, но потом здесь должно быть несколько диалоговых выборов.
REVEAL: важный флаг получения игроком информации. Скорее всего, переменная, но не факт.
VARIABLES: здесь будут меняться переменные, по мере того, как я придумаю, что и где будет меняться.
Эти аннотации вступают друг с другом в мысленный «нахлёст»: например CHOICE может подразумевать, что тут будут и переменные меняться и какая-то информация раскрываться. А TASK может быть сколь угодно ничтожным (переписать пару фраз) или сколь угодно огромным (добавить целый отдельный диалог). Важно понимать что это просто стартовая заметка для работы над определённым участком.
Это всё заметки на ходу, и дальнейшая работа над ними будет проходить, когда сам линейный каркас будет полностью перенесён. Хорошие идеи часто возникают на ходу, надо только успевать их фиксировать и детально прописывать, потому что будущий Я ничего не вспомнит, что хотел.
Порядок выполнения задач — пример нелинейности
Заниматься этим очень увлекательно, я даже не ожидал, что меня так затянет, и всё же тупо перенос текста — та ещё рутина. До тех пор, пока не начинается нелинейность.
Например, герой вначале может осмотреть место преступления, а затем поговорить с подозреваемым. А может вначале поговорить с подозреваемым, а затем осмотреть место преступления. Это не ветвление в обычном смысле, когда мы идём по одному или другому пути. Оба этих варианта будут доступны, и игрок выбирает лишь порядок прохождения активности. Это будет влиять на несколько переменных, но в итоге игрок снова выходит на линейную тропку. После их прохождения, активности, понятное дело, должны закрываться: их повторное прохождение недопустимо.
В итоге то что кажется простым (порядок действий и пара переменных, ну камон), превращается вот в это:
Ёхохо-мазафака, а ведь я ещё толком и не начинал. В самом начале, когда я думал, «ну у меня то уж не будет супер-дупер вариативности», я и не полагал, как быстро и бесконтрольно всё это может разрастаться при первых намёках на нелинейность.
P.S. В следующий раз расскажу о специфике перевода литературного текста в «интерактивный диалоговый».