top of page

Ren'Pyでセーブスロットに直近のセリフを沿える



今回はRen'Pyのセーブスロットに日時だけでなく直近のセリフ(や任意の文字列)を沿える方法をご説明いたします。 これがあると、セーブデータがどこのシーンのものだったか思い出しやすくなります。


 

やること

セリフでなく任意の文字列の追加であれば1.のみ(+必要れあれば4.)で実装できます。


 

それでは、それぞれの手順について詳しく説明していきます。



1. セーブスロットに任意の文字を追加する

任意のシーンで「save_name」という変数に任意の値を与えるとセーブスロットに反映されます。


コードの例:


セーブしてみた例:




2. 直近のセリフを取得する

何もしなくても、「_last_say_what」という変数に直前のセリフが入っています。 試しに「Shift + O」でコンソールを開き、「_last_say_what」の内容を確認してみてください(「_last_say_what」と入力しエンターを押す)。




3. 2.をセーブ時に与える・セーブのときのみ与える

セーブするときに直近のセリフ(「_last_say_what」の値)を「save_name」に設定します。 「screen save」もとい「screen file_slots」に細工をすればよさそうでしょうか。 あるbuttonに「action FileAction(slot)」がありますので、ここに変数の値を変更するアクション「SetVariable」を追加してみようと思います。


ここで注意。「screen file_slots」はセーブ・ロードの両方で使われます。 直前のセリフを取得するのはセーブ時のみでよい(ロード時に行おうとするとエラーが出る)ので、

セーブのときのみこれを行うように書き換えます。


コードの例:


セーブしてみた例(セーブ箇所は1.の例と同じ):




4. 2.に前処理を施す

2.のセリフをそのままセーブスロットに入れると上手くないことがあります。


そこで、「_last_say_what」の値をそのまま「save_name」に渡すのでなく、前処理を施して渡すようにします。 具体的には、(1)直近のセリフが無いときの処理の追加 (2)タグの削除 (3)文字数制限 を行います。


今回は、これらの前処理をPythonの関数としてひとまとめにしました。


init python:

    # 直近のセリフを取得して編集しsave_nameに与える関数
    def f_save_name():

        # セリフの最大文字数を設定
        max_str_length = 12

        # (1)セリフが無い場合(開始直後など)の処理 (エラー防止)
        if _last_say_what == None:
            save_name_tmp = ""

        else:
            # (2)直近のセリフを取得 & タグの削除
            save_message = _last_say_what
            save_message = renpy.filter_text_tags(save_message, allow={}) # {}タグの削除
            save_message = save_message.replace("\n", "") # \nの削除

            # (3)最大文字数より長いセリフを短くする & 前後に「"」を追加する
            if len(save_message) >= max_str_length:
                save_name_tmp = " \"" + save_message[:max_str_length] + "...\""
            else:
                save_name_tmp = " \"" + save_message + "\""

        return save_name_tmp

まず、上記のスクリプトを任意のrpyファイルにコピー&ペーストしてください。


その上で、先ほど編集したボタン部分のスクリプトを更に下図のように編集してください。


ここまでの編集が終わった状態でセーブすると、下図のようにセリフ中の改行が無くなる&長いセリフが短くなります。


全体図です。


 

以上です。 もし上手くいかない部分などございましたら「お問合せ」までお気軽にご連絡ください!



関連記事

すべて表示
bottom of page