Руководство по NVL-режиму
Существует два основных стиля представления, используемых в визуальных новеллах. Игры в стиле ADV представляют диалоги и повествование по одной строке за раз, обычно в окне в нижней части экрана. Игры в стиле NVL представляют несколько строк на экране одновременно, в окне, которое занимает весь экран.
В этом руководстве мы объясним, как создать игру в NVL-режиме с помощью Ren'Py. Предполагается, что вы уже знакомы с основами Ren'Py, изложенными в руководстве для начинающих.
Начало работы
NVL-режим можно добавить в скрипт Ren'Py за два шага. Первый —
объявить персонажей для использования NVL-режима, а второй — добавить операторы nvl
clear в конце каждой страницы.
Персонажи могут быть объявлены для использования NVL-режима путём добавления параметра kind=nvl
к каждому объявлению Character. Например, если мы используем
объявления персонажей из руководства для начинающих:
define s = Character('Sylvie', color="#c8ffc8")
define m = Character('Me', color="#c8c8ff")
Для использования NVL-режима эти объявления становятся:
define s = Character('Sylvie', kind=nvl, color="#c8ffc8")
define m = Character('Me', kind=nvl, color="#c8c8ff")
Рассказчик в NVL-режиме также может быть использован путём включения следующего определения:
define narrator = nvl_narrator
Обратите внимание, что мы также добавили объявление NVL-режима для
narrator. Персонаж narrator используется для произнесения
реплик, которые не связаны с именем другого персонажа.
Если мы запустим игру в таком виде, первые несколько строк будут отображаться
нормально, но через некоторое время строки начнут появляться ниже
нижней границы экрана. Чтобы разбить скрипт на страницы, включите оператор nvl
clear после каждой страницы.
Ниже приведён пример скрипта с разбивкой на страницы:
label start:
"I'll ask her..."
m "Um... will you..."
m "Will you be my artist for a visual novel?"
nvl clear
"Silence."
"She is shocked, and then..."
s "Sure, but what is a \"visual novel?\""
nvl clear
Хотя в играх NVL-режима обычно больше текста в абзаце, этот пример демонстрирует базовый скрипт NVL-режима. (Подходит для использования в кинетической новелле без переходов.)
Режим монолога также работает с NVL-режимом.
Включение текстового тега {clear} в отдельной строке эквивалентно
оператору nvl clear, не выходя из режима монолога. Например:
label start:
s """
This is one block of text in monologue mode.
This is a second block, on the same page as the first.
{clear}
The page just cleared!
"""
Отображение и скрытие окна NVL-режима
Окном NVL-режима можно управлять с помощью стандартных операторов window show
и window hide. Чтобы выбрать переходы по умолчанию, которые будут использоваться для отображения и скрытия окна, добавьте в свою игру следующее:
init python:
config.window_hide_transition = dissolve
config.window_show_transition = dissolve
Переменная config.empty_window по умолчанию должна выбирать подходящее окно
автоматически, но установка config.empty_window в nvl_show_core
принудительно отобразит окно NVL-режима во время перехода.:
init python:
config.empty_window = nvl_show_core
Пример использования команд окна для его отображения и скрытия:
label meadow:
nvl clear
window hide
scene bg meadow
with fade
window show
"We reached the meadows just outside our hometown. Autumn was so
beautiful here."
"When we were children, we often played here."
m "Hey... ummm..."
window hide
show sylvie smile
with dissolve
window show
"She turned to me and smiled."
"I'll ask her..."
m "Ummm... will you..."
m "Will you be my artist for a visual novel?"
Существуют также явные команды nvl show и nvl hide, которые показывают
и скрывают окно NVL-режима. Они принимают необязательный переход и могут
использоваться в играх, которые используют смешение окон NVL-режима и ADV-режима.
Настройка персонажей
Персонажи в NVL-режиме могут быть настроены так, чтобы иметь несколько видов, что, надеюсь, позволит вам выбрать тот, который наиболее подходит для создаваемой вами игры.
Внешний вид по умолчанию: имя персонажа слева, а диалог с отступом справа от имени. Цвет имени контролируется параметром ''color''.
define s = Character('Sylvie', kind=nvl, color="#c8ffc8")
Второй вид: имя персонажа встроено в текст. Диалог, произносимый персонажем, заключается в кавычки. Обратите внимание, что здесь имя персонажа помещается в параметр ''what_prefix'', вместе с открывающей кавычкой. (Закрывающая кавычка помещается в параметр ''what_suffix''.)
define s = Character(None, kind=nvl, what_prefix="Sylvie: \"", what_suffix="\"")
Третий вид полностью обходится без имени персонажа, при этом диалог заключается в кавычки.
define s = Character(None, kind=nvl, what_prefix="\"", what_suffix="\"")
Поскольку третий вид может затруднить распознавание того, кто говорит, мы можем окрасить диалог с помощью параметра ''what_color''.
define s = Character(None, kind=nvl, what_prefix="\"", what_suffix="\"", what_color="#c8ffc8")
Конечно, можно использовать полностью ненастроенного персонажа NVL-режима, если вы хотите полностью контролировать то, что отображается. (Это часто используется для рассказчика.)
define s = Character(None, kind=nvl)
Переменные конфигурации
Следующие переменные конфигурации управляют функциональностью, связанной с NVL.
- define config.nvl_layer = "screens"
Слой, на котором отображаются экраны nvl.
- define config.nvl_list_length = None
Если не None, это максимальная длина списка диалогов NVL. Это можно установить (часто в сочетании с принудительной установкой фиксированной высоты диалогового окна), чтобы эмулировать бесконечно прокручивающееся окно NVL.
- define config.nvl_page_ctc = None
Если не None, это индикатор «нажмите, чтобы продолжить», который используется для персонажей в режиме NVL в конце страницы. (То есть сразу за которым следует оператор nvl clear.) Это заменяет параметр ctc функции
Character().
- define config.nvl_page_ctc_position = "nestled"
Если не None, это позиция индикатора «нажмите, чтобы продолжить», которая используется для персонажей в режиме NVL в конце страницы. (То есть сразу за которым следует оператор nvl clear.) Это заменяет параметр ctc_position функции
Character().
- define config.nvl_paged_rollback = False
Если true, откат (rollback) в режиме NVL будет происходить по одной полной странице за раз.
Функции Python
- nvl_clear()
Python-эквивалент инструкции
nvl clear.
- nvl_hide(with_)
Python-эквивалент инструкции
nvl hide.- with_
Переход, используемый для скрытия окна в режиме NVL.
Python-функция, которая отображает меню в стиле NVL. Она редко используется напрямую. Вместо этого она присваивается переменной
menu, используя что-то вроде:define menu = nvl_menu
- nvl_show(with_)
Python-эквивалент инструкции
nvl show.- with_
Переход, используемый для отображения окна в режиме NVL.
Постраничный откат
Постраничный откат заставляет Ren'Py откатываться на одну страницу NVL-режима за раз, а не на один блок текста за раз. Его можно включить, добавив в скрипт следующее.
init python:
config.nvl_paged_rollback = True
Скрипт The Question (издание в NVL-режиме)
Вы можете просмотреть полный скрипт NVL-режимной версии ''The Question'' здесь.