텍스트는 비주얼 노벨에서 가장 기본이 되는 요소이며, 이야기가 주된 게임에서 텍스트는 매우 중요합니다. 텍스트는 보통 화자의 이름이 붙어있는 대사 또는 화자가 없는 해설로 이루어져있습니다(이제부터는 둘의 차이가 크지 않은 이상, 대사와 해설을 묶어 대사라고 부르겠습니다). 또한 유저가 게임에 어울리는 모양으로 대사를 꾸미는 것도 중요합니다.
렌파이에서 대사는 거의 say 문으로 만들어집니다. 대사 모양은 Character 객체로 캐릭터마다 다르게 바꿀 수 있습니다.
say 문은 대사와 해설을 만들 때 사용됩니다. 렌파이 스크립트에서 가장 자주 사용되는 명령문이기 때문에 say문은 쓰기 편한 구문을 갖추고 있습니다. 아래는 say 문 예제입니다:
"해설입니다."
"에일린" "화자의 이름이 나타나있는 대사입니다."
e "캐릭터 객체를 사용하는 대사입니다."
"빰!!" with vpunch
say 문의 첫 번째 형태는, 문자열 하나로만 이루어진 형태입니다. 이 형태는 문자열을 그대로 가져다가 해설으로 사용합니다.
두 번째는 두 개의 문자열로 이루어진 형태입니다. 첫 번째 문자열은 화자의 이름이며, 두 번째 문자열은 화자가 말하고 있는 대사입니다.
세 번째는 단순 표현식과 문자열의 조합으로 이루어진 형태가 있습니다. 단순 표현식은 캐릭터의 이름을 가리키는 문자열이거나 Character 객체이어야합니다. 후자의 경우 Character 객체는 대사가 표시되는 방법을 제어할 때 사용됩니다.
네 번째 형태는 문자열과 트랜지션이 함께 적인 with 절로 구성되어 있습니다. 이 경우에는 문자열이 나타나면서 동시에 화면이 흔들립니다.
say문이 작동하는 구체적인 방식은 대부분 캐릭터 객체가 제어합니다만, say 문은 대사를 표시하고, 사용자가 게임 화면을 클릭했을 때 그 대사를 제거하는 일을 합니다.
어떤 특수한 문자들은 렌파이에서 특별한 의미를 지니기 때문에
대사 문자열에서 사용할 수 없습니다. {
는 텍스트 태그를 만들 때 사용하는 문자이며,
[
는 치환을 할 때 사용하는 문자입니다. 이 문자들을 대사에 그대로 표시하려면
두 번 연달아 적어야 합니다. 문자열이 닫히는 것을 막을 때에는
역슬래시를 따옴표 앞에 붙어야 합니다:
"표지판에는 이렇게 써 있었다. \"100%를 걸자!\""
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 객체를 반환한다. 이 객체는 대사와 나래이션의 모양과 분위기를 제어한다.
이미지 연결 Character에는 이미지 태그를 연결할 수 있다. 이미지 태그를 연결하면 해당 캐릭터로 만들어진 say 문으로 이미지를 나타낼 수 있고, 이 캐릭터가 대사를 말 할 때 나타낼 사이드 이미지를 렌파이가 자동으로 선택할 수도 있다.
보이스 태그 보이스 태그가 Character에 배정되면 보이스 태그와 연결된 음성 파일은 환경설정 화면에서 음소거하거나 재생되도록 설정할 수 있다.
접두사와 접미사. 캐릭터의 이름이나 화면에 표시되는 텍스트에 적용될 접두사나 접미사를 붙일 수 있게 해주는 인수. 각 대사마다 따옴표를 붙이거나 할 때 사용할 수 있다.
이름 표시 방법 바꾸기. 아래에 적힌 옵션을 바꾸면 캐릭터 이름을 표시하는 방법을 바꿀 수 있습니다.
인터렉션 제어하기. 아래 적힌 옵션을 이용하면 대사 표시, 인터렉션의 발생, 대사가 표시되는 때에 따라 접근할 모드를 제어할 수 있습니다.
대사 넘기기. 대사 넘기기 아이콘은 텍스트가 모두 화면에 표시되었을 때 나타납니다.
"nestled"
라면
아이콘은 대사의 마지막 글자 바로 뒤에 붙어서
표시된다. "fixed"
라면 대사 넘기기 아이콘에 지정된
위치 스타일 속성에 따라
위치가 정해진다.스크린. 렌파이는 대사를 표시할 때 스크린 을 사용한다. 아래에 적힌 인수를 사용하면 스크린을 선택할 수 있으며, 스크린에 인수를 전달할 수도 있다.
show_
로 시작하는 키워드 인수에
값을 입력하면 값은 스크린에 전달된다. 예를 들어
show_side_image
값은 스크린에 있는
side_image
변수값이 된다.
기본 대사 스크린에 구현되어있는 show_
변수로는 다음과 같은 것들이 있다:
글자와 대사창 꾸미기.
who_
, what_
,
window_
로 시작하는 키워드 인수는
각각 캐릭터의 이름, 대사, 대사창의
스타일 로 사용됩니다.
예를 들어 캐릭터에 키워드 인수
who_color="#c8ffc8"
를 지정했다면, 이름 색깔은
초록색으로 바뀝니다. window_background = "frame.png"
는
캐릭터 대사창으로 사용할 배경그림을
설정합니다.
캐릭터 이름, 대사, 대사창에 적용되는 스타일 또한 이런 방식으로 설정할 수 있습니다. 각각 who_style, what_style, window_style 인수를 사용하면 됩니다.
캐릭터에 그 캐릭터의 이미지 태그를 지정해주면 해당 캐릭터에 연결된 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
에 트랜지션을 설정하세요.
다음은 캐릭터 예제입니다:
# 대사가 따옴표 안에 적혀서 표시되는 캐릭터
define e = Character("에일린", what_prefix='"', what_suffix='"')
# 캐릭터의 이름을 특정 변수에서 가져다가 사용하는 캐릭터
define p = Character("player_name", dynamic=True)
렌파이에 미리 정의된 어떤 캐릭터는 특정 상황에서 자동으로 사용되기도 합니다. 이런 특별한 캐릭터의 설정을 바꾸면 렌파이 동작 방식을 바꿀 수 있습니다만, 잘못 이용하면 문제가 발생할 수도 있습니다.
adv
nvl
narrator
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_transition
과
config.window_hide_transition
에 지정된 트랜지션을 사용해
대사창을 띄우고 숨깁니다. window auto
는 window 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] 개야."