# # Main/game menu screens # init offset = -1 # Main menu screen # # Used to display the main menu when Ren'Py starts. # # https://www.renpy.org/doc/html/screen_special.html#main-menu screen main_menu(): # This ensures that any other menu screen is replaced tag menu style_prefix "main_menu" add gui.main_menu_background # This empty frame darkens the main menu frame: pass vbox: spacing gui.navigation_spacing * 2 yoffset gui.navigation_padding align (1.0, 0.0) xsize 300 add "game_title" zoom 0.75 xalign 0.5 if prerelease: text "TEST-ONLY" at transform: rotate 45 vbox: spacing gui.navigation_spacing * 2 yoffset -gui.navigation_padding align (1.0, 1.0) fixed: xysize (300, 75) imagebutton: idle Transform("discord_idle", alpha=0.5, zoom=0.5) hover Transform("discord_idle", alpha=0.75, zoom=0.55) focus_mask None pos (0.333, 0.5) anchor (0.5, 0.5) action OpenURL("https://discord.gg/UbQeTCJ5RW") tooltip "Discord" imagebutton: idle Transform("patreon_idle", alpha=0.5, zoom=0.5) hover Transform("patreon_idle", alpha=0.75, zoom=0.55) focus_mask None pos (0.666, 0.5) anchor (0.5, 0.5) action OpenURL("https://www.patreon.com/SilverStudioGames") tooltip "Patreon" fixed: xysize (300, 30) vbox: xoffset -100 - gui.navigation_padding yalign 0.5 at transform: alpha 0.6 if prerelease: text "Pre-release": style "main_menu_version" text "[config.version]": style "main_menu_version" imagebutton: idle Transform("silverstudiogames_idle", alpha=0.5, zoom=0.5) hover Transform("silverstudiogames_idle", alpha=0.75, zoom=0.55) focus_mask None align (0.5, 0.5) action OpenURL("https://www.silverstudiogames.org") use navigation_main_menu image main_menu_bg: alpha 0.5 "#000" style main_menu_frame is empty style main_menu_vbox is vbox style main_menu_frame: xalign 1.0 xsize 300 # 234 yfill True background "main_menu_bg" style main_menu_text is gui_text: color gui.accent_color xalign 1.0 style main_menu_title is main_menu_text: size 42 style main_menu_version is main_menu_text: color "#fff" outlines [(1, "#000000", 1, 0)] # Game menu screen # # This lays out the basic common structure of a game menu screen. It's called # with the screen title, and displays the background, title, and navigation. # # The scroll parameter can be None, or one of "viewport" or "vpgrid". When # this screen is intended to be used with one or more children, which are # transcluded (placed) inside it. screen game_menu(title, scroll=None, yinitial=0.0): # style_prefix "game_menu" # add gui.game_menu_background # frame: # style "game_menu_outer_frame" # if gui.theme() == "light": # background "#00000040" # else: # background "#00000080" # hbox: # box_reverse True # spacing 25 # # Reserve space for the navigation section # frame: # style "game_menu_navigation_frame" # frame: # # Content frame uses GUI theme # style gui.theme("game_menu_content_frame") # style_prefix gui.theme() # if scroll == "viewport": # viewport: # yinitial yinitial # scrollbars "vertical" # mousewheel True # draggable True # pagekeys True # side_yfill True # frame: # style "empty" # padding (15, 15, 15, 15) # transclude # elif scroll == "vpgrid": # vpgrid: # cols 1 # yinitial yinitial # scrollbars "vertical" # mousewheel True # draggable True # pagekeys True # side_yfill True # transclude # else: # frame: # style "empty" # padding (15, 15, 15, 15) # transclude use navigation # use navigation(title): # label title xalign .5 if main_menu and not title == "Updater": key "game_menu" action ShowMenu("main_menu") style game_menu_outer_frame is empty: padding (25, 100, 25, 25) xfill True yfill True style game_menu_navigation_frame is empty: xsize 250 yfill True style game_menu_content_frame is empty: xsize 755 style dark_game_menu_content_frame is dark_gui_frame: take game_menu_content_frame style light_game_menu_content_frame is light_gui_frame: take game_menu_content_frame style game_menu_viewport is gui_viewport style game_menu_scrollbar is gui_vscrollbar style game_menu_vscrollbar: unscrollable gui.unscrollable style game_menu_side is gui_side: spacing 9 style game_menu_label is gui_label: xpos 50 ysize 100 style game_menu_label_text is gui_label_text: color gui.accent_color size 42 yalign 0.5 # Navigation screen # # This screen is included in the main and game menus, and provides navigation # to other menus, and to start the game. screen navigation_main_menu(title=None): default show_quick_start = False default show_dev_start = False default is_sensitive = title != "Updater" key "keydown_K_LSHIFT" action SetLocalVariable("show_quick_start", True) key "keyup_K_LSHIFT" action SetLocalVariable("show_quick_start", False) if config.developer: key "keydown_K_LCTRL" action SetLocalVariable("show_dev_start", True) key "keyup_K_LCTRL" action SetLocalVariable("show_dev_start", False) vbox: style_prefix "navigation" if main_menu: yalign 1.0 yoffset -105 - gui.navigation_padding * 2 else: yalign 0.5 transclude null height 28 # Half button height if main_menu: if not title: if not renpy.mobile: if version_float(UPDATE_VER) > version_float(): textbutton "Install updates" action InstallUpdates() style_prefix "update_available" sensitive (not prerelease) else: textbutton "Check for updates" action CheckUpdates(300) sensitive (not prerelease) text "[UPDATE_HINT]" size 8 color "#fff" xalign 0.5 if show_quick_start: textbutton _("Quick Start") action Start("start_quick") sensitive is_sensitive elif show_dev_start: textbutton _("Developer Start") action Start("start_dev") sensitive is_sensitive keysym "ctrl_mousedown_1" else: textbutton _("Start") action Start() sensitive is_sensitive else: textbutton _("Return") action Return() sensitive is_sensitive else: textbutton _("Return") action Return() sensitive is_sensitive textbutton _("History") action ShowMenu("history") sensitive is_sensitive textbutton _("Save") action ShowMenu("save") sensitive is_sensitive textbutton _("Load") action ShowMenu("load") sensitive is_sensitive textbutton _("Preferences") action ShowMenu("preferences") sensitive is_sensitive if main_menu: textbutton _("Mods") sensitive (bool(mods_list) and is_sensitive) action ShowMenu("mods") textbutton _("Credits") action Jump("credits") sensitive is_sensitive if not renpy.mobile: textbutton _("Quit") action Quit(confirm=not main_menu) sensitive is_sensitive else: textbutton _("Help") action ShowMenu("help") sensitive is_sensitive textbutton _("Quit to menu") action MainMenu() sensitive is_sensitive screen navigation(): style_prefix "navigation" default last_frame = (screenshot.capture() or screenshot.image) default category = "save" default subcategory = None default page = 0 default navigation_atl = navigation_show default navigation_last_frame_atl = navigation_last_frame_show default navigation_exit = False default page_right_atl = None default page_left_atl = None add last_frame at navigation_last_frame_atl # add "gui_fade_both" at gui_fade if navigation_exit: timer 0.4 action Return() frame: # We need to use a 'hacky' way to set transforms and # set the exit timer because events aren't correctly passed to # the children when exitting upper context # from (what I assume) is a transient screen. at navigation_atl vbox: style_prefix "navigation_tabs" textbutton "Save" action [SetLocalVariable("subcategory", None), SetLocalVariable("category", "save")] selected (category=="save") at navigation_tabs textbutton "Load" action [SetLocalVariable("subcategory", None), SetLocalVariable("category", "load")] selected (category=="load") at navigation_tabs textbutton "Settings" action [SetLocalVariable("subcategory", "general"), SetLocalVariable("category", "settings")] at navigation_tabs textbutton "Main Menu" action MainMenu() at navigation_tabs null height 35 textbutton "Return" action [SetScreenVariable("navigation_last_frame_atl", navigation_last_frame_hide), SetScreenVariable("navigation_atl", navigation_hide), SetScreenVariable("navigation_exit", True)] keysym "game_menu" at navigation_tabs if category == "save": vbox: style_prefix "navigation_subtabs" textbutton "A.Saves" action FilePage("auto") at navigation_tabs textbutton "Q.Saves" action FilePage("quick") at navigation_tabs null height 35 textbutton "Next" action FilePageNext() at navigation_tabs textbutton "Previous" action FilePagePrevious() at navigation_tabs use file_slots(_("Save")) elif category == "load": vbox: style_prefix "navigation_subtabs" textbutton "A.Saves" action FilePage("auto") at navigation_tabs textbutton "Q.Saves" action FilePage("quick") at navigation_tabs null height 35 textbutton "Next" action FilePageNext() at navigation_tabs textbutton "Previous" action FilePagePrevious() at navigation_tabs use file_slots(_("Load")) elif category == "settings": vbox: style_prefix "navigation_subtabs" textbutton "General" action SetLocalVariable("subcategory", "general") at navigation_tabs textbutton "Display" action SetLocalVariable("subcategory", "display") at navigation_tabs textbutton "Audio" action SetLocalVariable("subcategory", "audio") at navigation_tabs textbutton "Other" action SetLocalVariable("subcategory", "accessibility") at navigation_tabs if subcategory == "audio": use preferences_sound elif subcategory == "accessibility": use preferences_accessibility elif subcategory == "display": use preferences_visuals elif subcategory == "general": use preferences_general transform navigation_tabs: subpixel True xzoom 1.0 yanchor 0.5 on hover: easein 0.1 xzoom 1.1 easeout 0.1 xzoom 1.0 transform navigation_last_frame_show: matrixcolor SaturationMatrix(1.0) easein 1.0 matrixcolor SaturationMatrix(0.33) transform navigation_last_frame_hide: matrixcolor SaturationMatrix(0.33) easeout 0.4 matrixcolor SaturationMatrix(1.0) transform navigation_show: subpixel True zoom 0.0 alpha 0.0 easein_back 0.4 zoom 1.0 alpha 1.0 transform navigation_hide: subpixel True events False zoom 1.0 alpha 1.0 easeout_back 0.4 zoom 0.0 alpha 0.0 transform pause_trans(p, old_widget=None, new_widget=None): events False old_widget pause p new_widget events True style navigation_frame is empty: align (0.5, 0.5) xysize (750, 512) background Image("gui/creamy_pumpkin_pie/book/book_background.png", oversample=4) style navigation_page_left is empty: fit_first True xanchor 1.0 pos (364, 8) xysize (343, 490) background Image("gui/creamy_pumpkin_pie/book/book_page_left.png", oversample=4) style navigation_page_right is empty: fit_first True xanchor 0.0 pos (364, 8) xysize (343, 490) background Image("gui/creamy_pumpkin_pie/book/book_page_right.png", oversample=4) style navigation_vbox: fit_first True xfill True pos (12, 12) style navigation_label: xalign 0.5 xpadding 80 xoffset -12 ysize 38 background Frame(Image("gui/creamy_pumpkin_pie/book/book_label.png", oversample=4), 80, 0, 80, 0, tile=False) style navigation_tabs_vbox: yspacing 10 pos (721, 50) style navigation_tabs_button: ysize 35 left_padding 15 right_padding 30 selected_right_padding 50 background Frame(Image("gui/creamy_pumpkin_pie/book/book_tab.png", oversample=4), 0, 0, 80, 0, tile=False) selected_background Frame(Image("gui/creamy_pumpkin_pie/book/book_tab.png", oversample=4), 0, 0, 80, 0, tile=False) insensitive_background Frame(Transform(Image("gui/creamy_pumpkin_pie/book/book_tab.png", oversample=4), matrixcolor=SaturationMatrix(0.0)), 0, 0, 80, 0, tile=False) style navigation_tabs_button_text is who: color "#ffffff" outlines [(2, "#000000", 1, 1)] hinting "auto" font gui.bold_font size 20 yalign 0.5 style navigation_subtabs_vbox: xanchor 1.0 pos (23, 50) yspacing 10 style navigation_subtabs_button: xalign 1.0 ysize 35 right_padding 15 left_padding 30 selected_left_padding 50 background Frame(Transform(Image("gui/creamy_pumpkin_pie/book/book_tab.png", oversample=4), xzoom=-1), 80, 0, 0, 0, tile=False) insensitive_background Frame(Transform(Image("gui/creamy_pumpkin_pie/book/book_tab.png", oversample=4), xzoom=-1, matrixcolor=SaturationMatrix(0.0)), 80, 0, 0, 0, tile=False) style navigation_subtabs_button_text is navigation_tabs_button_text style navigation_label_text: ypos 8 color "#704F32" size 28 style navigation_text: color "#704F32" outlines [(1, "#704f3215", -1, -1), (1, "#704f3238", 1, 1)] size 20 style navigation_sublabel is navigation_text: xalign 0.5 style navigation_checkbox_vbox: fit_first True xfill True yspacing 4 style navigation_checkbox_label is navigation_label: xsize 206 background Transform(Image("gui/creamy_pumpkin_pie/book/book_spacer.png", oversample=4), xalign=0.5) style navigation_checkbox_label_text is navigation_label_text: xalign 0.5 size 24 style navigation_button: padding (6, 4) hover_background Frame(Image("gui/creamy_pumpkin_pie/book/book_select.png", oversample=4), 20, 0, 20, 0, tile=False) style navigation_button_text is navigation_text: insensitive_color "#704F3280" style navigation_checkbox_button: padding (6, 4) hover_background Frame(Image("gui/creamy_pumpkin_pie/book/book_select.png", oversample=4), 20, 0, 20, 0, tile=False) foreground Transform(Image("gui/creamy_pumpkin_pie/book/book_button_check_empty.png", oversample=4), xpos=6, yalign=0.5) selected_foreground Transform(Image("gui/creamy_pumpkin_pie/book/book_button_check_checked.png", oversample=4), xpos=6, yalign=0.5) insensitive_foreground Transform(Image("gui/creamy_pumpkin_pie/book/book_button_check_empty.png", oversample=4), alpha=0.5, xpos=6, yalign=0.5) style navigation_checkbox_button_text is navigation_text: first_indent 24 insensitive_color "#704F3280" style navigation_checkbox_text is navigation_text style navigation_radio_vbox: fit_first True # xfill True # TODO: WTF? Why does it break the entire menu? yspacing 4 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 style navigation_radio_button: padding (6, 4) hover_background Frame(Image("gui/creamy_pumpkin_pie/book/book_select.png", oversample=4), 20, 0, 20, 0, tile=False) foreground Transform(Image("gui/creamy_pumpkin_pie/book/book_button_radio_empty.png", oversample=4), xpos=6, yalign=0.5) selected_foreground Transform(Image("gui/creamy_pumpkin_pie/book/book_button_radio_checked.png", oversample=4), xpos=6, yalign=0.5) insensitive_foreground Transform(Image("gui/creamy_pumpkin_pie/book/book_button_radio_empty.png", oversample=4), alpha=0.5, xpos=6, yalign=0.5) style navigation_radio_button_text is navigation_text: first_indent 24 insensitive_color "#704F3280" style navigation_slider is empty: xalign 0.5 xmaximum 300 ysize 20 left_bar Frame(Image("gui/creamy_pumpkin_pie/book/book_slider.png", oversample=4), tile=False) right_bar Frame(Image("gui/creamy_pumpkin_pie/book/book_slider.png", oversample=4), tile=False) thumb Image("gui/creamy_pumpkin_pie/book/book_slider_thumb.png", oversample=4) thumb_offset 16 style navigation_bar is empty: xalign 0.5 xmaximum 300 ysize 20 left_bar Frame(Image("gui/creamy_pumpkin_pie/book/book_bar_full.png", oversample=4), tile=False) right_bar Frame(Image("gui/creamy_pumpkin_pie/book/book_bar_empty.png", oversample=4), tile=False) hover_right_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_empty.png", oversample=4), tile=False)) 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_note: padding (6, 4) background Frame(Image("gui/creamy_pumpkin_pie/book/book_note.png", oversample=4), 40, 40, 40, 40, tile=False)