Compare commits

...

213 Commits

Author SHA1 Message Date
Map
ff359efd1b fix language selector being able to scroll horizontally
Some checks are pending
ci/woodpecker/push/woodpecker Pipeline is pending
ci/woodpecker/tag/woodpecker Pipeline was successful
ci/woodpecker/release/woodpecker Pipeline was successful
2024-10-12 07:40:54 -05:00
Map
3f2fc63950 document ending_image() 2024-10-11 19:13:41 -05:00
Map
ccadc0c179 increase credits time slightly 2024-10-11 18:57:07 -05:00
Map
420ed93ee2 Fix conditional dialogue to play properly while using the chapter select. Fix chapter 7's conditional dialogue to only play while on an ending 4 run
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2024-10-11 18:48:01 -05:00
Map
83d3c129fa fix debug scores not returning after the menu updates
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2024-10-11 18:25:54 -05:00
Map
b86f91e423 Update woodpecker to renpy 8.3.2
Some checks are pending
ci/woodpecker/push/woodpecker Pipeline is pending
ci/woodpecker/tag/woodpecker Pipeline was successful
ci/woodpecker/release/woodpecker Pipeline was successful
2024-10-11 16:31:33 -05:00
Map
b4a7223e9a cleanup classify functions
Some checks are pending
ci/woodpecker/push/woodpecker Pipeline is pending
2024-10-11 16:19:08 -05:00
Map
3776b2bc9d update gitignore to ignore mod folders
Some checks are pending
ci/woodpecker/push/woodpecker Pipeline is pending
2024-10-11 16:11:03 -05:00
46c47303d7 Merge pull request 'Fix Snootgame Building' (#253) from fix-snootgame-building into master
Some checks are pending
ci/woodpecker/push/woodpecker Pipeline is pending
Reviewed-on: #253
Reviewed-by: Mappening <mapanon@noreply.git.cavemanon.xyz>
2024-10-11 20:59:00 +00:00
6377fffba0 Remove renconstruct from build
Some checks are pending
ci/woodpecker/push/woodpecker Pipeline is pending
ci/woodpecker/pr/woodpecker Pipeline is pending
ci/woodpecker/pull_request_closed/woodpecker Pipeline is pending
2024-10-11 15:45:32 -05:00
b16bd97d33 Debloated builds and include renconstruct
Some checks are pending
ci/woodpecker/push/woodpecker Pipeline is pending
ci/woodpecker/pr/woodpecker Pipeline is pending
An option in the options.rpy made it so renconstruct.toml wasn't shipped
with the game AND the lack of an option made the game compile with the
dist/ folder being exported, meaning that the game would ship with an
android build unnecessarily.

Fixes: #239
Fixes: #240
2024-10-11 15:03:13 -05:00
Map
a82e51e477 tweaked a few language strings to look better in the menu
Some checks are pending
ci/woodpecker/push/woodpecker Pipeline is pending
2024-10-11 13:30:42 -05:00
Map
e7eb667820 update polish strings 2024-10-11 13:21:33 -05:00
520a728ebd Merge pull request 'New RU tl stuff' (#252) from Gexahord/SnootGameKGB:rutl-newstuff into master
Some checks are pending
ci/woodpecker/push/woodpecker Pipeline is pending
Reviewed-on: #252
Reviewed-by: Mappening <mapanon@noreply.git.cavemanon.xyz>
2024-10-11 15:14:03 +00:00
8686143ddd Promo Art Fix
Some checks are pending
ci/woodpecker/pr/woodpecker Pipeline is pending
ci/woodpecker/pull_request_closed/woodpecker Pipeline is pending
2024-10-11 06:07:18 +03:00
a0c0a22a41 New RU tl stuff 2024-10-11 00:08:32 +03:00
Map
6cea8fa94b add additional promo art credit 2024-10-10 14:40:02 -05:00
Map
1fad3b0b62 Update italian and spanish strings 2024-10-10 11:17:22 -05:00
Map
fc537fecc7 undo checking for conflicting properties (as it turns out enforcing cleaner code is inconvenient (especially if it's over something that doesn't show issues in the first place)) 2024-10-08 18:18:20 -05:00
Map
f3bb2caa7f put backspace functionality into the help menu 2024-10-08 13:17:03 -05:00
Map
3bf7e9e433 up the default volume slider 2024-10-07 20:59:14 -05:00
Map
d581c7884c makes the scroll toggle a little smarter 2024-10-07 20:15:57 -05:00
Map
3d51bae4a6 remove comment that no longer applies in mod menu 2024-10-07 20:14:54 -05:00
Map
5d44682f49 fix android mod buttons 2024-10-07 18:14:12 -05:00
Map
033175500c Fix mods without defined names not being assigned their folder name
Remove checks for the 'None' language as the user will never be assigned to it
Some comment typo fixes
Make reloading mods not play the splash screen
Pressing backspace will now hide the mod details pane, and shoe mod errors if there's any
Attempt at making a button for android to hide the details pane.
2024-10-07 17:10:10 -05:00
Map
2c2899e734 Turn on check conflicting properties (trolling modders one config var at a time) 2024-10-07 04:02:06 -05:00
Map
301035bad1 Fix some lint errors 2024-10-07 03:57:39 -05:00
Map
e06db742e2 Merge branch 'master' of https://git.cavemanon.xyz/Cavemanon/SnootGame 2024-10-07 03:07:10 -05:00
Map
610737fddf remove redundant imports for rounded corners 2024-10-07 03:07:03 -05:00
Map
e41d42d4e7 tweak rounded corners of mod icons 2024-10-07 03:06:54 -05:00
Map
7873a882a8 Add note about icon in mod README 2024-10-07 02:50:02 -05:00
Map
c045fcff26 nudge "no mods!" message down a bit 2024-10-07 02:49:53 -05:00
Map
81c646e81b remove unused gui images 2024-10-07 00:56:36 -05:00
Map
7612935547 turn on linear fades to prevent mixing from getting out of wack
and fucking fix those volume defaults once and for all
2024-10-07 00:51:56 -05:00
201cd61f63 Merge pull request 'Spanish Translation for new stuf' (#251) from Espaniolo into master
Reviewed-on: #251
2024-10-07 05:31:53 +00:00
Map
934a0dc72a change languaged_up to be set inside the lang_sel screen 2024-10-07 00:30:08 -05:00
9d1064c75e Spanish Translation for new stuf 2024-10-07 02:29:08 -03:00
Map
ca7406d0d9 Add pre-splash 2024-10-07 00:08:51 -05:00
Map
79ac93e6fd Turn on deferred languages 2024-10-06 23:23:58 -05:00
Map
019d5f4f44 Fixed language setup screen 2024-10-06 23:22:25 -05:00
Map
64b566d66b Set volume slider default 2024-10-06 23:15:57 -05:00
40ec930ab3 Merge pull request 'Improved epilgoue menu' (#250) from improved_epilogue_menu into master
Reviewed-on: #250
Reviewed-by: Legalo <legalo@noreply.git.cavemanon.xyz>
2024-10-07 03:00:23 +00:00
Map
b8d8a00f44 Give the mod menu the epilogue style.
Change the mod details pane to display the name of a mod if the display is set to "icon"
2024-10-06 21:46:08 -05:00
Map
fd21e45713 Merge branch 'master' into improved_epilogue_menu 2024-10-06 21:08:29 -05:00
87e9546d15 Merge pull request 'Backporting Wani's mod interface' (#249) from wani_mod_menu into master
Reviewed-on: #249
Reviewed-by: Legalo <legalo@noreply.git.cavemanon.xyz>
2024-10-07 02:00:49 +00:00
Map
a266c9508c Fix NOMODS flag clearing the load order
Mods that don't have loadable scripts are forced on
2024-10-06 20:30:04 -05:00
Map
b1719c4b21 make the mod toggle button disappear if the mod doesn't have any valid scripts loaded 2024-10-06 19:53:53 -05:00
Map
db337e64ae make the custom backgrounds more orange 2024-10-06 18:26:33 -05:00
Map
0e35c5a415 Expand epilogue menu style to include the rest of the menu's (except for the mod menu, for the time being) 2024-10-06 18:19:06 -05:00
Map
302c2f6b10 Change rollback side to only appear on Android 2024-10-06 18:17:54 -05:00
Map
c14c7b43be Remove redundant mobile variant of the extras menu 2024-10-06 15:49:49 -05:00
Map
5eb39a7c3c Merge branch 'master' into wani_mod_menu 2024-10-06 14:29:47 -05:00
Map
aa0eff4377 move mod buttons slightly higher, and create a seperate 'start' button for starting mods on Andoird 2024-10-06 14:27:48 -05:00
Map
e54c950ef6 Fix UI issues.
Tighten up mod display to include more buttons at once, showing the original while in android.
Expands mod buttons to fill the space the menu panel provides. Redone mod button images to fit aesthetically
Imports misc files for modding, including the readme and flags
2024-10-05 18:12:28 -05:00
Map
8dfa492442 forgor to return the fucking label that puts you into the main menu 2024-10-05 14:15:11 -05:00
Map
6a407f4630 fix typo blunders that crash the game 2024-10-05 14:07:09 -05:00
Map
2269086430 Bring all features from latest renpy updates into default renpy scripts 2024-10-05 09:42:58 -05:00
Map
902e435e6c Update common.rpym 2024-10-05 09:29:49 -05:00
Map
62cc1206ce remove score debug screen and image file 2024-10-05 09:26:49 -05:00
Map
42c05f0cbf Bring renpy sync back 2024-10-05 09:19:47 -05:00
Map
7904646359 Bring fast skipping to the skip button (fucking finally) 2024-10-05 09:14:16 -05:00
Map
e41e277f7b Re-enable voices volume slider 2024-10-05 09:03:18 -05:00
Map
fa2bf7e4a9 change comments in cg_gallery to a proper comment 2024-10-05 08:54:14 -05:00
Map
ffccaff704 fix conflicting properties 2024-10-05 08:49:05 -05:00
Map
84240297e5 document where snoot config vars are 2024-10-05 08:18:06 -05:00
Map
a8fb7bae19 correct some more lint errors 2024-10-05 08:16:02 -05:00
Map
cd21d816d3 correct minor russian lint error 2024-10-05 08:12:39 -05:00
Map
557ce88ff4 Remove check that makes developer tools only appear when config.developer is on 2024-10-05 08:09:52 -05:00
Map
7309c68119 Bring edgescroll toggling from Wani 2024-10-05 08:09:19 -05:00
Map
6c283a8dcd add back in mod menu options 2024-10-05 08:06:25 -05:00
Map
f0892157ab Remove redundant mod var setup 2024-10-05 08:06:13 -05:00
Map
dabac1f5f0 Implement internal 'en' language, and backport splashscreen fixes from Wani 2024-10-05 08:04:35 -05:00
Map
7d2203dc04 make the mod menu work (not testing mods) and slightly better the mod processing code 2024-10-04 20:55:43 -05:00
Map
963851af8e Fix android extra's menu not displaying the chapter select button, as well as removing the check that forces chapter select to be on when config.developer is true 2024-10-04 18:12:30 -05:00
Map
85d71da086 import wani mod script 2024-10-04 18:06:23 -05:00
4db1a76088 Italian Translation (#246)
Co-authored-by: dsatta <dsatta60@gmail.com>
Co-authored-by: nutbuster <nutbuster@cock.li>
Co-authored-by: Map <mapmappening@gmail.com>
Reviewed-on: #246
Reviewed-by: Mappening <mapanon@noreply.git.cavemanon.xyz>
Co-authored-by: MichaelYick <michaelyick@cavemanon.xyz>
Co-committed-by: MichaelYick <michaelyick@cavemanon.xyz>
2024-10-04 21:46:02 +00:00
Map
91abc6f87f Move some config vars to options.rpy 2024-10-03 10:15:14 -05:00
Map
3b53dc1f6f Move story var resetting so that it runs everytime the user enters the ending selection menu.
Fix list copying to work as intended
2024-10-03 10:09:29 -05:00
Map
e82064ef6b slightly better documentation for storyline.rpy 2024-10-03 07:22:12 -05:00
Map
c8b5c68649 Reset story vars when chapter select initializes 2024-10-03 07:21:59 -05:00
Map
6b93689456 Provide a const-like variable for chapter_list so it can be reset as needed 2024-10-03 07:15:35 -05:00
Map
f71b284e90 revise chapter select code again 2024-10-03 07:07:41 -05:00
267634783d Merge pull request 'Redo chapter select and minor clean up of code base' (#247) from chapter_select_and_misc_fixes into master
Reviewed-on: #247
Reviewed-by: Nutbuster <nutbuster@cock.li>
Reviewed-by: Legalo <legalo@noreply.git.cavemanon.xyz>
2024-10-03 03:19:00 +00:00
Map
73328cb2e1 final overhaul that should make everything work
Redid chapter names, sourced from the source snoot script
Tightened up transitions in chapter select
made all get_ending() checks use ending_route_number instead.
2024-10-02 11:16:26 -05:00
Map
10e8010f9b fix chapter select needing developer mode enabled 2024-10-02 10:52:48 -05:00
Map
5126f0e3ae fix oversight of me being retarded and removing an import without testing 2024-10-02 10:52:26 -05:00
Map
c3e365d01c Add setup_ending. Endings are now determined and setup the moment branching is required. 2024-10-02 07:27:34 -05:00
Map
3059d469f2 redo chapter select and chapter processing 2024-10-02 06:54:36 -05:00
Map
2a157e1362 add locking feature to get_ending (needed for chapter 11) 2024-10-02 06:34:35 -05:00
Map
1373bed36b document chapter_variables 2024-10-02 06:34:14 -05:00
Map
99997a4204 move all non-default renpy scripts into src 2024-10-01 17:17:59 -05:00
Map
cebabce278 document the few functions in script.rpy 2024-10-01 17:16:36 -05:00
Map
00166f6d3d move insult layers function into misc_definitions 2024-10-01 17:16:18 -05:00
Map
d9cb051d91 reorganize definitions into a seperate file.
Rename definitions.rpy into image_definitions.rpy
change some var defaults into actual default statements
2024-10-01 17:11:18 -05:00
Map
0ceae541a5 Add more safegaurds when entering the chapter select, rephrase some chapter select text 2024-10-01 17:03:38 -05:00
ee3f8b7152 Merge pull request 'Chapter navigation improvements' (#244) from Iggy/SnootGame:master into master
Reviewed-on: #244
Reviewed-by: Mappening <mapanon@noreply.git.cavemanon.xyz>
Reviewed-by: Legalo <legalo@noreply.git.cavemanon.xyz>
2024-10-01 21:04:54 +00:00
92ee2a56f1 Add exit game after ending 1
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
2024-09-18 12:00:03 -03:00
4d3801dd3d fix commit
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
2024-08-30 20:35:22 -03:00
aee5d8b610 find_chapter_in_array now exits to the main menu in case of error 2024-08-30 20:31:52 -03:00
4ce0d1df31 Merge branch 'add-ending-ch-select' 2024-08-30 20:16:08 -03:00
b1cc24fb2e chapter_select improvements 2024-08-30 20:03:19 -03:00
e0027f3c5d Add ending chapters to chapter-select tool 2024-08-30 19:45:30 -03:00
a787d1ceaf Remove unused globals 2024-08-30 17:33:26 -03:00
719f08ba24 Make set_scores function more readable 2024-08-30 15:18:00 -03:00
a31fa50d8a Functions refactoring 2024-08-30 15:02:24 -03:00
803e878c3f Remove is_end_of_chapters function 2024-08-30 14:40:28 -03:00
f38c53776c Remove tasks.patch 2024-08-30 14:35:02 -03:00
7865a0164c Remove unused globals
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
2024-08-29 18:23:32 -03:00
908d8f62f7 Remove lock_scores logic and point-increasing functions
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
2024-08-29 18:07:30 -03:00
76e61ee78e fix commit
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
2024-08-29 14:11:56 -03:00
dcff088d11 Remove unused build.classify
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline failed
2024-08-29 14:07:05 -03:00
9c3ddccbb5 Delete deprecated .android.json file
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
2024-08-26 17:30:35 -03:00
79dff8fcc9 Remove tasks.patch 2024-08-26 17:15:56 -03:00
ee8f5b04b7 Update versions to latest and greatest 2024-08-26 17:14:34 -03:00
98cd25dc47 Delete build.include_update 2024-08-26 17:02:38 -03:00
0665ce7f03 Delete update.pem 2024-08-26 16:43:46 -03:00
cacc68462a - Add missing build.classify
- Add android mkdir again
2024-08-26 16:28:30 -03:00
41e73b07cf Reenable apk build 2024-08-26 16:16:09 -03:00
baad1afda7 Remove android mkdir 2024-08-26 16:06:35 -03:00
331b628adf Delete .woodpecker 2024-08-26 15:59:21 -03:00
6d7f357dbb Disable android build
Add automated Woodpecker run
2024-08-26 15:55:19 -03:00
60f8efc6df Add build_patch task 2024-08-26 15:49:34 -03:00
fc3472692b Remove task_dir 2024-08-26 15:43:55 -03:00
e060956d82 Copy renconstruct.toml from Wani 2024-08-26 15:40:20 -03:00
7023a06020 Rename config.version 2024-08-26 15:29:04 -03:00
62ffab3bed Enable keystore task
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline failed
2024-08-25 21:52:06 -03:00
32894af0af Last try
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline failed
2024-08-25 21:43:52 -03:00
9078bb8aa1 Moar possible fixes
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline failed
2024-08-25 21:12:17 -03:00
ac1c51543e Update renconstruct dir command
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline failed
2024-08-24 22:17:42 -03:00
8dd717abeb Remove initial dot from android.json
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline failed
2024-08-24 19:40:26 -03:00
05b0525a3d delete task_dir
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline failed
2024-08-24 19:19:15 -03:00
01135c64b9 Modify cache directory
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline failed
2024-08-24 19:03:23 -03:00
2c325c0d3d Merge branch 'master' of https://git.cavemanon.xyz/Iggy/SnootGame
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline failed
2024-08-24 15:54:44 -03:00
a175a0bb12 Fix stuff 2024-08-24 15:52:23 -03:00
Ignacio
50b64f170e Add missing files to fix Woodpecker build
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline failed
2024-08-24 15:33:01 -03:00
fd7ac143af Add missing files to fix Woodpecker build 2024-08-24 15:33:01 -03:00
Ignacio
9ef954bd9f Add keystore keys from Wani
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline failed
2024-08-24 11:40:18 -03:00
4f4956f201 Add keystore keys from Wani 2024-08-24 11:40:18 -03:00
Ignacio
002e2b6a13 Delete android from woodpecker.yml
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline failed
2024-08-24 11:18:20 -03:00
949dfa4044 Delete android from woodpecker.yml 2024-08-24 11:18:20 -03:00
Ignacio
c06e73743a Remove tasks.convert_images
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline failed
Upgrade Renkit version
2024-08-24 10:54:38 -03:00
1f747f5101 Remove tasks.convert_images
Upgrade Renkit version
2024-08-24 10:54:38 -03:00
ae7454506e Enable tasks.keystore
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline failed
2024-08-23 21:56:48 -03:00
c020847800 Remove tasks.notarize
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline failed
2024-08-23 21:43:41 -03:00
a04c4e6912 Remove tasks.clean
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline failed
2024-08-23 21:34:24 -03:00
b048e9c32a Downgrade Renkit version
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline failed
2024-08-23 21:25:02 -03:00
84f6d467dd Update build commands
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline failed
2024-08-23 21:03:16 -03:00
dd6da86a8c Change tar compression option
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline failed
2024-08-23 20:14:09 -03:00
a75d26de8d Update Renkit url
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline failed
2024-08-23 19:58:07 -03:00
351e433504 Upgrade Renkit version to 4.4.0
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline failed
2024-08-23 19:49:45 -03:00
80bdae1d08 Add tasks.patch
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline failed
2024-08-23 19:32:41 -03:00
df967527e4 Update Renpy versions in woodpecker.yml and reconstruct.toml
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline failed
2024-08-23 18:48:39 -03:00
fef3b7beec Hide quick_menu in chapter selection
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
2024-08-23 17:45:04 -03:00
cee1984f4d Convert "selected_tuple" into local function variable 2024-08-22 23:26:33 -03:00
0fbff1b81b Code optimizations 2024-08-22 23:18:23 -03:00
84ccfc1b13 Add improved chapter_selection 2024-08-22 22:13:00 -03:00
b65ed32b14 Remove redundant 'initstats' label 2024-08-22 22:04:44 -03:00
c5ea9c9cb5 Move chapter related variables to new file 2024-08-22 22:03:50 -03:00
993824e152 Mode chapter_select into "src" folder 2024-08-22 19:27:44 -03:00
a65a5075fe Implement functions to increase Anon and Fang scores 2024-08-21 21:44:48 -03:00
4d449593f5 Initialize ending_route_number when selecting an ending 2024-08-21 21:32:15 -03:00
233a801aa5 select_chapter function improvements 2024-08-21 21:25:09 -03:00
59c229db73 Add chapters description to selection 2024-08-21 21:05:14 -03:00
afee5de501 Move back global variables to storyline 2024-08-20 22:09:17 -03:00
2d793f86af - Move variables out of utility
- Add increase_points functions
2024-08-20 22:09:04 -03:00
fb64284d84 Add chapter select buttons 2024-08-20 22:08:08 -03:00
72ea3dd640 Add chapter_select 2024-08-20 22:07:43 -03:00
966fca9fc5 Fix Chapter Select button yposition 2024-08-19 20:36:09 -03:00
b34ad59fb4 Add setting to enable or disable chapter select 2024-08-19 20:21:49 -03:00
a933c090e4 Add chapter_select file 2024-08-19 20:21:32 -03:00
17cdc25bb1 Add chapter select to screens 2024-08-19 20:21:23 -03:00
3e9ea5ddbc Add chapter_select file 2024-08-19 19:48:07 -03:00
b7da3f957e Test change
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
2024-08-19 18:36:01 -03:00
ce05fd5cdb Move story global variables initialization to the "initstats" label
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline failed
2024-08-18 22:45:14 -03:00
806151f430 Change start script to call the first chapter based on the "chapter_list_index" variable 2024-08-18 22:29:50 -03:00
859610e3bd storyline refactoring and improve function modularity 2024-08-18 22:25:53 -03:00
8b783f6838 Delete persistent ending variables from storyline 2024-08-18 21:14:40 -03:00
a046896907 Move persistent ending variables to screens.rpy 2024-08-18 21:13:45 -03:00
098c7dd021 storyline code cleanup 2024-08-18 21:10:30 -03:00
7084451986 Modify ending chapters to use the next_story_chapter function 2024-08-18 21:08:07 -03:00
ba0024f251 Modify storyline to extend the chapters array once the common chapters are finished 2024-08-18 21:06:13 -03:00
01e9ababa2 Delete commented lines from label get_ending 2024-08-18 12:48:53 -03:00
66d4b308af Delete commented lines from the storyline label 2024-08-18 12:46:40 -03:00
8b20ffaecd Remove init -999 python block for config.developer 2024-08-18 12:44:54 -03:00
97cc4252d5 Update FallingSky font to fix issue with words containing 'ft' 2024-08-18 12:41:03 -03:00
1864a917dc get_ending formatting
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
2024-08-17 13:26:00 -03:00
f8aa9d0459 Change call order for reset_debug_scores function 2024-08-17 13:25:05 -03:00
fc903d08fb Modify debug_story_variables to append or remove elements accordingly 2024-08-17 13:24:22 -03:00
e4d7b18bf2 Chapter 8 choices formatting 2024-08-17 12:07:11 -03:00
14b7d1a6ea Storyline optimizations and fixes 2024-08-16 21:01:55 -03:00
4a2a62478d Call main menu after credits 2024-08-16 20:58:32 -03:00
88279e9601 - Implement debug_story_variables function
- Modify initstats label to handle debugging and wingStory variable
2024-08-16 20:56:58 -03:00
afb67298ec Implement updated way of playing movies 2024-08-14 22:25:47 -03:00
0a4ab9609a Implement use of 'initstats' label during start 2024-08-11 23:15:13 -03:00
6a32d84d24 Add missing logic to 'next_story_chapter' function
Modify define statements
2024-08-11 23:13:20 -03:00
366c62d484 Comment out storyline and get_ending labels 2024-08-08 22:42:08 -03:00
c68090bf58 Replace return calls in ending chapters 2024-08-08 22:31:18 -03:00
1345686055 Replace return calls with next_story_chapter function 2024-08-08 21:21:36 -03:00
dbf1aa34ef Adjustments to next_ending_chapter function 2024-08-08 20:01:30 -03:00
c50eb0ce32 Replace get_ending label usage in credits.rpy 2024-08-08 19:51:58 -03:00
4b662b5488 Replace get_ending label usage for new function in chapter 11 2024-08-08 19:51:18 -03:00
79569c7441 Add call first element of the general_chapters array in script 2024-08-08 19:43:36 -03:00
297ca81c7c - Add array containing general chapters labels
- Add dictionary for endings
- Add chapter transition functions
2024-08-08 19:19:48 -03:00
Map
670a3624c5 actually fix the language selector jank so it can support longer named languages
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2024-07-20 14:30:25 -05:00
Map
50afe3a646 Merge branch 'flower-line' 2024-06-13 03:12:59 -05:00
Map
79a73ccc64 Merge branch 'indentation-stuff' into indentation-continued
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This also removes the enum shit that was introduced but never merged to master, because we don't need it.
2024-06-10 22:53:09 -05:00
9f2bd4ed5f fixes translation menus
deletes the old lines
2023-05-07 00:21:57 -06:00
0c648922aa common code 2023-05-06 22:50:23 -06:00
378cb12bf4 Late Game (Chapters 13, 14) and Bonus Chapters
* Reduces copypasta in the "what plans do you have" scene at the beach.
2023-05-06 22:48:11 -06:00
c890f2094c 2, 5, 8, 11
threes threes threes
2023-05-06 22:45:57 -06:00
dbffdf5c36 chapters 1 and 4 2023-05-06 22:43:35 -06:00
c274f8726a reduce copypasta in chapter7 2023-05-06 22:42:36 -06:00
9021619bf0 chapter 7 alignment issues 2023-05-06 22:42:27 -06:00
193 changed files with 96979 additions and 2326 deletions

View File

@@ -1 +0,0 @@
{"expansion": false, "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"}

11
.gitignore vendored
View File

@@ -51,4 +51,13 @@ env
*.rpymc
#backups
*.bak
*.bak
#android
.android.json
#linux
*.sh
# Exclude mod folders, but not files in the root mod directory
/game/mods/*/

View File

@@ -1,3 +1,9 @@
clone:
git:
image: woodpeckerci/plugin-git
settings:
depth: 1
steps:
changelog:
image: debian
@@ -11,7 +17,7 @@ steps:
image: debian
commands:
- sed -i -e "s/INTERNAL-BUILD/${CI_COMMIT_TAG}/g" game/options.rpy #Change the internal build name to the tagged version
- sed -i -e "s/INTERNAL-BUILD/${CI_COMMIT_TAG}/g" .android.json
- sed -i -e "s/INTERNAL-BUILD/${CI_COMMIT_TAG}/g" android.json
when:
- event: tag
@@ -19,20 +25,21 @@ steps:
image: debian
commands:
- sed -i -e "s/INTERNAL-BUILD/${CI_COMMIT_SHA}/g" game/options.rpy #if no tag, make it the commit num
- sed -i -e "s/INTERNAL-BUILD/${CI_COMMIT_TAG}/g" .android.json
- sed -i -e "s/INTERNAL-BUILD/${CI_COMMIT_SHA}/g" android.json
when:
- event: cron
build:
image: openjdk:8
image: openjdk:21-jdk-bookworm
commands:
- apt update
- apt install libgl1 -y
- apt install libgl1 patch -y
- sed -i -e "s/VERSION/${RenpyVersion}/g" game/options.rpy #Change the renpy version to the woodpecker reuqested one.
#Get Renkit
- wget -qO- "https://github.com/kobaltcore/renkit/releases/download/v${RenkitVersion}/renkit-linux-amd64.tar.gz" | tar xz --directory=/tmp/
- /tmp/renconstruct build -i "." -c "renconstruct.toml" -o dist/
- wget -qO- "https://github.com/kobaltcore/renkit/releases/download/v${RenkitVersion}/renkit-x86_64-unknown-linux-gnu.tar.xz" | tar -Jax --directory=/tmp/
- /tmp/renkit-x86_64-unknown-linux-gnu/renconstruct build "." dist/
- mkdir "dist/android"
- mv dist/*.apk "dist/android"
- cd /tmp/
archival-sha:
@@ -76,6 +83,6 @@ steps:
matrix:
RenpyVersion:
- "8.0.3"
- "8.3.2"
RenkitVersion:
- "3.3.1"
- "4.4.0"

24
android.json Normal file
View File

@@ -0,0 +1,24 @@
{
"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
android.keystore Normal file

Binary file not shown.

BIN
bundle.keystore Normal file

Binary file not shown.

View File

@@ -11,7 +11,8 @@ 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
@@ -104,7 +105,6 @@ 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 ####################################################################
@@ -362,6 +362,8 @@ define config.history_length = 250
## the cost of performance.
define gui.history_height = 210
define gui.history_spacing = 0
## The position, width, and alignment of the label giving the name of the
## speaking character.
define gui.history_name_xpos = 233
@@ -419,6 +421,7 @@ 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

Binary file not shown.

BIN
game/gui/bubble.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 551 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 541 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

BIN
game/gui/flag/Italy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

BIN
game/gui/mod_frame.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

BIN
game/gui/thoughtbubble.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

View File

0
game/mods/-NOMODS.txt Normal file
View File

View File

@@ -1,55 +1,120 @@
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.
--- MOD LOADER USAGE ---
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
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:
- Any file starting with "DISABLEALLMODS". This will force disable all currently installed mods, but will still load all their metadata. Removing this flag will return the mod states to how it was previously.
- Any file starting with "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.
- Any file starting with "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.
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.
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 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 2 mod's init blocks run at the same priority, or aren't running in an init block.
Textbox limitation: ~300 characters / four lines, the maximum in the vanilla game's script is around roughly ~278 and that only barely overflows to four lines, so <200 characters / three lines of text should be fine.
--- Ideal file structure of your mod ---
--- 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 has loaded scripts. 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 has loaded scripts. 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 has loaded scripts. 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
- name_of_storyline.rpy
- metadata.json
- Your various image metadatas
-> asset_folder
- asset.png
-> script_folder
- script.rpy
name_of_storyline.rpy
- script.rpym
-> etc. folders...
- etc. files...
```
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
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"
```
script_folder/script.rpy
```
label chapter_1_new:
show template_sample at scenter
"Sample Text"
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.
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.
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!

View File

@@ -24,7 +24,7 @@ define gui.show_name = True
## The version of the game.
define config.version = _("INTERNAL-BUILD")
define config.version = "INTERNAL-BUILD"
## 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 = False
define config.has_voice = True
define config.play_channel = "uisounds"
@@ -133,9 +133,47 @@ 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 -999 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.48
define config.default_sfx_volume = 0.80
define config.default_music_volume = 0.61
define config.default_sfx_volume = 0.8
define config.default_voice_volume = 0.8
## Save directory ##############################################################
##
@@ -192,10 +230,17 @@ init python:
build.classify('**/#**', None)
build.classify('**/thumbs.db', None)
# Do not include mod_examples as part of the build process
build.classify('game/mods_example/**', None)
build.classify('game/mods_example/.**', None)
# Do not include mod folders as part of the build process
build.classify('game/mods/*/', None)
#Development files need not apply
build.classify('README.md', None)
build.classify('renconstruct.toml', 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('*dist/*', None)
## To archive files, classify them as 'archive'.
@@ -209,9 +254,9 @@ init python:
build.documentation('*.txt')
## 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.
## 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".
# define build.google_play_key = "..."
@@ -220,6 +265,3 @@ 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.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

@@ -194,7 +194,7 @@ screen input(prompt):
window:
add Image("gui/textbox_no_hitch.png", xalign=0.5, yalign=1.0, yoffset=gui.input_yoffset) #for mobile OSK
vbox:
xalign gui.dialogue_text_xalign
xanchor gui.dialogue_text_xalign
xpos gui.dialogue_xpos
xsize gui.dialogue_width
ypos gui.dialogue_ypos
@@ -251,7 +251,7 @@ style choice_button is default:
activate_sound "audio/ui/uiRollover.wav"
style choice_button_text is default:
properties gui.button_text_properties("choice_button")
properties gui.text_properties("choice_button")
## Quick Menu screen ###########################################################
@@ -259,24 +259,25 @@ style choice_button_text is default:
## The quick menu is displayed in-game to provide easy access to the out-of-game
## menus.
screen quick_button(filename, label, function):
screen quick_button(filename, label, function=NullAction(), function2=NullAction()):
button:
xsize 71
ysize 71
action function
alternate function2
if 'Return' in label or 'Back' in label or 'Menu' in label:
activate_sound "audio/ui/uiBack.wav"
else:
activate_sound "audio/ui/uiClick.wav"
fixed:
add filename xalign 0.5 yalign 0.5 zoom 1
text label xalign 0.5 yalign 0.5 xanchor 0.5 size 22 style "quick_button_text"
text label xalign 0.5 yalign 0.5 size 22 style "quick_button_text"
# label_functions is [ [ "label", function() ], [ "foobar", foobar() ], .. ]
# Reuse the same image string and keep things 'neat'.
screen quick_buttons(filename, label_functions):
for l_f in label_functions:
use quick_button(filename, l_f[0], l_f[1])
use quick_button(filename, l_f[0], l_f[1], l_f[2])
screen quick_menu():
@@ -292,33 +293,20 @@ screen quick_menu():
use quick_buttons("gui/button/uioptionbuttons/template_idle.png",
[
[ _("Skip"), Skip() ],
[ _("Save"), ShowMenu('save') ],
[ _("Auto"), Preference("auto-forward", "toggle") ],
[ _("Load"), ShowMenu('load') ]
[ _("Skip"), Skip(), Skip(fast=True, confirm=True) ],
[ _("Save"), ShowMenu('save'), NullAction() ],
[ _("Auto"), Preference("auto-forward", "toggle"), NullAction() ],
[ _("Load"), ShowMenu('load'), NullAction() ]
] )
screen score_menu():
zorder 100
window:
background "gui/debug.webp"
xalign -1.0
yalign 0.0
grid 1 3:
style_prefix "score"
xalign 0.0
yalign 0.0
text "anons: " + str(anonscore)
text "fang: " + str(fangscore)
text "DEBUG SCORE CARD"
## This code ensures that the quick_menu screen is displayed in-game, whenever
## the player has not explicitly hidden the interface.
init python:
config.overlay_screens.append("quick_menu")
default quick_menu = True
default persistent.old_endings = None
default persistent.endings = None
style quick_button is default
style quick_button_text is button_text
@@ -356,6 +344,10 @@ screen navigation():
textbutton _("Save") activate_sound "audio/ui/uiClick.wav" action ShowMenu("save")
textbutton _("Load") activate_sound "audio/ui/uiClick.wav" action ShowMenu("load")
textbutton _("Delete") activate_sound "audio/ui/uiClick.wav" action ShowMenu("delete")
if persistent.enable_chapter_select:
textbutton _("Chapter Select") activate_sound "audio/ui/uiClick.wav" action Start("chapter_select")
textbutton _("Options") activate_sound "audio/ui/uiClick.wav" action ShowMenu("preferences")
#textbutton _("Extras") action ShowMenu("extras")
textbutton _("Return") activate_sound "audio/ui/uiBack.wav" action Return()
@@ -384,7 +376,7 @@ style navigation_button:
properties gui.button_properties("navigation_button")
style navigation_button_text:
properties gui.button_text_properties("navigation_button")
properties gui.text_properties("navigation_button")
## Main Menu screen ############################################################
@@ -404,8 +396,8 @@ screen main_menu_button(filename, label, function):
else:
activate_sound "audio/ui/uiClick.wav"
fixed:
add filename xalign 0.5 yalign 0.5 zoom 1 xanchor 0 xcenter 0.5 ycenter 0.5
text label xalign 0.5 yalign 0.5 xanchor 0.5
add filename xalign 0.5 yalign 0.5 zoom 1
text label xalign 0.5 yalign 0.5
image bonus_flash:
@@ -416,38 +408,24 @@ image bonus_flash:
repeat 4
image template_black_m = Composite(
(511, 129),
(6, 5), Crop((0, 0, 511-12, 129-12), Solid("#000000", width=2, height=2)),
(0, 0), "gui/button/menubuttons/template_idle.png",
(0, 0), "gui/button/menubuttons/template_idle.png"
)
image template_black:
"template_black_m"
matrixcolor TintMatrix(Color((0, 0, 0)))
alpha 0.8
screen bonus_chapter_button(f="gui/button/menubuttons/template_idle.png"):
#("gui/button/menubuttons/template_idle.png", "Bonus Chapters", ShowMenu("ex_ch_menu"))
button:
xmaximum 500
ymaximum 129
xysize (500, 129)
action ShowMenu("ex_ch_menu")
activate_sound "audio/ui/uiClick.wav"
fixed:
if (persistent.old_endings != persistent.endings) or (persistent.bonus_chapters != persistent.old_bonus_chapters and (persistent.bonus_chapters == 0b111111111)):
add "bonus_flash" xalign 0.5 yalign 0.5 zoom 1 xanchor 0 xcenter 0.5 ycenter 0.5
add "bonus_flash" xalign 0.5 yalign 0.5 zoom 1
$ persistent.old_endings = persistent.endings
#$ persistent.old_bonus_chapters = persistent.bonus_chapters
else:
add f xalign 0.5 yalign 0.5 zoom 1 xanchor 0 xcenter 0.5 ycenter 0.5
add f xalign 0.5 yalign 0.5 zoom 1
if (persistent.old_bonus_chapters != persistent.bonus_chapters): #just in case
$ persistent.old_bonus_chapters = persistent.bonus_chapters
text "Bonus Chapters" xalign 0.5 yalign 0.5 xanchor 0.5
text "Bonus Chapters" xalign 0.5 yalign 0.5
# label_functions is [ [ "label", function() ], [ "foobar", foobar() ], .. ]
# Reuse the same image string and keep things 'neat'.
@@ -460,23 +438,28 @@ transform bonus_notif:
pause 6.00
easeout_cubic 0.65 alpha 0
screen main_menu_background(frame=True):
# The style prefix needs to be set outside of this screen if you want to have the sidebar graphic
if persistent.use_epilogue_menu:
add "big ending"
else:
add gui.main_menu_background
## This empty frame darkens the main menu.
if frame:
frame:
background "gui/overlay/main_menu.png"
screen main_menu():
## This ensures that any other menu screen is replaced.
tag menu
style_prefix "main_menu"
if renpy.seen_image("big ending"):
style_prefix "main_menu_ex"
add "big ending"
else:
style_prefix "main_menu"
add gui.main_menu_background
## This empty frame darkens the main menu.
frame:
pass
use main_menu_background
$ main_menu_button_img = "gui/button/menubuttons/template_idle_epilogue.png" if persistent.use_epilogue_menu else "gui/button/menubuttons/template_idle.png"
if (persistent.old_endings != persistent.endings) or (persistent.bonus_chapters != persistent.old_bonus_chapters and (persistent.bonus_chapters == 0b111111111)):
fixed:
@@ -511,27 +494,16 @@ screen main_menu():
spacing 10
xpos 1885
ypos 1130
if renpy.seen_image('big ending'):
use main_menu_button("template_black", "Start", Start())
use bonus_chapter_button("template_black")
use main_menu_buttons("template_black",
[
[ _("Load"), ShowMenu("load") ],
[ _("Options"), ShowMenu("preferences") ],
[ _("Extras"), ShowMenu("extras") ], \
[ _("Quit"), Quit(confirm=not main_menu) ]
] )
else:
use main_menu_button("gui/button/menubuttons/template_idle.png", "Start", Start())
use bonus_chapter_button()
use main_menu_buttons("gui/button/menubuttons/template_idle.png",
[
[ _("Load"), ShowMenu("load") ],
[ _("Options"), ShowMenu("preferences") ],
[ _("Extras"), ShowMenu("extras") ], \
[ _("Quit"), Quit(confirm=not main_menu) ]
] )
#on "show" action renpy.start_predict_screen("cg_gallery")
use main_menu_button(main_menu_button_img, "Start", Start())
use bonus_chapter_button(main_menu_button_img)
use main_menu_buttons(main_menu_button_img,
[
[ _("Load"), ShowMenu("load") ],
[ _("Options"), ShowMenu("preferences") ],
[ _("Extras"), ShowMenu("extras") ], \
[ _("Quit"), Quit(confirm=not main_menu) ]
] )
style main_menu_frame is empty
style main_menu_vbox is vbox
@@ -543,8 +515,6 @@ style main_menu_frame:
xsize 420
yfill True
background "gui/overlay/main_menu.png"
style main_menu_vbox:
xalign 1.0
xoffset -30
@@ -561,41 +531,21 @@ style main_menu_text:
style main_menu_title:
properties gui.text_properties("title")
style main_menu_ex is main_menu
style main_menu_ex_vbox is main_menu_vbox
style main_menu_ex_text is main_menu_text
style main_menu_ex_frame is main_menu_frame
#style main_menu_ex_button:
#color "#222"
#background "gui/button/menubuttons/template_idle.png"
#xalign 0.5 yalign 0.5 zoom 1 xanchor 0 xcenter 0.5 ycenter 0.5
#style main_menu_ex_button:
#color "#222"
#style main_menu_version:
# properties gui.text_properties("version")
# style
## Game Menu screen ############################################################
##
## This lays out the basic common structure of a game menu screen. It's called
## with the screen title, and displays the background, title, and navigation.
##
## The scroll parameter can be None, or one of "viewport" or "vpgrid". When
## this screen is intended to be used with one or more children, which are
## The scroll parameter can be None, or one of "viewport" or "vpgrid".
## This screen is intended to be used with one or more children, which are
## transcluded (placed) inside it.
screen game_menu(title, scroll=None, yinitial=0.0):
screen game_menu(title, scroll=None, yinitial=0.0, spacing=0):
style_prefix "game_menu"
if main_menu:
add gui.main_menu_background
use main_menu_background(False)
else:
add gui.game_menu_background
@@ -623,6 +573,8 @@ screen game_menu(title, scroll=None, yinitial=0.0):
side_yfill True
vbox:
spacing spacing
transclude
elif scroll == "vpgrid":
@@ -638,6 +590,8 @@ screen game_menu(title, scroll=None, yinitial=0.0):
side_yfill True
spacing spacing
transclude
else:
@@ -716,12 +670,11 @@ screen about():
tag menu
style_prefix "main_menu"
add gui.main_menu_background
add gui.extras_submenu_panel
## This empty frame darkens the main menu.
frame:
pass
use main_menu_background
if persistent.use_epilogue_menu:
add "gui/overlay/extras_submenu_panel_epilogue.png"
else:
add gui.extras_submenu_panel
## The use statement includes another screen inside this one. The actual
## contents of the main menu are in the navigation screen.
@@ -732,76 +685,14 @@ screen about():
xoffset 80
xmaximum 1100
label "[config.name!t]"
text _("Version [config.version!t]\n")
text _("Version [config.version!t]\n") outlines [ (absolute(1), "#000", absolute(0), absolute(0)) ]
## gui.about is usually set in options.rpy.
if gui.about:
text "[gui.about!t]\n"
style_prefix "quick"
text _("{size=30}Made with {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]\nTo find more information about the game (and its source code) please visit {a=https://www.snootgame.xyz/}our website{/a}.{/size}") text_align 0
use extrasnavigation
## Updates screen ################################################################
##
## This screen houses the updates option using the built-in updates capabilities of Ren'Py.
##
screen updates():
tag menu
style_prefix "main_menu"
add gui.main_menu_background
add gui.extras_submenu_panel
## This empty frame darkens the main menu.
frame:
pass
## The use statement includes another screen inside this one. The actual
## contents of the main menu are in the navigation screen.
vbox:
yalign 0.00
yoffset 100
xoffset 80
xmaximum 1100
label "[config.name!t]"
text _("Version [config.version!t]")
if updater.can_update():
label _("{color=#00FF00}{size=32}Update directory exists, updating is possible!\n{/size}{/color}")
else:
label _("{color=#FF0000}{size=32}Update directory does not exist or is corrupt!\n{/size}{/color}")
label _("Auto Update:")
label _("{color=#FFFFFF}{size=32}Automatic Updates: [persistent.autoup!t]{/size}{/color}")
textbutton _("{size=36}Toggle Automatic Updates\n{/size}") action [Notify("Toggling Automatic Updates..."), Function(ToggleAutoUpdate)]
label _("Update Checker:")
label _("{color=#FFFFFF}{size=32}[persistent.updateresult!t]{/size}{/color}")
textbutton _("{size=36}Check for Update\n{/size}") activate_sound "audio/ui/uiClick.wav" action [Notify("Checking for update..."), Function(UpdateCheck)]
label _("Updater:")
label _("{color=#FFFFFF}{size=32}Server URL (click to edit):{/size}{/color}")
default input_on = False
button:
key_events True
if input_on:
input:
default "[persistent.updateWebServer!t]" size 36 color '#FFFFFF'
value FieldInputValue(persistent, 'updateWebServer')
length 49
copypaste True
else:
text persistent.updateWebServer size 36 color '#FFFF00'
action ToggleScreenVariable('input_on')
style_prefix "quick"
if persistent.updateresult != "No new version is available":
textbutton _("{size=36}Update Now!\n{/size}") activate_sound "audio/ui/uiNotification.wav" action [updater.Update(persistent.updateWebServer, force=False)]
else:
textbutton _("{size=36}Update Now!\n{/size}") activate_sound "audio/ui/uiFail.wav" action [Notify("Nothing to update to!")]
text _("{size=30}Made with {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]\nTo find more information about the game (and its source code) please visit {a=https://www.snootgame.xyz/}our website{/a}.{/size}") text_align 0 outlines [ (absolute(1), "#000", absolute(0), absolute(0)) ]
use extrasnavigation
## Load and Save screens #######################################################
@@ -888,27 +779,41 @@ screen file_slots(title, flag=False):
key "save_delete" action FileDelete(slot)
## Buttons to access other pages.
hbox:
vbox:
style_prefix "page"
xalign 0.5
yalign 1.0
hbox:
xalign 0.5
spacing gui.page_spacing
spacing gui.page_spacing
textbutton _("<") activate_sound "audio/ui/uiRollover.wav" action FilePagePrevious()
textbutton _("<") activate_sound "audio/ui/uiRollover.wav" action FilePagePrevious()
key "save_page_prev" action FilePagePrevious()
if config.has_autosave:
textbutton _("{#auto_page}A") activate_sound "audio/ui/uiClick.wav" action FilePage("auto")
if config.has_autosave:
textbutton _("{#auto_page}A") activate_sound "audio/ui/uiClick.wav" action FilePage("auto")
if config.has_quicksave:
textbutton _("{#quick_page}Q") activate_sound "audio/ui/uiClick.wav" action FilePage("quick")
if config.has_quicksave:
textbutton _("{#quick_page}Q") activate_sound "audio/ui/uiClick.wav" action FilePage("quick")
## range(1, 10) gives the numbers from 1 to 9.
for page in range(1, 10):
textbutton "[page]" activate_sound "audio/ui/uiClick.wav" action FilePage(page)
## range(1, 10) gives the numbers from 1 to 9.
for page in range(1, 10):
textbutton "[page]" activate_sound "audio/ui/uiClick.wav" action FilePage(page)
textbutton _(">") activate_sound "audio/ui/uiRollover.wav" action FilePageNext(max=9)
textbutton _(">") activate_sound "audio/ui/uiRollover.wav" action FilePageNext(max=9)
key "save_page_next" action FilePageNext()
if config.has_sync:
if CurrentScreenName() == "save":
textbutton _("Upload Sync"):
action UploadSync()
xalign 0.5
else:
textbutton _("Download Sync"):
action DownloadSync()
xalign 0.5
style page_label is gui_label
@@ -926,7 +831,7 @@ style page_label:
ypadding 5
style page_label_text:
text_align 0.5
textalign 0.5
layout "subtitle"
hover_color gui.hover_color
@@ -934,13 +839,13 @@ style page_button:
properties gui.button_properties("page_button")
style page_button_text:
properties gui.button_text_properties("page_button")
properties gui.text_properties("page_button")
style slot_button:
properties gui.button_properties("slot_button")
style slot_button_text:
properties gui.button_text_properties("slot_button")
properties gui.text_properties("slot_button")
## Preferences screen ##########################################################
@@ -969,22 +874,23 @@ screen preferences():
textbutton _("Window") activate_sound "audio/ui/uiOptionOn.wav" action Preference("display", "any window")
textbutton _("Fullscreen") activate_sound "audio/ui/uiOptionOn.wav" action Preference("display", "fullscreen")
vbox:
style_prefix "radio"
label _("Rollback Side")
textbutton _("Disable") activate_sound "audio/ui/uiOptionOn.wav" action Preference("rollback side", "disable")
textbutton _("Left") activate_sound "audio/ui/uiOptionOn.wav" action Preference("rollback side", "left")
textbutton _("Right") activate_sound "audio/ui/uiOptionOn.wav" action Preference("rollback side", "right")
vbox:
style_prefix "check"
label _("Requires Restart")
textbutton _("Enable Forward-Scroll Movement") action [Function(onclick_audio, persistent.scroll), ToggleVariable("persistent.scroll", True, False)]
if renpy.variant(["mobile", "steam_deck"]):
vbox:
style_prefix "radio"
label _("Rollback Side")
textbutton _("Disable") activate_sound "audio/ui/uiOptionOn.wav" action Preference("rollback side", "disable")
textbutton _("Left") activate_sound "audio/ui/uiOptionOn.wav" action Preference("rollback side", "left")
textbutton _("Right") activate_sound "audio/ui/uiOptionOn.wav" action Preference("rollback side", "right")
vbox:
style_prefix "check"
label _("Naughty Stuff")
textbutton _("Enable Lewd Images") action [Function(onclick_audio, persistent.lewd), ToggleVariable("persistent.lewd", True, False)]
vbox:
style_prefix "check"
label _("Requires Restart")
textbutton _("Enable Forward-Scroll Movement") action [Function(onclick_audio, persistent.scroll), ToggleVariable("persistent.scroll", True, False)]
vbox:
style_prefix "check"
label _("Skip")
@@ -993,6 +899,39 @@ screen preferences():
textbutton _("Transitions") action [Function(onclick_audio, preferences.transitions, True), ToggleVariable("preferences.transitions", 0, 2)]
vbox:
style_prefix "check"
label _("Developer Tools")
textbutton _("Enable Debug Scores") action ToggleVariable("persistent.enable_debug_scores", True, False)
textbutton _("Enable Chapter Select") action ToggleVariable("persistent.enable_chapter_select", True, False)
if not main_menu:
if persistent.enable_debug_scores:
$ debug_story_variables(False)
$ debug_story_variables(True)
else:
$ debug_story_variables(False)
vbox:
style_prefix "check"
label _("Mods")
textbutton _("Show Mod Screenshots") action [Function(onclick_audio, persistent.show_mod_screenshots), ToggleVariable("persistent.show_mod_screenshots", True, False)]
textbutton _("Enable New Mods") action [Function(onclick_audio, persistent.newmods_default_state), ToggleVariable("persistent.newmods_default_state", True, False)]
if renpy.variant(["mobile", "steam_deck"]):
vbox:
style_prefix "check"
label _("Gallery")
textbutton _("Enable Edgescrolling") action [Function(onclick_audio, persistent.gallery_edgescroll), ToggleVariable("persistent.gallery_edgescroll", True, False)]
if renpy.seen_image("big ending"):
vbox:
style_prefix "radio"
label _("Menu Style")
textbutton _("Original") activate_sound "audio/ui/uiOptionOn.wav" action SetVariable("persistent.use_epilogue_menu", False)
textbutton _("Epilogue") activate_sound "audio/ui/uiOptionOn.wav" action SetVariable("persistent.use_epilogue_menu", True)
vbox:
xsize 676
style_prefix "check"
label _("Language")
vpgrid:
@@ -1000,13 +939,12 @@ screen preferences():
cols 1
mousewheel True
draggable True
xsize 676
xsize 550
ysize 250
if len(languages)>4:
scrollbars "vertical"
for lang in languages:
fixed:
xsize 656
ysize 60
use lang_button(lang)
@@ -1036,7 +974,7 @@ screen preferences():
hbox:
bar value Preference("music volume") yalign 0.5
textbutton _("Reset"):
action Function(preferences.set_volume, 'music', config.default_music_volume)
action Function(preferences.set_mixer, 'music', config.default_music_volume)
if config.has_sound:
@@ -1044,7 +982,7 @@ screen preferences():
hbox:
bar value Preference("sfx volume") yalign 0.5
textbutton _("Reset"):
action Function(preferences.set_volume, 'sfx', config.default_sfx_volume)
action Function(preferences.set_mixer, 'sfx', config.default_sfx_volume)
if config.sample_sound:
textbutton _("Test") action Play("sound", config.sample_sound)
@@ -1053,7 +991,7 @@ screen preferences():
bar value Preference("ui volume") yalign 0.5
textbutton _("Reset"):
yalign 0.5
action Function(preferences.set_volume, 'ui', config.default_sfx_volume)
action Function(preferences.set_mixer, 'ui', config.default_sfx_volume)
if config.has_voice:
label _("Voice Volume")
@@ -1061,7 +999,7 @@ screen preferences():
bar value Preference("voice volume") yalign 0.5
textbutton _("Reset"):
yalign 0.5
action Function(preferences.set_volume, 'voice', config.default_sfx_volume)
action Function(preferences.set_mixer, 'voice', config.default_voice_volume)
if config.sample_voice:
textbutton _("Test") action Play("voice", config.sample_voice)
@@ -1116,7 +1054,7 @@ style radio_button:
foreground "gui/button/radio_[prefix_]foreground.png"
style radio_button_text:
properties gui.button_text_properties("radio_button")
properties gui.text_properties("radio_button")
style check_vbox:
spacing gui.pref_button_spacing
@@ -1126,7 +1064,7 @@ style check_button:
foreground "gui/button/check_[prefix_]foreground.png"
style check_button_text:
properties gui.button_text_properties("check_button")
properties gui.text_properties("check_button")
style slider_slider:
xsize 525
@@ -1137,7 +1075,7 @@ style slider_button:
left_margin 15
style slider_button_text:
properties gui.button_text_properties("slider_button")
properties gui.text_properties("slider_button")
style slider_vbox:
xsize 675
@@ -1158,7 +1096,7 @@ screen history():
## Avoid predicting this screen, as it can be very large.
predict False
use game_menu(_("History"), scroll=("vpgrid" if gui.history_height else "viewport"), yinitial=1.0):
use game_menu(_("History"), scroll=("vpgrid" if gui.history_height else "viewport"), yinitial=1.0, spacing=gui.history_spacing):
style_prefix "history"
@@ -1217,7 +1155,7 @@ style history_name:
style history_name_text:
min_width gui.history_name_width
text_align gui.history_name_xalign
textalign gui.history_name_xalign
style history_text:
xpos gui.history_text_xpos
@@ -1225,7 +1163,7 @@ style history_text:
xanchor gui.history_text_xalign
xsize gui.history_text_width
min_width gui.history_text_width
text_align gui.history_text_xalign
textalign gui.history_text_xalign
layout ("subtitle" if gui.history_text_xalign else "tex")
style history_label:
@@ -1241,11 +1179,7 @@ screen extras():
style_prefix "main_menu"
add gui.main_menu_background
## This empty frame darkens the main menu.
frame:
pass
use main_menu_background
use extrasnavigation
@@ -1264,12 +1198,16 @@ screen extrasnavigation():
vbox:
spacing 10
xpos 1885
ypos 1130
use main_menu_buttons("gui/button/menubuttons/template_idle.png",
ypos (1269 if persistent.enable_chapter_select else 1130)
$ main_menu_button_img = "gui/button/menubuttons/template_idle_epilogue.png" if persistent.use_epilogue_menu else "gui/button/menubuttons/template_idle.png"
use main_menu_buttons(main_menu_button_img,
[
[ _("Help"), ShowMenu("help") ],
[ _("About"), ShowMenu("about") ],
[ _("Gallery"), ShowMenu("cg_gallery") ],
*([(_("Chapter Select{#MainMenu}"), Start("chapter_select"))] if persistent.enable_chapter_select else []),
[ _("Mods"), ShowMenu("mod_menu") ],
[ _("Return"), ShowMenu("main_menu") ]
] )
@@ -1287,12 +1225,13 @@ screen help():
style_prefix "main_menu"
add gui.main_menu_background
add gui.extras_submenu_panel
use main_menu_background
if persistent.use_epilogue_menu:
add "gui/overlay/extras_submenu_panel_epilogue.png"
else:
add gui.extras_submenu_panel
## This empty frame darkens the main menu.
frame:
pass
default device = "keyboard"
@@ -1361,6 +1300,10 @@ screen keyboard_help():
label _("Page Down")
text _("Rolls forward to later dialogue.")
hbox:
label _("Backspace")
text _("Hides mod details. Shows mod errors if there is any.")
hbox:
label "H"
text _("Hides the user interface.")
@@ -1389,7 +1332,7 @@ screen mouse_help():
text _("Accesses the game menu. Also escapes the Gallery.")
hbox:
label _("Mouse Wheel Up\nClick Rollback Side")
label _("Mouse Wheel Up")
text _("Rolls back to earlier dialogue.")
hbox:
@@ -1411,13 +1354,12 @@ screen gamepad_help():
label _("Right Shoulder")
text _("Rolls forward to later dialogue.")
hbox:
label _("D-Pad, Sticks")
text _("Navigate the interface.")
hbox:
label _("Start, Guide")
label _("Start, Guide, B/Right Button")
text _("Accesses the game menu.")
hbox:
@@ -1438,7 +1380,7 @@ style help_button:
xmargin 12
style help_button_text:
properties gui.button_text_properties("help_button")
properties gui.text_properties("help_button")
style help_label:
xsize 375
@@ -1507,14 +1449,14 @@ style confirm_frame:
yalign .5
style confirm_prompt_text:
text_align 0.5
textalign 0.5
layout "subtitle"
style confirm_button:
properties gui.button_properties("confirm_button")
style confirm_button_text:
properties gui.button_text_properties("confirm_button")
properties gui.text_properties("confirm_button")
## Skip indicator screen #######################################################
@@ -1701,7 +1643,7 @@ style nvl_label:
yanchor 0.0
xsize gui.nvl_name_width
min_width gui.nvl_name_width
text_align gui.nvl_name_xalign
textalign gui.nvl_name_xalign
style nvl_dialogue:
xpos gui.nvl_text_xpos
@@ -1709,7 +1651,7 @@ style nvl_dialogue:
ypos gui.nvl_text_ypos
xsize gui.nvl_text_width
min_width gui.nvl_text_width
text_align gui.nvl_text_xalign
textalign gui.nvl_text_xalign
layout ("subtitle" if gui.nvl_text_xalign else "tex")
style nvl_thought:
@@ -1718,7 +1660,7 @@ style nvl_thought:
ypos gui.nvl_thought_ypos
xsize gui.nvl_thought_width
min_width gui.nvl_thought_width
text_align gui.nvl_thought_xalign
textalign gui.nvl_thought_xalign
layout ("subtitle" if gui.nvl_text_xalign else "tex")
style nvl_button:
@@ -1730,6 +1672,94 @@ style nvl_button_text:
properties gui.button_text_properties("nvl_button")
## Bubble screen ###############################################################
##
## The bubble screen is used to display dialogue to the player when using speech
## bubbles. The bubble screen takes the same parameters as the say screen, must
## create a displayable with the id of "what", and can create displayables with
## the "namebox", "who", and "window" ids.
##
## https://www.renpy.org/doc/html/bubble.html#bubble-screen
screen bubble(who, what):
style_prefix "bubble"
window:
id "window"
if who is not None:
window:
id "namebox"
style "bubble_namebox"
text who:
id "who"
text what:
id "what"
style bubble_window is empty
style bubble_namebox is empty
style bubble_who is default
style bubble_what is default
style bubble_window:
xpadding 30
top_padding 5
bottom_padding 5
style bubble_namebox:
xalign 0.5
style bubble_who:
xalign 0.5
textalign 0.5
color "#000"
style bubble_what:
align (0.5, 0.5)
text_align 0.5
layout "subtitle"
color "#000"
define bubble.frame = Frame("gui/bubble.png", 55, 55, 55, 95)
define bubble.thoughtframe = Frame("gui/thoughtbubble.png", 55, 55, 55, 55)
define bubble.properties = {
"bottom_left" : {
"window_background" : Transform(bubble.frame, xzoom=1, yzoom=1),
"window_bottom_padding" : 27,
},
"bottom_right" : {
"window_background" : Transform(bubble.frame, xzoom=-1, yzoom=1),
"window_bottom_padding" : 27,
},
"top_left" : {
"window_background" : Transform(bubble.frame, xzoom=1, yzoom=-1),
"window_top_padding" : 27,
},
"top_right" : {
"window_background" : Transform(bubble.frame, xzoom=-1, yzoom=-1),
"window_top_padding" : 27,
},
"thought" : {
"window_background" : bubble.thoughtframe,
}
}
define bubble.expand_area = {
"bottom_left" : (0, 0, 0, 22),
"bottom_right" : (0, 0, 0, 22),
"top_left" : (0, 22, 0, 0),
"top_right" : (0, 22, 0, 0),
"thought" : (0, 0, 0, 0),
}
################################################################################
## Mobile Variants
@@ -1764,35 +1794,12 @@ screen quick_menu():
yalign 0.975
use quick_buttons("gui/button/uioptionbuttons/template_idle.png", \
[ \
[ _("Back"), Rollback() ], \
[ _("Skip"), Skip() ], \
[ _("Auto"), Preference("auto-forward", "toggle") ], \
[ _("Menu"), ShowMenu() ] \
[ _("Back"), Rollback(), NullAction()], \
[ _("Skip"), Skip(), Skip(fast=True, confirm=True) ], \
[ _("Auto"), Preference("auto-forward", "toggle"), NullAction() ], \
[ _("Menu"), ShowMenu(), NullAction() ] \
] )
screen extrasnavigation(): #Updates are removed (not even supported by Ren'Py)
variant "mobile"
vbox:
xpos 1940
yalign 0.03
if persistent.splashtype == 1:
add "gui/sneedgame.png"
else:
add "gui/snootgame.png"
vbox:
spacing 25
xpos 1885
yalign 0.9
use main_menu_buttons("gui/button/menubuttons/template_idle.png",
[
[ _("Help"), ShowMenu("help") ],
[ _("About"), ShowMenu("about") ],
[ _("Gallery"), ShowMenu("cg_gallery") ],
[ _("Mods"), ShowMenu("mod_menu") ],
[ _("Return"), ShowMenu("main_menu") ]
] )
style radio_button:
variant "mobile"
foreground "gui/phone/button/radio_[prefix_]foreground.png"

View File

@@ -14,43 +14,21 @@
#Why yes all my code was formerly in one massive file called "script" thats 28k lines long, how could you tell?
#Licensed under the GNU AGPL v3, for more information check snootgame.xyz or the LICENSE file that should have came with this work.
init -1 python:
# Modding Support variables
# All mod rpy files must run a small init python script
mod_dir = "mods/"
mod_menu_access = []
init python:
import webbrowser # This is for the ch2 "look the link up" choice
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
if persistent.lewd == None:
persistent.lewd = False
if persistent.autoup == None:
persistent.autoup = 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
@@ -59,272 +37,40 @@ init python:
persistent.bonus_chapters = 0b0
persistent.old_bonus_chapters = 0b0
# 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
pass
# 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")
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
# Determine the splash type for the Snoot game logo
persistent.splashtype = random.randint(0,2000 - 1)
#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
label before_main_menu:
# Force users pre-Patch 11 to use english if they were on 'None'
if preferences.language == None:
$ preferences.language = 'en'
# 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:
$ fangscore = 0
$ anonscore = 0
$ tradwife = False
$ wingStory = False
$ toggle_debug()
pause 1.0
call storyline from _call_storyline
$ renpy.call(chapter_list[chapter_list_index]) # Call first element of the chapter_list array

View File

@@ -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
return
$ next_story_chapter()

View File

@@ -550,4 +550,4 @@ label chapter_10:
window auto
pause 1
return
$ next_story_chapter()

View File

@@ -447,9 +447,11 @@ 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
call get_ending from _call_get_ending
if _return == 2:
if ending_route_number == 2:
stop music fadeout 3
pause 2
jump lPromAnnouncement
@@ -585,13 +587,12 @@ label chapter_11:
Nas "Dont take it the wrong way, but my mind just screamed at me worst case scenario."
pause .5
call get_ending from _call_get_ending_1
if _return == 4:
jump lSortingThings # Golden
elif _return == 3:
jump lMendingThings # Tradwife
if ending_route_number == 4: # Golden
jump lSortingThings
elif ending_route_number == 3: # tradwife
jump lMendingThings
else:
jump lBreakingThings # Shooter
jump lBreakingThings # All else fails, go to shooter.
label lSortingThings:
@@ -3847,7 +3848,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
@@ -5211,8 +5212,8 @@ label chapter_11:
"Fang and I have been together for a month now."
pause .5
call get_ending from _call_get_ending_2
if _return == 3: #tradwife
if ending_route_number == 3: # tradwife
"Things are going pretty well. When we discount Trishs weekly attempt to talk with Fang."
@@ -5245,9 +5246,9 @@ label chapter_11:
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
@@ -5466,100 +5467,102 @@ label chapter_11:
"{cps=*.1}...{/cps}"
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
# 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
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?"
return
$ next_story_chapter()

View File

@@ -158,4 +158,4 @@ label chapter_11A:
window auto
pause .5
return
$ next_story_chapter()

View File

@@ -173,4 +173,4 @@ label chapter_11B:
window auto
pause 1
return
$ next_story_chapter()

View File

@@ -302,4 +302,4 @@ label chapter_11C:
"{cps=*.1}...{/cps}"
pause .5
return
$ next_story_chapter()

View File

@@ -392,4 +392,4 @@ label chapter_11D:
"{cps=*.1}...{/cps}"
pause .5
return
$ next_story_chapter()

View File

@@ -445,4 +445,4 @@ label chapter_12_5C:
window hide
window auto
return
$ next_story_chapter()

View File

@@ -443,4 +443,4 @@ label chapter_12_5D:
F "Oh, Anon, youre already here!"
return
$ next_story_chapter()

View File

@@ -1034,4 +1034,4 @@ label chapter_12A:
window hide
window auto
return
$ next_story_chapter()

View File

@@ -591,4 +591,4 @@ label chapter_12B:
window auto
pause 1
return
$ next_story_chapter()

View File

@@ -901,4 +901,4 @@ label chapter_12C:
window auto
pause 1
return
$ next_story_chapter()

View File

@@ -781,4 +781,4 @@ label chapter_12D:
"{cps=*0.1}...{/cps}"
return
$ next_story_chapter()

View File

@@ -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,13 +690,11 @@ label chapter_13A:
pause .5
menu:
"Could be worse":
"Could be worse":
A "Could be worse."
A "Could be worse."
"Going great, actually":
A "Going great, actually."
"Going great, actually":
A "Going great, actually."
pause .5
Sp "Wheres your date, I thought I saw the two of you enter."
@@ -1799,4 +1797,4 @@ label chapter_13A:
window auto
pause 1
return
$ next_story_chapter()

View File

@@ -1048,4 +1048,4 @@ label chapter_13B:
window auto
pause 1
return
$ next_story_chapter()

View File

@@ -2539,14 +2539,14 @@ label chapter_13C:
easein_cubic 1 xalign 1.85
show chillicheesefries:
rotate 130 xalign 0.5 yalign 0.4 xpos 0.77 ypos 0.425
rotate 130 xanchor 0.5 yanchor 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 xalign 0.5 yalign 0.4 xpos 0.765 ypos 0.425
rotate 130 xanchor 0.5 yanchor 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 xalign 0.5 yalign 0.4 xpos 0.805 ypos 0.4
rotate 140 xanchor 0.5 yanchor 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 xalign 0.75 yalign 0.5 xpos 0.905 ypos 0.45
rotate 140 xanchor 0.75 yanchor 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
return
$ next_story_chapter()

View File

@@ -3114,17 +3114,13 @@ 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."
"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?"
"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!"
@@ -4057,4 +4053,4 @@ label chapter_13D:
"{cps=*.1}...{/cps}"
pause 0.5
return
$ next_story_chapter()

View File

@@ -1442,4 +1442,5 @@ label chapter_14A:
pause 5
$ renpy.music.set_volume(1, 0, 'ambient')
return
$ next_story_chapter()

View File

@@ -350,4 +350,4 @@ label chapter_14B:
scene black with Dissolve(3)
pause 2
return
$ next_story_chapter()

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,4 +1014,5 @@ label chapter_14C:
pause 1.0
stop music
$ renpy.music.set_volume(1, 0, 'music')
return
$ next_story_chapter()

View File

@@ -898,4 +898,5 @@ label chapter_14D:
pause 16
scene black with Dissolve(1.0)
pause 1
return
$ next_story_chapter()

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
@@ -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
return
$ next_story_chapter()

View File

@@ -2291,4 +2291,4 @@ label chapter_3:
"{cps=*.1}...{/cps}"
return
$ next_story_chapter()

View File

@@ -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
return
$ next_story_chapter()

View File

@@ -1,12 +1,3 @@
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
@@ -551,7 +542,7 @@ label chapter_5:
show anon:
easein_back 0.5 xalign 0.2
label movie:
label movie: # This unfortunately needs to stay here so compatability with translations is kept
play sound 'audio/effects/slapstickPunch.ogg'
A "FANG!" with vpunch
@@ -559,7 +550,8 @@ 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)
# scene fang tail with Dissolve(1)
show fang_tail_movie with Dissolve(1) # change how the movie is played
"Through my blurred vision I can make out Fangs tail, slowly shifting side to side."
@@ -573,9 +565,9 @@ label chapter_5:
menu:
"Tug Her Tail":
pass
pass
"Tug Her Ankle":
pass
pass
pause .5
@@ -4665,9 +4657,4 @@ label chapter_5:
window auto
pause 1
return
# I'm guessing this is for the gallery?
label fang_movie:
scene fang tail with fade
""
$ next_story_chapter()

View File

@@ -4677,4 +4677,4 @@ label chapter_6:
window auto
pause 1
return
$ next_story_chapter()

File diff suppressed because it is too large Load Diff

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 yalign -0.01 ypos 0.5
easeout_cubic .5 rotate 90 yanchor -0.01 ypos 0.5
pause .15
hide reed with Dissolve(.25)
play sound 'audio/effects/anonGardenFall.ogg'
@@ -622,8 +622,10 @@ 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)))
@@ -1277,7 +1279,6 @@ label chapter_8:
with Dissolve(0.2)
pause 0.3
hide anonfacecloseup
FD "Out. {w=0.3}{b}Now{/b}."
@@ -1524,7 +1525,7 @@ label chapter_8:
"{cps=*.1}...{/cps}"
if anonscore >= 3 or fangscore >= 3:
if (anonscore >= 4 and fangscore >= 4) or ending_route_number == 4:
pause 0.5
play music 'audio/OST/its_footloose_now.ogg' fadein 1.0
@@ -1567,7 +1568,7 @@ label chapter_8:
window hide
window auto
return
$ next_story_chapter()
label lGetStartedOnStudy:
pause 0.5
@@ -2156,4 +2157,5 @@ label chapter_8:
"{cps=*.1}...{/cps}"
window hide
window auto
return
$ next_story_chapter()

View File

@@ -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
return
$ next_story_chapter()

View File

@@ -1041,6 +1041,7 @@ 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

View File

@@ -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!"

View File

@@ -13,12 +13,10 @@ 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 = {}
@@ -79,29 +77,32 @@ init 2 python:
jsonloadandpop()
gallery_dic['Animations'] = [{
"item": 'fang tail',
"item": 'fang_tail_movie',
"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
add gui.main_menu_background
use main_menu_background(False)
# Frame
add gui.game_menu_background
if persistent.use_epilogue_menu:
add "gui/game_menu_epilogue.png"
else:
add gui.game_menu_background
tag menu
@@ -162,9 +163,8 @@ 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'])
@@ -200,9 +200,8 @@ screen view_movie(item, _origin):
[ "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)
@@ -211,7 +210,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"):
if renpy.variant("pc") and persistent.gallery_edgescroll:
edgescroll (300, 1800)
draggable True
arrowkeys True

173
game/src/chapter_select.rpy Normal file
View File

@@ -0,0 +1,173 @@
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]
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

View File

@@ -0,0 +1,31 @@
# 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

View File

@@ -95,6 +95,11 @@ init 999 python:
'Man_of_Krieg',
'ReD',
],
_('Translators (Italian):'): [
'Dsatta',
'rc_05',
'Anon_theFox',
],
_('Proofreaders (Spanish):'): [
'ElBan Anón',
'GMAnon'
@@ -105,6 +110,10 @@ init 999 python:
'YtkaGen',
'DatFeelFrog'
],
_('Proofreaders (Italian):'): [
'Solidus333',
'Dsatta',
],
_('Asset help (Spanish):'): [
'Arkiangelo Anon'
],
@@ -112,6 +121,12 @@ init 999 python:
'Gexahord',
'YtkaGen',
'2ch Anon'
],
_('Asset help (Italian):'): [
'Dsatta',
],
_('Promo Art (Italian):'): [
'Kaprakaz',
]
}
@@ -165,7 +180,7 @@ init 999 python:
tgrid.append(Null())
pass
tgrid = Grid(TL_WIDTH, TL_HEIGHT, *tgrid)
tgrid = Grid(TL_WIDTH, TL_HEIGHT, *tgrid, xspacing=40) #helps with longer translation names
textlist.append(tgrid)
textlist.append(Null(1, 16*12)) #check
@@ -208,43 +223,50 @@ 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. Mainly concerning values that control the panning destination of credits text,
# and the height of the credits text itself
# value to offset everything is again. You only need to concern yourself with the panning_stop and panning_duration variable
#
# 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?
# Remember, ending sketch is always +550 of when the Pan stops
init python:
# Note: Measuring in pixels
panning_stop = 13290 # 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 = 67 # 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
image credits_coverup:
"black"
crop (0, 0, 1920, 1080)
image b_credits_text = Composite(
(1920, 13235),
(1920, credits_img_boundary),
(0, 390), "credits_hbox",
(0, 12705), "b_sketch"
(0, credits_img_offset), "b_sketch"
)
image c_credits_text = Composite(
(1920, 13235),
(1920, credits_img_boundary),
(0, 390), "credits_hbox",
(0, 12705), "c_sketch"
(0, credits_img_offset), "c_sketch"
)
image d_credits_text = Composite(
(1920, 13235),
(1920, credits_img_boundary),
(0, 390), "credits_hbox",
(0, 12705), "d_sketch"
(0, credits_img_offset), "d_sketch"
)
label lending:
call get_ending from _call_get_ending_4
if _return == 4:
if ending_route_number == 4:
pause 0.5
show snootgame_big with dissolve: # Renpy not allowing you to grab images from the gui folder is serious bullshit
show snootgame_big with dissolve:
subpixel True
xalign 0.5
yalign 0.5
@@ -262,17 +284,17 @@ label lending:
hide snootgame_big
with dissolve
show credits_base at Pan((0, -1080),(0, 8100), 65):
show credits_base at Pan((0, -1080),(0, panning_stop_bg), panning_duration):
subpixel True
show d_credits_text at Pan((0, 0),(0, 12100), 65):
show d_credits_text at Pan((0, 0),(0, panning_stop), panning_duration):
subpixel True
show credits_coverup at Pan((0, 0),(0, 12100), 65):
show credits_coverup at Pan((0, 0),(0, panning_stop), panning_duration):
subpixel True
pause 50
queue music 'audio/OST/amberlight brillance live end.ogg'
queue music "<silence 1.0>" loop
elif _return == 3:
elif ending_route_number == 3:
play music "audio/OST/Dino Destiny Reader.ogg"
pause 0.5
show c_credits_text:
@@ -281,9 +303,9 @@ label lending:
show c_credits_text:
crop None
pause 2.75
show credits_base at Pan((0, -1080),(0, 8100), 65) behind c_credits_text:
show credits_base at Pan((0, -1080),(0, panning_stop_bg), panning_duration) behind c_credits_text:
subpixel True
show c_credits_text at Pan((0, 0),(0, 12100), 65):
show c_credits_text at Pan((0, 0),(0, panning_stop), panning_duration):
crop None
subpixel True
else:
@@ -295,23 +317,24 @@ label lending:
show b_credits_text:
crop None
pause 2.75
show credits_base at Pan((0, -1080),(0, 8100), 65) behind b_credits_text:
show credits_base at Pan((0, -1080),(0, panning_stop_bg), panning_duration) behind b_credits_text:
subpixel True
show b_credits_text at Pan((0, 0),(0, 12100), 65):
show b_credits_text at Pan((0, 0),(0, panning_stop), panning_duration):
crop None
subpixel True
pause
stop music fadeout 5
scene black with Dissolve(3)
pause 2
if tradwife:
if ending_route_number == 3:
scene c10 with Dissolve(1.5)
pause 20
scene black with Dissolve(2)
pause 1
elif anonscore >= 4 and fangscore >= 4:
elif ending_route_number == 4:
scene golden ending with Dissolve(1.5)
pause 20
scene black with Dissolve(2)
pause 1
return
$ MainMenu(confirm=False) () # Exits to the main menu

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 xanchor 0.5 size 34
text label xalign 0.5 yalign 0.5 size 34
# label_functions is [ [ "label", function() ], [ "foobar", foobar() ], .. ]
# Reuse the same image string and keep things 'neat'.
@@ -65,12 +65,7 @@ screen ex_ch_menu():
tag menu
style_prefix "main_menu"
add gui.main_menu_background
frame:
xsize 420
yfill True
background "gui/overlay/main_menu.png"
use main_menu_background
#side_yfill True
vbox:
@@ -92,14 +87,15 @@ screen ex_ch_menu():
mousewheel True
draggable True
pagekeys True
vbox:
#xpos 1885
spacing 12
#yalign 0.98
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"))
$ main_menu_button_img = "gui/button/menubuttons/template_idle_epilogue.png" if persistent.use_epilogue_menu else "gui/button/menubuttons/template_idle.png"
vbox:
spacing 12
use ex_ch_button(main_menu_button_img, "Return", ShowMenu("main_menu"))
if len(ex_chapters_menu):
use ex_ch_buttons("gui/button/menubuttons/template_idle.png", ex_chapters_menu )
use ex_ch_buttons(main_menu_button_img, ex_chapters_menu )
for x in range(0, len(ex_chapters) - len(ex_chapters_menu)):
use ex_ch_button("gui/button/menubuttons/template_idle.png", "???", None)
use ex_ch_button(main_menu_button_img, "???", None)

View File

@@ -352,6 +352,18 @@ 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
@@ -1051,7 +1063,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'
@@ -1423,7 +1435,8 @@ image iris = im.FactorScale(im.MatrixColor("vfx/iris.webp",im.matrix.opacity(0.9
# CHAPTER 5
image fang tail = Movie(play="animations/fang tail.webm",loop=True)
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
# CHAPTER 11
@@ -1548,28 +1561,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)

View File

@@ -0,0 +1,216 @@
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')
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") # 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

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,90 @@
# 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));
}
""")

View File

@@ -1,24 +1,10 @@
label splashscreen:
$ 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
if not renpy.get_autoreload() and not persistent.reloading_mods:
show caveintrosequence
play sound 'audio/OST/startup.ogg'
pause 11.2
stop sound
return

53
game/src/storyline.rpy Normal file
View File

@@ -0,0 +1,53 @@
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

View File

@@ -1,131 +1,160 @@
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'},
{'image': 'gui/flag/Poland.png', 'name': 'Polski', 'value': 'pl'}
]
#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
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/snd_ui_click.wav" action If(go_menu, true=MainMenu(False,False), false=[Hide(),Return()])
screen hiddenOkPrompt(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/snd_ui_click.wav" action If(go_menu, true=MainMenu(False,False), false=Hide())
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'}
]
#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, go_menu=False)]
)
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="hiddenOkPrompt", message=notice, go_menu=False)]
)
if _preferences.language == lang["value"]:
add glowie(lang["image"]) at icon
else:
add darkie(lang["image"]) at icon

41
game/src/utility.rpy Normal file
View File

@@ -0,0 +1,41 @@
## 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)

View File

@@ -1,55 +0,0 @@
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

File diff suppressed because it is too large Load Diff

View File

View File

@@ -514,3 +514,87 @@ translate es strings:
old "Skipping"
new "Saltando"
# TODO: Translation updated at 2024-10-07 00:57
translate es strings:
# game/screens.rpy:294
old "Auto"
new "Auto"
# game/screens.rpy:349
old "Chapter Select"
new "Seleccionar Capitulo"
old "Chapter Select{#MainMenu}"
new "{size=50}Seleccionar Capitulo{/size}"
# game/screens.rpy:499
old "Extras"
new "Extras"
# game/screens.rpy:810
old "Upload Sync"
new "Subir Sync"
# game/screens.rpy:814
old "Download Sync"
new "Descargar Sync"
# game/screens.rpy:903
old "Developer Tools"
new "Opciones de Desarrollador"
# game/screens.rpy:904
old "Enable Debug Scores"
new "Activar Visor de Puntos"
# game/screens.rpy:905
old "Enable Chapter Select"
new "Activar Selector de Capitulos"
# game/screens.rpy:909
old "Mods"
new "Mods"
# game/screens.rpy:910
old "Show Mod Screenshots"
new "Mostrar Screenshots de Mods"
# game/screens.rpy:911
old "Enable New Mods"
new "Activar Mods Por Defecto"
# game/screens.rpy:924
old "Enable Edgescrolling"
new "Activar Desplazamiento de Bordes"
# game/screens.rpy:929
old "Menu Style"
new "Estilo del Menú"
# game/screens.rpy:930
old "Original"
new "Original"
# game/screens.rpy:931
old "Epilogue"
new "Epílogo"
# game/screens.rpy:1332
old "Mouse Wheel Up"
new "Rueda del Mouse para arriba"
# game/screens.rpy:1359
old "Start, Guide, B/Right Button"
new "Start, Guia, B/Botón Derecho"
# game/screens.rpy:1792
old "Menu"
new "Menú"
old "Backspace"
new "Tecla de borrar"
old "Hides mod details. Shows mod errors if there is any."
new "Esconde los detalles de los mods. Muestra los errores relacionados a los mods"

View File

@@ -4099,24 +4099,12 @@ translate es FastTimesAtVolcanoHigh_94e85886:
# A "Well... {w=0.3}Spears convinced me to send out a couple application letters for college."
A "Bueno... {w=0.3}Spears me convenció de enviar un par de letras de aplicación para la universidad."
# game/script/13D.fang-plays-well,-naomi-jealous,-fang-talks-to-anon-to-break-up-while-she-thinks-about-her-life.rpy:3121
translate es FastTimesAtVolcanoHigh_4e617de4:
# A "Im thinking of doing something with music{cps=*.1}...{/cps} maybe becoming a sound engineer?"
A "Estoy pensando en hacer algo con música{cps=*.1}...{/cps} ¿quizás convertirme en ingeniero de sonido?"
# game/script/13D.fang-plays-well,-naomi-jealous,-fang-talks-to-anon-to-break-up-while-she-thinks-about-her-life.rpy:3124
translate es FastTimesAtVolcanoHigh_a2735d38:
# A "Im not sure yet."
A "Todavía no estoy seguro."
# game/script/13D.fang-plays-well,-naomi-jealous,-fang-talks-to-anon-to-break-up-while-she-thinks-about-her-life.rpy:3126
translate es FastTimesAtVolcanoHigh_4e617de4_1:
# A "Im thinking of doing something with music{cps=*.1}...{/cps} maybe becoming a sound engineer?"
A "Estoy pensando en hacer algo con música{cps=*.1}...{/cps} ¿quizás convertirme en ingeniero de sonido?"
# game/script/13D.fang-plays-well,-naomi-jealous,-fang-talks-to-anon-to-break-up-while-she-thinks-about-her-life.rpy:3128
translate es FastTimesAtVolcanoHigh_5ce0f5f5:
@@ -6127,3 +6115,11 @@ translate es strings:
old "Not certain just yet"
new "Todavía no estoy seguro"
# TODO: Translation updated at 2023-05-07 00:20
# game/script/13D.fang-plays-well,-naomi-jealous,-fang-talks-to-anon-to-break-up-while-she-thinks-about-her-life.rpy:3123
translate es FastTimesAtVolcanoHigh_4e617de4:
# A "Im thinking of doing something with music{cps=*.1}...{/cps} maybe becoming a sound engineer?"
A "Estoy pensando en hacer algo con música{cps=*.1}...{/cps} ¿quizás convertirme en ingeniero de sonido?"

View File

@@ -2226,48 +2226,6 @@ translate es PostCableConundrum_797b4809:
# "Right into Trishs trap, {w=0.3}hook, {w=0.3}line, {w=0.3}sinker and rod."
"Justo en la trampa, {w=0.3}el anzuelo, {w=0.3}la línea, {w=0.3}la plomada y en la caña de Trish."
# game/script/7.concert-day.rpy:1539
translate es PostCableConundrum_afcbc2bb:
# A "I do NOT have a thing for Incontineisha."
A "La incontinencia NO es mi fetiche."
# game/script/7.concert-day.rpy:1542
translate es PostCableConundrum_afcbc2bb_1:
# A "I do NOT have a thing for Incontineisha."
A "La incontinencia NO es mi fetiche."
# game/script/7.concert-day.rpy:1545
translate es PostCableConundrum_afcbc2bb_2:
# A "I do NOT have a thing for Incontineisha."
A "La incontinencia NO es mi fetiche."
# game/script/7.concert-day.rpy:1548
translate es PostCableConundrum_afcbc2bb_3:
# A "I do NOT have a thing for Incontineisha."
A "La incontinencia NO es mi fetiche."
# game/script/7.concert-day.rpy:1551
translate es PostCableConundrum_afcbc2bb_4:
# A "I do NOT have a thing for Incontineisha."
A "La incontinencia NO es mi fetiche."
# game/script/7.concert-day.rpy:1554
translate es PostCableConundrum_afcbc2bb_5:
# A "I do NOT have a thing for Incontineisha."
A "La incontinencia NO es mi fetiche."
# game/script/7.concert-day.rpy:1557
translate es PostCableConundrum_afcbc2bb_6:
# A "I do NOT have a thing for Incontineisha."
A "La incontinencia NO es mi fetiche."
# game/script/7.concert-day.rpy:1560
translate es PostCableConundrum_afcbc2bb_7:
@@ -2630,3 +2588,11 @@ translate es strings:
old "No."
new "No."
# TODO: Translation updated at 2023-05-07 00:20
# game/script/7.concert-day.rpy:1556
translate es PostCableConundrum_afcbc2bb:
# A "I do NOT have a thing for Incontineisha."
A "La incontinencia NO es mi fetiche."

View File

@@ -0,0 +1,144 @@
# TODO: Translation updated at 2024-10-07 00:57
translate es strings:
# game/src/chapter_select.rpy:1
old "1. First Day of School"
new "1. El Primer Día de la Escuela"
# game/src/chapter_select.rpy:1
old "2. Meeting the Band"
new "2. Conociendo a la Banda"
# game/src/chapter_select.rpy:1
old "3. Band Practice"
new "3. Practica de Banda"
# game/src/chapter_select.rpy:1
old "4. Music Class"
new "4. La Clase de Música"
# game/src/chapter_select.rpy:1
old "5. Gardening Club / Heart to Heart"
new "5. El Club de Jardinería / De corazón a corazón"
# game/src/chapter_select.rpy:1
old "6. Not a Date"
new "6. No es una Cita"
# game/src/chapter_select.rpy:1
old "7. Concert Day"
new "7. Día de Concierto"
# game/src/chapter_select.rpy:1
old "8. Study Session"
new "8. Sesión de Estudio"
# game/src/chapter_select.rpy:1
old "9. VVURM DRAMA"
new "9. VVURM DRAMA"
# game/src/chapter_select.rpy:1
old "10. Confession"
new "10. Confesión"
# game/src/chapter_select.rpy:1
old "11. Naser drama"
new "11. Drama de Naser"
# game/src/chapter_select.rpy:15
old "11.5. Announcing a Plan"
new "11.5. Anunciando un Plan"
# game/src/chapter_select.rpy:15
old "12. Let's all go to the Museum"
new "12. Vayamos al Museo"
# game/src/chapter_select.rpy:15
old "13. Prom is Complicated"
new "13. El Baile de Graduación es Complicado"
# game/src/chapter_select.rpy:15
old "14. Bowling for Volcano High"
new "14. Bolos para el Instituto Volcano"
# game/src/chapter_select.rpy:22
old "11.5. Announcing Nothing Important"
new "11.5. Anunciando Nada Importante"
# game/src/chapter_select.rpy:22
old "12. Let's all go to a Concert"
new "12. Vayamos Todos a un Concierto"
# game/src/chapter_select.rpy:22
old "13. Prom is For Suckers"
new "13. El Baile de Graduación es Para Perdedores"
# game/src/chapter_select.rpy:22
old "14. Anon and the Infinite Sadness"
new "14. Anon y la Tristesa Infinita"
# game/src/chapter_select.rpy:29
old "11.5. Announcing a Date"
new "11.5. Anunciando una Cita"
# game/src/chapter_select.rpy:29
old "12. Let's all go Camping"
new "12. Vayamos Todos a Acampar"
# game/src/chapter_select.rpy:29
old "13. Prom is Surprising"
new "13. El Baile de Graduación es Sorprendente"
# game/src/chapter_select.rpy:29
old "14. Volcano Highschool Musical"
new "14. El Musical del Instituto Volcano"
# game/src/chapter_select.rpy:36
old "11.5. Announcing a Show"
new "11.5. Anunciando un Show"
# game/src/chapter_select.rpy:36
old "12. Let's all go to the Aquarium"
new "12. Vayamos Todos al Acuario"
# game/src/chapter_select.rpy:36
old "13. Prom is Memorable"
new "13. El Baile de Graduación es Memorable"
# game/src/chapter_select.rpy:36
old "14. Fast Times at Volcano High"
new "14. Tiempos Rapidos en el Instituto Volcano"
# game/src/chapter_select.rpy:80
old "What ending do you want to lock to?"
new "¿Qué final quieres elegír?"
# game/src/chapter_select.rpy:80
old "Ending 1"
new "Final 1"
# game/src/chapter_select.rpy:80
old "Ending 2"
new "Final 2"
# game/src/chapter_select.rpy:80
old "Ending 3"
new "Final 3"
# game/src/chapter_select.rpy:80
old "Ending 4"
new "Final 4"
# game/src/chapter_select.rpy:80
old "Exit to main menu"
new "Volver al menú principal"
# game/src/chapter_select.rpy:158
old "Next Page"
new "Siguiente página"
# game/src/chapter_select.rpy:158
old "Go Back"
new "Atrás"

View File

@@ -126,3 +126,19 @@ translate es strings:
old "Special Thanks:"
new "Agradecimientos especiales:"
# TODO: Translation updated at 2024-10-07 00:57
translate es strings:
# game/src/credits.rpy:80
old "Translators (Italian):"
new "Traducción (Italiano):"
# game/src/credits.rpy:80
old "Proofreaders (Italian):"
new "Revisado por (Italiano):"
# game/src/credits.rpy:80
old "Asset help (Italian):"
new "Ayuda extra (Italiano):"

View File

@@ -0,0 +1,80 @@
# TODO: Translation updated at 2024-10-07 00:57
translate es strings:
# game/src/misc_definitions.rpy:34
old "Anon"
new "Anon"
# game/src/misc_definitions.rpy:35
old "Fang"
new "Fang"
# game/src/misc_definitions.rpy:36
old "Lucy"
new "Lucy"
# game/src/misc_definitions.rpy:37
old "Rosa"
new "Rosa"
# game/src/misc_definitions.rpy:38
old "Stella"
new "Stella"
# game/src/misc_definitions.rpy:39
old "Naomi"
new "Naomi"
# game/src/misc_definitions.rpy:40
old "Naser"
new "Naser"
# game/src/misc_definitions.rpy:41
old "Trish"
new "Trish"
# game/src/misc_definitions.rpy:43
old "Spears"
new "Spears"
# game/src/misc_definitions.rpy:44
old "Reed"
new "Reed"
# game/src/misc_definitions.rpy:54
old "(???)"
new "(???)"
# game/src/misc_definitions.rpy:55
old "Mr. Jingo"
new "Sr. Jingo"
# game/src/misc_definitions.rpy:56
old "Maitre D"
new "Maitre D"
# game/src/misc_definitions.rpy:57
old "Moe"
new "Moe"
# game/src/misc_definitions.rpy:58
old "Vince"
new "Vince"
# game/src/misc_definitions.rpy:60
old "Riley"
new "Riley"
# game/src/misc_definitions.rpy:61
old "Tana"
new "Tana"
# game/src/misc_definitions.rpy:62
old "Trevor"
new "Trevor"
# game/src/misc_definitions.rpy:73
old "Chet"
new "Chet"

186
game/tl/es/src/mod_menu.rpy Normal file
View File

@@ -0,0 +1,186 @@
# TODO: Translation updated at 2024-10-07 00:57
translate es strings:
# game/src/mod_menu.rpy:584
old "the root of the mods folder"
new "la carpeta base de mods"
# game/src/mod_menu.rpy:597
old " for '{color=#ffbdbd}"
new " para '{color=#ffbdbd}"
# game/src/mod_menu.rpy:597
old "{/color}' language"
new "{/color}' del lenguaje"
# game/src/mod_menu.rpy:605
old "{color=#ff1e1e}Mod in "
new "{color=#ff1e1e}El mod "
# game/src/mod_menu.rpy:605
old " failed to load: Metadata is formatted incorrectly. Check log.txt or console for more info.{/color}"
new " no se pudo cargar: Los metadatos no están correctamente formateados. Revisa log.txt o la consola para más información.{/color}"
# game/src/mod_menu.rpy:607
old "{color=#ff8b1f}Metadata in "
new "{color=#ff8b1f}Los metadatos en "
# game/src/mod_menu.rpy:607
old " is formatted incorrectly. Check log.txt or console for more info.{/color}"
new " no están correctamente formateados. Revisa log.txt o la consola para más información.{/color}"
# game/src/mod_menu.rpy:609
old "{color=#ff8b1f}Mod's name in "
new "{color=#ff8b1f}El nombre del mod "
# game/src/mod_menu.rpy:609
old " is not a string.{/color}"
new " no es un texto.{/color}"
# game/src/mod_menu.rpy:611
old "{color=#ff8b1f}Mod's label in "
new "{color=#ff8b1f}La label del mod en "
# game/src/mod_menu.rpy:613
old "{color=#ff8b1f}Display mode in "
new "{color=#ff8b1f}El modo de display del mod "
# game/src/mod_menu.rpy:615
old " is not valid. Valid options are 'both', 'icon' and 'name', not "
new " no es válido. Las opciones validas son 'both', 'icon' y 'name', no "
# game/src/mod_menu.rpy:615
old ".{/color}"
new ".{/color}"
# game/src/mod_menu.rpy:617
old "{color=#ff8b1f}Mod's version in "
new "{color=#ff8b1f}La versión del mod "
# game/src/mod_menu.rpy:619
old "{color=#ff8b1f}Mod's authors in "
new "{color=#ff8b1f}Los autores del mod "
# game/src/mod_menu.rpy:619
old " is not a string or list.{/color}"
new " no es un texto o lista.{/color}"
# game/src/mod_menu.rpy:621
old "{color=#ff8b1f}Author "
new "{color=#ff8b1f}El autor "
# game/src/mod_menu.rpy:621
old " in "
new " de "
# game/src/mod_menu.rpy:623
old "{color=#ff8b1f}Mod's links in "
new "{color=#ff8b1f}Los links del mod "
# game/src/mod_menu.rpy:625
old "{color=#ff8b1f}Link "
new "{color=#ff8b1f}El link "
# game/src/mod_menu.rpy:627
old "{color=#ff8b1f}Mod's description in "
new "{color=#ff8b1f}La descripción del mod "
# game/src/mod_menu.rpy:629
old "{color=#ff8b1f}Mod's mobile description in "
new "{color=#ff8b1f}La descripción para celular del mod "
# game/src/mod_menu.rpy:631
old "{color=#ff8b1f}Mod's screenshot displayables in "
new "{color=#ff8b1f}Las screenshots displayables del mod "
# game/src/mod_menu.rpy:631
old " is not a list.{/color}"
new " no es una lista.{/color}"
# game/src/mod_menu.rpy:633
old "{color=#ff8b1f}Screenshot Displayable "
new "{color=#ff8b1f}La screenshot displayable "
# game/src/mod_menu.rpy:635
old "{color=#ff8b1f}Mod's icon displayable in "
new "{color=#ff8b1f}El icono displayable del mod "
# game/src/mod_menu.rpy:637
old "{color=#ff8b1f}Mod's thumbnail displayable in "
new "{color=#ff8b1f}La miniatura displayable del mod "
# game/src/mod_menu.rpy:639
old " failed to load: Does not have a mod ID.{/color}"
new " no se pudo cargar: No tiene ID.{/color}"
# game/src/mod_menu.rpy:641
old " failed to load: ID is not a string.{/color}"
new " no se pudo cargar: Su ID no es un texto.{/color}"
# game/src/mod_menu.rpy:643
old " failed to load: Another mod "
new " no se pudo cargar: Otro mod "
# game/src/mod_menu.rpy:643
old " has the same ID.{/color}"
new " tiene el mismo ID.{/color}"
# game/src/mod_menu.rpy:645
old " is not installed correctly.\nMake sure it's structure is "
new " no está instalado correctamente.\nAsegurate de que su estructura sea "
# game/src/mod_menu.rpy:645
old " instead of "
new " en vez de "
# game/src/mod_menu.rpy:647
old "{color=#ff8b1f}"
new "{color=#ff8b1f}"
# game/src/mod_menu.rpy:647
old " image for mod in "
new " imagen del mod "
# game/src/mod_menu.rpy:647
old " has an incompatible file extension. {a=https://www.renpy.org/doc/html/displayables.html#images}Only use images that Ren'Py supports!{/a}{/color}"
new " tiene un formato incompatible. {a=https://www.renpy.org/doc/html/displayables.html#images}¡Solo usa imagenes que Renpy soporte!{/a}{/color}"
# game/src/mod_menu.rpy:708
old "Reload Mods"
new "Recargar Mods"
# game/src/mod_menu.rpy:888
old "You have no mods! \nInstall some in:\n\"{color=#abd7ff}[mod_menu_moddir]{/color}\""
new "¡No tienes mods! \nInstala algunos en:\n\"{color=#abd7ff}[mod_menu_moddir]{/color}\""
# game/src/mod_menu.rpy:969
old "Name: "
new "Nombre: "
# game/src/mod_menu.rpy:973
old "Version: "
new "Versión: "
# game/src/mod_menu.rpy:978
old "Authors: "
new "Autores: "
# game/src/mod_menu.rpy:982
old "Author: "
new "Autor: "
# game/src/mod_menu.rpy:987
old "Links: "
new "Links: "
# game/src/mod_menu.rpy:991
old "Link: "
new "Link: "
# game/src/mod_menu.rpy:1062
old "Installing mods is dangerous since you are running unknown code in your computer. Only install mods from sources that you trust.\n\nIf you have problems with installed mods, check the README.md in the root of the mods folder."
new "Instalar mods es peligroso, ya que estás ejecutando código desconocido en tu ordenador. Sólo instala mods de fuentes en las que confíes.\n\nSi tienes problemas con los mods instalados, consulta el archivo README.md (Inglés) en la raíz de la carpeta de mods."
old "Show Errors"
new "Mostrar Errores"

View File

@@ -0,0 +1,8 @@
# TODO: Translation updated at 2024-10-07 00:57
translate es strings:
# game/src/translation.rpy:28
old "OK"
new "OK"

1208
game/tl/it/common.rpy Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

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