Compare commits

...

51 Commits

Author SHA1 Message Date
MichaelYick f5a7093112 converted to ogg 2021-09-03 11:37:08 -05:00
MichaelYick 0eac5d3c36 new music for D ending 2021-09-02 19:19:14 -05:00
MichaelYick 4ae29ac5fd Merge pull request 'Remove text0.png duplicate' (#73) from nutbuster/SnootGame:insult_layer into Monster-Update-6
Reviewed-on: https://git.snootgame.xyz/Cavemanon/SnootGame/pulls/73
2021-09-02 23:33:19 +00:00
Nutbuster b886497f89 Remove text0.png duplicate 2021-09-02 12:19:51 +10:00
Nutbuster 60a6f8acac Merge pull request 'UI Sounds v2' (#71) from nutbuster/SnootGame:nio_mustard into Monster-Update-6
Reviewed-on: https://git.snootgame.xyz/Cavemanon/SnootGame/pulls/71
2021-08-08 03:32:29 +00:00
Nutbuster c90faec1d1 Add Right Click to escape Gallery & Help messages 2021-08-08 13:04:38 +10:00
Nutbuster 798ff85ff6 Merge fix 2021-08-08 08:31:00 +10:00
Nutbuster 3b401ccf1c Merge remote-tracking branch 'origin/Monster-Update-6' into nio_mustard 2021-08-08 07:44:33 +10:00
Nutbuster ad87c2730a Glue Gitignore 2021-08-08 07:16:04 +10:00
Nutbuster 8b47b1f3f8 variant Button fix 2021-08-08 07:12:30 +10:00
Nutbuster e5c5b6fbe9 standardize and minify py-related functions
also includes transitions fix
2021-08-08 07:11:24 +10:00
Nutbuster a4afd458d2 untrack misc files and restore old changes to gitignore 2021-08-08 07:10:56 +10:00
Nio d82571ffe9 smaller wav files 2021-08-08 03:11:08 +10:00
Nio 46344e7f3a added uirollover to choices 2021-08-08 02:56:14 +10:00
Nio 09195d2919 autoupdate readded, sry 2021-08-08 02:32:14 +10:00
Nio 5220b7fbb6 new options audio files 2021-08-08 02:23:16 +10:00
Nio 61dc7dd796 removed dummy vars and removed custom togglers toggling, also accidentally added junk files, sry 2021-08-08 02:13:30 +10:00
Nio 16e8e5a72a sounds revamp 2021-08-08 00:42:16 +10:00
Nio d59f59ca88 update to MU6 2021-08-07 19:51:40 +10:00
Nutbuster 2e03d41097 Merge pull request 'Outline color & thickness' (#68) from nutbuster/SnootGame:Monster-Update-6 into Monster-Update-6
Reviewed-on: https://git.snootgame.xyz/Cavemanon/SnootGame/pulls/68
2021-08-06 20:29:25 +00:00
Nutbuster e7f3e70b92 Black -> White 2021-08-07 06:11:26 +10:00
Nutbuster 24ef384443 Add all of the characters 2021-08-06 09:55:14 +10:00
Nutbuster aae7c961d3 Revised color codes & Minor name fixes 2021-08-06 09:47:52 +10:00
Nutbuster b1cdf38707 Merge branch 'Monster-Update-6' of https://git.snootgame.xyz/Cavemanon/SnootGame into Monster-Update-6 2021-08-03 11:37:43 +10:00
Nutbuster c723cb19f3 Merge pull request 'Closes: #61' (#70) from nutbuster/SnootGame:nio_mu6 into Monster-Update-6
Reviewed-on: https://git.snootgame.xyz/Cavemanon/SnootGame/pulls/70
2021-08-03 01:36:27 +00:00
Nutbuster 2c9bfdfb1e Merge Fix 2021-08-03 11:29:47 +10:00
Nutbuster d2d9591339 Merge remote-tracking branch 'origin/Monster-Update-6' into nio_mu6 2021-08-03 11:23:24 +10:00
Nutbuster 9bed598168 Modify thicker Outlines 2021-08-03 07:39:36 +10:00
Nio 8f6393ab79 new mixer 2021-07-29 20:47:12 +10:00
MichaelYick 666ecea915 Merge pull request 'Android Port' (#64) from nutbuster/SnootGame:Monster-Update-6 into Monster-Update-6
Reviewed-on: https://git.snootgame.xyz/Cavemanon/SnootGame/pulls/64
2021-07-29 04:39:02 +00:00
Nio 665ee694ba channeld 2021-07-28 12:27:26 +10:00
Nutbuster 1efc015419 xmax ymax spacing Quick buttons 2021-07-28 09:05:31 +10:00
Nutbuster 2e32d74aec Move main menu buttons ypos 2021-07-28 08:54:22 +10:00
Nutbuster 0bdd5b3b06 Smaller mobile namebox font size 2021-07-28 08:47:13 +10:00
Nutbuster 4a21554c0e gitignore .android.json 2021-07-24 11:34:42 +10:00
Nutbuster bdb89a6c37 Update PP5 to MU6 2021-07-24 11:11:24 +10:00
Nutbuster 744d6dfbf9 Merge branch 'Monster-Update-6' of https://git.snootgame.xyz/Cavemanon/SnootGame into Monster-Update-6 2021-07-24 11:10:11 +10:00
Nutbuster c9b7222d13 Remove updates func and menu from mobile 2021-07-24 11:07:35 +10:00
Nutbuster 66c0dc8d80 Add Return button 2021-07-24 10:58:01 +10:00
Nutbuster 17d669bd83 Add Android icon & background 2021-07-24 10:58:01 +10:00
tick bumley a17d382802 Merge pull request 'Closes: #50 Add Mod Support' (#51) from nutbuster/SnootGame:Monster-Update-6 into Monster-Update-6
Reviewed-on: https://git.snootgame.xyz/Cavemanon/SnootGame/pulls/51
2021-07-24 00:08:50 +00:00
Nutbuster a39c3c24e2 Merge branch 'master' into Monster-Update-6
Move mod_menu into it's own file in src/
2021-07-22 21:28:18 +10:00
Nio 8ca825cda6 sounds but no dedicated channel control 2021-07-21 00:40:39 +10:00
Nutbuster 9fa26bc67b Misc template fix 2021-07-06 14:25:16 +10:00
Nutbuster 0c4aab6858 Namebox is default long 2021-07-05 10:14:46 +10:00
Nutbuster 0959d0f275 Documentation for modders & empty create directory 2021-07-05 10:06:55 +10:00
Nutbuster cd780dfa36 Clean up Mod Menu and other details 2021-07-05 09:35:56 +10:00
Nutbuster 400d305f23 Change Mods folder struct, everything is contained 2021-07-05 04:37:26 +10:00
Nutbuster 76e3212bf1 Remove trailing backspaces & vbox instead of grid 2021-07-04 19:51:24 +10:00
Nutbuster c1e7fd2bbf Add Error Message for not having Mods 2021-07-04 19:00:39 +10:00
Nutbuster f9edccabd4 Add Mod Support 2021-07-04 16:21:04 +10:00
25 changed files with 427 additions and 148 deletions

39
.gitignore vendored
View File

@ -1,9 +1,9 @@
# IToddler files
# macOS-related files
.DS_Store
.AppleDouble
.LSOverride
# Windows cancer
# Windows-related files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
@ -15,19 +15,42 @@ ehthumbs_vista.db
/traceback.txt
/errors.txt
/log.txt
log.txt
errors.txt
traceback.txt
#Vim swap files
.sw?
*~
*.bak
#save files & cache files
/game/saves/
/game/saves/*
/game/cache/*
/game/cache
saves
tmp
cache
env
#binary files
*.rpyc
*.rpyb
*.rpymc
*.pyc
*.pyo
#Vim (best text editor) swap files
.sw?
#cache files
/game/cache/*
#save files
/game/saves/*
#binary files
*.rpyc
*.rpymc
#backups
*.bak
#android
.android.json

BIN
android-icon_foreground.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
android-presplash.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

Binary file not shown.

BIN
game/audio/ui/uiBack.wav Normal file

Binary file not shown.

BIN
game/audio/ui/uiClick.wav Normal file

Binary file not shown.

BIN
game/audio/ui/uiFail.wav Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -78,7 +78,8 @@ define gui.text_size = 42
## The size of character names.
define gui.name_text_size = 45
define gui.name_text_outlines = [ (absolute(1.5), gui.name_outline, 0, 0) ]
define gui.name_text_thickness = absolute(2.0)
define gui.name_text_outlines = [ (gui.name_text_thickness, gui.name_outline, 0, 0) ]
## The size of text in the game's user interface.
define gui.interface_text_size = 33
@ -121,11 +122,9 @@ define gui.textbox_yalign = 1.0
## The placement of the speaking character's name, relative to the textbox.
## These can be a whole number of pixels from the left or top, or 0.5 to center.
define gui.name_xpos = 350
define gui.name_xpos = 395 #350
define gui.name_ypos = -85
define gui.name_large_xpos = 395
## The horizontal alignment of the character's name. This can be 0.0 for left-
## aligned, 0.5 for centered, and 1.0 for right-aligned.
define gui.name_xalign = 0.5
@ -447,14 +446,14 @@ init python:
## Font sizes.
gui.text_size = 44
gui.name_text_size = 48
gui.name_text_size = 46
gui.notify_text_size = 38
gui.interface_text_size = 45
gui.button_text_size = 45
gui.label_text_size = 51
## Namebox
gui.name_xpos = 345
gui.name_xpos = 395
gui.name_ypos = -85
## Adjust the location of the textbox.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

54
game/mods/README.md Normal file
View File

@ -0,0 +1,54 @@
The game loads an alternate storyline.rpy, this allows you to control the flow of the game's storytelling
Examples include:
- You want to inject more stuff inbetween chapters, maybe you hate time skip writing
- You want to have more of an after story kind of ordeal, for example expanding Ending 2
- You want to replace the entire story route
You can still call the vanilla game's chapters like the intro (call chapter_1) for example but you might want to either copy the vanilla scripts and mix in your edits to have full control
You will need to learn bit of Ren'Py & bit of actual Python anyways but you don't have to think too hard in learning anything new other than familiarizing with this game's script.rpy's already defined Character objects and images, you can freely ignore most of the UI and so on for the inexperienced but passionate artist and/or writer.
Textbox limitation: ~300 characters / four lines, the maximum in the vanilla game's script is around roughly ~278 and that only barely overflows to four lines, so <200 characters / three lines of text should be fine.
--- Ideal file structure of your mod ---
In the root of the mods folder:
folder_of_your_mod_name
- name_of_storyline.rpy
-> asset_folder
- asset.png
-> script_folder
- script.rpy
name_of_storyline.rpy
```
init python:
# Modding Support variables
# All mod rpy files must have title of their mod (this shows up on a button)
# and finally the label that controls the flow of dialogue
mod_menu_access += [{
'Name': "Mod Name",
'Label': "mod_storyline"
}];
image template_sample = Image("mods/folder_of_your_mod_name/asset_folder/asset.png")
label mod_storyline:
call chapter_1_new
```
script_folder/script.rpy
```
label chapter_1_new:
show template_sample at scenter
"Sample Text"
hide template_sample
play music 'audio/OST/Those Other Two Weirdos.ogg'
show anon neutral flip at aright with dissolve
A "Sample Text"
return
```
The funny thing is I don't even like 'fanfictions' to begin with but this mod support allows these 'fanfictions', ironic.

View File

@ -0,0 +1,36 @@
label chapter_2_new:
show template_sample at scenter
"Sample Text"
hide template_sample
play music 'audio/OST/Those Other Two Weirdos.ogg'
show anon neutral flip at aright with dissolve
A "Sample Text"
F "Sample Text"
Lucy "Sample Text"
Ro "Sample Text"
St "Sample Text"
N "Sample Text"
Nas "Sample Text"
T "Sample Text"
Attendant "Sample Text"
Sp "Sample Text"
Re "Sample Text"
D "Sample Text"
FM "Sample Text"
FD "Sample Text"
Tsuki "Sample Text"
unknown "Sample Text"
jingo "Sample Text"
MaitD "Sample Text"
Moe "Sample Text"
Vince "Sample Text"
Waitress "Sample Text"
AnonAndFang "Sample Text"
SV "Sample Text"
carl "Sample Text"
Drf "Sample Text"
FRT "Sample Text"
return

Binary file not shown.

After

Width:  |  Height:  |  Size: 468 B

View File

@ -0,0 +1,15 @@
init python:
# Modding Support variables
# All mod rpy files must have title of their mod (this shows up on a button)
# and finally the label that controls the flow of dialogue
mod_menu_access += [{
'Name': "Example Mod Name",
'Label': "storyline_ex"
}];
image template_sample = Image("mods_example/template/img/sample.png")
label storyline_ex:
call chapter_2_new

View File

@ -23,7 +23,7 @@ define gui.show_name = True
## The version of the game.
define config.version = "Patchy-patch5.1.1"
define config.version = "Monster-Update-6"
## Text that is placed on the game's about screen. Place the text between the
## triple-quotes, and leave a blank line between paragraphs.
@ -47,7 +47,13 @@ define build.name = "SnootGame"
define config.has_sound = True
define config.has_music = True
define config.has_voice = False
define config.has_voice = True
define config.play_channel = "uisounds"
##Custom Channels?
init -1 python:
renpy.music.register_channel("uisounds", "ui", loop=False, stop_on_mute=True)
## To allow the user to play a test sound on the sound or voice channel,
@ -185,6 +191,11 @@ init python:
build.classify('**/#**', None)
build.classify('**/thumbs.db', None)
# Do not include mod_examples as part of the build process
build.classify('game/mods_example/**', None)
build.classify('game/mods_example/.**', None)
## To archive files, classify them as 'archive'.
# build.classify('game/**.png', 'archive')

View File

@ -1,23 +1,44 @@
###Updater Python stuff###
###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"
if renpy.variant("pc"): #Don't run this on mobile, not supported
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 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
#idk non-functional dummies for uisounds hackery
#coming soon
def onclick_audio(flag, audio_filename=["audio/ui/uiOptionOff.wav", "audio/ui/uiOptionOff.wav", "audio/ui/uiOptionOff.wav"]):
renpy.play(audio_filename[int(flag)])
def ToggleAutoUpdate():
onclick_audio(persistent.autoup)
preferences.autoup = not preferences.autoup
def ToggleAutoForwardMove():
onclick_audio(persistent.afm_enable)
preferences.afm_enable = not preferences.afm_enable
# def ToggleMuteAll():
# if preferences.all_mute == True:
# renpy.play("audio/ui/uiOptionOff.wav")
# else:
# renpy.play("audio/ui/uiOptionOn.wav")
# preferences.all_mute = not preferences.all_mute
def ToggleAutoUpdate():
persistent.autoup = not persistent.autoup
################################################################################
## Initialization
@ -47,6 +68,7 @@ style gui_text:
style button:
properties gui.button_properties("button")
# activate_sound "audio/ui/uiClick.wav"
style button_text is gui_text:
properties gui.text_properties("button")
@ -122,7 +144,7 @@ screen say(who, what):
id "window"
if who is not None:
background Image("gui/textbox.png", xalign=0.5, yalign=1.0)
background Image("gui/textbox_long.png", xalign=0.5, yalign=1.0)
window:
id "namebox"
style "namebox"
@ -132,7 +154,6 @@ screen say(who, what):
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"):
@ -166,9 +187,6 @@ style namebox:
xpos gui.name_xpos
ypos gui.name_ypos
style namebox_large is namebox:
xpos gui.name_large_xpos
style say_label:
properties gui.text_properties("name", accent=True)
xalign gui.name_xalign
@ -253,6 +271,7 @@ style choice_vbox:
style choice_button is default:
properties gui.button_properties("choice_button")
activate_sound "audio/ui/uiRollover.wav"
style choice_button_text is default:
properties gui.button_text_properties("choice_button")
@ -268,6 +287,10 @@ screen quick_button(filename, label, function):
xmaximum 80
ymaximum 72
action function
if 'Return' in label or 'Back' in label or 'Menu' in label:
activate_sound "audio/ui/uiBack.wav"
else:
activate_sound "audio/ui/uiClick.wav"
fixed:
add filename xalign 0.5 yalign 0.5 zoom 1
text label xalign 0.5 yalign 0.5 xanchor 0.5 size 22 style "quick_button_text"
@ -283,22 +306,21 @@ screen quick_menu():
## Ensure this appears on top of other screens.
zorder 100
if quick_menu:
window:
background "gui/namebox.png"
xpos 1.45
ypos 0.977
grid 1 4:
style_prefix "quick"
xalign -0.005
yalign 0.010
window:
xpos 1.45
ypos 0.977
vbox:
style_prefix "quick"
xalign -0.005
yalign 0.010
use quick_buttons("gui/button/uioptionbuttons/template_idle.png", \
[ \
[ "Skip", Skip() ], \
[ "Save", ShowMenu('save') ], \
[ "Auto", Preference("auto-forward", "toggle") ], \
[ "Load", ShowMenu('load') ] \
] )
use quick_buttons("gui/button/uioptionbuttons/template_idle.png",
[
[ "Skip", Skip() ],
[ "Save", ShowMenu('save') ],
[ "Auto", Preference("auto-forward", "toggle") ],
[ "Load", ShowMenu('load') ]
] )
screen score_menu():
zorder 100
@ -354,22 +376,22 @@ screen navigation():
spacing gui.navigation_spacing
textbutton _("History") action ShowMenu("history")
textbutton _("Save") action ShowMenu("save")
textbutton _("Load") action ShowMenu("load")
textbutton _("Delete") action ShowMenu("delete")
textbutton _("Options") action ShowMenu("preferences")
textbutton _("History") activate_sound "audio/ui/uiClick.wav" action ShowMenu("history")
textbutton _("Save") activate_sound "audio/ui/uiClick.wav" action ShowMenu("save")
textbutton _("Load") activate_sound "audio/ui/uiClick.wav" action ShowMenu("load")
textbutton _("Delete") activate_sound "audio/ui/uiClick.wav" action ShowMenu("delete")
textbutton _("Options") activate_sound "audio/ui/uiClick.wav" action ShowMenu("preferences")
#textbutton _("Extras") action ShowMenu("extras")
textbutton _("Return") action Return()
textbutton _("Return") activate_sound "audio/ui/uiBack.wav" action Return()
if _in_replay:
textbutton _("End Replay") action EndReplay(confirm=True)
textbutton _("End Replay") activate_sound "audio/ui/uiBack.wav" action EndReplay(confirm=True)
elif not main_menu:
textbutton _("Main Menu") action MainMenu()
textbutton _("Main Menu") activate_sound "audio/ui/uiBack.wav" action MainMenu()
#textbutton _("Debug Score Card") action ShowMenu("score_menu")
#if renpy.variant("pc"):
@ -402,8 +424,12 @@ screen main_menu_button(filename, label, function):
xmaximum 500
ymaximum 129
action function
if 'Back' in label or 'Return' in label or 'Quit' in label or 'Main Menu' in label:
activate_sound "audio/ui/uiBack.wav"
else:
activate_sound "audio/ui/uiClick.wav"
fixed:
add filename xalign 0.5 yalign 0.5 zoom 1
add filename xalign 0.5 yalign 0.5 zoom 1 xanchor 0 xcenter 0.5 ycenter 0.5
text label xalign 0.5 yalign 0.5 xanchor 0.5
# label_functions is [ [ "label", function() ], [ "foobar", foobar() ], .. ]
@ -436,16 +462,17 @@ screen main_menu():
else:
add "gui/snootgame.png"
vbox:
spacing 25
spacing 10
xpos 1885
yalign 0.9
ypos 1130
use main_menu_buttons("gui/button/menubuttons/template_idle.png",
[ \
[ "Start", Start() ], \
[ "Load", ShowMenu("load") ], \
[ "Options", ShowMenu("preferences") ], \
[
[ "Start", Start() ],
[ "Mods", ShowMenu("mod_menu") ],
[ "Load", ShowMenu("load") ],
[ "Options", ShowMenu("preferences") ],
[ "Extras", ShowMenu("extras") ], \
[ "Quit", Quit(confirm=not main_menu) ] \
[ "Quit", Quit(confirm=not main_menu) ]
] )
on "show" action renpy.start_predict_screen("cg_gallery")
@ -680,10 +707,12 @@ screen updates():
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)]
textbutton _("{size=36}Check for Update\n{/size}") activate_sound "audio/ui/uiClick.wav" action [Notify("Checking for update..."), Function(UpdateCheck)]
label _("Updater:")
label _("{color=#FFFFFF}{size=32}Server URL (click to edit):{/size}{/color}")
default input_on = False
button:
key_events True
@ -698,10 +727,9 @@ screen updates():
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)
textbutton _("{size=36}Update Now!\n{/size}") activate_sound "audio/ui/uiNotification.wav" action [updater.Update(persistent.updateWebServer, force=False)]
else:
textbutton _("{size=36}Update Now!\n{/size}") action Notify("Nothing to update to!")
textbutton _("{size=36}Update Now!\n{/size}") activate_sound "audio/ui/uiFail.wav" action [Notify("Nothing to update to!")]
use extrasnavigation
## Load and Save screens #######################################################
@ -796,19 +824,19 @@ screen file_slots(title, flag=False):
spacing gui.page_spacing
textbutton _("<") action FilePagePrevious()
textbutton _("<") activate_sound "audio/ui/uiRollover.wav" action FilePagePrevious()
if config.has_autosave:
textbutton _("{#auto_page}A") action FilePage("auto")
textbutton _("{#auto_page}A") activate_sound "audio/ui/uiClick.wav" action FilePage("auto")
if config.has_quicksave:
textbutton _("{#quick_page}Q") action FilePage("quick")
textbutton _("{#quick_page}Q") activate_sound "audio/ui/uiClick.wav" action FilePage("quick")
## range(1, 10) gives the numbers from 1 to 9.
for page in range(1, 10):
textbutton "[page]" action FilePage(page)
textbutton "[page]" activate_sound "audio/ui/uiClick.wav" action FilePage(page)
textbutton _(">") action FilePageNext()
textbutton _(">") activate_sound "audio/ui/uiRollover.wav" action FilePageNext()
style page_label is gui_label
@ -866,32 +894,31 @@ screen preferences():
vbox:
style_prefix "radio"
label _("Display")
textbutton _("Window") action Preference("display", "any window")
textbutton _("Fullscreen") action Preference("display", "fullscreen")
textbutton _("Window") activate_sound "audio/ui/uiOptionOn.wav" action Preference("display", "any window")
textbutton _("Fullscreen") activate_sound "audio/ui/uiOptionOn.wav" action Preference("display", "fullscreen")
vbox:
style_prefix "radio"
label _("Rollback Side")
textbutton _("Disable") action Preference("rollback side", "disable")
textbutton _("Left") action Preference("rollback side", "left")
textbutton _("Right") action Preference("rollback side", "right")
textbutton _("Disable") activate_sound "audio/ui/uiOptionOn.wav" action Preference("rollback side", "disable")
textbutton _("Left") activate_sound "audio/ui/uiOptionOn.wav" action Preference("rollback side", "left")
textbutton _("Right") activate_sound "audio/ui/uiOptionOn.wav" action Preference("rollback side", "right")
vbox:
style_prefix "check"
label _("Naughty Stuff")
textbutton _("Enable Lewd Images") action ToggleVariable("persistent.lewd", True, False)
textbutton _("Enable Lewd Images") action [Function(onclick_audio, persistent.lewd), ToggleVariable("persistent.lewd", True, False)]
vbox:
style_prefix "check"
label _("Requires Restart")
textbutton _("Enable Forward-Scroll Movement") action ToggleVariable("persistent.scroll", True, False)
textbutton _("Enable Forward-Scroll Movement") action [Function(onclick_audio, persistent.scroll), ToggleVariable("persistent.scroll", True, False)]
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"))
textbutton _("Unseen Text") action [Function(onclick_audio, preferences.skip_unseen), ToggleVariable("preferences.skip_unseen", True, False)]
textbutton _("After Choices") action [Function(onclick_audio, preferences.skip_after_choices), ToggleVariable("preferences.skip_after_choices", True, False)]
textbutton _("Transitions") action [Function(onclick_audio, preferences.transitions), ToggleVariable("preferences.transitions", 0, 2)]
## Additional vboxes of type "radio_pref" or "check_pref" can be
## added here, to add additional creator-defined preferences.
@ -920,6 +947,12 @@ screen preferences():
hbox:
bar value Preference("music volume")
if config.has_music:
label _("UI Sounds Volume")
hbox:
bar value Preference("ui volume")
if config.has_sound:
label _("Sound Volume")
@ -940,7 +973,7 @@ screen preferences():
if config.sample_voice:
textbutton _("Test") action Play("voice", config.sample_voice)
if config.has_music or config.has_sound or config.has_voice:
if config.has_music or config.has_sound or config.has_voice or config.has_ui:
null height gui.pref_spacing
textbutton _("Mute All"):
@ -1144,10 +1177,10 @@ screen extrasnavigation():
use main_menu_buttons("gui/button/menubuttons/template_idle.png",
[
[ "Help", ShowMenu("help") ],
[ "About", ShowMenu("about") ],
[ "Updates", ShowMenu("updates") ],
[ "About", ShowMenu("about") ],
[ "Updates", ShowMenu("updates") ],
[ "Gallery", ShowMenu("cg_gallery_0") ],
[ "Return", ShowMenu("main_menu") ]
[ "Return", ShowMenu("main_menu") ]
] )
## Help screen #################################################################
@ -1218,7 +1251,7 @@ screen keyboard_help():
hbox:
label _("Escape")
text _("Accesses the game menu.")
text _("Accesses the game menu. Also escapes the Gallery.")
hbox:
label _("Ctrl")
@ -1261,7 +1294,7 @@ screen mouse_help():
hbox:
label _("Right Click")
text _("Accesses the game menu.")
text _("Accesses the game menu. Also escapes the Gallery.")
hbox:
label _("Mouse Wheel Up\nClick Rollback Side")
@ -1362,8 +1395,8 @@ screen confirm(message, yes_action, no_action):
xalign 0.5
spacing 150
textbutton _("Yes") action yes_action
textbutton _("No") action no_action
textbutton _("Yes") activate_sound "audio/ui/uiClick.wav" action yes_action
textbutton _("No") activate_sound "audio/ui/uiBack.wav" action no_action
## Right-click and escape answer "no".
key "game_menu" action no_action
@ -1621,8 +1654,8 @@ style pref_vbox:
screen quick_button(filename, label, function):
variant "small"
button:
xmaximum 180
ymaximum 100
xmaximum 124
ymaximum 124
action function
fixed:
add filename xalign 0.5 yalign 0.5 zoom 1.75
@ -1633,6 +1666,7 @@ screen quick_menu():
zorder 100
if quick_menu:
hbox:
spacing 28
style_prefix "quick"
xalign 0.5
yalign 0.975
@ -1644,6 +1678,28 @@ screen quick_menu():
[ "Menu", ShowMenu() ] \
] )
screen extrasnavigation(): #Updates are removed (not even supported by Ren'Py)
variant "small"
vbox:
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") ],
[ "Gallery", ShowMenu("cg_gallery_0") ],
[ "Return", ShowMenu("main_menu") ]
] )
style radio_button:
variant "small"
foreground "gui/phone/button/radio_[prefix_]foreground.png"

