목차

이전 항목

레이블 및 제어 흐름

다음 항목

그림 표시하기

링크


원문 보러 가기
오역 신고하기
Created using Sphinx.

대사와 내래이션

텍스트는 비주얼 노벨에서 가장 기본이 되는 요소이며, 이야기가 주된 게임에서 텍스트는 매우 중요합니다. 텍스트는 보통 화자의 이름이 붙어있는 대사 또는 화자가 없는 해설로 이루어져있습니다(이제부터는 둘의 차이가 크지 않은 이상, 대사와 해설을 묶어 대사라고 부르겠습니다). 또한 유저가 게임에 어울리는 모양으로 대사를 꾸미는 것도 중요합니다.

렌파이에서 대사는 거의 say 문으로 만들어집니다. 대사 모양은 Character 객체로 캐릭터마다 다르게 바꿀 수 있습니다.

say 문

say 문은 대사와 해설을 만들 때 사용됩니다. 렌파이 스크립트에서 가장 자주 사용되는 명령문이기 때문에 say문은 쓰기 편한 구문을 갖추고 있습니다. 아래는 say 문 예제입니다:

    "해설입니다."

    "에일린" "화자의 이름이 나타나있는 대사입니다."

    e "캐릭터 객체를 사용하는 대사입니다."

    "빰!!" with vpunch

say 문의 첫 번째 형태는, 문자열 하나로만 이루어진 형태입니다. 이 형태는 문자열을 그대로 가져다가 해설으로 사용합니다.

두 번째는 두 개의 문자열로 이루어진 형태입니다. 첫 번째 문자열은 화자의 이름이며, 두 번째 문자열은 화자가 말하고 있는 대사입니다.

세 번째는 단순 표현식과 문자열의 조합으로 이루어진 형태가 있습니다. 단순 표현식은 캐릭터의 이름을 가리키는 문자열이거나 Character 객체이어야합니다. 후자의 경우 Character 객체는 대사가 표시되는 방법을 제어할 때 사용됩니다.

네 번째 형태는 문자열과 트랜지션이 함께 적인 with 절로 구성되어 있습니다. 이 경우에는 문자열이 나타나면서 동시에 화면이 흔들립니다.

say문이 작동하는 구체적인 방식은 대부분 캐릭터 객체가 제어합니다만, say 문은 대사를 표시하고, 사용자가 게임 화면을 클릭했을 때 그 대사를 제거하는 일을 합니다.

