Руководство NVL-режима (NVL-Mode Tutorial)

Материал из Ren'Py Wiki
Перейти к навигации Перейти к поиску

Существует два основных стиля изложения материала, используемых в визуальных новеллах:

ADV
Визуальные новеллы, созданные в стиле ADV, представляют собой диалог и повествование, выводимые на экран по одной строке за раз, как правило, в окне, расположенном в нижней части экрана.
NVL
Визуальные новеллы, созданные в стиле NVL, представляют собой несколько строк на экране, выводимые одновременно в окне, которое занимает весь экран.


В данном руководстве мы расскажем, как с помощью Ren'Py создать игру, включающую NVL-режим. Предполагается, что вы уже знакомы с основами Ren'Py, о которых подробно рассказано в разделе «Краткое руководство».

Начало работы (Getting Started)[править | править код]

NVL-режим можно добавить в скрипт Ren'Py в два шага:

  • Объявите персонажей, используя NVL-режим.
  • Добавьте операторы nvl clear в конце каждой страницы выводимого текста.


Персонажей можно объявить с помощью NVL-режима, добавив параметр kind=nvl для каждого объявляемого Character. Например, если мы объявим персонажей из Краткого руководства:

define s = Character('Сильвия', color="#c8ffc8")
define m = Character('Я', color="#c8c8ff")

Используя NVL-режим, то объявление персонажей будет выглядеть так:

define s = Character('Сильвия', kind=nvl, color="#c8ffc8")
define m = Character('Я', kind=nvl, color="#c8c8ff")


В NVL-режиме также можно использовать персонажа-рассказчика, включив следующий код:

define narrator = nvl_narrator

Обратите внимание, что мы также добавили в NVL-режим narrator. Персонаж narrator используется для произнесения строк, с которыми не связано другое имя персонажа.


Если запустить игру таким образом, первые несколько строк отобразятся нормально, но через некоторое время строки начнут отображаться ниже нижней части экрана. Чтобы разбить скрипт на страницы, добавьте оператор nvl clear после каждой страницы.

Ниже приведен пример скрипта с разбиением на страницы:

label start:
    "Я спрошу её..."

    m "Эмм... Ты согласишься..."
    m "Согласишься быть художником для моей визуальной новеллы?"

    nvl clear

    "Молчание."
    "Она выглядела потрясено и затем..."

    s "Конечно, но что такое \"визуальная новелла?\""

    nvl clear

Хотя игры с NVL-режимом обычно содержат больше текста в абзаце, в этом примере демонстрируется базовый сценарий NVL-режима. Подходит для использования в кинетической новелле, в которой нет переходов.


Режим монолога работает и с NVL-режимом. Включение текстового тега {clear} в строку само по себе является эквивалентом оператора nvl clear без выхода из режима монолога. Например:

label start:

    s """
    Это один блок текста в режиме монолога.

    Это второй блок, на той же странице, что и первый.

    {clear}

    Страница только что очистилась!
    """

Меню NVL-режима (NVL-mode Menus)[править | править код]

По умолчанию меню отображаются в ADV-режиме, занимая весь экран. Существует также альтернативное представление меню в NVL-режиме, в котором меню отображаются сразу после текущей страницы текста NVL-режима.

Чтобы получить доступ к этой альтернативному представлению меню, напишите:

define menu = nvl_menu

Меню исчезнет после того, как сделан выбор, поэтому обычно имеет смысл использовать меню с nvl clear или каким-либо указанием на выбор.


Аргументы меню также могут использоваться для доступа к меню NVL-режима. Это достигается путём создания истинного аргумента nvl со значением True. Это полезно при смешивании меню NVL-режима и ADV-режима в одной игре.

menu (nvl=True):
    "Я предпочитаю NVL-режим.":
        pass

    "ADV-режим больше для меня.":
        pass

Отображение и скрытие окна в NVL-режиме (Showing and Hiding the NVL-mode Window)[править | править код]

Окном NVL-режима можно управлять с помощью стандартных операторов window show и window hide. Чтобы включить эту функцию, добавьте в игру следующий код:

