Merge branch 'master' into Monster-Update-6
Move mod_menu into it's own file in src/
|
@ -23,10 +23,10 @@ init python:
|
|||
## The colors of text in the interface.
|
||||
|
||||
## An accent color used throughout the interface to label and highlight text.
|
||||
define gui.accent_color = '#FF00FC'
|
||||
define gui.accent_color = '#A2029F'
|
||||
|
||||
## The color used for a text button when it is neither selected nor hovered.
|
||||
define gui.idle_color = '#FFFE00'
|
||||
define gui.idle_color = '#D5D507'
|
||||
|
||||
## The small color is used for small text, which needs to be brighter/darker to
|
||||
## achieve the same effect.
|
||||
|
@ -103,6 +103,8 @@ define gui.main_menu_text_size = 60
|
|||
## The images used for the main and game menus.
|
||||
define gui.main_menu_background = "gui/main_menu.png"
|
||||
define gui.game_menu_background = "gui/game_menu.png"
|
||||
define gui.extras_submenu_background = "gui/overlay/extras_submenu.png"
|
||||
define gui.extras_submenu_panel = "gui/overlay/extras_submenu_panel.png"
|
||||
|
||||
## Dialogue ####################################################################
|
||||
##
|
||||
|
|
BIN
game/gui/gallery/unlocked_cg_button_cover.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
game/gui/overlay/extras_submenu.png
Normal file
After Width: | Height: | Size: 86 KiB |
BIN
game/gui/overlay/extras_submenu_panel.png
Normal file
After Width: | Height: | Size: 215 KiB |
Before Width: | Height: | Size: 425 KiB |
Before Width: | Height: | Size: 549 KiB |
Before Width: | Height: | Size: 210 KiB |
Before Width: | Height: | Size: 226 KiB After Width: | Height: | Size: 226 KiB |
Before Width: | Height: | Size: 246 KiB After Width: | Height: | Size: 246 KiB |
Before Width: | Height: | Size: 204 KiB After Width: | Height: | Size: 204 KiB |
Before Width: | Height: | Size: 167 KiB After Width: | Height: | Size: 167 KiB |
Before Width: | Height: | Size: 183 KiB After Width: | Height: | Size: 183 KiB |
Before Width: | Height: | Size: 198 KiB After Width: | Height: | Size: 198 KiB |
Before Width: | Height: | Size: 199 KiB After Width: | Height: | Size: 199 KiB |
Before Width: | Height: | Size: 266 KiB After Width: | Height: | Size: 266 KiB |
Before Width: | Height: | Size: 214 KiB After Width: | Height: | Size: 214 KiB |
|
@ -23,7 +23,7 @@ define gui.show_name = True
|
|||
|
||||
## The version of the game.
|
||||
|
||||
define config.version = "Patchy-patch5"
|
||||
define config.version = "Patchy-patch5.1.1"
|
||||
|
||||
## Text that is placed on the game's about screen. Place the text between the
|
||||
## triple-quotes, and leave a blank line between paragraphs.
|
||||
|
@ -77,7 +77,7 @@ define config.exit_transition = dissolve
|
|||
|
||||
## Between screens of the game menu.
|
||||
|
||||
define config.intra_transition = dissolve
|
||||
define config.intra_transition = Dissolve(0.20)
|
||||
|
||||
|
||||
## A transition that is used after a game has been loaded.
|
||||
|
|
333
game/screens.rpy
|
@ -1,4 +1,25 @@
|
|||
################################################################################
|
||||
###Updater Python stuff###
|
||||
init python:
|
||||
if persistent.updateresult is None:
|
||||
persistent.updateresult = "No new version is available"
|
||||
if persistent.autoup is None:
|
||||
persistent.autoup = False
|
||||
if persistent.updateWebServer is None:
|
||||
persistent.updateWebServer = "http://updates.snootgame.xyz/updates.json"
|
||||
|
||||
def UpdateCheck():
|
||||
# WHY YES I ONLY ALLOW PEOPLE USING MY FRAMEWORK TO CHECK FOR AN UPDATE EVERY SIX FUCKING HOURS HOW DID YOU KNOW
|
||||
# NOPE check_interval=5 (5 SECONDS) FUCK YOU
|
||||
pendingVersion = updater.UpdateVersion(persistent.updateWebServer, check_interval=5)
|
||||
if pendingVersion == None or pendingVersion == config.version or "TEST" in pendingVersion:
|
||||
persistent.updateresult = "No new version is available"
|
||||
else:
|
||||
persistent.updateresult = pendingVersion
|
||||
|
||||
def ToggleAutoUpdate():
|
||||
persistent.autoup = not persistent.autoup
|
||||
|
||||
################################################################################
|
||||
## Initialization
|
||||
################################################################################
|
||||
|
||||
|
@ -295,7 +316,6 @@ screen score_menu():
|
|||
init python:
|
||||
config.overlay_screens.append("quick_menu")
|
||||
|
||||
|
||||
default quick_menu = True
|
||||
|
||||
style quick_button is default
|
||||
|
@ -335,7 +355,7 @@ screen navigation():
|
|||
textbutton _("Load") action ShowMenu("load")
|
||||
textbutton _("Delete") action ShowMenu("delete")
|
||||
textbutton _("Options") action ShowMenu("preferences")
|
||||
textbutton _("Extras") action ShowMenu("extras")
|
||||
#textbutton _("Extras") action ShowMenu("extras")
|
||||
textbutton _("Return") action Return()
|
||||
|
||||
|
||||
|
@ -421,16 +441,10 @@ screen main_menu():
|
|||
[ "Mods", ShowMenu("mod_menu") ],
|
||||
[ "Load", ShowMenu("load") ],
|
||||
[ "Options", ShowMenu("preferences") ],
|
||||
[ "Help & About", ShowMenu("extras") ],
|
||||
[ "Extras", ShowMenu("extras") ], \
|
||||
[ "Quit", Quit(confirm=not main_menu) ]
|
||||
] )
|
||||
|
||||
# if gui.show_name:
|
||||
#
|
||||
# vbox:
|
||||
# text "[config.version]":
|
||||
# style "main_menu_version"
|
||||
|
||||
on "show" action renpy.start_predict_screen("cg_gallery")
|
||||
|
||||
style main_menu_frame is empty
|
||||
style main_menu_vbox is vbox
|
||||
|
@ -464,80 +478,6 @@ style main_menu_title:
|
|||
# properties gui.text_properties("version")
|
||||
|
||||
|
||||
|
||||
## Mod Menu screen ############################################################
|
||||
##
|
||||
## Handles jumping to the mods scripts
|
||||
## Could be more lean but if this is going to one of last time I touch the UI,
|
||||
## then fine by me
|
||||
##
|
||||
#similar to quick_button funcs
|
||||
screen mod_menu_button(filename, label, function):
|
||||
button:
|
||||
xmaximum 600
|
||||
ymaximum 129
|
||||
action function
|
||||
fixed:
|
||||
add filename xalign 0.5 yalign 0.5 zoom 0.9
|
||||
text label xalign 0.5 yalign 0.5 xanchor 0.5 size 34
|
||||
|
||||
# arr is [{
|
||||
# 'Name': string (name that appears on the button)
|
||||
# 'Label': string (jump label)
|
||||
# }, { .. } ]
|
||||
# Reuse the same image string and keep things 'neat'.
|
||||
screen mod_menu_buttons(filename, arr):
|
||||
for x in arr:
|
||||
use mod_menu_button(filename, x['Name'], Start(x['Label']))
|
||||
|
||||
screen mod_menu():
|
||||
|
||||
tag menu
|
||||
|
||||
style_prefix "main_menu"
|
||||
|
||||
add gui.main_menu_background
|
||||
|
||||
frame:
|
||||
xsize 420
|
||||
yfill True
|
||||
background "gui/overlay/main_menu.png"
|
||||
|
||||
#side_yfill True
|
||||
vbox:
|
||||
xpos 1940
|
||||
yalign 0.03
|
||||
if persistent.splashtype == 1:
|
||||
add "gui/sneedgame.png"
|
||||
else:
|
||||
add "gui/snootgame.png"
|
||||
|
||||
viewport:
|
||||
# this could be better but its ok for now
|
||||
xpos 1885-540
|
||||
xmaximum 540
|
||||
ymaximum 0.8
|
||||
ypos 200
|
||||
yinitial 0
|
||||
scrollbars "vertical"
|
||||
mousewheel True
|
||||
draggable True
|
||||
pagekeys True
|
||||
vbox:
|
||||
#xpos 1885
|
||||
spacing 18
|
||||
#yalign 0.98
|
||||
|
||||
#buttons are messed up but that's ok
|
||||
use mod_menu_button("gui/button/menubuttons/template_idle.png",
|
||||
"Return", ShowMenu("main_menu"))
|
||||
if len(mod_menu_access) is not 0:
|
||||
use mod_menu_buttons("gui/button/menubuttons/template_idle.png", mod_menu_access )
|
||||
else:
|
||||
use mod_menu_button("gui/button/menubuttons/template_idle.png",
|
||||
"You have no mods", None)
|
||||
|
||||
|
||||
## Game Menu screen ############################################################
|
||||
##
|
||||
## This lays out the basic common structure of a game menu screen. It's called
|
||||
|
@ -671,16 +611,23 @@ style return_button:
|
|||
screen about():
|
||||
|
||||
tag menu
|
||||
style_prefix "main_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"):
|
||||
add gui.main_menu_background
|
||||
add gui.extras_submenu_panel
|
||||
|
||||
style_prefix "about"
|
||||
## This empty frame darkens the main menu.
|
||||
frame:
|
||||
pass
|
||||
|
||||
## The use statement includes another screen inside this one. The actual
|
||||
## contents of the main menu are in the navigation screen.
|
||||
|
||||
vbox:
|
||||
|
||||
yalign 0.00
|
||||
yoffset 100
|
||||
xoffset 80
|
||||
xmaximum 1100
|
||||
label "[config.name!t]"
|
||||
text _("Version [config.version!t]\n")
|
||||
|
||||
|
@ -688,52 +635,9 @@ screen about():
|
|||
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]\nTo find more information about the game (and its source code) please visit {a=https://www.snootgame.xyz/}our website{/a}.")
|
||||
textbutton "Back to Extras" action ShowMenu("extras")
|
||||
|
||||
## 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
|
||||
|
||||
## Gallery screen ################################################################
|
||||
##
|
||||
## This screen holds the Gallery.
|
||||
##
|
||||
|
||||
screen gallery():
|
||||
|
||||
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(_("Gallery"), scroll="viewport"):
|
||||
|
||||
style_prefix "gallery"
|
||||
|
||||
vbox:
|
||||
|
||||
label "[config.name!t]"
|
||||
text _("Version [config.version!t]\n")
|
||||
|
||||
text _("Placeholder for gallery.")
|
||||
textbutton "Back to Extras" action ShowMenu("extras")
|
||||
|
||||
|
||||
style gallery_label is gui_label
|
||||
style gallery_label_text is gui_label_text
|
||||
style gallery_text is gui_text
|
||||
|
||||
style gallery_label_text:
|
||||
size gui.label_text_size
|
||||
|
||||
style_prefix "quick"
|
||||
text _("{size=30}Made with {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]\nTo find more information about the game (and its source code) please visit {a=https://www.snootgame.xyz/}our website{/a}.{/size}") text_align 0
|
||||
use extrasnavigation
|
||||
|
||||
## Updates screen ################################################################
|
||||
##
|
||||
|
@ -743,42 +647,59 @@ style gallery_label_text:
|
|||
screen updates():
|
||||
|
||||
tag menu
|
||||
style_prefix "main_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(_("Updates"), scroll="viewport"):
|
||||
add gui.main_menu_background
|
||||
add gui.extras_submenu_panel
|
||||
|
||||
style_prefix "updates"
|
||||
## This empty frame darkens the main menu.
|
||||
frame:
|
||||
pass
|
||||
|
||||
## The use statement includes another screen inside this one. The actual
|
||||
## contents of the main menu are in the navigation screen.
|
||||
|
||||
vbox:
|
||||
|
||||
yalign 0.00
|
||||
yoffset 100
|
||||
xoffset 80
|
||||
xmaximum 1100
|
||||
label "[config.name!t]"
|
||||
text _("Your Version is [config.version!t]\n")
|
||||
textbutton "[update]" ##action Update()
|
||||
textbutton "Back to Extras" action ShowMenu("extras")
|
||||
text _("Version [config.version!t]")
|
||||
if updater.can_update():
|
||||
label _("{color=#00FF00}{size=32}Update directory exists, updating is possible!\n{/size}{/color}")
|
||||
else:
|
||||
label _("{color=#FF0000}{size=32}Update directory does not exist or is corrupt!\n{/size}{/color}")
|
||||
|
||||
label _("Auto Update:")
|
||||
label _("{color=#FFFFFF}{size=32}Automatic Updates: [persistent.autoup!t]{/size}{/color}")
|
||||
textbutton _("{size=36}Toggle Automatic Updates\n{/size}") action [Notify("Toggling Automatic Updates..."), Function(ToggleAutoUpdate)]
|
||||
|
||||
label _("Update Checker:")
|
||||
label _("{color=#FFFFFF}{size=32}[persistent.updateresult!t]{/size}{/color}")
|
||||
textbutton _("{size=36}Check for Update\n{/size}") action [Notify("Checking for update..."), Function(UpdateCheck)]
|
||||
|
||||
## This is redefined in options.rpy to add text to the about screen.
|
||||
define gui.update = ""
|
||||
label _("Updater:")
|
||||
label _("{color=#FFFFFF}{size=32}Server URL (click to edit):{/size}{/color}")
|
||||
default input_on = False
|
||||
button:
|
||||
key_events True
|
||||
if input_on:
|
||||
input:
|
||||
default "[persistent.updateWebServer!t]" size 36 color '#FFFFFF'
|
||||
value FieldInputValue(persistent, 'updateWebServer')
|
||||
length 49
|
||||
copypaste True
|
||||
else:
|
||||
text persistent.updateWebServer size 36 color '#FFFF00'
|
||||
action ToggleScreenVariable('input_on')
|
||||
style_prefix "quick"
|
||||
if persistent.updateresult != "No new version is available":
|
||||
textbutton _("{size=36}Update Now!\n{/size}") action updater.Update(persistent.updateWebServer, force=False)
|
||||
else:
|
||||
textbutton _("{size=36}Update Now!\n{/size}") action Notify("Nothing to update to!")
|
||||
|
||||
|
||||
style update_label is gui_label
|
||||
style update_label_text is gui_label_text
|
||||
style update_text is gui_text
|
||||
style page_button is gui_button
|
||||
style page_button_text is gui_button_text
|
||||
|
||||
|
||||
style update_label_text:
|
||||
size gui.label_text_size
|
||||
|
||||
style update_button:
|
||||
properties gui.button_properties("page_button")
|
||||
|
||||
style update_button_text:
|
||||
properties gui.button_text_properties("page_button")
|
||||
use extrasnavigation
|
||||
|
||||
## Load and Save screens #######################################################
|
||||
##
|
||||
|
@ -930,7 +851,7 @@ screen preferences():
|
|||
|
||||
tag menu
|
||||
|
||||
use game_menu(_("Preferences"), scroll="viewport"):
|
||||
use game_menu(_("Options"), scroll="viewport"):
|
||||
|
||||
vbox:
|
||||
|
||||
|
@ -1190,14 +1111,41 @@ style history_label_text:
|
|||
## A screen that combines help, about, updates, gallery,
|
||||
screen extras():
|
||||
tag menu
|
||||
|
||||
style_prefix "main_menu"
|
||||
|
||||
add gui.main_menu_background
|
||||
|
||||
## This empty frame darkens the main menu.
|
||||
frame:
|
||||
pass
|
||||
|
||||
use extrasnavigation
|
||||
|
||||
##Extras Navigation Screen #####################################################
|
||||
##
|
||||
##This screen is to be reused in
|
||||
screen extrasnavigation():
|
||||
vbox:
|
||||
textbutton _("Help") action ShowMenu("help")
|
||||
textbutton _("About") action ShowMenu("about")
|
||||
textbutton _("Updates") action ShowMenu("updates")
|
||||
textbutton _("Gallery") action ShowMenu("gallery")
|
||||
textbutton _("Return") action ShowMenu("main_menu")
|
||||
|
||||
xpos 1940
|
||||
yalign 0.03
|
||||
|
||||
if persistent.splashtype == 1:
|
||||
add "gui/sneedgame.png"
|
||||
else:
|
||||
add "gui/snootgame.png"
|
||||
vbox:
|
||||
spacing 25
|
||||
xpos 1885
|
||||
yalign 0.9
|
||||
use main_menu_buttons("gui/button/menubuttons/template_idle.png",
|
||||
[
|
||||
[ "Help", ShowMenu("help") ],
|
||||
[ "About", ShowMenu("about") ],
|
||||
[ "Updates", ShowMenu("updates") ],
|
||||
[ "Gallery", ShowMenu("cg_gallery_0") ],
|
||||
[ "Return", ShowMenu("main_menu") ]
|
||||
] )
|
||||
|
||||
## Help screen #################################################################
|
||||
##
|
||||
|
@ -1209,33 +1157,50 @@ screen help():
|
|||
|
||||
tag menu
|
||||
|
||||
style_prefix "main_menu"
|
||||
|
||||
add gui.main_menu_background
|
||||
add gui.extras_submenu_panel
|
||||
|
||||
## This empty frame darkens the main menu.
|
||||
frame:
|
||||
pass
|
||||
|
||||
default device = "keyboard"
|
||||
|
||||
use game_menu(_("Help"), scroll="viewport"):
|
||||
|
||||
style_prefix "help"
|
||||
|
||||
vbox:
|
||||
spacing 23
|
||||
# vbox:
|
||||
# xpos 1100
|
||||
# ## ypos 1000
|
||||
# yalign 0.4
|
||||
# spacing 23
|
||||
|
||||
fixed:
|
||||
hbox:
|
||||
|
||||
xpos 200
|
||||
spacing 23
|
||||
style_prefix "help"
|
||||
textbutton _("Keyboard") action SetScreenVariable("device", "keyboard")
|
||||
textbutton _("Mouse") action SetScreenVariable("device", "mouse")
|
||||
textbutton "Back to Extras" action ShowMenu("extras")
|
||||
if GamepadExists():
|
||||
textbutton _("Gamepad") action SetScreenVariable("device", "gamepad")
|
||||
|
||||
vbox:
|
||||
yalign 0.5
|
||||
xpos 1100
|
||||
if device == "keyboard":
|
||||
use keyboard_help
|
||||
elif device == "mouse":
|
||||
use mouse_help
|
||||
elif device == "gamepad":
|
||||
use gamepad_help
|
||||
text _("") ## again in here to keep vbox in check
|
||||
|
||||
use extrasnavigation
|
||||
|
||||
|
||||
|
||||
screen keyboard_help():
|
||||
|
||||
style_prefix "help"
|
||||
hbox:
|
||||
label _("Enter")
|
||||
text _("Advances dialogue and activates the interface.")
|
||||
|
@ -1282,7 +1247,7 @@ screen keyboard_help():
|
|||
|
||||
|
||||
screen mouse_help():
|
||||
|
||||
style_prefix "help"
|
||||
hbox:
|
||||
label _("Left Click")
|
||||
text _("Advances dialogue and activates the interface.")
|
||||
|
@ -1305,7 +1270,7 @@ screen mouse_help():
|
|||
|
||||
|
||||
screen gamepad_help():
|
||||
|
||||
style_prefix "help"
|
||||
hbox:
|
||||
label _("Right Trigger\nA/Bottom Button")
|
||||
text _("Advances dialogue and activates the interface.")
|
||||
|
@ -1333,7 +1298,7 @@ screen gamepad_help():
|
|||
|
||||
textbutton _("Calibrate") action GamepadCalibrate()
|
||||
|
||||
|
||||
#this bit is might need trimming or rework
|
||||
style help_button is gui_button
|
||||
style help_button_text is gui_button_text
|
||||
style help_label is gui_label
|
||||
|
@ -1356,8 +1321,6 @@ style help_label_text:
|
|||
xalign 1.0
|
||||
text_align 1.0
|
||||
|
||||
|
||||
|
||||
################################################################################
|
||||
## Additional screens
|
||||
################################################################################
|
||||
|
|
|
@ -86,38 +86,35 @@ transform randPosition:
|
|||
# attribute guitar:
|
||||
# "guitar.webp"
|
||||
|
||||
#Raw Image & kwargs for long textboxes
|
||||
|
||||
#Characters
|
||||
define A = Character ('Anon',color="#36E12D") #Light Green
|
||||
define F = Character ('Fang',color="#7E2DE1") #Purple
|
||||
define Lucy = Character ('Lucy',color="#7E2DE1") #Purple
|
||||
define Ro = Character ('Rosa',color="#E12D36") #Red
|
||||
define St = Character ('Stella',color="#E17E2D") #orang
|
||||
define N = Character ('Naomi',color="#2D36E1") #Blue
|
||||
define Nas = Character ('Naser',color="#501D5E") #Dark Purple
|
||||
define T = Character ('Trish',color="#8A0036") #Maroon
|
||||
define Attendant = Character ('Attendant',color="#8A0036") #Maroon
|
||||
define Sp = Character ('Spears',color="#7B8A00") #Dark Yellow
|
||||
define Re = Character ('Reed',color="#368A00") #Dark Green
|
||||
define D = Character ('Driver',color="#098A00")
|
||||
define FM = Character ('Fangs Mom',color="#EA1A84")
|
||||
define FD = Character ('Fangs Dad',color="#1A1CEA")
|
||||
define Tsuki = Character ('Mr. Tsuki',color="#CEAF23")
|
||||
define unknown = Character ('(???)',color="#000000")
|
||||
define jingo = Character ('Mr. Jingo',color="#42C053")
|
||||
define MaitD = Character ('Maitre D',color="#42C053")
|
||||
define Moe = Character('Moe',color="#42C053")
|
||||
define Vince = Character ('Vince',color="#3C770D") #Dark Green
|
||||
define Waitress = Character ('Waitress',color="#C89B19") #Gold
|
||||
define A = Character ('Anon',color="#36E12D", who_outlines=[(1, '#0C300A')]) # Light Green
|
||||
define F = Character ('Fang',color="#B4D4CE", who_outlines=[(1, '#112D27')]) # Light Cyan
|
||||
define Lucy = Character ('Lucy',color="#B4D4CE", who_outlines=[(1, '#112D27')]) # Light Cyan
|
||||
define Ro = Character ('Rosa',color="#FE712B", who_outlines=[(1, '#3D1809')]) # Red-Orange
|
||||
define St = Character ('Stella',color="#D2FFAA", who_outlines=[(1, '#203011')]) # Light Green
|
||||
define N = Character ('Naomi',color="#F8B9A0", who_outlines=[(1, '#291A1B')]) # Peach
|
||||
define Nas = Character ('Naser',color="#F89E38", who_outlines=[(1, '#2D2D2D')]) # Orange
|
||||
define T = Character ('Trish',color="#B675E6", who_outlines=[(1, '#1F0632')]) # Purple
|
||||
define Attendant = Character ('Attendant',color="#8A0036", who_outlines=[(1, '#FFFFFF')]) # Maroon
|
||||
define Sp = Character ('Spears',color="#C4C3C3", who_outlines=[(1, '#272727')]) # Light Grey
|
||||
define Re = Character ('Reed',color="#ED4C5B", who_outlines=[(1, '#361013')]) # Bright Red
|
||||
define D = Character ('Driver',color="#FFC63A", who_outlines=[(1, '#4D280A')]) # Yellow-Orange
|
||||
define FM = Character ('Fangs Mom',color="#FFD8F6", who_outlines=[(1, '#361730')]) # Bright Pink
|
||||
define FD = Character ('Fangs Dad',color="#D8A09A", who_outlines=[(1, '#190E0F')]) # Desaturated Orange
|
||||
define Tsuki = Character ('Mr. Tsuki',color="#A7F2A2", who_outlines=[(1, '#320E3B')]) # Pear Green
|
||||
define unknown = Character ('(???)',color="#000000", who_outlines=[(1, '#FFFFFF')]) # Black
|
||||
define jingo = Character ('Mr. Jingo',color="#CD8283", who_outlines=[(1, '#0F0D49')]) # Desaturated Red
|
||||
define MaitD = Character ('Maitre D',color="#241630", who_outlines=[(1, '#241630')]) # Cobalt Blue
|
||||
define Moe = Character('Moe',color="#A5BEED", who_outlines=[(1, '#342210')]) # Desaturated Blue
|
||||
define Vince = Character ('Vince',color="#FFC63A", who_outlines=[(1, '#4D280A')]) # Yellow-Orange
|
||||
define Waitress = Character ('Waitress',color="#F691C8", who_outlines=[(1, '#402E3A')]) # Pink
|
||||
#long TB chars
|
||||
|
||||
define AnonAndFang = Character('Anon and Fang',color="34F313")
|
||||
define SV = Character ('Street Vendor',color="#420046")
|
||||
define carl = Character ('Mr. Carldewskii',color="#4963A5")
|
||||
define Drf = Character ('Dr. Fernsworth',color="#4963A5")
|
||||
define FRT = Character ('Fang Reed & Trish',color="#4963A5")
|
||||
|
||||
define AnonAndFang = Character('Anon and Fang',color="72DFA8", who_outlines=[(1, '#113623')])
|
||||
define SV = Character ('Street Vendor',color="#F8E120", who_outlines=[(1, '#361504')])
|
||||
define carl = Character ('Mr. Carldewskii',color="#E19E40", who_outlines=[(1, '#03223B')])
|
||||
define Drf = Character ('Dr. Fernsworth',color="#253354", who_outlines=[(1, '#334573')])
|
||||
define FRT = Character ('Fang Reed & Trish',color="#4963A5", who_outlines=[(1, '#FFFFFF')])
|
||||
|
||||
#Extra image translations
|
||||
#siloettes
|
||||
|
@ -301,6 +298,13 @@ image black = "#000"
|
|||
label splashscreen:
|
||||
$ persistent.splashtype = random.randint(0,2000 - 1)
|
||||
$ renpy.movie_cutscene("images/intros/CaveManonProductions.webm")
|
||||
|
||||
if persistent.autoup:
|
||||
python:
|
||||
UpdateCheck()
|
||||
if persistent.updateresult != "No new version is available":
|
||||
updater.update(persistent.updateWebServer, force=True)
|
||||
|
||||
stop sound
|
||||
return
|
||||
|
||||
|
|
|
@ -774,7 +774,7 @@ label chapter_1:
|
|||
|
||||
Nas "Look, whatever happens promise you won’t hold this against them."
|
||||
|
||||
Nas "They're actually a really a nice person once you get to know them"
|
||||
Nas "They're actually a really nice person once you get to know them"
|
||||
|
||||
A "Naser why did you just murder the english language in cold blood?"
|
||||
|
||||
|
|
|
@ -115,32 +115,32 @@ label chapter_10:
|
|||
|
||||
A "...Fine..."
|
||||
|
||||
scene wounds1 with fade
|
||||
scene wounds01 with fade
|
||||
pause 2
|
||||
scene black with fade
|
||||
"I step into my tiny shower stall and turn on the water."
|
||||
|
||||
"The shower head sputters before it starts weakly spraying lukewarm water."
|
||||
|
||||
scene wounds2 with fade
|
||||
scene wounds02 with fade
|
||||
|
||||
"The temperature of the water doesn’t help the tension in my muscles or the bruises marring my skin."
|
||||
|
||||
"I stretch around and see massive blotches of purple and black splattered across my torso."
|
||||
|
||||
scene wounds3
|
||||
scene wounds03
|
||||
|
||||
"Each contusion is hot to the touch under my fingers and the pain is intense."
|
||||
|
||||
scene wounds4
|
||||
scene wounds04
|
||||
|
||||
"The worst is across my chest where the bollard hit me."
|
||||
|
||||
scene wounds5
|
||||
scene wounds05
|
||||
|
||||
"I eventually get finished examining my wicked wounds and step out of the bathroom. Fang is on her phone doing Raptor Jesus knows what."
|
||||
|
||||
scene wounds6
|
||||
scene wounds06
|
||||
|
||||
"Fang then pats the bed"
|
||||
|
||||
|
@ -148,7 +148,7 @@ label chapter_10:
|
|||
|
||||
"I walk over and lie down on my stomach"
|
||||
|
||||
scene wounds7
|
||||
scene wounds07
|
||||
|
||||
F "Jesus that's bad..."
|
||||
|
||||
|
@ -193,11 +193,11 @@ label chapter_10:
|
|||
A "Hm?"
|
||||
|
||||
F "I need to do the front."
|
||||
scene wounds8
|
||||
scene wounds08
|
||||
"Oh."
|
||||
|
||||
"Okay then. I roll over onto my back."
|
||||
scene wounds9
|
||||
scene wounds09
|
||||
"And find myself face to beak with her."
|
||||
|
||||
"Dangerously close."
|
||||
|
|
|
@ -1853,8 +1853,6 @@ label chapter_13D:
|
|||
|
||||
"Curled up around my pillow, suckling on her thumb."
|
||||
|
||||
"And my present to her still hung around securely on her neck."
|
||||
|
||||
"I go back to the scrapbook, enjoying the memories I’ve shared with my friends."
|
||||
|
||||
"And to think I wanted to stay a loner when I first got here."
|
||||
|
|
|
@ -1244,7 +1244,7 @@ label chapter_2:
|
|||
|
||||
A "Huh?"
|
||||
|
||||
Re "Get your phone out man… Look up {color=#66cc33}'LW_S9znpklI'{/color}.."
|
||||
Re "Get your phone out man… Look up {color=#66cc33}'T9nXyUye3pg'{/color}.."
|
||||
|
||||
A "How did you say that out loud?"
|
||||
|
||||
|
|
|
@ -288,7 +288,7 @@ label chapter_5:
|
|||
label movie:
|
||||
A "FANG!"
|
||||
stop music fadeout 1.0
|
||||
image fang tail = Movie(play="animations/fangtail.webm",loop=True)
|
||||
image fang tail = Movie(play="animations/fang tail.webm",loop=True)
|
||||
|
||||
scene fang tail with fade
|
||||
|
||||
|
@ -502,7 +502,7 @@ label chapter_5:
|
|||
|
||||
F "{i}Uuuuughhhhh…{/i}"
|
||||
|
||||
F "...Allright, whatever."
|
||||
F "...Alright, whatever."
|
||||
|
||||
Ro "Go, go now! And no more tripping!"
|
||||
|
||||
|
@ -2547,3 +2547,7 @@ label chapter_5:
|
|||
"..."
|
||||
|
||||
return
|
||||
|
||||
label fang_movie:
|
||||
scene fang tail with fade
|
||||
""
|
||||
|
|
|
@ -2598,7 +2598,7 @@ label chapter_6:
|
|||
|
||||
A "Like… Like her passion, Naser. She adores music. Adores {i}playing{/i} music."
|
||||
|
||||
A "And she has theses… moments where I can see the softer side of her."
|
||||
A "And she has these… moments where I can see the softer side of her."
|
||||
|
||||
"The pop of knuckles from Naser tells me I should rephrase that."
|
||||
|
||||
|
|
|
@ -174,11 +174,11 @@ label chapter_7:
|
|||
#>>golden
|
||||
St "Upright Strength"
|
||||
St "OH! I don’t think you need to worry about what’s to come, Anon."
|
||||
elif anonscore >= 3 and fangscore <= 2:
|
||||
elif anonscore >= 3 and fangscore <= 3:
|
||||
#>>tradwife
|
||||
St "Inverted Hierophant."
|
||||
St "You need to be wary of your words and actions, Anon."
|
||||
elif anonscore <= 2 and fangscore >= 3:
|
||||
elif anonscore <= 3 and fangscore >= 3:
|
||||
#>>doomer
|
||||
St "Inverted Hermit."
|
||||
St "Anon, if you ever feel lonely you can come to me."
|
||||
|
@ -801,6 +801,7 @@ label chapter_7:
|
|||
"I look at the absolute mess around us."
|
||||
|
||||
"Fuck."
|
||||
stop music fadeout 1.0
|
||||
|
||||
scene black with fade
|
||||
scene moebackrooms with fade
|
||||
|
@ -812,7 +813,7 @@ label chapter_7:
|
|||
|
||||
"Rosa wanted to stay and help clean buuut…"
|
||||
|
||||
"{i}Ro I am so sorry Stella! Come, I shall nurse you back at my home!{/i}"
|
||||
Ro "{i}I am so sorry Stella! Come, I shall nurse you back at my home!{/i}"
|
||||
|
||||
"I’d feel more sorry for Stella but Rosa looked capable of helping her."
|
||||
|
||||
|
|
285
game/src/cg_gallery.rpy
Normal file
|
@ -0,0 +1,285 @@
|
|||
init python:
|
||||
|
||||
# CONST PARAMS
|
||||
ALLOW_ZOOM = False
|
||||
GALLERY_COLS = 3
|
||||
PREFERRED_WIDTH = 432 #px (1920 * 0.225)
|
||||
PREFERRED_HEIGHT = 243 #px (1080 * 0.225)
|
||||
PREFERRED_ASPECT_RATIO = 16.0/9.0 # 1.7777..
|
||||
DEFAULT_WIDTH_SCALE_RATIO = round(float(PREFERRED_WIDTH) / float(1920), 4)
|
||||
DEFAULT_HEIGHT_SCALE_RATIO = round(float(PREFERRED_HEIGHT) / float(1080), 4)
|
||||
NOT_UNLOCKED_COVER = im.FactorScale("gui/gallery/unlocked_cg_button_cover.png", DEFAULT_WIDTH_SCALE_RATIO, DEFAULT_HEIGHT_SCALE_RATIO)
|
||||
ACCEPTED_EXTENSIONS = ["jpg", "webm"]
|
||||
CG_PATHS = [
|
||||
#CG doesn't really make sense
|
||||
{ 'path': "images/cgs/", 'name': "CG", 'eval': None },
|
||||
{ 'path': "images/animations/", 'name': "Animations", 'eval': None },
|
||||
{ 'path': "images/NotForKids!/", 'name': "Lewd",
|
||||
'eval': 'persistent.lewd == True'
|
||||
}
|
||||
]
|
||||
#path: folder, name: shows up in gallery, eval: runs eval() on string
|
||||
|
||||
"""
|
||||
Data structure that holds the data for each cg and button
|
||||
item is name, fn is fullpath
|
||||
ext is the file extension
|
||||
{ item: str; fn: str; cg: Displayable; ext: str; wh: [] }[]
|
||||
(reference in this init python, actually used in screens)
|
||||
"""
|
||||
gallery_items = []
|
||||
|
||||
# key dict pair, cg <-> cgs' galleryitems []
|
||||
gallery_dic = {} #
|
||||
for cp in CG_PATHS:
|
||||
gallery_dic[cp['name']] = [] #
|
||||
|
||||
# Make a scaled cg button
|
||||
# (cg: string; ext: string; w: float
|
||||
def cg(fname, ext, w):
|
||||
scale = PREFERRED_WIDTH * 100.0 / w / 100.0
|
||||
#scale = box_ratio(wh)
|
||||
return im.FactorScale(fname, scale, scale, False)
|
||||
|
||||
# Reads /images/cgs dir for all image files
|
||||
# Populates galleryItems
|
||||
# () -> None
|
||||
def loadGallery():
|
||||
|
||||
list_img = renpy.list_images()
|
||||
|
||||
#if ext is "webm":
|
||||
# Add each image to the gallery
|
||||
for str in list_img:
|
||||
for cp in CG_PATHS:
|
||||
for ext in ACCEPTED_EXTENSIONS:
|
||||
path = cp['path']
|
||||
_str = path+str+"."+ext
|
||||
|
||||
if renpy.loadable(_str): #brute force
|
||||
image = renpy.image_size(Image(_str))
|
||||
|
||||
gallery_dic[cp['name']] += [{
|
||||
"item": str,
|
||||
"fn": _str,
|
||||
"cg": cg(_str, ext, image[0]),
|
||||
"ext": ext,
|
||||
"wh": image
|
||||
}]
|
||||
return
|
||||
|
||||
# Call to loading the gallery
|
||||
loadGallery()
|
||||
|
||||
# hard code the webm because renpy is really dumb and doesn't add Movies properly until much later
|
||||
fang_webm = 'images/animations/fang tail.webm'
|
||||
gallery_dic['Animations'] = [{
|
||||
"item": 'fang tail',
|
||||
"fn": fang_webm,
|
||||
"cg": Movie(fang_webm),#cg(_str, 'webm', 1920),
|
||||
"ext": 'webm',
|
||||
"wh": [1920, 1080]
|
||||
}]
|
||||
|
||||
#for zooming in and out
|
||||
zoom_arr = [0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1.0, 1.125, 1.25, 1.5, 1.75, 2.0]
|
||||
|
||||
"""
|
||||
for x in range(1,5):
|
||||
_zoom = 1.0
|
||||
_zoom *= 1+(x*0.25)
|
||||
zoom_arr.append(_zoom)
|
||||
|
||||
for y in range(9,1,-1):
|
||||
_zoom = 1.0
|
||||
_zoom *= (y*0.125)
|
||||
zoom_arr.append(_zoom)
|
||||
|
||||
zoom_arr.sort()
|
||||
"""
|
||||
"""
|
||||
'Recursive' / Loopable / Roundtrip Screens
|
||||
_0 <-> _1
|
||||
"""
|
||||
#There is renpy.restart_interaction but since I wrote all this, it's too late
|
||||
#screen cg_gallery(flag, __yoffset = 0, origin = 'CG'):
|
||||
screen cg_gallery_0(__yoffset = 0, origin = 'CG'):
|
||||
tag menu
|
||||
use cg_gallery('1', __yoffset, origin)
|
||||
screen cg_gallery_1( __yoffset = 0, origin = 'CG'):
|
||||
tag menu
|
||||
use cg_gallery('0', __yoffset, origin)
|
||||
|
||||
#screen view_image(fn, _origin, zoom=1):
|
||||
screen view_image_a(fn, _origin, zoom = zoom_arr.index(1.0)):
|
||||
tag menu
|
||||
use view_image(fn, _origin, zoom, 'b')
|
||||
screen view_image_b(fn, _origin, zoom = zoom_arr.index(1.0)):
|
||||
tag menu
|
||||
use view_image(fn, _origin, zoom, 'a')
|
||||
|
||||
"""
|
||||
CG Gallery screen - A screen that shows the image gallery
|
||||
Basically Gallery Object has terrible defaults, so I just wrote my own stuff
|
||||
"""
|
||||
screen cg_gallery(flag, __yoffset = 0, origin = 'CG'):
|
||||
|
||||
if main_menu:
|
||||
key "game_menu" action ShowMenu("main_menu")
|
||||
|
||||
|
||||
frame:
|
||||
pass
|
||||
add gui.main_menu_background
|
||||
add gui.game_menu_background
|
||||
|
||||
tag menu
|
||||
|
||||
python:
|
||||
empty_spaces = gallery_rows = item_counter = 0
|
||||
|
||||
gallery_items = gallery_dic[origin]
|
||||
items = len(gallery_items)
|
||||
gallery_rows = (items / GALLERY_COLS) + 1
|
||||
empty_spaces = GALLERY_COLS - (items % GALLERY_COLS)
|
||||
|
||||
|
||||
vbox:
|
||||
transform:
|
||||
zoom 0.95
|
||||
hbox:
|
||||
style_prefix "navigation"
|
||||
xalign 0.5
|
||||
|
||||
spacing gui.navigation_spacing
|
||||
|
||||
for cp in CG_PATHS:
|
||||
if cp['name'] == origin:
|
||||
textbutton _(cp['name']) text_color gui.selected_color text_xalign 0.5
|
||||
else:
|
||||
if cp['eval'] is None:
|
||||
textbutton _(cp['name']) action ShowMenu('cg_gallery_'+flag, 0, cp['name']) text_xalign 0.5
|
||||
elif eval(cp['eval']):
|
||||
textbutton _(cp['name']) action ShowMenu('cg_gallery_'+flag, 0, cp['name']) text_xalign 0.5
|
||||
else:
|
||||
textbutton _(cp['name']) text_xalign 0.5
|
||||
textbutton _("Return") action ShowMenu('main_menu') text_xalign 0.5
|
||||
|
||||
if _in_replay:
|
||||
textbutton _("End Replay") action EndReplay(confirm=True)
|
||||
elif not main_menu:
|
||||
textbutton _("Main Menu") action MainMenu()
|
||||
|
||||
transform:
|
||||
zoom 0.95
|
||||
xcenter 0.525
|
||||
ycenter 0.525
|
||||
|
||||
viewport:
|
||||
yinitial __yoffset
|
||||
scrollbars "vertical"
|
||||
mousewheel True
|
||||
draggable True
|
||||
pagekeys True
|
||||
xfill True
|
||||
|
||||
grid GALLERY_COLS gallery_rows:
|
||||
xcenter 0.5
|
||||
ycenter 0.5
|
||||
for item in gallery_items:
|
||||
# Should properly fix with actual margin difference but good
|
||||
# enough or the actual position
|
||||
python:
|
||||
item_counter += 1
|
||||
yoffset = item_counter / 3 * PREFERRED_HEIGHT * 1.15
|
||||
yoffset = int( yoffset + (PREFERRED_HEIGHT * 1.15))
|
||||
|
||||
use flag_button(item, yoffset, origin)
|
||||
|
||||
for i in range(0, empty_spaces):
|
||||
null height 20
|
||||
|
||||
|
||||
"""
|
||||
if/else flow control & extra parameters for Buttons
|
||||
"""
|
||||
screen flag_button(item, yoffset, origin):
|
||||
python:
|
||||
flag = renpy.seen_image(item['item'])
|
||||
|
||||
if flag:
|
||||
button:
|
||||
if item['ext'] == "webm":
|
||||
action Replay('fang_movie')#ShowMenu('view_movie', item, ShowMenu('cg_gallery_0', yoffset, origin))
|
||||
else:
|
||||
action ShowMenu('view_image_a', item, ShowMenu('cg_gallery_0', yoffset, origin))
|
||||
xcenter 0.5 ycenter 0.5
|
||||
padding (1,0,1,2)
|
||||
vbox:
|
||||
text item["item"] xalign 0.5
|
||||
add item["cg"] fit 'contain' xcenter 0.5 ycenter 0.5 size (PREFERRED_WIDTH, PREFERRED_HEIGHT)
|
||||
else:
|
||||
vbox:
|
||||
ymaximum PREFERRED_HEIGHT
|
||||
xcenter 0.5 ycenter 0.5
|
||||
text "? ? ?" xalign 0.5
|
||||
add NOT_UNLOCKED_COVER
|
||||
|
||||
|
||||
screen view_movie(item, _origin):
|
||||
tag menu
|
||||
key "game_menu" action _origin
|
||||
python:
|
||||
renpy.movie_cutscene(item['item'], None, -1)
|
||||
frame:
|
||||
pass
|
||||
#scene fang tail with fade
|
||||
|
||||
|
||||
"""
|
||||
view_image, Loads the image in fullscreen with viewport control.
|
||||
"""
|
||||
screen view_image(item, _origin, zoom = zoom_arr.index(1.0), flag='a'):
|
||||
python:
|
||||
zoom_a = zoom+1
|
||||
zoom_a_f = ShowMenu('view_image_'+flag, item, _origin, zoom_a)
|
||||
zoom_b = zoom-1
|
||||
zoom_b_f = ShowMenu('view_image_'+flag, item, _origin, zoom_b)
|
||||
|
||||
tag menu
|
||||
key "game_menu" action _origin
|
||||
|
||||
# mousewheel & insert+delete
|
||||
if (ALLOW_ZOOM):
|
||||
if zoom < len(zoom_arr)-1: #zoom in
|
||||
key 'mousedown_4' action zoom_a_f
|
||||
key 'K_INSERT' action zoom_a_f
|
||||
if zoom > 0: #and (item['wh'][0] <= 1920 or item['wh'][1] <= 1080):
|
||||
key 'mousedown_5' action zoom_b_f
|
||||
key 'K_DELETE' action zoom_b_f
|
||||
|
||||
viewport id "vie":
|
||||
#Ren'Py isn't smart enough to not edgescroll while pressed,
|
||||
#so we'll have to disable this for mobile
|
||||
if renpy.variant("pc"):
|
||||
edgescroll (300, 1800)
|
||||
draggable True
|
||||
arrowkeys True
|
||||
pagekeys True
|
||||
xfill False
|
||||
yfill False
|
||||
add item['fn'] zoom zoom_arr[zoom] anchor (0.55, 0.55)
|
||||
|
||||
#Reuse quick buttons, Ren'Py handles touch input lazy, it doesn't have
|
||||
#double finger pinch zoom, it translates taps as mouse events - have to use
|
||||
#buttons
|
||||
if (ALLOW_ZOOM) and renpy.variant("small"):
|
||||
hbox:
|
||||
style_prefix "quick"
|
||||
xalign 0.5
|
||||
yalign 0.975
|
||||
use quick_buttons("gui/button/uioptionbuttons/template_idle.png",
|
||||
[
|
||||
[ "+", zoom_a_f ],
|
||||
[ "-", zoom_b_f ]
|
||||
] )
|
69
game/src/mod_menu.rpy
Normal file
|
@ -0,0 +1,69 @@
|
|||
# Mod Menu screen ############################################################
|
||||
##
|
||||
## Handles jumping to the mods scripts
|
||||
## Could be more lean but if this is going to one of last time I touch the UI,
|
||||
## then fine by me
|
||||
##
|
||||
#similar to quick_button funcs
|
||||
screen mod_menu_button(filename, label, function):
|
||||
button:
|
||||
xmaximum 600
|
||||
ymaximum 129
|
||||
action function
|
||||
fixed:
|
||||
add filename xalign 0.5 yalign 0.5 zoom 0.9
|
||||
text label xalign 0.5 yalign 0.5 xanchor 0.5 size 34
|
||||
|
||||
# arr is [{
|
||||
# 'Name': string (name that appears on the button)
|
||||
# 'Label': string (jump label)
|
||||
# }, { .. } ]
|
||||
# Reuse the same image string and keep things 'neat'.
|
||||
screen mod_menu_buttons(filename, arr):
|
||||
for x in arr:
|
||||
use mod_menu_button(filename, x['Name'], Start(x['Label']))
|
||||
|
||||
screen mod_menu():
|
||||
|
||||
tag menu
|
||||
|
||||
style_prefix "main_menu"
|
||||
|
||||
add gui.main_menu_background
|
||||
|
||||
frame:
|
||||
xsize 420
|
||||
yfill True
|
||||
background "gui/overlay/main_menu.png"
|
||||
|
||||
#side_yfill True
|
||||
vbox:
|
||||
xpos 1940
|
||||
yalign 0.03
|
||||
if persistent.splashtype == 1:
|
||||
add "gui/sneedgame.png"
|
||||
else:
|
||||
add "gui/snootgame.png"
|
||||
|
||||
viewport:
|
||||
# this could be better but its ok for now
|
||||
xpos 1885-540
|
||||
xmaximum 540
|
||||
ymaximum 0.8
|
||||
ypos 200
|
||||
yinitial 0
|
||||
scrollbars "vertical"
|
||||
mousewheel True
|
||||
draggable True
|
||||
pagekeys True
|
||||
vbox:
|
||||
#xpos 1885
|
||||
spacing 18
|
||||
#yalign 0.98
|
||||
|
||||
#buttons are messed up but that's ok
|
||||
use mod_menu_button("gui/button/menubuttons/template_idle.png", "Return", ShowMenu("main_menu"))
|
||||
if len(mod_menu_access) is not 0:
|
||||
use mod_menu_buttons("gui/button/menubuttons/template_idle.png", mod_menu_access )
|
||||
else:
|
||||
use mod_menu_button("gui/button/menubuttons/template_idle.png", "You have no mods", None)
|