Ren'Py memo

Ren'Pyの個人的なメモ

選択肢に戻る・選択肢に進むボタンを作る

選択肢スキップボタンのつけかたっぽいものを話します。

下準備

ボタンの画像を用意。とりあえずidleとinsensitiveを。
後述になりますがauto "gui/なんとかかんとか_%s.png"とかいておくと
idle"gui/なんとかかんとか_button.png"とか hover"gui/なんとかかんとか_button2.png"とか
書かずに画像名だけで指定しとく(画像名の後尾に_idleとか_insensitiveはつける)だけで
Ren'Pyが勝手に検出して拾ってくれます。

label inu:
    $ save_name = _("戌彦:序盤")
    $ who = 1
(以下シナリオ)

ラベルごとにsave_nameをつけて今どこのラベルにいるか判断できるようにします。

私の書いたゲームでは攻略対象ごとにルートが分かれるのですが
途中同じラベル(ミニゲームのクイズ)を使用します。
その際どっか別のルートに行ってしまわないように
whoという名前の変数もつけてます。

label quiz_bunki:
    if who == 1:
        hide 1
        $ save_name = _("戌彦クイズ")
    if who == 2:
        hide 2
        $ save_name = _("あやみークイズ")
    if who == 3:
        hide 3
        $ save_name = _("クグさんクイズ")

同じラベルに入った時save_nameをわけます。

記述例

まず私のqucik_menuはこんな感じで書いてます。

screen quick_menu():

    zorder 100

    if quick_menu:

        fixed:
            style_prefix "quick"

            imagebutton auto "gui/auto_%s.png" action Preference("auto-forward", "toggle") xpos 958 ypos 345 focus_mask True alt _("おーと")
            imagebutton auto "gui/skip_%s.png" xpos 958 ypos 430 focus_mask True alt _("すきっぷ") action Skip()  alternate Skip(fast=True, confirm=True)
            imagebutton auto "gui/log_%s.png"action ShowMenu('history') xpos 958 ypos 515 focus_mask True alt _("ばっくろぐ")

            imagebutton:
                auto "gui/prev_%s.png"
                xpos 280
                ypos 563
                alt _("まえのせんたくしにもどる")
                if (":" in save_name) == True:
                    action Confirm(_("選択肢まで戻りますか?"), yes=Jump("bunki"), no=None)
                elif ("END" in save_name) == True:
                    action Confirm(_("クイズまで戻りますか?"), yes=Jump("quiz_bunki_2"), no=None)
                else:
                    action None
            imagebutton:
                auto "gui/next_%s.png"
                xpos 400
                ypos 563
                alt _("つぎのせんたくしにすすむ")
                if save_name == _("お~ぷにんぐ") and persistent.op == True:
                    action Confirm(_("選択肢までスキップしますか?"), yes=Jump("bunki"), no=None)
                elif (":" in save_name) == True and persistent.quiz_clear == True:
                    action Confirm(_("クイズまでスキップしますか?"), yes=Jump("quiz_bunki_2"), no=None)
                else:
                    action None

init python:
    config.overlay_screens.append("quick_menu")

default quick_menu = False

style quick_button is default
style quick_button_text is button_text

style quick_button:
    properties gui.button_properties("quick_button")
    activate_sound "audio/se_akch.ogg"

style quick_button_text:
    properties gui.button_text_properties("quick_button")

選択肢スキップに関するところはここです。(抜粋)

                if (":" in save_name) == True:
                    action Confirm(_("選択肢まで戻りますか?"), yes=Jump("bunki"), no=None)
                elif ("END" in save_name) == True:
                    action Confirm(_("クイズまで戻りますか?"), yes=Jump("quiz_bunki_2"), no=None)
                else:
                    action None
(省略)
                if save_name == _("お~ぷにんぐ") and persistent.op == True:
                    action Confirm(_("選択肢までスキップしますか?"), yes=Jump("bunki"), no=None)
                elif (":" in save_name) == True and persistent.quiz_clear == True:
                    action Confirm(_("クイズまでスキップしますか?"), yes=Jump("quiz_bunki_2"), no=None)
                else:
                    action None

・押して即ジャンプしてしまうと流石に不便だと思うのでConfirm問答を挟みます。
 あとは今いる場所をsave_nameで判断してlabelのJump先を変えるだけです。

・私のゲームはOP→攻略対象選択→クイズ→エンディングという流れだったので、
 現在地がOPだったら選択肢までスキップ、
 クイズより前のsave_nameには:を含んだsave_nameにして、
 OP以降クイズ前の場合はクイズまでスキップにしました。

・次の選択肢に行く時は一応通過してる時だけ使えるようにしています
 (persistent.~はそれ)

・A in B はわりと便利なpython演算子です。
 Bの中にAが含まれていた場合Trueにしてくれます。
 (私はどっちがどっちだったかよく忘れます)

・途中変数の変動がある場合は他のlabelで挟んでから云々……とかも必要かと思いますが
 簡単なつくりのゲームだったらこれで大丈夫かと思います。

完成図