Ren'Py How to customize Save Slots ??

Aug 20, 2018
18
5
Hello!
I'm trying to find a way to let the user of my game ,be able to name his save slots when he presses the LOAD button on the main menu.
Is there an easy way to do this?
Any help is appreciated :)
 

OhWee

Forum Fanatic
Modder
Game Developer
Jun 17, 2017
5,645
28,375
There's a couple of threads on the lemmasoft forum about this, and a couple of games have done this (Dating My Daughter comes to mind), but I'm interested in what the collective here has to suggest here.

I did a for DMD where you could edit the description of a save slot after it was created (i.e. click to edit description), but I 'Frankensteined things' a bit to incorporate the code snippets I found into the DMD code, due to the changes Mr. Dots had already made to the save game code, I haven't been able to successfully recreate that functionality, but I also haven't been 100% focused on trying to figure that out either.

Also, it required you to 'load' the save first, and then resave it, so the main thing it did was to allow you to edit the text in the save slot area, as opposed to having a popup window to add the description.

Short form, adding a description when performing the save is possible, it's if you want 'click to edit the description' functionality afterwords where things get more complicated.

(grabs popcorn, awaits replies from the coding collective).
:D
 
Last edited:

JohnDupont

Active Member
Modder
May 26, 2017
792
2,658
I don't know an easy way but this how Save/Load is coded for Summertime Saga (the important part for you is "screen set_save_description(file_save, slot)":

Code:
screen save() tag menu:
    imagemap:
        ground "backgrounds/menu_saving01.jpg"
        idle "backgrounds/menu_saving01.jpg"
        hover HoverImage("backgrounds/menu_saving01.jpg")
        alpha False

        use load_save_page_buttons(FileCurrentPage())

        hotspot (133, 275, 225, 168) hovered Show("load_save_slot_description", slot = 1) unhovered Hide("load_save_slot_description") action Hide("load_save_slot_description"), Function(clearSaveName), Show("set_save_description", file_save = FileSave(1), slot = 1):
            use load_save_slot(1)
        hotspot (400, 275, 225, 168) hovered Show("load_save_slot_description", slot = 2) unhovered Hide("load_save_slot_description") action Hide("load_save_slot_description"), Function(clearSaveName), Show("set_save_description", file_save = FileSave(2), slot = 2):
            use load_save_slot(2)
        hotspot (668, 275, 225, 168) hovered Show("load_save_slot_description", slot = 3) unhovered Hide("load_save_slot_description") action Hide("load_save_slot_description"), Function(clearSaveName), Show("set_save_description", file_save = FileSave(3), slot = 3):
            use load_save_slot(3)
        hotspot (133, 468, 225, 168) hovered Show("load_save_slot_description", slot = 4) unhovered Hide("load_save_slot_description") action Hide("load_save_slot_description"), Function(clearSaveName), Show("set_save_description", file_save = FileSave(4), slot = 4):
            use load_save_slot(4)
        hotspot (400, 468, 225, 168) hovered Show("load_save_slot_description", slot = 5) unhovered Hide("load_save_slot_description") action Hide("load_save_slot_description"), Function(clearSaveName), Show("set_save_description", file_save = FileSave(5), slot = 5):
            use load_save_slot(5)
        hotspot (668, 468, 225, 168) hovered Show("load_save_slot_description", slot = 6) unhovered Hide("load_save_slot_description") action Hide("load_save_slot_description"), Function(clearSaveName), Show("set_save_description", file_save = FileSave(6), slot = 6):
            use load_save_slot(6)

