2022-05-16 23:48:22 +00:00
|
|
|
init offset = -1
|
|
|
|
|
|
|
|
screen nvl(dialogue, items=None):
|
|
|
|
null
|
|
|
|
|
2024-05-14 20:54:03 +00:00
|
|
|
# init python:
|
|
|
|
# import re
|
|
|
|
# def text_inner_thought(string, pattern=re.compile(r"\(([^)]+)\)")):
|
|
|
|
# return re.findall(pattern, string)
|
2023-03-15 22:27:08 +00:00
|
|
|
|
2022-05-16 23:48:22 +00:00
|
|
|
screen say(who, what, side_image=None, icon=None):
|
2024-05-14 20:54:03 +00:00
|
|
|
style_prefix "say"
|
|
|
|
layer "interface"
|
2024-05-19 20:12:51 +00:00
|
|
|
zorder 0
|
2024-04-23 18:25:17 +00:00
|
|
|
|
2024-05-14 20:54:03 +00:00
|
|
|
if states.settings.interface_hidden:
|
|
|
|
use hider
|
2023-03-12 21:40:16 +00:00
|
|
|
|
2024-05-14 20:54:03 +00:00
|
|
|
window:
|
|
|
|
id "textbox"
|
|
|
|
style "textbox"
|
2023-03-20 21:44:55 +00:00
|
|
|
|
2024-05-19 20:00:48 +00:00
|
|
|
# TODO: Remove after 1080p gets implemented
|
|
|
|
at transform:
|
|
|
|
zoom 0.5
|
|
|
|
xalign 0.5
|
|
|
|
|
2024-05-14 20:54:03 +00:00
|
|
|
# Ren'py hard crashes without textbox windows,
|
|
|
|
# this is the workaround that just works.
|
|
|
|
if states.settings.interface_hidden:
|
|
|
|
yoffset 1000
|
2024-04-23 18:25:17 +00:00
|
|
|
|
|
|
|
if who:
|
2024-05-14 20:54:03 +00:00
|
|
|
|
2024-04-23 18:25:17 +00:00
|
|
|
window:
|
|
|
|
id "namebox"
|
|
|
|
style "namebox"
|
2024-05-14 20:54:03 +00:00
|
|
|
text who id "who" style "who"
|
2022-05-16 23:48:22 +00:00
|
|
|
|
2024-05-14 20:54:03 +00:00
|
|
|
text what id "what" style "what"
|
2022-05-16 23:48:22 +00:00
|
|
|
|
2024-05-14 20:54:03 +00:00
|
|
|
use quickbox
|
2022-05-16 23:48:22 +00:00
|
|
|
|
2024-05-14 20:54:03 +00:00
|
|
|
add SideImage()
|
2022-05-16 23:48:22 +00:00
|
|
|
|
2024-05-14 20:54:03 +00:00
|
|
|
screen hider():
|
|
|
|
variant "pc"
|
|
|
|
if states.settings.interface_hidden:
|
|
|
|
button action ToggleVariable("states.settings.interface_hidden", True, False) style "empty"
|
2022-05-16 23:48:22 +00:00
|
|
|
|
2024-05-14 20:54:03 +00:00
|
|
|
window:
|
|
|
|
id "hider"
|
|
|
|
style "hider"
|
|
|
|
style_prefix "hider"
|
|
|
|
textbutton "" action ToggleVariable("states.settings.interface_hidden", True, False) tooltip _("Unhide Interface")
|
2022-05-16 23:48:22 +00:00
|
|
|
|
2024-05-14 20:54:03 +00:00
|
|
|
default states.settings.quickbox_expanded = True
|
|
|
|
default states.settings.interface_hidden = False
|
|
|
|
default states.settings.interface_alpha = 0.5
|
2022-05-16 23:48:22 +00:00
|
|
|
|
2024-05-14 20:54:03 +00:00
|
|
|
screen quickbox():
|
|
|
|
variant "pc"
|
2022-05-16 23:48:22 +00:00
|
|
|
|
2024-05-14 20:54:03 +00:00
|
|
|
window:
|
|
|
|
id "quickbox"
|
|
|
|
style "quickbox"
|
|
|
|
style_prefix "quickbox"
|
|
|
|
|
|
|
|
hbox:
|
|
|
|
xalign 1.0
|
|
|
|
if states.settings.quickbox_expanded:
|
|
|
|
textbutton "" action ToggleVariable("states.settings.interface_hidden", True, False) tooltip _("Hide Interface") # Hide Interface (\F0209)
|
|
|
|
textbutton "" action QuickSave() tooltip _("Quick Save") # File Save (\F01DA)
|
|
|
|
textbutton "" action QuickLoad() tooltip _("Quick Load") # File Load (\F0552)
|
|
|
|
textbutton "" action Preference("auto-forward", "toggle") tooltip _("Auto-Forward Dialogue") # Autoplay (\F18F2)
|
|
|
|
textbutton "" action ShowMenu("preferences") tooltip _("Game Options") # Settings (\F0493)
|
|
|
|
textbutton "" action ToggleVariable("states.settings.quickbox_expanded", True, False) tooltip _("Toggle Quick Action Box") # Menu (\F0BAB)
|
|
|
|
|
|
|
|
style quickbox_button
|
|
|
|
style quickbox_button_text:
|
|
|
|
font gui.glyph_font
|
|
|
|
color "#bbbbbb"
|
|
|
|
hover_color "#ffffff"
|
|
|
|
selected_color "#EA8E61"
|
|
|
|
outlines [(3, "#000000", 1, 1)]
|
|
|
|
size 36
|
|
|
|
|
|
|
|
style textbox:
|
|
|
|
ysize 250
|
|
|
|
yalign 1.0
|
|
|
|
background Transform(Image("gui/creamy_pumpkin_pie/textbox.png", xalign=0.5, yalign=1.0, oversample=2), alpha=0.5)
|
|
|
|
|
|
|
|
style what:
|
2024-05-19 20:00:48 +00:00
|
|
|
xpos 0.5
|
2024-05-14 20:54:03 +00:00
|
|
|
ypos 20
|
2024-05-19 20:00:48 +00:00
|
|
|
xsize 1000
|
|
|
|
xoffset -480
|
2024-05-14 20:54:03 +00:00
|
|
|
color "#fff"
|
|
|
|
outlines [(3, "#000000", 1, 1)]
|
|
|
|
hinting "bytecode"
|
|
|
|
size 32
|
|
|
|
justify True
|
|
|
|
|
|
|
|
style namebox:
|
|
|
|
ysize 43 # Halved due to oversampling
|
|
|
|
padding (50, 0, 50, 0)
|
|
|
|
fit_first True
|
|
|
|
xpos 0.5
|
|
|
|
yalign 1.0
|
|
|
|
xanchor 0.0
|
|
|
|
offset (-570, -250)
|
|
|
|
background Transform(Frame("gui/creamy_pumpkin_pie/namebox.png", 48, 0, 48, 0, oversample=2, tile=True), alpha=0.5)
|
|
|
|
|
|
|
|
style who:
|
|
|
|
color "#EA8E61"
|
|
|
|
outlines [(3, "#000000", 1, 1)]
|
|
|
|
hinting "auto"
|
|
|
|
font gui.bold_font
|
|
|
|
size 42
|
|
|
|
|
|
|
|
style quickbox is namebox:
|
|
|
|
padding (50, 0, 50, 0)
|
|
|
|
xanchor 1.0
|
|
|
|
xoffset 570
|
|
|
|
|
|
|
|
style hider is namebox:
|
|
|
|
align (0.5, 1.0)
|
|
|
|
offset (0, 0)
|
|
|
|
padding (50, 0, 50, 0)
|
|
|
|
|
|
|
|
style hider_button is quickbox_button
|
|
|
|
style hider_button_text is quickbox_button_text
|
|
|
|
|
|
|
|
# screen say(who, what, side_image=None, icon=None):
|
|
|
|
# zorder 31
|
|
|
|
|
|
|
|
# if _windows_hidden:
|
|
|
|
# use invisible_button(action=SetVariable("_windows_hidden", False))
|
|
|
|
# else:
|
|
|
|
# if not renpy.get_screen("choice"):
|
|
|
|
# use invisible_button(action=Function(ui.saybehavior), keysym="dismiss")
|
|
|
|
|
|
|
|
# if side_image:
|
|
|
|
# add side_image yalign 1.0 zoom 0.5
|
|
|
|
# else:
|
|
|
|
# add SideImage()
|
|
|
|
|
|
|
|
# window id "window":
|
|
|
|
# style "say_window"
|
|
|
|
|
|
|
|
# if who:
|
|
|
|
# window:
|
|
|
|
# id "namebox"
|
|
|
|
# style "namebox"
|
|
|
|
# text who:
|
|
|
|
# style "say_label"
|
|
|
|
|
|
|
|
# text what:
|
|
|
|
# id "what"
|
|
|
|
# style "say_dialogue"
|
|
|
|
|
|
|
|
# if _windows_hidden:
|
|
|
|
# ypos 1000
|
|
|
|
|
|
|
|
# if _game_menu_screen:
|
|
|
|
# use quick_menu
|
2022-05-16 23:48:22 +00:00
|
|
|
|
|
|
|
# Quick menu screen
|
|
|
|
#
|
|
|
|
# The quick menu is displayed in-game to provide easy access to the out-of-game menus.
|
|
|
|
|
2024-05-14 20:54:03 +00:00
|
|
|
# screen quick_menu():
|
|
|
|
# hbox:
|
|
|
|
# style_prefix "quick"
|
|
|
|
# xalign 1.0
|
|
|
|
# yoffset -30
|
|
|
|
|
|
|
|
# textbutton _("Q.Save") action QuickSave()
|
|
|
|
# textbutton _("Q.Load") action QuickLoad()
|
|
|
|
# textbutton _("Skip") action Skip()
|
|
|
|
# textbutton _("Auto") action Preference("auto-forward", "toggle")
|
|
|
|
# textbutton _("Preferences") action ShowMenu("preferences")
|
|
|
|
|
|
|
|
# style quick_button is default:
|
|
|
|
# activate_sound "sounds/qubodup-click2.ogg"
|
|
|
|
# hover_sound "sounds/qubodup-hover2.ogg"
|
|
|
|
# background None
|
|
|
|
# xpadding 8
|
|
|
|
# ypadding 8
|
|
|
|
|
|
|
|
# style quick_button_text:
|
|
|
|
# size 10
|
|
|
|
# idle_color "#8888"
|
|
|
|
# hover_color "#fff"
|
|
|
|
# insensitive_color "#4448"
|
|
|
|
# idle_outlines [(1, "#0008", 1, 1)]
|
|
|
|
# hover_outlines [(1, "#000", 1, 1)]
|
2024-02-05 20:02:32 +00:00
|
|
|
|
2022-05-16 23:48:22 +00:00
|
|
|
# Choice screen
|
|
|
|
#
|
|
|
|
# This screen is used to display the in-game choices presented by the menu
|
|
|
|
# statement. The one parameter, items, is a list of objects, each with caption
|
|
|
|
# and action fields.
|
|
|
|
#
|
|
|
|
# https://www.renpy.org/doc/html/screen_special.html#choice
|
|
|
|
|
2023-11-18 18:47:40 +00:00
|
|
|
define blacklist_screens = {"say", "letter", "bld1"}
|
|
|
|
define choice_width = int(config.screen_width/2)
|
|
|
|
|
2023-11-16 00:55:20 +00:00
|
|
|
screen choice(items, menu_yalign=.6):
|
2022-05-16 23:48:22 +00:00
|
|
|
tag menu
|
|
|
|
modal True
|
2024-05-15 22:02:05 +00:00
|
|
|
zorder 0
|
|
|
|
layer "interface"
|
2022-05-16 23:48:22 +00:00
|
|
|
|
|
|
|
style_prefix gui.theme("menu")
|
|
|
|
|
2023-04-11 19:36:22 +00:00
|
|
|
default blacklist_tags = set(get_character_tag(x) for x in states.dolls)
|
2022-05-16 23:48:22 +00:00
|
|
|
|
|
|
|
# Dont add the fade if character or saybox is present (They have their own triggers for fading)
|
|
|
|
if not any(renpy.get_screen(x) for x in blacklist_screens) and not any(renpy.showing(x, layer="screens") for x in blacklist_tags):
|
|
|
|
add "interface/bld.webp" at fade_hide(0.15)
|
|
|
|
|
|
|
|
window at fade_show_hide(0.15):
|
|
|
|
style "empty"
|
2023-11-17 00:47:28 +00:00
|
|
|
xalign .5
|
2023-11-16 00:55:20 +00:00
|
|
|
yalign menu_yalign
|
2022-05-16 23:48:22 +00:00
|
|
|
|
|
|
|
vbox:
|
|
|
|
spacing 0
|
|
|
|
|
2023-11-18 18:47:40 +00:00
|
|
|
default max_progress = max(len(e.kwargs.get("progress", [])) for e in items)
|
2022-05-16 23:48:22 +00:00
|
|
|
|
|
|
|
for i, entry in enumerate(items, 1):
|
|
|
|
$ style_part = entry.kwargs.get("style", None)
|
|
|
|
button:
|
|
|
|
xsize choice_width
|
|
|
|
ypadding 5
|
|
|
|
action entry.action
|
|
|
|
sensitive bool(entry.action)
|
|
|
|
if i < 10 and entry.action:
|
2023-07-05 21:35:28 +00:00
|
|
|
keysym ("K_"+str(i), "K_KP"+str(i))
|
2022-05-16 23:48:22 +00:00
|
|
|
|
|
|
|
fixed:
|
|
|
|
style "empty"
|
|
|
|
|
|
|
|
if style_part:
|
2024-03-26 19:31:41 +00:00
|
|
|
style_prefix gui.theme(f"{style_part}_menu")
|
2022-05-16 23:48:22 +00:00
|
|
|
|
|
|
|
fit_first "height"
|
|
|
|
|
|
|
|
text entry.caption:
|
|
|
|
xsize choice_width-120 # Leave enough margin for number and icon
|
|
|
|
align (0.5, 0.5)
|
|
|
|
|
|
|
|
if i < 10 and entry.action:
|
|
|
|
text "{size=-2}[i].{/size}" xpos 5 yalign 0.5
|
|
|
|
|
|
|
|
$ icon = entry.kwargs.get("icon", None)
|
|
|
|
if icon:
|
|
|
|
add icon xcenter 40 yalign 0.5
|
|
|
|
|
|
|
|
$ progress = entry.kwargs.get("progress", None)
|
|
|
|
if progress:
|
|
|
|
hbox:
|
|
|
|
spacing 2
|
|
|
|
xpos choice_width - 5
|
2024-03-25 14:57:36 +00:00
|
|
|
xanchor 1.
|
|
|
|
yalign .5
|
|
|
|
for i in range(max_progress):
|
2022-05-16 23:48:22 +00:00
|
|
|
if i < len(progress):
|
|
|
|
add progress[i]
|
|
|
|
else:
|
|
|
|
null width 21 # Assume icon width
|
|
|
|
|
|
|
|
style menu_text is default:
|
|
|
|
hover_color "#fff"
|
|
|
|
text_align 0.5
|
|
|
|
outlines [(1, "#00000080", 1, 0)]
|
|
|
|
|
|
|
|
style dark_menu_text:
|
|
|
|
color "#9b8d84"
|
|
|
|
insensitive_color "#6c625c"
|
|
|
|
|
|
|
|
style light_menu_text:
|
|
|
|
color "#f9d592"
|
|
|
|
insensitive_color "#ae9566"
|
|
|
|
|
|
|
|
style dark_disabled_menu_text:
|
|
|
|
color "#6c625c"
|
|
|
|
|
|
|
|
style light_disabled_menu_text:
|
|
|
|
color "#ae9566"
|
|
|
|
|
|
|
|
style menu_button is default:
|
2024-04-18 15:57:31 +00:00
|
|
|
activate_sound "sounds/qubodup-click1.ogg"
|
|
|
|
hover_sound "sounds/qubodup-hover1.ogg"
|
2022-05-16 23:48:22 +00:00
|
|
|
|
|
|
|
style dark_menu_button:
|
|
|
|
background "#5d5151e6"
|
|
|
|
hover_background "#897e75"
|
|
|
|
insensitive_background "#9e8449"
|
|
|
|
|
|
|
|
style light_menu_button:
|
|
|
|
background "#ac8d5ae6"
|
|
|
|
hover_background "#97681f"
|
|
|
|
insensitive_background "#d1a02eb3"
|
|
|
|
|
|
|
|
# Input screen
|
|
|
|
#
|
|
|
|
# This screen is used to display renpy.input. The prompt parameter is used to
|
|
|
|
# pass a text prompt in.
|
|
|
|
#
|
|
|
|
# This screen must create an input displayable with id "input" to accept the
|
|
|
|
# various input parameters.
|
|
|
|
#
|
|
|
|
# https://www.renpy.org/doc/html/screen_special.html#input
|
|
|
|
|
|
|
|
screen input(prompt):
|
|
|
|
zorder 30
|
|
|
|
|
|
|
|
style_prefix "say"
|
|
|
|
window:
|
|
|
|
id "window"
|
|
|
|
style gui.theme("say_window")
|
|
|
|
|
|
|
|
if prompt:
|
|
|
|
window:
|
|
|
|
style gui.theme("namebox")
|
|
|
|
text prompt:
|
|
|
|
style gui.theme("say_label")
|
|
|
|
|
|
|
|
input id "input":
|
2024-05-14 20:54:03 +00:00
|
|
|
style gui.theme("say_dialogue")
|