選択肢 link
ビジュアルノベルには、プレイヤーに物語の行方を左右するような選択を迫るものがたくさんあります。Ren'Py 言語の menu
ステートメント で、ユーザーに選択肢を簡単に提示できます。
ここに menu
ステートメント の例を挙げます。
menu:
"What should I do?"
"Drink coffee.":
"I drink the coffee, and it's good to the last drop."
"Drink tea.":
$ drank_tea = True
"I drink the tea, trying not to make a political statement as I do."
"Genuflect.":
jump genuflect_ending
label after_menu:
"After having my drink, I got on with my morning."
menu
ステートメント は、予約語 menu
で始まります。これにラベル名を続けると、そのラベルの後に menu があるのと同じになります。例
menu drink_menu:
...
menu ステートメントには、インデントされたブロックを続けます。このブロックには say ステートメント も書けますが、少なくとも一つ選択肢を書かなければなりません。say ステートメント があれば、選択肢と同時にそれが画面に表示されます。
選択肢 選択肢は、ユーザーが選べる項目です。選択肢は文字列で始まります。その文字列に if 節を続けると、それを選択肢表示の条件に出来ます。選択肢はコロンで終わり、Ren'Py ステートメントのブロックを続けなければなりません。
選択肢が選ばれると、そのステートメントのブロックが実行されます。ブロックが最後まで実行されると、menu ステートメント後にあるステートメントに実行が続きます。
if 節は、予約語 if
で始まり、Python 式が続きます。その式が True であるときのみ対応する選択肢が表示されます。以下の選択肢では
menu:
"Go left.":
...
"Go right.":
...
"Fly above." if drank_tea:
...
第三の選択肢は drank_tea
変数が True の時のみ表示されます(ただし、 config.menu_include_disabled
変数が True に設定されていると、無効化されたボタンとして表示されます)。
すべてのメニューに条件が満たされていない if があるとき、そのメニューはスキップされ、制御はその次のステートメントに進みます。
Menu Set link
menu は自身のブロックに set 節を受け取れます。与えられると、その set にないキャプションのみが選択肢として表示されます。選択がされると、その選択肢のキャプションがその set に追加されます。
if 節により利用可能な選択肢がなければ、 menu の次のステートメントに進みます。
歴史的な理由のため、 set は set オブジェクトまたはリストとなります。
default menuset = set()
menu chapter_1_places:
set menuset
"Where should I go?"
"Go to class.":
jump go_to_class
"Go to the bar.":
jump go_to_bar
"Go to jail.":
jump go_to_jail
label chapter_1_after_places:
"Wow, that was one heck of a Tuesday."
Menu 引数 link
引数を menu 自身や menu 内の個々の選択肢に渡すことも可能です。引数を menu に渡すには、それらを menu の行の任意の名前の後、コロンの直前に追加します。選択肢に引数を渡すには、選択文字列の後、 if
キーワードやコロンの前にそれらを配置します。
menu ("jfk", screen="airport"):
"Chicago, IL" (200):
jump chicago_trip
"Dallas, TX" (150, sale=True):
jump dallas_trip
"Hot Springs, AR" (300) if secret_unlocked:
jump hot_springs_trip
menu 自身に渡される menu 引数はスクリーンを選択する screen 引数と NVL-mode menu を選択する nvl 引数を除いてスクリーンへの引数になります。
choice スクリーン と config.menu_arguments_callback
のドキュメントを参照してください。