Диалоги нескольких персонажей
Ren'Py поддерживает одновременное отображение диалогов от нескольких персонажей. Множественный диалог вызывается путём передачи строкам диалога аргумента multiple. Например:
e "Ren'Py supports displaying multiple lines of dialogue simultaneously." (multiple=2)
l "About bloody time! I've been waiting for this for years." (multiple=2)
Множественный диалог вызывается путём передачи строке диалога аргумента multiple
с указанием количества объединяемых строк диалога. (Так, если бы у нас было multiple=3,
объединялись бы три блока диалога.)
Множественный диалог работает путём многократного отображения экрана say с различными стилями. Каждый экран say отвечает за отображение диалога одного персонажа.
Есть несколько ограничений для множественных диалогов:
При отображении множественного диалога текстовые теги, которые вызывают паузу в тексте, такие как {p} и {w}, не будут работать должным образом. Это связано с тем, что каждый экран отображается только один раз, а для работы этих тегов требуется многократное отображение экранов.
Режим автопрокрутки работает только для последнего блока текста. Хотя в большинстве случаев это не должно вызывать проблем, это может привести к проблемам, если последний блок текста короче остальных, так как автопрокрутка может включиться раньше времени.
Extend не будет работать. (Он применится только к последнему блоку текста.)
Стили
В общем, способ работы множественного диалога заключается в многократном отображении экрана say, при этом стили различных отображаемых объектов систематически переименовываются, чтобы отразить номер блока и общее количество блоков.
В частности, множественный диалог использует стили с именами вида blockn_multiplem_stylename, где n — это номер блока (начиная с 1, а не 0), а m — количество одновременно отображаемых блоков диалога.
В нашем примере выше окнам, соответствующим каждому блоку диалога, присваиваются имена:
block1_multiple2_say_window
block2_multiple2_say_window
Эта схема именования используется для диалога, имени и поля имени, а также для окна. Она разработана таким образом, чтобы здесь было полезно наследование стилей. Для стилей окна у нас будет:
- say_window
Используется в обычном случае одного диалогового окна, может служить базой для всех диалоговых окон.
- multiple2_say_window
Может использоваться для свойств, общих для двух диалоговых окон, таких как изменение фона и уменьшение полей и отступов.
- block1_multiple2_say_window
Может использоваться для позиционирования первого из двух диалоговых окон, например, используя xalign 0.0, чтобы разместить его слева.
- block2_multiple2_say_window
Аналогично, может использоваться для позиционирования второго окна, с xalign 1.0, чтобы разместить его справа.
Экран Multiple Say
Для большего контроля существует экран multiple_say. Когда он существует, экран multiple_say используется вместо обычного экрана say. Он принимает третий аргумент, multiple, который является кортежем. Первый компонент кортежа — это номер блока, а второй — общее количество экранов.
NVL-режим
По умолчанию NVL-режим отображает несколько текстовых блоков друг над другом. Это можно настроить, изменив экран nvl, которому передаётся список объектов с аргументом multiple, которые можно переупорядочить и представить.