어떤 특수한 문자들은 렌파이에서 특별한 의미를 지니기 때문에 대사 문자열에서 사용할 수 없습니다. { 는 텍스트 태그를 만들 때 사용하는 문자이며, [ 는 치환을 할 때 사용하는 문자입니다. 이 문자들을 대사에 그대로 표시하려면 두 번 연달아 적어야 합니다. 문자열이 닫히는 것을 막을 때에는 역슬래시를 따옴표 앞에 붙어야 합니다:

    "표지판에는 이렇게 써 있었다. \"100%를 걸자!\""

Character 객체 정의하기

Character 객체를 만들어 say 문에 사용하면 대사글의 모습(이나 동작) 등을 변경할 수 있습니다. define 문을 사용하여 변수에 Character 객체를 배정하면 Character 를 만들 수 있습니다. 예를 들어:

define e = Character("에일린",
                     who_color="#c8ffc8")

이렇게 만들어진 캐릭터는 아래처럼 say 문에서 사용할 수 있습니다:

    e "Hello, world."

Character 는 여러가지 키워드 인수를 받는 파이썬 함수입니다. 이 키워드 인수들은 캐릭터의 동작을 제어합니다.

define문은 표현식을 계산해 계산된 결과를 지정한 이름에 배정합니다. 이 명령문이 init 블럭 외부에 있다면 define문은 자동으로 init 0 블럭에서 실행됩니다.

Character(name, kind=adv, **args)

Character 객체를 생성하고 Character 객체를 반환한다. 이 객체는 대사와 나래이션의 모양과 분위기를 제어한다.

name
문자열이라면 대사를 말하는 캐릭터의 이름. name 이 None 이라면 내래이션용처럼 이름이 표시되지 않는다.
kind
이 Character가 기본으로 삼을 캐릭터 종류. 이 Character 에서 설정하지 않은 인수의 기본값은 이 캐릭터에 지정한 `kind`에서 설정한 기본값으로 바뀐다. 캐릭터 기본 양식을 정의한 다음, 그 중 일부만 바꾸어 복사하는 식으로 여러 캐릭터를 만들 때 사용할 수 있다.

이미지 연결 Character에는 이미지 태그를 연결할 수 있다. 이미지 태그를 연결하면 해당 캐릭터로 만들어진 say 문으로 이미지를 나타낼 수 있고, 이 캐릭터가 대사를 말 할 때 나타낼 사이드 이미지를 렌파이가 자동으로 선택할 수도 있다.

image
이 캐릭터에 연결할 이미지 태그. 문자열.

보이스 태그 보이스 태그가 Character에 배정되면 보이스 태그와 연결된 음성 파일은 환경설정 화면에서 음소거하거나 재생되도록 설정할 수 있다.

voice_tag
Characer와 음성 파일을 연결시켜 'voice' 채널에서 음소거되거나 재생되도록 하는 문자열.

접두사와 접미사. 캐릭터의 이름이나 화면에 표시되는 텍스트에 적용될 접두사나 접미사를 붙일 수 있게 해주는 인수. 각 대사마다 따옴표를 붙이거나 할 때 사용할 수 있다.

what_prefix
대사 앞에 추가되는 문자열.
what_suffix
대사 뒤에 추가되는 문자열.
who_prefix
캐릭터 이름 앞에 추가되는 문자열.
who_suffix
캐릭터 이름 뒤에 추가되는 문자열.

이름 표시 방법 바꾸기. 아래에 적힌 옵션을 바꾸면 캐릭터 이름을 표시하는 방법을 바꿀 수 있습니다.

dynamic
참이라면 name 은 파이썬 표현식이 적힌 문자열이어야 한다. 문자열에 적힌 표현식은 대사를 표시하기 전에 계산되어, 그 결과값이 캐릭터의 이름으로 사용된다.

인터렉션 제어하기. 아래 적힌 옵션을 이용하면 대사 표시, 인터렉션의 발생, 대사가 표시되는 때에 따라 접근할 모드를 제어할 수 있습니다.

condition
값이 주어진다면 이는 파이썬 표현식을 포함하는 문자열이어야 한다. 표현식의 계산값이 거짓이라면, say 문이 실행되지 않은 것처럼 대사기 표시되지 않는다.
interact
참이라면 대사가 표시될 때마다 인터렉션이 발생한다. 거짓이라면 인터렉션을 발생하지 않을 것이며 추가 요소가 화면에 더해질 수 있다.
mode
이 캐릭터가 대사를 말할 때 진입할 모드가 적힌 문자열. 자세한 사항은 모드 를 참조하라.
callback
캐릭터가 대사를 말하고 있는 중에 이벤트들이 발생했을 때 호출되는 함수. 자세한 정보는 character_callbacks 를 참조하라.

대사 넘기기. 대사 넘기기 아이콘은 텍스트가 모두 화면에 표시되었을 때 나타납니다.

ctc
대사 넘기기 아이콘으로 사용할 디스플레이어블. 각 상황에 따라 그에 맞는 아이콘을 사용하지 않는다면 모든 경우에 이 아이콘이 사용된다.
ctc_pause
{p} 나 {w} 같은 텍스트 태그 때문에 대사 텍스트 표시가 일시 중단된 경우에 대사 넘기기 아이콘으로 사용할 디스플레이어블.
ctc_timedpause
{p=} 나 {w=} 같은 텍스트 태그 때문에 대사 텍스트 표시가 일시 중단된 경우에 대사 넘기기 아이콘으로 사용할 디스플레이어블. None이라면 ctc_pause 에서 값을 받으며, ctc_timedpause 가 아닌 ctc_pause만 사용하고 싶을 때에는 ``Null()``을 사용하라
ctc_position
대사 넘기기 아이콘의 위치를 제어한다. "nestled" 라면 아이콘은 대사의 마지막 글자 바로 뒤에 붙어서 표시된다. "fixed" 라면 대사 넘기기 아이콘에 지정된 위치 스타일 속성에 따라 위치가 정해진다.

스크린. 렌파이는 대사를 표시할 때 스크린 을 사용한다. 아래에 적힌 인수를 사용하면 스크린을 선택할 수 있으며, 스크린에 인수를 전달할 수도 있다.

screen
대사를 표시할 때 사용할 스크린의 이름.

show_ 로 시작하는 키워드 인수에 값을 입력하면 값은 스크린에 전달된다. 예를 들어 show_side_image 값은 스크린에 있는 side_image 변수값이 된다.

기본 대사 스크린에 구현되어있는 show_ 변수로는 다음과 같은 것들이 있다:

show_side_image
디스플레이어블이 주어지면, 대사가 표시된 때 해당 디스플레이어블을 표시한다. 디스플레이어블의 위치는 디스플레이어블에 주어진 위치 속성에 따라 결정된다. 대사 옆에 캐릭터 그림을 표시할 때 종종 사용된다.
show_two_window
참이라면 스크린의 레이아웃을 변경하여 캐릭터의 이름과 대사를 각각 다른 대사창에 표시한다.
show_layer
"say" 스크린을 표시할 레이어의 이름이 적힌 문자열.

글자와 대사창 꾸미기. who_, what_, window_ 로 시작하는 키워드 인수는 각각 캐릭터의 이름, 대사, 대사창의 스타일 로 사용됩니다.

예를 들어 캐릭터에 키워드 인수 who_color="#c8ffc8" 를 지정했다면, 이름 색깔은 초록색으로 바뀝니다. window_background = "frame.png" 는 캐릭터 대사창으로 사용할 배경그림을 설정합니다.

캐릭터 이름, 대사, 대사창에 적용되는 스타일 또한 이런 방식으로 설정할 수 있습니다. 각각 who_style, what_style, window_style 인수를 사용하면 됩니다.

Say 문과 이미지 속성

캐릭터에 그 캐릭터의 이미지 태그를 지정해주면 해당 캐릭터에 연결된 say 문에는 캐릭터의 이름과 대사 사이에 이미지 속성을 넣을 수 있습니다.

이 때, 주어진 태그로 지정된 이미지가 나타나있으면 렌파이는 해당 캐릭터 태그와 속성을 가진 이미지를 화면에 표시합니다. 이미지가 없는 상태라면 렌파이는 해당 속성을 사이드 이미지에 적용하기 위해 저장해놓고 이미지를 나타내지는 않습니다.

예를 들어 다음 두 코드는 같은 동작을 합니다.:

define e = Character("Eileen", image="eileen")

label start:

    show eileen mad
    e "나 지금 좀 화났어."

    e happy "그냥 잠깐 그랬던 것 뿐이야."
define e = Character("Eileen")

label start:

    show eileen mad
    e "나 지금 좀 화났어"

    show eileen happy
    e "그치만 금방 풀려버렸네."

이렇게 이미지를 바꿀 때마다 트랜지션을 발생시키려면 config.say_attribute_transition 에 트랜지션을 설정하세요.

Character 예제

다음은 캐릭터 예제입니다:

# 대사가 따옴표 안에 적혀서 표시되는 캐릭터
define e = Character("에일린", what_prefix='"', what_suffix='"')

# 캐릭터의 이름을 특정 변수에서 가져다가 사용하는 캐릭터
define p = Character("player_name", dynamic=True)

특별한 캐릭터

렌파이에 미리 정의된 어떤 캐릭터는 특정 상황에서 자동으로 사용되기도 합니다. 이런 특별한 캐릭터의 설정을 바꾸면 렌파이 동작 방식을 바꿀 수 있습니다만, 잘못 이용하면 문제가 발생할 수도 있습니다.

adv
Character 에서 사용하는 기본 캐릭터 종류. 캐릭터의 대사가 한 번에 한 줄씩 표시됩니다.
nvl
NVL모드 길라잡이 에서 대사가 표시되도록 하는 Character 로 여러 문장이 화면에 한 번에 표시되게 합니다.
narrator
나래이션을 표시하는 캐릭터. 캐릭터 이름이 없는 say 문이 사용합니다.
name_only
화자의 이름을 문자열로 적은 대사를 표시할 때 사용될 캐릭터. 이 캐릭터는 주어진 이름과 함께 새 캐릭터에 복사되며, 새로 만들어진 캐릭터는 대사 표시에 사용됩니다.
centered
대사가 대사창 바깥의 게임 화면 중앙에 표시되는 캐릭터.
vcentered
대사가 대사창 바깥의 게임 화면 중앙에 세로로 표시되는 캐릭터.
extend

가장 최근에 대사를 말했던 캐릭터의 마지막 대사, "{fast}" 태그, 추가할 대사로 대사 한 줄을 구성하는 캐릭터. 이 캐릭터는 대사가 출력되는 도중에 화면을 바꿀 때 사용할 수 있습니다.

extend 캐릭터는 nvl모드를 인지해 해당 모드에서 정상 작동합니다.

아래는 예제입니다.:

# 첫 번째 대사를 출력하고, 클릭을 기다린 다음에, 표정을 바꾸고, 나머지
# 대사를 출력한다.

show eileen concerned
e "가끔 나는 슬퍼."
show eileen happy
extend " 하지만 금방 극복해버리지!"

# 위 스크립트와 유사하지만 첫 번째 대사가 전부 출력되었을 때 자동으로
# 표정을 바꾼다. 사용자가 텍스트 속도를 최고값으로 설정하지
# 않았을 경우에만 작동한다.

show eileen concerned
e "가끔 나는 슬퍼.{nw}"
show eileen happy
extend " 하지만 금방 극복해버리지!"

대사창 관리하기

렌파이에는 대사창을 관리할 수 있는 몇 가지 명령문이 있습니다. 대사창은 대사를 표시할 때에 항상 나타나기 때문에 이 명령문들은 대사가 없는 인터렉션 도중에 대사창의 존재 여부를 제어합니다.

window show

window show 문은 대사창을 띄웁니다. 대사창을 띄울 때 적용할 트랜지션을 지정할 수 있습니다. 트랜지션이 없다면 :var:`config.window_show_transition`의 값을 사용합니다.

window hide

window hide문은 대사창을 숨깁니다. 대사창을 숨길 때 적용할 트랜지션을 지정할 수 있습니다. 트랜지션이 없다면 config.window_hide_transition 의 값을 사용합니다.

window auto

자동으로 대사창을 관리합니다. config.window_auto_show 에 나열된 명령문(기본값은 say문)이 실행되기 전에는 대사창을 띄웁니다. config.window_auto_hide 에 나열된 명령문 (기본값은 scene문)이 실행되기 전에는 대사창을 숨깁니다.

window auto 문은 config.window_show_transitionconfig.window_hide_transition 에 지정된 트랜지션을 사용해 대사창을 띄우고 숨깁니다. window autowindow show 또는 window hide 명령문으로 취소됩니다.

아래는 예제입니다.:

window show # 기본 트랜지션이 지정되었다면 해당 트랜지션을 사용해 대사창을 띄운다.
pause       # 이 명령문이 실행되는 동안에는 대사창이 나타난다.
window hide # 대사창을 숨긴다.
pause       # 이 명령문이 실행되는 동안에는 대사창을 숨긴다.

window show dissolve # 대사창에 디졸브 효과를 적용해 띄운다.
pause                # 이 명령문이 실행되는 동안에는 대사창이 나타난다.
window hide dissolve # 대사창에 디졸브 효과를 적용해 숨긴다.
pause                # 이 명령문이 실행되는 동안에는 대사창을 숨긴다.


window auto

"대사창은 이 대사가 표시되기 전에 자동으로 뜰 거야."
pause                # 이 명령문이 실행되는 동안에는 대사창이 나타난다.

scene bg washington  # 장면이 변경되기 전에 대사창을 숨긴다.
with dissolve

대사창 관리는 "show empty window" Preference() 과 관련이 있습니다. 이 환경설정이 비활성화 되었다면 이 명령문들은 효과가 없습니다.

파이썬 동등문

주석

이 항목은 파이썬 명령문 섹션을 읽어야만 이해가 될 것입니다.

say문의 첫 번째 매개변수가 존재하고 그것이 표현식일 때 say문은 해당 표현식을 대사, 그리고 True로 설정된 interact 와 함께 호출하는 것과 동일합니다. 예를 들어:

e "Hello, world."

위 스크립트는 아래와 동일합니다:

$ e("Hello, world.", interact=True)

say문은 기본 스토어에서 검색하기 전에 지정한 스토어에서 character 를 검색할 것입니다. 기본 스토어에 저장된 변수 이름과 동일한 이름에 캐릭터를 지정하고 싶다면 다음처럼 정의할 수 있습니다.

define character.e = Character("아이린")

이후로 이 캐릭터는 기본 스토어에 있는 변수와 함께 사용할 수 있습니다.:

label start:

    # 형편없는 변수 이름
    e = 100

    e "초기 에너지는 [e] 개야."