init python:
    config.empty_window = nvl_show_core
    config.window_hide_transition = dissolve
    config.window_show_transition = dissolve

Если для переменной config.empty_window задать значение nvl_show_core, окно NVL-режима будет отображаться во время перехода. В последних двух строках выберите переходы по умолчанию, которые будут использоваться для отображения и скрытия окна.

Пример использования команд окна для отображения и скрытия окна:

label meadow:

    nvl clear

    window hide
    scene bg meadow
    with fade
    window show

    "Мы дошли до луга недалеко за пределами нашего родного города. Осень в этих местах
     была такой красивой."
    "Когда мы были детьми, мы часто играли здесь."

    m "Эй... Эммм..."

    window hide
    show sylvie smile
    with dissolve
    window show

    "Она обернулась и улыбнулась."
    "Я спрошу её..."
    m "Эмм... Ты согласишься..."
    m "Согласишься быть художником для моей визуальной новеллы?"


Кроме того, существуют команды nvl show и nvl hide, которые показывают и скрывают окна NVL-режима. Они принимают дополнительный переход и могут использоваться в играх, в которых используется сочетание окон NVL-режима и ADV-режима.

Настройка персонажей (Customizing Characters)[править | править код]

Персонажей в NVL-режиме можно настроить так, чтобы они выглядели по-разному, что, надеюсь, позволит вам выбрать тот, который наиболее подходит для создаваемой игры.

1. По умолчанию включает имя персонажа, расположенное слева, и диалог с отступом справа от имени. Цвет имени контролируется параметром color.
define s = Character('Сильвия', kind=nvl, color="#c8ffc8")
2. Здесь имя персонажа встроено в текст. Диалог, произнесенный персонажем, заключен в кавычки. Обратите внимание, что здесь имя персонажа помещается в параметр what_prefix, вместе с открытой кавычкой. Закрывающая кавычка помещается в параметр what_suffix.
define s = Character(None, kind=nvl, what_prefix="Сильвия: \"",
                     what_suffix="\"")
3. Третья форма полностью обходится без имени персонажа, помещая диалог в кавычки.
define s = Character(None, kind=nvl, what_prefix="\"", what_suffix="\"")
4. Поскольку третья форма может затруднить распознавание того, кто говорит, мы можем подкрасить диалог с помощью параметра what_color.
define s = Character(None, kind=nvl, what_prefix="\"", what_suffix="\"",
                     what_color="#c8ffc8")
5. Конечно, можно использовать в NVL-режиме совершенно ненастроенного персонажа, если вы хотите полностью контролировать то, что отображается. Это часто используется для персонажа-рассказчика.
define s = Character(None, kind=nvl)

Переменные конфигурации (Config Variables)[править | править код]

Следующие переменные конфигурации управляют функциональностью, связанной с 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, откат в NVL-режиме будет происходить на всю страницу за раз.

Функции в Python (Python Functions)[править | править код]

nvl_clear()
Эквивалент оператора nvl clear в Python.


nvl_hide(with_)
Эквивалент оператора nvl hide в Python.
with_
Переход, используемый для скрытия окна в NVL-режиме.


nvl_menu(items)
Функция в Python, которая отображает меню в NVL стиле. Редко используется напрямую. Вместо этого он присваивается переменной [[Переменные хранилища (Store Variables)menu, используя что-то вроде:
define menu = nvl_menu


nvl_show(with_)
Эквивалент оператора nvl show в Python.
with_
Переход, используемый для отображения окна в NVL-режиме.

Постраничный откат (Paged Rollback)[править | править код]

Постраничный откат приводит к тому, что за раз Ren'Py откатывает одну страницу NVL-режима, а не один блок текста. Этот откат можно включить, добавив в свой скрипт следующий код:

init python:
    config.nvl_paged_rollback = True

Скрипт новеллы «Вопрос» (Версия NVL-режима) (Script of The Question (NVL-mode Edition))[править | править код]

При желании можете ознакомиться с полным скриптом для NVL-режима новеллы «Вопрос».

Источник[править | править код]


На главную страницу Официальная документация движка Вернуться к началу статьи