View File

@ -13,19 +13,26 @@
#Why yes all my code was formerly in one massive file called "script" thats 28k lines long, how could you tell?
#Licensed under the GNU AGPL v3, for more information check snootgame.xyz or the LICENSE file that should have came with this work.
init -1 python:
# Modding Support variables
# All mod rpy files must run a small init python script
mod_dir = "mods/";
mod_menu_access = [];
init python:
import random
import webbrowser
#function for insult layers
def showCG():
files = ["text0", "text1", "text2", "text3", "text4", "text5", "text6", "text7", "text8", "text9"]
import random
import webbrowser
#function for insult layers
def showCG():
files = ["text1", "text2", "text3", "text4", "text5", "text6", "text7", "text8", "text9"]
length = len(files)
picked = random.randint(0,length - 1)
fileName = files[picked]
renpy.show(fileName, at_list=[randPosition])
if persistent.scroll == True:
if persistent.scroll == True:
config.keymap['dismiss'].append('mousedown_4')
transform randPosition:
alpha 0.0
xalign random.uniform(0.2,0.8)
@ -80,38 +87,35 @@ transform randPosition:
# attribute guitar:
# "guitar.webp"
#Raw Image & kwargs for long textboxes
define long_textbox_img = Image("gui/textbox_long.png", xalign=0.5, yalign=1.0)
define long_textbox = { "window_background": long_textbox_img, 'namebox_style': "namebox_large" }
#Characters
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
define A = Character ('Anon',color="#36E12D", who_outlines=[(gui.name_text_thickness, '#0C300A')]) # Light Green
define F = Character ('Fang',color="#B4D4CE", who_outlines=[(gui.name_text_thickness, '#0F3930')]) # Light Cyan
define Lucy = Character ('Lucy',color="#B4D4CE", who_outlines=[(gui.name_text_thickness, '#0F3930')]) # Light Cyan
define Ro = Character ('Rosa',color="#FE712B", who_outlines=[(gui.name_text_thickness, '#54230F')]) # Red-Orange
define St = Character ('Stella',color="#D5FFAE", who_outlines=[(gui.name_text_thickness, '#294211')]) # Light Green
define N = Character ('Naomi',color="#FDD2C1", who_outlines=[(gui.name_text_thickness, '#462628')]) # Peach
define Nas = Character ('Naser',color="#FFB561", who_outlines=[(gui.name_text_thickness, '#512322')]) # Orange
define T = Character ('Trish',color="#B675E6", who_outlines=[(gui.name_text_thickness, '#3A0C5D')]) # Purple
define Attendant = Character ('Attendant',color="#5BF0F8", who_outlines=[(gui.name_text_thickness, '#121C68')]) # Aqua
define Sp = Character ('Spears',color="#C7C7C7", who_outlines=[(gui.name_text_thickness, '#272727')]) # Light Grey
define Re = Character ('Reed',color="#ED4C5B", who_outlines=[(gui.name_text_thickness, '#421014')]) # Bright Red
define D = Character ('Driver',color="#FFECBC", who_outlines=[(gui.name_text_thickness, '#563010')]) # Yellow-Orange
define FM = Character ("Fang's Mom",color="#FFD8F6", who_outlines=[(gui.name_text_thickness, '#521947')]) # Bright Pink
define FD = Character ("Fang's Dad",color="#D8A09A", who_outlines=[(gui.name_text_thickness, '#461B1F')]) # Desaturated Orange
define Tsuki = Character ('Mr. Tsuki',color="#A7F2A2", who_outlines=[(gui.name_text_thickness, '#471054')]) # Pear Green
define unknown = Character ('(???)',color="#FFF", who_outlines=[(gui.name_text_thickness, '#000')]) # White
define jingo = Character ('Mr. Jingo',color="#CD8283", who_outlines=[(gui.name_text_thickness, '#0F0D49')]) # Desaturated Red
define MaitD = Character ('Maitre D',color="#AF9EFF", who_outlines=[(gui.name_text_thickness, '#241630')]) # Cobalt Blue
define Moe = Character('Moe',color="#A5BEED", who_outlines=[(gui.name_text_thickness, '#1F253B')]) # Desaturated Blue
define Vince = Character ('Vince',color="#FFECBC", who_outlines=[(gui.name_text_thickness, '#563010')]) # Yellow-Orange
define Waitress = Character ('Waitress',color="#F691C8", who_outlines=[(gui.name_text_thickness, '#512040')]) # Pink
#long TB chars
define AnonAndFang = Character('Anon and Fang',color="72DFA8", who_outlines=[(1, '#113623')], **long_textbox) # Cyan
define SV = Character ('Street Vendor',color="#F8E120", who_outlines=[(1, '#361504')], **long_textbox) # Yellow
define carl = Character ('Mr. Carldewskii',color="#E19E40", who_outlines=[(1, '#03223B')], **long_textbox) # Puke Orange
define Drf = Character ('Dr. Fernsworth',color="#253354", who_outlines=[(1, '#334573')], **long_textbox) # Royal Blue
define FRT = Character ('Fang Reed & Trish',color="#4963A5", who_outlines=[(1, '#FFFFFF')], **long_textbox) # Cold Blue
define AnonAndFang = Character('Anon and Fang',color="72DFA8", who_outlines=[(gui.name_text_thickness, '#113623')]) # Cyan
define SV = Character ('Street Vendor',color="#F8E120", who_outlines=[(gui.name_text_thickness, '#58260C')]) # Yellow
define carl = Character ('Mr. Carldewskii',color="#EECB99", who_outlines=[(gui.name_text_thickness, '#082337')]) #Puke Orange
define Drf = Character ('Dr. Fernsworth',color="#DCEEF5", who_outlines=[(gui.name_text_thickness, '#253354')]) #Yellow-Orange
define FRT = Character ('Fang Reed & Trish',color="#DCBBF7", who_outlines=[(gui.name_text_thickness, '#191C78')]) #Light Purple
#Extra image translations
#siloettes
@ -301,7 +305,7 @@ label splashscreen:
UpdateCheck()
if persistent.updateresult != "No new version is available":
updater.update(persistent.updateWebServer, force=True)
stop sound
return

