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 0000000..3b23ff3 Binary files /dev/null and b/game/gui/bubble.png differ diff --git a/game/gui/thoughtbubble.png b/game/gui/thoughtbubble.png new file mode 100644 index 0000000..8d5d44b Binary files /dev/null and b/game/gui/thoughtbubble.png differ diff --git a/game/options.rpy b/game/options.rpy index f8f87a4..3150711 100644 --- a/game/options.rpy +++ b/game/options.rpy @@ -235,9 +235,9 @@ init python: build.documentation('*.txt') -## A Google Play license key is required to download expansion files and perform -## in-app purchases. It can be found on the "Services & APIs" page of the Google -## Play developer console. +## A Google Play license key is required to perform in-app purchases. It can be +## found in the Google Play developer console, under "Monetize" > "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