################################################################################
## Initialization
################################################################################
init offset = -1
################################################################################
## Styles
################################################################################
style default:
properties gui.text_properties()
language gui.language
style input:
properties gui.text_properties("input", accent=True)
adjust_spacing False
style hyperlink_text:
properties gui.text_properties("hyperlink", accent=True)
hover_underline True
style gui_text:
properties gui.text_properties("interface")
style button:
properties gui.button_properties("button")
style button_text is gui_text:
properties gui.text_properties("button")
yalign 0.5
size 30
style label_text is gui_text:
properties gui.text_properties("label", accent=True)
style prompt_text is gui_text:
properties gui.text_properties("prompt")
style bar:
ysize gui.bar_size
left_bar Frame("gui/bar/left.png", gui.bar_borders, tile=gui.bar_tile)
right_bar Frame("gui/bar/right.png", gui.bar_borders, tile=gui.bar_tile)
style vbar:
xsize gui.bar_size
top_bar Frame("gui/bar/top.png", gui.vbar_borders, tile=gui.bar_tile)
bottom_bar Frame("gui/bar/bottom.png", gui.vbar_borders, tile=gui.bar_tile)
style scrollbar:
ysize gui.scrollbar_size
base_bar Frame("gui/scrollbar/horizontal_[prefix_]bar.png", gui.scrollbar_borders, tile=gui.scrollbar_tile)
thumb Frame("gui/scrollbar/horizontal_[prefix_]thumb.png", gui.scrollbar_borders, tile=gui.scrollbar_tile)
style vscrollbar:
xsize gui.scrollbar_size
base_bar Frame("gui/scrollbar/vertical_[prefix_]bar.png", gui.vscrollbar_borders, tile=gui.scrollbar_tile)
thumb Frame("gui/scrollbar/vertical_[prefix_]thumb.png", gui.vscrollbar_borders, tile=gui.scrollbar_tile)
style slider:
ysize gui.slider_size
base_bar Frame("gui/slider/horizontal_[prefix_]bar.png", gui.slider_borders, tile=gui.slider_tile)
thumb "gui/slider/horizontal_[prefix_]thumb.png"
style vslider:
xsize gui.slider_size
base_bar Frame("gui/slider/vertical_[prefix_]bar.png", gui.vslider_borders, tile=gui.slider_tile)
thumb "gui/slider/vertical_[prefix_]thumb.png"
style frame:
padding gui.frame_borders.padding
background Frame("gui/frame.png", gui.frame_borders, tile=gui.frame_tile)
################################################################################
## In-game screens
################################################################################
## Say screen ##################################################################
##
## The say screen is used to display dialogue to the player. It takes two
## parameters, who and what, which are the name of the speaking character and
## the text to be displayed, respectively. (The who parameter can be None if no
## name is given.)
##
## This screen must create a text displayable with id "what", as Ren'Py uses
## this to manage text display. It can also create displayables with id "who"
## and id "window" to apply style properties.
##
## https://www.renpy.org/doc/html/screen_special.html#say
screen say(who, what):
style_prefix "say"
window:
id "window"
if who is not None:
window:
id "namebox"
style "namebox"
text who id "who"
text what id "what"
## If there's a side image, display it above the text. Do not display on the
## phone variant - there's no room.
if not renpy.variant("small"):
add SideImage() xalign 0.0 yalign 1.0
## Make the namebox available for styling through the Character object.
init python:
config.character_id_prefixes.append('namebox')
style window is default
style say_label is default
style say_dialogue is default
style say_thought is say_dialogue
style namebox is default
style namebox_label is say_label
style window:
xalign 0.5
xfill True
yfill True
yalign gui.textbox_yalign
ysize gui.textbox_height
background Frame(Image("gui/textbox.png", xalign=0.5, yalign=1.0), 0, 0)
style namebox:
xpos gui.name_xpos
xanchor gui.name_xalign
xsize gui.namebox_width
ypos gui.name_ypos
ysize gui.namebox_height
background Frame("gui/namebox.png", gui.namebox_borders, tile=gui.namebox_tile, xalign=gui.name_xalign)
padding gui.namebox_borders.padding
style say_label:
properties gui.text_properties("name", accent=True)
xalign gui.name_xalign
yalign 0.5
style say_dialogue:
properties gui.text_properties("dialogue")
xpos gui.dialogue_xpos
xsize gui.dialogue_width
ypos gui.dialogue_ypos
## 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):
style_prefix "input"
window:
vbox:
xalign gui.dialogue_text_xalign
xpos gui.dialogue_xpos
xsize gui.dialogue_width
ypos gui.dialogue_ypos
text prompt style "input_prompt"
input id "input"
style input_prompt is default
style input_prompt:
xalign gui.dialogue_text_xalign
properties gui.text_properties("input_prompt")
style input:
xalign gui.dialogue_text_xalign
xmaximum gui.dialogue_width
## 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
screen choice(items):
style_prefix "choice"
vbox:
for i in items:
textbutton i.caption:
xalign 0.5
xmaximum 0.95
action i.action
## When this is true, menu captions will be spoken by the narrator. When false,
## menu captions will be displayed as empty buttons.
define config.narrator_menu = True
style choice_vbox is vbox
style choice_button is button
style choice_button_text is button_text
style choice_vbox:
xalign 0.5
ypos 0.25
yanchor 0.0
spacing gui.choice_spacing
style choice_button is default:
properties gui.button_properties("choice_button")
background Frame("gui/WideBB_insensitive.png", 5, 5)
style choice_button_text is default:
xmaximum 0.92
ymargin 12
properties gui.button_text_properties("choice_button")
size 42
## Quick Menu screen ###########################################################
##
## The quick menu is displayed in-game to provide easy access to the out-of-game
## menus.
screen quick_menu():
## Ensure this appears on top of other screens.
zorder 100
## Main HUD Control
if hud_interface:
frame:
#background "#0009"
background "gui/HUD.png"
xalign 0.5
yalign 0.0
frame:
style_prefix "quick"
background "#0000"
xmargin 50
ymargin 50
vbox:
spacing 12
label _("%s (Lv. %d)" % (persistent.nickname or "Guest", Player["level"])):
xalign 0.5
if Player["ap"] < Player["max_ap"]:
add DynamicDisplayable(countdown, length=Player["aptime"]-now()+360.0):
xpos 0.5
xanchor 1.0
else:
add DynamicDisplayable(countdown, length=0.0):
xpos 0.5
xanchor 1.0
hbox:
spacing 24
label _("XP")
bar:
value StaticValue(Player["exp"], Player["max_exp"])
xsize 140
left_bar Color("#6F6")
#right_bar
label _("%d/%d" % (Player["exp"], Player["max_exp"])):
text_size 24
text _("$ %d" % Player["gp"]):
size 36
xalign 1.0
hbox:
spacing 24
label _("AP")
bar:
value StaticValue(Player["ap"], Player["max_ap"])
xsize 140
label _("%d/%d" % (Player["ap"], Player["max_ap"])):
text_size 24
text _("{image=gfx/gui/crystal.png} %d" % Player["crystals"]):
size 36
xalign 1.0
## DownLoader Screen
showif tr_loading:
frame:
background "#0000"
xalign 0.5
yalign 0.5
add "spinner"
## Story QuickMenu control
if story_mode:
hbox:
style_prefix "quick"
xalign 0.5
yalign 1.0
textbutton _("History") action ShowMenu('history')
textbutton _("Skip") action Skip() alternate Skip(fast=True, confirm=True)
textbutton _("Auto") action Preference("auto-forward", "toggle")
textbutton _("Prefs") action ShowMenu('preferences')
## This code ensures that the quick_menu screen is displayed in-game, whenever
## the player has not explicitly hidden the interface.
init python:
config.overlay_screens.append("quick_menu")
def hud_clear():
global story_mode, hud_interface
_window_hide(None)
story_mode=False
hud_interface=False
def hud_show():
global story_mode, hud_interface
_window_hide(None)
story_mode=False
hud_interface=True
def hud_story():
global story_mode, hud_interface
_window_show(None)
story_mode=True
hud_interface=False
#default quick_menu = True
default tr_loading = False
default story_mode = False
default hud_interface = False
style quick_button is default
style quick_button_text is button_text
style quick_button:
properties gui.button_properties("quick_button")
style quick_button_text:
properties gui.button_text_properties("quick_button")
################################################################################
## Main and Game Menu Screens
################################################################################
## 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():
hbox:
style_prefix "navigation"
xpos gui.navigation_xpos
yalign 0.0
spacing gui.navigation_spacing
if main_menu:
textbutton _("Start") action Start()
else:
textbutton _("History") action ShowMenu("history")
textbutton _("Preferences") action ShowMenu("preferences")
if _in_replay:
textbutton _("End Replay") action EndReplay(confirm=True)
elif not main_menu and (debug or config.developer):
textbutton _("Main Menu") action SpheresMainMenu()
textbutton _("About") action ShowMenu("about")
if renpy.variant("pc") or (renpy.variant("web") and not renpy.variant("mobile")):
## Help isn't necessary or relevant to mobile devices.
textbutton _("Help") action ShowMenu("help")
if not renpy.ios and not renpy.emscripten:
## The quit button is banned on iOS and unnecessary on Android and
## Web. So renpy.variant("pc") would make sense
## renpy.variant() → large/medium/small, tablet/phone, touch, tv,
## ouya, firetv, android, ios, mobile, pc, web, etc.
textbutton _("Quit") action Quit(confirm=not main_menu)
style navigation_button is gui_button
style navigation_button_text is gui_button_text
style navigation_button:
size_group "navigation"
properties gui.button_properties("navigation_button")
style navigation_button_text:
properties gui.button_text_properties("navigation_button")
## 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
## Creates main background
fixed:
frame:
xfill True
yfill True
background Frame("gfx/bg/forest_sunset.png", 0, 0)
image "gfx/nourishedflower.webp":
xalign 0.5
yalign 1.0
frame:
xfill True
yfill True
background Frame("gfx/bg/forest_sunset_fg.png", 0, 0)
## Start button
vbox:
xalign 0.5
yalign 0.88
xfill False
yfill False
textbutton _("{size=52}{color=#003}{font=f/ShadowedBlack.ttf}Start{/font}{/color}{/size}"):
#hover_color "#F00"
xpadding 42
ypadding 42
action Start()
background Frame("gui/elegant.png", 0, 0)
## Settings button
hbox:
xalign 0.88
yalign 0.06
xfill False
yfill False
textbutton _("{color=#FFC}Preferences{/color}"):
xpadding 20
ypadding 20
action ShowMenu("preferences")
background Frame("gui/frame.png", 5, 5)
## Name & Version
if gui.show_name:
vbox:
xalign 0.96
yalign 0.96
text "[config.name!t]":
style "main_menu_title"
text "[config.version]":
style "main_menu_version"
style main_menu_frame is empty
style main_menu_vbox is vbox
style main_menu_text is gui_text
style main_menu_title is main_menu_text
style main_menu_version is main_menu_text
style main_menu_frame:
xfill True
yfill True
background Frame("gui/overlay/main_menu.png", 0, 0)
style main_menu_vbox:
xalign 1.0
xoffset -20
xmaximum 800
yalign 1.0
yoffset -20
style main_menu_text:
properties gui.text_properties("main_menu", accent=True)
style main_menu_title:
properties gui.text_properties("title")
style main_menu_version:
properties gui.text_properties("version")
## 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"
if main_menu:
add gui.main_menu_background
else:
add gui.game_menu_background
frame:
style "game_menu_outer_frame"
vbox:
null height 12
use navigation
null height 44
textbutton _("Return"):
style "return_button"
action Return()
null height 20
hbox:
frame:
style "game_menu_content_frame"
if scroll == "viewport":
viewport:
yinitial yinitial
scrollbars "vertical"
mousewheel True
draggable True
pagekeys True
side_yfill True
vbox:
transclude
elif scroll == "vpgrid":
vpgrid:
cols 1
yinitial yinitial
scrollbars "vertical"
mousewheel True
draggable True
pagekeys True
side_yfill True
transclude
else:
transclude
label title
if main_menu:
key "game_menu" action ShowMenu("main_menu")
style game_menu_outer_frame is empty
style game_menu_navigation_frame is empty
style game_menu_content_frame is empty
style game_menu_viewport is gui_viewport
style game_menu_side is gui_side
style game_menu_scrollbar is gui_vscrollbar
style game_menu_label is gui_label
style game_menu_label_text is gui_label_text
style return_button is navigation_button
style return_button_text is navigation_button_text
style game_menu_outer_frame:
bottom_padding 30
top_padding 120
background Frame("gui/overlay/confirm.png", 0, 0)
#background Frame("gui/overlay/game_menu.png", 0, 0)
style game_menu_navigation_frame:
xsize 280
yfill True
style game_menu_content_frame:
left_margin 40
right_margin 20
top_margin 10
style game_menu_viewport:
xsize 920
style game_menu_vscrollbar:
unscrollable gui.unscrollable
style game_menu_side:
spacing 10
style game_menu_label:
xpos 50
ysize 120
style game_menu_label_text:
size gui.title_text_size
color gui.accent_color
yalign 0.5
style return_button:
xpos gui.navigation_xpos
yalign 1.0
yoffset -30
## About screen ################################################################
##
## This screen gives credit and copyright information about the game and Ren'Py.
##
## There's nothing special about this screen, and hence it also serves as an
## example of how to make a custom screen.
screen about():
tag menu
## This use statement includes the game_menu screen inside this one. The
## vbox child is then included inside the viewport inside the game_menu
## screen.
use game_menu(_("About"), scroll="viewport"):
style_prefix "about"
vbox:
label "[config.name!t]"
text _("Version [config.version!t] [persistent.release_name!t]\n")
## gui.about is usually set in options.rpy.
if gui.about:
text "[gui.about!t]\n"
text _("Made with {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]")
## This is redefined in options.rpy to add text to the about screen.
define gui.about = ""
style about_label is gui_label
style about_label_text is gui_label_text
style about_text is gui_text
style about_label_text:
size gui.label_text_size
## Load and Save screens #######################################################
##
## These screens are responsible for letting the player save the game and load
## it again. Since they share nearly everything in common, both are implemented
## in terms of a third screen, file_slots.
##
## https://www.renpy.org/doc/html/screen_special.html#save https://
## www.renpy.org/doc/html/screen_special.html#load
screen save():
tag menu
screen load():
tag menu
style page_label is gui_label
style page_label_text is gui_label_text
style page_button is gui_button
style page_button_text is gui_button_text
style slot_button is gui_button
style slot_button_text is gui_button_text
style slot_time_text is slot_button_text
style slot_name_text is slot_button_text
style page_label:
xpadding 50
ypadding 3
style page_label_text:
text_align 0.5
layout "subtitle"
hover_color gui.hover_color
style page_button:
properties gui.button_properties("page_button")
style page_button_text:
properties gui.button_text_properties("page_button")
style slot_button:
properties gui.button_properties("slot_button")
style slot_button_text:
properties gui.button_text_properties("slot_button")
## Preferences screen ##########################################################
##
## The preferences screen allows the player to configure the game to better suit
## themselves.
##
## https://www.renpy.org/doc/html/screen_special.html#preferences
screen preferences():
tag menu
use game_menu(_("Preferences"), scroll="viewport"):
vbox:
hbox:
box_wrap True
if renpy.variant("pc") or renpy.variant("web"):
vbox:
style_prefix "radio"
label _("Display")
textbutton _("Window") action Preference("display", "window")
textbutton _("Fullscreen") action Preference("display", "fullscreen")
vbox:
style_prefix "check"
label _("Skip")
textbutton _("Unseen Text") action Preference("skip", "toggle")
textbutton _("After Choices") action Preference("after choices", "toggle")
textbutton _("Transitions") action InvertSelected(Preference("transitions", "toggle"))
## Additional vboxes of type "radio_pref" or "check_pref" can be
## added here, to add additional creator-defined preferences.
null height (4 * gui.pref_spacing)
hbox:
style_prefix "slider"
box_wrap True
vbox:
label _("Text Speed")
bar value Preference("text speed")
label _("Auto-Forward Time")
bar value Preference("auto-forward time")
if main_menu:
null height 60
textbutton _("Clear Cache"):
action Jump("clear_cache")
null height 30
textbutton _("Download All Files"):
action Jump("download_all")
vbox:
if config.has_music:
label _("Music Volume")
hbox:
bar value Preference("music volume")
if config.has_sound:
label _("Sound Volume")
hbox:
bar value Preference("sound volume")
if config.sample_sound:
textbutton _("Test") action Play("sound", config.sample_sound)
if config.has_voice:
label _("Voice Volume")
hbox:
bar value Preference("voice volume")
if config.sample_voice:
textbutton _("Test") action Play("voice", config.sample_voice)
if config.has_music or config.has_sound or config.has_voice:
null height gui.pref_spacing
textbutton _("Mute All"):
action Preference("all mute", "toggle")
style "mute_all_button"
if main_menu:
hbox:
vbox:
style_prefix "check"
null height 60
label _("Server")
for k in persistent.serverlist:
# FIXME
textbutton _(k[0]):
action [
SetVariable("persistent.host", k[1]),
SetVariable("persistent.port", k[2]),
Jump("clear_all")]
showif debug:
null height 30
textbutton _("+ New Server"):
action Call("add_server")
vbox:
style_prefix "check"
null height 60
label _("Debug Mode")
textbutton _("Enabled"):
action SetVariable("debug", True)
textbutton _("Disabled"):
action SetVariable("debug", False)
showif config.developer or debug:
vbox:
style_prefix "check"
null height 60
label _("SSL:")
if not config.developer:
null height 10
label _("{size=30}{color=#f00}WARNING! This is an Advanced option.\nDO NOT change it unless you know what you are doing!{/color}{/size}")
null height 15
textbutton _("Enable"):
action SetVariable("persistent.ssl_enabled", True)
textbutton _("Disable"):
action SetVariable("persistent.ssl_enabled", False)
textbutton _("Ignore"):
action SetVariable("persistent.ssl_enabled", "IGNORE")
vbox:
style_prefix "check"
null height 60
label _("IRC:")
if not config.developer:
null height 10
label _("{size=30}{color=#f00}WARNING! This is an Advanced option.\nDO NOT change it unless you know what you are doing!{/color}{/size}")
null height 15
textbutton _("Enable"):
action SetVariable("persistent.irc_enable", True)
textbutton _("Disable"):
action SetVariable("persistent.irc_enable", False)
style pref_label is gui_label
style pref_label_text is gui_label_text
style pref_vbox is vbox
style radio_label is pref_label
style radio_label_text is pref_label_text
style radio_button is gui_button
style radio_button_text is gui_button_text
style radio_vbox is pref_vbox
style check_label is pref_label
style check_label_text is pref_label_text
style check_button is gui_button
style check_button_text is gui_button_text
style check_vbox is pref_vbox
style slider_label is pref_label
style slider_label_text is pref_label_text
style slider_slider is gui_slider
style slider_button is gui_button
style slider_button_text is gui_button_text
style slider_pref_vbox is pref_vbox
style mute_all_button is check_button
style mute_all_button_text is check_button_text
style check_button_text:
size 32
style navigation_button_text:
size 32
style pref_label:
top_margin gui.pref_spacing
bottom_margin 2
style pref_label_text:
yalign 1.0
style pref_vbox:
xsize 225
style radio_vbox:
spacing gui.pref_button_spacing
style radio_button:
properties gui.button_properties("radio_button")
foreground "gui/button/radio_[prefix_]foreground.png"
style radio_button_text:
properties gui.button_text_properties("radio_button")
style check_vbox:
spacing gui.pref_button_spacing
style check_button:
properties gui.button_properties("check_button")
foreground "gui/button/check_[prefix_]foreground.png"
style check_button_text:
properties gui.button_text_properties("check_button")
style slider_slider:
xsize 350
style slider_button:
properties gui.button_properties("slider_button")
yalign 0.5
left_margin 10
style slider_button_text:
properties gui.button_text_properties("slider_button")
style slider_vbox:
xsize 450
## History screen ##############################################################
##
## This is a screen that displays the dialogue history to the player. While
## there isn't anything special about this screen, it does have to access the
## dialogue history stored in _history_list.
##
## https://www.renpy.org/doc/html/history.html
screen history():
tag menu
## 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):
style_prefix "history"
for h in _history_list:
window:
## This lays things out properly if history_height is None.
has fixed:
yfit True
if h.who:
label h.who:
style "history_name"
substitute False
## Take the color of the who text from the Character, if
## set.
if "color" in h.who_args:
text_color h.who_args["color"]
$ what = renpy.filter_text_tags(h.what, allow=gui.history_allow_tags)
text what:
substitute False
if not _history_list:
label _("The dialogue history is empty.")
## This determines what tags are allowed to be displayed on the history screen.
define gui.history_allow_tags = set()
style history_window is empty
style history_name is gui_label
style history_name_text is gui_label_text
style history_text is gui_text
style history_text is gui_text
style history_label is gui_label
style history_label_text is gui_label_text
style history_window:
xfill True
ysize gui.history_height
style history_name:
xpos gui.history_name_xpos
xanchor gui.history_name_xalign
ypos gui.history_name_ypos
xsize gui.history_name_width
style history_name_text:
min_width gui.history_name_width
text_align gui.history_name_xalign
style history_text:
xpos gui.history_text_xpos
ypos gui.history_text_ypos
xanchor gui.history_text_xalign
xsize gui.history_text_width
min_width gui.history_text_width
text_align gui.history_text_xalign
layout ("subtitle" if gui.history_text_xalign else "tex")
style history_label:
xfill True
style history_label_text:
xalign 0.5
################################################################################
## Additional screens
################################################################################
## Confirm screen ##############################################################
##
## The confirm screen is called when Ren'Py wants to ask the player a yes or no
## question.
##
## https://www.renpy.org/doc/html/screen_special.html#confirm
screen confirm(message, yes_action, no_action):
## Ensure other screens do not get input while this screen is displayed.
modal True
zorder 200
style_prefix "confirm"
add "gui/overlay/confirm.png"
frame:
vbox:
xalign .5
yalign .5
spacing 30
label _(message):
style "confirm_prompt"
xalign 0.5
hbox:
xalign 0.5
spacing 100
textbutton _("Yes") action yes_action
textbutton _("No") action no_action
## Right-click and escape answer "no".
key "game_menu" action no_action
transform msgbox_emp:
xalign 0.51
yalign 0.51
linear 0.1
xalign 0.49
yalign 0.49
linear 0.1
xalign 0.51
yalign 0.51
linear 0.1
xalign 0.49
yalign 0.49
linear 0.1
xalign 0.50
yalign 0.50
linear 0.1
screen msgbox(message, anim=True, autoclose=0.0):
## Ensure other screens do not get input while this screen is displayed.
modal True
zorder 200
style_prefix "confirm"
frame:
if anim:
at msgbox_emp
vbox:
xalign 0.5
yalign 0.5
spacing 30
label _(message):
style "confirm_prompt"
xalign 0.5
hbox:
xalign 0.5
spacing 100
textbutton _("Ok") action Return()
if autoclose > 0.0:
timer autoclose action Return()
## Right-click and escape answer "no".
key "game_menu" action Return()
screen show_news():
default current=0
## Ensure other screens do not get input while this screen is displayed.
modal True
zorder 200
frame:
background Frame("gui/frame.png", 0, 0)
xalign 0.5
yalign 0.5
ymargin 15
ypadding 10
xmargin 10
hbox:
spacing 30
xmaximum 0.85
ymaximum 0.85
# Navigation
viewport:
child_size (0.4, 0.8)
mousewheel True
draggable True
pagekeys True
xfill False
vbox:
spacing 2
label _("Game news")
$i=0
for entry in allnews:
textbutton "{size=18}"+_(entry["title"])+"{/size}" action SetScreenVariable("current", i)
if not i:
null height 5
label "{size=18}"+_("Older entries:")+"{/size}"
null height 5
$i+=1
$del i
# News screen
viewport:
#child_size (0.4, 0.8)
mousewheel True
draggable True
arrowkeys True
xfill False
scrollbars "vertical"
vbox:
xalign 0.5
spacing 20
label _(allnews[current]["title"])
label "{size=22}"+_(allnews[current]["date"])+"{/size}"
null height 40
label "{size=20}"+_(allnews[current]["body"])+"{/size}"
null height 20
textbutton _("Ok") action Return()
## Right-click and escape answer "no".
key "game_menu" action Return()
style confirm_frame is gui_frame
style confirm_prompt is gui_prompt
style confirm_prompt_text is gui_prompt_text
style confirm_button is gui_medium_button
style confirm_button_text is gui_medium_button_text
style confirm_frame:
background Frame([ "gui/confirm_frame.png", "gui/frame.png"], gui.confirm_frame_borders, tile=gui.frame_tile)
padding gui.confirm_frame_borders.padding
xalign .5
yalign .5
style confirm_prompt_text:
text_align 0.5
layout "subtitle"
style confirm_button:
properties gui.button_properties("confirm_button")
style confirm_button_text:
properties gui.button_text_properties("confirm_button")
## Skip indicator screen #######################################################
##
## The skip_indicator screen is displayed to indicate that skipping is in
## progress.
##
## https://www.renpy.org/doc/html/screen_special.html#skip-indicator
screen skip_indicator():
zorder 100
style_prefix "skip"
frame:
hbox:
spacing 6
text _("Skipping")
text "▸" at delayed_blink(0.0, 1.0) style "skip_triangle"
text "▸" at delayed_blink(0.2, 1.0) style "skip_triangle"
text "▸" at delayed_blink(0.4, 1.0) style "skip_triangle"
## This transform is used to blink the arrows one after another.
transform delayed_blink(delay, cycle):
alpha .5
pause delay
block:
linear .2 alpha 1.0
pause .2
linear .2 alpha 0.5
pause (cycle - .4)
repeat
style skip_frame is empty
style skip_text is gui_text
style skip_triangle is skip_text
style skip_frame:
ypos gui.skip_ypos
background Frame("gui/skip.png", gui.skip_frame_borders, tile=gui.frame_tile)
padding gui.skip_frame_borders.padding
style skip_text:
size gui.notify_text_size
style skip_triangle:
## We have to use a font that has the BLACK RIGHT-POINTING SMALL TRIANGLE
## glyph in it.
font "DejaVuSans.ttf"
## Notify screen ###############################################################
##
## The notify screen is used to show the player a message. (For example, when
## the game is quicksaved or a screenshot has been taken.)
##
## https://www.renpy.org/doc/html/screen_special.html#notify-screen
screen notify(message):
zorder 100
style_prefix "notify"
frame at notify_appear:
text "[message!tq]"
timer 3.25 action Hide('notify')
transform notify_appear:
on show:
alpha 0
linear .25 alpha 1.0
on hide:
linear .5 alpha 0.0
style notify_frame is empty
style notify_text is gui_text
style notify_frame:
ypos gui.notify_ypos
background Frame("gui/notify.png", gui.notify_frame_borders, tile=gui.frame_tile)
padding gui.notify_frame_borders.padding
style notify_text:
properties gui.text_properties("notify")
################################################################################
## Mobile Variants
################################################################################
#style pref_vbox:
# variant "medium"
# xsize 450
style window:
variant "small"
background Frame("gui/phone/textbox.png", 0, 0)
style radio_button:
variant "small"
foreground "gui/phone/button/radio_[prefix_]foreground.png"
style check_button:
variant "small"
foreground "gui/phone/button/check_[prefix_]foreground.png"
#style nvl_window:
# variant "small"
# background Frame("gui/phone/nvl.png", 0, 0)
#style main_menu_frame:
# variant "small"
# background "gui/phone/overlay/main_menu.png"
#style game_menu_outer_frame:
# variant "small"
# background "gui/phone/overlay/game_menu.png"
#style game_menu_navigation_frame:
# variant "small"
# xsize 340
#style game_menu_content_frame:
# variant "small"
# top_margin 0
#style pref_vbox:
# variant "small"
# xsize 400
style bar:
variant "small"
ysize gui.bar_size
left_bar Frame("gui/phone/bar/left.png", gui.bar_borders, tile=gui.bar_tile)
right_bar Frame("gui/phone/bar/right.png", gui.bar_borders, tile=gui.bar_tile)
style vbar:
variant "small"
xsize gui.bar_size
top_bar Frame("gui/phone/bar/top.png", gui.vbar_borders, tile=gui.bar_tile)
bottom_bar Frame("gui/phone/bar/bottom.png", gui.vbar_borders, tile=gui.bar_tile)
style scrollbar:
variant "small"
ysize gui.scrollbar_size
base_bar Frame("gui/phone/scrollbar/horizontal_[prefix_]bar.png", gui.scrollbar_borders, tile=gui.scrollbar_tile)
thumb Frame("gui/phone/scrollbar/horizontal_[prefix_]thumb.png", gui.scrollbar_borders, tile=gui.scrollbar_tile)
style vscrollbar:
variant "small"
xsize gui.scrollbar_size
base_bar Frame("gui/phone/scrollbar/vertical_[prefix_]bar.png", gui.vscrollbar_borders, tile=gui.scrollbar_tile)
thumb Frame("gui/phone/scrollbar/vertical_[prefix_]thumb.png", gui.vscrollbar_borders, tile=gui.scrollbar_tile)
style slider:
variant "small"
ysize gui.slider_size
base_bar Frame("gui/phone/slider/horizontal_[prefix_]bar.png", gui.slider_borders, tile=gui.slider_tile)
thumb "gui/phone/slider/horizontal_[prefix_]thumb.png"
style vslider:
variant "small"
xsize gui.slider_size
base_bar Frame("gui/phone/slider/vertical_[prefix_]bar.png", gui.vslider_borders, tile=gui.slider_tile)
thumb "gui/phone/slider/vertical_[prefix_]thumb.png"
#style slider_pref_vbox:
# variant "small"
# xsize None
style slider_pref_slider:
variant "small"
xsize 600
screen input_box(ib_message=_("Please write it down here: "), baloney=""):
window:
background Frame("gui/frame.png", 5, 5)
yalign 0.25
xalign 0.5
ypadding 30
xpadding 30
xmaximum 512
xminimum 512
yminimum 95
vbox:
text (ib_message) color "#3ee33e" yalign 0.0 size 28
input:
id "msgmsg"
color ((128, 128, 128, 220))
italic True
size 26
copypaste True
fixed:
label (baloney):
style "pref_label"
yalign 0.02
xalign 0.50
text_size 54
text_outlines [ (1, "#000", 0, 0) ]
screen notabox(message):
zorder 250
#style_prefix "notify"
style_prefix "confirm"
frame at notify_appear:
vbox:
xalign 0.5
yalign 0.5
spacing 30
label "{b}SERVER NOTICE{/b}":
xalign 0.5
label "[message!tq]":
style "confirm_prompt"
xalign 0.5
hbox:
xalign 0.5
spacing 100
textbutton _("Ok") action Hide('notabox')
timer 60.00 action Hide('notabox')
init python:
def display_msgbox(message):
"""
:doc: other
Override implementation of :func:`renpy.notify`.
"""
renpy.hide_screen('notabox')
renpy.show_screen('notabox', message=message)
renpy.restart_interaction()
init python:
# countdown for AP Timer
def countdown(st, at, length=0.0):
remaining = length - st
mins = remaining/60
secs = remaining%60
if remaining > 0.0:
return Text("%02d:%02d" % (mins, secs), color="#fff", size=24), .1
else:
return Text("00:00", color="#fff", size=24), None
#image countdown = DynamicDisplayable(countdown, length=120.0)