WTS/game/scripts/gui/save_files.rpy

194 lines
6.1 KiB
Plaintext
Raw Permalink Normal View History

2022-05-16 23:48:22 +00:00
#
# Load/save screens
#
# These screens are responsible for letting the player save the game and load
# it again. Since they share nearly everything in common, both are implemented
# in terms of a third screen, file_slots.
#
# https://www.renpy.org/doc/html/screen_special.html#save
# https://www.renpy.org/doc/html/screen_special.html#load
init offset = -1
screen save():
tag menu
use file_slots(_("Save"))
screen load():
tag menu
use file_slots(_("Load"))
screen file_slots(title):
default page_name = FilePageNameInputValue(pattern=_("Page {}"), auto=_("Auto Saves"), quick=_("Quick Saves"))
default page_modifier = 0
use game_menu(title):
fixed:
# This ensures the input will get the enter event before any of the buttons do
order_reverse True
# The page name, which can be edited by clicking on a button
button:
style gui.theme("page_label")
key_events True
xalign 0.5
action page_name.Toggle()
hbox:
spacing 9
input:
style gui.theme("page_label_text")
value page_name
if page_name.editable:
text "{size=-4}{font=[gui.glyph_font]}✎{/font}{/size}"
## The grid of file slots.
grid gui.file_slot_cols gui.file_slot_rows:
style_prefix gui.theme("slot")
xalign 0.5
yalign 0.5
spacing gui.slot_spacing
transpose True
2022-09-29 21:19:55 +00:00
for i in range(gui.file_slot_cols * gui.file_slot_rows):
2022-05-16 23:48:22 +00:00
$ slot = i + 1
button:
2023-07-04 18:43:37 +00:00
if not FileCompatible(slot) and title == "Load":
action Confirm(gui.SAVE_INCOMPATIBLE_WARNING, FileAction(slot))
else:
action FileAction(slot)
2022-05-16 23:48:22 +00:00
has fixed
if FileLoadable(slot):
add FileScreenshot(slot)
vbox:
style_prefix "slot_button"
xpos config.thumbnail_width
xsize gui.slot_width - config.thumbnail_width - gui.slot_height
yalign 0.5
if FileCompatible(slot):
default slot_time_format = "{#file_time}%#d %B, %Y, %#H:%M" if renpy.windows else "{#file_time}%-d %B, %Y, %-H:%M"
$ day = FileJson(slot, "day", missing="Unknown")
$ playtime = FileJson(slot, "playtime", missing=0)
$ minutes, seconds = divmod(int(playtime), 60)
$ hours, minutes = divmod(minutes, 60)
text FileTime(slot, format=slot_time_format)
text f"Day: {day}"
text f"Playtime: {hours}H {minutes}M {seconds}S"
2022-05-16 23:48:22 +00:00
else:
2023-07-04 18:43:37 +00:00
text "INCOMPATIBLE VERSION" color "#f00"
2022-05-16 23:48:22 +00:00
textbutton "{font=[gui.glyph_font]}✘{/font}":
style "slot_delete_button"
action FileDelete(slot)
key "save_delete" action FileDelete(slot)
else:
text f"Empty Slot {FileSlotName(slot, gui.file_slot_cols * gui.file_slot_rows)}." style "slot_button_text"
2022-05-16 23:48:22 +00:00
## Buttons to access other pages.
hbox:
style_prefix gui.theme("page")
align (0.5, 1.0)
yoffset 8
spacing gui.page_spacing
textbutton _("<") action FilePagePrevious()
if config.has_autosave:
textbutton _("{#auto_page}A") action FilePage("auto") keysym "K_a"
if config.has_quicksave:
textbutton _("{#quick_page}Q") action FilePage("quick") keysym "K_q"
2022-05-16 23:48:22 +00:00
$ page_modifier = max(0, int(FilePageName(str(page_modifier+9), str(page_modifier+9)))-9)
2022-09-29 21:19:55 +00:00
for page in range(1+page_modifier, 10+page_modifier):
2022-05-16 23:48:22 +00:00
textbutton "[page]":
xminimum 40
action FilePage(page)
if page < 10:
keysym f"K_{page}"
2022-05-16 23:48:22 +00:00
textbutton _(">") action FilePageNext()
key ["mousedown_4", "K_RIGHT", "repeat_K_RIGHT"] action FilePageNext()
key ["mousedown_5", "K_LEFT", "repeat_K_LEFT"] action FilePagePrevious()
style page_label is gui_label
style page_label_text is gui_label_text:
text_align 0.5
layout "subtitle"
hover_color gui.hover_color
style dark_page_label_text is dark_label_text:
take page_label_text
style light_page_label_text is light_label_text:
take page_label_text
style page_button is gui_button:
background None
padding (9, 4, 9, 4)
style page_button_text is gui_button_text:
size 20
xalign 0.5
style slot_button is gui_button:
# background gui.muted_color
xsize gui.slot_width
ysize gui.slot_height+4
padding (2, 2, 2, 2)
style dark_slot_button:
take dark_gui_frame
insensitive_background Fixed(Transform(Frame("gui/dark_frame.png", 8, 8)), "#00000040")
style light_slot_button:
take light_gui_frame
insensitive_background Fixed(Transform(Frame("gui/light_frame.png", 8, 8)), "#00000040")
style slot_button_text is gui_button_text:
size 14
xalign 0.5
text_align 0.5
idle_color gui.idle_small_color
selected_idle_color gui.selected_color
selected_hover_color gui.hover_color
style slot_delete_button is gui_button:
background None
idle_background None
xsize gui.slot_height
ysize gui.slot_height
xalign 1.0
style slot_delete_button_text is slot_button_text:
size 24