screen set_save_description(file_save, slot) tag save:
    python:
        if FileSaveName(slot) == "":
            store.save_name = "{} - Day {}".format(store.firstname, game.timer._game_day)
        else:
            store.save_name = FileSaveName(slot)
    modal True
    key "mouseup_3" action [file_save, Hide("set_save_description")]
    imagebutton:
        idle "backgrounds/menu_ground.png"
        action file_save, Hide("set_save_description")
    add "boxes/popup_name_save.png" at truecenter
    text "{b}Give this save a description:{/b}" xalign 0.5 yalign 0.415
    add Input(size = 20, color = "#FFFFFF", default = store.save_name, changed = save_description, length = 35, xpos = 300, ypos = 353, allow = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_")
    key "K_RETURN" action [file_save, Hide("set_save_description")]
    imagebutton idle "buttons/menu_ok.png" hover HoverImage("buttons/menu_ok.png") action [file_save, Hide("set_save_description")] xalign 0.5 yalign 0.57

screen load() tag menu:
    imagemap:
        ground "backgrounds/menu_loading01.jpg"
        idle "backgrounds/menu_loading01.jpg"
        hover HoverImage("backgrounds/menu_loading01.jpg")
        alpha False

        use load_save_page_buttons(FileCurrentPage())

        hotspot (133, 275, 225, 168) hovered Show("load_save_slot_description", slot = 1) unhovered Hide("load_save_slot_description") action FileLoad(1):
            use load_save_slot(1)
        hotspot (400, 275, 225, 168) hovered Show("load_save_slot_description", slot = 2) unhovered Hide("load_save_slot_description") action FileLoad(2):
            use load_save_slot(2)
        hotspot (668, 275, 225, 168) hovered Show("load_save_slot_description", slot = 3) unhovered Hide("load_save_slot_description") action FileLoad(3):
            use load_save_slot(3)
        hotspot (133, 468, 225, 168) hovered Show("load_save_slot_description", slot = 4) unhovered Hide("load_save_slot_description") action FileLoad(4):
            use load_save_slot(4)
        hotspot (400, 468, 225, 168) hovered Show("load_save_slot_description", slot = 5) unhovered Hide("load_save_slot_description") action FileLoad(5):
            use load_save_slot(5)
        hotspot (668, 468, 225, 168) hovered Show("load_save_slot_description", slot = 6) unhovered Hide("load_save_slot_description") action FileLoad(6):
            use load_save_slot(6)

screen load_save_page_buttons(load_save_page) tag save:
    if load_save_page in ["auto", "quick", "1", "2"]:
        $ load_save_page = 3
    $ load_save_page = int(load_save_page)

    hotspot (289, 208, 38, 37) clicked FilePage("auto"):
        use load_save_page_number((289, 208, 38, 37), "auto")
    hotspot (348, 208, 38, 37) clicked FilePage("quick"):
        use load_save_page_number((348, 208, 38, 37), "quick")
    hotspot (407, 208, 38, 37) clicked FilePage(load_save_page - 2):
        use load_save_page_number((407, 208, 38, 37), load_save_page - 2)
    hotspot (465, 208, 38, 37) clicked FilePage(load_save_page - 1):
        use load_save_page_number((465, 208, 38, 37), load_save_page - 1)
    hotspot (524, 208, 38, 37) clicked FilePage(load_save_page):
        use load_save_page_number((524, 208, 38, 37), load_save_page)
    hotspot (583, 208, 38, 37) clicked FilePage(load_save_page + 1):
        use load_save_page_number((583, 208, 38, 37), load_save_page + 1)
    hotspot (642, 208, 38, 37) clicked FilePage(load_save_page + 2):
        use load_save_page_number((642, 208, 38, 37), load_save_page + 2)
    hotspot (700, 208, 38, 37) clicked FilePage(load_save_page + 3):
        use load_save_page_number((700, 208, 38, 37), load_save_page + 3)

    hotspot (428, 137, 172, 44) action Return()
    hotspot (134, 208, 94, 38) clicked FilePagePrevious()
    if (load_save_page + 7) < 99:
        hotspot (800, 208, 94, 38) clicked FilePageNext()

screen load_save_page_number(load_save_page_area, load_save_page_name) tag save:
    if load_save_page_name == "auto":
        text "{b}A{/b}" xalign 0.5 yalign 0.6
    elif load_save_page_name == "quick":
        text "{b}Q{/b}" xalign 0.5 yalign 0.6
    else:
        text str("{b}" + str(load_save_page_name).zfill(2) + "{/b}") xalign 0.5 yalign 0.6

screen load_save_slot(slot) tag save:
    $ file_text = "{}. {}".format(str(FileSlotName(slot, 6)).zfill(2), FileTime(slot))
    add FileScreenshot(slot) xoffset 2 yoffset 2
    text "{b}[file_text]{/b}" yoffset -20
    if FileLoadable(slot):
        imagebutton idle "buttons/delete_button_01.png" hover HoverImage("buttons/delete_button_01.png") xalign 0.99 yalign 0.01 action FileDelete(slot)
    key "save_delete" action FileDelete(slot)

screen load_save_slot_description(slot) tag save:
    $ file_text = "{}".format(FileSaveName(slot))
    if file_text == "":
        $ file_text = "No Description"
    if not file_text.endswith("."):
        $ file_text += "."
    text "{b}[file_text]{/b}" xalign 0.5 yalign 0.92
They also use config.auto_save_extra_info = "[persistent.firstname] - Day [persistent.last_game_day]" for the default description of autosaves.
 
Last edited:

OhWee

Forum Fanatic
Modder
Game Developer
Jun 17, 2017
5,645
28,375
I just love how the people on the lemmasoft forum assume that everyone just understands how to code in Renpy/python.

Here's the most succinct post I've found for manually entering a save name desctiption:



There used to be a better post for this, but I can't find that thread now (may have been deleted).

There's a few mentions of json elsewhere, but again, in one specific case the person mentioning this assumed that people knew what json was, and didn't bother to follow up with another reply.

Edit: This thread might be worth a look too:


I do suggest looking at the DMD save game code, if you'd like to do fun things like adding the Day, current variable values, etc. to your save slots. I used a few icons (actually an overlay image with said icons pre-positioned) in my , but yeah you get the idea here. Said code has a bunch of stuff to 'locate' the variables in the save descriptions (Mr. Dots did that), but once you get more comfortable with code, yeah it might be worth looking at at a later date. Or some coding guru could explain a 'simpler' way to to what was done in this case.

 
Last edited: