특수 스크린 목록
렌파이에 있는 특수 스크린 이름에는 두 가지 종류가 있습니다. 하나는
렌파이 명령문(또는 프로그램 상에서 동등한 명령문)이 구동될 때
자동으로 나타나는 스크린입니다. 다른 하나는 메뉴 스크린 입니다.
특수 스크린에는 그 스크린이 수행하는 일반적인 기능에 어울리는
일반적인 이름이 정해져있으며, 필요하다면 빠뜨리거나 작동방식을
바꿀 수 있습니다.
이 페이지에는 각 특수 스크린의 예제 스크립트가 적혀있습니다.
예제에는 가장 기본이 되는 기능만을 수행하는 스크립트가 적혀있을 뿐이지만
스크린 시스템을 이용하면 화면에 다양한 기능을 추가할 수 있다는 사실을
기억하세요. 예를 들어 기본 say 스크린에는 오직 글자만 표시되지만,
스크린 시스템을 이용하면 스킵 버튼, 자동진행 버튼, 음소거 버튼 등을
쉽게 추가할 수 있습니다.
특수 스크린 중에는 매개변수를 받는 스크린도 있습니다. 이들 매개변수는
해당 스크린의 범위 내에서 변수로써 접근할 수 있습니다.
또한 특수 스크린 중에는 특별 id를 사용하는 스크린도 있습니다.
특별 id는 특정한 타입의 디스플레이어블에만 배정해야 합니다.
특별 id가 지정된 디스플레이어블에는 스타일 속성을 적용할 수 있으며
호출 코드를 이용해 접근할 수도 있습니다.
게임 내에서 사용되는 화면
특정한 렌파이 명령문이 실행될 때 자동으로 나타나는
스크린입니다.
Say
say
스크린은 ADV 모드의 대사를 나타낼 때 say문에 의해
호출되는 스크린입니다. say스크린은 아래의 매개 변수와 함께 표시됩니다.:
- who
- 대사를 말하는 캐릭터의 이름.
- what
- 캐릭터가 말하고 있는 대사.
say 스크린에는 다음과 같은 id가 지정된 디스플레이어블을 선언해야 합니다.:
- "who"
- 대사를 말하는 캐릭터의 이름을 표시하는 텍스트
디스플레이어블. Character 객체에 이 디스플레이어블을 꾸밀 때 필요한 인수들을
지정할 수 있다.
- "what"
- 캐릭터의 대사를 표시하는 텍스트 디스플레이어블.
Character 객체에 이 디스플레이어블을 꾸밀 때 필요한 인수들을
지정할 수 있다. what id를 사용하는 디스플레이어블은 반드시 정의되어야 한다.
ctc, 자동 진행 모드 등에 걸리는 시간을 계산할 때
이 디스플레이어블을 이용하기 때문이다.
- "window"
- window 혹은 frame. 보통은 who와 what 텍스트가 이 디스플레이어블 안에 나타난다.
Character 객체에 이 디스플레이어블을 꾸밀 때 필요한 인수들을
지정할 수 있다.
screen say(who, what):
window id "window":
has vbox
if who:
text who id "who"
text what id "what"
choice
choice
스크린은 게임 진행 중 menu 문으로 만든 선택지를 표시할 때 사용됩니다.
아래의 매개 변수를 받습니다.:
- items
- (caption, action, chosen) 튜플의 리스트.
각 선택지문에서 caption 은 선택문으로 쓰일 텍스트,
action 은 선택문을 눌렀을 때 실행할 액션 또는
선택지문이 아닌 단순한 문장이라면 None 이다. chosen 에는
해당 선택지문을 이전에 선택한 적이 있는지에 대한 여부가 저장되어 있다.
(진행중인 게임에는 존재할 필요가 없다).
screen choice(items):
window:
style "menu_window"
vbox:
style "menu"
for caption, action, chosen in items:
if action:
button:
action action
style "menu_choice_button"
text caption style "menu_choice"
else:
text caption style "menu_caption"
NVL
nvl
스크린은 NVL 모드의 대사를 나타낼 때 사용됩니다.
다음과 같은 매개 변수를 받습니다.:
- dialogue
- ( who, what, who_id, what_id, window_id)
튜플의 리스트. 각 튜플은 화면에 표시되는 문장을 뜻한다.
who 와 what 은 각각 캐릭터 이름과 대사에 해당하는
문자열이다. who_id, what_id, window_id 는 각각
who, what , window 디스플레이어블에
배정해야 한다.
- items
(caption, action, chosen) 튜플 리스트.
caption 은 선택지문으로 쓰일 텍스트, action은 선택문을 눌렀을 때
실행할 액션 또는 선택지문이 아닌 단순한 문장이라면 None 이다. chosen 에는
해당 선택문을 유저가 이전에 선택한 적이 있는지의 여부가 저장되어 있다
(진행중인 게임에는 존재할 필요가
없다).
items가 비어있으면 선택지는 표시되지 않는다.
NVL 모드에서 표시되는 선택문을 나타낼 때 nvl_choice
스크린을
이용할 수도 있습니다. 이 스크린은 nvl
스크린과 같은 매개변수를 받습니다.
nvl_choice
스크린이 있으면 nvl
스크린 대신 nvl_screen
을 사용해 게임 내에서 선택지를 표시합니다.
screen nvl(dialogue, items=None):
window:
style "nvl_window"
has vbox:
style "nvl_vbox"
# 대사를 표시한다.
for who, what, who_id, what_id, window_id in dialogue:
window:
id window_id
has hbox:
spacing 10
if who is not None:
text who id who_id
text what id what_id
# 선택지가 있다면 선택지를 표시한다.
if items:
vbox:
id "menu"
for caption, action, chosen in items:
if action:
button:
style "nvl_menu_choice_button"
action action
text caption style "nvl_menu_choice"
else:
text caption style "nvl_dialogue"
Notify
notify
스크린은 게임에서 안내문을 나타낼 때
renpy.notify()
가 사용하는 스크린입니다.
보통은 트랜스폼과 함께 사용됩니다. 다음의 매개변수를
받습니다.:
- message
- 표시할 안내문.
기본 notify 스크린과 그와 관련된 트랜스폼은 다음과 같습니다:
screen notify(message):
zorder 100
text message at _notify_transform
# 화면이 처음으로 나타나서 사라질 때까지
# 걸리는 시간을 정한다.
timer 3.25 action Hide('notify')
transform _notify_transform:
# 위치를 정한다.
xalign .02 yalign .015
# 스크린을 표시하고 숨길 때의 행동을 정한다.
on show:
alpha 0
linear .25 alpha 1.0
on hide:
linear .5 alpha 0.0
메뉴 화면
아래 적힌 스크린은 메뉴 스크린입니다. 메뉴 스크린 중에서 특히 main_menu
와 yesno_prompt
는
반드시 호출됩니다. 유저가 우클릭 등으로 게임 메뉴를 띄울 때에는
_game_menu_screen
변수에 지정한 스크린이 나타날 것입니다.
(기본값은 save
입니다.)
메뉴 스크린은 어느 정도 자유롭게 추가하거나 수정할 수 있습니다.
Main Menu
main_menu
스크린은 게임이 시작될 때 처음으로 나타나는
스크린입니다.
screen main_menu():
# 다른 menu 스크린으로 대체될 수 있도록 태그 지정.
tag menu
# 메인 메뉴의 배경
window:
style "mm_root"
# 메인 메뉴 버튼들
frame:
style_group "mm"
xalign .98
yalign .98
has vbox
textbutton _("Start Game") action Start()
textbutton _("Load Game") action ShowMenu("load")
textbutton _("Preferences") action ShowMenu("preferences")
textbutton _("Help") action Help()
textbutton _("Quit") action Quit(confirm=False)
init python:
# 메인 메뉴의 모든 버튼을 같은 크기로 만든다.
style.mm_button.size_group = "mm"
Navigation
navigation
스크린은 그리 특별한 기능을 가진 스크린은 아닙니다. 그러나 렌파이에서는
편의를 위해 게임 메뉴 내비게이션을 navigation
스크린에 담아, 저장하기와 불러오기, 그리고 환경설정
화면에서 사용합니다.
screen navigation():
# 게임 메뉴의 배경.
window:
style "gm_root"
# 여러 버튼.
frame:
style_group "gm_nav"
xalign .98
yalign .98
has vbox
textbutton _("Return") action Return()
textbutton _("Preferences") action ShowMenu("preferences")
textbutton _("Save Game") action ShowMenu("save")
textbutton _("Load Game") action ShowMenu("load")
textbutton _("Main Menu") action MainMenu()
textbutton _("Help") action Help()
textbutton _("Quit") action Quit()
init python:
style.gm_nav_button.size_group = "gm_nav"
Save
save
스크린은 게임을 세이브할 파일을 선택하는
스크린입니다.
screen save():
# 다른 메뉴 스크린으로 대체되도록 하는 태그.
tag menu
use navigation
frame:
has vbox
# 유저가 편하게 페이지를 선택할 수 있도록
# 상단에 배치된 버튼.
hbox:
textbutton _("Previous") action FilePagePrevious()
textbutton _("Auto") action FilePage("auto")
for i in range(1, 9):
textbutton str(i) action FilePage(i)
textbutton _("Next") action FilePageNext()
# 파일 슬롯을 표 형태로 표시.
grid 2 5:
transpose True
xfill True
# 10개의 파일 슬롯 표시. 1 - 10까지 숫자가 매겨진다.
for i in range(1, 11):
# 각 파일 슬롯은 버튼이다.
button:
action FileAction(i)
xfill True
style "large_button"
has hbox
# 버튼에 설명과 스크린샷을
# 추가한다.
add FileScreenshot(i)
text ( " %2d. " % i
+ FileTime(i, empty=_("Empty Slot."))
+ "\n"
+ FileSaveName(i)) style "large_button_text"
Load
load
스크린은 불러올 세이브 파일을 선택하는
스크린입니다.
screen load():
# 다른 메뉴화면으로 대체되도록 한다.
tag menu
use navigation
frame:
has vbox
# 유저가 편하게 페이지를 선택할 수 있도록
# 상단에 배치된 버튼.
hbox:
textbutton _("Previous") action FilePagePrevious()
textbutton _("Auto") action FilePage("auto")
for i in range(1, 9):
textbutton str(i) action FilePage(i)
textbutton _("Next") action FilePageNext()
# 파일 슬롯을 표 형태로 표시.
grid 2 5:
transpose True
xfill True
# 파일 슬롯 10개 표시. 1 - 10까지 숫자가 매겨진다.
for i in range(1, 11):
# 각 파일 슬롯은 버튼이다.
button:
action FileAction(i)
xfill True
style "large_button"
has hbox
# 버튼에 설명과 스크린샷을
# 추가한다.
add FileScreenshot(i)
text ( " %2d. " % i
+ FileTime(i, empty=_("Empty Slot."))
+ "\n"
+ FileSaveName(i)) style "large_button_text"
Preferences
preferences
스크린은 게임 표시 방식 등에 관한 옵션이 있는
환경 설정 스크린입니다.
screen preferences():
tag menu
# 내비게이션 스크린을 사용한다.
use navigation
# 내비게이션의 행을 3 행까지 그리드에 추가한다.
grid 3 1:
style_group "prefs"
xfill True
# 왼쪽 행.
vbox:
frame:
style_group "pref"
has vbox
label _("Display")
textbutton _("Window") action Preference("display", "window")
textbutton _("Fullscreen") action Preference("display", "fullscreen")
frame:
style_group "pref"
has vbox
label _("Transitions")
textbutton _("All") action Preference("transitions", "all")
textbutton _("None") action Preference("transitions", "none")
frame:
style_group "pref"
has vbox
label _("Text Speed")
bar value Preference("text speed")
frame:
style_group "pref"
has vbox
textbutton _("Joystick...") action ShowMenu("joystick_preferences")
vbox:
frame:
style_group "pref"
has vbox
label _("Skip")
textbutton _("Seen Messages") action Preference("skip", "seen")
textbutton _("All Messages") action Preference("skip", "all")
frame:
style_group "pref"
has vbox
textbutton _("Begin Skipping") action Skip()
frame:
style_group "pref"
has vbox
label _("After Choices")
textbutton _("Stop Skipping") action Preference("after choices", "stop")
textbutton _("Keep Skipping") action Preference("after choices", "skip")
frame:
style_group "pref"
has vbox
label _("Auto-Forward Time")
bar value Preference("auto-forward time")
vbox:
frame:
style_group "pref"
has vbox
label _("Music Volume")
bar value Preference("music volume")
frame:
style_group "pref"
has vbox
label _("Sound Volume")
bar value Preference("sound volume")
textbutton "Test" action Play("sound", "sound_test.ogg") style "soundtest_button"
frame:
style_group "pref"
has vbox
label _("Voice Volume")
bar value Preference("voice volume")
textbutton "Test" action Play("voice", "voice_test.ogg") style "soundtest_button"
init python:
style.pref_frame.xfill = True
style.pref_frame.xmargin = 5
style.pref_frame.top_margin = 5
style.pref_vbox.xfill = True
style.pref_button.size_group = "pref"
style.pref_button.xalign = 1.0
style.pref_slider.xmaximum = 192
style.pref_slider.xalign = 1.0
style.soundtest_button.xalign = 1.0
Yesno_Prompt
yesno_prompt
스크린은 유저에게 예/아니오를 묻는 스크린입니다.
아래의 매개변수를 받습니다.:
- message
플레이어에게 보여줄 메세지. 다음 중 하나가 된다:
- layout.ARE_YOU_SURE - "확실합니까?" 기본 메세지.
어떤 메세지를 사용해야할 지 알 수 없는 경우에 사용한다.
- layout.DELETE_SAVE - "이 세이브를 삭제합니까?"
- layout.OVERWRITE_SAVE - "세이브 파일을 덮어씁니까?"
- layout.LOADING - "세이브를 불러오면 세이브하지 않은 데이터를 잃게 됩니다. 데이터를 불러옵니까?"
- layout.QUIT - "종료하시겠습니까?"
- layout.MAIN_MENU - "메인 메뉴로 돌아갑니까? 세이브하지 않은 데이터를 잃게 됩니다."
해당 변수의 값은 모두 문자열로, 텍스트 디스플레이어블을 사용해
나타낼 수 있다.
- yes_action
- 유저가 "네"를 눌렀을 경우 실행할 액션.
- no_action
- 유저가 "아니오"를 눌렀을 경우 실행할 액션.
screen yesno_prompt(message, yes_action, no_action):
modal True
window:
style "gm_root"
frame:
style_group "yesno_prompt"
xfill True
xmargin 50
ypadding 25
yalign .25
vbox:
xfill True
spacing 25
text _(message):
text_align 0.5
xalign 0.5
hbox:
spacing 100
xalign .5
textbutton _("Yes") action yes_action
textbutton _("No") action no_action