diff --git a/game/gui/creamy_pumpkin_pie/book/book_note.png b/game/gui/creamy_pumpkin_pie/book/book_note.png new file mode 100644 index 00000000..d457658c --- /dev/null +++ b/game/gui/creamy_pumpkin_pie/book/book_note.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4db8bf3a61cbaac5495cf28ce4ddfe659840bd0a53982283f508b46f889ade6 +size 20858 diff --git a/game/scripts/gui/_gui_.rpy b/game/scripts/gui/_gui_.rpy index 88b7c6d1..39dc679f 100644 --- a/game/scripts/gui/_gui_.rpy +++ b/game/scripts/gui/_gui_.rpy @@ -116,8 +116,8 @@ define gui.navigation_padding = 34 define gui.navigation_spacing = 4 # Save thumbnail size -define config.thumbnail_width = 94 -define config.thumbnail_height = 50 +define config.thumbnail_width = 270 +define config.thumbnail_height = 150 # Save slots table define gui.file_slot_cols = 4 diff --git a/game/scripts/gui/main_menu.rpy b/game/scripts/gui/main_menu.rpy index dc6808a4..182fb54b 100644 --- a/game/scripts/gui/main_menu.rpy +++ b/game/scripts/gui/main_menu.rpy @@ -474,6 +474,7 @@ style navigation_radio_vbox: style navigation_radio_label is navigation_label: xsize 206 background Image("gui/creamy_pumpkin_pie/book/book_spacer.png", oversample=4) + style navigation_radio_label_text is navigation_label_text: xalign 0.5 size 24 @@ -508,13 +509,13 @@ style navigation_bar is empty: hover_left_bar Fixed(Frame(Image("gui/creamy_pumpkin_pie/book/book_select.png", oversample=4), 20, 4, 20, 4, tile=False), Frame(Image("gui/creamy_pumpkin_pie/book/book_bar_full.png", oversample=4), tile=False)) style navigation_grid is empty: - xspacing 35 + xspacing 0 yspacing 0 - ypos 20 + # ypos 0 style navigation_picture_button: padding (6, 4) - hover_background Frame(Image("gui/creamy_pumpkin_pie/book/book_select.png", oversample=4), 20, 0, 20, 0, tile=False) + background Frame(Image("gui/creamy_pumpkin_pie/book/book_note.png", oversample=4), 40, 40, 40, 40, tile=False) # style navigation_vbox: # xsize 250 diff --git a/game/scripts/gui/preferences.rpy b/game/scripts/gui/preferences.rpy index e5fae4bf..23255cb1 100644 --- a/game/scripts/gui/preferences.rpy +++ b/game/scripts/gui/preferences.rpy @@ -237,113 +237,113 @@ init python: preferences.renderer = s if s in ("gl2", "angle2") else "auto" renpy.quit(relaunch=True) -style mute_all_button is check_button -style mute_all_button_text is check_button_text +# style mute_all_button is check_button +# style mute_all_button_text is check_button_text -# Preference +# # Preference -style pref_label is gui_label: - top_margin gui.pref_spacing - bottom_margin 2 +# style pref_label is gui_label: +# top_margin gui.pref_spacing +# bottom_margin 2 -style pref_label_text is gui_label_text: - yalign 1.0 +# style pref_label_text is gui_label_text: +# yalign 1.0 -style dark_pref_label_text is dark_label_text -style light_pref_label_text is light_label_text +# style dark_pref_label_text is dark_label_text +# style light_pref_label_text is light_label_text -style pref_button is gui_button: - padding (18, 4, 4, 4) +# style pref_button is gui_button: +# padding (18, 4, 4, 4) -style pref_button_text is gui_button_text +# style pref_button_text is gui_button_text -style pref_vbox is vbox: - xminimum (245 - 30 - 60) / 2 +# style pref_vbox is vbox: +# xminimum (245 - 30 - 60) / 2 -style pref_hbox: - spacing 30 - box_wrap_spacing 2 * gui.pref_spacing +# style pref_hbox: +# spacing 30 +# box_wrap_spacing 2 * gui.pref_spacing -# Radio button +# # Radio button -style radio_label is pref_label -style radio_label_text is pref_label_text -style dark_radio_label_text is dark_pref_label_text -style light_radio_label_text is light_pref_label_text +# style radio_label is pref_label +# style radio_label_text is pref_label_text +# style dark_radio_label_text is dark_pref_label_text +# style light_radio_label_text is light_pref_label_text -style radio_vbox is pref_vbox: - spacing gui.pref_button_spacing +# style radio_vbox is pref_vbox: +# spacing gui.pref_button_spacing -style radio_button is gui_button: - background None - padding (18, 4, 4, 4) +# style radio_button is gui_button: +# background None +# padding (18, 4, 4, 4) -style dark_radio_button is dark_gui_button: - take radio_button - foreground "dark_radio_false" - selected_foreground "dark_radio_true" - insensitive_foreground "dark_radio_none" +# style dark_radio_button is dark_gui_button: +# take radio_button +# foreground "dark_radio_false" +# selected_foreground "dark_radio_true" +# insensitive_foreground "dark_radio_none" -style light_radio_button is light_gui_button: - take radio_button - foreground "light_radio_false" - selected_foreground "light_radio_true" - insensitive_foreground "light_radio_none" +# style light_radio_button is light_gui_button: +# take radio_button +# foreground "light_radio_false" +# selected_foreground "light_radio_true" +# insensitive_foreground "light_radio_none" -style radio_button_text is gui_button_text: - first_indent 6 +# style radio_button_text is gui_button_text: +# first_indent 6 -# Check button +# # Check button -style check_label is pref_label -style check_label_text is pref_label_text -style dark_check_label_text is dark_pref_label_text -style light_check_label_text is light_pref_label_text +# style check_label is pref_label +# style check_label_text is pref_label_text +# style dark_check_label_text is dark_pref_label_text +# style light_check_label_text is light_pref_label_text -style check_vbox is pref_vbox: - spacing gui.pref_button_spacing +# style check_vbox is pref_vbox: +# spacing gui.pref_button_spacing -style check_button is gui_button: - background None - padding (18, 4, 4, 4) +# style check_button is gui_button: +# background None +# padding (18, 4, 4, 4) -style dark_check_button is dark_gui_button: - take check_button - foreground "dark_check_false" - selected_foreground "dark_check_true" - insensitive_foreground "dark_check_none" +# style dark_check_button is dark_gui_button: +# take check_button +# foreground "dark_check_false" +# selected_foreground "dark_check_true" +# insensitive_foreground "dark_check_none" -style light_check_button is light_gui_button: - take check_button - foreground "light_check_false" - selected_foreground "light_check_true" - insensitive_foreground "light_check_none" +# style light_check_button is light_gui_button: +# take check_button +# foreground "light_check_false" +# selected_foreground "light_check_true" +# insensitive_foreground "light_check_none" -style check_button_text is gui_button_text: - first_indent 6 +# style check_button_text is gui_button_text: +# first_indent 6 -# Slider +# # Slider -style slider_label is pref_label -style slider_label_text is pref_label_text -style dark_slider_label_text is dark_pref_label_text -style light_slider_label_text is light_pref_label_text +# style slider_label is pref_label +# style slider_label_text is pref_label_text +# style dark_slider_label_text is dark_pref_label_text +# style light_slider_label_text is light_pref_label_text -style slider_slider is gui_slider: - xsize 320 +# style slider_slider is gui_slider: +# xsize 320 -style dark_slider_slider is dark_slider -style light_slider_slider is light_slider +# style dark_slider_slider is dark_slider +# style light_slider_slider is light_slider -style slider_button is gui_button: - background None - yalign 0.5 - left_margin 9 +# style slider_button is gui_button: +# background None +# yalign 0.5 +# left_margin 9 -style slider_button_text is gui_button_text +# style slider_button_text is gui_button_text -style slider_vbox is pref_vbox: - xsize 320 +# style slider_vbox is pref_vbox: +# xsize 320 screen _self_voicing(): zorder 1500 diff --git a/game/scripts/gui/save_files.rpy b/game/scripts/gui/save_files.rpy index 35c3195d..95123da7 100644 --- a/game/scripts/gui/save_files.rpy +++ b/game/scripts/gui/save_files.rpy @@ -21,6 +21,7 @@ screen load(): screen file_slots(title): default page_name = FilePageNameInputValue(pattern=_("Page {}"), auto=_("Auto Saves"), quick=_("Quick Saves")) default time_format = "{#file_time}%#d %B, %Y, %#H:%M" if renpy.windows else "{#file_time}%-d %B, %Y, %-H:%M" + default slot_rotations = [renpy.random.randint(-5, 5) for i in range(1, 14)] frame style "navigation_page_left": vbox: @@ -31,32 +32,51 @@ screen file_slots(title): style "navigation_label_text" value page_name - grid 2 3: + # Grid breaks as soon as we rotate displaybles, so we have to use our own calculations. /shrugs + # grid 2 3: + + frame style "empty": for i in range(1, 7): - vbox style "file_vbox": - text "[i]." offset (-10, 16) size 16 - text FileTime(i, format=time_format) size 10 xalign 0.5 - - button: - style "navigation_picture_button" - xysize (135, 75) + button: + style "navigation_picture_button" + xysize (150, 140) + xpos ((i-1) % 2) * 160 + ypos ((i-1) // 2) * 140 - if FileLoadable(i): - add FileScreenshot(i) xysize (135, 75) - else: - add "#ffffff80" xysize (135, 75) - - if not FileCompatible(i) and title == "Load": - action Confirm(gui.SAVE_INCOMPATIBLE_WARNING, FileAction(i)) - else: - action FileAction(i) - - textbutton "{unicode}✘{/unicode}" action FileDelete(i) xalign 1.0 style "file_delete" if FileLoadable(i): - $ playtime = FileJson(i, "playtime", missing=0) - $ minutes, seconds = divmod(int(playtime), 60) - $ hours, minutes = divmod(minutes, 60) - text f"Playtime: {hours}H {minutes}M {seconds}S" size 10 xalign 0.5 yoffset 4 + add At(FileScreenshot(i), file_hover) xysize (135, 75) xalign 0.5 ypos 16 + else: + add "#C69D65" xysize (135, 75) xalign 0.5 ypos 16 + + if not FileCompatible(i) and title == "Load": + action Confirm(gui.SAVE_INCOMPATIBLE_WARNING, FileAction(i)) + else: + action FileAction(i) + + # FileSaveName sometimes returns an empty string regardless of 'empty' parameter. /shrugs + $ file_name = (FileSaveName(i) or f"Slot {i}") + text "[file_name]" style "file_description_text" ypos 2 + + vbox style "file_vbox": + ypos 100 + xalign 0.5 + text FileTime(i, format=time_format) style "file_description_text" + if FileLoadable(i): + $ playtime = FileJson(i, "playtime", missing=0) + $ minutes, seconds = divmod(int(playtime), 60) + $ hours, minutes = divmod(minutes, 60) + text f"Playtime: {hours}H {minutes}M {seconds}S" style "file_description_text" + + at transform: + subpixel True + offset (75, 70) + anchor (0.5, 0.5) + rotate slot_rotations[i] + + on idle: + easein 0.25 rotate slot_rotations[i] + on hover: + easein 0.25 rotate 0 frame style "navigation_page_right": vbox: @@ -68,45 +88,73 @@ screen file_slots(title): # style "navigation_label_text" # value page_name - grid 2 3: + frame style "empty": for i in range(7, 13): - vbox style "file_vbox": - text "[i]." offset (-10, 16) size 16 - text FileTime(i, format=time_format) size 10 xalign 0.5 - - button: - style "navigation_picture_button" - xysize (135, 75) + button: + style "navigation_picture_button" + xysize (150, 140) + xpos ((i-7) % 2) * 160 + ypos ((i-7) // 2) * 140 - if FileLoadable(i): - add FileScreenshot(i) xysize (135, 75) - else: - add "#ffffff80" xysize (135, 75) - - if not FileCompatible(i) and title == "Load": - action Confirm(gui.SAVE_INCOMPATIBLE_WARNING, FileAction(i)) - else: - action FileAction(i) - - textbutton "{unicode}✘{/unicode}" action FileDelete(i) xalign 1.0 style "file_delete" if FileLoadable(i): - $ playtime = FileJson(i, "playtime", missing=0) - $ minutes, seconds = divmod(int(playtime), 60) - $ hours, minutes = divmod(minutes, 60) - text f"Playtime: {hours}H {minutes}M {seconds}S" size 10 xalign 0.5 yoffset 4 + add At(FileScreenshot(i), file_hover) xysize (135, 75) xalign 0.5 ypos 16 + else: + add "#C69D65" xysize (135, 75) xalign 0.5 ypos 16 + + if not FileCompatible(i) and title == "Load": + action Confirm(gui.SAVE_INCOMPATIBLE_WARNING, FileAction(i)) + else: + action FileAction(i) + + # FileSaveName sometimes returns an empty string regardless of 'empty' parameter. /shrugs + $ file_name = (FileSaveName(i) or f"Slot {i}") + text "[file_name]" style "file_description_text" ypos 2 + + vbox style "file_vbox": + ypos 100 + xalign 0.5 + text FileTime(i, format=time_format) style "file_description_text" + if FileLoadable(i): + $ playtime = FileJson(i, "playtime", missing=0) + $ minutes, seconds = divmod(int(playtime), 60) + $ hours, minutes = divmod(minutes, 60) + text f"Playtime: {hours}H {minutes}M {seconds}S" style "file_description_text" + + at transform: + subpixel True + offset (75, 70) + anchor (0.5, 0.5) + rotate slot_rotations[i] + + on idle: + easein 0.25 rotate slot_rotations[i] + on hover: + easein 0.25 rotate 0 + +transform file_hover: + on hover: + matrixcolor SaturationMatrix(1.0) + on idle: + matrixcolor SaturationMatrix(0.5) style file_delete style file_delete_text: color "#ffffff" +style file_description_text: + color "#000000" + size 10 + font gui.bold_font + xalign 0.5 + style file_vbox is empty: fit_first True xfill False yfill False - xsize 135 + xsize 150 spacing 0 - pos (4, -16) + # pos (4, -16) # use game_menu(title): @@ -218,55 +266,55 @@ style file_vbox is empty: # key ["mousedown_5", "K_LEFT", "repeat_K_LEFT"] action FilePagePrevious() -style page_label is gui_label +# 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 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 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 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 is gui_button: +# background None +# padding (9, 4, 9, 4) -style page_button_text is gui_button_text: - size 20 - xalign 0.5 +# 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 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 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 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_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 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 +# style slot_delete_button_text is slot_button_text: +# size 24