Ren'Py memo

Ren'Pyの個人的なメモ

セーブにメモを作るプラグイン

引用 
badmustard.itch.io

original code by BadMustard
コメントは機械翻訳(DeepL)で日本語化しています。

続きがあります。

1. ダウンロードしたzipからrequiredCode.txtを開く

original text by requiredCode.txt

セーブに名前をつけるために必要なのは、以下のコードだけです。
使用するscreens.rpyファイルの3つのエリアに分けて配置する必要があります。
1つ目と2つ目は同じエリアに、3つ目は別のエリアに配置します。
オプションのアイコンを使ってセーブファイルを削除したり、自分で作成したりする場合は、必ず必要な「images/delete」フォルダをコピーしてください。画像がないとクラッシュします。

requiredCode.txtから該当のコードをコピペする
もしくはscreens.rpyからBadMustardを検索する

2. screens.rpyのsaveスクリーンを編集する

screen file_slots(title)

button:

(省略)

# 強制的にセーブ名を追加
if persistent.saveName:
    action If(renpy.get_screen("save"), true=Show("savegameName", accept=FileSave(slot)), false=FileLoad(slot))
else:
    action FileAction(slot)

(省略)

# 任意で保存名を追加 
if FileSaveName(slot):
    $ fn = FileSaveName(slot)
    if fn and ("-" in fn):
        $ y = fn.split("-")
    text fn:
        style "slot_name_text"

# save_delete = [ 'K_DELETE', 'KP_DELETE' ]
# デリートキーを押すとファイルが消える設定
key "save_delete" action FileDelete(slot)

# これを上のオプションの下に置く 
if FileLoadable(slot):
    imagebutton:
        auto "images/delete/delete_%s.png"
        action FileDelete(slot)
        xalign 1.0
        xoffset 15
        yoffset -85

screens.rpy内であればどこでも

screen savegameName(accept=NullAction()):

    modal True
    add "black" alpha 0.8
    style_prefix "savegameName"

    frame:
        has vbox:
            xalign 0.5
            spacing 20

        label _("Save Name"):
            text_color gui.text_color
            xalign 0.5

        null height 10

        input size 40 color gui.hover_color default store.save_name changed Namer length 22 allow allowedChars:
            yalign 1.0
            xalign 0.5
            xysize (550, 40)

        textbutton _("{u}Save the Game{/u}"):
            xalign 0.5
            keysym ['K_RETURN', 'K_KP_ENTER']
            action [accept, (Hide("savegameName"))]

init python:
    import string
    def Namer(name):
        store.save_name = name

# 入力可能な文字を定義します。
# 許可する文字は以下になります:
# 大文字(ascii_lettersの場合)
# 小文字(ascii_lettersの場合)
# 数字 0 から 9 (数字)
# スペース、ダッシュ
define allowedChars = string.ascii_letters + string.digits + " -"
default persistent.saveName = True

style savegameName_frame:
    padding gui.confirm_frame_borders.padding
    xsize 650
    xalign 0.5
    yalign 0.5

style savegameName_frame:
    variant "touch"
    padding gui.confirm_frame_borders.padding
    xsize 650
    xalign 0.5
    yalign 0
    ypos 50

3.screen preferencesにコードを追加

screen preferences():
## radio_pref "または "check_pref "タイプのvboxをここに追加して、作成者が定義したプリファレンスを追加することができます。

vbox:
 style_prefix "radio"
 label _("Save game names")
 textbutton _("Yes") action [SetVariable("persistent.saveName", True), SetVariable("store.save_name", "")]
 textbutton _("No") action [SetVariable("persistent.saveName", False), SetVariable("store.save_name", "Un-Named")] #デフォルトの名前を設定します。

余談 改変コード

セーブ機能と切り離したメモのボタンを作りたかったので作りました。

screen file_slots(title)

screen file_slots(title):

(省略)

if file_name in persistent.savename:
    $ fn = name_hyouji(file_name)
else:
    $ fn = ""

textbutton "MEMO:"+fn:
    action Show("savegameName", num=file_name, memo=fn)

#"MEMO:"の内容は好きに変えていいです。
#保存したメモの内容をボタンに表示しない場合は+fnのところを削ってください。

screens.rpy内であればどこでも

screen savegameName(num,memo):

    modal True
    layer "confirm"
    add "conf_background"
    style_prefix "confirm"

    if preferences.language == "en_us":
        dismiss action Hide("savegameName")

    on "show" action name_func(memo)
    key "input_enter" action [Function(setname,num),(Hide("savegameName"))]

    frame at conf_appear:
        has vbox:
            xalign 0.5
            spacing 20

        label _("MEMO\n{size=-3}(15文字まで/Enterで決定){/size}"):
            xalign 0.5
            text_text_align 0.5

        null height 5

        input size 28 color gcolor2 default memo changed name_func:
            length 15
            yalign 1.0
            xalign 0.5
            xysize (400, 40)

        #lengthの値で何文字まで保存できるか設定できます。
        #xysizeを大きくすることでinputの表示枠を広げることができます。

        if preferences.language == "en_us":
            hbox:
                xalign 0.5
                spacing 50
                textbutton _("Yes") action [Function(setname,num),(Hide("savegameName"))] background "color2" hover_background "color4"
                textbutton _("No!") action [Hide("savegameName")]

options.rpy

default persistent.memo = ""
default persistent.savename = {"0": "a"}

init -3 python:

(省略)
    def name_func(newstring):
        global memo
        memo = persistent.memo
        persistent.memo = newstring

    def setname(num):
        persistent.savename[num] = persistent.memo

    def name_hyouji(num):
        return persistent.savename[num]