遊戲內菜單 link
在許多視覺系小說中,用戶會在被要求為故事情節的走向做出選擇。Ren’Py腳本語言中包含了menu語句,使得向用戶展現選項十分容易。
這裡有個menu語句的樣例:
menu:
"我應該幹嘛?"
"喝咖啡":
"我喝了咖啡,每一口都非常棒。"
"喝茶":
$ drank_tea = True
"我喝了茶,並努力使講話不像發表政治聲明。"
"跪拜禮":
jump genuflect_ending
label after_menu:
"喝完飲料後,開始繼續我的晨間時光。"
menu語句以關鍵字 menu
開頭。後面可能跟著一個腳本標籤(label)名,該文本標籤(label)下的語句塊可以被預處理為菜單選項。舉例如下:
menu drink_menu:
...
menu語句後面跟著一個縮進的語句塊(block)。該語句塊(block)可能包含一條 say語句,且必須包含至少一個菜單選項。若存在那條say語句,發言內容與菜單選項會同時在界面上顯示。
菜單選項。 菜單選項是用戶在遊戲內菜單中的可選項。菜單選項以一個字串開頭。該字串後面可能跟一個if分句。這個if分句增加了不同情況下的選項是否出現的功能。菜單選項以英文冒號結束,下面必須跟著一個Ren’Py語句塊。
當某個選項被選中,該選項下對應的語句塊(block)就會執行。執行到那個語句塊結尾時,會跳轉到menu語句結尾並執行之後的腳本。
if分句包含關鍵字 if
,後面跟著一個python表達式。只有當表達式為True時,該菜單選項才會顯示。例如下面的菜單中:
menu:
"向左":
...
"向右":
...
"向前看" if drank_tea:
...
只有在“the drank_tea”變數為True時才顯示第三個選項。(不過,如果配置項 config.menu_include_disabled
被設置為True的話,這個選項會顯示為一個不可用的按鈕。)
如果所有菜單選項的條件判斷都沒有成立,將直接跳過該菜單,並執行後面的語句。
菜單集(menu set) link
menu語句後面可以使用一個set從句。set從句單獨占一行。 當menu後面存在set從句時,只有菜單集(menuset)中沒有的選項標題才會單獨顯示。 當某個選項被選中後,對應標題就可以添加到菜單集中。
帶if從句時,如果整個菜單中沒有任何一個可用的選項,就直接進入menu語句後面的腳本。
基於某些歷史原因,菜單集可以是一個set對象或者一個列表。
default menuset = set()
menu chapter_1_places:
set menuset
"我該去哪裡呢?"
"去上課。":
jump go_to_class
"去酒吧。":
jump go_to_bar
"去監獄。":
jump go_to_jail
label chapter_1_after_places:
"這個週二真他媽該死!"
菜單入參 link
可以將入參傳給整個菜單,或者菜單內的某些選項。若要將入參傳給菜單,可以直接添加在menu語句中。
按順序傳入自訂的入參,使用逗號分隔。若要將入參傳給某個菜單選項,在 if
關鍵字或者冒號前面加入參內容。
menu ("jfk", screen="airport"):
"伊利諾州,芝加哥" (200):
jump chicago_trip
"德克薩斯州,達拉斯" (150, sale=True):
jump dallas_trip
"阿肯色州,溫泉城" (300) if secret_unlocked:
jump hot_springs_trip
除了 screen 入參選擇對應界面,nvl 入參選擇 NVL模式菜單,其他傳入菜單的入參會應用在界面上。 傳給菜單選項的入參會應用在菜單界面的所有元素。 還有一個特殊關鍵字 _mode ,設置互動模式,預設值為“menu”。選項的入參會成為對應元素的入參,並傳給菜單界面。