Compare commits
149 Commits
master
...
Monster-Up
Author | SHA1 | Date |
---|---|---|
C22 | 741aee6c5e | |
Nutbuster | 27701654a0 | |
Bowie | 64f372695d | |
MichaelYick | f89079d471 | |
MichaelYick | f5a7093112 | |
MichaelYick | 0eac5d3c36 | |
MichaelYick | 4ae29ac5fd | |
Nutbuster | b886497f89 | |
Bowie | e9569a83c6 | |
Bowie | 3a6acbb2ff | |
Nutbuster | 60a6f8acac | |
Nutbuster | c90faec1d1 | |
Nutbuster | 798ff85ff6 | |
Nutbuster | 3b401ccf1c | |
Nutbuster | ad87c2730a | |
Nutbuster | 8b47b1f3f8 | |
Nutbuster | e5c5b6fbe9 | |
Nutbuster | a4afd458d2 | |
Nio | d82571ffe9 | |
Nio | 46344e7f3a | |
Nio | 09195d2919 | |
Nio | 5220b7fbb6 | |
Nio | 61dc7dd796 | |
Nio | 16e8e5a72a | |
Nio | d59f59ca88 | |
Nutbuster | 2e03d41097 | |
Nutbuster | e7f3e70b92 | |
Nutbuster | 24ef384443 | |
Nutbuster | aae7c961d3 | |
Nutbuster | b1cdf38707 | |
Nutbuster | c723cb19f3 | |
Nutbuster | 2c9bfdfb1e | |
Nutbuster | d2d9591339 | |
Nutbuster | 9bed598168 | |
Bowie | 52ca7a0a10 | |
Bowie | e90fd9d48b | |
Bowie | 8bd3a58d18 | |
Bowie | 8647f53355 | |
Bowie | 81c39c9dad | |
Bowie | 89249c60ed | |
Bowie | be0a7ccf73 | |
Bowie | cecd74c366 | |
Nio | 8f6393ab79 | |
MichaelYick | 666ecea915 | |
Nio | 665ee694ba | |
Nutbuster | 1efc015419 | |
Nutbuster | 2e32d74aec | |
Nutbuster | 0bdd5b3b06 | |
Bowie | 682921fef5 | |
Bowie | 8c430b8d09 | |
Bowie | f26f3811dc | |
Bowie | c7a2c5b692 | |
Bowie | 143ea72ea5 | |
Bowie | e08c58881d | |
Bowie | 792fa8a288 | |
Bowie | 31e5c61be9 | |
Bowie | 2dc8d59690 | |
Bowie | d3514e53e8 | |
Bowie | a23fe3d159 | |
Bowie | 213b215d8a | |
Nutbuster | 4a21554c0e | |
Nutbuster | bdb89a6c37 | |
Nutbuster | 744d6dfbf9 | |
Nutbuster | c9b7222d13 | |
Nutbuster | 66c0dc8d80 | |
Nutbuster | 17d669bd83 | |
tick bumley | a17d382802 | |
Bowie | 1ffd4bbb0e | |
Nutbuster | a39c3c24e2 | |
Nio | 8ca825cda6 | |
Bowie | 9cbe06a8c6 | |
Bowie | 680221f7a8 | |
Bowie | 22d05bcbcc | |
Bowie | 519094226f | |
Bowie | f59174c5d8 | |
Bowie | 9f83c08ed9 | |
Bowie | a0749fc318 | |
Bowie | ec222164c7 | |
Bowie | aa3a393873 | |
Bowie | 322beeb6dd | |
Bowie | d91401b6ac | |
Bowie | 4493cd8e1b | |
Bowie | ac78a51e56 | |
Bowie | 104b63d1bf | |
Bowie | ab94de8bd8 | |
Bowie | d13087d86b | |
Bowie | 5830fdad8d | |
Bowie | d2ecb69f1c | |
Bowie | fbd3eacc33 | |
Bowie | 6f75382f66 | |
Bowie | 9e19298144 | |
Nutbuster | 9fa26bc67b | |
Nutbuster | 0c4aab6858 | |
Nutbuster | 0959d0f275 | |
Nutbuster | cd780dfa36 | |
Nutbuster | 400d305f23 | |
Bowie | 528be7f2c8 | |
Bowie | d439bfc005 | |
Bowie | 3a41a71118 | |
Bowie | 8b980c00c0 | |
Bowie | 19bad8b682 | |
Bowie | 1c49e00b94 | |
Nutbuster | 76e3212bf1 | |
Nutbuster | c1e7fd2bbf | |
Nutbuster | f9edccabd4 | |
Bowie | 981b7df998 | |
Bowie | 5335540d0b | |
Bowie | c3c7b3b753 | |
Bowie | f7db5fb407 | |
Bowie | 0df8dd9f94 | |
Bowie | 7832a18822 | |
Bowie | 9290b34829 | |
Bowie | e19566dfa8 | |
Bowie | bc4c4a2304 | |
Bowie | 56fe353dd8 | |
Bowie | cd44add13d | |
Bowie | 83b680efe1 | |
Bowie | 6ae319c6ce | |
Bowie | 075743f063 | |
Bowie | e1eee3852d | |
MichaelYick | 095299b9ba | |
MichaelYick | e77bcbb9a3 | |
Bowie | fe1391a8a0 | |
Bowie | f26f6a33fd | |
Bowie | 98275a6cfe | |
Bowie | 66e3ab693b | |
Bowie | 6828f773d6 | |
Bowie | 22d44dcc74 | |
Bowie | b03361b476 | |
Bowie | f687e6a032 | |
Bowie | c0b49eea9c | |
Bowie | 799f07d0e4 | |
Bowie | d9e46a6135 | |
Bowie | 6de77d3c61 | |
Bowie | 3aac53c8b7 | |
Bowie | 3fd3895178 | |
Bowie | 6e7e9ac7d7 | |
Bowie | a22aa136cb | |
Bowie | 468f367261 | |
Bowie | 3af087ee77 | |
Bowie | 541645f810 | |
Bowie | 6316d33c1f | |
Bowie | f56c5dc80b | |
Bowie | 6c07424023 | |
Bowie | 8c3bf9e54c | |
Bowie | 60a04b8daa | |
Bowie | b4e561e1d7 | |
Bowie | f6b55addfa | |
Bowie | b86cac340b |
|
@ -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
|
||||
|
|
2
LICENSE
|
@ -6,3 +6,5 @@ WoodSnap.wav - "Snapping, Wooden Fence, N.wav" by InspectorJ (www.jshaw.co.uk) o
|
|||
firealarm.ogg - "School Fire Alarm" by Cullen Card
|
||||
shot.ogg - "38 Caliber Gun Shot 5x" by Mike Koenig
|
||||
wind.wav - "Wind" by Mark DiAngelo
|
||||
punch.ogg - "Strong Punch" by Mike Koenig
|
||||
menacing.ogg - "Scaryscape 01" by Suonho (soundcloud.com/suonho) of Freesound.org
|
After Width: | Height: | Size: 81 KiB |
After Width: | Height: | Size: 262 KiB |
11
game/gui.rpy
|
@ -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.
|
||||
|
|
After Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 317 KiB After Width: | Height: | Size: 317 KiB |
Before Width: | Height: | Size: 317 KiB After Width: | Height: | Size: 317 KiB |
Before Width: | Height: | Size: 321 KiB After Width: | Height: | Size: 321 KiB |
Before Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 376 KiB |
After Width: | Height: | Size: 223 KiB |
After Width: | Height: | Size: 65 KiB |
After Width: | Height: | Size: 242 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 827 B |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 12 KiB |
|
@ -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.
|
||||
|
|
@ -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
|
After Width: | Height: | Size: 468 B |
|
@ -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
|
|
@ -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')
|
||||
|
|
222
game/screens.rpy
|
@ -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"
|
||||
|
|
114
game/script.rpy
|
@ -13,17 +13,30 @@
|
|||
#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:
|
||||
# extra music channel so we can do crossfade instead of fadeout followed by fadein
|
||||
# TODO: function for stopping both channels with optional fadeout so we don't have to keep track of which channel is playing
|
||||
renpy.music.register_channel("music1","music",True,tight=True)
|
||||
# allows playing looped ambience alongside music
|
||||
renpy.music.register_channel("ambient","sfx",True,tight=True)
|
||||
renpy.music.register_channel("ambient1","sfx",True,tight=True)
|
||||
renpy.music.register_channel("ambient2","sfx",True,tight=True)
|
||||
if persistent.scroll == True:
|
||||
config.keymap['dismiss'].append('mousedown_4')
|
||||
|
||||
transform randPosition:
|
||||
|
@ -80,38 +93,57 @@ transform randPosition:
|
|||
# attribute guitar:
|
||||
# "guitar.webp"
|
||||
|
||||
# Click-to-continue icons / animations
|
||||
# TODO: settle on a position/animation that people like
|
||||
image ctc_end_marker:
|
||||
"pickicon_smaller"
|
||||
# xalign 0.925 yalign 0.98
|
||||
alpha 0
|
||||
linear 0.25 alpha 1
|
||||
# linear 0.5 alpha 0
|
||||
# repeat
|
||||
image ctc_mid_marker:
|
||||
"pickicon2"
|
||||
# xalign 0.925 yalign 0.98
|
||||
alpha 0
|
||||
linear 0.25 alpha 1
|
||||
# linear 0.5 alpha 0
|
||||
# repeat
|
||||
|
||||
#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 base = Character (ctc="ctc_end_marker", ctc_pause="ctc_mid_marker", ctc_timedpause=Null(), ctc_position="nestled") # try to remember some of the basics of CTC
|
||||
define narrator = Character(kind=base)
|
||||
define A = Character ('Anon', base, color="#36E12D", who_outlines=[(gui.name_text_thickness, '#0C300A')]) # Light Green
|
||||
define F = Character ('Fang', base, color="#B4D4CE", who_outlines=[(gui.name_text_thickness, '#0F3930')]) # Light Cyan
|
||||
define Lucy = Character ('Lucy', base, color="#B4D4CE", who_outlines=[(gui.name_text_thickness, '#0F3930')]) # Light Cyan
|
||||
define Ro = Character ('Rosa', base, color="#FE712B", who_outlines=[(gui.name_text_thickness, '#54230F')]) # Red-Orange
|
||||
define St = Character ('Stella', base, color="#D5FFAE", who_outlines=[(gui.name_text_thickness, '#294211')]) # Light Green
|
||||
define N = Character ('Naomi', base, color="#FDD2C1", who_outlines=[(gui.name_text_thickness, '#462628')]) # Peach
|
||||
define Nas = Character ('Naser', base, color="#FFB561", who_outlines=[(gui.name_text_thickness, '#512322')]) # Orange
|
||||
define T = Character ('Trish', base, color="#B675E6", who_outlines=[(gui.name_text_thickness, '#3A0C5D')]) # Purple
|
||||
define Attendant = Character ('Attendant', base, color="#5BF0F8", who_outlines=[(gui.name_text_thickness, '#121C68')]) # Aqua
|
||||
define Sp = Character ('Spears', base, color="#C7C7C7", who_outlines=[(gui.name_text_thickness, '#272727')]) # Light Grey
|
||||
define Re = Character ('Reed', base, color="#ED4C5B", who_outlines=[(gui.name_text_thickness, '#421014')]) # Bright Red
|
||||
define D = Character ('Driver', base, color="#FFECBC", who_outlines=[(gui.name_text_thickness, '#563010')]) # Yellow-Orange
|
||||
define FM = Character ("Fang's Mom", base, color="#FFD8F6", who_outlines=[(gui.name_text_thickness, '#521947')]) # Bright Pink
|
||||
define FD = Character ("Fang's Dad", base, color="#D8A09A", who_outlines=[(gui.name_text_thickness, '#461B1F')]) # Desaturated Orange
|
||||
define Tsuki = Character ('Mr. Tsuki', base, color="#A7F2A2", who_outlines=[(gui.name_text_thickness, '#471054')]) # Pear Green
|
||||
define unknown = Character ('(???)', base, color="#FFF", who_outlines=[(gui.name_text_thickness, '#000')]) # White
|
||||
define jingo = Character ('Mr. Jingo', base, color="#CD8283", who_outlines=[(gui.name_text_thickness, '#0F0D49')]) # Desaturated Red
|
||||
define MaitD = Character ('Maitre D', base, color="#AF9EFF", who_outlines=[(gui.name_text_thickness, '#241630')]) # Cobalt Blue
|
||||
define Moe = Character('Moe', base, color="#A5BEED", who_outlines=[(gui.name_text_thickness, '#1F253B')]) # Desaturated Blue
|
||||
define Vince = Character ('Vince', base, color="#FFECBC", who_outlines=[(gui.name_text_thickness, '#563010')]) # Yellow-Orange
|
||||
define Waitress = Character ('Waitress', base, 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', base, color="72DFA8", who_outlines=[(gui.name_text_thickness, '#113623')]) # Cyan
|
||||
define SV = Character ('Street Vendor', base, color="#F8E120", who_outlines=[(gui.name_text_thickness, '#58260C')]) # Yellow
|
||||
define carl = Character ('Mr. Carldewskii', base, color="#EECB99", who_outlines=[(gui.name_text_thickness, '#082337')]) #Puke Orange
|
||||
define Drf = Character ('Dr. Fernsworth', base, color="#DCEEF5", who_outlines=[(gui.name_text_thickness, '#253354')]) #Yellow-Orange
|
||||
define FRT = Character ('Fang Reed & Trish', base, color="#DCBBF7", who_outlines=[(gui.name_text_thickness, '#191C78')]) #Light Purple
|
||||
|
||||
#Extra image translations
|
||||
#siloettes
|
||||
|
@ -119,6 +151,7 @@ image stellaSilo = im.Flip(im.MatrixColor("stella/stella neutral.png",im.matrix.
|
|||
image rosaSilo = im.MatrixColor("rosa/rosa neutral.png",im.matrix.brightness(-1))
|
||||
image naomiSilo = im.MatrixColor("naomi/naomi neutral.png",im.matrix.brightness(-1))
|
||||
image naserSilo = im.Flip(im.MatrixColor("naser/naser neutral.png",im.matrix.brightness(-1)), horizontal=True)
|
||||
image naserSiloShocked = im.Flip(im.MatrixColor("naser/naser shocked.png",im.matrix.brightness(-1)), horizontal=True)
|
||||
image fangSilo = im.MatrixColor("fang/basic set/fang neutral.png",im.matrix.brightness(-1))
|
||||
image fangAngrySilo = im.MatrixColor("fang/basic set/fang angry.png",im.matrix.brightness(-1))
|
||||
|
||||
|
@ -194,6 +227,7 @@ image reed sad flip = im.Flip("reed/reed sad.png", horizontal=True)
|
|||
|
||||
#shocked flips
|
||||
image anon shocked flip = im.Flip("anon/emotive set/anon shocked.png", horizontal=True)
|
||||
image anon ohshit flip = im.Flip("anon/base set/anon ohshit.png", horizontal=True)
|
||||
image fang shocked flip = im.Flip("fang/emotive set/fang shocked.png", horizontal=True)
|
||||
image fang c shocked flip = im.Flip("fang/future sets/fang c shocked.png", horizontal=True)
|
||||
image reed shocked flip = im.Flip("reed/reed shocked.png", horizontal=True)
|
||||
|
@ -207,6 +241,8 @@ image reed considering flip = im.Flip("reed/reed considering.png", horizontal=Tr
|
|||
image naser considering flip = im.Flip("naser/naser considering.png", horizontal=True)
|
||||
image naomi considering flip = im.Flip("naomi/naomi considering.png", horizontal=True)
|
||||
image rosa considering flip = im.Flip("rosa/rosa considering.png", horizontal=True)
|
||||
image trish considering flip = im.Flip("trish/trish considering.png", horizontal=True)
|
||||
image stella considering flip = im.Flip("stella/stella considering.png", horizontal=True)
|
||||
|
||||
#happy flips
|
||||
image fang happy flip = im.Flip("fang/basic set/fang happy.png", horizontal=True)
|
||||
|
@ -223,6 +259,8 @@ image naomi prom happy flip = im.Flip("naomi/naomi prom happy.png", horizontal=T
|
|||
image reed happy flip = im.Flip("reed/reed happy.png", horizontal=True)
|
||||
image reed happy sunglasses flip = im.Flip("reed/reed happy sunglasses.png", horizontal=True)
|
||||
image anon face happy flip = im.Flip("anon/base set/anon face happy.png", horizontal=True)
|
||||
image anon happy flip = im.Flip("anon/emotive set/anon happy.png", horizontal=True)
|
||||
image anon grin flip = im.Flip("anon/base set/anon grin.png", horizontal=True)
|
||||
image trish future smug flip = im.Flip("trish/trish future smug.png", horizontal=True)
|
||||
image trish prom happy flip = im.Flip("trish/trish prom happy.png", horizontal=True)
|
||||
image stella happy flip = im.Flip("stella/stella happy.png", horizontal=True)
|
||||
|
@ -254,7 +292,7 @@ image stella unimpressed flip = im.Flip("stella/stella unimpressed.png", horizon
|
|||
image trish future unimpressed flip = im.Flip("trish/trish future unimpressed.png", horizontal=True)
|
||||
image fangdad unimpressed flip = im.Flip("fangparents/fangdad unimpressed.png", horizontal=True)
|
||||
image fangmom unimpressed flip = im.Flip("fangparents/fangmom unimpressed.png", horizontal=True)
|
||||
|
||||
image rosa unimpressed flip = im.Flip("rosa/rosa unimpressed.png", horizontal=True)
|
||||
|
||||
#annoyed flip
|
||||
image naser annoyed flip = im.Flip("naser/naser annoyed.png", horizontal=True)
|
||||
|
@ -268,9 +306,11 @@ image fang hiding flip = im.Flip("fang/emotive set/fang hiding.png", horizontal=
|
|||
|
||||
#indignant flip
|
||||
image trish prom indignant flip = im.Flip("trish/trish prom indignant.png", horizontal=True)
|
||||
image trish indignant flip = im.Flip("trish/trish indignant.png", horizontal=True)
|
||||
|
||||
#surprised flip
|
||||
image fang surprised flip = im.Flip("fang/basic set/fang surprised.png", horizontal=True)
|
||||
image trish surprised flip = im.Flip("trish/trish surprised.png", horizontal=True)
|
||||
|
||||
|
||||
#other flips
|
||||
|
@ -287,9 +327,13 @@ image jinflip = im.Flip("other/jin.png", horizontal=True)
|
|||
image farnsworth flip = im.Flip("other/farnsworth.png", horizontal=True)
|
||||
image carldelewski flip = im.Flip("other/carldelewski.png", horizontal=True)
|
||||
image fangdad unimpressed flip = im.Flip("fangparents/fangdad unimpressed.png", horizontal=True)
|
||||
image naser handout flip = im.Flip("naser/naser handout.png", horizontal=True)
|
||||
|
||||
|
||||
# vfx
|
||||
image black = "#000"
|
||||
image dimmer_lighter = "#00000033"
|
||||
image dimmer_light = "#00000066"
|
||||
image dimmer_darker = "#00000088"
|
||||
|
||||
#WAOH ITS THE TITLE SCREEN!!!!
|
||||
label splashscreen:
|
||||
|
@ -301,7 +345,7 @@ label splashscreen:
|
|||
UpdateCheck()
|
||||
if persistent.updateresult != "No new version is available":
|
||||
updater.update(persistent.updateWebServer, force=True)
|
||||
|
||||
|
||||
stop sound
|
||||
return
|
||||
|
||||
|
|
|
@ -151,7 +151,7 @@ label chapter_13A:
|
|||
|
||||
FD "Don’t sweat it, son."
|
||||
|
||||
FD "Thing about humans, as well as many charnivores, is that their vision is based largely on movement."
|
||||
FD "Thing about humans, as well as many carnivores, is that their vision is based largely on movement."
|
||||
|
||||
FD "You’d be surprised how useful staying quiet and stationary can be."
|
||||
|
||||
|
|
|
@ -146,7 +146,7 @@ label chapter_13C:
|
|||
|
||||
FD "Don’t sweat it, son."
|
||||
|
||||
FD "Thing about humans, as well as many charnivores, is that their vision is based largely on movement."
|
||||
FD "Thing about humans, as well as many carnivores, is that their vision is based largely on movement."
|
||||
|
||||
FD "You’d be surprised how useful staying quiet and stationary can be."
|
||||
|
||||
|
@ -433,6 +433,7 @@ label chapter_13C:
|
|||
F "Mumbling."
|
||||
|
||||
"Fuck."
|
||||
|
||||
Nas "I think I’ll hit up the catering first."
|
||||
|
||||
Nas "What about you guys?"
|
||||
|
@ -529,6 +530,7 @@ label chapter_13C:
|
|||
stop music fadeout 1.0
|
||||
play music "audio/OST/west_coast_kicking.ogg" fadein 1.0
|
||||
"Lucy's looking on edge, I should probably intervene quick."
|
||||
|
||||
N "-dress is very nice, Lucy, we should go out together clothes shopping sometime!"
|
||||
|
||||
F "I-I uh…"
|
||||
|
@ -1249,7 +1251,7 @@ label chapter_13C:
|
|||
|
||||
A "And I mean, I REALLY can’t dance."
|
||||
|
||||
A "Like, quadraplegic with down syndrome can’t dance."
|
||||
A "Like, quadriplegic with down syndrome can’t dance."
|
||||
|
||||
A "But-"
|
||||
|
||||
|
|
|
@ -144,7 +144,7 @@ label chapter_13D:
|
|||
|
||||
FD "Don’t sweat it, son."
|
||||
|
||||
FD "Thing about humans, as well as many charnivores, is that their vision is based largely on movement."
|
||||
FD "Thing about humans, as well as many carnivores, is that their vision is based largely on movement."
|
||||
|
||||
FD "You’d be surprised how useful staying quiet and stationary can be."
|
||||
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -1,47 +1,89 @@
|
|||
label chapter_6:
|
||||
#Not A Date
|
||||
scene room anon dark with fade
|
||||
|
||||
"-One Month Later-"
|
||||
|
||||
play music 'audio/OST/Bayside Bumming it.ogg' fadein 1.0
|
||||
|
||||
"I’m laying in bed on a saturday morning."
|
||||
|
||||
"It’s been raining the last few days, so I’m stuck inside."
|
||||
|
||||
"Not like I had any other plans anyways."
|
||||
|
||||
"The forecast says it should clear up later today."
|
||||
|
||||
"There’s no new games out, and my backlog is just the perfect size of fuck that noise."
|
||||
|
||||
"I don’t even feel like baiting on a certain basket weaving polynesian forum."
|
||||
|
||||
"The light of my phone is the only thing illuminating my hovel of a home."
|
||||
|
||||
"I scroll through the camera roll out of boredom."
|
||||
|
||||
"At least that’s what I tell myself."
|
||||
|
||||
"Interspersed through various memes and screenshots of homework assignments are pictures Fang has been sending."
|
||||
|
||||
"Over the last month I’ve been included more in Fang’s circle of friends."
|
||||
|
||||
#[CG of Fang having beaten Anon on a Primal Rage arcade cabinet]
|
||||
|
||||
"Ugh… My cred… I can feel it slipping away."
|
||||
|
||||
#[CG of Reed in his mascot outfit at one of Naser’s track meet]
|
||||
|
||||
"Hehehehe, Reed stole all the hotdogs that day."
|
||||
|
||||
#[CG of a selfie of Trish and Fang on the pier]
|
||||
|
||||
"I scroll past that one swiftly… god damn it Trish…"
|
||||
|
||||
"My perusal through old pictures is interrupted with a text."
|
||||
|
||||
"Fang: Looking for new band venue"
|
||||
|
||||
"Fang: Don’t feel like going alone"
|
||||
|
||||
"Fang: Do you want to come with?"
|
||||
|
||||
"...Alone…? No, shut the fuck up alarms."
|
||||
|
||||
"Anon: Why alone?"
|
||||
|
||||
"Fang: Trish has a horn appt and Reed is"
|
||||
|
||||
"A pause."
|
||||
|
||||
"Fang: Preoccupied."
|
||||
|
||||
#cut to Reed in bathroom cg
|
||||
|
||||
Re "...dude like… back to the story..."
|
||||
|
||||
#cut back to Anon
|
||||
|
||||
"Anon: Alright, where we dropping?"
|
||||
|
||||
"Fang: Just show up at my place in like an hour"
|
||||
|
||||
"Fang: Need to go now"
|
||||
|
||||
"Anon: k"
|
||||
|
||||
stop music fadeout 1.0
|
||||
|
||||
"This is fine."
|
||||
|
||||
play music 'audio/OST/Fuck You I Like To Shitpost.ogg' fadein 1.0
|
||||
|
||||
"It’s just helping a friend of mine find someplace for her band to play."
|
||||
|
||||
"A friend I have feelings for."
|
||||
|
||||
"And we’re alone."
|
||||
|
||||
scene room anon day
|
||||
"JUST HANGING OUT CALM DOWN ANON CALM THE FUCK DOWN."
|
||||
"I boot up my computer and start a gacha thread on a taiwanese rum brewing blogsite."
|
||||
|
|
|
@ -344,7 +344,6 @@ label chapter_8:
|
|||
|
||||
A "Er… why not."
|
||||
|
||||
|
||||
"I take the guitar from her hands and put the strap on, letting its weight hang from my shoulder."
|
||||
|
||||
"Fang hands me the pick and I aimlessly strum the guitar, the mess of a noise sounding a far cry from her elegant playing."
|
||||
|
@ -356,7 +355,9 @@ label chapter_8:
|
|||
show fanganonguitar
|
||||
with dissolve
|
||||
"Fang grabs another guitar and motions me to copy her hand movements."
|
||||
|
||||
"I try to mimic her hands on the fretboard but it feels like my fingers are twisting into pretzels."
|
||||
|
||||
F "Not like that, your hand’s gonna get cramped as fuck like that."
|
||||
|
||||
"Fang sets her guitar down on a stand and comes over to me."
|
||||
|
|
|
@ -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 ]
|
||||
] )
|
||||
|
||||
|
|
|
@ -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)
|
|
@ -58,4 +58,4 @@ label ending:
|
|||
if tradwife:
|
||||
scene c10 with fade
|
||||
pause 20
|
||||
return
|
||||
return
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
## Utility functions for game setup, debugging etc.
|
||||
|
||||
|
||||
label initstats(anon=0, fang=0, trad=False):
|
||||
# Sets various game-related global variables
|
||||
# :param int anon: Anon's score
|
||||
# :param int fang: Fang's score
|
||||
# :param bool trad: Tradwife ending flag
|
||||
$ anonscore = anon
|
||||
$ fangscore = fang
|
||||
$ tradwife = trad
|
||||
return
|