forked from Cavemanon/SnootGame
Compare commits
51 Commits
master
...
newAmberli
Author | SHA1 | Date | |
---|---|---|---|
f5a7093112 | |||
0eac5d3c36 | |||
4ae29ac5fd | |||
b886497f89 | |||
60a6f8acac | |||
c90faec1d1 | |||
798ff85ff6 | |||
3b401ccf1c | |||
ad87c2730a | |||
8b47b1f3f8 | |||
e5c5b6fbe9 | |||
a4afd458d2 | |||
d82571ffe9 | |||
46344e7f3a | |||
09195d2919 | |||
5220b7fbb6 | |||
61dc7dd796 | |||
16e8e5a72a | |||
d59f59ca88 | |||
2e03d41097 | |||
e7f3e70b92 | |||
24ef384443 | |||
aae7c961d3 | |||
b1cdf38707 | |||
c723cb19f3 | |||
2c9bfdfb1e | |||
d2d9591339 | |||
9bed598168 | |||
8f6393ab79 | |||
666ecea915 | |||
665ee694ba | |||
1efc015419 | |||
2e32d74aec | |||
0bdd5b3b06 | |||
4a21554c0e | |||
bdb89a6c37 | |||
744d6dfbf9 | |||
c9b7222d13 | |||
66c0dc8d80 | |||
17d669bd83 | |||
a17d382802 | |||
a39c3c24e2 | |||
8ca825cda6 | |||
9fa26bc67b | |||
0c4aab6858 | |||
0959d0f275 | |||
cd780dfa36 | |||
400d305f23 | |||
76e3212bf1 | |||
c1e7fd2bbf | |||
f9edccabd4 |
39
.gitignore
vendored
39
.gitignore
vendored
@ -1,9 +1,9 @@
|
|||||||
# IToddler files
|
# macOS-related files
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.AppleDouble
|
.AppleDouble
|
||||||
.LSOverride
|
.LSOverride
|
||||||
|
|
||||||
# Windows cancer
|
# Windows-related files
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
Thumbs.db:encryptable
|
Thumbs.db:encryptable
|
||||||
ehthumbs.db
|
ehthumbs.db
|
||||||
@ -15,19 +15,42 @@ ehthumbs_vista.db
|
|||||||
/traceback.txt
|
/traceback.txt
|
||||||
/errors.txt
|
/errors.txt
|
||||||
/log.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
|
#Vim (best text editor) swap files
|
||||||
.sw?
|
.sw?
|
||||||
|
|
||||||
#cache files
|
|
||||||
/game/cache/*
|
|
||||||
|
|
||||||
#save files
|
|
||||||
/game/saves/*
|
|
||||||
|
|
||||||
#binary files
|
#binary files
|
||||||
*.rpyc
|
*.rpyc
|
||||||
*.rpymc
|
*.rpymc
|
||||||
|
|
||||||
#backups
|
#backups
|
||||||
*.bak
|
*.bak
|
||||||
|
|
||||||
|
#android
|
||||||
|
.android.json
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
<h1>Contributing</h1>
|
<h1>Contributing</h1>
|
||||||
<p>Find an issue and start working. Creating issues is very helpful. Simply emailing patches/updated versions of the script works too. <b>All PRs/Contributions to the main code should go to the patch branch and NOT master as to leave master a stable branch</b>. All contributions belong to you, but are licensed under the GNU AGPL v3 and are adherent to the GPL-Exception in the root of the project file.</p>
|
<p>Find an issue and start working. Creating issues is very helpful. Simply emailing patches/updated versions of the script works too. <b>All PRs/Contributions to the main code should go to the patch branch and NOT master as to leave master a stable branch</b>. All contributions belong to you, but are licensed under the GNU AGPL v3 and are adherent to the GPL-Exception in the root of the project file.</p>
|
||||||
<p>It should be noted that any non-contributor sourced assets for the game MUST be under some form of free licensing that is <a href=https://creativecommons.org/share-your-work/licensing-considerations/compatible-licenses/>compatable with the CC-BY-SA 4.0 (Listed in this link as BY-SA)</a> for it to be added to the game. This includes audio, images, other bits of code, and other copyrightable assets. Compatable licenses include, but aren't limited to, CC-BY, Public Domain, CC-BY-SA 4.0, CC-BY-SA 3.0, The Free Art license, or any other license that is permissive in how it is used.</p>
|
|
||||||
|
|
||||||
<h1>Supported OSes</h1>
|
<h1>Supported OSes</h1>
|
||||||
<ol>
|
<ol>
|
||||||
@ -50,7 +49,6 @@
|
|||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h2>Special thanks to...</h2>
|
<h2>Special thanks to...</h2>
|
||||||
<p>A random anon on /lit/ saved this project from poor writing after we submitted a beta version of our script. The post goes as follows <b>(minor spoilers ahead)</b>:</p>
|
<p>A random anon on /lit/ saved this project from poor writing after we submitted a beta version of our script. The post goes as follows <b>(minor spoiliers ahead)</b>:</p>
|
||||||
<p>"Aight you kind of get this is an attention seeking thing. But this is as much of a symptom as the gender thing, not the root cause. Bio says she's neglected by her parents because her brother is perfect and gets everything right. He's a goody two shoes with grades and parents, popular, I'm guessing that other girl is his gf too. Fang's response is to adopt an "I need nobody" attitude, and has basically bought an off the shelf personality and identity to compensate. People like this do not feel like they have agency. They lack self actualization. These "store-bought" identities from ideologies like the LGBTQIAAOMGWTFBBQ people and racebaiters offer only the feeling of validation without the essential step of self. This behavior you can find in (You) baiting on 4channel, which is an attempt to find some semblance of "I exist!" instead of realizing you can't get that affirmation from outside. Fang adopting Tradwife, sticking with high school attitudes, or shooting up the school isn't fixing the problem of her gaining agency. You can fix this by having Anon be there as an example of being a self-actualized person, he shouldn't be there to fuck her or save her. Every choice that's not purely cosmetic should be set up with the intent to help her gain agency. She feels like she's always compared to her brother, never judged on her own merits or personhood, so she substitutes this with an identity that comes with excess baggage. It shouldn't matter if she's goth or bisexual, as long as this comes from within, and not because this will make up for her lack of personhood. This is why tradwife is missing the point a bit, it's substituting colored hair and pronouns for Jesus and prayer. She still does it because its an identity without any real substance of the self behind it. Or maybe I am talking out my ass and all she really did need was a man to fuck the degeneracy out of her. You guys do you</p>
|
<p>"Aight you kind of get this is an attention seeking thing. But this is as much of a symptom as the gender thing, not the root cause. Bio says she's neglected by her parents because her brother is perfect and gets everything right. He's a goody two shoes with grades and parents, popular, I'm guessing that other girl is his gf too. Fang's response is to adopt an "I need nobody" attitude, and has basically bought an off the shelf personality and identity to compensate. People like this do not feel like they have agency. They lack self actualization. These "store-bought" identities from ideologies like the LGBTQIAAOMGWTFBBQ people and racebaiters offer only the feeling of validation without the essential step of self. This behavior you can find in (You) baiting on 4channel, which is an attempt to find some semblance of "I exist!" instead of realizing you can't get that affirmation from outside. Fang adopting Tradwife, sticking with high school attitudes, or shooting up the school isn't fixing the problem of her gaining agency. You can fix this by having Anon be there as an example of being a self-actualized person, he shouldn't be there to fuck her or save her. Every choice that's not purely cosmetic should be set up with the intent to help her gain agency. She feels like she's always compared to her brother, never judged on her own merits or personhood, so she substitutes this with an identity that comes with excess baggage. It shouldn't matter if she's goth or bisexual, as long as this comes from within, and not because this will make up for her lack of personhood. This is why tradwife is missing the point a bit, it's substituting colored hair and pronouns for Jesus and prayer. She still does it because its an identity without any real substance of the self behind it. Or maybe I am talking out my ass and all she really did need was a man to fuck the degeneracy out of her. You guys do you</p>
|
||||||
<p>Whoever you are, you changed the writing direction from shitposty, pandering garbage to a genuine story that out preforms what our competators could do. Whoever you are, be proud of your critique and continue to critique. Story makers need vigilant anons like you.</p>
|
<p>Whoever you are, you changed the writing direction from shitposty, pandering garbage to a genuine story that out preforms what our competators could do. Whoever you are, be proud of your critique and continue to critique. Story makers need vigilant anons like you.</p>
|
||||||
<b>(Of note, we didn't take /lit/anon's word one-to-one about every detail we said. Nuance exists!)</b>
|
|
||||||
|
BIN
android-icon_foreground.png
Normal file
BIN
android-icon_foreground.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 81 KiB |
BIN
android-presplash.jpg
Normal file
BIN
android-presplash.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 262 KiB |
BIN
game/audio/OST/Amberlight Brilliance D ending.ogg
Normal file
BIN
game/audio/OST/Amberlight Brilliance D ending.ogg
Normal file
Binary file not shown.
BIN
game/audio/effects/tinnitus.ogg
Normal file
BIN
game/audio/effects/tinnitus.ogg
Normal file
Binary file not shown.
BIN
game/audio/ui/uiBack.wav
Normal file
BIN
game/audio/ui/uiBack.wav
Normal file
Binary file not shown.
BIN
game/audio/ui/uiClick.wav
Normal file
BIN
game/audio/ui/uiClick.wav
Normal file
Binary file not shown.
BIN
game/audio/ui/uiFail.wav
Normal file
BIN
game/audio/ui/uiFail.wav
Normal file
Binary file not shown.
BIN
game/audio/ui/uiNotification.wav
Normal file
BIN
game/audio/ui/uiNotification.wav
Normal file
Binary file not shown.
BIN
game/audio/ui/uiOptionOff.wav
Normal file
BIN
game/audio/ui/uiOptionOff.wav
Normal file
Binary file not shown.
BIN
game/audio/ui/uiOptionOn.wav
Normal file
BIN
game/audio/ui/uiOptionOn.wav
Normal file
Binary file not shown.
BIN
game/audio/ui/uiRollover.wav
Normal file
BIN
game/audio/ui/uiRollover.wav
Normal file
Binary file not shown.
11
game/gui.rpy
11
game/gui.rpy
@ -78,7 +78,8 @@ define gui.text_size = 42
|
|||||||
|
|
||||||
## The size of character names.
|
## The size of character names.
|
||||||
define gui.name_text_size = 45
|
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.
|
## The size of text in the game's user interface.
|
||||||
define gui.interface_text_size = 33
|
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.
|
## 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.
|
## 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_ypos = -85
|
||||||
|
|
||||||
define gui.name_large_xpos = 395
|
|
||||||
|
|
||||||
## The horizontal alignment of the character's name. This can be 0.0 for left-
|
## 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.
|
## aligned, 0.5 for centered, and 1.0 for right-aligned.
|
||||||
define gui.name_xalign = 0.5
|
define gui.name_xalign = 0.5
|
||||||
@ -447,14 +446,14 @@ init python:
|
|||||||
|
|
||||||
## Font sizes.
|
## Font sizes.
|
||||||
gui.text_size = 44
|
gui.text_size = 44
|
||||||
gui.name_text_size = 48
|
gui.name_text_size = 46
|
||||||
gui.notify_text_size = 38
|
gui.notify_text_size = 38
|
||||||
gui.interface_text_size = 45
|
gui.interface_text_size = 45
|
||||||
gui.button_text_size = 45
|
gui.button_text_size = 45
|
||||||
gui.label_text_size = 51
|
gui.label_text_size = 51
|
||||||
|
|
||||||
## Namebox
|
## Namebox
|
||||||
gui.name_xpos = 345
|
gui.name_xpos = 395
|
||||||
gui.name_ypos = -85
|
gui.name_ypos = -85
|
||||||
|
|
||||||
## Adjust the location of the textbox.
|
## Adjust the location of the textbox.
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 28 KiB |
54
game/mods/README.md
Normal file
54
game/mods/README.md
Normal 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.
|
||||||
|
|
36
game/mods_example/template/chapter2_redo.rpy
Normal file
36
game/mods_example/template/chapter2_redo.rpy
Normal 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
|
BIN
game/mods_example/template/img/sample.png
Normal file
BIN
game/mods_example/template/img/sample.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 468 B |
15
game/mods_example/template/storyline_ex.rpy
Normal file
15
game/mods_example/template/storyline_ex.rpy
Normal 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
|
@ -23,7 +23,7 @@ define gui.show_name = True
|
|||||||
|
|
||||||
## The version of the game.
|
## 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
|
## Text that is placed on the game's about screen. Place the text between the
|
||||||
## triple-quotes, and leave a blank line between paragraphs.
|
## 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_sound = True
|
||||||
define config.has_music = 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,
|
## 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('**/#**', None)
|
||||||
build.classify('**/thumbs.db', 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'.
|
## To archive files, classify them as 'archive'.
|
||||||
|
|
||||||
# build.classify('game/**.png', 'archive')
|
# build.classify('game/**.png', 'archive')
|
||||||
|
222
game/screens.rpy
222
game/screens.rpy
@ -1,23 +1,44 @@
|
|||||||
###Updater Python stuff###
|
###Updater Python stuff###
|
||||||
init python:
|
init python:
|
||||||
if persistent.updateresult is None:
|
if renpy.variant("pc"): #Don't run this on mobile, not supported
|
||||||
persistent.updateresult = "No new version is available"
|
if persistent.updateresult is None:
|
||||||
if persistent.autoup is None:
|
persistent.updateresult = "No new version is available"
|
||||||
persistent.autoup = False
|
if persistent.autoup is None:
|
||||||
if persistent.updateWebServer is None:
|
persistent.autoup = False
|
||||||
persistent.updateWebServer = "http://updates.snootgame.xyz/updates.json"
|
if persistent.updateWebServer is None:
|
||||||
|
persistent.updateWebServer = "http://updates.snootgame.xyz/updates.json"
|
||||||
|
|
||||||
def UpdateCheck():
|
def UpdateCheck():
|
||||||
# WHY YES I ONLY ALLOW PEOPLE USING MY FRAMEWORK TO CHECK FOR AN UPDATE EVERY SIX FUCKING HOURS HOW DID YOU KNOW
|
# 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
|
# NOPE check_interval=5 (5 SECONDS) FUCK YOU
|
||||||
pendingVersion = updater.UpdateVersion(persistent.updateWebServer, check_interval=5)
|
pendingVersion = updater.UpdateVersion(persistent.updateWebServer, check_interval=5)
|
||||||
if pendingVersion == None or pendingVersion == config.version or "TEST" in pendingVersion:
|
if pendingVersion == None or pendingVersion == config.version or "TEST" in pendingVersion:
|
||||||
persistent.updateresult = "No new version is available"
|
persistent.updateresult = "No new version is available"
|
||||||
else:
|
else:
|
||||||
persistent.updateresult = pendingVersion
|
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
|
## Initialization
|
||||||
@ -47,6 +68,7 @@ style gui_text:
|
|||||||
|
|
||||||
style button:
|
style button:
|
||||||
properties gui.button_properties("button")
|
properties gui.button_properties("button")
|
||||||
|
# activate_sound "audio/ui/uiClick.wav"
|
||||||
|
|
||||||
style button_text is gui_text:
|
style button_text is gui_text:
|
||||||
properties gui.text_properties("button")
|
properties gui.text_properties("button")
|
||||||
@ -122,7 +144,7 @@ screen say(who, what):
|
|||||||
id "window"
|
id "window"
|
||||||
|
|
||||||
if who is not None:
|
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:
|
window:
|
||||||
id "namebox"
|
id "namebox"
|
||||||
style "namebox"
|
style "namebox"
|
||||||
@ -132,7 +154,6 @@ screen say(who, what):
|
|||||||
|
|
||||||
text what id "what"
|
text what id "what"
|
||||||
|
|
||||||
|
|
||||||
## If there's a side image, display it above the text. Do not display on the
|
## If there's a side image, display it above the text. Do not display on the
|
||||||
## phone variant - there's no room.
|
## phone variant - there's no room.
|
||||||
if not renpy.variant("small"):
|
if not renpy.variant("small"):
|
||||||
@ -166,9 +187,6 @@ style namebox:
|
|||||||
xpos gui.name_xpos
|
xpos gui.name_xpos
|
||||||
ypos gui.name_ypos
|
ypos gui.name_ypos
|
||||||
|
|
||||||
style namebox_large is namebox:
|
|
||||||
xpos gui.name_large_xpos
|
|
||||||
|
|
||||||
style say_label:
|
style say_label:
|
||||||
properties gui.text_properties("name", accent=True)
|
properties gui.text_properties("name", accent=True)
|
||||||
xalign gui.name_xalign
|
xalign gui.name_xalign
|
||||||
@ -253,6 +271,7 @@ style choice_vbox:
|
|||||||
|
|
||||||
style choice_button is default:
|
style choice_button is default:
|
||||||
properties gui.button_properties("choice_button")
|
properties gui.button_properties("choice_button")
|
||||||
|
activate_sound "audio/ui/uiRollover.wav"
|
||||||
|
|
||||||
style choice_button_text is default:
|
style choice_button_text is default:
|
||||||
properties gui.button_text_properties("choice_button")
|
properties gui.button_text_properties("choice_button")
|
||||||
@ -268,6 +287,10 @@ screen quick_button(filename, label, function):
|
|||||||
xmaximum 80
|
xmaximum 80
|
||||||
ymaximum 72
|
ymaximum 72
|
||||||
action function
|
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:
|
fixed:
|
||||||
add filename xalign 0.5 yalign 0.5 zoom 1
|
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"
|
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.
|
## Ensure this appears on top of other screens.
|
||||||
zorder 100
|
zorder 100
|
||||||
if quick_menu:
|
if quick_menu:
|
||||||
window:
|
window:
|
||||||
background "gui/namebox.png"
|
xpos 1.45
|
||||||
xpos 1.45
|
ypos 0.977
|
||||||
ypos 0.977
|
vbox:
|
||||||
grid 1 4:
|
style_prefix "quick"
|
||||||
style_prefix "quick"
|
xalign -0.005
|
||||||
xalign -0.005
|
yalign 0.010
|
||||||
yalign 0.010
|
|
||||||
|
|
||||||
use quick_buttons("gui/button/uioptionbuttons/template_idle.png", \
|
use quick_buttons("gui/button/uioptionbuttons/template_idle.png",
|
||||||
[ \
|
[
|
||||||
[ "Skip", Skip() ], \
|
[ "Skip", Skip() ],
|
||||||
[ "Save", ShowMenu('save') ], \
|
[ "Save", ShowMenu('save') ],
|
||||||
[ "Auto", Preference("auto-forward", "toggle") ], \
|
[ "Auto", Preference("auto-forward", "toggle") ],
|
||||||
[ "Load", ShowMenu('load') ] \
|
[ "Load", ShowMenu('load') ]
|
||||||
] )
|
] )
|
||||||
|
|
||||||
screen score_menu():
|
screen score_menu():
|
||||||
zorder 100
|
zorder 100
|
||||||
@ -354,22 +376,22 @@ screen navigation():
|
|||||||
|
|
||||||
spacing gui.navigation_spacing
|
spacing gui.navigation_spacing
|
||||||
|
|
||||||
textbutton _("History") action ShowMenu("history")
|
textbutton _("History") activate_sound "audio/ui/uiClick.wav" action ShowMenu("history")
|
||||||
textbutton _("Save") action ShowMenu("save")
|
textbutton _("Save") activate_sound "audio/ui/uiClick.wav" action ShowMenu("save")
|
||||||
textbutton _("Load") action ShowMenu("load")
|
textbutton _("Load") activate_sound "audio/ui/uiClick.wav" action ShowMenu("load")
|
||||||
textbutton _("Delete") action ShowMenu("delete")
|
textbutton _("Delete") activate_sound "audio/ui/uiClick.wav" action ShowMenu("delete")
|
||||||
textbutton _("Options") action ShowMenu("preferences")
|
textbutton _("Options") activate_sound "audio/ui/uiClick.wav" action ShowMenu("preferences")
|
||||||
#textbutton _("Extras") action ShowMenu("extras")
|
#textbutton _("Extras") action ShowMenu("extras")
|
||||||
textbutton _("Return") action Return()
|
textbutton _("Return") activate_sound "audio/ui/uiBack.wav" action Return()
|
||||||
|
|
||||||
|
|
||||||
if _in_replay:
|
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:
|
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")
|
#textbutton _("Debug Score Card") action ShowMenu("score_menu")
|
||||||
|
|
||||||
#if renpy.variant("pc"):
|
#if renpy.variant("pc"):
|
||||||
@ -402,8 +424,12 @@ screen main_menu_button(filename, label, function):
|
|||||||
xmaximum 500
|
xmaximum 500
|
||||||
ymaximum 129
|
ymaximum 129
|
||||||
action function
|
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:
|
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
|
text label xalign 0.5 yalign 0.5 xanchor 0.5
|
||||||
|
|
||||||
# label_functions is [ [ "label", function() ], [ "foobar", foobar() ], .. ]
|
# label_functions is [ [ "label", function() ], [ "foobar", foobar() ], .. ]
|
||||||
@ -436,16 +462,17 @@ screen main_menu():
|
|||||||
else:
|
else:
|
||||||
add "gui/snootgame.png"
|
add "gui/snootgame.png"
|
||||||
vbox:
|
vbox:
|
||||||
spacing 25
|
spacing 10
|
||||||
xpos 1885
|
xpos 1885
|
||||||
yalign 0.9
|
ypos 1130
|
||||||
use main_menu_buttons("gui/button/menubuttons/template_idle.png",
|
use main_menu_buttons("gui/button/menubuttons/template_idle.png",
|
||||||
[ \
|
[
|
||||||
[ "Start", Start() ], \
|
[ "Start", Start() ],
|
||||||
[ "Load", ShowMenu("load") ], \
|
[ "Mods", ShowMenu("mod_menu") ],
|
||||||
[ "Options", ShowMenu("preferences") ], \
|
[ "Load", ShowMenu("load") ],
|
||||||
|
[ "Options", ShowMenu("preferences") ],
|
||||||
[ "Extras", ShowMenu("extras") ], \
|
[ "Extras", ShowMenu("extras") ], \
|
||||||
[ "Quit", Quit(confirm=not main_menu) ] \
|
[ "Quit", Quit(confirm=not main_menu) ]
|
||||||
] )
|
] )
|
||||||
on "show" action renpy.start_predict_screen("cg_gallery")
|
on "show" action renpy.start_predict_screen("cg_gallery")
|
||||||
|
|
||||||
@ -680,10 +707,12 @@ screen updates():
|
|||||||
|
|
||||||
label _("Update Checker:")
|
label _("Update Checker:")
|
||||||
label _("{color=#FFFFFF}{size=32}[persistent.updateresult!t]{/size}{/color}")
|
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 _("Updater:")
|
||||||
label _("{color=#FFFFFF}{size=32}Server URL (click to edit):{/size}{/color}")
|
label _("{color=#FFFFFF}{size=32}Server URL (click to edit):{/size}{/color}")
|
||||||
|
|
||||||
default input_on = False
|
default input_on = False
|
||||||
button:
|
button:
|
||||||
key_events True
|
key_events True
|
||||||
@ -698,10 +727,9 @@ screen updates():
|
|||||||
action ToggleScreenVariable('input_on')
|
action ToggleScreenVariable('input_on')
|
||||||
style_prefix "quick"
|
style_prefix "quick"
|
||||||
if persistent.updateresult != "No new version is available":
|
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:
|
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
|
use extrasnavigation
|
||||||
|
|
||||||
## Load and Save screens #######################################################
|
## Load and Save screens #######################################################
|
||||||
@ -796,19 +824,19 @@ screen file_slots(title, flag=False):
|
|||||||
|
|
||||||
spacing gui.page_spacing
|
spacing gui.page_spacing
|
||||||
|
|
||||||
textbutton _("<") action FilePagePrevious()
|
textbutton _("<") activate_sound "audio/ui/uiRollover.wav" action FilePagePrevious()
|
||||||
|
|
||||||
if config.has_autosave:
|
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:
|
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.
|
## range(1, 10) gives the numbers from 1 to 9.
|
||||||
for page in range(1, 10):
|
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
|
style page_label is gui_label
|
||||||
@ -866,32 +894,31 @@ screen preferences():
|
|||||||
vbox:
|
vbox:
|
||||||
style_prefix "radio"
|
style_prefix "radio"
|
||||||
label _("Display")
|
label _("Display")
|
||||||
textbutton _("Window") action Preference("display", "any window")
|
textbutton _("Window") activate_sound "audio/ui/uiOptionOn.wav" action Preference("display", "any window")
|
||||||
textbutton _("Fullscreen") action Preference("display", "fullscreen")
|
textbutton _("Fullscreen") activate_sound "audio/ui/uiOptionOn.wav" action Preference("display", "fullscreen")
|
||||||
|
|
||||||
vbox:
|
vbox:
|
||||||
style_prefix "radio"
|
style_prefix "radio"
|
||||||
label _("Rollback Side")
|
label _("Rollback Side")
|
||||||
textbutton _("Disable") action Preference("rollback side", "disable")
|
textbutton _("Disable") activate_sound "audio/ui/uiOptionOn.wav" action Preference("rollback side", "disable")
|
||||||
textbutton _("Left") action Preference("rollback side", "left")
|
textbutton _("Left") activate_sound "audio/ui/uiOptionOn.wav" action Preference("rollback side", "left")
|
||||||
textbutton _("Right") action Preference("rollback side", "right")
|
textbutton _("Right") activate_sound "audio/ui/uiOptionOn.wav" action Preference("rollback side", "right")
|
||||||
vbox:
|
vbox:
|
||||||
style_prefix "check"
|
style_prefix "check"
|
||||||
label _("Naughty Stuff")
|
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:
|
vbox:
|
||||||
style_prefix "check"
|
style_prefix "check"
|
||||||
label _("Requires Restart")
|
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:
|
vbox:
|
||||||
style_prefix "check"
|
style_prefix "check"
|
||||||
label _("Skip")
|
label _("Skip")
|
||||||
textbutton _("Unseen Text") action Preference("skip", "toggle")
|
textbutton _("Unseen Text") action [Function(onclick_audio, preferences.skip_unseen), ToggleVariable("preferences.skip_unseen", True, False)]
|
||||||
textbutton _("After Choices") action Preference("after choices", "toggle")
|
textbutton _("After Choices") action [Function(onclick_audio, preferences.skip_after_choices), ToggleVariable("preferences.skip_after_choices", True, False)]
|
||||||
textbutton _("Transitions") action InvertSelected(Preference("transitions", "toggle"))
|
textbutton _("Transitions") action [Function(onclick_audio, preferences.transitions), ToggleVariable("preferences.transitions", 0, 2)]
|
||||||
|
|
||||||
## Additional vboxes of type "radio_pref" or "check_pref" can be
|
## Additional vboxes of type "radio_pref" or "check_pref" can be
|
||||||
## added here, to add additional creator-defined preferences.
|
## added here, to add additional creator-defined preferences.
|
||||||
@ -920,6 +947,12 @@ screen preferences():
|
|||||||
hbox:
|
hbox:
|
||||||
bar value Preference("music volume")
|
bar value Preference("music volume")
|
||||||
|
|
||||||
|
if config.has_music:
|
||||||
|
label _("UI Sounds Volume")
|
||||||
|
|
||||||
|
hbox:
|
||||||
|
bar value Preference("ui volume")
|
||||||
|
|
||||||
if config.has_sound:
|
if config.has_sound:
|
||||||
|
|
||||||
label _("Sound Volume")
|
label _("Sound Volume")
|
||||||
@ -940,7 +973,7 @@ screen preferences():
|
|||||||
if config.sample_voice:
|
if config.sample_voice:
|
||||||
textbutton _("Test") action Play("voice", 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
|
null height gui.pref_spacing
|
||||||
|
|
||||||
textbutton _("Mute All"):
|
textbutton _("Mute All"):
|
||||||
@ -1144,10 +1177,10 @@ screen extrasnavigation():
|
|||||||
use main_menu_buttons("gui/button/menubuttons/template_idle.png",
|
use main_menu_buttons("gui/button/menubuttons/template_idle.png",
|
||||||
[
|
[
|
||||||
[ "Help", ShowMenu("help") ],
|
[ "Help", ShowMenu("help") ],
|
||||||
[ "About", ShowMenu("about") ],
|
[ "About", ShowMenu("about") ],
|
||||||
[ "Updates", ShowMenu("updates") ],
|
[ "Updates", ShowMenu("updates") ],
|
||||||
[ "Gallery", ShowMenu("cg_gallery_0") ],
|
[ "Gallery", ShowMenu("cg_gallery_0") ],
|
||||||
[ "Return", ShowMenu("main_menu") ]
|
[ "Return", ShowMenu("main_menu") ]
|
||||||
] )
|
] )
|
||||||
|
|
||||||
## Help screen #################################################################
|
## Help screen #################################################################
|
||||||
@ -1218,7 +1251,7 @@ screen keyboard_help():
|
|||||||
|
|
||||||
hbox:
|
hbox:
|
||||||
label _("Escape")
|
label _("Escape")
|
||||||
text _("Accesses the game menu.")
|
text _("Accesses the game menu. Also escapes the Gallery.")
|
||||||
|
|
||||||
hbox:
|
hbox:
|
||||||
label _("Ctrl")
|
label _("Ctrl")
|
||||||
@ -1261,7 +1294,7 @@ screen mouse_help():
|
|||||||
|
|
||||||
hbox:
|
hbox:
|
||||||
label _("Right Click")
|
label _("Right Click")
|
||||||
text _("Accesses the game menu.")
|
text _("Accesses the game menu. Also escapes the Gallery.")
|
||||||
|
|
||||||
hbox:
|
hbox:
|
||||||
label _("Mouse Wheel Up\nClick Rollback Side")
|
label _("Mouse Wheel Up\nClick Rollback Side")
|
||||||
@ -1362,8 +1395,8 @@ screen confirm(message, yes_action, no_action):
|
|||||||
xalign 0.5
|
xalign 0.5
|
||||||
spacing 150
|
spacing 150
|
||||||
|
|
||||||
textbutton _("Yes") action yes_action
|
textbutton _("Yes") activate_sound "audio/ui/uiClick.wav" action yes_action
|
||||||
textbutton _("No") action no_action
|
textbutton _("No") activate_sound "audio/ui/uiBack.wav" action no_action
|
||||||
|
|
||||||
## Right-click and escape answer "no".
|
## Right-click and escape answer "no".
|
||||||
key "game_menu" action no_action
|
key "game_menu" action no_action
|
||||||
@ -1621,8 +1654,8 @@ style pref_vbox:
|
|||||||
screen quick_button(filename, label, function):
|
screen quick_button(filename, label, function):
|
||||||
variant "small"
|
variant "small"
|
||||||
button:
|
button:
|
||||||
xmaximum 180
|
xmaximum 124
|
||||||
ymaximum 100
|
ymaximum 124
|
||||||
action function
|
action function
|
||||||
fixed:
|
fixed:
|
||||||
add filename xalign 0.5 yalign 0.5 zoom 1.75
|
add filename xalign 0.5 yalign 0.5 zoom 1.75
|
||||||
@ -1633,6 +1666,7 @@ screen quick_menu():
|
|||||||
zorder 100
|
zorder 100
|
||||||
if quick_menu:
|
if quick_menu:
|
||||||
hbox:
|
hbox:
|
||||||
|
spacing 28
|
||||||
style_prefix "quick"
|
style_prefix "quick"
|
||||||
xalign 0.5
|
xalign 0.5
|
||||||
yalign 0.975
|
yalign 0.975
|
||||||
@ -1644,6 +1678,28 @@ screen quick_menu():
|
|||||||
[ "Menu", ShowMenu() ] \
|
[ "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:
|
style radio_button:
|
||||||
variant "small"
|
variant "small"
|
||||||
foreground "gui/phone/button/radio_[prefix_]foreground.png"
|
foreground "gui/phone/button/radio_[prefix_]foreground.png"
|
||||||
|
@ -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?
|
#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.
|
#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:
|
init python:
|
||||||
import random
|
import random
|
||||||
import webbrowser
|
import webbrowser
|
||||||
#function for insult layers
|
#function for insult layers
|
||||||
def showCG():
|
def showCG():
|
||||||
files = ["text0", "text1", "text2", "text3", "text4", "text5", "text6", "text7", "text8", "text9"]
|
files = ["text1", "text2", "text3", "text4", "text5", "text6", "text7", "text8", "text9"]
|
||||||
length = len(files)
|
length = len(files)
|
||||||
picked = random.randint(0,length - 1)
|
picked = random.randint(0,length - 1)
|
||||||
fileName = files[picked]
|
fileName = files[picked]
|
||||||
renpy.show(fileName, at_list=[randPosition])
|
renpy.show(fileName, at_list=[randPosition])
|
||||||
if persistent.scroll == True:
|
if persistent.scroll == True:
|
||||||
config.keymap['dismiss'].append('mousedown_4')
|
config.keymap['dismiss'].append('mousedown_4')
|
||||||
|
|
||||||
|
|
||||||
transform randPosition:
|
transform randPosition:
|
||||||
alpha 0.0
|
alpha 0.0
|
||||||
xalign random.uniform(0.2,0.8)
|
xalign random.uniform(0.2,0.8)
|
||||||
@ -80,38 +87,35 @@ transform randPosition:
|
|||||||
# attribute guitar:
|
# attribute guitar:
|
||||||
# "guitar.webp"
|
# "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
|
#Characters
|
||||||
define A = Character ('Anon',color="#36E12D", who_outlines=[(1, '#0C300A')]) # Light Green
|
define A = Character ('Anon',color="#36E12D", who_outlines=[(gui.name_text_thickness, '#0C300A')]) # Light Green
|
||||||
define F = Character ('Fang',color="#B4D4CE", who_outlines=[(1, '#112D27')]) # Light Cyan
|
define F = Character ('Fang',color="#B4D4CE", who_outlines=[(gui.name_text_thickness, '#0F3930')]) # Light Cyan
|
||||||
define Lucy = Character ('Lucy',color="#B4D4CE", who_outlines=[(1, '#112D27')]) # 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=[(1, '#3D1809')]) # Red-Orange
|
define Ro = Character ('Rosa',color="#FE712B", who_outlines=[(gui.name_text_thickness, '#54230F')]) # Red-Orange
|
||||||
define St = Character ('Stella',color="#D2FFAA", who_outlines=[(1, '#203011')]) # Light Green
|
define St = Character ('Stella',color="#D5FFAE", who_outlines=[(gui.name_text_thickness, '#294211')]) # Light Green
|
||||||
define N = Character ('Naomi',color="#F8B9A0", who_outlines=[(1, '#291A1B')]) # Peach
|
define N = Character ('Naomi',color="#FDD2C1", who_outlines=[(gui.name_text_thickness, '#462628')]) # Peach
|
||||||
define Nas = Character ('Naser',color="#F89E38", who_outlines=[(1, '#2D2D2D')]) # Orange
|
define Nas = Character ('Naser',color="#FFB561", who_outlines=[(gui.name_text_thickness, '#512322')]) # Orange
|
||||||
define T = Character ('Trish',color="#B675E6", who_outlines=[(1, '#1F0632')]) # Purple
|
define T = Character ('Trish',color="#B675E6", who_outlines=[(gui.name_text_thickness, '#3A0C5D')]) # Purple
|
||||||
define Attendant = Character ('Attendant',color="#8A0036", who_outlines=[(1, '#FFFFFF')]) # Maroon
|
define Attendant = Character ('Attendant',color="#5BF0F8", who_outlines=[(gui.name_text_thickness, '#121C68')]) # Aqua
|
||||||
define Sp = Character ('Spears',color="#C4C3C3", who_outlines=[(1, '#272727')]) # Light Grey
|
define Sp = Character ('Spears',color="#C7C7C7", who_outlines=[(gui.name_text_thickness, '#272727')]) # Light Grey
|
||||||
define Re = Character ('Reed',color="#ED4C5B", who_outlines=[(1, '#361013')]) # Bright Red
|
define Re = Character ('Reed',color="#ED4C5B", who_outlines=[(gui.name_text_thickness, '#421014')]) # Bright Red
|
||||||
define D = Character ('Driver',color="#FFC63A", who_outlines=[(1, '#4D280A')]) # Yellow-Orange
|
define D = Character ('Driver',color="#FFECBC", who_outlines=[(gui.name_text_thickness, '#563010')]) # Yellow-Orange
|
||||||
define FM = Character ('Fangs Mom',color="#FFD8F6", who_outlines=[(1, '#361730')]) # Bright Pink
|
define FM = Character ("Fang's Mom",color="#FFD8F6", who_outlines=[(gui.name_text_thickness, '#521947')]) # Bright Pink
|
||||||
define FD = Character ('Fangs Dad',color="#D8A09A", who_outlines=[(1, '#190E0F')]) # Desaturated Orange
|
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=[(1, '#320E3B')]) # Pear Green
|
define Tsuki = Character ('Mr. Tsuki',color="#A7F2A2", who_outlines=[(gui.name_text_thickness, '#471054')]) # Pear Green
|
||||||
define unknown = Character ('(???)',color="#000000", who_outlines=[(1, '#FFFFFF')]) # Black
|
define unknown = Character ('(???)',color="#FFF", who_outlines=[(gui.name_text_thickness, '#000')]) # White
|
||||||
define jingo = Character ('Mr. Jingo',color="#CD8283", who_outlines=[(1, '#0F0D49')]) # Desaturated Red
|
define jingo = Character ('Mr. Jingo',color="#CD8283", who_outlines=[(gui.name_text_thickness, '#0F0D49')]) # Desaturated Red
|
||||||
define MaitD = Character ('Maitre D',color="#241630", who_outlines=[(1, '#241630')]) # Cobalt Blue
|
define MaitD = Character ('Maitre D',color="#AF9EFF", who_outlines=[(gui.name_text_thickness, '#241630')]) # Cobalt Blue
|
||||||
define Moe = Character('Moe',color="#A5BEED", who_outlines=[(1, '#342210')]) # Desaturated Blue
|
define Moe = Character('Moe',color="#A5BEED", who_outlines=[(gui.name_text_thickness, '#1F253B')]) # Desaturated Blue
|
||||||
define Vince = Character ('Vince',color="#FFC63A", who_outlines=[(1, '#4D280A')]) # Yellow-Orange
|
define Vince = Character ('Vince',color="#FFECBC", who_outlines=[(gui.name_text_thickness, '#563010')]) # Yellow-Orange
|
||||||
define Waitress = Character ('Waitress',color="#F691C8", who_outlines=[(1, '#402E3A')]) # Pink
|
define Waitress = Character ('Waitress',color="#F691C8", who_outlines=[(gui.name_text_thickness, '#512040')]) # Pink
|
||||||
#long TB chars
|
#long TB chars
|
||||||
define AnonAndFang = Character('Anon and Fang',color="72DFA8", who_outlines=[(1, '#113623')], **long_textbox) # Cyan
|
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=[(1, '#361504')], **long_textbox) # Yellow
|
define SV = Character ('Street Vendor',color="#F8E120", who_outlines=[(gui.name_text_thickness, '#58260C')]) # Yellow
|
||||||
define carl = Character ('Mr. Carldewskii',color="#E19E40", who_outlines=[(1, '#03223B')], **long_textbox) # Puke Orange
|
define carl = Character ('Mr. Carldewskii',color="#EECB99", who_outlines=[(gui.name_text_thickness, '#082337')]) #Puke Orange
|
||||||
define Drf = Character ('Dr. Fernsworth',color="#253354", who_outlines=[(1, '#334573')], **long_textbox) # Royal Blue
|
define Drf = Character ('Dr. Fernsworth',color="#DCEEF5", who_outlines=[(gui.name_text_thickness, '#253354')]) #Yellow-Orange
|
||||||
define FRT = Character ('Fang Reed & Trish',color="#4963A5", who_outlines=[(1, '#FFFFFF')], **long_textbox) # Cold Blue
|
define FRT = Character ('Fang Reed & Trish',color="#DCBBF7", who_outlines=[(gui.name_text_thickness, '#191C78')]) #Light Purple
|
||||||
|
|
||||||
#Extra image translations
|
#Extra image translations
|
||||||
#siloettes
|
#siloettes
|
||||||
@ -301,7 +305,7 @@ label splashscreen:
|
|||||||
UpdateCheck()
|
UpdateCheck()
|
||||||
if persistent.updateresult != "No new version is available":
|
if persistent.updateresult != "No new version is available":
|
||||||
updater.update(persistent.updateWebServer, force=True)
|
updater.update(persistent.updateWebServer, force=True)
|
||||||
|
|
||||||
stop sound
|
stop sound
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -520,7 +520,7 @@ label chapter_14D:
|
|||||||
show fang d happy with dissolve
|
show fang d happy with dissolve
|
||||||
"We chuckle together."
|
"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…"
|
A "Hey, Lucy…"
|
||||||
|
|
||||||
"I keep my eyes on the stars, even when Lucy turns to look at me."
|
"I keep my eyes on the stars, even when Lucy turns to look at 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
|
textbutton _(cp['name']) text_color gui.selected_color text_xalign 0.5
|
||||||
else:
|
else:
|
||||||
if cp['eval'] is None:
|
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']):
|
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:
|
else:
|
||||||
textbutton _(cp['name']) text_xalign 0.5
|
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:
|
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:
|
elif not main_menu:
|
||||||
textbutton _("Main Menu") action MainMenu()
|
textbutton _("Main Menu") activate_sound "audio/ui/uiBack.wav" action MainMenu()
|
||||||
|
|
||||||
transform:
|
transform:
|
||||||
zoom 0.95
|
zoom 0.95
|
||||||
@ -248,6 +248,7 @@ screen view_image(item, _origin, zoom = zoom_arr.index(1.0), flag='a'):
|
|||||||
|
|
||||||
tag menu
|
tag menu
|
||||||
key "game_menu" action _origin
|
key "game_menu" action _origin
|
||||||
|
key "button_alternate" action _origin
|
||||||
|
|
||||||
# mousewheel & insert+delete
|
# mousewheel & insert+delete
|
||||||
if (ALLOW_ZOOM):
|
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
|
#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
|
#double finger pinch zoom, it translates taps as mouse events - have to use
|
||||||
#buttons
|
#buttons
|
||||||
if (ALLOW_ZOOM) and renpy.variant("small"):
|
hbox:
|
||||||
hbox:
|
style_prefix "quick"
|
||||||
style_prefix "quick"
|
xalign 0.5
|
||||||
xalign 0.5
|
yalign 0.975
|
||||||
yalign 0.975
|
if (ALLOW_ZOOM) and renpy.variant("small"):
|
||||||
use quick_buttons("gui/button/uioptionbuttons/template_idle.png",
|
use quick_buttons("gui/button/uioptionbuttons/template_idle.png",
|
||||||
[
|
[
|
||||||
[ "+", zoom_a_f ],
|
[ "+", 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
73
game/src/mod_menu.rpy
Normal 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)
|
@ -58,4 +58,4 @@ label ending:
|
|||||||
if tradwife:
|
if tradwife:
|
||||||
scene c10 with fade
|
scene c10 with fade
|
||||||
pause 20
|
pause 20
|
||||||
return
|
return
|
||||||
|
Reference in New Issue
Block a user