From 2269086430fed418ac3888938e0679783e76e6a8 Mon Sep 17 00:00:00 2001 From: Map Date: Sat, 5 Oct 2024 09:42:58 -0500 Subject: [PATCH] Bring all features from latest renpy updates into default renpy scripts --- game/gui.rpy | 6 +- game/gui/bubble.png | Bin 0 -> 6886 bytes game/gui/thoughtbubble.png | Bin 0 -> 4215 bytes game/options.rpy | 6 +- game/screens.rpy | 139 +++++++++++++++++++++++++++++++------ 5 files changed, 124 insertions(+), 27 deletions(-) create mode 100644 game/gui/bubble.png create mode 100644 game/gui/thoughtbubble.png diff --git a/game/gui.rpy b/game/gui.rpy index 858ef3f..c608675 100644 --- a/game/gui.rpy +++ b/game/gui.rpy @@ -11,7 +11,8 @@ init offset = -2 init python: gui.init(1920, 1080) - +## Enable checks for invalid or unstable properties in screens or transforms +#define config.check_conflicting_properties = True ################################################################################ ## GUI Configuration Variables @@ -362,6 +363,8 @@ define config.history_length = 250 ## the cost of performance. define gui.history_height = 210 +define gui.history_spacing = 0 + ## The position, width, and alignment of the label giving the name of the ## speaking character. define gui.history_name_xpos = 233 @@ -419,6 +422,7 @@ define gui.nvl_thought_xalign = 0.0 define gui.nvl_button_xpos = 675 define gui.nvl_button_xalign = 0.0 + ## Localization ################################################################ ## This controls where a line break is permitted. The default is suitable diff --git a/game/gui/bubble.png b/game/gui/bubble.png new file mode 100644 index 0000000000000000000000000000000000000000..3b23ff3bc15c8ddf2469fd411f6fee423fdba853 GIT binary patch literal 6886 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 "Monetization +## Setup" > "Licensing". # define build.google_play_key = "..." diff --git a/game/screens.rpy b/game/screens.rpy index fa3d5cd..1b519cf 100644 --- a/game/screens.rpy +++ b/game/screens.rpy @@ -251,7 +251,7 @@ style choice_button is default: activate_sound "audio/ui/uiRollover.wav" style choice_button_text is default: - properties gui.button_text_properties("choice_button") + properties gui.text_properties("choice_button") ## Quick Menu screen ########################################################### @@ -376,7 +376,7 @@ style navigation_button: properties gui.button_properties("navigation_button") style navigation_button_text: - properties gui.button_text_properties("navigation_button") + properties gui.text_properties("navigation_button") ## Main Menu screen ############################################################ @@ -576,11 +576,11 @@ style main_menu_ex_frame is main_menu_frame ## 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 +## The scroll parameter can be None, or one of "viewport" or "vpgrid". +## 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): +screen game_menu(title, scroll=None, yinitial=0.0, spacing=0): style_prefix "game_menu" @@ -613,6 +613,8 @@ screen game_menu(title, scroll=None, yinitial=0.0): side_yfill True vbox: + spacing spacing + transclude elif scroll == "vpgrid": @@ -628,6 +630,8 @@ screen game_menu(title, scroll=None, yinitial=0.0): side_yfill True + spacing spacing + transclude else: @@ -889,6 +893,7 @@ screen file_slots(title, flag=False): spacing gui.page_spacing textbutton _("<") activate_sound "audio/ui/uiRollover.wav" action FilePagePrevious() + key "save_page_prev" action FilePagePrevious() if config.has_autosave: textbutton _("{#auto_page}A") activate_sound "audio/ui/uiClick.wav" action FilePage("auto") @@ -901,6 +906,7 @@ screen file_slots(title, flag=False): textbutton "[page]" activate_sound "audio/ui/uiClick.wav" action FilePage(page) textbutton _(">") activate_sound "audio/ui/uiRollover.wav" action FilePageNext(max=9) + key "save_page_next" action FilePageNext() if config.has_sync: if CurrentScreenName() == "save": @@ -928,7 +934,7 @@ style page_label: ypadding 5 style page_label_text: - text_align 0.5 + textalign 0.5 layout "subtitle" hover_color gui.hover_color @@ -936,13 +942,13 @@ style page_button: properties gui.button_properties("page_button") style page_button_text: - properties gui.button_text_properties("page_button") + properties gui.text_properties("page_button") style slot_button: properties gui.button_properties("slot_button") style slot_button_text: - properties gui.button_text_properties("slot_button") + properties gui.text_properties("slot_button") ## Preferences screen ########################################################## @@ -1137,7 +1143,7 @@ style radio_button: foreground "gui/button/radio_[prefix_]foreground.png" style radio_button_text: - properties gui.button_text_properties("radio_button") + properties gui.text_properties("radio_button") style check_vbox: spacing gui.pref_button_spacing @@ -1147,7 +1153,7 @@ style check_button: foreground "gui/button/check_[prefix_]foreground.png" style check_button_text: - properties gui.button_text_properties("check_button") + properties gui.text_properties("check_button") style slider_slider: xsize 525 @@ -1158,7 +1164,7 @@ style slider_button: left_margin 15 style slider_button_text: - properties gui.button_text_properties("slider_button") + properties gui.text_properties("slider_button") style slider_vbox: xsize 675 @@ -1179,7 +1185,7 @@ screen history(): ## Avoid predicting this screen, as it can be very large. predict False - use game_menu(_("History"), scroll=("vpgrid" if gui.history_height else "viewport"), yinitial=1.0): + use game_menu(_("History"), scroll=("vpgrid" if gui.history_height else "viewport"), yinitial=1.0, spacing=gui.history_spacing): style_prefix "history" @@ -1238,7 +1244,7 @@ style history_name: style history_name_text: min_width gui.history_name_width - text_align gui.history_name_xalign + textalign gui.history_name_xalign style history_text: xpos gui.history_text_xpos @@ -1246,7 +1252,7 @@ style history_text: xanchor gui.history_text_xalign xsize gui.history_text_width min_width gui.history_text_width - text_align gui.history_text_xalign + textalign gui.history_text_xalign layout ("subtitle" if gui.history_text_xalign else "tex") style history_label: @@ -1411,7 +1417,7 @@ screen mouse_help(): text _("Accesses the game menu. Also escapes the Gallery.") hbox: - label _("Mouse Wheel Up\nClick Rollback Side") + label _("Mouse Wheel Up") text _("Rolls back to earlier dialogue.") hbox: @@ -1433,13 +1439,12 @@ screen gamepad_help(): label _("Right Shoulder") text _("Rolls forward to later dialogue.") - hbox: label _("D-Pad, Sticks") text _("Navigate the interface.") hbox: - label _("Start, Guide") + label _("Start, Guide, B/Right Button") text _("Accesses the game menu.") hbox: @@ -1460,7 +1465,7 @@ style help_button: xmargin 12 style help_button_text: - properties gui.button_text_properties("help_button") + properties gui.text_properties("help_button") style help_label: xsize 375 @@ -1529,14 +1534,14 @@ style confirm_frame: yalign .5 style confirm_prompt_text: - text_align 0.5 + textalign 0.5 layout "subtitle" style confirm_button: properties gui.button_properties("confirm_button") style confirm_button_text: - properties gui.button_text_properties("confirm_button") + properties gui.text_properties("confirm_button") ## Skip indicator screen ####################################################### @@ -1723,7 +1728,7 @@ style nvl_label: yanchor 0.0 xsize gui.nvl_name_width min_width gui.nvl_name_width - text_align gui.nvl_name_xalign + textalign gui.nvl_name_xalign style nvl_dialogue: xpos gui.nvl_text_xpos @@ -1731,7 +1736,7 @@ style nvl_dialogue: ypos gui.nvl_text_ypos xsize gui.nvl_text_width min_width gui.nvl_text_width - text_align gui.nvl_text_xalign + textalign gui.nvl_text_xalign layout ("subtitle" if gui.nvl_text_xalign else "tex") style nvl_thought: @@ -1740,7 +1745,7 @@ style nvl_thought: ypos gui.nvl_thought_ypos xsize gui.nvl_thought_width min_width gui.nvl_thought_width - text_align gui.nvl_thought_xalign + textalign gui.nvl_thought_xalign layout ("subtitle" if gui.nvl_text_xalign else "tex") style nvl_button: @@ -1752,6 +1757,94 @@ style nvl_button_text: properties gui.button_text_properties("nvl_button") +## Bubble screen ############################################################### +## +## The bubble screen is used to display dialogue to the player when using speech +## bubbles. The bubble screen takes the same parameters as the say screen, must +## create a displayable with the id of "what", and can create displayables with +## the "namebox", "who", and "window" ids. +## +## https://www.renpy.org/doc/html/bubble.html#bubble-screen + +screen bubble(who, what): + style_prefix "bubble" + + window: + id "window" + + if who is not None: + + window: + id "namebox" + style "bubble_namebox" + + text who: + id "who" + + text what: + id "what" + +style bubble_window is empty +style bubble_namebox is empty +style bubble_who is default +style bubble_what is default + +style bubble_window: + xpadding 30 + top_padding 5 + bottom_padding 5 + +style bubble_namebox: + xalign 0.5 + +style bubble_who: + xalign 0.5 + textalign 0.5 + color "#000" + +style bubble_what: + align (0.5, 0.5) + text_align 0.5 + layout "subtitle" + color "#000" + +define bubble.frame = Frame("gui/bubble.png", 55, 55, 55, 95) +define bubble.thoughtframe = Frame("gui/thoughtbubble.png", 55, 55, 55, 55) + +define bubble.properties = { + "bottom_left" : { + "window_background" : Transform(bubble.frame, xzoom=1, yzoom=1), + "window_bottom_padding" : 27, + }, + + "bottom_right" : { + "window_background" : Transform(bubble.frame, xzoom=-1, yzoom=1), + "window_bottom_padding" : 27, + }, + + "top_left" : { + "window_background" : Transform(bubble.frame, xzoom=1, yzoom=-1), + "window_top_padding" : 27, + }, + + "top_right" : { + "window_background" : Transform(bubble.frame, xzoom=-1, yzoom=-1), + "window_top_padding" : 27, + }, + + "thought" : { + "window_background" : bubble.thoughtframe, + } +} + +define bubble.expand_area = { + "bottom_left" : (0, 0, 0, 22), + "bottom_right" : (0, 0, 0, 22), + "top_left" : (0, 22, 0, 0), + "top_right" : (0, 22, 0, 0), + "thought" : (0, 0, 0, 0), +} + ################################################################################ ## Mobile Variants