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).

1-Разметка линейного текста

Итоговые аннотации к нарративным юнитам

Я решил не готовить линейный текст к диалоговому формату, перенося его как есть и подвергая минимальной обработке в Aritcy и отмечая аннотациями те места, которые потребуют дальнейшей обработки и ветвления.

Мне это решение показалось резонным, потому что сам текст финальный по смыслу и весь «канонический» сюжет готов от начала до конца. Но на этой стадии я ещё не решил где будут выборы, где и какие переменные будут меняться, а размечать такие вещи удобнее уже в Articy, а не в текстовом документе.

Я ввожу несколько условных типов комментов-аннотаций:

TASK: описание задачи, типа здесь надо сделать то-то, например, добавить целый вводный диалог.

CHOICE: здесь пока одно продолжение диалога, взятое из линейного текста, но потом здесь должно быть несколько диалоговых выборов.

REVEAL: важный флаг получения игроком информации. Скорее всего, переменная, но не факт.

VARIABLES: здесь будут меняться переменные, по мере того, как я придумаю, что и где будет меняться.

Эти аннотации вступают друг с другом в мысленный «нахлёст»: например CHOICE может подразумевать, что тут будут и переменные меняться и какая-то информация раскрываться. А TASK может быть сколь угодно ничтожным (переписать пару фраз) или сколь угодно огромным (добавить целый отдельный диалог). Важно понимать что это просто стартовая заметка для работы над определённым участком.

1-Разметка линейного текста

Это всё заметки на ходу, и дальнейшая работа над ними будет проходить, когда сам линейный каркас будет полностью перенесён. Хорошие идеи часто возникают на ходу, надо только успевать их фиксировать и детально прописывать, потому что будущий Я ничего не вспомнит, что хотел.

Порядок выполнения задач — пример нелинейности

Заниматься этим очень увлекательно, я даже не ожидал, что меня так затянет, и всё же тупо перенос текста — та ещё рутина. До тех пор, пока не начинается нелинейность.

Например, герой вначале может осмотреть место преступления, а затем поговорить с подозреваемым. А может вначале поговорить с подозреваемым, а затем осмотреть место преступления. Это не ветвление в обычном смысле, когда мы идём по одному или другому пути. Оба этих варианта будут доступны, и игрок выбирает лишь порядок прохождения активности. Это будет влиять на несколько переменных, но в итоге игрок снова выходит на линейную тропку. После их прохождения, активности, понятное дело, должны закрываться: их повторное прохождение недопустимо.

В итоге то что кажется простым (порядок действий и пара переменных, ну камон), превращается вот в это:

1-Разметка линейного текста

Ёхохо-мазафака, а ведь я ещё толком и не начинал. В самом начале, когда я думал, «ну у меня то уж не будет супер-дупер вариативности», я и не полагал, как быстро и бесконтрольно всё это может разрастаться при первых намёках на нелинейность.

P.S. В следующий раз расскажу о специфике перевода литературного текста в «интерактивный диалоговый».

15
6 комментариев