Персонажи
Эта статья о создании новых персонажей; о ванильных персонажах см. страницу ресурсов игры.
Ранее мы уже разобрали, как выводить реплики персонажей, теперь давайте разберём, как создавать своих персонажей, чтобы говорить от их лица.
Для лучшего понимания содержимого статьи советуем прочитать статью о переменных.
Создание своих персонажей
Чтобы создать своего персонажа, достаточно объявить новую переменную и вызывать её в повествовании.
Для создания персонажа используется функция1 Character.
Синтаксис:
init: # При инициализации...
$ <Название переменной> = Character("<Имя персонажа>", kind=<Родительский персонаж>, <Прочие аргументы>)
# В повествовании...
<Название переменной> "<Реплика персонажа>"
# ...
Если у персонажа есть свой родитель2, то он будет наследовать его свойства.
Чаще всего это называется наследованием.
Пример:
init:
$ test_char = Character("Пример", kind=sl)
Персонаж в примере позаимствует от sl (Слави) цвет имени и стиль текста реплики3, но имя у него будет новое — "Пример".
Если вы хотите наследовать оригинальный стиль реплики и иметь возможность быстро менять режим повествования, то рекомендуется всегда наследоваться от ванильных4 персонажей (лучше всего от narrator).
Персонаж-шаблон
Используя наследование, можно создать шаблон персонажа, который можно будет использовать для создания других персонажей со свойствами одного общего родителя.
Пример:
init:
$ template = Character(None, what_color="#F00", what_underline=True, what_bold=True) # Родительский персонаж
$ test_char = Character("Пример", kind=template) # Дочерние персонажи
$ test_char_2 = Character("Пример 2", kind=template)
Реплики персонажей test_char и test_char_2 в примере будут красными, подчёркнутыми и полужирными, несмотря на то, что имеют разные имена.
NVL-персонаж
Наследуйте вашего персонажа от nvl, если хотите, чтобы он использовал экран NVL для вывода реплик.
При этом если наследоваться от любого ванильного персонажа (лучше всего от narrator), то менять режим повествования можно так же, как и для ванильных персонажей, с помощью $ set_mode_nvl().
init:
$ test_char = Character("Пример", kind=narrator)
# ...
test_char "Здесь будет обычная реплика."
$ set_mode_nvl()
test_char "А здесь - реплика в NVL-режиме."
# ...
Свойства персонажа
Здесь будут рассматриваться самые часто используемые свойства, которые можно применить к персонажу. Полный список смотрите на странице официальной документации Ren'Py.
Префиксы и постфиксы имени и реплик
Аргументы who_prefix, who_suffix, what_prefix и what_suffix позволяют добавлять текст в начале и конце имени и реплик персонажа.
Пример:
init:
$ test_char = Character("Пример", who_prefix="1", who_suffix="2", what_prefix="3", what_suffix="4")
Персонаж в примере будет иметь цифру "1" перед именем, "2" после имени, "3" перед репликами и "4" после реплик.
label test_label:
test_char "Привет!" #1Пример2 "3Привет!4"
Свойства стиля
Прочие аргументы функции Character, начинающиеся с who_, what_ и window_, очищаются от префикса и используются для применения свойств стиля к тексту имени, тексту реплик и окну соответственно.
Пример:
init:
$ test_char = Character("Пример", who_color="#F00", what_underline=True)
Персонаж в примере будет иметь полностью красный цвет имени, а текст реплик будет подчёркнут.
Таким же образом к тексту имени, тексту реплик или окну можно применить целые стили.
Пример:
init:
$ test_char = Character("Пример", who_style="my_style")
Создание прокси-функций
Текст ниже может показаться непонятным людям без знаний в языке Python. Для наилучшего понимания просим ознакомиться с любым гайдом по языку Python.
Так же, как и персонажей, можно использовать простые функции, которые уже будут обращаться к другим персонажам.
Такая функция принимает аргументы в виде самой реплики (what) и прочих именованных аргументов (kwargs).
Пример:
init python:
def test_func_char(what, **kwargs):
if len(what) % 2 == 0: # Если в реплике чётное число символов...
narrator(what, **kwargs) # Говорит "narrator" - рассказчик
else: # Если нет...
th(what, **kwargs) # Говорит "th" - мысли ГГ
# ...
test_func_char "Чётное" # Скажет рассказчик
test_func_char "Нечётное" # Скажут мысли ГГ
# ... ↑ Пробел считается за символ
Сам по себе персонаж — это объект, метод __call__ которого принимает аргументы в виде реплики и прочих именованных аргументов.
Зная это, можно найти огромный простор для экспериментов с контролем над выводом реплик.
Больше информации
Получить больше информации о повествовании вы можете на странице официальной документации Ren'Py.
Главный объект, от которого заимствуются свойства. См.: Глоссарий / Родительский и дочерний объекты.
Ко всем оригинальным персонажам по умолчанию применён особый стиль текста реплики. Источник: Ресурсы оригинальной игры, game/media.rpy:615.
Оригинальный. См.: Глоссарий / Ваниль.