Диалоги нескольких персонажей

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, которые можно переупорядочить и представить.