View File

@ -520,7 +520,7 @@ label chapter_14D:
show fang d happy with dissolve
"We chuckle together."
play music "audio/OST/Amberlight Brilliance.ogg" fadein 1.0
play music "audio/OST/Amberlight Brilliance D ending.ogg" fadein 1.0
A "Hey, Lucy…"
"I keep my eyes on the stars, even when Lucy turns to look at me."

View File

@ -158,17 +158,17 @@ screen cg_gallery(flag, __yoffset = 0, origin = 'CG'):
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
textbutton _(cp['name']) activate_sound "audio/ui/uiClick.wav" 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
textbutton _(cp['name']) activate_sound "audio/ui/uiClick.wav" 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
textbutton _("Return") activate_sound "audio/ui/uiBack.wav" action ShowMenu('main_menu') text_xalign 0.5
if _in_replay:
textbutton _("End Replay") action EndReplay(confirm=True)
textbutton _("End Replay") activate_sound "audio/ui/uiBack.wav" action EndReplay(confirm=True)
elif not main_menu:
textbutton _("Main Menu") action MainMenu()
textbutton _("Main Menu") activate_sound "audio/ui/uiBack.wav" action MainMenu()
transform:
zoom 0.95
@ -248,6 +248,7 @@ screen view_image(item, _origin, zoom = zoom_arr.index(1.0), flag='a'):
tag menu
key "game_menu" action _origin
key "button_alternate" action _origin
# mousewheel & insert+delete
if (ALLOW_ZOOM):
@ -273,13 +274,20 @@ screen view_image(item, _origin, zoom = zoom_arr.index(1.0), flag='a'):
#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
hbox:
style_prefix "quick"
xalign 0.5
yalign 0.975
if (ALLOW_ZOOM) and renpy.variant("small"):
use quick_buttons("gui/button/uioptionbuttons/template_idle.png",
[
[ "+", zoom_a_f ],
[ "-", zoom_b_f ]
[ "-", zoom_b_f ],
[ "Return", zoom_b_f ]
] )
elif renpy.variant("small"):
use quick_buttons("gui/button/uioptionbuttons/template_idle.png",
[
[ "Return", _origin ]
] )

73
game/src/mod_menu.rpy Normal file
View File

@ -0,0 +1,73 @@
# 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
if 'Back' in label or 'Return' in label or 'Quit' in label or 'Main Menu' in label:
activate_sound "audio/ui/uiBack.wav"
else:
activate_sound "audio/ui/uiClick.wav"
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)

View File

@ -58,4 +58,4 @@ label ending:
if tradwife:
scene c10 with fade
pause 20
return
return