Compare commits

..
1 Commits
Author SHA1 Message Date
MichaelYick df0ce3f141 import russian anon's work 2023-12-29 20:48:01 -06:00
463 changed files with 2664 additions and 370822 deletions
-21
View File
@@ -1,21 +0,0 @@
name: Choreography Problem
about: A template for discussing choreography problems
title: "[Chapter XX]: "
labels:
- bug
- "help wanted"
body:
- type: input
id: where
attributes:
label: On what line did this bug occour?
placeholder: "I \"This shit fucks and sucks!\""
validations:
required: true
- type: textarea
id: what
attributes:
label: "What happened?"
placeholder: "The expression \"Inco Sad\" was used at a time when it shouldn't have been used."
validations:
required: true
-58
View File
@@ -1,58 +0,0 @@
name: CI Build
on:
push:
tags:
- '*'
env:
RenpyVersion: "8.3.7"
RenkitVersion: "6.0.0"
JAVA_HOME: "/usr/lib/jvm/java-21-openjdk-amd64"
jobs:
build-and-archive:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
repository: ${{ gitea.repository }}
fetch-depth: 1
- name: Install Dependencies
run: |
sudo apt update
sudo apt install git libgl1 openjdk-21-jdk golang-go -y
JAVA_HOME="/usr/lib/jvm/open-jdk"
- name: Update Internal Build Name
run: |
sed -i -e "s/INTERNAL-BUILD/${{ gitea.ref_name }}/g" game/options.rpy
sed -i -e "s/INTERNAL-BUILD/${{ gitea.ref_name }}/g" android.json
- name: Build With Renkit
run: |
mkdir dist
sed -i -e "s/VERSION/${{ env.RenpyVersion }}/g" renconstruct-gitea.toml # This is so we can control the renpy version just from this script
wget -q "https://github.com/kobaltcore/renkit/releases/download/v${{ env.RenkitVersion }}/renkit-x86_64-unknown-linux-gnu.tar.xz" -O renkit.tar.xz
tar -xJf renkit.tar.xz -C /tmp/
rm renkit.tar.xz
/tmp/renkit-x86_64-unknown-linux-gnu/renconstruct build -c "./renconstruct-gitea.toml" "." dist/
mkdir "dist/android"
mv dist/*.apk "dist/android"
- name: Upload Release
uses: https://gitea.com/actions/release-action@main
with:
files: dist/*
api_key: '${{ secrets.RELEASE_SMITH_TOKEN }}'
#
# - name: Nextcloud Artifact
# uses: trympet/nextcloud-artifacts-action@v2
# with:
# name: 'Wani' # Name of the artifact
# path: 'dist/**' # Globbing supported
# nextcloud-url: 'https://cloud.dev.cavemanon.xyz/remote.php/dav/files/ReleaseSmith/Wani/Internal%20Builds/SOMETHING/' # Nextcloud URL
# nextcloud-username: "ReleaseSmith"
# nextcloud-password: ${{ secrets.RELEASE_SMITH_NEXTCLOUD_PASSWORD }}
+2 -10
View File
@@ -15,12 +15,10 @@ ehthumbs_vista.db
/traceback.txt
/errors.txt
/log.txt
/files.txt
project.json
log.txt
errors.txt
traceback.txt
files.txt
#Vim (best text editor) swap files
.sw?
@@ -56,10 +54,4 @@ env
*.bak
#android
.android.json
#linux
*.sh
# Exclude mod folders, but not files in the root mod directory
/game/mods/*/
.android.json
+1 -1
View File
@@ -1,5 +1,5 @@
# Snoot Game
<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 can go to the master branch now, unless the contributer requests/is specified otherwise.</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>
-24
View File
@@ -1,24 +0,0 @@
{
"expansion": false,
"google_play_key": null,
"google_play_salt": null,
"heap_size": "3",
"icon_name": "Snoot Game",
"include_pil": false,
"include_sqlite": false,
"layout": null,
"name": "Snoot Game",
"numeric_version": 1,
"orientation": "sensorLandscape",
"package": "cavemanon.snootgame",
"permissions": [
"VIBRATE",
"INTERNET"
],
"source": false,
"store": "none",
"update_always": true,
"update_icons": true,
"update_keystores": true,
"version": "INTERNAL-BUILD"
}
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+9 -15
View File
@@ -11,8 +11,7 @@ init offset = -2
init python:
gui.init(1920, 1080)
## Enable checks for invalid or unstable properties in screens or transforms
#define config.check_conflicting_properties = True
################################################################################
## GUI Configuration Variables
@@ -73,9 +72,6 @@ define gui.name_text_font = "gui/FallingSky.otf"
## The font used for out-of-game text.
define gui.interface_text_font = "gui/FallingSky.otf"
## This is so when switching from Thai, the system font gets reset
define gui.system_font = "DejaVuSans.ttf"
## The size of normal dialogue text.
define gui.text_size = 42
#define gui.text_outlines = [ (absolute(0.5), gui.text_color_outline, 0, 0) ]
@@ -108,6 +104,7 @@ define gui.main_menu_text_size = 60
## The images used for the main and game menus.
define gui.main_menu_background = "gui/main_menu.png"
define gui.game_menu_background = "gui/game_menu.png"
define gui.extras_submenu_background = "gui/overlay/extras_submenu.png"
define gui.extras_submenu_panel = "gui/overlay/extras_submenu_panel.png"
## Dialogue ####################################################################
@@ -363,9 +360,7 @@ define config.history_length = 250
## The height of a history screen entry, or None to make the height variable at
## the cost of performance.
define gui.history_height = None
define gui.history_spacing = 50
define gui.history_height = 210
## The position, width, and alignment of the label giving the name of the
## speaking character.
@@ -375,9 +370,9 @@ define gui.history_name_width = 233
define gui.history_name_xalign = 1.0
## The position, width, and alignment of the dialogue text.
define gui.history_text_xpos = 248
define gui.history_text_xpos = 255
define gui.history_text_ypos = 3
define gui.history_text_width = 1112
define gui.history_text_width = 1110
define gui.history_text_xalign = 0.0
@@ -424,7 +419,6 @@ define gui.nvl_thought_xalign = 0.0
define gui.nvl_button_xpos = 675
define gui.nvl_button_xalign = 0.0
## Localization ################################################################
## This controls where a line break is permitted. The default is suitable
@@ -454,9 +448,9 @@ init python:
gui.text_size = 44
gui.name_text_size = 46
gui.notify_text_size = 38
gui.interface_text_size = 40
gui.interface_text_size = 45
gui.button_text_size = 45
gui.label_text_size = 45
gui.label_text_size = 51
## Namebox
gui.name_xpos = 395
@@ -476,8 +470,8 @@ init python:
gui.navigation_spacing = 30
gui.pref_button_spacing = 15
gui.history_spacing = 75
gui.history_text_width = 1012
gui.history_height = 285
gui.history_text_width = 1035
gui.quick_button_text_size = 30
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 551 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 541 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 298 KiB

After

Width:  |  Height:  |  Size: 307 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

