게임 내 선택지 메뉴

많은 비주얼 노벨에서는 플레이어의 선택에 따라 이야기의 결말이 달라집니다. Ren'Py의 menu 문을 사용하면 손쉽게 선택지를 제시할 수 있습니다.

다음은 menu 문의 예제입니다.

menu:
     "무엇을 할까?"

     "커피를 마신다.":
         "커피를 마신다. 마지막 한 방울까지 맛있다."

     "차를 마신다.":
         $ drank_tea = True

         "차를 마신다. 이 행동에 정치적인 의미가 담기지 않도록 조심하면서."

     "무릎을 꿇는다.":
         jump genuflect_ending

label after_menu:

     "음료를 다 마시고 아침 일과를 이어 갔다."

menu 문은 menu 키워드로 시작합니다. 뒤에 레이블 이름을 붙일 수도 있으며, 이는 메뉴 바로 앞에 해당 레이블을 정의하는 것과 같습니다. 예를 들면 다음과 같습니다.

menu drink_menu:
    ...

menu 문 아래에는 들여쓴 블록을 둡니다. 이 블록에는 say 문을 넣을 수 있으며, 선택지가 최소 하나 있어야 합니다. say 문을 넣으면 메뉴와 함께 화면에 표시됩니다.

선택지. 선택지는 플레이어가 게임 내 메뉴에서 고를 수 있는 항목입니다. 문자열로 시작하며, 뒤에 if 절을 붙여 조건부로 표시할 수 있습니다. 선택지 줄은 콜론으로 끝내고, 그 아래에 Ren'Py 문으로 된 블록을 둬야 합니다.

플레이어가 선택지를 고르면 해당 블록을 실행합니다. 블록 끝에 도달하면 menu 문 전체의 다음 문으로 넘어갑니다.

if 절은 if 키워드와 Python 표현식으로 이루어집니다. 표현식이 참일 때만 선택지가 표시됩니다. 다음 메뉴에서는:

menu:
    "왼쪽으로 간다.":
        ...
    "오른쪽으로 간다.":
        ...
    "위로 날아간다." if drank_tea:
        ...

drank_tea 변수가 참일 때만 세 번째 선택지가 나타납니다. 다만 config.menu_include_disabled가 True이면 조건이 거짓이어도 비활성화된 버튼으로 표시됩니다.

모든 선택지의 if 조건이 충족되지 않으면 메뉴를 건너뛰고 다음 문으로 진행합니다.