View File
View File
View File
+50 -115
View File
@@ -1,120 +1,55 @@
--- MOD LOADER USAGE ---
To normal users installing multiple mods: It's recommended to only have one mod folder installed in the mods directory in case two mods have duplicate `green_fang_story` label, otherwise the game will error out if mods conflict each other, this includes not only labels but images & sound too.
If there's problems with installed mods - like if an enabled mod makes the game crash on startup - there's 3 file flags you can apply to work around it, checked only in the root of the mods folder. They will be any file starting with:
- "DISABLEALLMODS". This will force disable all currently installed mods, but will still load all their metadata. This doesn't change the saved states of your mods, so you can still enable/disable them while this flag is active.
- "NOLOADORDER". This will erase the load order/states and always load mods in folder alphabetical order, with mod states depending on the "Enable New Mods" option in the preferences menu.
- "NOMODS". This turns off mod loading entirely by making the game not find any metadata files to load.
These file flags already exist in the mods folder, but renamed to not trigger in-game. Enable them by renaming the file to take off the first hyphen.
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
When ordering the mods in the mod menu, know that not all mod code will be loaded according to the order. Ren'Py has a feature called 'init' that will run code at certain mod-defined stages (priorities) of the engine starting up, so if one mod's init block is set to run at an earlier priority than another mod's, it doesn't matter what order it is in the mod loader, it will always load that init first. The only time when the order comes into effect is if two mod's init blocks run at the same priority, or aren't running in an init block.
--- MOD CREATION PRE-REQUSITES ---
Before modding, you may want to do either of these things:
-Download Snoot Game as a renpy project and launch through the SDK so you can have easy access to debugging and other QoL tools, including dev mode. (Download the repo in this link: https://git.cavemanon.xyz/Cavemanon/SnootGame)
-Open script.rpy and put 'config.developer = True' somewhere in the 'init python' block to have access to renpy's dev mode.
Pick the latter option if you're lazy, since you don't seriously need to use the SDK for most things.
--- MOD CRREATION ---
When creating a mod, make a new folder within the 'mods' directory at the root of the game directory and name it whatever you want. Inside that folder, make a file called 'metadata.json', and follow the JSON file format to implement details about your mod. An example would be:
```
{
"ID": "234234u9SDjjasdhl23",
"Name": "Test Mod",
"Label": "test_mod_label",
"Version": "1.0",
"Authors": [ "Author1", "Author2", "Author3" ],
"Links": "Link1",
"Description": "This contains the description of my mod"
}
```
Make sure there isn't a comma at the end of the last entry in your JSON.
Below is all the possible entries you can put in, and explanations for what they do. Note that you don't need to put all of these in your metadata file, and infact the only hard requirement is the "ID" entry.
"ID" : The ID of your mod. Required to be able to load your mod at all, as it is used by the mod loader for mod orders and enabling/disabling. Make this as unique of a string as you can, like a hash. Smash your keyboard if you must. This is how the game knows to differentiate your mod from others (And can be used by other mods to find if a user has your mod installed, if they so choose).
"Name" : The name of your mod. If this doesn't exist, the game will assume the name of your mod folder.
"Label" : The label to jump to start your mod story. If this doesn't exist, the button this mod will appear as will do nothing when clicked. Useful if you're only modifying something relating to the base game.
"Version" : The version number of your mod.
"Authors" : The authors of your mod. This can be a list of strings or just a string. If it's just a string, it will display in the mod details pane with only "Author:" instead of "Authors:"
"Links" : The links to download your mod and/or advertisement. This can be a list of strings or just a string. If it's just a string, it will display in the mod details pane with only "Link:" instead of "Links:". In order for this to be useful, use the 'a' text tag to make these texts hyperlinks.
"Description" : The description of your mod.
"Mobile Description" : The description of your mod, but only appearing while playing Snoot on Android. If this doesn't exist, it will assume the contents of the description entry. Otherwise, you can copy your description text here and format it however you think it fits for Android.
"Display" : How your mod button appears if there's an icon image detected. This can be set to "name" - which only displays the mod name - "icon" - which only displays the icon, taking up the entire button - or "both" - which displays the name and icon together, with the icon miniaturized and to the side of the name. This defaults to "both" if it doesn't exist, and if an icon image is not present, it will fall back to "name" mode.
"Thumbnail Displayable" : What displayable to use for the thumbnail when the mod is enabled. If this doesn't exist, the game will use the thumbnail image found alongside your metadata file
"Icon Displayable" : What displayable to use for the icon when the mod is enabled. If this doesn't exist, the game will use the icon image found alongside your metadata file
"Screenshot Displayables" : What displayables to use for screenshots when the mod is enabled. This should be a list of strings. The game will choose each displayable in the list over images found alongside the metadata file sequentially, so if there's 5 screenshot images and 3 screenshot displayables, the last 2 will still display the screenshot images, and the first 3 will display the screenshot displayables. If there's more displayables than images, then the mod will appear to gain screenshots in the mod details pane when the mod is enabled. If you enter empty strings in the list ( "" ), the game will interpret that as a deliberate skipping over to load screenshot images instead of displayables, so if your list consists of '[ "", "my_displayable" ]' and there's any number of screenshot images found, the first screenshot will still show a screenshot image, and only the next one will show a displayable. If this entry doesn't exist, it will just use the screenshot images found alongside your metadata file.
In the same directory as your metadata file, there's image files you can put in the to make your mod more appealing. These can be any of Ren'Py's supported image file types, so the file extension here is just for demonstration:
-'thumbnail.png' will appear as a banner for your mod, at the top of the mod details pane
-'icon.png' will show a small image next your mod name or take up the entire button depending on what your "Display" entry is set to. NOTE: Putting in an image too big in dimensions will crash the game.
-'screenshot(number).png' will show screenshots at the bottom of the mod details pane. The '(number)' is a placeholder for a number that represents what order your screenshots appear in. For example, you can have 'screenshot1.png', 'screenshot2.png', and 'screenshot3.png' in your mod directory, and they will all appear in the mod details pane in order. These numbers don't need to be strictly sequential, they can be any number as long as they are integers, and the order will be derived from ASCII ordering.
As the game loads the metadata, it will also collect scripts for loading. When you make your mod scripts, ALL OF THEM NEED TO HAVE .rpym EXTENSIONS. This is important for being able to control mods with the mod loader, otherwise there would be mod conflicts galore. If you use .rpy extensions to make your mod scripts, they will work, but they will not be manageable by the mod loader. This means you should only use them for development, or if you're not using the mod loader anyway - such as adding a translation to the base game.
Additionally, Ren'Py will not load any files from the mods folder automatically, so any and all audio/image/video files need to be manually defined to be usable.
--- TRANSLATION ---
For disambiguation, a "language code" refers to the code Ren'Py uses to refer to languages program-wide, and can be found on the folder names in "game/tl", with "None" being the default language (Representing a fallback language, but usually meaning English. Internally, it's an actual None variable)
For translating mods, you should use the Ren'Py SDK to automatically generate translations from mod scripts. Make sure to use a language code that Snoot supports when you do so, so you don't accidentally create a new language. Put them into an organized directory in your mod and change them to use .rpym extensions so that translations don't activate unless your mod is as well (This prevents potential conflicts from other mods from interface/string translations).
For assets, the easiest way is to put them in the "tl" folder and have the same filepath to your mod asset as it is from the "game" folder to your asset, just like how the officially supported translations are. This will make your mod less portable, but at least there's no namespace or file conflicts for translating images. If you're deadset on making your mod portable, you'll have to make conditionals in your mod to swap out images depending on the language, which means other people translating your mod can't just add a file somewhere and be done with it, they will need to edit your mod scripts as well.
For translating metadata, you can translate the .json file by creating a new .json and naming it "metadata_(language code).json" (Ex: "metadata_es.json" for spanish). Fill out the .json how you would with the normal metadata file, but with your translated strings. The game will automatically pick this up and replace the strings (or add, if there's no 'None' variant of an entry) according to your language. Note that translating the ID or Label will do nothing, so you will always need a metadata.json file with at least an ID entry even if your mod isn't in english.
For the images found alongisde your metadata, you can do the same thing as your .json to replace them. Simply append your language code to your image filename like "thumbnail_es.png", "icon_es.png", etc.. For screenshots, the number in your filename will determine if any given translated image will replace another image, or add it inbetween images. So if you have "screenshot4.png", and you have "screenshot2_es.png" and "screenshot5_es.png", all screenshots will show up if your language is in spanish. If there's "screenshot4_es.png" in the directory, then it will replace "screenshot4.png". The final screenshot display will always take the english screenshots as a base before replacing the images with whatever translated images that exist.
--- TIPS ---
The Ren'Py documentation is your friend, but it is also a bitch-ass friend. It will sometimes be notoriously unhelpful, so consult other renpy dudes from the Ren'Py discord, your snoot communities, or youtube. This may also be of interest, as it will link to other documentation as well as many interesting libraries you can use:
https://github.com/methanoliver/awesome-renpy
Link to Ren'Py documentation:
https://www.renpy.org/doc/html/
When making the file structure for your mod, this is the ideal. Keep it nice and organized, preferably keeping the root of your mods folder clear of eveything but metadata related stuff:
```
In the root of the mods folder:
folder_of_your_mod_name
- metadata.json
- Your various image metadatas
-> asset_folder
- asset.png
-> script_folder
- script.rpym
-> etc. folders...
- etc. files...
```
To start your mod, just make it under the label you defined in your metadata file in a mod script. An example in a newly created "mymodscript.rpym":
```
label my_mod_label:
scene my_background
show my_sprite
"blah blah dialogue"
```
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.
If a user has many mods installed, it would be annoying to need to keep track of which mods to enable or disable because of code conflicts, so make your variables/functions unique. Since Ren'Py's own scripting doesn't support namespaced stuff, a very simple way is to prefix all your variables/functions with a mod-unique name, similar to your mod ID. An example would be "mymodisfantastic2349234_function_or_variable". Kinda ugly, but manageable with Ctrl-F and string replacement if there's problems. If there must be code conflicts, let the user know in your mod description!
--- 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.
+13 -57
View File
@@ -24,7 +24,7 @@ define gui.show_name = True
## The version of the game.
define config.version = "INTERNAL-BUILD"
define config.version = _("Patch8_NewYears")
## Text that is placed on the game's about screen. Place the text between the
## triple-quotes, and leave a blank line between paragraphs.
@@ -48,7 +48,7 @@ define build.name = "SnootGame"
define config.has_sound = True
define config.has_music = True
define config.has_voice = True
define config.has_voice = False
define config.play_channel = "uisounds"
@@ -133,47 +133,9 @@ default preferences.text_cps = 50
default preferences.afm_time = 15
## Disables loading all languages at once at startup, only loading a language when selecting a language
define config.defer_tl_scripts = True
## Retains linear audio fading so mixing doesn't get fucked from the update to 8.2+
define config.linear_fades = True
## The variable used for making the splashscreen not show when reloading a mod
default persistent.reloading_mods = False
## Snoot-specific config variables
define config.developer = "auto"
default persistent.use_epilogue_menu = False
default persistent.enable_debug_scores = config.developer
default persistent.enable_chapter_select = config.developer
default persistent.lewd = False
default persistent.autoup = False
default persistent.show_mod_screenshots = True
default persistent.gallery_edgescroll = True
default persistent.scroll = False
init -1000 python:
if persistent.newmods_default_state == None:
persistent.newmods_default_state = False
init python:
# Makes going forward on the scroll wheel advance dialogue, rather than just seen dialogue
if persistent.scroll == True:
config.keymap['dismiss'].append('mousedown_4')
##Default Audio is not ear rape
define config.default_music_volume = 0.61
define config.default_sfx_volume = 0.8
define config.default_voice_volume = 0.8
define config.default_music_volume = 0.48
define config.default_sfx_volume = 0.80
## Save directory ##############################################################
##
@@ -230,19 +192,10 @@ init python:
build.classify('**/#**', None)
build.classify('**/thumbs.db', None)
# Do not include dev folders on distribution
build.classify('game/dev/', None)
build.classify('README.md', None)
# Do not include mod_examples as part of the build process
build.classify('game/mods_example/**', None)
build.classify('game/mods_example/.**', None)
#Development files need not apply
build.classify('renconstruct*', None)
build.classify('bundle.keystore', None)
build.classify('android.keystore', None)
build.classify('bundle.keystore.original', None)
build.classify('android.keystore.original', None)
build.classify('patch*', None)
build.classify('dist/', None)
build.classify('cache/', None)
## To archive files, classify them as 'archive'.
@@ -256,9 +209,9 @@ init python:
build.documentation('*.txt')
## A Google Play license key is required to perform in-app purchases. It can be
## found in the Google Play developer console, under "Monetize" > "Monetization
## Setup" > "Licensing".
## A Google Play license key is required to download expansion files and perform
## in-app purchases. It can be found on the "Services & APIs" page of the Google
## Play developer console.
# define build.google_play_key = "..."
@@ -267,3 +220,6 @@ init python:
## by a slash.
# define build.itch_project = "renpytom/test-project"
#RenPy updating from snootgame.xyz
define build.include_update = True
Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

+288 -466
View File
File diff suppressed because it is too large Load Diff
+281 -35
View File
@@ -14,63 +14,309 @@
#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 python:
import webbrowser # This is for the ch2 "look the link up" choice
import random
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 = ["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])
# 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)
renpy.music.register_channel("music2","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)
renpy.music.register_channel("ambient3","sfx",True,tight=True)
if persistent.scroll == True:
config.keymap['dismiss'].append('mousedown_4')
elif persistent.scroll == None:
persistent.scroll = False
# Set vars for bonus chapter completion
if persistent.bonus_chapters == None:
if renpy.seen_image("big ending"): #for returning players
persistent.bonus_chapters = 0b111111111
persistent.old_bonus_chapters = 0b111111111
else:
persistent.bonus_chapters = 0b0
persistent.old_bonus_chapters = 0b0
if persistent.lewd == None:
persistent.lewd = False
if persistent.autoup == None:
persistent.autoup = False
# Randomizes the placement of choice boxes when a choice menu appears
def randomize_choices(choices):
# fine for size of 2
if (renpy.random.randint(0, 1)):
choices.reverse()
return choices
# For people upgrading to patch 11 and onwards, a fix to make sure the fang tail movie is unlocked.
if renpy.seen_image("fang tail"):
renpy.mark_image_seen("fang_tail_movie")
pass
# Determine the splash type for the Snoot game logo
persistent.splashtype = random.randint(0,2000 - 1)
transform randPosition:
alpha 0.0
xalign random.uniform(0.2,0.8)
yalign random.uniform(0.2,0.8)
linear 0.6 alpha 1.0
linear 1.0 alpha 0.0
label before_main_menu:
# Force users pre-Patch 11 to use english if they were on 'None'
if preferences.language == None:
$ preferences.language = 'en'
#python:
# def Walking( name ):
# show name:
# xalign 0.2 yalign 0.25
# ease 1.0 yalign 0.0
# ease 1.0 yalign 0.25
# repeat
#layeredimage aquariumexhibit:
#group animals:
# attribute babyTurtle:
# attribute octo:
# attribute
# attribute
# attribute
# attribute
#layeredimage aquarium
#group kids:
# attribute wkids:
# "smolpatrol.webp"
#layeredimage anon:
# group face:
# attribute neutralFace default:
# "anonb1f1.webp"
# attribute happyFace:
# "anonhappyface.webp"
# attribute flipNeutralFace:
# "flipanonb1f1.webp"
# attribute flipHappyFace:
# "flipanonhappyface.webp"
# group body:
# attribute neutralBody default:
# "anonspriteneutral.webp"
# attribute thumbsUp:
# "anonspritethumbsup.webp"
# attribute flipThumbsUp:
# "flipanonspritethumbsup.webp"
# attribute:
# "flipanonspriteneutral.webp"
# attribute monkey:
# "monkeyanon.webp"
# group holding:
# attribute guitar:
# "guitar.webp"
# Click-to-continue icons / animations
# TODO: settle on a position/animation that people like
#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 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 LM = Character (_("Lucy's Mom"), base, color="#FFD8F6", who_outlines=[(gui.name_text_thickness, '#521947')]) # Bright Pink
define LD = Character (_("Lucy'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
define Riley = Character (_('Riley'), base, color="#B675E6", who_outlines=[(gui.name_text_thickness, '#1F0632')]) # TODO
define Tana = Character (_('Tana'), base, color="#B675E6", who_outlines=[(gui.name_text_thickness, '#1F0632')]) # TODO
define Trevor = Character (_('Trevor'), base, color="#B675E6", who_outlines=[(gui.name_text_thickness, '#1F0632')]) # TODO
#long TB chars
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
define FangAndTrish = Character(_('Fang and Trish'), base, color="#42DFA8", who_outlines=[(gui.name_text_thickness, '#183623')])
define NaserAndNaomi = Character(_('Naser and Naomi'), base, color="#22DFA8", who_outlines=[(gui.name_text_thickness, '#2036B3')])
define TeamMember = Character(_('Team member'), base, color="#D32552", who_outlines=[(gui.name_text_thickness, '#445F42')])
define Everyone = Character(_('Everyone'), base, color="#A45489", who_outline=[(gui.name_text_thickness, '#4F5F81')])
define Chet = Character(_('Chet'), base, color="#B45411", who_outline=[(gui.name_text_thickness, '#BF5F81')])
#Custom Vars for positions
transform scenter:
xalign 0.5 yalign 0.0
transform sleft:
xalign 0.0 yalign 0.0
transform sright:
xalign 1.0 yalign 0.0
#Stella
transform stcenter:
xalign 0.5 yalign 0.1
transform stleft:
xalign 0.0 yalign 0.1
transform stright:
xalign 1.0 yalign 0.1
#Anon
transform acenter:
xalign 0.5 yalign 0.1
transform aleft:
xalign 0.0 yalign 0.1
transform aright:
xalign 1.0 yalign 0.1
#Naser
transform ncenter:
xalign 0.6 yalign 0.1
transform nleft:
xalign -0.2 yalign 0.1
transform nright:
xalign 1.9 yalign 0.1
#Fangs mom
transform fmcenter:
xalign 0.5 yalign 0.1
transform fmleft:
xalign 0.0 yalign 0.1
transform fmright:
xalign 1.0 yalign 0.1
#Trish
transform tcenter:
xalign 0.5 yalign 0.1
transform tleft:
xalign 0.0 yalign 0.1
transform tright:
xalign 1.0 yalign 0.1
#Reed and other long tailed dinos
transform rcenter:
xalign 1.2 yalign 0.1
transform rleft:
xalign -0.2 yalign 0.1
transform rright:
xalign 1.7 yalign 0.1
#misc transforms
transform shudder:
subpixel True
around (.5, .5) alignaround (.5, .5) xalign .5 yalign .5
rotate 0
linear 0.0 rotate -0.75
block:
linear 0.04 rotate 0.75
linear 0.05 rotate -0.75
linear 0.07 rotate 0
transform turnaround:
linear 0.1 xzoom -1.0
transform wiggle:
subpixel True
block:
xpos 0.5 ypos 1.0 xanchor 0.5 yanchor 1.0 zoom 1.02
alignaround (.5, .5)
linear 10.0 yalign 1.0 clockwise circles 1
repeat
transform raymbatransform:
xcenter 0.6 ycenter 0.385 zoom 0.5
# PHONE SCROLLING
transform cursortransform:
block:
yalign 0.2 xalign 0.60
pause .25
easein_cubic 1 yalign 0.75 xalign 0.54
pause .5
repeat
screen prompt():
fixed:
add "cursor"
screen mousedetect():
transform: # thanks based nutbuster
zoom 0.8
rotate 12.5
mousearea:
ypos -75
area(432, 0, 795, 1100)
# xalign 0.5 yanchor 0 ypos 0
hovered Hide("prompt" )
unhovered Show("prompt")
screen textscroll():
timer 2.0 action(Show("mousedetect"), Show("prompt"))
add Solid("FFF")
transform:
zoom 0.8
rotate 12.5
viewport:
xalign 0.51 yanchor 0 ypos -75 xysize(795, 1150)
child_size(795, 7650)
draggable True
arrowkeys True
# edgescroll(400, 800)
yinitial 1.0
imagebutton auto "fangbutton%s" xalign 0.53 yalign 0.5:
ypos 65+(int(107/2))
xsize 284
ysize 107
action (Hide("mousedetect"), Hide("prompt"), Hide("textscroll", transition=Dissolve(1.0)), Return())
add "texts"
add "fang phone"
# Naser's position when helping Anon get up
transform nmidright:
xalign 1.5 yalign 0.08
# Naomi's position when handing the brochure to Anon
transform scloserleft:
xalign 0.1 yalign 0.0
# Setting this here means we're past reloading scripts, therefore we're not reloading mods
$ persistent.reloading_mods = False
# Call initial language setup screen
# languaged_up is set within lang_sel
if (persistent.languaged_up is None):
$ preferences.set_mixer("ui", config.default_sfx_volume)
call screen lang_sel
return
label start:
$ toggle_debug()
$ fangscore = 0
$ anonscore = 0
$ tradwife = False
$ wingStory = False
pause 1.0
$ renpy.call(chapter_list[chapter_list_index]) # Call first element of the chapter_list array
call storyline from _call_storyline
@@ -157,7 +157,7 @@ label chapter_1:
scene stairs at Pan((553,169), (553, 169), 0) with None # snap here if the player is advancing the dialogue quickly
window hide
show iris:
xalign 0.99 yalign 0.75
xalign 0.99 yalign 0.75
stop ambient fadeout 4
stop ambient1 fadeout 4
with Dissolve(3)
@@ -1289,9 +1289,9 @@ label chapter_1:
show naomi neutral flip with dissolve
show naser:
easein_cubic 0.5 xalign 0.62
pause 0.75
ease 0.75 xalign 0.4
easein_cubic 0.5 xalign 0.62
pause 0.75
ease 0.75 xalign 0.4
pause 2
"He tears the sandwich in two and hands me the larger half."
@@ -1846,9 +1846,9 @@ label chapter_1:
window hide
$ i = 0
while i < 20:
$ showCG()
pause 1
$ i = i + 1
$ showCG()
pause 1
$ i = i + 1
$ renpy.music.set_volume(0.4, 2, 'ambient')
@@ -3479,7 +3479,7 @@ label chapter_1:
show anon neutral at aleft
show naomi neutral flip at sright
show naser sad flip behind naomi:
xalign 0.7 yalign -0.1
xalign 0.7 yalign -0.1
with Dissolve(1)
pause 0.5
@@ -3663,4 +3663,4 @@ label chapter_1:
window auto
pause 1.5
$ next_story_chapter()
return
@@ -550,4 +550,4 @@ label chapter_10:
window auto
pause 1
$ next_story_chapter()
return
@@ -447,11 +447,9 @@ label chapter_11:
#Naser Drama
#THIS SECTION IS SCORE DEPENDENT
# Determine ending and set up ending chapters
$ setup_ending(get_ending())
# Doomer ending skips this segment
if ending_route_number == 2:
call get_ending from _call_get_ending
if _return == 2:
stop music fadeout 3
pause 2
jump lPromAnnouncement
@@ -587,12 +585,13 @@ label chapter_11:
Nas "Dont take it the wrong way, but my mind just screamed at me worst case scenario."
pause .5
if ending_route_number == 4: # Golden
jump lSortingThings
elif ending_route_number == 3: # tradwife
jump lMendingThings
call get_ending from _call_get_ending_1
if _return == 4:
jump lSortingThings # Golden
elif _return == 3:
jump lMendingThings # Tradwife
else:
jump lBreakingThings # All else fails, go to shooter.
jump lBreakingThings # Shooter
label lSortingThings:
@@ -3848,7 +3847,7 @@ label chapter_11:
pause .5
show rosa neutral behind moe:
yalign 0.2 xalign 0.0
yalign 0.2 xalign 0.0
show rosa:
easein_back 2 yalign 0.2 xalign 0.9
with dissolve
@@ -5212,8 +5211,8 @@ label chapter_11:
"Fang and I have been together for a month now."
pause .5
if ending_route_number == 3: # tradwife
call get_ending from _call_get_ending_2
if _return == 3: #tradwife
"Things are going pretty well. When we discount Trishs weekly attempt to talk with Fang."
@@ -5244,11 +5243,11 @@ label chapter_11:
window auto
pause .5
scene science class
scene classroom
show anon neutral:
yalign 0.1 xalign 0.2
yalign 0.1 xalign 0.2
show fang neutral behind anon:
yalign 0.0 xalign 0.8
yalign 0.0 xalign 0.8
with Dissolve(1)
pause .5
@@ -5467,102 +5466,100 @@ label chapter_11:
"{cps=*.1}...{/cps}"
# skip this segment if we're doing ending 1
if ending_route_number == 1: #shooter
$ next_story_chapter()
# the following segment makes sense in the context of 11B+11C+11D
window hide
window auto
pause .5
call get_ending from _call_get_ending_3
if _return != 1: # any route except Shooter
# duplicated segment from 11B, 11C and 11D transplanted here
window hide
window auto
pause .5
play music "audio/OST/Appreciating her Company.ogg" fadein 1.0
pause .5
play music "audio/OST/Appreciating her Company.ogg" fadein 1.0
pause .5
"About fifteen minutes into the assignment, the two of us are just about done."
"About fifteen minutes into the assignment, the two of us are just about done."
"Were making surprisingly good time."
"Were making surprisingly good time."
show fang considering with Dissolve(.25)
F "Uhm{cps=*.1}...{/cps} and you said that the electrons hold the negative charge, right?"
show fang considering with Dissolve(.25)
F "Uhm{cps=*.1}...{/cps} and you said that the electrons hold the negative charge, right?"
A "Yeah, yeah."
A "Yeah, yeah."
show fang unimpressed with Dissolve(.25)
F "Cant imagine when Id be using this crap in real life."
show fang unimpressed with Dissolve(.25)
F "Cant imagine when Id be using this crap in real life."
A "You never know, you might shrink one day."
A "You never know, you might shrink one day."
show fang happy with Dissolve(.25)
F "Yeah, and you might stop pretending youre livestreaming on Yousnoot."
pause .5
show fang happy with Dissolve(.25)
F "Yeah, and you might stop pretending youre livestreaming on Yousnoot."
pause .5
A "As far as you know I might be giving you incorrect answers, you know."
A "As far as you know I might be giving you incorrect answers, you know."
F "Mhm, sure."
pause .5
F "Mhm, sure."
pause .5
"The teacher is making his rounds checking on the students and gets to our desks."
window hide
window auto
"The teacher is making his rounds checking on the students and gets to our desks."
window hide
window auto
show farnsworth:
yalign 0.1 xalign 1.6
show farnsworth:
easein_cubic 1 xalign 1.2
with dissolve
pause .5
show farnsworth:
yalign 0.1 xalign 1.6
show farnsworth:
easein_cubic 1 xalign 1.2
with dissolve
pause .5
Drf "Hello, Anon. Fang."
Drf "Hello, Anon. Fang."
Drf "Are you two getting along well?"
Drf "Are you two getting along well?"
AnonAndFang "Yes, Doctor Fernsworth."
AnonAndFang "Yes, Doctor Fernsworth."
Drf "Great to hear."
pause .5
Drf "Great to hear."
pause .5
Drf "You know, Im real proud of you two."
pause .5
Drf "You know, Im real proud of you two."
pause .5
Drf "I remember at the start of the year you were at each other's throats."
Drf "I remember at the start of the year you were at each other's throats."
Drf "And now look at you!"
pause .5
Drf "And now look at you!"
pause .5
show anon concerned
show fang sad
with dissolve
"The two of us cringe."
pause .5
show anon concerned
show fang sad
with dissolve
"The two of us cringe."
pause .5
A "Uhh{cps=*.1}...{/cps} Yeah, thanks."
A "Uhh{cps=*.1}...{/cps} Yeah, thanks."
Drf "At any rate, you two understand the material, right?"
Drf "At any rate, you two understand the material, right?"
show anon happy
show fang neutral
with dissolve
A "Oh yeah, Fang and I are fine."
show anon happy
show fang neutral
with dissolve
A "Oh yeah, Fang and I are fine."
show anon neutral with Dissolve(.25)
A "I was just helping them with a few problems."
pause .5
show anon neutral with Dissolve(.25)
A "I was just helping them with a few problems."
pause .5
"Phew, remembered it this time."
"Phew, remembered it this time."
Drf "Good, good."
Drf "Good, good."
Drf "I wont keep you any longer then."
Drf "I wont keep you any longer then."
show farnsworth:
easeout_cubic 1 xalign 1.6
pause .5
hide farnsworth with dissolve
show farnsworth:
easeout_cubic 1 xalign 1.6
pause .5
hide farnsworth with dissolve
"Fernsworth meanders to pester the next few students."
pause .5
"Fernsworth meanders to pester the next few students."
pause .5
A "Anyways, where were we?"
A "Anyways, where were we?"
$ next_story_chapter()
return
@@ -158,4 +158,4 @@ label chapter_11A:
window auto
pause .5
$ next_story_chapter()
return
@@ -173,4 +173,4 @@ label chapter_11B:
window auto
pause 1
$ next_story_chapter()
return
@@ -302,4 +302,4 @@ label chapter_11C:
"{cps=*.1}...{/cps}"
pause .5
$ next_story_chapter()
return
@@ -392,4 +392,4 @@ label chapter_11D:
"{cps=*.1}...{/cps}"
pause .5
$ next_story_chapter()
return
+1 -1
View File
@@ -445,4 +445,4 @@ label chapter_12_5C:
window hide
window auto
$ next_story_chapter()
return
+1 -1
View File
@@ -443,4 +443,4 @@ label chapter_12_5D:
F "Oh, Anon, youre already here!"
$ next_story_chapter()
return
+1 -1
View File
@@ -1034,4 +1034,4 @@ label chapter_12A:
window hide
window auto
$ next_story_chapter()
return
+4 -3
View File
@@ -312,7 +312,7 @@ label chapter_12B:
scene biglydie
show fang happy flip:
yalign -0.65 xalign 0.8
show anon concerned:
show anon neutral:
yalign -0.55 xalign 0.2
with Dissolve(1)
pause .5
@@ -320,8 +320,9 @@ label chapter_12B:
"The earplugs were not helping. At all."
"Im pretty sure I just went deaf."
pause .5
show anon neutral with Dissolve(1)
"There are about a hundred to a hundred fifty of the concert-goers, give or take."
@@ -591,4 +592,4 @@ label chapter_12B:
window auto
pause 1
$ next_story_chapter()
return
+1 -1
View File
@@ -901,4 +901,4 @@ label chapter_12C:
window auto
pause 1
$ next_story_chapter()
return
+2 -2
View File
@@ -54,7 +54,7 @@ label chapter_12D:
"Looking through one of the map kiosks, I try to make a mental plan for the trip."
show fang neutral at scenter
show fang neutral at scenter:
show anon neutral at aleft:
xalign 0.1
with dissolve
@@ -781,4 +781,4 @@ label chapter_12D:
"{cps=*0.1}...{/cps}"
$ next_story_chapter()
return
@@ -56,7 +56,7 @@ label chapter_13A:
show naomi prom neutral:
yalign 0.0 xalign -0.4
show naomi prom neutral:
easein_cubic 1 xalign -0.125
easein_cubic 1 xalign -0.125
with dissolve
pause .5
@@ -690,11 +690,13 @@ label chapter_13A:
pause .5
menu:
"Could be worse":
A "Could be worse."
"Could be worse":
"Going great, actually":
A "Going great, actually."
A "Could be worse."
"Going great, actually":
A "Going great, actually."
pause .5
Sp "Wheres your date, I thought I saw the two of you enter."
@@ -1797,4 +1799,4 @@ label chapter_13A:
window auto
pause 1
$ next_story_chapter()
return
+1 -1
View File
@@ -1048,4 +1048,4 @@ label chapter_13B:
window auto
pause 1
$ next_story_chapter()
return
@@ -2539,14 +2539,14 @@ label chapter_13C:
easein_cubic 1 xalign 1.85
show chillicheesefries:
rotate 130 xanchor 0.5 yanchor 0.4 xpos 0.77 ypos 0.425
rotate 130 xalign 0.5 yalign 0.4 xpos 0.77 ypos 0.425
easein_cubic 1 xpos 0.795
with None
show naser rstained surprised
hide chillicheesefries
show chillicheesefries_hack:
rotate 130 xanchor 0.5 yanchor 0.4 xpos 0.765 ypos 0.425
rotate 130 xalign 0.5 yalign 0.4 xpos 0.765 ypos 0.425
easein_cubic 1 xpos 0.79
with dissolve
@@ -2554,7 +2554,7 @@ label chapter_13C:
show naser rstained shocked
show chillicheesefries:
rotate 140 xanchor 0.5 yanchor 0.4 xpos 0.805 ypos 0.4
rotate 140 xalign 0.5 yalign 0.4 xpos 0.805 ypos 0.4
hide chillicheesefries_hack
with Dissolve(.22)
@@ -2635,7 +2635,7 @@ label chapter_13C:
show naser fullystained shocked
hide chillicheesefries
show chillicheesefries_hack:
rotate 140 xanchor 0.75 yanchor 0.5 xpos 0.905 ypos 0.45
rotate 140 xalign 0.75 yalign 0.5 xpos 0.905 ypos 0.45
easein_cubic 1 xpos 0.93
with Dissolve(.22)
@@ -4604,4 +4604,4 @@ label chapter_13C:
#end of new stuff
$ next_story_chapter()
return
@@ -3114,13 +3114,17 @@ label chapter_13D:
pause .5
menu:
"Go to college":
A "Well... {w=0.3}Spears convinced me to send out a couple application letters for college."
"Not certain just yet":
A "Im not sure yet."
A "Im thinking of doing something with music{cps=*.1}...{/cps} maybe becoming a sound engineer?"
"Go to college":
A "Well... {w=0.3}Spears convinced me to send out a couple application letters for college."
A "Im thinking of doing something with music{cps=*.1}...{/cps} maybe becoming a sound engineer?"
"Not certain just yet":
A "Im not sure yet."
A "Im thinking of doing something with music{cps=*.1}...{/cps} maybe becoming a sound engineer?"
Re "Oh nice, dude! You can be the bands sound technician when youre done!"
@@ -4053,4 +4057,4 @@ label chapter_13D:
"{cps=*.1}...{/cps}"
pause 0.5
$ next_story_chapter()
return
+1 -2
View File
@@ -1442,5 +1442,4 @@ label chapter_14A:
pause 5
$ renpy.music.set_volume(1, 0, 'ambient')
$ next_story_chapter()
return
+1 -1
View File
@@ -350,4 +350,4 @@ label chapter_14B:
scene black with Dissolve(3)
pause 2
$ next_story_chapter()
return
+2 -3
View File
@@ -441,7 +441,7 @@ label chapter_14C:
pause .5
show fang:
easeout_cubic 1 xalign 1.4
easeout_cubic 1 xalign 1.4
show fang c happy with dissolve
hide fang with dissolve
pause 0.5
@@ -1014,5 +1014,4 @@ label chapter_14C:
pause 1.0
stop music
$ renpy.music.set_volume(1, 0, 'music')
$ next_story_chapter()
return
+1 -2
View File
@@ -898,5 +898,4 @@ label chapter_14D:
pause 16
scene black with Dissolve(1.0)
pause 1
$ next_story_chapter()
return
+15 -15
View File
@@ -603,7 +603,7 @@ label chapter_2:
window auto
show fang neutral with Dissolve(1):
xalign -0.6 yalign 0.0
xalign -0.6 yalign 0.0
pause .75
show white:
@@ -903,7 +903,7 @@ label chapter_2:
pause .5
show fang sad flip:
ease_cubic 1.5 xalign -0.6
ease_cubic 1.5 xalign -0.6
pause 1.15
show fang sad with dissolve
pause 1.2
@@ -964,7 +964,7 @@ label chapter_2:
show fang unimpressed with Dissolve(.25)
F "Uh{cps=*.1}....{/cps}{w=.2} Youve been staring at me for the past 5 minutes. Freak."
show anon neutral with dissolve
show anon neutral with dissolve:
show anon:
easein 0.5 xalign 0.2
pause .5
@@ -1919,7 +1919,7 @@ label chapter_2:
show fang sad:
yalign 0 xalign -1
show fang sad:
easein 1 xalign -0.6
easein 1 xalign -0.6
with Dissolve(1)
pause 1
@@ -2191,13 +2191,13 @@ label chapter_2:
scene cafeteria
show anon neutral:
xalign -0.2 yalign 0.1
xalign -0.2 yalign 0.1
show reed neutral flip:
xalign 0.5 yalign 0.1
xalign 0.5 yalign 0.1
show fang considering flip:
xalign 0.95 yalign 0.0
xalign 0.95 yalign 0.0
show trish neutral flip:
xalign 1.125 yalign 0.0
xalign 1.125 yalign 0.0
with Dissolve(1)
pause .5
@@ -2274,11 +2274,11 @@ label chapter_2:
stop music fadeout 0.02
show reed shocked flip:
easein_quart 1 xalign 0.54
easein_quart 1 xalign 0.54
show fang surprised flip:
easein_quart 1 xalign 0.99
easein_quart 1 xalign 0.99
show trish surprised flip:
easein_quart 1 xalign 1.155
easein_quart 1 xalign 1.155
pause .5
"The three stop in their tracks and look back at me."
pause .5
@@ -2331,11 +2331,11 @@ label chapter_2:
pause .5
show reed shocked flip:
easein_quart 1 xalign 0.65#0.54
easein_quart 1 xalign 0.65#0.54
show fang surprised flip:
easein_quart 1 xalign 1.15#0.99
easein_quart 1 xalign 1.15#0.99
show trish neutral flip:
easein_quart 1 xalign 1.25#1.155
easein_quart 1 xalign 1.25#1.155
FRT "Ohfuck.{w=.4} Sorry Anon, we gotta bail."
window hide
@@ -2604,4 +2604,4 @@ label chapter_2:
"{cps=*.05}...{/cps}"
pause .5
$ next_story_chapter()
return
@@ -2291,4 +2291,4 @@ label chapter_3:
"{cps=*.1}...{/cps}"
$ next_story_chapter()
return
@@ -732,7 +732,7 @@ label chapter_4:
show reed king rex behind anon:
yalign 0.1 xalign -1.9
show reed:
easein 1 xalign -1.2
easein 1 xalign -1.2
with Dissolve(1)
pause 1
Re "Itll be fine."
@@ -1422,4 +1422,4 @@ label chapter_4:
window auto
pause .5
$ next_story_chapter()
return
@@ -1,3 +1,12 @@
init python:
# some stupid bullshit you have to do to get sounds playing in an ATL block
def fang_kicks_a_car_workaround_sfx_fuck_renpy(a,b,c):
if random.random() > 0.5:
renpy.play('audio/effects/carKick1.ogg', channel='audio')
else:
renpy.play('audio/effects/carKick2.ogg', channel='audio')
# renpy.play('audio/effects/carSuspension1.ogg', channel='audio')
label chapter_5:
# Gardening Club
@@ -542,7 +551,7 @@ label chapter_5:
show anon:
easein_back 0.5 xalign 0.2
label movie: # This unfortunately needs to stay here so compatability with translations is kept
label movie:
play sound 'audio/effects/slapstickPunch.ogg'
A "FANG!" with vpunch
@@ -550,8 +559,7 @@ label chapter_5:
play ambient 'audio/effects/clipLoop.ogg' fadein 1
play ambient1 'audio/effects/outdoorNatureLoop.ogg' fadein 1
# scene fang tail with Dissolve(1)
show fang_tail_movie with Dissolve(1) # change how the movie is played
scene fang tail with Dissolve(1)
"Through my blurred vision I can make out Fangs tail, slowly shifting side to side."
@@ -565,9 +573,9 @@ label chapter_5:
menu:
"Tug Her Tail":
pass
pass
"Tug Her Ankle":
pass
pass
pause .5
@@ -836,7 +844,7 @@ label chapter_5:
show fang considering flip with Dissolve(.25)
Ro "I just{cps=*.1}...{/cps}{w=.3} URGH!{w=.4} Do you have {i}any{/i} idea how hard those are to get!"
Ro "I just{cps=*.1}...{/cps}{w=.3} URGH!{w=.4} Do you have {i}any{/i} idea how long it takes for those to bloom!"
Ro "Name!{w=.4} What is your name?!"
@@ -1380,6 +1388,7 @@ label chapter_5:
A "Err{cps=*.1}...{/cps}{w=.3} Sorry?"
# TODO: the line "do you have any idea how long it takes for those to bloom" is also used earlier when Anon first falls into the flowerbed
Ro "{i}Ay Dios mío{/i}{cps=*.1}...{/cps} do you have any idea how long it takes those to bloom?!"
if not punched_into_flowerbed:
@@ -2472,7 +2481,7 @@ label chapter_5:
F "Sure, sure."
F "Anyway, Ill be seeing ya, Anon."
F"Anyway, Ill be seeing ya, Anon."
pause .5
A "Yeah{cps=*.1}...{/cps} See you{cps=*.1}...{/cps}"
@@ -3404,6 +3413,8 @@ label chapter_5:
if _value != "Snot":
renpy.jump(_value+chr(0x61+_tick))
$ wingStory = True
F "And the worst part is he cant even hate me."
pause .5
@@ -3575,7 +3586,6 @@ label chapter_5:
$ fangscore += 1
$ anonscore += 1
$ wingStory = True
A "{cps=*.1}...{/cps}"
pause .25
@@ -4657,4 +4667,9 @@ label chapter_5:
window auto
pause 1
$ next_story_chapter()
return
# I'm guessing this is for the gallery?
label fang_movie:
scene fang tail with fade
""
@@ -4677,4 +4677,4 @@ label chapter_6:
window auto
pause 1
$ next_story_chapter()
return
File diff suppressed because it is too large Load Diff
+17 -48
View File
@@ -80,9 +80,9 @@ label chapter_8:
"Knowing better than to look through the ocean of students, I follow my nose to Reed."
pause 0.5
show reed sunglasses:
xalign 0.4 yalign 0.1
xalign 0.4 yalign 0.1
show trish neutral behind reed:
xalign 0.9
xalign 0.9
with dissolve
"The fetid raptor was sitting in the very last row with Trish."
@@ -335,7 +335,7 @@ label chapter_8:
show reed happy flip:
yalign 0.238
easeout_cubic .5 rotate 90 yanchor -0.01 ypos 0.5
easeout_cubic .5 rotate 90 yalign -0.01 ypos 0.5
pause .15
hide reed with Dissolve(.25)
play sound 'audio/effects/anonGardenFall.ogg'
@@ -622,10 +622,8 @@ label chapter_8:
pause .5
python:
choices = [
(_('Play The Guitar'), 'lLetFangPlayGuit'),
(_('Get to Studying'), 'lGetStartedOnStudy')]
choices = [(_('Play The Guitar'), 'lLetFangPlayGuit'),
(_('Get to Studying'), 'lGetStartedOnStudy')]
renpy.jump(renpy.display_menu(randomize_choices(choices)))
@@ -718,7 +716,7 @@ label chapter_8:
pause .5
"{cps=*0.5}AAAAAAAAAAAAAAAA{/cps}"
play music 'audio/OST/Dragging on and on....ogg' fadein 1.0 volume 0.5
play music 'audio/OST/Dragging on and on....ogg' fadein 1.0
pause .5
F "Anon, are you paying attention?"
@@ -732,31 +730,15 @@ label chapter_8:
pause .5
F "Alright, try these chords."
# Renpy's audio is rarted, do this workaround instead
$ renpy.music.set_volume(1.0, 0.0, 'sound')
play sound 'audio/effects/goodA.ogg'
$ renpy.music.set_volume(0.0, 1.5, 'sound')
pause 0.25
play sound 'audio/effects/goodA.ogg' fadein 0.5
"Her fingers press mine down, holding down the strings in an awkward position."
F "Then this."
$ renpy.music.set_volume(1.0, 0.0, 'sound')
play sound 'audio/effects/goodB.ogg'
$ renpy.music.set_volume(0.0, 1.5, 'sound')
pause 0.25
play sound 'audio/effects/goodB.ogg' fadein 0.5
"My hands are slid down closer to the base of the neck and too close to my crotch."
F "And then finally this."
$ renpy.music.set_volume(1.0, 0.0, 'sound')
play sound 'audio/effects/goodC.ogg'
$ renpy.music.set_volume(0.0, 1.5, 'sound')
pause 0.25
play sound 'audio/effects/goodC.ogg' fadein 0.5
"My fingers are shifted back up to the middle of the fretboard."
F "Try that out, Anon."
@@ -765,25 +747,14 @@ label chapter_8:
"Fang lets go of my sweaty hands. She doesnt move from behind me though."
"I try and replicate the movements."
$ renpy.music.set_volume(1.0, 0.0, 'sound')
play sound 'audio/effects/goodA.ogg'
$ renpy.music.set_volume(0.0, 1.5, 'sound')
pause 0.25
pause .5
play sound 'audio/effects/goodA.ogg' fadein 0.5
"The first strum sounds… not bad…"
$ renpy.music.set_volume(1.0, 0.0, 'sound')
play sound 'audio/effects/badA.ogg'
$ renpy.music.set_volume(0.0, 1.5, 'sound')
pause 0.25
play sound 'audio/effects/badA.ogg' fadein 0.5
"The second note is horrendous. I blame my pants."
$ renpy.music.set_volume(1.0, 0.0, 'sound')
play sound 'audio/effects/goodC.ogg'
$ renpy.music.set_volume(0.0, 1.5, 'sound')
pause 0.25
play sound 'audio/effects/goodC.ogg' fadein 0.5
"And the last chord comes out alrightish."
pause .5
@@ -819,8 +790,6 @@ label chapter_8:
"My pinky slides off the fretboard and when I strum again a strange look appears in Fangs eyes."
window hide
window auto
$ renpy.music.set_volume(1.0, 0.5, 'sound')
pause .5
label musicalchoices:
@@ -1308,6 +1277,7 @@ label chapter_8:
with Dissolve(0.2)
pause 0.3
hide anonfacecloseup
FD "Out. {w=0.3}{b}Now{/b}."
@@ -1554,7 +1524,7 @@ label chapter_8:
"{cps=*.1}...{/cps}"
if (anonscore >= 4 and fangscore >= 4) or ending_route_number == 4:
if anonscore >= 3 or fangscore >= 3:
pause 0.5
play music 'audio/OST/its_footloose_now.ogg' fadein 1.0
@@ -1597,7 +1567,7 @@ label chapter_8:
window hide
window auto
$ next_story_chapter()
return
label lGetStartedOnStudy:
pause 0.5
@@ -2186,5 +2156,4 @@ label chapter_8:
"{cps=*.1}...{/cps}"
window hide
window auto
$ next_story_chapter()
return
@@ -1297,7 +1297,7 @@ label chapter_9:
jump lGoHomeEarly
label lWaitForTrishToExit:
$ anonscore += 1
$ anonscore += 1
#play music 'audio/OST/fighter.ogg' fadein 1.0
A "You worried about her, too?"
@@ -2171,4 +2171,4 @@ label chapter_9:
window auto
pause .5
$ next_story_chapter()
return
-2
View File
@@ -612,6 +612,4 @@ label chapter_x1:
scene black with Dissolve(2)
pause 1.5
$ persistent.bonus_chapters |= (0b1 << 0)
return
-1
View File
@@ -1041,7 +1041,6 @@ label chapter_x10:
window auto
pause 0.5
$ persistent.use_epilogue_menu = True
scene big ending with Dissolve(1)
scene big blending with Dissolve(1)
pause 6
+10 -12
View File
@@ -6,7 +6,7 @@ label chapter_x2:
scene black with Dissolve(2)
pause 1
scene skinrow
scene skinrow
show anon neutral flip:
yalign 0.1 xalign 0.7
show black
@@ -62,7 +62,7 @@ label chapter_x2:
pause .5
A "Ive been living here for almost seven months and I wouldnt trade it for anywhere else in the state."
show anon neutral flip with dissolve
A "So lets head on inside for the grand tour!"
window hide
@@ -71,7 +71,7 @@ label chapter_x2:
show black with Dissolve(1)
scene room anon day alt
scene room anon day alt
show viewfinder
show rec:
ypos 0.072 xpos 0.91
@@ -104,7 +104,7 @@ label chapter_x2:
window hide
window auto
pause .5
show anon shrug behind viewfinder:
yalign 0.1 xalign -0.4
show anon:
@@ -275,7 +275,7 @@ label chapter_x2:
easeout_cubic 1 xalign -0.2
pause .5
hide anon with dissolve
play sound 'audio/effects/doorslam.ogg'
pause .1
window show Dissolve(0.0001)
@@ -309,7 +309,7 @@ label chapter_x2:
"{cps=*.1}...{/cps}"
A "OH, YOU FUCKING KNOW, STELLA!"
show fang:
easein_cubic 1.5 xalign 0.5
F "PFFFFFFT."
@@ -348,8 +348,8 @@ label chapter_x2:
"{cps=*.1}.........{/cps}"
A "Apology not accepted!"
A "Apology not accepted!"
A "Oh and by the way your husbando is shit!"
pause .5
@@ -370,7 +370,7 @@ label chapter_x2:
pause 1
A "Ugh{cps=*.1}...{/cps} I need a smo-"
show anon neutral with Dissolve(.25)
A "Wait."
pause .5
@@ -405,6 +405,4 @@ label chapter_x2:
scene black with Dissolve(1.5)
pause 2
$ persistent.bonus_chapters |= (0b1 << 1)
return
return
-3
View File
@@ -304,7 +304,4 @@ label chapter_x3:
scene black with Dissolve(2)
pause 1.5
$ persistent.bonus_chapters |= (0b1 << 2)
return
+6 -8
View File
@@ -42,7 +42,7 @@ label chapter_x4:
easein_cubic 1 xalign 0.05
show fang very happy with Dissolve(.25)
F "I dunno but it's awesome! A real venue this time!"
show dimmer_lighter behind trish with dissolve
"It takes a second to actually register it."
@@ -56,7 +56,7 @@ label chapter_x4:
show trish:
easein_cubic 1 xalign 0.75
with None
show trish very happy flip
show trish very happy flip
hide dimmer_lighter
with dissolve
T "Our chance to make VVURM DRAMA the hit it deserves to be!"
@@ -197,7 +197,7 @@ label chapter_x4:
T "A trick probably."
pause .5
show dimmer_light behind trish
show dimmer_light behind trish
show trish unimpressed flip
with dissolve
pause .5
@@ -219,7 +219,7 @@ label chapter_x4:
show trish happy flip
with Dissolve(.25)
T "Sounds like a plan. We have to prepare for our biggest show yet!"
show fang happy with Dissolve(.25)
pause .5
@@ -234,7 +234,7 @@ label chapter_x4:
"I hand Fang the blue strat, which they immediately set to tuning just right."
"Mr. Jingo really needs to get some new gear, these things arent maintained at all."
stop music fadeout 4
pause .5
"Even this bass, no one ever even uses it."
@@ -245,6 +245,4 @@ label chapter_x4:
window auto
pause 2
$ persistent.bonus_chapters |= (0b1 << 3)
return
return
+4 -6
View File
@@ -5,7 +5,7 @@ label chapter_x5:
stop music fadeout(3)
scene black with Dissolve(2)
pause 1
# skinrow soul?
# summertime synth?
play music 'audio/ost/skinrow soul.ogg' fadein 0.5
@@ -71,7 +71,7 @@ label chapter_x5:
Re "We all make mistakes, amigo. Like{cps=*.1}...{/cps} like 'member that time I caught the cooking class on fire?"
T "Yeah, yeah, can't cook to save your life. That doesn't make me feel any less shitty."
T "Yeah, yeah, can't cook to save your life. That doesn't make me feel any less shitty."
Re "Just makes us people, s'all. We all make 'em and we all gotta fix 'em, y'know?"
pause .5
@@ -267,7 +267,7 @@ label chapter_x5:
Re "BESIDES! King Rex can't be the only dude there without a date!"
show reed neutral
show trish smile flip
show trish smile flip
with dissolve
"I shake my head and let a laugh escape."
@@ -340,6 +340,4 @@ label chapter_x5:
pause 2
$ persistent.bonus_chapters |= (0b1 << 4)
return
return
-2
View File
@@ -1417,6 +1417,4 @@ label chapter_x6:
window auto
pause 2
$ persistent.bonus_chapters |= (0b1 << 5)
return
+8 -10
View File
@@ -235,7 +235,7 @@ label chapter_x7:
A "Well talk later, Fang. Have fun with the party okay?"
show fangphonevideocall call_ended_bg call_ended with dissolve
show fangphonevideocall call_ended_bg call_ended with dissolve:
# yalign -0.045
# yalign 0
pause .5
@@ -397,7 +397,7 @@ label chapter_x7:
pause .5
show trish happy with dissolve
#show trish happy behind dimmer_darker at tleft with easeinleft
#show trish happy behind dimmer_darker at tleft with easeinleft
T "Fang! It took a while but Reeds distracted!"
@@ -850,7 +850,7 @@ label chapter_x7:
subpixel True
ease_quad 4 zoom 1.3 xpos 810
pause 2.5
@@ -891,7 +891,7 @@ label chapter_x7:
pause .5
scene home fang day alt:
xalign 0.5 zoom 1.2
xalign 0.5 zoom 1.2
ease_cubic 1 zoom 1
show dimmer_lighter:
alpha 1
@@ -1230,12 +1230,12 @@ label chapter_x7:
easein_cubic 1.5 xalign 0.75
parallel:
linear 0.5 alpha 1
show naser:
show naser:
parallel:
easein_cubic 1.5 xalign 3.5
parallel:
linear 0.5 alpha 0
show naomi:
show naomi:
parallel:
easein_cubic 1.5 xalign 2.0
parallel:
@@ -1720,7 +1720,7 @@ label chapter_x7:
show naser neutral flip with dissolve
pause .5
show naser considering flip with dissolve
show chadshark with dissolve
show chadshark:
easein_cubic 0.25 yalign 0.03
@@ -2092,6 +2092,4 @@ label chapter_x7:
scene black with Dissolve(2)
pause 2
$ persistent.bonus_chapters |= (0b1 << 6)
return
return
+7 -10
View File
@@ -293,19 +293,19 @@ label chapter_x8:
show naomi:
easein_cubic 1.5 xalign 0.8
pause 1
linear 0.045 yalign -0.002
linear 0.045 yalign -0.002
linear 0.045 yalign 0.002
linear 0.045 yalign -0.004
linear 0.045 yalign -0.004
linear 0.045 yalign 0.004
linear 0.045 yalign -0.005
linear 0.045 yalign -0.005
linear 0.045 yalign 0.005
linear 0.045 yalign -0.005
linear 0.045 yalign -0.005
linear 0.045 yalign 0.005
linear 0.045 yalign -0.005
linear 0.045 yalign -0.005
linear 0.045 yalign 0.005
linear 0.045 yalign -0.004
linear 0.045 yalign -0.004
linear 0.045 yalign 0.004
linear 0.045 yalign -0.002
linear 0.045 yalign -0.002
linear 0.045 yalign 0.002
pause 0.5
easeout_cubic 0.8 yalign -0.3
@@ -538,7 +538,4 @@ label chapter_x8:
window hide
window auto
pause 2
$ persistent.bonus_chapters |= (0b1 << 7)
return
+1 -4
View File
@@ -1044,7 +1044,7 @@ label chapter_x9:
F "Good night Anon."
$ renpy.music.queue('audio/OST/good faith synth finale end.ogg', channel=u'music', loop=None, clear_queue=True)
queue music "<silence 1.0>" loop
queue music "<silence 1.0>" loop
A "Night Lucy."
@@ -1084,7 +1084,4 @@ label chapter_x9:
window auto
pause 2
$ renpy.music.set_volume(1.0, 0, 'music')
$ persistent.bonus_chapters |= (0b1 << 8)
return
+25 -23
View File
@@ -13,10 +13,12 @@ init 2 python:
CG_PATHS = []
#path: folder, name: shows up in gallery, eval: runs eval() on string
# Data structure that holds the data for each cg and button
# item is name, cg is the image definition
# { item: str; cg: Displayable; }
# (reference in this init python, actually used in screens)
"""
Data structure that holds the data for each cg and button
item is name, cg is the image definition
{ item: str; cg: Displayable; }
(reference in this init python, actually used in screens)
"""
gallery_dic = {}
@@ -77,32 +79,29 @@ init 2 python:
jsonloadandpop()
gallery_dic['Animations'] = [{
"item": 'fang_tail_movie',
"item": 'fang tail',
"image": 'images/animations/fang tail thumbnail.webp',
"cg": 'images/animations/fang tail thumbnail.webp',
}]
renpy.image("fang tail", Movie(loop=True,play='images/animations/fang tail.webm')) # Since we are hard-coding might as well.
pass
# Bullshit for the scrollbar to reset back to the beggining. Bless the renpy Discord :pray:
default adjust = ui.adjustment()
# CG Gallery screen - A screen that shows the image gallery
# Built-in Gallery Object has terrible defaults, so I just wrote my own stuff
"""
CG Gallery screen - A screen that shows the image gallery
Built-in Gallery Object has terrible defaults, so I just wrote my own stuff
"""
screen cg_gallery(origin = 'CG'):
if main_menu:
key "game_menu" action ShowMenu("main_menu")
# Bg for frame
use main_menu_background(False)
add gui.main_menu_background
# Frame
if persistent.use_epilogue_menu:
add "gui/game_menu_epilogue.png"
else:
add gui.game_menu_background
add gui.game_menu_background
tag menu
@@ -118,9 +117,10 @@ screen cg_gallery(origin = 'CG'):
transform:
zoom 0.95
hbox:
style_prefix "navigation"
xalign 0.5
spacing 80
spacing gui.navigation_spacing
for cp in CG_PATHS:
if cp['name'] == origin:
@@ -162,8 +162,9 @@ screen cg_gallery(origin = 'CG'):
for i in range(0, empty_spaces):
null height 20
# if/else flow control & extra parameters for Buttons
"""
if/else flow control & extra parameters for Buttons
"""
screen flag_button(item, origin):
$ flag = renpy.seen_image(item['item'])
@@ -196,11 +197,12 @@ screen view_movie(item, _origin):
yalign 0.975
use quick_buttons("gui/button/uioptionbuttons/template_idle.png",
[
[ _("Return"), _origin, NullAction() ]
[ "Return", _origin ]
] )
# view_image, Loads the image in fullscreen with viewport control.
"""
view_image, Loads the image in fullscreen with viewport control.
"""
screen view_image(item, _origin):
tag menu
key "game_menu" action (Hide('view_image'), _origin)
@@ -209,7 +211,7 @@ screen view_image(item, _origin):
viewport id "vie":
#Ren'Py isn't smart enough to not edgescroll while pressed,
#so we'll have to disable this for mobile
if renpy.variant("pc") and persistent.gallery_edgescroll:
if renpy.variant("pc"):
edgescroll (300, 1800)
draggable True
arrowkeys True
@@ -228,6 +230,6 @@ screen view_image(item, _origin):
yalign 0.975
use quick_buttons("gui/button/uioptionbuttons/template_idle.png",
[
[ _("Return"), _origin, NullAction() ]
[ "Return", _origin ]
] )
-182
View File
@@ -1,182 +0,0 @@
define chapter_tuple = [
(_("1. First Day of School"), "chapter_1"),
(_("2. Meeting the Band"), "chapter_2"),
(_("3. Band Practice"), "chapter_3"),
(_("4. Music Class"), "chapter_4"),
(_("5. Gardening Club / Heart to Heart"), "chapter_5"), # This is supposed to be split in 2 chapters, but maybe making tons of save files stop working would be too much to ask
(_("6. Not a Date"), "chapter_6"),
(_("7. Concert Day"), "chapter_7"),
(_("8. Study Session"), "chapter_8"),
(_("9. VVURM DRAMA"), "chapter_9"),
(_("10. Confession"), "chapter_10"),
(_("11. Naser drama"), "chapter_11")
]
define ending_1_tuple = [
(_("11.5. Announcing a Plan"), "lPromAnnouncement"), # this is supposed to be ch 12 (13, accounting for ch 5), but it somehow got counted as part of 11 internally
(_("12. Let's all go to the Museum"), "chapter_12A"),
(_("13. Prom is Complicated"), "chapter_12_5D"),
(_("14. Bowling for Volcano High"), "chapter_14A")
]
define ending_2_tuple = [
(_("11.5. Announcing Nothing Important"), "lPromAnnouncement"),
(_("12. Let's all go to a Concert"), "chapter_12B"),
(_("13. Prom is For Suckers"), "chapter_13B"),
(_("14. Anon and the Infinite Sadness"), "chapter_14B")
]
define ending_3_tuple = [
(_("11.5. Announcing a Date"), "lPromAnnouncement"),
(_("12. Let's all go Camping"), "chapter_12C"),
(_("13. Prom is Surprising"), "chapter_12_5C"),
(_("14. Volcano Highschool Musical"), "chapter_14C")
]
define ending_4_tuple = [
(_("11.5. Announcing a Show"), "lPromAnnouncement"),
(_("12. Let's all go to the Aquarium"), "chapter_12D"),
(_("13. Prom is Memorable"), "chapter_12_5D"),
(_("14. Fast Times at Volcano High"), "chapter_14D")
]
label chapter_select:
$ quick_menu = False # Hides bottom quick menu UI
stop ambient
stop ambient1
stop ambient2
stop ambient3
stop sound
stop music
stop music1
stop music2
scene black
camera:
yanchor 0.0 xanchor 0.0 rotate None zoom 1.0 xpos 0.0 ypos 0.0
matrixcolor None
with Dissolve(0.25)
jump chapter_select_go_back # Technically we don't need to explicitly jump to the label just below here, but doing so anyway for clarity
label chapter_select_go_back:
# Reset story vars. Not that it terribly matters, but just in case it avoids bugs.
python:
anonscore = 0
fangscore = 0
wingStory = False
chapter_list = base_chapter_list.copy()
chapter_list_index = 0
chapter_list_length = get_chapter_list_length()
ending_route_number = None
ending_chapters_determined = False
current_chapter = chapter_list[chapter_list_index]
renpy.music.set_volume(1.0, 0.0, 'sound')
renpy.music.set_volume(1.0, 0.0, 'music')
renpy.music.set_volume(1.0, 0.0, 'music1')
renpy.music.set_volume(1.0, 0.0, 'music2')
renpy.music.set_volume(1.0, 0.0, 'ambient')
renpy.music.set_volume(1.0, 0.0, 'ambient1')
renpy.music.set_volume(1.0, 0.0, 'ambient2')
renpy.music.set_volume(1.0, 0.0, 'ambient3')
menu:
"What ending do you want to lock to?"
"Ending 1":
$ ending_route_number = 1
"Ending 2":
$ ending_route_number = 2
"Ending 3":
$ ending_route_number = 3
"Ending 4":
$ ending_route_number = 4
"Exit to main menu":
scene black with Dissolve(0.25)
return
window auto hide
$ chapter_select()
init python:
# Some of this would be much easier to do if we could just reorganize how the chapters are laid out, but breaking translations is way more of a hassle to fix
def chapter_select():
global current_chapter, quick_menu, ending_route_number, chapter_list_index, chapter_list, ending_chapters_determined, chapter_list_length
selected_label = display_chapter_choices() # Returns a label of the chapter to jump to
setup_ending(ending_route_number) # Add ending chapters to chapter control list
# Find the index position of the selected chapter
try:
chapter_list_index = chapter_list.index(selected_label)
except ValueError: # This crashes the game otherwise since it wouldn't find the correct chapter
# Make an exception for the 11A/B/C/D chapters, since we're technically supposed to start at the lPromAnnouncement label
# Stank as fuck
if selected_label == "lPromAnnouncement":
chapter_list_index = 10
current_chapter = "chapter_11"
toggle_debug()
quick_menu = True
renpy.call("lPromAnnouncement")
else:
print("No such chapter exists!")
MainMenu(confirm=False) () # Exits to the main menu
current_chapter = selected_label
# Start playing the game
toggle_debug()
quick_menu = True # Restores the bottom quick menu UI
renpy.call(current_chapter)
def display_chapter_choices():
# Vars for displaying the choices
ending_tuples = {
1: ending_1_tuple,
2: ending_2_tuple,
3: ending_3_tuple,
4: ending_4_tuple
}
final_chapter_tuple = chapter_tuple + ending_tuples[ending_route_number] # Chapter list to select from
current_page = 0
chapters_per_page = 6
# The range of choices to display
start_index = 0
end_index = chapters_per_page
while True:
# Displays the choices
selected_label = renpy.display_menu(final_chapter_tuple[start_index:end_index] + [(_("Next Page"), "chapter_select_next_page"), (_("Go Back"), "chapter_select_go_back")])
if selected_label == "chapter_select_next_page":
# If we're at the last page, wrap around to the first
current_page = 0 if end_index == len(final_chapter_tuple) else (current_page + 1)
start_index = chapters_per_page * current_page
end_index = min(start_index + chapters_per_page, len(final_chapter_tuple))
# Exit to ending selection
elif selected_label == "chapter_select_go_back":
renpy.jump("chapter_select_go_back")
# We've selected a chapter
else:
return selected_label
-31
View File
@@ -1,31 +0,0 @@
# Store the general chapters inside an array for easy manipulation
define base_chapter_list = [
"chapter_1", "chapter_2", "chapter_3", "chapter_4", "chapter_5",
"chapter_6", "chapter_7", "chapter_8", "chapter_9", "chapter_10", "chapter_11"
]
define ending_routes = {
4: ["chapter_11D", "chapter_12D", "chapter_12_5D", "chapter_13D", "chapter_14D"],
3: ["chapter_11C", "chapter_12C", "chapter_12_5C", "chapter_13C", "chapter_14C"],
2: ["chapter_11B", "chapter_12B", "chapter_13B", "chapter_14B"],
1: ["chapter_11A", "chapter_12A", "chapter_12_5D", "chapter_13A", "chapter_14A"]
}
# The working list the game references to determine the chapters to use. Ending chapters are added to this list when determined.
default chapter_list = base_chapter_list.copy()
# Default vars reset when a new game starts, so no biggie.
# Anon/Fang
default anonscore = 0
default fangscore = 0
default wingStory = False
# Chapter variables
default chapter_list_length = get_chapter_list_length()
default chapter_list_index = 0 # Index number for the current position of the chapter_list array
default current_chapter = chapter_list[chapter_list_index] # Store the name of the label as a string
# What ending we're on
default ending_route_number = None # A value of None signals to get_ending() to determine the value based off anon/fang scores when it is called
default ending_chapters_determined = False
+28 -81
View File
@@ -89,17 +89,6 @@ init 999 python:
'DatFeelFrog',
'CMDR Andrea Dornan'
],
_('Translators (Polish):'): [
'benn55',
'DI MOLTO',
'Man_of_Krieg',
'ReD',
],
_('Translators (Italian):'): [
'Dsatta',
'rc_05',
'Anon_theFox',
],
_('Proofreaders (Spanish):'): [
'ElBan Anón',
'GMAnon'
@@ -110,10 +99,6 @@ init 999 python:
'YtkaGen',
'DatFeelFrog'
],
_('Proofreaders (Italian):'): [
'Solidus333',
'Dsatta',
],
_('Asset help (Spanish):'): [
'Arkiangelo Anon'
],
@@ -121,37 +106,7 @@ init 999 python:
'Gexahord',
'YtkaGen',
'2ch Anon'
],
_('Asset help (Italian):'): [
'Dsatta',
],
_('Promo Art (Italian):'): [
'Kaprakaz',
],
_('Translators (Portuguese):'): [
'SusiAnon',
'MacacAnon'
],
_('Proofreaders (Portuguese):'): [
'SusiAnon',
'Pillow Anon',
'UltrAnon'
],
_('Asset help (Portuguese):'): [
'UltrAnon',
'D.Anon',
'NightArt'
],
_('Promo Art (Portuguese):'): [
'Ironclad Jimbo',
'Cdpraxis',
],
_('Translator (Thai):'): [
'Armorchin'
],
_('Promo Art (Thai):'): [
'Armorchin'
],
]
}
textlist = []
@@ -161,8 +116,8 @@ init 999 python:
#sizes in px
SIZE_SNOT_GAMES = 68*3+10
SIZE_TITLE = 32*3+10
SIZE_ENTRY = 19.75*3+10
SIZE_TL = 19.75*2+10
SIZE_ENTRY = 22*3+10
SIZE_TL = 22*2+10
SIZE_ENDER = 52*3+10
#there is line_spacing but don't usei t
@@ -204,7 +159,7 @@ init 999 python:
tgrid.append(Null())
pass
tgrid = Grid(TL_WIDTH, TL_HEIGHT, *tgrid, xspacing=40) #helps with longer translation names
tgrid = Grid(TL_WIDTH, TL_HEIGHT, *tgrid)
textlist.append(tgrid)
textlist.append(Null(1, 16*12)) #check
@@ -247,50 +202,43 @@ label test_credits:
# Credits definitions moved here so everything that needs to be changed is is one place.
#
# Anytime the credits changes to include more translators, you're just going to have to guess what the correct
# value to offset everything is again. You only need to concern yourself with the panning_stop and panning_duration variable
#
# value to offset everything is again. Mainly concerning values that control the panning destination of credits text,
# and the height of the credits text itself
# My recommendation is to imagine a square on top of the "T" in "THE END"
# The square is as long as one of those characters, and the top of the square should touch the top of the screen
# when the credits stop scrolling
#
# Someone please come up with an exact formula pls
## i would but i blame the lack access to basic text tools, like i can't figure out the kerning or the rect/AABB of a line?
init python:
# Note: Measuring in pixels
panning_stop = 15070 # How far the panning will go down
panning_stop_bg = 8100 # How far the background images will pan, to create the parallax effect (I can't believe cuckedmanon didn't like this!)
panning_duration = 77 # How long in seconds
credits_img_offset = panning_stop + 550 # Distance away from panning_stop where the image will render
credits_img_boundary = credits_img_offset + 590 # The offset + the height of the credits image file
# Remember, ending sketch is always +550 of when the Pan stops
image credits_coverup:
"black"
crop (0, 0, 1920, 1080)
image b_credits_text = Composite(
(1920, credits_img_boundary),
(1920, 13235),
(0, 390), "credits_hbox",
(0, credits_img_offset), "b_sketch"
(0, 12705), "b_sketch"
)
image c_credits_text = Composite(
(1920, credits_img_boundary),
(1920, 13235),
(0, 390), "credits_hbox",
(0, credits_img_offset), "c_sketch"
(0, 12705), "c_sketch"
)
image d_credits_text = Composite(
(1920, credits_img_boundary),
(1920, 13235),
(0, 390), "credits_hbox",
(0, credits_img_offset), "d_sketch"
(0, 12705), "d_sketch"
)
label lending:
if ending_route_number == 4:
call get_ending from _call_get_ending_4
if _return == 4:
pause 0.5
show snootgame_big with dissolve:
show snootgame_big with dissolve: # Renpy not allowing you to grab images from the gui folder is serious bullshit
subpixel True
xalign 0.5
yalign 0.5
@@ -308,17 +256,17 @@ label lending:
hide snootgame_big
with dissolve
show credits_base at Pan((0, -1080),(0, panning_stop_bg), panning_duration):
show credits_base at Pan((0, -1080),(0, 8100), 65):
subpixel True
show d_credits_text at Pan((0, 0),(0, panning_stop), panning_duration):
show d_credits_text at Pan((0, 0),(0, 12155), 65):
subpixel True
show credits_coverup at Pan((0, 0),(0, panning_stop), panning_duration):
show credits_coverup at Pan((0, 0),(0, 12155), 65):
subpixel True
pause 50
queue music 'audio/OST/amberlight brillance live end.ogg'
queue music "<silence 1.0>" loop
elif ending_route_number == 3:
elif _return == 3:
play music "audio/OST/Dino Destiny Reader.ogg"
pause 0.5
show c_credits_text:
@@ -327,9 +275,9 @@ label lending:
show c_credits_text:
crop None
pause 2.75
show credits_base at Pan((0, -1080),(0, panning_stop_bg), panning_duration) behind c_credits_text:
show credits_base at Pan((0, -1080),(0, 8100), 65) behind c_credits_text:
subpixel True
show c_credits_text at Pan((0, 0),(0, panning_stop), panning_duration):
show c_credits_text at Pan((0, 0),(0, 12155), 65):
crop None
subpixel True
else:
@@ -341,24 +289,23 @@ label lending:
show b_credits_text:
crop None
pause 2.75
show credits_base at Pan((0, -1080),(0, panning_stop_bg), panning_duration) behind b_credits_text:
show credits_base at Pan((0, -1080),(0, 8100), 65) behind b_credits_text:
subpixel True
show b_credits_text at Pan((0, 0),(0, panning_stop), panning_duration):
show b_credits_text at Pan((0, 0),(0, 12155), 65):
crop None
subpixel True
pause
stop music fadeout 5
scene black with Dissolve(3)
pause 2
if ending_route_number == 3:
if tradwife:
scene c10 with Dissolve(1.5)
pause 20
scene black with Dissolve(2)
pause 1
elif ending_route_number == 4:
elif anonscore >= 4 and fangscore >= 4:
scene golden ending with Dissolve(1.5)
pause 20
scene black with Dissolve(2)
pause 1
$ MainMenu(confirm=False) () # Exits to the main menu
return
@@ -352,18 +352,6 @@ init 1 python:
# aight, time for the stuff that isn't gallery required.
### SPLASHSCREEN
image caveintrosequence:
"caveintro"
alpha 0
time 0.5
linear 3.5 alpha 1
time 10
linear 1 alpha 0
### OTHER
@@ -1063,7 +1051,7 @@ image naomi prom lessblurred = im.Flip(im.Blur('images/naomi/naomi prom neutral.
#image emptyroomnight = "images/backgrounds/emptyroomnight.webp"
#image naomifangcg = "images/cgs/naomifangcg.webp"
#image naomifangcg blur = im.Blur("images/cgs/naomifangcg.webp", 1.5)
image naomifangcg blur = im.Blur("images/cgs/naomifangcg.webp", 1.5)
image naomiletter = 'images/cgs/naomiletter.webp'
#image ending_d_cg = 'images/cgs/golden ending.webp'
@@ -1435,8 +1423,7 @@ image iris = im.FactorScale(im.MatrixColor("vfx/iris.webp",im.matrix.opacity(0.9
# CHAPTER 5
image fang_tail_movie = Movie(channel="movie_dp", loop=True, play="images/animations/fang tail.webm") # New way of playing movies as of Renpy 8.1
image fang tail = Movie(play="animations/fang tail.webm",loop=True)
# CHAPTER 11
@@ -1561,28 +1548,28 @@ image fang very sad blur flip = im.Flip("highres/bluralt/fang very sad blur.webp
image naomi neutral blur flip = im.Flip("highres/bluralt/naomi neutral blur.webp", horizontal=True)
image fang pneutral blur = Composite(
(1412, 1500),
#(2683, 2850),
(0, 0), "highres/bluralt/fang neutral blur.webp",
(0, 0), "highres/bluralt/amberpendant1 blur.webp"
(1412, 1500),
#(2683, 2850),
(0, 0), "highres/bluralt/fang neutral blur.webp",
(0, 0), "highres/bluralt/amberpendant1 blur.webp"
)
image fang pbird happy blur = Composite(
(1412, 1500),
#(2683, 2850),
(0, 0), "highres/bluralt/fang flip off happy blur.webp",
(0, 0), "highres/bluralt/amberpendant1 blur.webp"
(1412, 1500),
#(2683, 2850),
(0, 0), "highres/bluralt/fang flip off happy blur.webp",
(0, 0), "highres/bluralt/amberpendant1 blur.webp"
)
image fang pneutral blur flip = Composite(
(1412, 1500),
#(2683, 2850),
(0, 0), im.Flip("highres/bluralt/fang neutral blur.webp", horizontal=True),
(0, 0), im.Flip("highres/bluralt/amberpendant1 blur.webp", horizontal=True)
(1412, 1500),
#(2683, 2850),
(0, 0), im.Flip("highres/bluralt/fang neutral blur.webp", horizontal=True),
(0, 0), im.Flip("highres/bluralt/amberpendant1 blur.webp", horizontal=True)
)
image fang pbird happy blur flip = Composite(
(1412, 1500),
#(2683, 2850),
(0, 0), im.Flip("highres/bluralt/fang flip off happy blur.webp", horizontal=True),
(0, 0), im.Flip("highres/bluralt/amberpendant1 blur.webp", horizontal=True)
(1412, 1500),
#(2683, 2850),
(0, 0), im.Flip("highres/bluralt/fang flip off happy blur.webp", horizontal=True),
(0, 0), im.Flip("highres/bluralt/amberpendant1 blur.webp", horizontal=True)
)
image raymba2 flip = im.Flip("raymba/raymba2.webp", horizontal=True)
+13 -12
View File
@@ -31,7 +31,7 @@ screen ex_ch_button(filename, label, function):
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 size 34
text label xalign 0.5 yalign 0.5 xanchor 0.5 size 34
# label_functions is [ [ "label", function() ], [ "foobar", foobar() ], .. ]
# Reuse the same image string and keep things 'neat'.
@@ -59,13 +59,15 @@ screen ex_ch_menu():
for i in range(8, 8-w, -1):
ex_chapters_menu.remove(ex_chapters[i])
ex_chapters_menu.pop()
else:
if not (persistent.bonus_chapters == 0b111111111):
ex_chapters_menu.pop()
tag menu
style_prefix "main_menu"
use main_menu_background
add gui.main_menu_background
frame:
xsize 420
yfill True
background "gui/overlay/main_menu.png"
#side_yfill True
vbox:
@@ -87,15 +89,14 @@ screen ex_ch_menu():
mousewheel True
draggable True
pagekeys True
$ main_menu_button_img = "gui/button/menubuttons/template_idle_epilogue.png" if persistent.use_epilogue_menu else "gui/button/menubuttons/template_idle.png"
vbox:
#xpos 1885
spacing 12
#yalign 0.98
use ex_ch_button(main_menu_button_img, "Return", ShowMenu("main_menu"))
use ex_ch_button("gui/button/menubuttons/template_idle.png", "Return", ShowMenu("main_menu"))
#use ex_ch_button("gui/button/menubuttons/template_idle.png", str(e), ShowMenu("main_menu"))
if len(ex_chapters_menu):
use ex_ch_buttons(main_menu_button_img, ex_chapters_menu )
use ex_ch_buttons("gui/button/menubuttons/template_idle.png", ex_chapters_menu )
for x in range(0, len(ex_chapters) - len(ex_chapters_menu)):
use ex_ch_button(main_menu_button_img, "???", None)
use ex_ch_button("gui/button/menubuttons/template_idle.png", "???", None)
-225
View File
@@ -1,225 +0,0 @@
init python:
# function for insult layers
import random
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])
# some stupid bullshit you have to do to get sounds playing in an ATL block
def fang_kicks_a_car_workaround_sfx_fuck_renpy(a,b,c):
if random.random() > 0.5:
renpy.play('audio/effects/carKick1.ogg', channel='audio')
else:
renpy.play('audio/effects/carKick2.ogg', channel='audio')
# renpy.play('audio/effects/carSuspension1.ogg', channel='audio')
#for the undefined characters, copy similar to the base character
def say_arguments_callback(char, *args, **kwargs):
kwargs["ctc"] = "ctc_end_marker"
kwargs["ctc_pause"] = "ctc_mid_marker"
kwargs["ctc_timedpause"] = Null()
kwargs["ctc_position"] = "nestled"
return args, kwargs
define config.say_arguments_callback = say_arguments_callback
transform randPosition:
alpha 0.0
xalign random.uniform(0.2,0.8)
yalign random.uniform(0.2,0.8)
linear 0.6 alpha 1.0
linear 1.0 alpha 0.0
#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 base = Character (ctc="ctc_end_marker", ctc_pause="ctc_mid_marker", ctc_timedpause=Null(), ctc_position="nestled-close") # 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 LM = Character (_("Lucy's Mom"), base, color="#FFD8F6", who_outlines=[(gui.name_text_thickness, '#521947')]) # Bright Pink
define LD = Character (_("Lucy'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
define Riley = Character (_('Riley'), base, color="#B675E6", who_outlines=[(gui.name_text_thickness, '#1F0632')]) # TODO
define Tana = Character (_('Tana'), base, color="#B675E6", who_outlines=[(gui.name_text_thickness, '#1F0632')]) # TODO
define Trevor = Character (_('Trevor'), base, color="#B675E6", who_outlines=[(gui.name_text_thickness, '#1F0632')]) # TODO
#long TB chars
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
define FangAndTrish = Character(_('Fang and Trish'), base, color="#42DFA8", who_outlines=[(gui.name_text_thickness, '#183623')])
define NaserAndNaomi = Character(_('Naser and Naomi'), base, color="#22DFA8", who_outlines=[(gui.name_text_thickness, '#2036B3')])
define TeamMember = Character(_('Team member'), base, color="#D32552", who_outlines=[(gui.name_text_thickness, '#445F42')])
define Everyone = Character(_('Everyone'), base, color="#A45489", who_outline=[(gui.name_text_thickness, '#4F5F81')])
define Chet = Character(_('Chet'), base, color="#B45411", who_outline=[(gui.name_text_thickness, '#BF5F81')])
#Custom Vars for positions
transform scenter:
xalign 0.5 yalign 0.0
transform sleft:
xalign 0.0 yalign 0.0
transform sright:
xalign 1.0 yalign 0.0
#Stella
transform stcenter:
xalign 0.5 yalign 0.1
transform stleft:
xalign 0.0 yalign 0.1
transform stright:
xalign 1.0 yalign 0.1
#Anon
transform acenter:
xalign 0.5 yalign 0.1
transform aleft:
xalign 0.0 yalign 0.1
transform aright:
xalign 1.0 yalign 0.1
#Naser
transform ncenter:
xalign 0.6 yalign 0.1
transform nleft:
xalign -0.2 yalign 0.1
transform nright:
xalign 1.9 yalign 0.1
#Fangs mom
transform fmcenter:
xalign 0.5 yalign 0.1
transform fmleft:
xalign 0.0 yalign 0.1
transform fmright:
xalign 1.0 yalign 0.1
#Trish
transform tcenter:
xalign 0.5 yalign 0.1
transform tleft:
xalign 0.0 yalign 0.1
transform tright:
xalign 1.0 yalign 0.1
#Reed and other long tailed dinos
transform rcenter:
xalign 1.2 yalign 0.1
transform rleft:
xalign -0.2 yalign 0.1
transform rright:
xalign 1.7 yalign 0.1
#misc transforms
transform shudder:
subpixel True
alignaround (.5, .5) xalign .5 yalign .5
rotate 0
linear 0.0 rotate -0.75
block:
linear 0.04 rotate 0.75
linear 0.05 rotate -0.75
linear 0.07 rotate 0
transform turnaround:
linear 0.1 xzoom -1.0
transform wiggle:
subpixel True
block:
xpos 0.5 ypos 1.0 xanchor 0.5 yanchor 1.0 zoom 1.02
alignaround (.5, .5)
linear 10.0 yalign 1.0 clockwise circles 1
repeat
transform raymbatransform:
xcenter 0.6 ycenter 0.385 zoom 0.5
# PHONE SCROLLING
transform cursortransform:
block:
yalign 0.2 xalign 0.60
pause .25
easein_cubic 1 yalign 0.75 xalign 0.54
pause .5
repeat
screen prompt():
fixed:
add "cursor"
screen mousedetect():
transform: # thanks based nutbuster
zoom 0.8
rotate 12.5
mousearea:
area(432, -75, 795, 1100)
# xalign 0.5 yanchor 0 ypos 0
hovered Hide("prompt" )
unhovered Show("prompt")
screen textscroll():
timer 2.0 action(Show("mousedetect"), Show("prompt"))
add Solid("FFF")
transform:
zoom 0.8
rotate 12.5
viewport:
xalign 0.51 yanchor 0 ypos -75 xysize(795, 1150)
child_size(795, 7650)
draggable True
arrowkeys True
# edgescroll(400, 800)
yinitial 1.0
imagebutton auto "fangbutton%s" xalign 0.53 yanchor 0.5:
ypos 65+(int(107/2))
xsize 284
ysize 107
action (Hide("mousedetect"), Hide("prompt"), Hide("textscroll", transition=Dissolve(1.0)), Return())
add "texts"
add "fang phone"
# Naser's position when helping Anon get up
transform nmidright:
xalign 1.5 yalign 0.08
# Naomi's position when handing the brochure to Anon
transform scloserleft:
xalign 0.1 yalign 0.0
+75 -1069
View File
File diff suppressed because it is too large Load Diff
-90
View File
@@ -1,90 +0,0 @@
# RoundedCorners() rounds the corners of a displayable you give it
python early:
def normalize_color(col):
a = col[3] / 255.0
r = a * col[0] / 255.0
g = a * col[1] / 255.0
b = a * col[2] / 255.0
return (r, g, b, a)
_rounded_corners_relative = {
None: 0.0,
"min": 1.0,
"max": 2.0,
"width": 3.0,
"height": 4.0,
}
def RoundedCorners(child, radius, relative=None, outline_width=0.0, outline_color="#fff", **kwargs):
if not isinstance(radius, tuple): radius = (radius,) * 4
relative = _rounded_corners_relative[relative]
outline_color = normalize_color(Color(outline_color))
return Transform(child, mesh=True, shader="shader.rounded_corners", u_radius=radius, u_relative=relative, u_outline_color=outline_color, u_outline_width=outline_width, **kwargs)
CurriedRoundedCorners = renpy.curry(RoundedCorners)
renpy.register_shader("shader.rounded_corners", variables="""
uniform vec4 u_radius;
uniform float u_outline_width;
uniform vec4 u_outline_color;
uniform float u_relative;
uniform sampler2D tex0;
attribute vec2 a_tex_coord;
varying vec2 v_tex_coord;
uniform vec2 u_model_size;
""", vertex_200="""
v_tex_coord = a_tex_coord;
""", fragment_functions="""
float rounded_rectangle(vec2 p, vec2 b, float r) {
return length(max(abs(p) - b + r, 0.0)) - r;
}
float get_radius(vec2 uv_minus_center, vec4 radius) {
vec2 xy = (uv_minus_center.x > 0.0) ? radius.xy : radius.zw;
float r = (uv_minus_center.y > 0.0) ? xy.x : xy.y;
return r;
}
""", fragment_200="""
vec2 center = u_model_size.xy / 2.0;
vec2 uv = (v_tex_coord.xy * u_model_size.xy);
vec2 uv_minus_center = uv - center;
float radius = get_radius(uv_minus_center, u_radius);
vec4 color = texture2D(tex0, v_tex_coord);
if (u_relative != 0.0) {
float side_size;
if (u_relative == 1.0) {
side_size = u_model_size.x;
} else if (u_relative == 2.0) {
side_size = u_model_size.y;
} else if (u_relative == 3.0) {
side_size = min(u_model_size.x, u_model_size.y);
} else {
side_size = max(u_model_size.x, u_model_size.y);
}
radius *= side_size;
}
if (u_outline_width > 0.0) {
vec2 center_outline = center - u_outline_width;
float crop1 = rounded_rectangle(uv - center, center, radius);
float crop2 = rounded_rectangle(uv - center, center_outline, radius - u_outline_width);
float coeff1 = smoothstep(1.0, -1.0, crop1);
float coeff2 = smoothstep(1.0, -1.0, crop2);
float outline_coeff = (coeff1 - coeff2);
gl_FragColor = mix(vec4(0.0), mix(color, u_outline_color, outline_coeff), coeff1);
}
else {
float crop = rounded_rectangle(uv_minus_center, center, radius);
gl_FragColor = mix(color, vec4(0.0), smoothstep(0.0, 1.0, crop));
}
""")
+19 -5
View File
@@ -1,10 +1,24 @@
label splashscreen:
if not renpy.get_autoreload() and not persistent.reloading_mods:
show caveintrosequence
play sound 'audio/OST/startup.ogg'
pause 11.2
stop sound
$ persistent.splashtype = random.randint(0,2000 - 1)
image caveintrosequence:
"caveintro"
alpha 0
time 0.5
linear 3.5 alpha 1
time 10
linear 1 alpha 0
show caveintrosequence
play sound 'audio/OST/startup.ogg'
pause 11.2
stop sound
if (persistent.languaged_up is None):
$ persistent.languaged_up = True
$ preferences.set_volume('ui', config.default_sfx_volume) # hack
call screen lang_sel
return
-53
View File
@@ -1,53 +0,0 @@
init -1 python:
# This function name is a misnomer, this actually counts endings as seen when the player reaches the ending cards when this is called
# And it's done in the most retarded way possible because someone thought it'd be funny.
def ending_image():
#0b0000, DCBA, flash the bits with |=, check with &
endings = 0b0000
_e = 0b1
for i in range(1, 5):
fn = "e"+str(i)+"of4"
endings |= (_e * renpy.seen_image(fn))
_e = _e << 0b1
persistent.old_endings = persistent.endings
persistent.endings = endings
init python:
# Sequences through the chapter_list list with chapter_list_index as a pointer
def next_story_chapter():
global chapter_list_index, current_chapter, chapter_list, ending_route_number, chapter_list_length, ending_chapters_determined
if chapter_list_index < chapter_list_length:
chapter_list_index += 1
current_chapter = chapter_list[chapter_list_index]
renpy.call(current_chapter)
# Safeguard if setup_ending wasn't called somehow
elif not ending_chapters_determined:
setup_ending(get_ending())
# We're at an ending
else:
ending_image() # Count endings that have seen the ending cards as seen
if ending_route_number == 1:
renpy.quit()
else:
renpy.call("lending")
# Adds ending chapters to chapter_list and sets the ending number
def setup_ending(ending):
global ending_route_number, chapter_list, chapter_list_length, ending_chapters_determined
if not ending_chapters_determined:
ending_route_number = ending
# Add ending chapters
chapter_list.extend(ending_routes[ending_route_number])
chapter_list_length = get_chapter_list_length() # chapter_list_length is updated to reflect the addition to the chapter_list array
ending_chapters_determined = True
def get_chapter_list_length():
global chapter_list
return len(chapter_list) - 1
+129 -107
View File
@@ -1,108 +1,130 @@
init offset = -1
default persistent.seenWarning = []
default persistent.languaged_up = None
init python:
from math import ceil
notice = _("NOTICE: Please keep in mind this is a fan translation, and as such it may not be completely accurate to the original intent of any written lines.")
languages = [
{'image': 'gui/flag/USofA.png', 'name': 'English', 'value': 'en' },
{'image': 'gui/flag/Mexico.png', 'name': 'Español', 'value': 'es'},
{'image': 'gui/flag/Rus.png', 'name': 'Русский', 'value': 'ru'},
{'image': 'gui/flag/Poland.png', 'name': 'Polski', 'value': 'pl'},
{'image': 'gui/flag/Italy.png', 'name': 'Italiano', 'value': 'it'},
{'image': 'gui/flag/Brazil.png', 'name': 'Português (BR)', 'value': 'pt_br'},
{'image': 'gui/flag/Thai.png', 'name': 'ภาษาไทย', 'value': 'th'}
]
#This was done so it would work with whatever amount of languages you wanted, I tried it with up to 200 and it worked nicely.
maxItems = len(languages)
maxRows = ceil(maxItems/4)
if maxItems > 4:
maxItems = 4*maxRows
init:
transform renpysdumb: # Needed to scale down the imagebuttons.
zoom 0.5
transform icon: #For the preferences screen
truecenter
zoom 0.1
transform glowie(img):
img
easein_cubic 0.30 matrixcolor TintMatrix(Color((255, 255, 255)))
transform darkie(img):
img
easeout_cubic 0.30 matrixcolor TintMatrix(Color((255/2, 255/2, 255/2)))
screen lang_sel():
tag menu
frame:
background Transform(gui.main_menu_background, matrixcolor=TintMatrix('#222'))
padding (120, 40)
vbox:
style_prefix "navigation"
vbox:
label _("Choose Your Language") text_size 80
add Null(0, 40)
vpgrid:
if maxItems <= 4:
cols maxItems
rows 1
else:
cols 4
rows maxRows
#spacing 30
draggable True
mousewheel True
if maxRows > 3:
scrollbars "vertical"
for i in range(maxItems):
fixed:
xsize 400
ysize 300
vbox:
if i<len(languages):
text languages[i]["name"] at top
add Null(0,10)
imagebutton:
idle darkie(languages[i]["image"])
hover glowie(languages[i]["image"])
action If(languages[i]["value"] in persistent.seenWarning or languages[i]["value"] == 'en',
true = [Language(languages[i]["value"]), SetVariable("persistent.languaged_up", True), Return()],
# Important to change the language before calling notice. Otherwise it will be in english.
false = [Language(languages[i]["value"]), AddToSet(set=persistent.seenWarning, value=languages[i]["value"]), SetVariable("persistent.languaged_up", True), Show(screen="OkPrompt", message=notice, action=[ Hide(), Return() ])]
)
at renpysdumb # Scales the imagebutton down. No, you can't just specify the zoom here. It has to be a defined transform.
else:
# Renpy seethes if a vpgrid doesn't have the exact maximum amount of items for some reason.
add Null(0,0)
at truecenter
screen lang_button(lang):
hbox:
spacing 15
textbutton lang["name"]:
activate_sound "audio/ui/uiRollover.wav"
action If(lang["value"] in persistent.seenWarning or lang["value"] == 'en',
true = [Language(lang["value"])],
false = [Language(lang["value"]), AddToSet(set=persistent.seenWarning, value=lang["value"]), Show(screen="OkPrompt", message=notice)]
)
if _preferences.language == lang["value"]:
add glowie(lang["image"]) at icon
else:
init offset = -1
screen OkPrompt(message, go_menu):
modal True
zorder 200
style_prefix "confirm"
add "gui/overlay/confirm.png"
frame:
vbox:
xalign .5
yalign .5
spacing 30
label _(message):
style "confirm_prompt"
xalign 0.5
hbox:
xalign 0.5
spacing 100
textbutton _("OK") activate_sound "audio/ui/uiClick.wav" action If(go_menu, true=MainMenu(False,False), false=Hide())
default persistent.seenWarning = []
init python:
from math import ceil
notice = _("NOTICE: Please keep in mind this is a fan translation, and as such it may not be completely accurate to the original intent of any written lines.")
languages = [
{'image': 'gui/flag/USofA.png', 'name': 'English', 'value': None },
{'image': 'gui/flag/Mexico.png', 'name': 'Español', 'value': 'es'},
{'image': 'gui/flag/Rus.png', 'name': 'Русский', 'value': 'ru'}
]
#This was done so it would work with whatever amount of languages you wanted, I tried it with up to 200 and it worked nicely.
maxItems = len(languages)
maxRows = ceil(maxItems/4)
if maxItems > 4:
maxItems = 4*maxRows
init:
transform renpysdumb: # Needed to scale down the imagebuttons.
zoom 0.5
transform icon: #For the preferences screen
truecenter
zoom 0.1
transform glowie(img):
img
easein_cubic 0.30 matrixcolor TintMatrix(Color((255, 255, 255)))
transform darkie(img):
img
easeout_cubic 0.30 matrixcolor TintMatrix(Color((255/2, 255/2, 255/2)))
screen lang_sel():
tag menu
frame:
background Transform(gui.main_menu_background, matrixcolor=TintMatrix('#222'))
padding (120, 40)
vbox:
style_prefix "navigation"
vbox:
label _("Choose Your Language") text_size 80
add Null(0, 40)
vpgrid:
if maxItems <= 4:
cols maxItems
rows 1
else:
cols 4
rows maxRows
#spacing 30
draggable True
mousewheel True
if maxRows > 3:
scrollbars "vertical"
for i in range(maxItems):
fixed:
xsize 400
ysize 300
vbox:
if i<len(languages):
text languages[i]["name"] at top
add Null(0,10)
imagebutton:
idle darkie(languages[i]["image"])
hover glowie(languages[i]["image"])
action If(languages[i]["value"] in persistent.seenWarning or languages[i]["value"] == None,
true = [Language(languages[i]["value"]), MainMenu(False,False)],
# Important to change the language before calling notice. Otherwise it will be in english.
false = [Language(languages[i]["value"]), AddToSet(set=persistent.seenWarning, value=languages[i]["value"]), Show(screen="OkPrompt", message=notice, go_menu=True)]
)
at renpysdumb # Scales the imagebutton down. No, you can't just specify the zoom here. It has to be a defined transform.
else:
# Renpy seethes if a vpgrid doesn't have the exact maximum amount of items for some reason.
add Null(0,0)
at truecenter
screen lang_button(lang):
hbox:
spacing 15
textbutton lang["name"]:
activate_sound "audio/ui/uiRollover.wav"
action If(lang["value"] in persistent.seenWarning or lang["value"] == None,
true = [Language(lang["value"])],
false = [Language(lang["value"]), AddToSet(set=persistent.seenWarning, value=lang["value"]), Show(screen="OkPrompt", message=notice, go_menu=False)]
)
if _preferences.language == lang["value"]:
add glowie(lang["image"]) at icon
else:
add darkie(lang["image"]) at icon
-41
View File
@@ -1,41 +0,0 @@
## Utility functions for game setup, debugging etc.
init python:
def get_ending():
if ending_route_number == None:
if anonscore >= 4 and fangscore >= 4 and wingStory:
return 4 # Golden
elif anonscore >= 3 and fangscore <= 4:
return 3 # Tradwife
elif anonscore <= 3 and fangscore >= 3:
return 2 # Doomer
else:
return 1 # Shooter
else:
return ending_route_number
def debug_story_variables(toggle=True):
var_list = [
"anonscore",
"fangscore",
"current_chapter",
"chapter_list_length",
"chapter_list_index",
"ending_route_number",
"ending_chapters_determined"
]
for item in var_list:
if toggle:
renpy.watch(item)
else:
renpy.unwatch(item)
def toggle_debug():
if persistent.enable_debug_scores:
debug_story_variables(False)
debug_story_variables(True)
+55
View File
@@ -0,0 +1,55 @@
init -1 python:
def ending_image():
#0b0000, DCBA, flash the bits with |=, check with &
endings = 0b0000
_e = 0b1
for i in range(1, 5):
fn = "e"+str(i)+"of4"
endings |= (_e * renpy.seen_image(fn))
_e = _e << 0b1
persistent.old_endings = persistent.endings
persistent.endings = endings
label storyline:
call chapter_1 from _call_chapter_1
call chapter_2 from _call_chapter_2
call chapter_3 from _call_chapter_3
call chapter_4 from _call_chapter_4
call chapter_5 from _call_chapter_5
call chapter_6 from _call_chapter_6
call chapter_7 from _call_chapter_7
call chapter_8 from _call_chapter_8
call chapter_9 from _call_chapter_9
call chapter_10 from _call_chapter_10
call chapter_11 from _call_chapter_11
call get_ending from _call_get_ending_5
if _return == 4:
call chapter_11D from _call_chapter_11D
call chapter_12D from _call_chapter_12D
call chapter_12_5D from _call_chapter_12_5D
call chapter_13D from _call_chapter_13D
call chapter_14D from _call_chapter_14D
elif _return == 3:
$ tradwife = True
call chapter_11C from _call_chapter_11C
call chapter_12C from _call_chapter_12C
call chapter_12_5C from _call_chapter_12_5C
call chapter_13C from _call_chapter_13C
call chapter_14C from _call_chapter_14C
elif _return == 2:
call chapter_11B from _call_chapter_11B
call chapter_12B from _call_chapter_12B
# no chapter_13 here since the scene is different enough to the other routes for everything to go into 13C
call chapter_13B from _call_chapter_13B
call chapter_14B from _call_chapter_14B
else:
call chapter_11A from _call_chapter_11A
call chapter_12A from _call_chapter_12A
call chapter_12_5D from _call_chapter_12_5D_1
call chapter_13A from _call_chapter_13A
call chapter_14A from _call_chapter_14A
$ ending_image()
$ renpy.quit()
$ ending_image()
call lending from _call_lending
return
+557 -836
View File
File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More