diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4db639b305f5444bce8d2bb611ea9b09daf930f0..e9a62e3dd1dd03715a0547dd27aed909e2e39a7d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,17 +1,25 @@ +.official-releases: + rules: + - if: $CI_COMMIT_TAG =~ /\A\d+\.\d+\.\d+\z/ + stages: - build - upload - release variables: - FC_PREGMOD_HTML: "FC_pregmod_${CI_COMMIT_TAG}.html" + FC_PREGMOD_ARCHIVE: "FC_pregmod_${CI_COMMIT_TAG}.zip" + # precompiled / assets + # the URLs are the same as inside the game, change both if updating + WEBGL_NAME: "WebGL art assets" + WEBGL_URL: "https://mega.nz/folder/DogSxTiD#boO9kcbIhpXKCogjXMVwxQ" + RENDER_NAME: "Rendered imagepack (outdated)" + RENDER_URL: "https://mega.nz/file/upoAlBaZ#EbZ5wCixxZxBhMN_ireJTXt0SIPOywO2JW9XzTIPhe0" build: stage: build image: debian:latest - rules: - # only for official releases - - if: $CI_COMMIT_TAG =~ /\A\d+\.\d+\.\d+\z/ + extends: .official-releases script: - ./compile.sh --ci artifacts: @@ -21,14 +29,12 @@ build: upload: stage: upload image: gitgud.io:5050/pregmodfan/fc-pregmod:megacmd - rules: - # only for official releases - - if: $CI_COMMIT_TAG =~ /\A\d+\.\d+\.\d+\z/ + extends: .official-releases script: - mega-login $MEGA_MAIL $MEGA_PWD - - mv bin/FC_pregmod.html bin/$FC_PREGMOD_HTML - - mega-put bin/$FC_PREGMOD_HTML / - - echo "MEGA_URL=$(mega-export -a /$FC_PREGMOD_HTML | grep -o https.*)" >> variables.env + - zip bin/$FC_PREGMOD_ARCHIVE bin/FC_pregmod.html + - mega-put bin/$FC_PREGMOD_ARCHIVE / + - echo "MEGA_URL=$(mega-export -a /$FC_PREGMOD_ARCHIVE | grep -o https.*)" >> variables.env artifacts: # carry MEGA_URL over to the release job reports: @@ -37,11 +43,22 @@ upload: release: stage: release image: registry.gitlab.com/gitlab-org/release-cli:latest - rules: - # only for official releases - - if: $CI_COMMIT_TAG =~ /\A\d+\.\d+\.\d+\z/ + extends: .official-releases script: + # extract changes from changelog + # get line of version header + 1 + - START=$(awk 'match($1,"##") && match($2,v){print NR+1; exit}' v="0.10.7.1-$CI_COMMIT_TAG" CHANGELOG.md) + # drop everything above the release including the release header + - tail -n +$START CHANGELOG.md > tmp + # get line of next version header - 1 + - END=$(awk 'match($1,"##") && match($2,v){print NR-1; exit}' v="0.10.7.1" tmp) + # drop everything after current release + - DESCRIPTION=$(head -n $END tmp) + # create release + # assets are displayed in inverse order to how they are defined here - | - release-cli create --name $CI_COMMIT_TAG --description "Download ${FC_PREGMOD_HTML} to play the game." \ - --tag-name $CI_COMMIT_TAG \ - --assets-link "{\"name\":\"${FC_PREGMOD_HTML}\",\"url\":\"${MEGA_URL}\"}" + release-cli create --name "$CI_COMMIT_TAG" --description "$DESCRIPTION" \ + --tag-name "$CI_COMMIT_TAG" \ + --assets-link "{\"name\":\"${RENDER_NAME}\",\"url\":\"${RENDER_URL}\"}" \ + --assets-link "{\"name\":\"${WEBGL_NAME}\",\"url\":\"${WEBGL_URL}\"}" \ + --assets-link "{\"name\":\"${FC_PREGMOD_ARCHIVE}\",\"url\":\"${MEGA_URL}\"}" diff --git a/CHANGELOG.md b/CHANGELOG.md index fd25f8ac7d6fbce0cd3587ff38af66181a84ed5e..864ee5691503084a665be51f435d52100e7a1cfe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,16 +4,30 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) with the difference that every version is prefixed with the vanilla version it is based on. Format is: `vanilla-pregmod` -## [Unreleased] +## Unreleased -## [0.10.7.1-3.9.1] - 2021-03-09 +## 0.10.7.1-3.9.4 - 2021-03-12 + +* fixes incubator issues + +## 0.10.7.1-3.9.3 - 2021-03-12 + +* fixes event issues +* incubator object conversion + +## 0.10.7.1-3.9.2 - 2021-03-11 + +* more JS conversion +* fixes + +## 0.10.7.1-3.9.1 - 2021-03-09 * added Elohiem's openGL renders * added HG abortion permissions * raiding, expiration & retirement JS conversions * fixes -## [0.10.7.1-3.9.0] - 2021-03-02 +## 0.10.7.1-3.9.0 - 2021-03-02 * added catmod, a mod that allows you to develop and produce your own catgirls * new events @@ -22,7 +36,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * more event conversions * fixes -## [0.10.7.1-3.8.6] - 2021-01-25 +## 0.10.7.1-3.8.6 - 2021-01-25 * sugarcube updated to 2.34.1 * new clothing vectors for revamped art set @@ -31,7 +45,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * cleaned up facility head related tutoring * your usual fixes and code improvements -## [0.10.7.1-3.8.5] - 2020-12-29 +## 0.10.7.1-3.8.5 - 2020-12-29 * added the toy shop (custom sex toy printing) * added extreme implant breast shape "spherical" @@ -44,7 +58,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * SC tweaks to facilitate complete conversion to JS from tweeScript * fixes -## [0.10.7.1-3.8.4] - 2020-12-22 +## 0.10.7.1-3.8.4 - 2020-12-22 * learned how to add vectors * fixed nicea event chain @@ -54,12 +68,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * lingering passage .tw files converted to DOM * fixes -## [0.10.7.1-3.8.3] - 2020-12-13 +## 0.10.7.1-3.8.3 - 2020-12-13 * lots of under the hood work * fixes -## [0.10.7.1-3.8.2] - 2020-11-06 +## 0.10.7.1-3.8.2 - 2020-11-06 * weather updates * overhauled smart and dumb vibrators @@ -70,26 +84,26 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * fixes * further code optimization -## [0.10.7.1-3.8.1] - 2020-10-04 +## 0.10.7.1-3.8.1 - 2020-10-04 * added the ability to favorite slaves * more Neo Imp events * considerable overhauling of the pit and related code * fixes and code improving -## [0.10.7.1-3.8.0] - 2020-09-13 +## 0.10.7.1-3.8.0 - 2020-09-13 * added Neo Imperialism FS * added undercut hairstyle * various fixes and code cleaning * ongoing major code overhauls -## [0.10.7.1-3.7.1] - 2020-08-30 +## 0.10.7.1-3.7.1 - 2020-08-30 * added hormone controls to the dairy * various fixes and code cleaning -## [0.10.7.1-3.7.0] - 2020-08-27 +## 0.10.7.1-3.7.0 - 2020-08-27 * revamped tiredness * revamped illness @@ -97,18 +111,18 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * various code touch ups * fixes -## [0.10.7.1-3.6.2] - 2020-08-01 +## 0.10.7.1-3.6.2 - 2020-08-01 * SugarCube updated to 2.33.1 * completion of RECI cleanup * fixes -## [0.10.7.1-3.6.1] - 2020-07-31 +## 0.10.7.1-3.6.1 - 2020-07-31 * added The Utopian Orphanage slave school * SugarCube updated to 2.33.0 -## [0.10.7.1-3.6.0] - 2020-07-30 +## 0.10.7.1-3.6.0 - 2020-07-30 * revised mobility tracking * overhauled inbreeding effects @@ -116,14 +130,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * continued code cleanup * fixes -## [0.10.7.1-3.5.4] - 2020-07-06 +## 0.10.7.1-3.5.4 - 2020-07-06 * added hair to the organ farm * more code cleanup * breast size immobilization floor raised for adult/teen slaves * fixes -## [0.10.7.1-3.5.3] - 2020-06-16 +## 0.10.7.1-3.5.3 - 2020-06-16 * custom hotkeys * custom theme support @@ -133,12 +147,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * longSlaveDescription converted to DOM * fixes & code improvements -## [0.10.7.1-3.5.2] - 2020-06-06 +## 0.10.7.1-3.5.2 - 2020-06-06 * sub slave content expanded * backend work -## [0.10.7.1-3.5.1] - 2020-05-13 +## 0.10.7.1-3.5.1 - 2020-05-13 * browser saving rework * split neck accessories into face and neck slots @@ -146,7 +160,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * added tracking for abortions, miscarriages, pit wins and pit losses * fixes -## [0.10.7.1-3.5.0] - 2020-05-03 +## 0.10.7.1-3.5.0 - 2020-05-03 * SugarCube updated to 2.31.1 * added a python based save editor @@ -159,17 +173,17 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * deprecated vanilla relationships (replaced by limit family growth) * various fixes and cleaning -## [0.10.7.1-3.4.1] - 2020-03-27 +## 0.10.7.1-3.4.1 - 2020-03-27 * various fixes, tidying and cleanup -## [0.10.7.1-3.4.0] - 2020-03-15 +## 0.10.7.1-3.4.0 - 2020-03-15 * added Stud subordinate slave role and associated universal impregnation rule * arcology layout overhauled * fixes -## [0.10.7.1-3.3.3] - 2020-03-07 +## 0.10.7.1-3.3.3 - 2020-03-07 * added corrective diet * food market tweaking @@ -177,11 +191,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * fixes * more code improvement -## [0.10.7.1-3.3.2] - 2020-03-02 +## 0.10.7.1-3.3.2 - 2020-03-02 * fixed lingering assistant issues -## [0.10.7.1-3.3.1] - 2020-03-01 +## 0.10.7.1-3.3.1 - 2020-03-01 * added a follow up event to "snatch and grab" * assistant code restructuring @@ -189,7 +203,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * continued code DOMifiying * fixes -## [0.10.7.1-3.3.0] - 2020-02-23 +## 0.10.7.1-3.3.0 - 2020-02-23 * tiredness overhauled (temp disabled) * illness tweaked @@ -208,11 +222,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * major code structure improvements * various fixes and balance changes -## [0.10.7.1-3.2.1] - 2019-12-26 +## 0.10.7.1-3.2.1 - 2019-12-26 * fixes -## [0.10.7.1-3.2.0] - 2019-12-25 +## 0.10.7.1-3.2.0 - 2019-12-25 * slave health overhaul (short and long term health, exhaustion effects and illness) * slave release rules overhaul (better control of who they do in their free time) @@ -223,23 +237,23 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * added pit assign/remove rules to the RA * fixes and cleaning -## [0.10.7.1-3.1.4] - 2019-12-11 +## 0.10.7.1-3.1.4 - 2019-12-11 * JS'd saGetMilked * milk value slightly boosted with repopulation law * tweaked femCum output upwards -## [0.10.7.1-3.1.3] +## 0.10.7.1-3.1.3 * removed lingering isPlayerFertile()s * fixes -## [0.10.7.1-3.1.2] - 2019-12-10 +## 0.10.7.1-3.1.2 - 2019-12-10 * fixed critical error in BC player object conversion * temporarily added option to remove accidental dicks from the player to options -## [0.10.7.1-3.1.1] - 2019-12-09 +## 0.10.7.1-3.1.1 - 2019-12-09 * added slave search feature * closed major RA exploit @@ -247,7 +261,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * slave listing performance improvements * fixes and cleaning -## [0.10.7.1-3.1.0] - 2019-12-04 +## 0.10.7.1-3.1.0 - 2019-12-04 * standardized player and slave objects * cheat edit player and player testicle enhancement disabled for cleaning @@ -258,7 +272,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * FS naming is now player selectable instead of a priority * minor fixes and JSification -## [0.10.7.1-3.0.0] - 2019-11-21 +## 0.10.7.1-3.0.0 - 2019-11-21 * added FS Intellectual Dependency * added FS Slave Professionalism @@ -267,14 +281,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * minor bug fixes * eyes currently in a state of flux -## [0.10.7.1-2.9.2] - 2019-11-09 +## 0.10.7.1-2.9.2 - 2019-11-09 * SugarCube updated to 2.30.0 * RA told to start working properly again * 3.0.0 work (SP research - Bimbo slave names) * various minor fixes and cleaning -## [0.10.7.1-2.9.1] - 2019-10-28 +## 0.10.7.1-2.9.1 - 2019-10-28 * beta 3.0.0 work (schoolroom remodel) * added ability to reject delivered custom slaves without closing the order @@ -283,39 +297,39 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * fixes * saTakeClasses JSification -## [0.10.7.1-2.9.0] - 2019-10-15 +## 0.10.7.1-2.9.0 - 2019-10-15 * corporation overhauling * some minor ui settings * fixes and cleaning * beta 3.0.0 work -## [0.10.7.1-2.8.2] - 2019-10-01 +## 0.10.7.1-2.8.2 - 2019-10-01 * amputation rework * support for missing eyes * added RA controls for birth and abortion tallies * fixes and cleaning -## [0.10.7.1-2.8.1] - 2019-09-03 +## 0.10.7.1-2.8.1 - 2019-09-03 * amputation rework nearing completion * tweaks to the RA and facility workers * altered gender fund bimbo law (it now focuses on lack of education instead) * fixes and cleaning -## [0.10.7.1-2.8.0] - 2019-08 +## 0.10.7.1-2.8.0 - 2019-08 * large update to the nursery beta content * fixes and cleaning -## [0.10.7.1-2.7.0] - 2019-08 +## 0.10.7.1-2.7.0 - 2019-08 * secExp refactoring + expansion * amputation rework in progress * development of FCHost -## [0.10.7.1-2.6.0] - 2019-07-31 +## 0.10.7.1-2.6.0 - 2019-07-31 * scar system added * partial amputation and amp rework underway @@ -323,23 +337,23 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * player slave impregnation bug fixed * fixes and cleaning -## [0.10.7.1-2.5.3] - 2019-07-09 +## 0.10.7.1-2.5.3 - 2019-07-09 * SugarCube updated to 2.29.0 * incest toggle added * added more watersports content * various fixes and cleanings -## [0.10.7.1-2.5.2] - 2019-06-27 +## 0.10.7.1-2.5.2 - 2019-06-27 * fixes -## [0.10.7.1-2.5.1] - 2019-06-17 +## 0.10.7.1-2.5.1 - 2019-06-17 * fixes * more vignettes added -## [0.10.7.1-2.5.0] - 2019-06-14 +## 0.10.7.1-2.5.0 - 2019-06-14 * RA refactoring * multibranding @@ -351,7 +365,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * added androgyny genetic quirk * fixes -## [0.10.7.1-2.4.0] - 2019-05-25 +## 0.10.7.1-2.4.0 - 2019-05-25 * unified cybermod with vanilla * major pronoun work (99.9% completion) @@ -372,43 +386,43 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * restored chem summary to the clinic * fixes -## [0.10.7.1-2.3.8] - 2019-04-17 +## 0.10.7.1-2.3.8 - 2019-04-17 * fixes -## [0.10.7.1-2.3.7] - 2019-04-15 +## 0.10.7.1-2.3.7 - 2019-04-15 * converted saWhore to js * added rules summary to the RA * fixes -## [0.10.7.1-2.3.6] - 2019-04-14 +## 0.10.7.1-2.3.6 - 2019-04-14 * fixes -## [0.10.7.1-2.3.5] - 2019-04-13 +## 0.10.7.1-2.3.5 - 2019-04-13 * fixes -## [0.10.7.1-2.3.4] - 2019-04-12 +## 0.10.7.1-2.3.4 - 2019-04-12 * fixed issues with salon skin treatments * fixed inflation errors -## [0.10.7.1-2.3.3] +## 0.10.7.1-2.3.3 * fixes -## [0.10.7.1-2.3.2] - 2019-04-11 +## 0.10.7.1-2.3.2 - 2019-04-11 * fixes * tweaked need -## [0.10.7.1-2.3.1] +## 0.10.7.1-2.3.1 * major fixes to slave skills (BC required) -## [0.10.7.1-2.3.0] - 2019-04-09 +## 0.10.7.1-2.3.0 - 2019-04-09 * Arcade overhauled * population now affects demand @@ -428,35 +442,35 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * fixes * code cleaning -## [0.10.7.1-2.2.5] - 2019-03-15 +## 0.10.7.1-2.2.5 - 2019-03-15 * fixes * code cleaning * CSS tweaks to intro summary -## [0.10.7.1-2.3.4] - 2019-03-13 +## 0.10.7.1-2.3.4 - 2019-03-13 * fixes * code cleaning * player engineering skill now functional -## [0.10.7.1-2.2.3] - 2019-03-11 +## 0.10.7.1-2.2.3 - 2019-03-11 * fixes * CSS tweaks * body modification reactions expanded -## [0.10.7.1-2.2.2] +## 0.10.7.1-2.2.2 * fixes * code cleaning -## [0.10.7.1-2.2.1] - 2019-03-10 +## 0.10.7.1-2.2.1 - 2019-03-10 * fixes * code cleaning -## [0.10.7.1-2.2.0] - 2019-03-09 +## 0.10.7.1-2.2.0 - 2019-03-09 * overhauled chastity * overhauled reputation tracking @@ -477,134 +491,134 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * fixes * various code cleaning -## [0.10.7.1-2.1.6] - 2019-02-08 +## 0.10.7.1-2.1.6 - 2019-02-08 * fixes * cleaning * adjustments to secEx balances -## [0.10.7.1-2.1.5] - 2019-02-06 +## 0.10.7.1-2.1.5 - 2019-02-06 * fixes * nox/deepmurk vector art now reflects basic height -## [0.10.7.1-2.1.4] - 2019-02-04 +## 0.10.7.1-2.1.4 - 2019-02-04 * fixes * penthouse milkers upgrade now only milks * "well hung" can now apply to female slave development * more code cleaning -## [0.10.7.1-2.1.3] - 2019-02-02 +## 0.10.7.1-2.1.3 - 2019-02-02 * enabled "well hung" genetic quirk * fixes -## [0.10.7.1-2.1.2] - 2019-02-01 +## 0.10.7.1-2.1.2 - 2019-02-01 * fixes -## [0.10.7.1-2.1.1] +## 0.10.7.1-2.1.1 * fixes -## [0.10.7.1-2.1.0] +## 0.10.7.1-2.1.0 * added ear surgery (elf) * groundwork for multiple marriage * fixes and cleaning -## [0.10.7.1-2.0.2] - 2019-01-29 +## 0.10.7.1-2.0.2 - 2019-01-29 * fixes -## [0.10.7.1-2.0.1] +## 0.10.7.1-2.0.1 * fixes -## [0.10.7.1-2.0.0] - 2019-01-28 +## 0.10.7.1-2.0.0 - 2019-01-28 * core SugarCube changes (now built from source) -## [0.10.7.1-1.7.1] - 2019-01-28 +## 0.10.7.1-1.7.1 - 2019-01-28 * fixes -## [0.10.7.1-1.7.0] - 2019-01-26 +## 0.10.7.1-1.7.0 - 2019-01-26 * corporation overhauled * more farmyard development * food resource and management (optional) * fixes -## [0.10.7.1-1.6.4] - 2019-01-23 +## 0.10.7.1-1.6.4 - 2019-01-23 * fixes -## [0.10.7.1-1.6.3] - 2019-01-21 +## 0.10.7.1-1.6.3 - 2019-01-21 * fixes * sufficiently grown babies may survive slave bursting -## [0.10.7.1-1.6.2] +## 0.10.7.1-1.6.2 * more budget fixes to seeUnit and pPeaceKeepersDeficit -## [0.10.7.1-1.6.1] +## 0.10.7.1-1.6.1 * fixed an error with cloning -## [0.10.7.1-1.6.0] +## 0.10.7.1-1.6.0 * overhauled budget tracking * embedded vector art now handled in JS * fixes -## [0.10.7.1-1.5.9] - 2019-01-16 +## 0.10.7.1-1.5.9 - 2019-01-16 * fixes and cleaning -## [0.10.7.1-1.5.8] - 2019-01-13 +## 0.10.7.1-1.5.8 - 2019-01-13 * fixes * belly implant microfilter can be installed anally * cleaning -## [0.10.7.1-1.5.7] - 2019-01-12 +## 0.10.7.1-1.5.7 - 2019-01-12 * fixes * improved RA accent handling * backend code work -## [0.10.7.1-1.5.6] - 2019-01-11 +## 0.10.7.1-1.5.6 - 2019-01-11 * now with even more fixes and cleaning * tweaked preg biometrics to require ovaries of some sort -## [0.10.7.1-1.5.5] - 2019-01-09 +## 0.10.7.1-1.5.5 - 2019-01-09 * more fixes and cleaning -## [0.10.7.1-1.5.4] - 2019-01-08 +## 0.10.7.1-1.5.4 - 2019-01-08 * more fixes and cleaning -## [0.10.7.1-1.5.3] - 2019-01-05 +## 0.10.7.1-1.5.3 - 2019-01-05 * fixes * more cleaning -* `[!]` appears when you can upgrade an FS now too +* `!` appears when you can upgrade an FS now too -## [0.10.7.1-1.5.2] - 2019-01-03 +## 0.10.7.1-1.5.2 - 2019-01-03 * fixes * more cleaning -## [0.10.7.1-1.5.1] - 2019-01-02 +## 0.10.7.1-1.5.1 - 2019-01-02 * fixes -## [0.10.7.1-1.5.0] - 2019-01-01 +## 0.10.7.1-1.5.0 - 2019-01-01 * fixed cloning * added an ovary implant to boost fertility @@ -614,30 +628,30 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * various code clean up * fixes -## [0.10.7.1-1.4.4] - 2018-12-28 +## 0.10.7.1-1.4.4 - 2018-12-28 * sent cloning back to cheatmode for more testing * fixes -## [0.10.7.1-1.4.3] - 2018-12-27 +## 0.10.7.1-1.4.3 - 2018-12-27 * added cloning * fixes -## [0.10.7.1-1.4.2] - 2018-12-23 +## 0.10.7.1-1.4.2 - 2018-12-23 * Sugarcube updated to 2.28.2 * cellblock, schoolroom and master suite now have added ways to maintain natural lactation * fixes * code cleaning -## [0.10.7.1-1.4.1] - 2018-12-21 +## 0.10.7.1-1.4.1 - 2018-12-21 * enabled first run of cloning in cheatmode (slave cloning has issues) * fixes * more economy work -## [0.10.7.1-1.4.0] - 2018-12-19 +## 0.10.7.1-1.4.0 - 2018-12-19 * dispensary broken down into pharm fabricator, organ farm, implant manufactory and gene lab * lots of SF work @@ -645,46 +659,46 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * fixes * cleaning -## [0.10.7.1-1.3.8] - 2018-12-16 +## 0.10.7.1-1.3.8 - 2018-12-16 * fixes * code cleanup * custom shares removed from the corporation (too buggy) * added faceShape to genetics -## [0.10.7.1-1.3.7] - 2018-12-15 +## 0.10.7.1-1.3.7 - 2018-12-15 * added dairy setting to induce lactation in non-cum slaves * fixes * code cleaning -## [0.10.7.1-1.3.6] - 2018-12-13 +## 0.10.7.1-1.3.6 - 2018-12-13 * added salvage code for saves affected by the bug fixed in v4 -## [0.10.7.1-1.3.5] +## 0.10.7.1-1.3.5 * fixes -## [0.10.7.1-1.3.4] +## 0.10.7.1-1.3.4 * critical bug fix for genetics corruption -## [0.10.7.1-1.3.3] - 2018-12-12 +## 0.10.7.1-1.3.3 - 2018-12-12 * fixes -## [0.10.7.1-1.3.2] +## 0.10.7.1-1.3.2 * tweaked natural lactation logic (now decreases at endWeek start and engorges at endWeek end) * added a rule for facility heads to direct them on how to handle their lactation * fixes -## [0.10.7.1-1.3.1] - 2018-12-11 +## 0.10.7.1-1.3.1 - 2018-12-11 * fixes -## [0.10.7.1-1.3.0] - 2018-12-10 +## 0.10.7.1-1.3.0 - 2018-12-10 * pregnancy size/progress tracking overhauled * natural lactation overhauled @@ -694,53 +708,53 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * more art from deepmurk * fixes -## [0.10.7.1-1.2.3] - 2018-12-05 +## 0.10.7.1-1.2.3 - 2018-12-05 * fixes -## [0.10.7.1-1.2.2] - 2018-12-04 +## 0.10.7.1-1.2.2 - 2018-12-04 * fixes -## [0.10.7.1-1.2.1] - 2018-12-03 +## 0.10.7.1-1.2.1 - 2018-12-03 * fixes * general pronoun work * cleaning -## [0.10.7.1-1.2.0] - 2018-12-02 +## 0.10.7.1-1.2.0 - 2018-12-02 * added universal rule to send children to the repop breeder school if available * added universal rule to automatically decide the fate of born children * hormone balance now displayed in slave summary + other QoL changes * fixes -## [0.10.7.1-1.1.5] - 2018-12-01 +## 0.10.7.1-1.1.5 - 2018-12-01 * fixes * added ability to overwrite saves * removed a long term, ever increasing problem related to SugarCube -## [0.10.7.1-1.1.4] - 2018-11-30 +## 0.10.7.1-1.1.4 - 2018-11-30 * added buttplug attachments to the RA * fixes -## [0.10.7.1-1.1.3] - 2018-11-29 +## 0.10.7.1-1.1.3 - 2018-11-29 * more fixes * uncommented incubator semen harvesting -## [0.10.7.1-1.1.2] - 2018-11-28 +## 0.10.7.1-1.1.2 - 2018-11-28 * fixed bad string pass * tweaked how slave recruit events are handled -## [0.10.7.1-1.1.1] +## 0.10.7.1-1.1.1 * fixes -## [0.10.7.1-1.1.0] - 2018-11-27 +## 0.10.7.1-1.1.0 - 2018-11-27 * fixes * more SF tweaking @@ -749,28 +763,28 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * added gapped teeth * added ability to rename incubating children -## [0.10.7.1-1.0.4] - 2018-11-26 +## 0.10.7.1-1.0.4 - 2018-11-26 * fixes * lots of fixes -## [0.10.7.1-1.0.3] - 2018-11-25 +## 0.10.7.1-1.0.3 - 2018-11-25 * fixed an issue with csec and reservations -## [0.10.7.1-1.0.2] +## 0.10.7.1-1.0.2 * fixes * more names and stuff (I think) * citizen enslavements now respect subjugationist laws -## [0.10.7.1-1.0.1] +## 0.10.7.1-1.0.1 * fixes * more art from deepmurk * assay widgets entirely converted to JS -## [0.10.7.1-1.0.0] - 2018-11-23 +## 0.10.7.1-1.0.0 - 2018-11-23 * WIP content added to nursery/farmyard * genetic sequencing moved out of dispensary @@ -782,81 +796,81 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * genetics now determined at conception, rather than birth * pregSource normalization -## [0.10.7.1-0.10.48] - 2018-11-08 +## 0.10.7.1-0.10.48 - 2018-11-08 * added an option to permit and deny $seeDicks control over child gender * minor fixes -## [0.10.7.1-0.10.47] - 2018-11-06 +## 0.10.7.1-0.10.47 - 2018-11-06 * fixes * moved halter top dress and mini dress back to baseline clothing -## [0.10.7.1-0.10.46] +## 0.10.7.1-0.10.46 * fixes * migrated a bunch of clothing to wardrobe purchases -## [0.10.7.1-0.10.45] - 2018-11-05 +## 0.10.7.1-0.10.45 - 2018-11-05 * fixed slaves not dying in the pit * fixes * more pronoun work -## [0.10.7.1-0.10.44] - 2018-11-04 +## 0.10.7.1-0.10.44 - 2018-11-04 * more pronoun work * fixes to possible issues with .pluck() * optimized dairyReport a bit and condensed four for loops into a single one -## [0.10.7.1-0.10.43] - 2018-11-03 +## 0.10.7.1-0.10.43 - 2018-11-03 * anon's new RESS event added * fixes * RA now can set chooses own job -## [0.10.7.1-0.10.42] - 2018-11-02 +## 0.10.7.1-0.10.42 - 2018-11-02 * fixes * new random non-individual event added * some more JS conversion * starting Sup/Sub arcologies now retain their racial choice -## [0.10.7.1-0.10.41] - 2018-11-01 +## 0.10.7.1-0.10.41 - 2018-11-01 * fixes * traitor slave no longer exists outside the realm of time -## [0.10.7.1-0.10.40] - 2018-10-31 +## 0.10.7.1-0.10.40 - 2018-10-31 * fixes -## [0.10.7.1-0.10.39] +## 0.10.7.1-0.10.39 * weather now affects the economy and tourism * fixes and text corrections -## [0.10.7.1-0.10.38] - 2018-10-29 +## 0.10.7.1-0.10.38 - 2018-10-29 * added pregmodfan's broodmother hacks * fixes -## [0.10.7.1-0.10.37] - 2018-10-28 +## 0.10.7.1-0.10.37 - 2018-10-28 * fixes -## [0.10.7.1-0.10.36] +## 0.10.7.1-0.10.36 * slave price economy tweaking * fixes -## [0.10.7.1-0.10.35] - 2018-10-27 +## 0.10.7.1-0.10.35 - 2018-10-27 * fixes * enabled elasticity treatment * another recruit event from the todo pile -## [0.10.7.1-0.10.34] - 2018-10-26 +## 0.10.7.1-0.10.34 - 2018-10-26 * added a couple new recruit events that have been sitting in my todo pile for ages * fixes @@ -864,364 +878,364 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * more fixes to bellies by deepmurk * ripped out several large chunks of walkPast into JS and apparently didn't make a dent in it -## [0.10.7.1-0.10.33] - 2018-10-25 +## 0.10.7.1-0.10.33 - 2018-10-25 * fixes * anon's art fixes for prosthetic limbs * fixed the legacy SugarCube header naming scheme to actually make sense -## [0.10.7.1-0.10.32] - 2018-10-24 +## 0.10.7.1-0.10.32 - 2018-10-24 * fixes -## [0.10.7.1-0.10.31] +## 0.10.7.1-0.10.31 * fixes * tweaks to how geneModding is obtained via dispensary (prices not final) -## [0.10.7.1-0.10.30] - 2018-10-23 +## 0.10.7.1-0.10.30 - 2018-10-23 * economy difficulty tweaks * economy can now be set to fluctuate over time * fixes -## [0.10.7.1-0.10.29] - 2018-10-22 +## 0.10.7.1-0.10.29 - 2018-10-22 * genemod initialization * conversion of NCS to a genemod * fixes -## [0.10.7.1-0.10.28] +## 0.10.7.1-0.10.28 * added surgical reductions for excess foreskins and scrotums * fixes -## [0.10.7.1-0.10.27] - 2018-10-21 +## 0.10.7.1-0.10.27 - 2018-10-21 * fixes -## [0.10.7.1-0.10.26] - 2018-10-20 +## 0.10.7.1-0.10.26 - 2018-10-20 * fixes -## [0.10.7.1-0.10.25] +## 0.10.7.1-0.10.25 * implemented the uterine restraint mesh from the black market * fixes and tweaks * more vectors from deepmurk -## [0.10.7.1-0.10.24] - 2018-10-19 +## 0.10.7.1-0.10.24 - 2018-10-19 * fixes * more vectors from deepmurk -## [0.10.7.1-0.10.23] - 2018-10-18 +## 0.10.7.1-0.10.23 - 2018-10-18 * fixes * typo corrections * pregnancy support band descriptions -## [0.10.7.1-0.10.22] - 2018-10-17 +## 0.10.7.1-0.10.22 - 2018-10-17 * fixes * added pregnancy support band (still working on descriptions) -## [0.10.7.1-0.10.21] +## 0.10.7.1-0.10.21 * fixes * tweaks to burst chances * more work clothing vectors from deepmurk -## [0.10.7.1-0.10.20] +## 0.10.7.1-0.10.20 * fixes * pussy licking slave interact -## [0.10.7.1-0.10.19] - 2018-10-16 +## 0.10.7.1-0.10.19 - 2018-10-16 * fixes -## [0.10.7.1-0.10.18] - 2018-10-15 +## 0.10.7.1-0.10.18 - 2018-10-15 * fixes * slave creation is now JS based * added genes as a check to the RA -## [0.10.7.1-0.10.17] +## 0.10.7.1-0.10.17 * fixes -## [0.10.7.1-0.10.16] +## 0.10.7.1-0.10.16 * fixes * chem no longer affects miscarriage rates. -## [0.10.7.1-0.10.15] - 2018-10-14 +## 0.10.7.1-0.10.15 - 2018-10-14 * several new gigantic belly focused slave interactions * fixes -## [0.10.7.1-0.10.14] - 2018-10-13 +## 0.10.7.1-0.10.14 - 2018-10-13 * fixes -## [0.10.7.1-0.10.13] +## 0.10.7.1-0.10.13 * added premature birth and miscarriage (optional) * fixes * more work from deepmurk -## [0.10.7.1-0.10.13] - 2018-10-12 +## 0.10.7.1-0.10.13 - 2018-10-12 * fixes -## [0.10.7.1-0.10.11] +## 0.10.7.1-0.10.11 * fixes * tweaks to lispReplace() -## [0.10.7.1-0.10.10] +## 0.10.7.1-0.10.10 * fixes * adjustments to how intelligence and education affects slave price * new aid event -## [0.10.7.1-0.10.9] - 2018-10-11 +## 0.10.7.1-0.10.9 - 2018-10-11 * fixes * fixed secExp drones total annihilation oversight -## [0.10.7.1-0.10.8] +## 0.10.7.1-0.10.8 * major fix to VaginalVCheck -## [0.10.7.1-0.10.7] - 2018-10-10 +## 0.10.7.1-0.10.7 - 2018-10-10 * anon's hpreg inventor event chain enabled -## [0.10.7.1-0.10.6] +## 0.10.7.1-0.10.6 * fixes * backend work on concurrent pregnancies -## [0.10.7.1-0.10.5] - 2018-10-08 +## 0.10.7.1-0.10.5 - 2018-10-08 * fixes * more clothing vectors from deepmurk -## [0.10.7.1-0.10.4] +## 0.10.7.1-0.10.4 * fixes -## [0.10.7.1-0.10.3] +## 0.10.7.1-0.10.3 * fixes * several new sets of clothing from deepmurk -## [0.10.7.1-0.10.2] - 2018-10-07 +## 0.10.7.1-0.10.2 - 2018-10-07 * fixes * tweaks to intelligence distribution in slavegen -## [0.10.7.1-0.10.1] - 2018-10-04 +## 0.10.7.1-0.10.1 - 2018-10-04 * overhauled intelligence and education * buffed intelligence based FS beauty calcs * more vector work from Deepmurk * fixes -## [0.10.7.1-0.9.6] - 2018-09-30 +## 0.10.7.1-0.9.6 - 2018-09-30 * removed redundant and questionably functional PCTitle() function * renamed the working properTitle() function to PCTitle() -## [0.10.7.1-0.9.5] +## 0.10.7.1-0.9.5 * fixes -## [0.10.7.1-0.9.4] - 2018-09-29 +## 0.10.7.1-0.9.4 - 2018-09-29 * fixes -## [0.10.7.1-0.9.3] +## 0.10.7.1-0.9.3 * fixes * moved a number of clothes to special orders from the wardrobe -## [0.10.7.1-0.9.2] - 2018-09-28 +## 0.10.7.1-0.9.2 - 2018-09-28 * fixes * devotion/trust check corrections -## [0.10.7.1-0.9.1] +## 0.10.7.1-0.9.1 * Security Force Mod overhaul * fixes * pronoun work -## [0.10.7.1-0.8.2] - 2018-09-26 +## 0.10.7.1-0.8.2 - 2018-09-26 * fixes -## [0.10.7.1-0.8.1] - 2018-09-25 +## 0.10.7.1-0.8.1 - 2018-09-25 * fixes -## [0.10.7.1-0.8.0] +## 0.10.7.1-0.8.0 * nursery facility added (beta) -## [0.10.7.1-0.7.43] - 2018-09-25 +## 0.10.7.1-0.7.43 - 2018-09-25 * fixes * added more options to the RA * added nipple fuck interaction -## [0.10.7.1-0.7.42] +## 0.10.7.1-0.7.42 * fixes * more deepmurk tinkerings -## [0.10.7.1-0.7.41] - 2018-09-24 +## 0.10.7.1-0.7.41 - 2018-09-24 * fixes * more deepmurk tinkerings * klan robes -## [0.10.7.1-0.7.40] - 2018-09-23 +## 0.10.7.1-0.7.40 - 2018-09-23 * fixes * more deepmurk tinkerings * pantsu -## [0.10.7.1-0.7.39] - 2018-09-22 +## 0.10.7.1-0.7.39 - 2018-09-22 * fixes * more face tweaks from deepmurk * various other new vectors from deepmurk -## [0.10.7.1-0.7.38] - 2018-09-20 +## 0.10.7.1-0.7.38 - 2018-09-20 * fixes * more face tweaks from deepmurk -## [0.10.7.1-0.7.37] +## 0.10.7.1-0.7.37 * fixes * non max inflation no longer blocks conception -## [0.10.7.1-0.7.36] - 2018-09-19 +## 0.10.7.1-0.7.36 - 2018-09-19 * fixes -## [0.10.7.1-0.7.35] +## 0.10.7.1-0.7.35 * more vector work from Deepmurk * tweaks to special slave prices and how the catalog works -## [0.10.7.1-0.7.34] - 2018-09-18 +## 0.10.7.1-0.7.34 - 2018-09-18 * fixed filter by race * young slaves now generate with baby teeth and lose them as they age * fixes -## [0.10.7.1-0.7.33] - 2018-09-17 +## 0.10.7.1-0.7.33 - 2018-09-17 * fixed issues with RA enemas (maybe?) * fixed issues with NG+ slaves and null pointer relatives/relations/pregSources * other fixes -## [0.10.7.1-0.7.32] - 2018-09-16 +## 0.10.7.1-0.7.32 - 2018-09-16 * enema control added to the RA * Deepmurk's faces and fatties vector art * fixes -## [0.10.7.1-0.7.31] - 2018-09-15 +## 0.10.7.1-0.7.31 - 2018-09-15 * fixes -## [0.10.7.1-0.7.30] +## 0.10.7.1-0.7.30 * added solid slave food and hole preference options to the RA * fixes -## [0.10.7.1-0.7.29] - 2018-09-14 +## 0.10.7.1-0.7.29 - 2018-09-14 * fixes -## [0.10.7.1-0.7.28] +## 0.10.7.1-0.7.28 * expanded canImpreg() to be able to handle the player -## [0.10.7.1-0.7.27] +## 0.10.7.1-0.7.27 * fixes * anon's farmyard tweaks -## [0.10.7.1-0.7.26] - 2018-09-12 +## 0.10.7.1-0.7.26 - 2018-09-12 * fixes -## [0.10.7.1-0.7.25] +## 0.10.7.1-0.7.25 * fixes * code entry added to cheat edit menus to allow for advanced control -## [0.10.7.1-0.7.24] - 2018-09-10 +## 0.10.7.1-0.7.24 - 2018-09-10 * fixes * added a new aid event possibility -## [0.10.7.1-0.7.23] - 2018-09-09 +## 0.10.7.1-0.7.23 - 2018-09-09 * fixes -## [0.10.7.1-0.7.22] - 2018-09-08 +## 0.10.7.1-0.7.22 - 2018-09-08 * fixes -## [0.10.7.1-0.7.21] - 2018-09-07 +## 0.10.7.1-0.7.21 - 2018-09-07 * fixes * more widget to Js conversion -## [0.10.7.1-0.7.20] +## 0.10.7.1-0.7.20 * fixes * increased costs for hyper pregnant slaves -## [0.10.7.1-0.7.19] - 2018-09-06 +## 0.10.7.1-0.7.19 - 2018-09-06 * more vignettes for more assignments * fixes -## [0.10.7.1-0.7.18] - 2018-09-05 +## 0.10.7.1-0.7.18 - 2018-09-05 * fixes * tweaked underage pregnancy immobility thresholds * reworked preg malus block * pregAdaptation activated -## [0.10.7.1-0.7.17] - 2018-09-02 +## 0.10.7.1-0.7.17 - 2018-09-02 * fixes -## [0.10.7.1-0.7.16] +## 0.10.7.1-0.7.16 * fixed player pregnancy not properly transferring across NG+ -## [0.10.7.1-0.7.15] +## 0.10.7.1-0.7.15 * added chemical castration * newly grown testicles and ovaries may now replace existing ones (currently only used to replace sterilized balls) * fixes -## [0.10.7.1-0.7.14] - 2018-09-01 +## 0.10.7.1-0.7.14 - 2018-09-01 * fixes to nationality related issues -## [0.10.7.1-0.7.13] +## 0.10.7.1-0.7.13 * split fillable implants into three tiers each with its own cap * lowered the price of the implant manufacturer @@ -1230,73 +1244,73 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * fixes -## [0.10.7.1-0.7.12] +## 0.10.7.1-0.7.12 * fixes * more pronoun implementation -## [0.10.7.1-0.7.11] - 2018-08-31 +## 0.10.7.1-0.7.11 - 2018-08-31 * fixes -## [0.10.7.1-0.7.10] +## 0.10.7.1-0.7.10 * eyebrows of various shapes, sizes and colors added * AddSlave widget deprecated in favor of newSlave() * fixes -## [0.10.7.1-0.7.9] - 2018-08-30 +## 0.10.7.1-0.7.9 - 2018-08-30 * nursing handjob interaction added * fixes -## [0.10.7.1-0.7.8] - 2018-08-29 +## 0.10.7.1-0.7.8 - 2018-08-29 * fixes -## [0.10.7.1-0.7.7] - 2018-08-28 +## 0.10.7.1-0.7.7 - 2018-08-28 * fixes and code cleanup -## [0.10.7.1-0.7.6] +## 0.10.7.1-0.7.6 * fixes -## [0.10.7.1-0.7.5] +## 0.10.7.1-0.7.5 * fixes * option to allow male slaves to gen with male names * tweaked body purism's views on bush -## [0.10.7.1-0.7.4] - 2018-08-27 +## 0.10.7.1-0.7.4 - 2018-08-27 * fixes -## [0.10.7.1-0.7.3] +## 0.10.7.1-0.7.3 * fixes -## [0.10.7.1-0.7.2] +## 0.10.7.1-0.7.2 * fixes -## [0.10.7.1-0.7.1] - 2018-08-24 +## 0.10.7.1-0.7.1 - 2018-08-24 * applied MB checks to surgery degradation * fixes * race system overhaul -## [0.10.7.1-0.6.10] - 2018-08-22 +## 0.10.7.1-0.6.10 - 2018-08-22 * fixes * lactation adaption and hormone levels added to cheat edit slave -## [0.10.7.1-0.6.9] - 2018-08-21 +## 0.10.7.1-0.6.9 - 2018-08-21 * fixes * added scene to kill a slave -## [0.10.7.1-0.6.8] +## 0.10.7.1-0.6.8 * slightly adjusted pregnancy breast growth rates * larynx implant for cybermod voice control @@ -1304,58 +1318,58 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * porn feed control added to the RA * fixes -## [0.10.7.1-0.6.7] - 2018-08-20 +## 0.10.7.1-0.6.7 - 2018-08-20 * SugarCube updated to 2.27.0 * various fixes * tweaks to disability slavegen -## [0.10.7.1-0.6.6] - 2018-08-19 +## 0.10.7.1-0.6.6 - 2018-08-19 * added pupil shape and sclera color * fixes -## [0.10.7.1-0.6.5] - 2018-08-18 +## 0.10.7.1-0.6.5 - 2018-08-18 * removed deaf chance from standard slavegen * restricted blindness to grateful careers in slavegen * fixes -## [0.10.7.1-0.6.4] +## 0.10.7.1-0.6.4 * areolae shape split from size * player b-cups * fixes -## [0.10.7.1-0.6.3] - 2018-08-17 +## 0.10.7.1-0.6.3 - 2018-08-17 * new supremacist and subjugationist PA FS appearances * hearing and deafness added * fixes -## [0.10.7.1-0.5.33] - 2018-08-14 +## 0.10.7.1-0.5.33 - 2018-08-14 * SFanon's security force overhaul (reverted) * fixes * added fox tail buttplug attachment (no desc yet) * new justice event -## [0.10.7.1-0.5.32] - 2018-08-12 +## 0.10.7.1-0.5.32 - 2018-08-12 * fixes -## [0.10.7.1-0.5.31] +## 0.10.7.1-0.5.31 * more outcomes for saChoosesOwnClothes * fixes -## [0.10.7.1-0.5.30] - 2018-08-11 +## 0.10.7.1-0.5.30 - 2018-08-11 * fixes * new malefactor * added kitty lingerie -## [0.10.7.1-0.5.29] - 2018-08-10 +## 0.10.7.1-0.5.29 - 2018-08-10 * added body hair controls to startingGirls more customization options * fixed issues with the new slave markets @@ -1363,155 +1377,155 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * slaves that would have gained flaws from stress, but are receiving your careful attention, now gain minor devotion instead. * Ex-escorts getting back into the game now have less sexual energy to spend on slaves -## [0.10.7.1-0.5.28] +## 0.10.7.1-0.5.28 * bulk ordering from the prison sales now works * fixed, hopefully, an issue where executed traitors were not properly being removed from the unit pool (secEx) -## [0.10.7.1-0.5.27] +## 0.10.7.1-0.5.27 * critical fix to missing parents in childgen (now only done once instead for each child) -## [0.10.7.1-0.5.26] +## 0.10.7.1-0.5.26 * skin color tweaking * fixes * typo and grammar corrections * quartet of prison markets added on rotation -## [0.10.7.1-0.5.25] - 2018-08-08 +## 0.10.7.1-0.5.25 - 2018-08-08 * fixes * vector art color tweaking * retirement clamps expanded * cum milking retirement goal -## [0.10.7.1-0.5.24] - 2018-08-07 +## 0.10.7.1-0.5.24 - 2018-08-07 * fixed RA ear/nose piercing issue -## [0.10.7.1-0.5.23] +## 0.10.7.1-0.5.23 * Spelling and grammar fixes * Pronoun conversions * Formatting -## [0.10.7.1-0.5.22] - 2018-08-05 +## 0.10.7.1-0.5.22 - 2018-08-05 * more little fixes -## [0.10.7.1-0.5.21] +## 0.10.7.1-0.5.21 * added height comparison to the RA -## [0.10.7.1-0.5.20] +## 0.10.7.1-0.5.20 * fixed an unlikely occurrence where labor could be preempted causing oddities with birth * fixes -## [0.10.7.1-0.5.19] +## 0.10.7.1-0.5.19 * fixes -## [0.10.7.1-0.5.18] +## 0.10.7.1-0.5.18 * fixes -## [0.10.7.1-0.5.17] - 2018-08-04 +## 0.10.7.1-0.5.17 - 2018-08-04 * fixes and corrections * new buyers for slaves with porn prestige * ex-escort PCs can use old connections for a discounted porn fame spending at the price of their body * expansions to nationality and race selection in custom slaves -## [0.10.7.1-0.5.16] - 2018-08-03 +## 0.10.7.1-0.5.16 - 2018-08-03 * fixes * added "a niqab and abaya", "a hijab and blouse", "a burqa", and "a burkini" outfits * anon's hpreg clothing descriptions -## [0.10.7.1-0.5.15] - 2018-08-02 +## 0.10.7.1-0.5.15 - 2018-08-02 * fixes and typo corrections * tweaked cyber-economic warfare to hinge more on the target's prosperity -## [0.10.7.1-0.5.14] - 2018-08-01 +## 0.10.7.1-0.5.14 - 2018-08-01 * fixes * JS tinkering * tweaks to porn fame face gains -## [0.10.7.1-0.5.13] - 2018-07-30 +## 0.10.7.1-0.5.13 - 2018-07-30 * SugarCube updated to 2.26.0 * fixed DJ/Madam vignette issues -## [0.10.7.1-0.5.12] +## 0.10.7.1-0.5.12 * fixed bugs and typos -## [0.10.7.1-0.5.11] +## 0.10.7.1-0.5.11 * more widget to JS conversions * gingering now works as intended * converted saStayConfined to JS (make sure you do not have a lingering version in src/uncategorized) -## [0.10.7.1-0.5.10] - 2018-07-29 +## 0.10.7.1-0.5.10 - 2018-07-29 * fixes * vignettes now JS'd -## [0.10.7.1-0.5.9] - 2018-07-28 +## 0.10.7.1-0.5.9 - 2018-07-28 * fixing mindbreak now brings back original intelligence-1 * more arcology names * more nicknames * cheat mode starting slaves now respect $seeDicks -## [0.10.7.1-0.5.8] +## 0.10.7.1-0.5.8 * fixes * more widget to JS conversion -## [0.10.7.1-0.5.7] - 2018-07-27 +## 0.10.7.1-0.5.7 - 2018-07-27 * fixes * more widget to JS conversion * lots more implementation of pronouns * anon's hpreg event -## [0.10.7.1-0.5.6] - 2018-07-26 +## 0.10.7.1-0.5.6 - 2018-07-26 * fixes * broken societal elite now bitch less about your actions -## [0.10.7.1-0.5.5] - 2018-07-25 +## 0.10.7.1-0.5.5 - 2018-07-25 * fixes * marked breeders are now only special in Eugenics societies that have embraced them * tweaked beauty prestige multipliers -## [0.10.7.1-0.5.4] +## 0.10.7.1-0.5.4 * more porn balance tweaks * fixes and edits -## [0.10.7.1-0.5.3] +## 0.10.7.1-0.5.3 * tweaked gain rates for pornPrestige 0 and 1 -## [0.10.7.1-0.5.2] +## 0.10.7.1-0.5.2 * lowered requirement for pornFocus * pornFocus is no longer disabled once .pornPrestige is earned (allows undermining) * fixed bugs -## [0.10.7.1-0.5.1] - 2018-07-24 +## 0.10.7.1-0.5.1 - 2018-07-24 * porn system overhaul * added ability to track true virgins -## [0.10.7.1-0.4.22] +## 0.10.7.1-0.4.22 * fixes * slaveSummary JS conversion @@ -1520,134 +1534,134 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * imperial measurement is now an option * RA haircuts controls -## [0.10.7.1-0.4.21] - 2018-07-08 +## 0.10.7.1-0.4.21 - 2018-07-08 * fixes * more widget to JS conversion * fixed milk/cum pastoralist decoration cascade -## [0.10.7.1-0.4.20] - 2018-07-07 +## 0.10.7.1-0.4.20 - 2018-07-07 * fixes * more widget to JS conversion -## [0.10.7.1-0.4.19] +## 0.10.7.1-0.4.19 * various little fixes and tweaks * incubator slaves take longer to learn languages now -## [0.10.7.1-0.4.18] - 2018-07-05 +## 0.10.7.1-0.4.18 - 2018-07-05 * added anon's TFS path * added a new choice to the TFS organ farm request event * fixes -## [0.10.7.1-0.4.17] - 2018-07-04 +## 0.10.7.1-0.4.17 - 2018-07-04 * fixes, grammar and typo corrections * added anon's FCNN blurbs -## [0.10.7.1-0.4.16] - 2018-07-03 +## 0.10.7.1-0.4.16 - 2018-07-03 * fixes * more widget to JS conversions * nipple vectors -## [0.10.7.1-0.4.15] +## 0.10.7.1-0.4.15 * fixes and typo corrections * Deepmurk's Battlearmor, Biyelgee Costume, Dirndl, Lederhosen, Long Qipao/Qipao (Nice), and Mounty Outfit -## [0.10.7.1-0.4.14] - 2018-07-02 +## 0.10.7.1-0.4.14 - 2018-07-02 * fixes and typos * applied lisping to new slave intro, among other technical things -## [0.10.7.1-0.4.13] - 2018-07-01 +## 0.10.7.1-0.4.13 - 2018-07-01 * fixes * cleaned up brother/sister text * prestigious slave overhaul -## [0.10.7.1-0.4.12] +## 0.10.7.1-0.4.12 * fixes and updates to the RA * The rival is more likely to take a hostage now * fixed bugs and typos * made slave rivals a little less rapey if slaves aren't allowed to rape each other -## [0.10.7.1-0.4.11] - 2018-06-30 +## 0.10.7.1-0.4.11 - 2018-06-30 * fixes * rivals are now more rapey and lovers more sexual -## [0.10.7.1-0.4.10] - 2018-06-29 +## 0.10.7.1-0.4.10 - 2018-06-29 * fixed forceFeeding * SFanon's facility naming UI support -## [0.10.7.1-0.4.9] +## 0.10.7.1-0.4.9 * you can now change your refreshment choice at the black market * fixed pronoun problems in clothing selection -## [0.10.7.1-0.4.8] +## 0.10.7.1-0.4.8 * fixes * physical idealist SMR now better suits your muscle preference -## [0.10.7.1-0.4.7] +## 0.10.7.1-0.4.7 * more fixes to the RA * other fixes and typos * several widgets replaced with JS * anon's Mediterranean market slave preset -## [0.10.7.1-0.4.6] - 2018-06-27 +## 0.10.7.1-0.4.6 - 2018-06-27 * widgeted slave interact drug setting to better handle the intensify option -## [0.10.7.1-0.4.5] +## 0.10.7.1-0.4.5 * more fixes to reported RA bugs * minor text corrections -## [0.10.7.1-0.4.4] - 2018-06-26 +## 0.10.7.1-0.4.4 - 2018-06-26 * a whole bunch of fixes, mostly major RA fixes * fixed a bunch of minor things * placed stronger safeguards on rival gen to prevent null races * tweaked spacing in club/brothel ads -## [0.10.7.1-0.4.3] - 2018-06-24 +## 0.10.7.1-0.4.3 - 2018-06-24 * fixes (not RA related) -## [0.10.7.1-0.4.2] - 2018-06-22 +## 0.10.7.1-0.4.2 - 2018-06-22 * various fixes to the RA * various additions to the RA * other fixes -## [0.10.7.1-0.4.1] +## 0.10.7.1-0.4.1 * vas's total RA overhaul * various little fixes and tweaks -## [0.10.7.1-0.3.26] - 2018-06-20 +## 0.10.7.1-0.3.26 - 2018-06-20 * fixed saServant's object literal issues -## [0.10.7.1-0.3.25] +## 0.10.7.1-0.3.25 * more little fixes * old RA should be a little more accepting of "" -## [0.10.7.1-0.3.24] - 2018-06-19 +## 0.10.7.1-0.3.24 - 2018-06-19 * few little fixes -## [0.10.7.1-0.3.23] - 2018-06-17 +## 0.10.7.1-0.3.23 - 2018-06-17 * typos fixed * careless enactment of certain Subjugationist laws may now have consequences @@ -1655,65 +1669,65 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * unfucked set race slavegen * fixes -## [0.10.7.1-0.3.22] - 2018-06-16 +## 0.10.7.1-0.3.22 - 2018-06-16 * fixes * tweaked Repop's likes block to allow preg biometrics more pull, especially in fat slaves * slave summary smart piercing will now describe itself as "monitoring" if it has satisfied its previous task -## [0.10.7.1-0.3.21] - 2018-06-15 +## 0.10.7.1-0.3.21 - 2018-06-15 * fixes * test round of JS'd end week passages (report oddities with servants, please) -## [0.10.7.1-0.3.20] - 2018-06-13 +## 0.10.7.1-0.3.20 - 2018-06-13 * expanded eugenics bad end to cover all player states -## [0.10.7.1-0.3.19] - 2018-06-12 +## 0.10.7.1-0.3.19 - 2018-06-12 * fixed pRaidResult lingering $i * secEx's $mercLoyalty now functions * added a couple new recruit events -## [0.10.7.1-0.3.18] +## 0.10.7.1-0.3.18 * fixes -## [0.10.7.1-0.3.17] - 2018-06-11 +## 0.10.7.1-0.3.17 - 2018-06-11 * yet more various fixes and corrections -## [0.10.7.1-0.3.16] +## 0.10.7.1-0.3.16 * more various fixes and corrections -## [0.10.7.1-0.3.15] - 2018-06-10 +## 0.10.7.1-0.3.15 - 2018-06-10 * several bugs fixed * bunch of typos and grammar quirks sorted out * SFanon's whoring, entertainment and serving career skills -## [0.10.7.1-0.3.14] - 2018-06-08 +## 0.10.7.1-0.3.14 - 2018-06-08 * added anon's wetware cpu market * fixes -## [0.10.7.1-0.3.13] - 2018-06-07 +## 0.10.7.1-0.3.13 - 2018-06-07 * fixes to NCS, mostly respect to implants and not removing balls * fixes to hero slave pregnancies (Not backwards compatible) * fixes -## [0.10.7.1-0.3.12] +## 0.10.7.1-0.3.12 * more little fixes -## [0.10.7.1-0.3.11] - 2018-06-06 +## 0.10.7.1-0.3.11 - 2018-06-06 * various little fixes -## [0.10.7.1-0.3.10] - 2018-06-05 +## 0.10.7.1-0.3.10 - 2018-06-05 * fixes to cheat edit player pregnancy * fixes to various cheat edit datatype cleanups @@ -1722,25 +1736,25 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * overhauled "injections please" to be more random and expanded potential drug picks * aphrodisiacs now override sexual need energy loss with devotion/trust loss -## [0.10.7.1-0.3.9] +## 0.10.7.1-0.3.9 * added more catches to hostage gen to prevent strange slave generation * backwards compatibility now accepts that 0 is a number and will not be helpful and set $seedicks to 25 when you want none. * arcade sadist now requires an actual slave to be in the arcade instead of just the arcade * other minor fixes -## [0.10.7.1-0.3.8] +## 0.10.7.1-0.3.8 * removed duplicate text in nonLethalPit * fixed problems and formatting in generic plot events -## [0.10.7.1-0.3.7] - 2018-06-03 +## 0.10.7.1-0.3.7 - 2018-06-03 * tweaks to .weekAcquired * fixes * adjusted did x every y hours text to not be so analcentric -## [0.10.7.1-0.3.6] - 2018-06-01 +## 0.10.7.1-0.3.6 - 2018-06-01 * added artificial insemination * various SF related fixes from SFanon @@ -1748,54 +1762,54 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * fixes to braces to age interaction * the flesh heap no longer uses old face values -## [0.10.7.1-0.3.5] +## 0.10.7.1-0.3.5 * various minor text corrections * catches to advertisements not getting cleared upon facility decommission * corp fixed race setting should now apply to XY genned slaves -## [0.10.7.1-0.3.4] - 2018-05-31 +## 0.10.7.1-0.3.4 - 2018-05-31 * fixes * fixes to crazy devotion gains from bodyswapping, hopefully * colored slave summary to make it more obvious if something is on a slave -## [0.10.7.1-0.3.3] +## 0.10.7.1-0.3.3 * remove all slaves facility option * BC now properly applies pronouns to hero slaves * fixes -## [0.10.7.1-0.3.2] - 2018-05-30 +## 0.10.7.1-0.3.2 - 2018-05-30 * fixes -## [0.10.7.1-0.3.1] +## 0.10.7.1-0.3.1 * prosthetic limb rework (mutually exclusive with cybermod - backwards compatibility will allow switching between them) * various fixes -## [0.10.7.1-0.2.10] - 2018-05-29 +## 0.10.7.1-0.2.10 - 2018-05-29 * fixes and text corrections * attempted to fix fMarry pronoun issue -## [0.10.7.1-0.2.9] +## 0.10.7.1-0.2.9 * minor fixes (wardeness not buyable from JFC, backwards compat error) -## [0.10.7.1-0.2.8] +## 0.10.7.1-0.2.8 * induced NCS fixes (you can now actually buy it) * fixes to surname stripping having trouble lowercasing a number and losing its shit -## [0.10.7.1-0.2.7] +## 0.10.7.1-0.2.7 * added anon's induced NCS * tweaks to arm/leg tattoos and how they are managed when slaves lack arms and legs * minor fixes and tweaks -## [0.10.7.1-0.2.6] - 2018-05-28 +## 0.10.7.1-0.2.6 - 2018-05-28 * bodyswapping moved out of cheatmode * prettied up former Elites @@ -1803,18 +1817,18 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * various minor text fixes * fixes -## [0.10.7.1-0.2.5] - 2018-05-26 +## 0.10.7.1-0.2.5 - 2018-05-26 * various fixes to issues created with v4 -## [0.10.7.1-0.2.4] +## 0.10.7.1-0.2.4 * more tweaks to bodyswapping * fPat cleaning * tweaks to face shapes and beauty * fixes -## [0.10.7.1-0.2.3] - 2018-05-23 +## 0.10.7.1-0.2.3 - 2018-05-23 * slave slave bodyswapping added (WIP) * fixes @@ -1822,161 +1836,161 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * couple new nationalities * ability to manually retire more than one slave per week -## [0.10.7.1-0.2.2] - 2018-05-21 +## 0.10.7.1-0.2.2 - 2018-05-21 * fixes * more names * various text corrections -## [0.10.7.1-0.2.1] - 2018-05-17 +## 0.10.7.1-0.2.1 - 2018-05-17 * added bodyswapping * beginning of pronoun rework * fixes -## [0.10.7.1-0.1.97] - 2018-05-14 +## 0.10.7.1-0.1.97 - 2018-05-14 * couple of bug fixes (broodmother slave summary now properly appears and an extra closing if was removed from generateChild) * number of text corrections -## [0.10.7.1-0.1.96] - 2018-05-14 +## 0.10.7.1-0.1.96 - 2018-05-14 * bug and text fixes -## [0.10.7.1-0.1.95] - 2018-05-13 +## 0.10.7.1-0.1.95 - 2018-05-13 * fixes and text corrections * strengthened ID setting in identical twins to hopefully not result in duplicate IDs * FS clothing price hike * you can now obtain FS clothing from sufficiently developed neighbors -## [0.10.7.1-0.1.94] - 2018-05-12 +## 0.10.7.1-0.1.94 - 2018-05-12 * slaves may now birth identical twins * anon's quick find slave index ui now works on tabbed penthouse and supports sort boxes * fixes -## [0.10.7.1-0.1.93] - 2018-05-10 +## 0.10.7.1-0.1.93 - 2018-05-10 * fixes to vector art and potential custom image issues in RESS * fixes -## [0.10.7.1-0.1.92] +## 0.10.7.1-0.1.92 * more tweaks to anon's quick find slave index ui -## [0.10.7.1-0.1.90] - 2018-05-08 +## 0.10.7.1-0.1.90 - 2018-05-08 * anon's quick find slave index ui -## [0.10.7.1-0.1.89] +## 0.10.7.1-0.1.89 * fixes and code optimizations * some extra fuckable nipples content in RESS -## [0.10.7.1-0.1.88] +## 0.10.7.1-0.1.88 * anon's continued corporation tweaks * fuckable nipples support for RESS * couple little fixes -## [0.10.7.1-0.1.87] - 2018-05-06 +## 0.10.7.1-0.1.87 - 2018-05-06 * anon's corp tweaks * added fuckable nipples -## [0.10.7.1-0.1.86] - 2018-05-05 +## 0.10.7.1-0.1.86 - 2018-05-05 * added a catch to prevent possible failed rival gen under unknown circumstances * overhauled saPleaseYou * fixed .pregWeek quirks with cheat edit pregnancy (hopefully) * removed PC's ability to impregnate fucktoys in reFullBed regardless of if they can become pregnant and whether or not you actually have a dick -## [0.10.7.1-0.1.85] - 2018-05-04 +## 0.10.7.1-0.1.85 - 2018-05-04 * fixes -## [0.10.7.1-0.1.84] +## 0.10.7.1-0.1.84 * fixed FResult undefined bug -## [0.10.7.1-0.1.83] - 2018-05-03 +## 0.10.7.1-0.1.83 - 2018-05-03 * fixed BGs still trying their hardest to kill themselves in the pit * fixed reservations not being freed after birth -## [0.10.7.1-0.1.82] +## 0.10.7.1-0.1.82 * fix for broken FS progress * better handling for getSlave() returning undefined * fix for some obscure BS that led to slave duplication -## [0.10.7.1-0.1.81] +## 0.10.7.1-0.1.81 * fixed player cheat edit pregnancy weirdness * fixed various little issues * work towards fuckable nipples -## [0.10.7.1-0.1.80] - 2018-05-02 +## 0.10.7.1-0.1.80 - 2018-05-02 * more fixes -## [0.10.7.1-0.1.79] +## 0.10.7.1-0.1.79 * various fixes * work towards fuckable nipples * you can now drop Hedonistic Decadence's slave food research if you don't have the FS -## [0.10.7.1-0.1.78] - 2018-04-30 +## 0.10.7.1-0.1.78 - 2018-04-30 * Deepmurks vector art pack update * Deepmurks slutty schutzstaffel outfit and porcelain mask accessory * various fixes -## [0.10.7.1-0.1.77] - 2018-04-29 +## 0.10.7.1-0.1.77 - 2018-04-29 * fixed some text issues * fixed all cheat edit pregnancies -## [0.10.7.1-0.1.76] +## 0.10.7.1-0.1.76 * multiple fixed bugs * tweak to oversized breast decrease rate (it's no longer instant) * better feedback for oversized butts and facility devotion caps -## [0.10.7.1-0.1.75] - 2018-04-28 +## 0.10.7.1-0.1.75 - 2018-04-28 * groundwork for pronoun rework * various minor corrections * vector name standardization -## [0.10.7.1-0.1.74] - 2018-04-26 +## 0.10.7.1-0.1.74 - 2018-04-26 * fixed an obnoxious bug that worked its way back into walkPast * added clothing-fetish interactions for monokini and naked apron -## [0.10.7.1-0.1.73] +## 0.10.7.1-0.1.73 * bodyguard once again told to stop fighting herself in the pit * spire apartments now work * fixes -## [0.10.7.1-0.1.72] - 2018-04-25 +## 0.10.7.1-0.1.72 - 2018-04-25 * pit now readds living slaves to its roster * bellyDesc work -## [0.10.7.1-0.1.71] - 2018-04-24 +## 0.10.7.1-0.1.71 - 2018-04-24 * various fixes and typo corrections * couple new nicknames -## [0.10.7.1-0.1.70] - 2018-04-23 +## 0.10.7.1-0.1.70 - 2018-04-23 * fixes * attempted to clean up seCoursing (it slimmed down a little) * added an override variable to block maturity pref's max age increase in cases where a slave is expected to strictly be between x and y age. -## [0.10.7.1-0.1.69] +## 0.10.7.1-0.1.69 * various fixes, the most notable being slaves that die during childbirth now actually die (again) * more code optimizations @@ -1985,172 +1999,172 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * Hedonistic Decadence research now works outside of Hedonistic Decadence * Weight gain removal formula is available to all societies if Hedonistic Decadence is not taken -## [0.10.7.1-0.1.68] - 2018-04-22 +## 0.10.7.1-0.1.68 - 2018-04-22 * added servant career class (they make better servants) * SFanon's pit virginity respect * various fixes and optimizations -## [0.10.7.1-0.1.67] - 2018-04-21 +## 0.10.7.1-0.1.67 - 2018-04-21 * fixes * more code optimization and cleanup -## [0.10.7.1-0.1.66] +## 0.10.7.1-0.1.66 * various fixes, cleanups and optimizations -## [0.10.7.1-0.1.65] - 2018-04-20 +## 0.10.7.1-0.1.65 - 2018-04-20 * finished REFI cleaning * red army uniform and schutzstaffel uniform from Deepmurk * more vectors from Deepmurk too -## [0.10.7.1-0.1.64] +## 0.10.7.1-0.1.64 * added options to allow/deny DJ and Madam fixing flaws * added anon's pirate themed FCTV channel -## [0.10.7.1-0.1.63] +## 0.10.7.1-0.1.63 * fixes and code improvements, the usual -## [0.10.7.1-0.1.62] - 2018-04-19 +## 0.10.7.1-0.1.62 - 2018-04-19 * tons of fixes * more code optimizations -## [0.10.7.1-0.1.61] +## 0.10.7.1-0.1.61 * fixes * code optimizations * channel13's FCTV channel addition -## [0.10.7.1-0.1.60] - 2018-04-18 +## 0.10.7.1-0.1.60 - 2018-04-18 * fixes and more code optimizations -## [0.10.7.1-0.1.59] +## 0.10.7.1-0.1.59 * accidentally made HGs even more likely to become doms, that has been fixed now * added naked apron * various fixes and optimizations * more REFI work -## [0.10.7.1-0.1.58] - 2018-04-17 +## 0.10.7.1-0.1.58 - 2018-04-17 * crooked teeth generation changes * several minor tweaks -## [0.10.7.1-0.1.57] +## 0.10.7.1-0.1.57 * fixes * more REFI work -## [0.10.7.1-0.1.56] - 2018-04-16 +## 0.10.7.1-0.1.56 - 2018-04-16 * fixes * added Deepmurk's cybersuit * comes with vectors -## [0.10.7.1-0.1.55] +## 0.10.7.1-0.1.55 * fixes * more code optimizations * more REFI work -## [0.10.7.1-0.1.54] +## 0.10.7.1-0.1.54 * fixed bugs and other minor text issues * Deepmurks' monokini vectors -## [0.10.7.1-0.1.53] +## 0.10.7.1-0.1.53 * fixes * more code improvements * more REFI work -## [0.10.7.1-0.1.52] - 2018-04-15 +## 0.10.7.1-0.1.52 - 2018-04-15 * fixes * Deepmurks skin color rework -## [0.10.7.1-0.1.51] +## 0.10.7.1-0.1.51 * added monokini * various fixes, code cleanup, etc * the nicknames never end -## [0.10.7.1-0.1.50] - 2018-04-14 +## 0.10.7.1-0.1.50 - 2018-04-14 * fixes * more code cleanup -## [0.10.7.1-0.1.49] +## 0.10.7.1-0.1.49 * fixes and typos * split socks from shoes * even more nicknames -## [0.10.7.1-0.1.48] +## 0.10.7.1-0.1.48 * Kopareigns found the HGsuite doubling pop counts bug and fixed it * seriously, it's gone now -## [0.10.7.1-0.1.47] - 2018-04-13 +## 0.10.7.1-0.1.47 - 2018-04-13 * fixes to reFullBed * more code improvement * Nox/Deepmurk areolae and pre-pube vectors -## [0.10.7.1-0.1.46] +## 0.10.7.1-0.1.46 * fixes to walkPast * code cleaning -## [0.10.7.1-0.1.45] +## 0.10.7.1-0.1.45 * several fixes, most notable being NationalityToName not recognizing Revivalist slaves * fSlaveSlaveDick overhaul * code improvements -## [0.10.7.1-0.1.44] +## 0.10.7.1-0.1.44 * bunch of new shoes and stockings by Deepmurk * code cleanup * partial REFI work (merge conflict forced push) -## [0.10.7.1-0.1.43] - 2018-04-12 +## 0.10.7.1-0.1.43 - 2018-04-12 * readded fixed reverted content * multiple typos fixed * better RA controls for diet and muscle -## [0.10.7.1-0.1.42] - 2018-04-11 +## 0.10.7.1-0.1.42 - 2018-04-11 * reverted "new means to add, remove, and locate slaves via index map" -## [0.10.7.1-0.1.41] +## 0.10.7.1-0.1.41 * various fixes * encyclopedia prodding from SFanon * new means to add, remove, and locate slaves via index map -## [0.10.7.1-0.1.40] +## 0.10.7.1-0.1.40 * added Fuckdoll impregnation * preglocke's fSlaveSlaveVagConsumate cleanup and content addition -## [0.10.7.1-0.1.39] - 2018-04-10 +## 0.10.7.1-0.1.39 - 2018-04-10 * various fixes and typos * fixed an issue where personal training could attempt to soften paraphilias -## [0.10.7.1-0.1.38] +## 0.10.7.1-0.1.38 * various typos and minor fixes * fixed tabbed main's link issues -## [0.10.7.1-0.1.37] +## 0.10.7.1-0.1.37 * added ability to give slaves your surname during marriage * unbound slaveInteract impreg block from Fuckdoll suit (it now checks .fuckdoll instead) @@ -2158,98 +2172,98 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * Stuffedanon's tweaks now only apply to refreshed passages and not first visits * fixed engineering start not giving secExp proper drone counts -## [0.10.7.1-0.1.36] +## 0.10.7.1-0.1.36 * code cleanup * many more cases caught for supremacist's law * defiant slaves get excess trust converted into negative rep -## [0.10.7.1-0.1.35] - 2018-04-09 +## 0.10.7.1-0.1.35 - 2018-04-09 * fixes * background color flipper (WIP) * more Nox/Deepmurk vector work * stuffedanon's SugarCube tweaks -## [0.10.7.1-0.1.34] +## 0.10.7.1-0.1.34 * fixes to slaveSummary name flipping * fixed bad array in bellyDesc -## [0.10.7.1-0.1.33] +## 0.10.7.1-0.1.33 * fixes * typo corrections * small additions to footwear and chastity descriptions to a couple outfits that previously lacked them -## [0.10.7.1-0.1.32] - 2018-04-08 +## 0.10.7.1-0.1.32 - 2018-04-08 * more typo corrections * more nicknames * various code improvements -## [0.10.7.1-0.1.31] +## 0.10.7.1-0.1.31 * fixes * expanded fDick a bit * typo corrections -## [0.10.7.1-0.1.30] - 2018-04-07 +## 0.10.7.1-0.1.30 - 2018-04-07 * several typo corrections * large vector art update from Deepmurk involving boobs and sleeves -## [0.10.7.1-0.1.29] +## 0.10.7.1-0.1.29 * hopefully have finished fixing that rival hacking victory * various typo corrections * messy bun added to hairstyles -## [0.10.7.1-0.1.28] - 2018-04-06 +## 0.10.7.1-0.1.28 - 2018-04-06 * typo corrections * some code improvements * still more names and nicknames -## [0.10.7.1-0.1.27] +## 0.10.7.1-0.1.27 * typo corrections * some code improvements * even more names * more careers -## [0.10.7.1-0.1.27] - 2018-04-05 +## 0.10.7.1-0.1.27 - 2018-04-05 * fixed a bad $i in nextWeek * added a basic overpower roll for slave vs player -## [0.10.7.1-0.1.26] +## 0.10.7.1-0.1.26 * added anon's aphrodisiac demonstration to FCTV * Fuckdoll conversion now unsets inflation -## [0.10.7.1-0.1.25] - 2018-04-04 +## 0.10.7.1-0.1.25 - 2018-04-04 * added the black market pt 1 (FS research buying) * various fixes and typo corrections * most, if not all, of the old SugarCube operators -## [0.10.7.1-0.1.24] - 2018-04-03 +## 0.10.7.1-0.1.24 - 2018-04-03 * various fixes including issues pertaining to incubator reservations not clearing after birth * tweaked maturity pref age effects to hopefully be less overwhelming -## [0.10.7.1-0.1.23] +## 0.10.7.1-0.1.23 * lots more new nicknames * various text and bug fixes -## [0.10.7.1-0.1.22] - 2018-04-02 +## 0.10.7.1-0.1.22 - 2018-04-02 * fixes, typos and code improvements * even more (git) vector art -## [0.10.7.1-0.1.21] +## 0.10.7.1-0.1.21 * more nicknames * more names then you'll ever want @@ -2258,39 +2272,39 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * typo corrections * code cleanup -## [0.10.7.1-0.1.20] - 2018-04-01 +## 0.10.7.1-0.1.20 - 2018-04-01 * various little fixes * fixed slimming diet not lowering muscle * many typo corrections -## [0.10.7.1-0.1.19] - 2018-03-31 +## 0.10.7.1-0.1.19 - 2018-03-31 * fixes * more nicknames -## [0.10.7.1-0.1.18] +## 0.10.7.1-0.1.18 * bunch of bug fixes, typo corrections and scene oddity fixes * also more nicknames -## [0.10.7.1-0.1.17] - 2018-03-30 +## 0.10.7.1-0.1.17 - 2018-03-30 * major update to original embedded vector art * shifted loli growth hormone check into saHormoneEffects to not suppress feedback * various little fixes * added surname order control to description options -## [0.10.7.1-0.1.16] +## 0.10.7.1-0.1.16 * various corrections to enslaved citizens not being the right race when the supremacist law is in play * a certain policy is now properly enforced -## [0.10.7.1-0.1.15] - 2018-03-29 +## 0.10.7.1-0.1.15 - 2018-03-29 * fixed issue causing a slave's player children fathered to not properly track -## [0.10.7.1-0.1.14] +## 0.10.7.1-0.1.14 * you can now implant a belly implant post csec (non-seBirth only) * added more hacking skill effects @@ -2298,92 +2312,92 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * various typos fixed * some code cleanup -## [0.10.7.1-0.1.13] - 2018-03-28 +## 0.10.7.1-0.1.13 - 2018-03-28 * PC cheat edit improvements * twincest options for new voluntarily enslaved twins during recruitment * various typos fixed * more bugs squashed, most notably virgins claiming to have given birth before -## [0.10.7.1-0.1.12] - 2018-03-27 +## 0.10.7.1-0.1.12 - 2018-03-27 * fixed issues with eugenics and the rival conflict * fixed various little bugs -## [0.10.7.1-0.1.11] +## 0.10.7.1-0.1.11 * added many new git submitted nationalities * fixed needless space between knock yourself up and its link * revised saLiveWithHG's diet block to better stick to dietary targets -## [0.10.7.1-0.1.10] - 2018-03-26 +## 0.10.7.1-0.1.10 - 2018-03-26 * added breeder's diet (boosts conception rates) -## [0.10.7.1-0.1.9] - 2018-03-26 +## 0.10.7.1-0.1.9 - 2018-03-26 * git resync, mostly typos on this end * fixes to issues in facilities on the git end -## [0.10.7.1-0.1.8] - 2018-03-25 +## 0.10.7.1-0.1.8 - 2018-03-25 * fixes and tweaks, nothing major -## [0.10.7.1-0.1.7] - 2018-03-24 +## 0.10.7.1-0.1.7 - 2018-03-24 * fixed a couple minor annoyances * if any slave has a .reservedChildren value, the incubator global tracking resetter will be usable -## [0.10.7.1-0.1.6] +## 0.10.7.1-0.1.6 * new voluntarily enslaved pairs can show their incestual love during recruitment * minor tweaks to muscle building and steroids * added fertility diet -## [0.10.7.1-0.1.5] +## 0.10.7.1-0.1.5 * fixed improper usage of jsEither() -## [0.10.7.1-0.1.4] - 2018-03-23 +## 0.10.7.1-0.1.4 - 2018-03-23 * fixes to setPregType() * slimming diet can now be reassigned after muscles are completely gone to trim assets -## [0.10.7.1-0.1.3.1] +## 0.10.7.1-0.1.3.1 * little fix to broodmother initiation in wombJS -## [0.10.7.1-0.1.3] +## 0.10.7.1-0.1.3 * finished implementing setPregType(), now to find it outputs multiples too readily * incubator now adjusts .hormoneBalance when the hormone settings are on * various spelling corrections and a minor bugfix -## [0.10.7.1-0.1.2.1] +## 0.10.7.1-0.1.2.1 * minor fixes * fixed boomerang slave relation null pointer exception -## [0.10.7.1-0.1.2] +## 0.10.7.1-0.1.2 * fixed boomerang slaves null pointer exceptions regarding rivalries and relationships -## [0.10.7.1-0.1.1.1] +## 0.10.7.1-0.1.1.1 * reverted change to traitor slave origin concatenation -## [0.10.7.1-0.1.1] +## 0.10.7.1-0.1.1 * many spelling corrections * fixes to decreasing custom nationality weighting * fixes to bad versionID setting * partial implementation of setPregType() -## [0.10.7.1-0.1.0.1] +## 0.10.7.1-0.1.0.1 * minor fix to generateXYslave -## [0.10.7.1-0.1.0] +## 0.10.7.1-0.1.0 * fixes severe issues with customized slave trade * Requires backwards compatibility - no exceptions diff --git a/FCHost/CMakeLists.txt b/FCHost/CMakeLists.txt index e8e97f00f283eb4c8419b2a424ef9e1fbac24f5b..d54e523a94771a1177590ed273364744ccb63889 100644 --- a/FCHost/CMakeLists.txt +++ b/FCHost/CMakeLists.txt @@ -24,7 +24,7 @@ # # The below requirements must be met to build this project. # -# - Chromium Embedded Framework (CEF) 76.1.5 or newer. +# - Chromium Embedded Framework (CEF) 89.0 or newer. # # - CMake version 2.8.12.1 or newer. # @@ -33,7 +33,7 @@ # distribution and treat FCHost like tests/cefsimple (from which it is derived). # # - Windows requirements: -# Visual Studio 2015 or newer. +# Visual Studio 2019 or newer. # # BUILD EXAMPLES # @@ -64,24 +64,24 @@ # > ninja cefclient cefsimple # # To perform a Windows build using a 32-bit CEF binary distribution: -# Using the Visual Studio 2015 IDE: -# > cmake -G "Visual Studio 14" .. +# Using the Visual Studio 2019 IDE: +# > cmake -G "Visual Studio 16" .. # Open build\cef.sln in Visual Studio and select Build > Build Solution. # -# Using Ninja with Visual Studio 2015 command-line tools: +# Using Ninja with Visual Studio 2019 command-line tools: # (this path may be different depending on your Visual Studio installation) -# > "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\vcvars32.bat" +# > "C:\Program Files (x86)\Microsoft Visual Studio 16.0\VC\bin\vcvars32.bat" # > cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Debug .. # > ninja cefclient cefsimple # # To perform a Windows build using a 64-bit CEF binary distribution: -# Using the Visual Studio 2015 IDE: -# > cmake -G "Visual Studio 14 Win64" .. +# Using the Visual Studio 2019 IDE: +# > cmake -G "Visual Studio 16 Win64" .. # Open build\cef.sln in Visual Studio and select Build > Build Solution. # -# Using Ninja with Visual Studio 2015 command-line tools: +# Using Ninja with Visual Studio 2019 command-line tools: # (this path may be different depending on your Visual Studio installation) -# > "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\vcvars64.bat" +# > "C:\Program Files (x86)\Microsoft Visual Studio 16.0\VC\bin\amd64\vcvars64.bat" # > cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Debug .. # > ninja cefclient cefsimple diff --git a/FCHost/cmake/cef_macros.cmake b/FCHost/cmake/cef_macros.cmake index 1b667e1cd1c6ea723f16e805589fb16326bf83cd..3ff7c15284f9aa385c81a5bfaf1e3a343e8d63ce 100644 --- a/FCHost/cmake/cef_macros.cmake +++ b/FCHost/cmake/cef_macros.cmake @@ -25,7 +25,7 @@ macro(PRINT_CEF_CONFIG) message(STATUS "Binary distribution root: ${_CEF_ROOT}") - if(OS_MACOSX) + if(OS_MAC) message(STATUS "Base SDK: ${CMAKE_OSX_SYSROOT}") message(STATUS "Target SDK: ${CEF_TARGET_SDK}") endif() @@ -75,8 +75,8 @@ macro(APPEND_PLATFORM_SOURCES name_of_list) if(OS_WINDOWS AND ${name_of_list}_WINDOWS) list(APPEND ${name_of_list} ${${name_of_list}_WINDOWS}) endif() - if(OS_MACOSX AND ${name_of_list}_MACOSX) - list(APPEND ${name_of_list} ${${name_of_list}_MACOSX}) + if(OS_MAC AND ${name_of_list}_MAC) + list(APPEND ${name_of_list} ${${name_of_list}_MAC}) endif() endmacro() @@ -184,10 +184,10 @@ endif(OS_LINUX) # Mac OS X macros. # -if(OS_MACOSX) +if(OS_MAC) # Manually process and copy over resource files. -macro(COPY_MACOSX_RESOURCES resource_list prefix_list target source_dir app_path) +macro(COPY_MAC_RESOURCES resource_list prefix_list target source_dir app_path) foreach(FILENAME ${resource_list}) # Remove one or more prefixes from the source paths. set(TARGET_FILENAME "${FILENAME}") @@ -229,7 +229,7 @@ macro(COPY_MACOSX_RESOURCES resource_list prefix_list target source_dir app_path endforeach() endmacro() -endif(OS_MACOSX) +endif(OS_MAC) # @@ -298,7 +298,7 @@ macro(SET_COMMON_TARGET_PROPERTIES target) set_property(TARGET ${target} PROPERTY LINK_FLAGS_RELEASE ${_flags_str}) endif() - if(OS_MACOSX) + if(OS_MAC) # Set Xcode target properties. set_target_properties(${target} PROPERTIES XCODE_ATTRIBUTE_ALWAYS_SEARCH_USER_PATHS NO diff --git a/FCHost/cmake/cef_variables.cmake b/FCHost/cmake/cef_variables.cmake index 079e885ce10254032c54253506a61c91099c74bd..fb9552428e8acd4f38eba149e3bbc569a11aceee 100644 --- a/FCHost/cmake/cef_variables.cmake +++ b/FCHost/cmake/cef_variables.cmake @@ -14,7 +14,8 @@ endif() # Determine the platform. if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") - set(OS_MACOSX 1) + set(OS_MAC 1) + set(OS_MACOSX 1) # For backwards compatibility. set(OS_POSIX 1) elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") set(OS_LINUX 1) @@ -25,13 +26,15 @@ endif() # Determine the project architecture. if(NOT DEFINED PROJECT_ARCH) - if(CMAKE_SIZEOF_VOID_P MATCHES 8) + if(OS_WINDOWS AND "${CMAKE_GENERATOR_PLATFORM}" STREQUAL "arm64") + set(PROJECT_ARCH "arm64") + elseif(CMAKE_SIZEOF_VOID_P MATCHES 8) set(PROJECT_ARCH "x86_64") else() set(PROJECT_ARCH "x86") endif() - if(OS_MACOSX) + if(OS_MAC) # PROJECT_ARCH should be specified on Mac OS X. message(WARNING "No PROJECT_ARCH value specified, using ${PROJECT_ARCH}") endif() @@ -60,7 +63,7 @@ set(CEF_LIBCEF_DLL_WRAPPER_PATH "${_CEF_ROOT}/libcef_dll") # Shared compiler/linker flags. list(APPEND CEF_COMPILER_DEFINES - # Allow C++ programs to use stdint.h macros specified in the C99 standard that aren't + # Allow C++ programs to use stdint.h macros specified in the C99 standard that aren't # in the C++ standard (e.g. UINT8_MAX, INT64_MIN, etc) __STDC_CONSTANT_MACROS __STDC_FORMAT_MACROS ) @@ -218,7 +221,6 @@ if(OS_LINUX) libcef.so libEGL.so libGLESv2.so - natives_blob.bin snapshot_blob.bin v8_context_snapshot.bin swiftshader @@ -247,7 +249,7 @@ endif() # Mac OS X configuration. # -if(OS_MACOSX) +if(OS_MAC) # Platform-specific compiler/linker flags. # See also Xcode target properties in cef_macros.cmake. set(CEF_LIBTYPE SHARED) @@ -311,7 +313,7 @@ if(OS_MACOSX) # Find the newest available base SDK. execute_process(COMMAND xcode-select --print-path OUTPUT_VARIABLE XCODE_PATH OUTPUT_STRIP_TRAILING_WHITESPACE) - foreach(OS_VERSION 10.11 10.10 10.9) + foreach(OS_VERSION 10.15 10.14 10.13 10.12 10.11) set(SDK "${XCODE_PATH}/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${OS_VERSION}.sdk") if(NOT "${CMAKE_OSX_SYSROOT}" AND EXISTS "${SDK}" AND IS_DIRECTORY "${SDK}") set(CMAKE_OSX_SYSROOT ${SDK}) @@ -319,7 +321,7 @@ if(OS_MACOSX) endforeach() # Target SDK. - set(CEF_TARGET_SDK "10.9") + set(CEF_TARGET_SDK "10.11") list(APPEND CEF_COMPILER_FLAGS -mmacosx-version-min=${CEF_TARGET_SDK} ) @@ -328,10 +330,15 @@ if(OS_MACOSX) # Target architecture. if(PROJECT_ARCH STREQUAL "x86_64") set(CMAKE_OSX_ARCHITECTURES "x86_64") + elseif(PROJECT_ARCH STREQUAL "arm64") + set(CMAKE_OSX_ARCHITECTURES "arm64") else() set(CMAKE_OSX_ARCHITECTURES "i386") endif() + # Prevent Xcode 11 from doing automatic codesigning. + set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "") + # CEF directory paths. set(CEF_BINARY_DIR "${_CEF_ROOT}/$<CONFIGURATION>") set(CEF_BINARY_DIR_DEBUG "${_CEF_ROOT}/Debug") @@ -346,6 +353,15 @@ if(OS_MACOSX) set(CEF_SANDBOX_LIB_DEBUG "${CEF_BINARY_DIR_DEBUG}/cef_sandbox.a") set(CEF_SANDBOX_LIB_RELEASE "${CEF_BINARY_DIR_RELEASE}/cef_sandbox.a") endif() + + # CEF Helper app suffixes. + # Format is "<name suffix>:<target suffix>:<plist suffix>". + set(CEF_HELPER_APP_SUFFIXES + "::" + " (GPU):_gpu:.gpu" + " (Plugin):_plugin:.plugin" + " (Renderer):_renderer:.renderer" + ) endif() @@ -364,22 +380,8 @@ if(OS_WINDOWS) if(USE_SANDBOX) # Check if the current MSVC version is compatible with the cef_sandbox.lib - # static library. For a list of all version numbers see - # https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B#Internal_version_numbering - list(APPEND supported_msvc_versions - 1900 # VS2015 and updates 1, 2, & 3 - 1910 # VS2017 version 15.1 & 15.2 - 1911 # VS2017 version 15.3 & 15.4 - 1912 # VS2017 version 15.5 - 1913 # VS2017 version 15.6 - 1914 # VS2017 version 15.7 - 1915 # VS2017 version 15.8 - 1916 # VS2017 version 15.9 - 1920 # VS2019 version 16.0 - 1921 # VS2018 version 16.1 - ) - list(FIND supported_msvc_versions ${MSVC_VERSION} _index) - if (${_index} EQUAL -1) + # static library. We require VS2015 or newer. + if(MSVC_VERSION LESS 1900) message(WARNING "CEF sandbox is not compatible with the current MSVC version (${MSVC_VERSION})") set(USE_SANDBOX OFF) endif() @@ -462,7 +464,6 @@ if(OS_WINDOWS) # List of CEF binary files. set(CEF_BINARY_FILES chrome_elf.dll - d3dcompiler_47.dll libcef.dll libEGL.dll libGLESv2.dll @@ -471,6 +472,12 @@ if(OS_WINDOWS) swiftshader ) + if(NOT PROJECT_ARCH STREQUAL "arm64") + list(APPEND CEF_BINARY_FILES + d3dcompiler_47.dll + ) + endif() + # List of CEF resource files. set(CEF_RESOURCE_FILES cef.pak @@ -490,8 +497,15 @@ if(OS_WINDOWS) # Libraries required by cef_sandbox.lib. set(CEF_SANDBOX_STANDARD_LIBS + Advapi32.lib dbghelp.lib + Delayimp.lib + OleAut32.lib + PowrProf.lib + Propsys.lib psapi.lib + SetupAPI.lib + Shell32.lib version.lib wbemuuid.lib winmm.lib diff --git a/FCHost/cmake_vs2015.bat b/FCHost/cmake_vs2015.bat deleted file mode 100644 index 2f63e4e5fa051862946ed8e27c57fe6c42cf7365..0000000000000000000000000000000000000000 --- a/FCHost/cmake_vs2015.bat +++ /dev/null @@ -1,5 +0,0 @@ -@ECHO OFF -REM Quickly rebuild 64-bit VS2015 solution/project files from the CMake files. - -cmake -G "Visual Studio 14 Win64" -pause \ No newline at end of file diff --git a/FCHost/cmake_vs2019.bat b/FCHost/cmake_vs2019.bat new file mode 100644 index 0000000000000000000000000000000000000000..a3630349e29820ba7e427a9bc5be21204065e993 --- /dev/null +++ b/FCHost/cmake_vs2019.bat @@ -0,0 +1,5 @@ +@ECHO OFF +REM Quickly rebuild 64-bit VS2019 solution/project files from the CMake files. + +cmake -G "Visual Studio 16" -A x64 +pause \ No newline at end of file diff --git a/devNotes/jsEventCreationGuide.md b/devNotes/jsEventCreationGuide.md index dd612dc1aae49f012de86af25f1460d998428b89..65709fcdeff046fd255148a566ead0ff680b0e9c 100644 --- a/devNotes/jsEventCreationGuide.md +++ b/devNotes/jsEventCreationGuide.md @@ -95,4 +95,12 @@ Then go to the Debug & cheating tab and enable CheatMode. Once you get to "Random Individual Event" select any slave and at the bottom under DEBUG: there should be a input box with "Check Prerequisites and Casting" link next to it. Per the example under it, place your event's full name into it e.g. App.Events.myEvent and then hit said link. -If everything works as intended you should see output \ No newline at end of file +If everything works as intended you should see output + +## Examples + +# Single slave +[src/events/RESS/devotedFearfulSlave.js](src/events/RESS/devotedFearfulSlave.js) which was converted as apart of https://gitgud.io/pregmodfan/fc-pregmod/-/merge_requests/8843. + +# Dual slave +[src/events/reDevotedTwins.js](src/events/reDevotedTwins.js) which was converted as apart of https://gitgud.io/pregmodfan/fc-pregmod/-/merge_requests/9043. \ No newline at end of file diff --git a/devTools/javaSanityCheck/ignoredVariables b/devTools/javaSanityCheck/ignoredVariables index d0ddb90cab43308446df088bd2c9ae32789c5ea4..da4a3be56126777de80bdbdfa84d4036404c1321 100644 --- a/devTools/javaSanityCheck/ignoredVariables +++ b/devTools/javaSanityCheck/ignoredVariables @@ -1,10 +1,4 @@ # Add hits, that are false positives and should therefore be ignored, here -# likely bugged check -AGrowth -# -MIN -W;O;L -0 #re-added below 11/14 ############################ #corp @@ -12,8 +6,6 @@ perUnit DivLegal DivWhoreDev acquire -#tabs####################### -IntroSummary ############################ societyChanged totalMerc @@ -21,12 +13,8 @@ securityHQ waterwayTime dickSize bodyDesire -newModelUI dinnerParty -badOutcome RESSMuscles -royalNationalities tempEventToggle showAppraisal -Him sacrificeType \ No newline at end of file diff --git a/devTools/types/FC/gameState.d.ts b/devTools/types/FC/gameState.d.ts index 1c7d94ab2fa997ab3dc7b141df2ca55508541aa7..935bf0fe3a89d90458f4803d3ac4dc76b1b12772 100644 --- a/devTools/types/FC/gameState.d.ts +++ b/devTools/types/FC/gameState.d.ts @@ -69,12 +69,8 @@ declare namespace FC { /** @deprecated */ FSNonconformistEvents: string[]; /** @deprecated */ - RETasteTestSubIDs: number[]; - /** @deprecated */ rebelSlaves: string[]; /** @deprecated */ - REBoobCollisionSubIDs: string[]; - /** @deprecated */ RECockmilkInterceptionIDs: number[]; /** @deprecated */ eligibleSlaves: SlaveState[]; diff --git a/devTools/types/FC/human.d.ts b/devTools/types/FC/human.d.ts index ffb6d0fe960be775b1f138652e27ffc57165a809..615a3dc3d1ad211e0c8c661571480e7978938b06 100644 --- a/devTools/types/FC/human.d.ts +++ b/devTools/types/FC/human.d.ts @@ -219,7 +219,7 @@ declare global { /** prefers big cocks */ | "size queen">; - type BreastShape = "normal" | "perky" | "saggy" | "torpedo-shaped" | "downward-facing" | "wide-set" | "deflated" | "spherical"; + type BreastShape = "normal" | "perky" | "saggy" | "torpedo-shaped" | "downward-facing" | "wide-set" | "spherical"; type Diet = "healthy" | "restricted" | "corrective" | "muscle building" | "fattening" | "slimming" | "XX" | "XY" | "XXY" | "cum production" | "cleansing" | "fertility" | "high caloric"; type Drug = "no drugs" | diff --git a/docker/megacmd/Dockerfile b/docker/megacmd/Dockerfile index d454f095cd53ae5979d12b497e0045d3b80d8736..6b2b1dda7d94b6982a0996a6d0892451af7624b3 100644 --- a/docker/megacmd/Dockerfile +++ b/docker/megacmd/Dockerfile @@ -6,12 +6,17 @@ # Debug build process # docker build --no-cache --progress=plain -t megacmd . -#Create debian as base image +# Create debian as base image FROM debian -#Install packages +# Update RUN apt-get -y update RUN apt-get -y upgrade + +# Install zip +RUN apt-get -y install zip + +# mega cmd # Install dependencies, when changing mega versions these may need to be adjusted RUN apt-get -y install libc-ares2 libcrypto++6 libmediainfo0v5 libpcrecpp0v5 libzen0v5 # Install mega cmd diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js index 54b6603330bea2b3a9732bb7283e09b85e9c9139..dd8ce9f024d4af8c680a3e15f3172d75b88ac85f 100644 --- a/js/003-data/gameVariableData.js +++ b/js/003-data/gameVariableData.js @@ -366,7 +366,6 @@ App.Data.resetOnNGPlus = { /** @type {assistant} */ assistant: null, targetArcology: {fs: "New"}, - readySlaves: 0, plot: 1, assignmentRecords: {}, @@ -563,28 +562,8 @@ App.Data.resetOnNGPlus = { spaUpgrade: 0, spaFix: 0, spaName: "the Spa", - - // Incubator Subsection - incubator: 0, - incubatorBulkRelease: 0, - incubatorOrgans: [], - incubatorUpgradeSpeed: 5, - incubatorUpgradeWeight: 0, - incubatorUpgradeMuscles: 0, - incubatorUpgradeGrowthStims: 0, - incubatorUpgradeReproduction: 0, - incubatorUpgradeOrgans: 0, - incubatorImprintSetting: "trust", - incubatorWeightSetting: 0, - incubatorMusclesSetting: 0, - incubatorGrowthStimsSetting: 0, - incubatorReproductionSetting: 0, - incubatorUpgradePregAdaptation: 0, - incubatorPregAdaptationSetting: 0, - incubatorPregAdaptationPower: 0, - - incubatorName: "the Incubator", - tanks: [], + + incubator: {capacity: 0, tanks: []}, clinicDecoration: "standard", clinic: 0, diff --git a/slave variables documentation - Pregmod.txt b/slave variables documentation - Pregmod.txt index dda669f63676dc7462c1d4c3d43ec184fca7d9db..53e32ad634e7495159ad9214a69afcde1819ed7a 100644 --- a/slave variables documentation - Pregmod.txt +++ b/slave variables documentation - Pregmod.txt @@ -2229,6 +2229,7 @@ accepts string "torpedo-shaped" "downward-facing" "wide-set" +"spherical" nipples: @@ -2241,6 +2242,7 @@ accepts string "cute" "partially inverted" "fuckable" +"flat" nipplesPiercing: diff --git a/src/002-config/fc-version.js b/src/002-config/fc-version.js index 2cf595041c93ff924e81b9dd994eb913d1524c8a..a038ae74f3108ae5f7f0d0609fbb3fde270123b3 100644 --- a/src/002-config/fc-version.js +++ b/src/002-config/fc-version.js @@ -1,6 +1,6 @@ App.Version = { base: "0.10.7.1", // The vanilla version the mod is based off of, this should never be changed. - pmod: "3.9.1", + pmod: "3.9.4", commitHash: null, - release: 1120 // When getting close to 2000, please remove the check located within the onLoad() function defined at line five of src/js/eventHandlers.js. + release: 1122 // When getting close to 2000, please remove the check located within the onLoad() function defined at line five of src/js/eventHandlers.js. }; diff --git a/src/005-passages/eventsPassages.js b/src/005-passages/eventsPassages.js index fdcc213f8f192cf168b244a9bf3ff733248da272..141f11ce00e7d9009f12f39c4f2036dd47526b86 100644 --- a/src/005-passages/eventsPassages.js +++ b/src/005-passages/eventsPassages.js @@ -17,7 +17,7 @@ new App.DomPassage("SE Death", } ); -new App.DomPassage("SE Expire", +new App.DomPassage("SE expiration", () => { V.nextButton = "Continue"; V.nextLink = "Scheduled Event"; @@ -26,7 +26,7 @@ new App.DomPassage("SE Expire", } ); -new App.DomPassage("SE Retire", +new App.DomPassage("SE retirement", () => { V.nextButton = "Continue"; V.nextLink = "Scheduled Event"; @@ -102,3 +102,19 @@ new App.DomPassage("P rivalry hostage", return App.Events.pRivalryHostage(); } ); + +new App.DomPassage("P rivalry actions", + () => { + V.nextButton = "Continue"; + V.nextLink = "Random Nonindividual Event"; + return App.Events.pRivalryActions(); + } +); + +new App.DomPassage("P rivalry victory", + () => { + V.nextButton = "Continue"; + V.nextLink = "Random Nonindividual Event"; + return App.Events.pRivalryVictory(); + } +); diff --git a/src/arcologyBuilding/penthouse.js b/src/arcologyBuilding/penthouse.js index 3b151dcd3dd38985e94453f51195dc9d6f5cdf56..269cd7ba502d1d1ff567b517ed4c26d7c5cb49ff 100644 --- a/src/arcologyBuilding/penthouse.js +++ b/src/arcologyBuilding/penthouse.js @@ -61,12 +61,12 @@ App.Arcology.Cell.Penthouse = class extends App.Arcology.Cell.BaseCell { addFacility(fcs.schoolroom); addFacility(fcs.cellblock); - if (V.incubator) { + if (V.incubator.capacity > 0) { const inc = App.Entity.facilities.incubator; const link = App.UI.DOM.passageLink(inc.UIName, "Incubator"); - const desc = `(${numberWithPluralOne(inc.capacity - V.tanks.length, "empty tank")})`; + const desc = `(${numberWithPluralOne(inc.capacity - V.incubator.tanks.length, "empty tank")})`; - if (V.readySlaves > 0) { + if (V.incubator.readySlaves > 0) { wrapper.append(createFacilityDiv(link, App.UI.DOM.combineNodes(desc, App.UI.DOM.makeElement("span", "[!]", "noteworthy")))); } else { wrapper.append(createFacilityDiv(link, desc)); diff --git a/src/art/artJS.js b/src/art/artJS.js index 5d0f98c5686d830e3714ac50ec6836fd06ce944c..f58087b3665de17ee06004d268425ba945a67eb4 100644 --- a/src/art/artJS.js +++ b/src/art/artJS.js @@ -1,6 +1,10 @@ /** <<SlaveArt>> SugarCube macro. For parameter details, @see App.Art.SlaveArtElement */ Macro.add("SlaveArt", { handler() { + if (typeof (this.args[0]) === "string") { + // reparse first argument if it still contains Sugarcube code + this.args[0] = Scripting.evalTwineScript(this.args[0]); + } // @ts-ignore - macro argument forwarding breaks typechecking this.output.append(App.Art.SlaveArtElement(...this.args)); } diff --git a/src/art/webgl/art.js b/src/art/webgl/art.js index 6f31fe7d26162d8fd21efb6321e1abc2ec04b814..c696278575ee2d5f927ad1a2e66e4479cf9c723a 100644 --- a/src/art/webgl/art.js +++ b/src/art/webgl/art.js @@ -151,6 +151,9 @@ App.Art.applySurfaces = function(slave, scene) { cockSkin = "Dark"; skin = "DarkSkin"; break; + default: + cockSkin = "Light"; + skin = "FemaleBase"; } surfaces.push(["Futalicious_Genitalia_G8F_Glans_Futalicious_Shell", "matIds", [cockSkin + "Futalicious_Genitalia_G8F_Glans_Futalicious_Shell"]]); @@ -469,6 +472,11 @@ App.Art.applyMaterials = function(slave, scene) { materials.push(["DarkSkinLips", "Ns", lipsGloss]); materials.push(["DarkFutalicious_Genitalia_G8F_Glans_Futalicious_Shell", "Kd", [0.7, 0.7, 0.77]]); break; + default: + materials.push(["FemaleBaseFingernails", "Kd", nailColor]); + materials.push(["FemaleBaseLips", "Kd", lipsColor]); + materials.push(["FemaleBaseLips", "Ns", lipsGloss]); + materials.push(["LightFutalicious_Genitalia_G8F_Glans_Futalicious_Shell", "Kd", [1.0, 1.0, 1.0]]); } let pubicColor = hexToRgb(extractColor(slave.pubicHColor)); diff --git a/src/data/backwardsCompatibility/backwardsCompatibility.js b/src/data/backwardsCompatibility/backwardsCompatibility.js index 2b9fd9fb86c422514871be600a251a209cdc7178..8501ef5cd82b8e3aff601bab945c02d02941bad9 100644 --- a/src/data/backwardsCompatibility/backwardsCompatibility.js +++ b/src/data/backwardsCompatibility/backwardsCompatibility.js @@ -101,6 +101,46 @@ App.Update.backwardsCompatibility = function() { }; App.Update.globalVariables = function(node) { + if (typeof V.incubator === "number") { + if (V.incubator > 0) { + const storage = V.incubator; + V.incubator = {capacity: storage, tanks: (V.tanks || [])}; + } else { + App.Facilities.Incubator.init('base'); + } + } + + V.incubator.capacity = V.incubator.capacity || 0; + V.incubator.tanks = V.incubator.tanks || []; + + if (V.incubator.capacity > 0) { + V.incubator.name = V.incubator.name || V.incubatorName || "the Incubator"; + V.incubator.organs = V.incubator.organs || V.incubatorOrgans || []; + V.incubator.readySlaves = V.incubator.readySlaves || V.readySlaves || 0; + + V.incubator.upgrade = V.incubator.upgrade || {}; + V.incubator.upgrade.speed = V.incubator.upgrade.speed || V.incubatorUpgradeSpeed || 5; + V.incubator.upgrade.weight = V.incubator.upgrade.weight || V.incubatorUpgradeWeight || 0; + V.incubator.upgrade.muscles = V.incubator.upgrade.muscles || V.incubatorUpgradeMuscles || 0; + V.incubator.upgrade.growthStims = V.incubator.upgrade.growthStims || V.incubatorUpgradeGrowthStims ||0; + V.incubator.upgrade.reproduction = V.incubator.upgrade.reproduction || V.incubatorUpgradeReproduction || 0; + V.incubator.upgrade.pregAdaptation = V.incubator.upgrade.pregAdaptation || V.incubatorUpgradePregAdaptation || 0; + V.incubator.upgrade.organs = V.incubator.upgrade.organs || V.incubatorUpgradeOrgans || 0; + + V.incubator.setting = V.incubator.setting || {}; + V.incubator.setting.bulkRelease = V.incubator.setting.bulkRelease || V.incubatorBulkRelease || 0; + if (V.incubatorImprintSetting === 0) { + V.incubator.setting.imprint = "trust"; + } + V.incubator.setting.imprint = V.incubator.setting.imprint || V.incubatorImprintSetting || "trust"; + V.incubator.setting.weight = V.incubator.setting.weight || V.incubatorWeightSetting || 0; + V.incubator.setting.muscles = V.incubator.setting.muscles || V.incubatorMusclesSetting || 0; + V.incubator.setting.growthStims = V.incubator.setting.growthStims || V.incubatorGrowthStimsSetting || 0; + V.incubator.setting.reproduction = V.incubator.setting.reproduction || V.incubatorReproductionSetting || 0; + V.incubator.setting.pregAdaptation = V.incubator.setting.pregAdaptation || V.incubatorPregAdaptationSetting || 0; + V.incubator.setting.pregAdaptationPower = V.incubator.setting.pregAdaptationPower || V.incubatorPregAdaptationPower || 0; + } + if (Array.isArray(V.nationalities)) { V.nationalities = weightedArray2HashMap(V.nationalities); } @@ -329,9 +369,6 @@ App.Update.globalVariables = function(node) { delete V.killChoice; } - // Incubator - if (V.incubatorImprintSetting === 0) { V.incubatorImprintSetting = "trust"; } - App.SecExp.generalBC(); App.SF.BC(); @@ -1409,11 +1446,11 @@ App.Update.slaveRecords = function(node) { } node.append(`Done!`); - if (V.tanks.length > 0) { + if (V.incubator.tanks.length > 0) { let incubatorDiv = document.createElement("div"); node.append(incubatorDiv); incubatorDiv.append(`Checking and fixing records for incubator tanks... `); - V.tanks.forEach((slave) => { + V.incubator.tanks.forEach((slave) => { App.Update.Slave(slave); App.Entity.Utils.SlaveDataSchemeCleanup(slave); SlaveDatatypeCleanup(slave, true); diff --git a/src/data/backwardsCompatibility/datatypeCleanup.js b/src/data/backwardsCompatibility/datatypeCleanup.js index 605e35f3d0188d7c0b59ecee9ade0a9b77fd49b8..10eb4a744aff43b132d4de8c75605bf0bc811765 100644 --- a/src/data/backwardsCompatibility/datatypeCleanup.js +++ b/src/data/backwardsCompatibility/datatypeCleanup.js @@ -1598,7 +1598,6 @@ globalThis.FacilityDatatypeCleanup = (function() { V.cellblockName = V.cellblockName || "the Cellblock"; V.masterSuiteName = V.masterSuiteName || "the Master Suite"; V.HGSuiteName = V.HGSuiteName || "the Head Girl Suite"; - V.incubatorName = V.incubatorName || "the Incubator"; V.farmyardName = V.farmyardName || "the Farmyard"; } diff --git a/src/endWeek/endWeek.js b/src/endWeek/endWeek.js index 840c98c7dbb2b904e6cd4e9be5ab59aa41e599ac..3acd838daedead1c9c1176302a877f9abddeb90c 100644 --- a/src/endWeek/endWeek.js +++ b/src/endWeek/endWeek.js @@ -133,8 +133,10 @@ globalThis.endWeek = (function() { return true; }); - for (const organ of V.incubatorOrgans) { - advanceOrgan(organ); + if (V.incubator.capacity > 0) { + for (const organ of V.incubator.organs) { + advanceOrgan(organ); + } } // TODO: nurseryOrgans too, if those ever exist... diff --git a/src/endWeek/events/retire.js b/src/endWeek/events/retire.js index 6032594948d7fe0abd5baf5718e657e55e78b800..56dffde15148b8d8ccaa13c7bfebf34b3cec8dbf 100644 --- a/src/endWeek/events/retire.js +++ b/src/endWeek/events/retire.js @@ -114,19 +114,7 @@ globalThis.retireScene = function(originalSlave) { } App.Events.addParagraph(desc, r); r = []; - let _toSearch; // TODO yuck yuck yuck - let _toSearchAlt; - if (slave.prestigeDesc === 0) { - _toSearch = ""; - } else { - _toSearch = slave.prestigeDesc; - } - if (slave.porn.prestigeDesc === 0) { - _toSearchAlt = ""; - } else { - _toSearchAlt = slave.porn.prestigeDesc; - } - if (_toSearch.indexOf("Head Girl") !== -1 || V.HeadGirlID === slave.ID) { + if (slave.prestigeDesc && slave.prestigeDesc.includes("Head Girl") || V.HeadGirlID === slave.ID) { r.push(`${He} has a reputation from ${his} long service as your Head Girl. To ${his} bemusement, and considerable satisfaction, ${he} has multiple job offers from slaving operations without even having to circulate ${his} resume.`); if (slave.fetish === "sadist") { r.push(`The prospect of a virtually unlimited field for abuse and rape is something ${he}'d pay for, now that ${he} has ${his} own money. ${He}'s excited beyond description to find that there are people interested in paying ${him} to exercise ${his} exquisitely horrible skills.`); @@ -135,7 +123,7 @@ globalThis.retireScene = function(originalSlave) { } else { r.push(`${His} annuity means that ${he} doesn't have to work, but ${he}'s inclined to do so. ${His} skills command reasonable wages in the slave training field, and between those prospects and ${his} annuity, ${he} stands to become wealthy.`); } - } else if (_toSearchAlt.indexOf("is world famous for") !== -1) { + } else if (slave.porn.prestigeDesc && slave.porn.prestigeDesc.includes("is world famous for")) { let _pornFame = slave.porn.prestigeDesc; _pornFame = _pornFame.replace("$He is world famous for $his career in slave pornography. Millions are intimately familiar with", "enjoy"); _pornFame = _pornFame.replace(".", ","); diff --git a/src/endWeek/nextWeek/nextWeek.js b/src/endWeek/nextWeek/nextWeek.js index 19cc42c1edac5d003af1e8067b382db69083b0a9..74d243cfe278874041019318ba1042fd57c9a7c0 100644 --- a/src/endWeek/nextWeek/nextWeek.js +++ b/src/endWeek/nextWeek/nextWeek.js @@ -270,8 +270,7 @@ App.EndWeek.nextWeek = function() { } } - const toSearch = V.PC.refreshment.toLowerCase(); - if (toSearch.indexOf("fertility") !== -1) { + if (V.PC.refreshment.includes("fertility")) { V.PC.forcedFertDrugs = 1; } else if (V.PC.forcedFertDrugs > 0) { V.PC.forcedFertDrugs--; diff --git a/src/endWeek/nextWeek/resetGlobals.js b/src/endWeek/nextWeek/resetGlobals.js index 0c0f29026660c161401a2cccdf486a07ba5a04f7..7fb202b2cbcc29b591712bea129b61d376dc891f 100644 --- a/src/endWeek/nextWeek/resetGlobals.js +++ b/src/endWeek/nextWeek/resetGlobals.js @@ -10,8 +10,6 @@ App.EndWeek.resetGlobals = function() { V.daughterSlave = -1; V.devMother = -1; V.devDaughter = -1; - V.alphaTwin = -1; - V.betaTwin = -1; V.youngerSister = -1; V.olderSister = -1; V.boobsID = -1; @@ -47,9 +45,7 @@ App.EndWeek.resetGlobals = function() { V.FSNonconformistEvents = []; V.REButtholeCheckinIDs = []; V.recruit = []; - V.RETasteTestSubIDs = []; V.rebelSlaves = []; - V.REBoobCollisionSubIDs = []; V.RECockmilkInterceptionIDs = []; V.eligibleSlaves = []; diff --git a/src/endWeek/reports/incubatorReport.js b/src/endWeek/reports/incubatorReport.js index 4b61119b2ad0ecdff0889b7dd1901a6a5936dbf8..5e3daeca4f157ef8ccd0e9129e38e98d5779b6d9 100644 --- a/src/endWeek/reports/incubatorReport.js +++ b/src/endWeek/reports/incubatorReport.js @@ -1,8 +1,12 @@ App.EndWeek.incubatorReport = function() { const frag = document.createDocumentFragment(); - V.readySlaves = 0; + + if (V.incubator.capacity === 0) { + return frag; + } + V.incubator.readySlaves = 0; - for (const tank of V.tanks) { + for (const tank of V.incubator.tanks) { const entry = App.UI.DOM.appendNewElement('p', frag); let r = []; const {He, he, His, his, him} = getPronouns(tank); @@ -15,67 +19,67 @@ App.EndWeek.incubatorReport = function() { } } if (tank.growTime > 0) { - tank.growTime -= V.incubatorUpgradeSpeed; + tank.growTime -= V.incubator.upgrade.speed; r.push(`<span class="pink">${tank.slaveName}'s</span> growth is currently being accelerated. ${He}`); - if (Math.round(tank.growTime/V.incubatorUpgradeSpeed) <= 0) { + if (Math.round(tank.growTime/V.incubator.upgrade.speed) <= 0) { r.push(`is <span class="lime">ready for release.</span> ${He} will be ejected from ${his} tank upon your approach.`); } else { - r.push(`will be ready for release in about ${Math.round(tank.growTime/V.incubatorUpgradeSpeed)} weeks.`); + r.push(`will be ready for release in about ${Math.round(tank.growTime/V.incubator.upgrade.speed)} weeks.`); } } else { r.push(`<span class="pink">${tank.slaveName}</span> is <span class="lime">ready for release.</span> ${He} will be ejected from ${his} tank upon your approach.`); - V.readySlaves = 1; + V.incubator.readySlaves = 1; } App.Events.addNode(entry, r, "div"); r = []; - if (V.incubatorUpgradeWeight === 1) { - if (V.incubatorWeightSetting === 1) { + if (V.incubator.upgrade.weight === 1) { + if (V.incubator.setting.weight === 1) { if (tank.weight < 200) { - if (V.incubatorUpgradeSpeed === 52) { + if (V.incubator.upgrade.speed === 52) { tank.weight += 70; - } else if (V.incubatorUpgradeSpeed === 18) { + } else if (V.incubator.upgrade.speed === 18) { tank.weight += 40; - } else if (V.incubatorUpgradeSpeed === 9) { + } else if (V.incubator.upgrade.speed === 9) { tank.weight += 20; - } else if (V.incubatorUpgradeSpeed === 6) { + } else if (V.incubator.upgrade.speed === 6) { tank.weight += 10; - } else if (V.incubatorUpgradeSpeed === 5) { + } else if (V.incubator.upgrade.speed === 5) { tank.weight += 5; } } r.push(`The weight monitoring systems are overloading ${his} intake causing <span class="red">rapid weight gain.</span>`); - } else if (V.incubatorWeightSetting === 2) { + } else if (V.incubator.setting.weight === 2) { if (tank.weight > 10) { - if (V.incubatorUpgradeSpeed === 52) { + if (V.incubator.upgrade.speed === 52) { tank.weight -= 30; - } else if (V.incubatorUpgradeSpeed === 18) { + } else if (V.incubator.upgrade.speed === 18) { tank.weight -= 10; - } else if (V.incubatorUpgradeSpeed === 9) { + } else if (V.incubator.upgrade.speed === 9) { tank.weight -= 5; - } else if (V.incubatorUpgradeSpeed === 6) { + } else if (V.incubator.upgrade.speed === 6) { tank.weight -= 2; - } else if (V.incubatorUpgradeSpeed === 5) { + } else if (V.incubator.upgrade.speed === 5) { tank.weight -= 1; } r.push(`The weight monitoring systems detect ${he} is overweight and <span class="green">decrease ${his} caloric intake.</span>`); } else if (tank.weight < -10) { - if (V.incubatorUpgradeSpeed === 52) { + if (V.incubator.upgrade.speed === 52) { tank.weight += 30; - } else if (V.incubatorUpgradeSpeed === 18) { + } else if (V.incubator.upgrade.speed === 18) { tank.weight += 10; - } else if (V.incubatorUpgradeSpeed === 9) { + } else if (V.incubator.upgrade.speed === 9) { tank.weight += 5; - } else if (V.incubatorUpgradeSpeed === 6) { + } else if (V.incubator.upgrade.speed === 6) { tank.weight += 2; - } else if (V.incubatorUpgradeSpeed === 5) { + } else if (V.incubator.upgrade.speed === 5) { tank.weight += 1; } r.push(`The weight monitoring systems detect ${he} is underweight and <span class="green">increase ${his} caloric intake.</span>`); } else { r.push(`${He} is <span class="lime">currently at a healthy weight;</span> efforts will be made to maintain it.`); } - } else if (V.incubatorWeightSetting === 0) { + } else if (V.incubator.setting.weight === 0) { if (tank.weight > -100) { r.push(`${His} developing body <span class="red">quickly sheds its gained weight.</span>`); tank.weight -= 40; @@ -90,53 +94,53 @@ App.EndWeek.incubatorReport = function() { App.Events.addNode(entry, r, "div"); r = []; - if (V.incubatorUpgradeMuscles === 1) { - if (V.incubatorMusclesSetting === 2) { + if (V.incubator.upgrade.muscles === 1) { + if (V.incubator.setting.muscles === 2) { if (tank.muscles < 100) { - if (V.incubatorUpgradeSpeed === 52) { + if (V.incubator.upgrade.speed === 52) { tank.muscles += 70; - } else if (V.incubatorUpgradeSpeed === 18) { + } else if (V.incubator.upgrade.speed === 18) { tank.muscles += 40; - } else if (V.incubatorUpgradeSpeed === 9) { + } else if (V.incubator.upgrade.speed === 9) { tank.muscles += 20; - } else if (V.incubatorUpgradeSpeed === 6) { + } else if (V.incubator.upgrade.speed === 6) { tank.muscles += 10; - } else if (V.incubatorUpgradeSpeed === 5) { + } else if (V.incubator.upgrade.speed === 5) { tank.muscles += 5; } } r.push(`The strength monitoring systems are overloading ${him} with steroids causing <span class="green">rapid muscle development.</span>`); - } else if (V.incubatorMusclesSetting === 1) { + } else if (V.incubator.setting.muscles === 1) { if (tank.muscles > 10) { - if (V.incubatorUpgradeSpeed === 52) { + if (V.incubator.upgrade.speed === 52) { tank.muscles -= 30; - } else if (V.incubatorUpgradeSpeed === 18) { + } else if (V.incubator.upgrade.speed === 18) { tank.muscles -= 10; - } else if (V.incubatorUpgradeSpeed === 9) { + } else if (V.incubator.upgrade.speed === 9) { tank.muscles -= 5; - } else if (V.incubatorUpgradeSpeed === 6) { + } else if (V.incubator.upgrade.speed === 6) { tank.muscles -= 2; - } else if (V.incubatorUpgradeSpeed === 5) { + } else if (V.incubator.upgrade.speed === 5) { tank.muscles--; } r.push(`The strength monitoring systems detect ${he} is overly muscular and <span class="green">decrease ${his} steroid dosage.</span>`); } else if (tank.muscles < -10) { - if (V.incubatorUpgradeSpeed === 52) { + if (V.incubator.upgrade.speed === 52) { tank.muscles += 30; - } else if (V.incubatorUpgradeSpeed === 18) { + } else if (V.incubator.upgrade.speed === 18) { tank.muscles += 10; - } else if (V.incubatorUpgradeSpeed === 9) { + } else if (V.incubator.upgrade.speed === 9) { tank.muscles += 5; - } else if (V.incubatorUpgradeSpeed === 6) { + } else if (V.incubator.upgrade.speed === 6) { tank.muscles += 2; - } else if (V.incubatorUpgradeSpeed === 5) { + } else if (V.incubator.upgrade.speed === 5) { tank.muscles++; } r.push(`The strength monitoring systems detect ${he} is weak and <span class="green">increase ${his} steroid dosage.</span>`); } else { r.push(`${He} has <span class="lime">a healthy musculature;</span> efforts will be made to maintain it.`); } - } else if (V.incubatorMusclesSetting === 0) { + } else if (V.incubator.setting.muscles === 0) { if (tank.muscles > -100) { r.push(`${His} developing body <span class="red">quickly loses its gained muscle.</span>`); tank.muscles -= 40; @@ -151,7 +155,7 @@ App.EndWeek.incubatorReport = function() { App.Events.addNode(entry, r, "div"); r = []; - if (V.incubatorUpgradeGrowthStims === 1 && V.incubatorGrowthStimsSetting !== 0) { + if (V.incubator.upgrade.growthStims === 1 && V.incubator.setting.growthStims !== 0) { let heightLimit = Math.trunc(Math.clamp((Height.mean(tank) * 1.25), 0, 274)); let heightLimitAge = Height.forAge(tank.height, tank); if (tank.geneticQuirks.dwarfism === 2 && tank.geneticQuirks.gigantism !== 2) { @@ -170,68 +174,68 @@ App.EndWeek.incubatorReport = function() { if (tank.height >= heightLimit) { r.push(`The monitoring system detects ${his} body is not able to support further increases in height, so it carefully regulates stimulant injections to <span class="yellow">maintain ${his} current stature.</span>`); tank.height = heightLimit; - } else if (V.incubatorGrowthStimsSetting === 2) { + } else if (V.incubator.setting.growthStims === 2) { if (tank.geneMods.NCS === 1) { r.push(`The monitoring system floods ${his} body with growth stimulants, but ${his} <span class="orange">NCS prevents an increase in ${his} growth rate.</span>`); tank.height = heightLimitAge; } else { r.push(`The monitoring system floods ${his} body with growth stimulants, causing <span class="green">a sharp increase in growth rate.</span>`); - if (V.incubatorWeightSetting >= 1 && V.incubatorMusclesSetting <= 1 && V.incubatorReproductionSetting <= 1) { - if (V.incubatorUpgradeSpeed === 52) { + if (V.incubator.setting.weight >= 1 && V.incubator.setting.muscles <= 1 && V.incubator.setting.reproduction <= 1) { + if (V.incubator.upgrade.speed === 52) { tank.height += random(3, 6); - } else if (V.incubatorUpgradeSpeed === 18) { + } else if (V.incubator.upgrade.speed === 18) { tank.height += random(2, 5); - } else if (V.incubatorUpgradeSpeed === 9) { + } else if (V.incubator.upgrade.speed === 9) { tank.height += random(1, 4); - } else if (V.incubatorUpgradeSpeed === 6) { + } else if (V.incubator.upgrade.speed === 6) { tank.height += random(1, 3); - } else if (V.incubatorUpgradeSpeed === 5) { + } else if (V.incubator.upgrade.speed === 5) { tank.height += random(1, 2); } } else { - if (V.incubatorUpgradeSpeed === 52) { + if (V.incubator.upgrade.speed === 52) { tank.height += random(2, 5); - } else if (V.incubatorUpgradeSpeed === 18) { + } else if (V.incubator.upgrade.speed === 18) { tank.height += random(1, 4); - } else if (V.incubatorUpgradeSpeed === 9) { + } else if (V.incubator.upgrade.speed === 9) { tank.height += random(1, 3); - } else if (V.incubatorUpgradeSpeed === 6) { + } else if (V.incubator.upgrade.speed === 6) { tank.height += random(1, 2); - } else if (V.incubatorUpgradeSpeed === 5) { + } else if (V.incubator.upgrade.speed === 5) { tank.height += random(0, 1); } } } - } else if (V.incubatorGrowthStimsSetting === 1) { + } else if (V.incubator.setting.growthStims === 1) { if (tank.geneMods.NCS === 1) { r.push(`The monitoring system detects ${he} is near the expected height for ${his} <span class="orange">NCS</span> condition, so it carefully regulates stimulant injections to <span class="yellow">maintain ${his} current stature.</span>`); tank.height = heightLimitAge; } else if (tank.height > heightLimitAge) { r.push(`The monitoring systems detect ${he} is near the expected height, so it carefully regulates stimulant injections to <span class="yellow">maintain ${his} current stature.</span>`); if (random(1, 10) === 10) { - if (V.incubatorUpgradeSpeed === 52) { + if (V.incubator.upgrade.speed === 52) { tank.height += random(1, 4); - } else if (V.incubatorUpgradeSpeed === 18) { + } else if (V.incubator.upgrade.speed === 18) { tank.height += random(1, 3); - } else if (V.incubatorUpgradeSpeed === 9) { + } else if (V.incubator.upgrade.speed === 9) { tank.height += random(1, 2); - } else if (V.incubatorUpgradeSpeed === 6) { + } else if (V.incubator.upgrade.speed === 6) { tank.height += random(0, 1); - } else if (V.incubatorUpgradeSpeed === 5) { + } else if (V.incubator.upgrade.speed === 5) { tank.height += random(0, 1); } } } else { r.push(`The monitoring systems detect ${his} body is capable of developing more rapidly and <span class="green">increase ${his} growth stimulant dosage.</span>`); - if (V.incubatorUpgradeSpeed === 52) { + if (V.incubator.upgrade.speed === 52) { tank.height += random(1, 4); - } else if (V.incubatorUpgradeSpeed === 18) { + } else if (V.incubator.upgrade.speed === 18) { tank.height += random(1, 3); - } else if (V.incubatorUpgradeSpeed === 9) { + } else if (V.incubator.upgrade.speed === 9) { tank.height += random(1, 2); - } else if (V.incubatorUpgradeSpeed === 6) { + } else if (V.incubator.upgrade.speed === 6) { tank.height += random(0, 1); - } else if (V.incubatorUpgradeSpeed === 5) { + } else if (V.incubator.upgrade.speed === 5) { tank.height += random(0, 1); } } @@ -243,11 +247,11 @@ App.EndWeek.incubatorReport = function() { App.Events.addNode(entry, r, "div"); r = []; - if (V.incubatorUpgradeReproduction === 1) { + if (V.incubator.upgrade.reproduction === 1) { const rearQuirk = tank.geneticQuirks.rearLipedema === 2 ? 2 : 1; - if (V.incubatorReproductionSetting === 2) { + if (V.incubator.setting.reproduction === 2) { r.push(`${His} developing body is being flooded with hormones.`); - if (V.incubatorWeightSetting === 1) { + if (V.incubator.setting.weight === 1) { r.push(`Combined with the abundant food provided to ${him}, ${his} body grows rapidly.`); if (tank.ovaries === 1) { tank.pubertyXX = 1; @@ -258,7 +262,7 @@ App.EndWeek.incubatorReport = function() { if (tank.geneMods.NCS === 1) { /* NCS blocks hormonal growth of all secondary sexual characteristics */ r.push(`${His} <span class="orange">NCS blocks all growth</span> despite the excess estrogen-laced growth hormones flooding ${his} body.`); - } else if (V.incubatorUpgradeSpeed === 52) { + } else if (V.incubator.upgrade.speed === 52) { if (tank.boobs < 8000) { r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly balloon ${his} breasts.</span>`); tank.boobs += 2000; @@ -271,7 +275,7 @@ App.EndWeek.incubatorReport = function() { r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`); tank.butt += 4; } - } else if (V.incubatorUpgradeSpeed === 18) { + } else if (V.incubator.upgrade.speed === 18) { if (tank.boobs < 8000) { r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly balloon ${his} breasts.</span>`); tank.boobs += 500; @@ -284,7 +288,7 @@ App.EndWeek.incubatorReport = function() { r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`); tank.butt += 3; } - } else if (V.incubatorUpgradeSpeed === 9) { + } else if (V.incubator.upgrade.speed === 9) { if (tank.boobs < 8000) { r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly balloon ${his} breasts.</span>`); tank.boobs += 200; @@ -297,7 +301,7 @@ App.EndWeek.incubatorReport = function() { r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear grow fatter.</span>`); tank.butt += 2; } - } else if (V.incubatorUpgradeSpeed === 6) { + } else if (V.incubator.upgrade.speed === 6) { if (tank.boobs < 8000) { r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly balloon ${his} breasts.</span>`); tank.boobs += 100; @@ -310,7 +314,7 @@ App.EndWeek.incubatorReport = function() { r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`); tank.butt++; } - } else if (V.incubatorUpgradeSpeed === 5) { + } else if (V.incubator.upgrade.speed === 5) { if (tank.boobs < 8000) { r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly balloon ${his} breasts.</span>`); tank.boobs += 100; @@ -332,7 +336,7 @@ App.EndWeek.incubatorReport = function() { if (tank.geneMods.NCS === 1) { /* NCS blocks hormonal growth of all secondary sexual characteristics */ r.push(`${His} <span class="orange">NCS blocks all growth</span> despite the excess testosterone-laced growth hormones flooding ${his} body.`); - } else if (V.incubatorUpgradeSpeed === 52) { + } else if (V.incubator.upgrade.speed === 52) { if (tank.balls < 40) { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to balloon for extra cum production.</span>`); tank.balls += 16; @@ -341,7 +345,7 @@ App.EndWeek.incubatorReport = function() { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); tank.dick += 4; } - } else if (V.incubatorUpgradeSpeed === 18) { + } else if (V.incubator.upgrade.speed === 18) { if (tank.balls < 40 && random(1, 100) > 10) { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to balloon for extra cum production.</span>`); tank.balls += 9; @@ -350,7 +354,7 @@ App.EndWeek.incubatorReport = function() { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); tank.dick += 3; } - } else if (V.incubatorUpgradeSpeed === 9) { + } else if (V.incubator.upgrade.speed === 9) { if (tank.balls < 40 && random(1, 100) > 20) { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to balloon for extra cum production.</span>`); tank.balls += 4; @@ -359,7 +363,7 @@ App.EndWeek.incubatorReport = function() { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); tank.dick += 2; } - } else if (V.incubatorUpgradeSpeed === 6) { + } else if (V.incubator.upgrade.speed === 6) { if (tank.balls < 40 && random(1, 100) > 30) { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to balloon for extra cum production.</span>`); tank.balls += 2; @@ -368,7 +372,7 @@ App.EndWeek.incubatorReport = function() { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); tank.dick++; } - } else if (V.incubatorUpgradeSpeed === 5) { + } else if (V.incubator.upgrade.speed === 5) { if (tank.balls < 40 && random(1, 100) > 30) { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to balloon for extra cum production.</span>`); tank.balls++; @@ -379,7 +383,7 @@ App.EndWeek.incubatorReport = function() { } } } - } else if (V.incubatorWeightSetting === 2) { + } else if (V.incubator.setting.weight === 2) { r.push(`Combined with the healthy food provided to ${him}, ${his} body grows readily.`); if (tank.ovaries === 1) { tank.pubertyXX = 1; @@ -390,7 +394,7 @@ App.EndWeek.incubatorReport = function() { if (tank.geneMods.NCS === 1) { /* NCS blocks hormonal growth of all secondary sexual characteristics */ r.push(`${His} <span class="orange">NCS blocks all growth</span> despite the excess estrogen-laced growth hormones flooding ${his} body.`); - } else if (V.incubatorUpgradeSpeed === 52) { + } else if (V.incubator.upgrade.speed === 52) { if (tank.boobs < 4000) { r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly balloon ${his} breasts.</span>`); tank.boobs += 1000; @@ -403,7 +407,7 @@ App.EndWeek.incubatorReport = function() { r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`); tank.butt += 3; } - } else if (V.incubatorUpgradeSpeed === 18) { + } else if (V.incubator.upgrade.speed === 18) { if (tank.boobs < 4000) { r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly balloon ${his} breasts.</span>`); tank.boobs += 500; @@ -416,7 +420,7 @@ App.EndWeek.incubatorReport = function() { r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`); tank.butt++; } - } else if (V.incubatorUpgradeSpeed === 9) { + } else if (V.incubator.upgrade.speed === 9) { if (tank.boobs < 4000) { r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly balloon ${his} breasts.</span>`); tank.boobs += 200; @@ -429,7 +433,7 @@ App.EndWeek.incubatorReport = function() { r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`); tank.butt++; } - } else if (V.incubatorUpgradeSpeed === 6) { + } else if (V.incubator.upgrade.speed === 6) { if (tank.boobs < 4000) { r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly balloon ${his} breasts.</span>`); tank.boobs += 100; @@ -442,7 +446,7 @@ App.EndWeek.incubatorReport = function() { r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`); tank.butt++; } - } else if (V.incubatorUpgradeSpeed === 5) { + } else if (V.incubator.upgrade.speed === 5) { if (tank.boobs < 4000) { r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly balloon ${his} breasts.</span>`); tank.boobs += 100; @@ -464,7 +468,7 @@ App.EndWeek.incubatorReport = function() { if (tank.geneMods.NCS === 1) { /* NCS blocks hormonal growth of all secondary sexual characteristics */ r.push(`${His} <span class="orange">NCS blocks all growth</span> despite the excess testosterone-laced growth hormones flooding ${his} body.`); - } else if (V.incubatorUpgradeSpeed === 52) { + } else if (V.incubator.upgrade.speed === 52) { if (tank.balls < 10) { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to balloon for extra cum production.</span>`); tank.balls += 3; @@ -473,7 +477,7 @@ App.EndWeek.incubatorReport = function() { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); tank.dick += 2; } - } else if (V.incubatorUpgradeSpeed === 18) { + } else if (V.incubator.upgrade.speed === 18) { if (tank.balls < 10 && random(1, 100) > 10) { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to balloon for extra cum production.</span>`); tank.balls += 2; @@ -482,7 +486,7 @@ App.EndWeek.incubatorReport = function() { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); tank.dick++; } - } else if (V.incubatorUpgradeSpeed === 9) { + } else if (V.incubator.upgrade.speed === 9) { if (tank.balls < 10 && random(1, 100) > 20) { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to balloon for extra cum production.</span>`); tank.balls++; @@ -491,7 +495,7 @@ App.EndWeek.incubatorReport = function() { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); tank.dick++; } - } else if (V.incubatorUpgradeSpeed === 6) { + } else if (V.incubator.upgrade.speed === 6) { if (tank.balls < 10 && random(1, 100) > 30) { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to balloon for extra cum production.</span>`); tank.balls++; @@ -500,7 +504,7 @@ App.EndWeek.incubatorReport = function() { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); tank.dick++; } - } else if (V.incubatorUpgradeSpeed === 5) { + } else if (V.incubator.upgrade.speed === 5) { if (tank.balls < 10 && random(1, 100) > 30) { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to balloon for extra cum production.</span>`); tank.balls++; @@ -522,7 +526,7 @@ App.EndWeek.incubatorReport = function() { if (tank.geneMods.NCS === 1) { /* NCS blocks hormonal growth of all secondary sexual characteristics */ r.push(`${His} <span class="orange">NCS blocks all growth</span> despite the excess estrogen-laced growth hormones flooding ${his} body.`); - } else if (V.incubatorUpgradeSpeed === 52) { + } else if (V.incubator.upgrade.speed === 52) { if (tank.boobs < 2000) { r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly balloon ${his} breasts.</span>`); tank.boobs += 700; @@ -535,7 +539,7 @@ App.EndWeek.incubatorReport = function() { r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`); tank.butt += 2; } - } else if (V.incubatorUpgradeSpeed === 18) { + } else if (V.incubator.upgrade.speed === 18) { if (tank.boobs < 2000) { r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly balloon ${his} breasts.</span>`); tank.boobs += 200; @@ -548,7 +552,7 @@ App.EndWeek.incubatorReport = function() { r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`); tank.butt++; } - } else if (V.incubatorUpgradeSpeed === 9) { + } else if (V.incubator.upgrade.speed === 9) { if (tank.boobs < 2000) { r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly balloon ${his} breasts.</span>`); tank.boobs += 50; @@ -561,7 +565,7 @@ App.EndWeek.incubatorReport = function() { r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`); tank.butt++; } - } else if (V.incubatorUpgradeSpeed === 6) { + } else if (V.incubator.upgrade.speed === 6) { if (tank.boobs < 2000) { r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly grow ${his} breasts.</span>`); tank.boobs += 20; @@ -574,7 +578,7 @@ App.EndWeek.incubatorReport = function() { r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`); tank.butt++; } - } else if (V.incubatorUpgradeSpeed === 5) { + } else if (V.incubator.upgrade.speed === 5) { if (tank.boobs < 2000) { r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly grow ${his} breasts.</span>`); tank.boobs += 10; @@ -596,7 +600,7 @@ App.EndWeek.incubatorReport = function() { if (tank.geneMods.NCS === 1) { /* NCS blocks hormonal growth of all secondary sexual characteristics */ r.push(`${His} <span class="orange">NCS blocks all growth</span> despite the excess testosterone-laced growth hormones flooding ${his} body.`); - } else if (V.incubatorUpgradeSpeed === 52) { + } else if (V.incubator.upgrade.speed === 52) { if (tank.balls < 6) { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to grow for extra cum production.</span>`); tank.balls += 2; @@ -605,7 +609,7 @@ App.EndWeek.incubatorReport = function() { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); tank.dick++; } - } else if (V.incubatorUpgradeSpeed === 18) { + } else if (V.incubator.upgrade.speed === 18) { if (tank.balls < 6 && random(1, 100) > 50) { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to grow for extra cum production.</span>`); tank.balls++; @@ -614,7 +618,7 @@ App.EndWeek.incubatorReport = function() { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); tank.dick++; } - } else if (V.incubatorUpgradeSpeed === 9) { + } else if (V.incubator.upgrade.speed === 9) { if (tank.balls < 6 && random(1, 100) > 60) { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to balloon for extra cum production.</span>`); tank.balls++; @@ -623,7 +627,7 @@ App.EndWeek.incubatorReport = function() { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); tank.dick += 2; } - } else if (V.incubatorUpgradeSpeed === 6) { + } else if (V.incubator.upgrade.speed === 6) { if (tank.balls < 6 && random(1, 100) > 70) { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to grow for extra cum production.</span>`); tank.balls++; @@ -632,7 +636,7 @@ App.EndWeek.incubatorReport = function() { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); tank.dick++; } - } else if (V.incubatorUpgradeSpeed === 5) { + } else if (V.incubator.upgrade.speed === 5) { if (tank.balls < 6 && random(1, 100) > 80) { r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to grow for extra cum production.</span>`); tank.balls++; @@ -644,7 +648,7 @@ App.EndWeek.incubatorReport = function() { } } } - } else if (V.incubatorReproductionSetting === 1) { + } else if (V.incubator.setting.reproduction === 1) { r.push(`${His} hormone levels are being carefully managed, <span class="green">encouraging early puberty.</span>`); if (tank.ovaries === 1) { tank.pubertyXX = 1; @@ -739,10 +743,10 @@ App.EndWeek.incubatorReport = function() { } App.Events.addNode(entry, r, "div"); - if (V.incubatorReproductionSetting === 2) { + if (V.incubator.setting.reproduction === 2) { tank.energy = 80; tank.need = 100; - } else if (V.incubatorReproductionSetting === 1) { + } else if (V.incubator.setting.reproduction === 1) { tank.energy = 50; tank.need = 20; } else { @@ -751,21 +755,21 @@ App.EndWeek.incubatorReport = function() { } r = []; - if (((V.incubatorPregAdaptationSetting === 1 && tank.genes === "XX") || (V.incubatorPregAdaptationSetting === 2 && tank.genes === "XY") || V.incubatorPregAdaptationSetting === 3) && tank.growTime > 0) { + if (((V.incubator.setting.pregAdaptation === 1 && tank.genes === "XX") || (V.incubator.setting.pregAdaptation === 2 && tank.genes === "XY") || V.incubator.setting.pregAdaptation === 3) && tank.growTime > 0) { r.push(`The incubator is working on adapting ${his} abdomen and reproductive organs for future pregnancies.`); - let _weekAdapt = tank.incubatorPregAdaptationInWeek * V.incubatorUpgradeSpeed; + let _weekAdapt = tank.incubatorPregAdaptationInWeek * V.incubator.upgrade.speed; if (isNaN(_weekAdapt)) { /* NaN check AFTER multiply operation, against it result is critical here. Need to be absolutely sure about this operation, not about just tank property itself. This give me two very unpleasant hours to catch this */ tank.incubatorPregAdaptationInWeek = (15000 / 2000 - tank.pregAdaptation) / tank.growTime; } - _weekAdapt = tank.incubatorPregAdaptationInWeek * V.incubatorUpgradeSpeed; + _weekAdapt = tank.incubatorPregAdaptationInWeek * V.incubator.upgrade.speed; /* Now it should be fine */ - _weekAdapt *= 1 + (V.incubatorReproductionSetting / 5); + _weekAdapt *= 1 + (V.incubator.setting.reproduction / 5); _weekAdapt *= 1 + (tank.hormoneBalance / 1500); tank.pregAdaptation += _weekAdapt; /* here goes side effect from intense and extreme settings: */ - if (random(0, 100) <= (tank.incubatorPregAdaptationPower - 1) * (V.incubatorUpgradeSpeed / 2 + 1)) { + if (random(0, 100) <= (tank.incubatorPregAdaptationPower - 1) * (V.incubator.upgrade.speed / 2 + 1)) { switch (random(1, 9)) { /* side effect selection*/ case 1: tank.preg = -2; diff --git a/src/endWeek/saSmartPiercingEffects.js b/src/endWeek/saSmartPiercingEffects.js index a53baf79f9dfea7739b71f3ba5c5b6e4a2b1aaa5..67119d94eddbb9ea88ec17a7d89dac4cc0ae6fcb 100644 --- a/src/endWeek/saSmartPiercingEffects.js +++ b/src/endWeek/saSmartPiercingEffects.js @@ -467,7 +467,7 @@ App.SlaveAssignment.saSmartPiercingEffects = function(slave) { if (magnitude) { const ctor = App.SlaveAssignment.SmartPiercing[slave.clitSetting]; if (typeof ctor !== "function") { // uninstantiated classes are really just functions. JS is weird. - throw "Unrecognized smart clit/vibe setting"; + throw new Error(`Unrecognized smart clit/vibe setting ${slave.clitSetting}`); } /** @type {App.SlaveAssignment.SmartPiercing.BASE} */ const setting = new ctor(slave); diff --git a/src/events/PE/UnderageConcubine.js b/src/events/PE/UnderageConcubine.js index eb4a65b4cab22d1a6c7b7da12cd508274399cb55..ad69c6ccae94c136b574fe766402e2fdb131a3c7 100644 --- a/src/events/PE/UnderageConcubine.js +++ b/src/events/PE/UnderageConcubine.js @@ -58,7 +58,7 @@ App.Events.PEUnderageConcubine = class PEUnderageConcubine extends App.Events.Ba V.eventResults.youngConcubine = 1; // don't repeat this event - const haveSmilingMan = V.SecExp && V.SecExp.smilingMan.progress === 10; + const haveSmilingMan = V.secExpEnabled && V.SecExp && V.SecExp.smilingMan.progress === 10; App.Events.addResponses(node, [ new App.Events.Result("Ignore the controversy... What can they do about it anyway?", ignore), new App.Events.Result("Contact an old-world talk show and schedule an interview", interview), diff --git a/src/events/reArcologyInspection.js b/src/events/RE/reArcologyInspection.js similarity index 100% rename from src/events/reArcologyInspection.js rename to src/events/RE/reArcologyInspection.js diff --git a/src/events/RE/reDevotedTwins.js b/src/events/RE/reDevotedTwins.js new file mode 100644 index 0000000000000000000000000000000000000000..93428236832988655643008f61df3fd999ef5f27 --- /dev/null +++ b/src/events/RE/reDevotedTwins.js @@ -0,0 +1,132 @@ +App.Events.REDevotedTwins = class REDevotedTwins extends App.Events.BaseEvent { + eventPrerequisites() { + // Conditional example + return [ + () => V.seeIncest === 1 + ]; + } + + actorPrerequisites() { + return [ + [ + s => s.fetish !== "mindbroken", + s => s.sisters > 0, + s => s.devotion > 50, + canWalk, + hasAnyArms + ], + [ + s => s.fetish !== "mindbroken", + s => areSisters(s, getSlave(this.actors[0])) === 1, + s => s.rivalTarget !== this.actors[0], + s => s.devotion > 50, + canWalk, + hasAnyArms, + isSlaveAvailable + ] + ]; + } + + execute(node) { + /** @type {Array<App.Entity.SlaveState>} */ + let [alphaTwin, betaTwin] = this.actors.map(a => getSlave(a)); + + V.nextButton = "Continue"; + V.nextLink = "RIE Eligibility Check"; + + App.Events.drawEventArt(node, [alphaTwin, betaTwin]); + + let t = []; + + t.push(`${alphaTwin.slaveName} and ${betaTwin.slaveName} are such good and devoted slaves that they happily do everything together. They sleep ${hasBothArms(alphaTwin) && hasBothArms(betaTwin) ? "in each other's arms" : 'together'}, bathe together, work together whenever they can, and fuck together. For a while they masturbated together until they became so habituated to sexual slavery that they stopped seeing much distinction between masturbation and sex with one another. At the moment, they're getting ready for their day, chatting quietly and helping each other.`); + + App.Events.addParagraph(node, t); + + App.Events.addResponses(node, [ + new App.Events.Result(`Take them out for the morning`, morningWalk), + new App.Events.Result(`Use them side by side`, threesome) + ]); + + function morningWalk() { + t = []; + t.push(`You head out of your penthouse with a pretty sex slave under each arm. They're attentive companions, doing everything they can to mirror each other as they show off their bodies to onlookers.`); + if (V.weatherToday.severity <= 2) { + t.push(`It's a bright, sunny day, so you walk them up and down a busy glassed-in galleria.`); + } else { + t.push(`It's a particularly nasty day, so you stick to walking them up and down the crowded interior malls.`); + } + t.push(`They clearly expect you to fuck them in public, but for once you just enjoy a couple of hours with them. They start disappointed that you aren't going to use them, but they quickly get over it and enjoy preening under your arms. <span class="trust inc">They have both become more trusting of you,</span> and <span class="reputation inc">your reputation has increased considerably.</span>`); + + for (const slave of [alphaTwin, betaTwin]) { + slave.trust += 4; + repX(2500, "event", slave); + } + return t; + } + + function threesome() { + const alphaVaginal = canDoVaginal(alphaSlave) && alphaSlave.vagina > 0; + const alphaAnal = canDoAnal(alphaSlave) && alphaSlave.anus > 0; + const betaVaginal = canDoVaginal(betaTwin) && betaTwin.vagina > 0; + const betaAnal = canDoAnal(betaTwin) && betaTwin.anus > 0; + t = []; + t.push(`Slave twins inevitably get used to threesomes with their sibling, and ${alphaTwin.slaveName} and ${betaTwin.slaveName} are no exception. They greet you with every appearance of arousal and begin a carefully balanced routine — foreplay with you, of course, but whatever parts of them aren't working on you work on the other slave. They stroke you while making out, stroke each other while`); + if (V.PC.dick > 0) { + t.push(`sucking you to rock hardness,`); + } else { + t.push(`building your arousal,`); + } + if (canDoVaginal(alphaTwin) && canDoVaginal(betaTwin)) { + t.push(`and finger each others' holes`); + } else if (alphaTwin.dick > 0 && alphaTwin.chastityPenis === 0 && betaTwin.dick > 0 && betaTwin.chastityPenis === 0) { + t.push(`and fondle each others' dicks`); + } else { + t.push(`and fondle each other`); + } + t.push(`while`); + if (V.PC.dick > 0) { + if (alphaTwin.boobs > 300 && betaTwin.boobs > 300 && (alphaTwin.boobs <= betaTwin.boobs + 800 && alphaTwin.boobs >= betaTwin.boobs - 800) || (alphaTwin.boobs > 10000 && betaTwin.boobs > 10000)) { + t.push(`rubbing four breasts up and down your dick.`); + } else if (alphaTwin.belly > 5000 && betaTwin.belly > 5000) { + t.push(`rubbing two bulging bellies up and down your dick.`); + } else if (alphaTwin.weight > 95 && betaTwin.weight > 95) { + t.push(`rubbing your dick between two soft bellies.`); + } else { + t.push(`running two tongues up and down your dick.`); + } + t.push(`Since you only have one cock, the symmetry ends when you start fucking them.`); + if ((alphaVaginal || alphaAnal) && (betaVaginal || betaAnal)) { + t.push(`As you switch from hole to hole, whichever twin isn't getting fucked at the moment uses their mouth and hands to stimulate your balls and their twin's fuckhole as you pound it. When you finally cum in ${betaTwin.slaveName}, ${alphaTwin.slaveName} sucks it out and they kiss deeply to share your ejaculate.`); + if (alphaVaginal) { + actX(alphaTwin, "vaginal"); + } + if (alphaAnal) { + actX(alphaTwin, "anal"); + } + if (betaVaginal) { + actX(betaTwin, "vaginal"); + } + if (betaAnal) { + actX(betaTwin, "anal"); + } + actX(V.PC, "penetrative"); + } else { + t.push(`As you switch from throat to throat, whichever twin isn't getting facefucked at the moment uses their hands to stimulate your balls and their twin's body. When you finally cum in ${betaTwin.slaveName} mouth, they turn and deeply kiss to share your ejaculate.`); + actX(alphaTwin, "oral"); + actX(betaTwin, "oral"); + actX(V.PC, "penetrative"); + } + } else { + t.push(`crowding their faces against your pussy. You reach down and seize a nipple in each hand, pulling them upward so they can suck your nipples instead; they use manual stimulation to keep you going while they do. With one straddling each of your thighs, grinding shamelessly, you can reach around and molest their butts with your own hands.`); + seX(alphaTwin, "oral", V.PC, "vaginal"); + seX(betaTwin, "oral", V.PC, "vaginal"); + } + t.push(`<span class="devotion inc">They have both become more devoted to you.</span>`); + + alphaTwin.devotion += 4; + betaTwin.devotion += 4; + + return t; + } + } +}; diff --git a/src/events/reDevotees.js b/src/events/RE/reDevotees.js similarity index 100% rename from src/events/reDevotees.js rename to src/events/RE/reDevotees.js diff --git a/src/events/reFullBed.js b/src/events/RE/reFullBed.js similarity index 100% rename from src/events/reFullBed.js rename to src/events/RE/reFullBed.js diff --git a/src/events/reNickname.js b/src/events/RE/reNickname.js similarity index 100% rename from src/events/reNickname.js rename to src/events/RE/reNickname.js diff --git a/src/events/reRelativeRecruiter.js b/src/events/RE/reRelativeRecruiter.js similarity index 100% rename from src/events/reRelativeRecruiter.js rename to src/events/RE/reRelativeRecruiter.js diff --git a/src/events/reRoyalBlood.js b/src/events/RE/reRoyalBlood.js similarity index 100% rename from src/events/reRoyalBlood.js rename to src/events/RE/reRoyalBlood.js diff --git a/src/events/reStaffedMorning.js b/src/events/RE/reStaffedMorning.js similarity index 100% rename from src/events/reStaffedMorning.js rename to src/events/RE/reStaffedMorning.js diff --git a/src/events/RESS/devotedFearfulSlave.js b/src/events/RESS/devotedFearfulSlave.js new file mode 100644 index 0000000000000000000000000000000000000000..633b2b14183c594e3c7707368ee5367089b699f5 --- /dev/null +++ b/src/events/RESS/devotedFearfulSlave.js @@ -0,0 +1,89 @@ +App.Events.RESSDevotedFearfulSlave = class RESSDevotedFearfulSlave extends App.Events.BaseEvent { + eventPrerequisites() { + return []; + } + + actorPrerequisites() { + return [ + [ + s => s.fetish !== "mindbroken", + canWalk, + canSee, + canHear, + hasAnyArms, + s => s.devotion >= 50, + s => s.trust <= 20 + ] + ]; + } + + execute(node) { + /** @type {Array<App.Entity.SlaveState>} */ + let [eventSlave] = this.actors.map(a => getSlave(a)); + let t = []; + + const { + He, he, him, his, himself, girl + } = getPronouns(eventSlave); + + V.nextButton = "Continue"; + V.nextLink = "Next Week"; + + App.Events.drawEventArt(node, eventSlave); + t.push(`You are working late tonight, poring over some particularly troublesome business documents — though, thankfully, the end appears to be in sight. The sun has all but completely slipped below the horizon, drowning your office in moody twilight. Seeing that you are finally approaching the end of a long day, ${V.assistant.name} takes the liberty of having a`); + + if (V.PC.refreshmentType === 1) { + t.push(`glass of`); + } else if (V.PC.refreshmentType === 2) { + t.push(`plate of`); + } else if (V.PC.refreshmentType === 3) { + t.push(`line of`); + } else if (V.PC.refreshmentType === 4) { + t.push(`syringe of`); + } else if (V.PC.refreshmentType === 5) { + t.push(`pill of`); + } else if (V.PC.refreshmentType === 6) { + t.push(`tab of`); + } + + t.push(`${V.PC.refreshment} brought in to you. This time`, contextualIntro(V.PC, eventSlave, "DOM"), `has been sent to deliver it. ${He} loves you, but fears you simultaneously. Such relationships were not uncommon before the advent of modern slavery, but they are especially prevalent in its wake, as fear has proven a highly effective control method for those slaveowners with the inclination and relative lack of conscience to utilize it as such. You hurriedly put the finishing touches on your work, eager to be done, and then reach for your ${V.PC.refreshment}. ${eventSlave.slaveName} flinches at your sudden movement, taking a few frightened steps back, nearly dropping the serving tray and leaving you grasping at thin air. It was a simple fear response; ${he} didn't realize you were ready for your treat and instinctively thought you were reaching out to strike ${him}. Tears swell up in ${his} eyes as ${he} apologizes profusely.`); + + App.Events.addParagraph(node, t); + + App.Events.addResponses(node, [ + new App.Events.Result(`Comfort ${him}`, comfort), + new App.Events.Result(`Gently reassure ${him}`, reassure), + new App.Events.Result(`Vindicate ${his} fears`, vindicate), + ]); + + function comfort() { + t = []; + + t.push(`You set the ${V.PC.refreshment} aside on your desk for now, and take ${him} gently by the hand. You lead ${him} out onto the balcony of the Penthouse over to the railing. ${He} obediently assumes a position for you, bracing ${his} arm${hasBothArms(eventSlave) ? 's' : ''} on the railing, arching ${his} back and sticking ${his} bottom out to present ${himself} for use. Much to ${his} surprise, your hand guides ${him} back into a comfortable position, and simply pulls ${him} close into you. You explain to ${him} that ${he} is a good ${girl} who tries ${his} best, and that you don't want ${him} to fear you. After a little coddling, you fall silent, and simply hold ${him} tight, watching the street lights of ${V.arcologies[0].name} blink to life one after the other, slowly transforming the arcology into a vibrant, elegant light show. ${eventSlave.slaveName} can hardly believe what's happening, but eventually is able to relax fully, melting into your arms like butter into a hot pan. ${He} rests ${his} head lovingly against your chest and silently appreciates the view with you. When ${he} eventually departs, ${he} does so with <span class="devotion inc">tears of joy,</span> <span class="trust inc">rather than fear,</span> welling behind ${his} eyes.`); + + eventSlave.devotion += 15; + eventSlave.trust += 15; + return t; + } + + function reassure() { + t = []; + + t.push(`You set the ${V.PC.refreshment} aside on your desk for now, and take ${him} gently by the shoulders. You assure ${him} that ${he} is a good ${girl} who tries ${his} best, and that ${he} won't be hurt so long as ${he} remains well behaved. You affectionately stroke ${his} shoulders with your thumbs as you speak in a further attempt to calm ${him} down. ${He} is highly receptive to your soothing touch and kind words. ${He} dries ${his} eyes, gives you an <span class="devotion inc">affectionate kiss</span> and <span class="trust inc">thanks you prettily</span> before departing.`); + + eventSlave.devotion += 10; + eventSlave.trust += 10; + return t; + } + + function vindicate() { + t = []; + + t.push(`You set the ${V.PC.refreshment} aside on your desk, then, when the slave least expects, whirl around, delivering a fierce backhand slap to ${his} ${eventSlave.face >= -10 ? 'pretty' : 'homely'} face that nearly sends ${him} to the ground. You instruct ${him} to be more careful in future, and that you won't tolerate slaves that shy away from you for any reason, nor ones that are clumsy enough to nearly drop a serving tray while standing still. ${He} all but begs ${hasAllLimbs(eventSlave) ? `upon ${his} hands and knees` : 'and grovels'} for your forgiveness. You dismiss ${him} without further comment, and sit down to enjoy your evening refreshments. The battered, dejected slave slinks away, <span class="trust dec">choking down tears.</span> ${He} will be <span class="devotion inc">less careless</span> in the future.`); + + eventSlave.devotion += 10; + eventSlave.trust -= 10; + return t; + } + } +}; diff --git a/src/events/RETS/reBoobCollision.js b/src/events/RETS/reBoobCollision.js new file mode 100644 index 0000000000000000000000000000000000000000..7073f83e50f33b31adf834f9fb026e24629eeda8 --- /dev/null +++ b/src/events/RETS/reBoobCollision.js @@ -0,0 +1,468 @@ +App.Events.RETSBoobCollision = class RETSBoobCollision extends App.Events.BaseEvent { + eventPrerequisites() { + return []; + } + + actorPrerequisites() { + return [ + [ + s => s.fetish !== "mindbroken", + hasAnyArms, + canWalk, + canTalk, + canHear, + s => s.assignment !== Job.QUARTER, + s => s.devotion > 20, + s => s.trust > 20, + s => s.boobs > 3000, + s => (s.attrXX >= 50 || (s.fetish === "boobs" && s.fetishStrength > 95)) + ], + [ // and subslave + s => s.fetish !== "mindbroken", + hasAnyArms, + canStand, + canTalk, + canHear, + isSlaveAvailable, + s => s.devotion > 20, + s => s.boobs > 3000, + ] + ]; + } + + execute(node) { + /** @type {Array<App.Entity.SlaveState>} */ + let [eventSlave, subSlave] = this.actors.map(a => getSlave(a)); + const { + He, he, his, him, himself, woman, girl, loli + } = getPronouns(eventSlave); + const {say, title} = getEnunciation(eventSlave); + const { + him2, girl2, his2, he2, He2, woman2, hers2, loli2 + } = getPronouns(subSlave).appendSuffix("2"); + const {title: title2, say: say2} = getEnunciation(subSlave); + V.nextLink = "Next Week"; + + App.Events.drawEventArt(node, [eventSlave, subSlave], "no clothing"); + + let t = []; + + + t.push(`You pass by the slave quarters during a busy time. Slaves are hurrying back and forth, rushing to bathe, eat, and get dressed.`); + t.push(contextualIntro(V.PC, eventSlave, "DOM")); + t.push(`is in a particular hurry, ${his}`); + if (eventSlave.belly >= 10000) { + if (eventSlave.bellyPreg >= 8000) { + t.push(`heavy pregnancy`); + } else { + t.push(`heavy belly`); + } + t.push(`and`); + } + if (eventSlave.boobs > 8000) { + t.push(`gargantuan tits hampering ${him} badly`); + } else { + t.push(`huge boobs getting in the way`); + } + t.push(`as ${he} rushes around. Returning from the shower to the sleeping area, ${he} turns a corner and runs hard into`); + t.push(App.UI.DOM.combineNodes(contextualIntro(eventSlave, subSlave, "DOM"),".")); + t.push(`Both slaves are nude, and the collision of their massive breasts makes an audibly painful smack. ${eventSlave.slaveName} has enough momentum that ${he} overbears the top-heavy ${subSlave.slaveName} entirely. The poor`); + if (subSlave.physicalAge > 30) { + t.push(woman2); + } else { + t.push(girl2); + } + t.push(`crashes backwards, ${his2}`); + if (subSlave.butt > 8) { + t.push(`monstrous bottom`); + } else if (subSlave.butt > 4) { + t.push(`big behind`); + } else { + t.push(`hind end`); + } + t.push(`hitting the floor with a slap. ${eventSlave.slaveName} lands on top of ${him2}, the fall and the sudden weight of ${eventSlave.slaveName} on top of ${him2} driving the wind out of ${subSlave.slaveName} with a whoosh.`); + App.Events.addParagraph(node, t); + t = []; + t.push(Spoken(eventSlave, `"Sorry! I'm so sorry,"`)); + t.push(`apologizes ${eventSlave.slaveName}. ${He} starts to try to disentangle ${himself} as ${subSlave.slaveName} struggles to get ${his2} breath back, but you see ${eventSlave.slaveName}'s back stiffen. ${He} stops trying to get up. As the discomfort of the collision fades, ${he} notices the warmth of ${subSlave.slaveName} underneath ${him}, and the way their nipples are pressed against one another. Impulsively, ${he} kisses ${subSlave.slaveName} full on the lips,`); + if (eventSlave.boobs+subSlave.boobs > 20000) { + t.push(`even though the mass of boob between them is so massive that ${he} has to struggle to bring ${his} mouth down to meet ${subSlave.slaveName}'s.`); + } else if (eventSlave.belly >= 5000 && subSlave.belly >= 5000) { + t.push(`even though their combined`); + if (eventSlave.bellyPreg >= 5000) { + t.push(`pregnancies`); + } else { + t.push(`bellies`); + } + t.push(`and breasts complicate things.`); + } else if (eventSlave.belly >= 120000 || subSlave.belly >= 120000) { + t.push(`even though`); + if (eventSlave.belly >= 120000) { + t.push(`${his} massive `); + if (eventSlave.bellyPreg >= 5000) { + t.push(`pregnancy`); + } else { + t.push(`belly`); + } + t.push(`complicates reaching ${subSlave.slaveName}'s.`); + } else { + t.push(`${subSlave.slaveName}'s massive`); + if (eventSlave.bellyPreg >= 5000) { + t.push(`pregnancy`); + } else { + t.push(`belly`); + } + t.push(`complicates reaching ${hers2}.`); + } + } else { + t.push(`squashing their boobs together hard so ${he} can reach despite the mass of soft flesh between them.`); + } + App.Events.addParagraph(node, t); + t = []; + t.push(`"H-hey," ${subSlave.slaveName} gasps when ${eventSlave.slaveName} finally breaks the lip lock, but ${he2}'s clearly not that displeased. ${eventSlave.slaveName}, who has clearly forgotten running into the other slave entirely and now has other things on ${his} mind, begins to grind against ${him2}. When ${subSlave.slaveName} smiles back at the horny`); + if (eventSlave.physicalAge > 30) { + t.push(woman); + } else if (eventSlave.physicalAge >= 18) { + t.push(girl); + } else if (eventSlave.physicalAge >= 13) { + t.push(`teenager`); + } else { + t.push(loli); + } + t.push(`on top of ${him2}, ${eventSlave.slaveName}`); + if (canPenetrate(eventSlave)) { + if (!canDoVaginal(subSlave)) { + if (subSlave.anus === 0 || !canDoAnal(subSlave)) { + t.push(`reaches down to seat ${his} rapidly hardening dick between ${subSlave.slaveName}'s thighs for a bit of frottage.`); + actX(eventSlave, "penetrative"); // frottage is not recorded + } else if (eventSlave.dick > 4) { + t.push(`pushes ${subSlave.slaveName}'s legs apart to rotate ${his2} hips, reaches down, and`); + if (subSlave.anus > 2) { + t.push(`rubs a little saliva on ${his} cock before shoving it up ${subSlave.slaveName}'s anus.`); + } else { + t.push(`carefully pushes ${his} cock up the whimpering ${subSlave.slaveName}'s tight butt.`); + } + seX(subSlave, "anal", eventSlave, "penetrative"); + if (canImpreg(subSlave, eventSlave)) { + t.push(knockMeUp(subSlave, 5, 1, eventSlave.ID, true)); + } + } else { + t.push(`pushes ${subSlave.slaveName}'s legs apart to rotate ${his2} hips, reaches down, and`); + if (subSlave.anus > 2) { + t.push(`shoves ${his} cock up ${subSlave.slaveName}'s anus, which is loose enough that ${he} doesn't need much lubrication.`); + } else { + t.push(`pushes ${his} cock up the ${subSlave.slaveName}'s willing butt.`); + } + seX(subSlave, "anal", eventSlave, "penetrative"); + if (canImpreg(subSlave, eventSlave)) { + t.push(knockMeUp(subSlave, 5, 1, eventSlave.ID, true)); + } + } + } else { + if (subSlave.vagina === 0) { + t.push(`reaches down to seat ${his} rapidly hardening dick between ${subSlave.slaveName}'s thighs for a bit of frottage.`); + } else if (eventSlave.dick > 4) { + t.push(`reaches down`); + if (subSlave.vagina > 1) { + t.push(`to insert ${his} huge cock into ${subSlave.slaveName}'s loose wet cunt.`); + } else { + t.push(`and carefully pushes ${his} cock into the whimpering ${subSlave.slaveName}'s tight pussy.`); + } + seX(subSlave, "vaginal", eventSlave, "penetrative"); + if (canImpreg(subSlave, eventSlave)) { + t.push(knockMeUp(subSlave, 5, 0, eventSlave.ID, true)); + } + } else { + t.push(`reaches down`); + if (subSlave.vagina > 1) { + t.push(`and inserts ${his} dick into ${subSlave.slaveName}'s loose wet cunt.`); + } else { + t.push(`to put ${his} dick inside ${subSlave.slaveName}'s tight pussy.`); + } + seX(subSlave, "vaginal", eventSlave, "penetrative"); + if (canImpreg(subSlave, eventSlave)) { + t.push(knockMeUp(subSlave, 5, 0, eventSlave.ID, true)); + } + } + } + } else if (canAchieveErection(eventSlave) && !(eventSlave.chastityPenis) && eventSlave.dick >= 8) { + t.push(`reaches down to seat ${his} rapidly hardening monster of a cock between ${subSlave.slaveName}'s thighs for a bit of frottage.`); + } else if (eventSlave.dick > 0 && !(eventSlave.chastityPenis)) { + t.push(`starts to rub ${his} soft bitchclit against ${subSlave.slaveName}'s ${genitalDesc(false, true)}.`); + } else if (eventSlave.dick > 0 && (eventSlave.chastityPenis === 1)) { + t.push(`starts to rub ${his} chastity cage against ${subSlave.slaveName}'s ${genitalDesc(true, true)}.`); + } else if (eventSlave.chastityVagina) { + t.push(`starts to rub ${his} chastity belt against ${subSlave.slaveName}'s ${genitalDesc(true, true)}.`); + } else if (eventSlave.vagina === -1) { + t.push(`starts to rub ${his} soft groin against ${subSlave.slaveName}'s ${genitalDesc(false, false)}.`); + } else { + t.push(`starts to rub ${his} wet pussy against ${subSlave.slaveName}'s ${genitalDesc(false, false)}.`); + } + + function genitalDesc(doubleChastity, pussy) { + if (subSlave.chastityVagina) { + if (doubleChastity) { + return "own belt, a rather pathetic display"; + } + return "chastity belt"; + } else if (subSlave.dick > 0) { + return "dick"; + } else if (subSlave.vagina === -1) { + return "asspussy"; + } else { + if (pussy) { // Why?? + return "pussy"; + } else { + return "mons"; + } + } + } + + t.push(`Once ${he}'s gotten ${himself} positioned, ${subSlave.slaveName} reaches around ${eventSlave.slaveName}'s ${eventSlave.skin} body to grab ${his} ass. ${He2} holds ${eventSlave.slaveName} against ${him2} as ${eventSlave.slaveName} starts humping gently, and cranes ${his2} neck up to kiss ${him}.`); + + + App.Events.addParagraph(node, t); + App.Events.addResponses(node, [ + new App.Events.Result("Fuck them", fuck), + (eventSlave.anus > 0 && canDoAnal(eventSlave)) + ? new App.Events.Result("Dominate the clumsy slave's ass", dominate) + : new App.Events.Result(), + ((eventSlave.relationship === 0 || eventSlave.relationship === -1) && (subSlave.relationship === 0 || subSlave.relationship === -1)) + ? new App.Events.Result("What a cute couple", couple) + : new App.Events.Result(), + ]); + + + function fuck() { + t = []; + + t.push(`You approach the fucking slaves, kneeling next to them and running a possessive hand over ${eventSlave.slaveName}'s butt. The slave doesn't even have to look, recognizing you by your grip, and greets you cheerfully: "Hi ${title}!" ${subSlave.slaveName} giggles and cranes around to`); + if (canSee(subSlave)) { + t.push(`see.`); + } else { + t.push(`greet you.`); + } + t.push(`"Hi ${title2}," ${he2} choruses. ${eventSlave.slaveName} wiggles ${his} bottom under your hand, <span class="trust inc">trusting your judgment,</span> and ${subSlave.slaveName}`); + if (canSee(subSlave)) { + t.push(`watches`); + } else { + t.push(`waits`); + } + t.push(`to see what you'll do <span class="trust inc">with anticipation.</span>`); + if (V.PC.dick === 0) { + t.push(`You decide to make use of the position the slaves have gotten themselves into. Once naked, you get on all fours ahead of them, and then back yourself between them until you're effectively sitting on the massive cushion formed between them by their breasts. This puts your pussy against ${subSlave.slaveName}'s mouth, and your butt right in front of ${eventSlave.slaveName}'s face. ${subSlave.slaveName} starts to eat you out with dedication, and after planting a wet kiss on each of your thighs, ${eventSlave.slaveName} runs ${his} tongue from the base of your cunt and along your perineum, and then begins to kiss your asshole. The universe of warm wetness created by their mouths is so intense that your arms almost buckle.`); + seX(eventSlave, "oral", V.PC, "vaginal"); + seX(subSlave, "oral", V.PC, "anal"); + } else { + t.push(`They don't have long to wait. There's no need to be excessively creative. You get behind them and start from the top, laying your cock against ${eventSlave.slaveName}'s back, which produces an anticipatory shudder. Moving down, you`); + if (!canDoAnal(eventSlave)) { + if (V.PC.vagina !== -1) { + t.push(`trail your hot cunt across the tops of ${his} buttocks and then`); + } + t.push(`trace your dickhead around ${eventSlave.slaveName}'s chastity belt before continuing. You move your cockhead, beaded with precum, down ${his} soft perineum`); + } else if (eventSlave.anus === 0) { + if (V.PC.vagina !== -1) { + t.push(`trail your hot cunt across the tops of ${his} buttocks and then`); + } + t.push(`tease your dickhead against ${eventSlave.slaveName}'s virgin butt for a moment before continuing. You move your cockhead, beaded with precum, down ${his} soft perineum`); + } else if (eventSlave.anus < 3) { + t.push(`push your cock against ${eventSlave.slaveName}'s tight asshole, causing ${him} to stiffen and struggle momentarily before it pops inside ${him}. After giving ${his} butt a thorough fuck, you move your wet cockhead down ${his} soft perineum`); + seX(subSlave, "anal", V.PC, "penetrative"); + if (canImpreg(eventSlave, V.PC)) { + t.push(knockMeUp(eventSlave, 5, 1, -1, true)); + } + } else { + t.push(`push your cock up ${eventSlave.slaveName}'s asspussy, which accepts it with ease. After giving it a good hard reaming, you move your wet cockhead down ${his} soft perineum`); + seX(subSlave, "anal", V.PC, "penetrative"); + if (canImpreg(eventSlave, V.PC)) { + t.push(knockMeUp(eventSlave, 5, 1, -1, true)); + } + } + if (!canDoVaginal(eventSlave) || (eventSlave.vagina === 0)) { + t.push(`and into the warm space between the two slaves for a little while.`); + } else { + t.push(`and into ${his} cunt, giving it a good hard fuck.`); + seX(eventSlave, "vaginal", V.PC, "penetrative"); + if (canImpreg(eventSlave, V.PC)) { + t.push(knockMeUp(eventSlave, 5, 0, -1, true)); + } + } + t.push(`Then you see to ${subSlave.slaveName} beneath ${him},`); + if (canDoVaginal(subSlave) && subSlave.vagina > 0) { + t.push(`giving ${him2} a turn with ${his2} owner's cock inside ${his2} womanhood before`); + seX(eventSlave, "vaginal", V.PC, "penetrative"); + if (canImpreg(subSlave, V.PC)) { + t.push(knockMeUp(subSlave, 5, 0, -1, true)); + } + } + if (subSlave.anus === 0 || !canDoAnal(subSlave)) { + t.push(`using the slave's smashed-together buttocks to rub against.`); + } else { + t.push(`giving ${him2} as hard a buttfuck as you can manage with ${eventSlave.slaveName} between you.`); + seX(subSlave, "anal", V.PC, "penetrative"); + if (canImpreg(subSlave, V.PC)) { + t.push(knockMeUp(subSlave, 5, 1, -1, true)); + } + } + } + t.push(`Then you move back up, using them until you're spent and they're lying limply in a pool of sweat and tits.`); + subSlave.trust += 2; + eventSlave.trust += 2; + + return t; + } + + function dominate() { + const frag = document.createDocumentFragment(); + t = []; + const Yessir = Spoken(eventSlave, `Yes ${title}`); + const cm = V.showInches === 2 ? "inch" : "centimeter"; + + t.push(`You tell ${eventSlave.slaveName} that that was very clumsy of ${him}. The slaves start with surprise, since they didn't know you were watching, producing a delightful jiggle of smashed-together boob.`); + t.push(`"${Yessir}," ${eventSlave.slaveName} ${say}s obediently, suspecting that you aren't done. ${He}'s right. In an idle, speculative tone, you muse that with ${his} huge boobs`); + if (eventSlave.belly >= 10000) { + t.push(`and big belly`); + } + t.push(`pinning ${him} to the ground and ${subSlave.slaveName} holding ${his} butt like that, ${he} can't get up. "${Yessir}," ${he} agrees. Quite helpless, you continue. "${Yessir}," ${he} parrots. Unable to escape, you conclude. "${Yessir}, ${he} moans.`); + App.Events.addParagraph(frag, t); + t = []; + + t.push(`You tell ${subSlave.slaveName} to`); + if (canPenetrate(subSlave)) { + t.push(`sodomize ${him}. ${subSlave.slaveName} obeys hurriedly, shoving a hand between their hips to`); + if (subSlave.dick > 4) { + if (eventSlave.anus > 2) { + t.push(`shove ${his2} cock up ${eventSlave.slaveName}'s loose anus.`); + } else { + t.push(`carefully push ${his2} cock inside ${eventSlave.slaveName}'s tight butthole.`); + } + t.push(`${eventSlave.slaveName} rides ${subSlave.slaveName} hard, knowing that the looser ${his} ass is, the easier whatever you're planning will be. ${subSlave.slaveName}'s big tool gapes ${his} hole quickly.`); + } else { + if (eventSlave.anus > 2) { + t.push(`shove ${his2} dick inside ${eventSlave.slaveName}'s loose anus.`); + } else { + t.push(`push push ${his2} dick up ${eventSlave.slaveName}'s tight butthole.`); + } + t.push(`${eventSlave.slaveName} rides ${subSlave.slaveName} hard, knowing that the looser ${his} ass is, the easier whatever you're planning will be. ${subSlave.slaveName}'s penis isn't big enough to gape ${him} very much, so ${eventSlave.slaveName}, trying to be prepared, reaches around to shove an extra finger in alongside it.`); + } + t.push(`You`); + if (V.PC.dick === 0) { + t.push(`put on a strap-on,`); + } + t.push(`stop ${his} desperate humping, and shove ${his}`); + if (eventSlave.bellyPreg >= 1500) { + t.push(`gravid`); + } else if (eventSlave.belly >= 1500) { + t.push(`bloated`); + } + t.push(`torso back down against ${subSlave.slaveName}'s boobs. ${subSlave.slaveName} grabs hold of ${eventSlave.slaveName}'s buttocks and pulls them as far apart as ${he2} possibly can, removing all protection from ${eventSlave.slaveName}'s already-full asshole. ${eventSlave.slaveName} takes a deep breath and lets it out slowly as ${he} feels`); + if (V.PC.dick === 0) { + t.push(`the head of the strap-on`); + } else { + t.push(`your cockhead`); + } + t.push(`press insistently against the outside of ${his} anus and then, ${cm} by agonizing ${cm}, seat itself up ${his} butt alongside ${subSlave.slaveName}'s cock. ${He} shudders when you begin to thrust. ${subSlave.slaveName}, overstimulated, climaxes first; as the edge comes off ${his2} hard-on, ${his2} cock slides out of ${eventSlave.slaveName}'s ass, letting you be utterly merciless to the loosened, cum-soaked hole.`); + seX(eventSlave, "anal", subSlave, "penetrative"); + seX(eventSlave, "anal", V.PC, "penetrative"); + if (canImpreg(eventSlave, V.PC)) { + t.push(knockMeUp(eventSlave, 5, 1, -1, true)); + } + if (canImpreg(eventSlave, subSlave)) { + t.push(knockMeUp(eventSlave, 5, 1, subSlave.ID, true)); + } + } else { + t.push(`fingerfuck ${him}. ${subSlave.slaveName} obeys hurriedly, reaching inward and`); + if (subSlave.anus > 2) { + t.push(`pushing two fingers from each hand inside ${eventSlave.slaveName}'s loose anus.`); + } else { + t.push(`carefully pushing a finger from each hand up ${eventSlave.slaveName}'s tight butthole.`); + } + t.push(`${eventSlave.slaveName} begs ${subSlave.slaveName} to fuck ${his} butt, knowing that the looser ${his} ass is, the easier whatever you're planning will be. ${subSlave.slaveName} does ${his2} best, using ${his2} fingers to stretch ${eventSlave.slaveName}'s sphincter as much as ${he2} can without hurting ${him}.`); + seX(eventSlave, "anal", subSlave, "penetrative"); + seX(eventSlave, "anal", V.PC, "penetrative"); + t.push(`Once you're satisfied that ${he} can take what's coming, you`); + if (V.PC.dick === 0) { + t.push(`put on a strap-on,`); + } + t.push(`steady ${his} hips, and shove ${his}`); + if (eventSlave.bellyPreg >= 1500) { + t.push(`gravid`); + } else if (eventSlave.belly >= 1500) { + t.push(`bloated`); + } + t.push(`torso back down against ${subSlave.slaveName}'s boobs. ${subSlave.slaveName} pulls to either side, gaping ${eventSlave.slaveName}'s hole for you. ${eventSlave.slaveName} takes a deep breath and lets it out slowly as ${he} feels`); + if (V.PC.dick === 0) { + t.push(`the head of the strap-on`); + } else { + t.push(`your cockhead`); + } + t.push(`slide between ${subSlave.slaveName}'s fingers, ${cm} by agonizing ${cm}, and seat itself up ${his} butt. ${He} shudders when you begin to thrust. ${subSlave.slaveName} keeps ${his2} fingers where they are, doing ${his2} best to use them to give you a handjob inside ${eventSlave.slaveName}'s ass.`); + if (canImpreg(eventSlave, V.PC)) { + t.push(knockMeUp(eventSlave, 5, 1, -1, true)); + } + } + t.push(`When you're done, you pull out, leaving ${eventSlave.slaveName} to collapse, whimpering and shaking, onto ${subSlave.slaveName}'s boobs. ${subSlave.slaveName}`); + if (canSee(subSlave)) { + t.push(`winks`); + } else { + t.push(`smiles`); + } + t.push(`at you over ${his2} shoulder. ${Spoken(subSlave, `"That was fun ${title2},"`)} ${he2} ${say2}s brightly. "<span class="devotion inc">${Spoken(subSlave, `Can we do that again`)}</span> ${Spoken(subSlave, `soon, please?"`)}`); + App.Events.addParagraph(frag, t); + t = []; + t.push(`"Ohh fffuck," ${eventSlave.slaveName} moans into ${his} boobs, to no one in particular.`); + subSlave.devotion += 4; + if (eventSlave.anus < 3) { + t.push(Spoken(eventSlave, `"Please nooo, <span class="lime">my poor hole will never be the same againnn..</span>"`)); + eventSlave.anus += 1; + } + + App.Events.addParagraph(frag, t); + t = []; + return frag; + } + + function couple() { + const frag = document.createDocumentFragment(); + t = []; + + t.push(`You tell them they make a cute couple. The slaves start with surprise, since they didn't know you were watching, producing a delightful jiggle of smashed-together boob. "Thank you, ${properMaster()}," they chorus correctly, before turning back to look at each other. They take your comment quite seriously, both of them seemingly forgetting that they're in the middle of having sex to consider it. ${eventSlave.slaveName} speaks first.`); + t.push(Spoken(eventSlave, `"I guess I never really thought about you that way,"`)); + t.push(`${he} says to the huge-boobed`); + if (subSlave.physicalAge > 30) { + t.push(woman2); + } else if (subSlave.physicalAge > 18) { + t.push(girl2); + } else if (subSlave.physicalAge > 12) { + t.push("teen"); + } else { + t.push(loli2); + } + t.push(`trapped beneath ${him}.`); + App.Events.addParagraph(frag, t); + t = []; + t.push(`${subSlave.slaveName}, who is still holding ${eventSlave.slaveName}'s buttocks, gives them a squeeze. ${Spoken(subSlave, `"Well, you silly ${girl}, what do you think about it now?"`)}`); + App.Events.addParagraph(frag, t); + t = []; + t.push(`${eventSlave.slaveName} stiffens with sudden embarrassment. "Uh, um," ${he} stammers, before saying in a rush, ${Spoken(eventSlave, `"${subSlave.slaveName}, will you go out with me?"`)}`); + App.Events.addParagraph(frag, t); + t = []; + t.push(`${subSlave.slaveName} laughs, a pure, unclouded sound, and gives ${eventSlave.slaveName} a cute little peck on the tip of ${his} nose. ${Spoken(subSlave, `"<span class="relationship">Of course I will,</span>"`)} ${he2} purrs, and runs ${his2} hands up ${eventSlave.slaveName}'s back to hug ${him} tightly.`); + App.Events.addParagraph(frag, t); + t = []; + + t.push(`The encounter becomes far more heartfelt than it was before you spoke up. ${eventSlave.slaveName}, who seems affected, says self-consciously,`); + t.push(Spoken(eventSlave, `"Um, does this mean I get a ${girl2}friend every time I'm clumsy?"`)); + t.push(`${subSlave.slaveName} giggles and shushes ${him}. They begin to kiss earnestly while they fuck, and you leave them to it. Each of them comes to you later to <span class="devotion inc">thank you</span> for permitting them to be together.`); + subSlave.devotion += 2; + eventSlave.devotion += 2; + subSlave.relationship = 3; + subSlave.relationshipTarget = eventSlave.ID; + eventSlave.relationship = 3; + eventSlave.relationshipTarget = subSlave.ID; + App.Events.addParagraph(frag, t); + t = []; + return frag; + } + } +}; diff --git a/src/events/RETS/reSimpleAssault.js b/src/events/RETS/reSimpleAssault.js index f8cc32856cc839cd4d1654e9b7ab71e5b88e1d64..9df1d133a614b69ce863f00b908a96e08120a5d2 100644 --- a/src/events/RETS/reSimpleAssault.js +++ b/src/events/RETS/reSimpleAssault.js @@ -69,7 +69,7 @@ App.Events.RETSSimpleAssault = class RETSSimpleAssault extends App.Events.BaseEv } else { t.push(`nice little butt flexes cutely`); } - t.push(`as ${he} thrusts. You can't see much of the slave ${vaginal ? `lying on ${his2} back` : "face-down"} underneath ${domSlave.slaveName}, but you recognize ${him2} as `); + t.push(`as ${he} thrusts. You can't see much of the slave ${vaginal ? `lying on ${his2} back` : "face-down"} underneath ${domSlave.slaveName}, but you recognize ${him2} as`); t.push(contextualIntro(domSlave, subSlave, "DOM")); t.push(`by ${his2} sobbing. ${He2}'s struggling a little, but ${domSlave.slaveName} has ${him2} pinned to the floor by ${his2} ${hasBothArms(subSlave) ? "wrists" : "wrist"}, and ${domSlave.slaveName} is quickly raping the resistance out of the ${SlaveTitle(subSlave)}.`); App.Events.addParagraph(node, t); diff --git a/src/events/RETS/reTasteTest.js b/src/events/RETS/reTasteTest.js new file mode 100644 index 0000000000000000000000000000000000000000..6ce7b5389939893de974c9d5d2327efed79f2534 --- /dev/null +++ b/src/events/RETS/reTasteTest.js @@ -0,0 +1,450 @@ +App.Events.RETSTasteTest = class RETSTasteTest extends App.Events.BaseEvent { + eventPrerequisites() { + return [ + ]; + } + + actorPrerequisites() { + return [ + [ // event slave /domslave + s => s.fetish !== "mindbroken", + hasAnyArms, + canMove, + canTalk, + canHear, + canTaste, + s => s.devotion > 20, + s => s.energy > 80, + s => s.chastityVagina === 0 || s.chastityPenis === 0, + ], + [ // and subslave + s => s.fetish !== "mindbroken", + canWalk, + canTalk, + canHear, + canTaste, + s => s.devotion >= -20, + assignmentVisible, + s => s.chastityVagina === 0 || s.chastityPenis === 0, + ] + ]; + } + + execute(node) { + /** @type {Array<App.Entity.SlaveState>} */ + let [eventSlave, subSlave] = this.actors.map(a => getSlave(a)); + const { + He, he, his, him, His + } = getPronouns(eventSlave); + const {say: say} = getEnunciation(eventSlave); + const arms = hasBothArms(eventSlave) ? "arms" : "arm"; + const { + he2, his2, him2, He2 + } = getPronouns(subSlave).appendSuffix("2"); + const {say: say2} = getEnunciation(subSlave); + const arms2 = hasBothArms(subSlave) ? "arms" : "arm"; + + V.nextLink = "Next Week"; + + App.Events.drawEventArt(node, [eventSlave, subSlave], "no clothing"); + + + let t = []; + + t.push(`You look into the part of the kitchens used for slave feeding one morning during a quiet time, finding the area deserted except for`); + t.push(App.UI.DOM.combineNodes(contextualIntro(V.PC, eventSlave, "DOM"), `. ${He}`)); + if (canSee(eventSlave)) { + t.push(`sees you enter`); + } else { + t.push(`hears you enter`); + } + t.push(`and`); + if (V.cockFeeder === 1) { + t.push(`stops sucking ${his} feeder phallus,`); + } else { + t.push(`puts ${his} cup of liquid slave food down,`); + } + t.push(`but you make a dismissive "go back to what you were doing"`); + if (canSee(eventSlave)) { + t.push(`gesture,`); + } else { + t.push(`sound,`); + } + t.push(`and ${he} obediently`); + if (V.cockFeeder === 1) { + t.push(`resumes sucking down`); + } else { + t.push(`goes back to drinking`); + } + t.push(`${his} breakfast. You pull out a tablet and start getting some work done, enjoying the low, human sounds of your chattel going about their business in the rooms all around you.`); + t.push(App.UI.DOM.slaveDescriptionDialog(subSlave)); + t.push(`pads in, looking not quite awake yet. Not noticing you in ${his2} stupor, ${he2}`); + if (V.cockFeeder === 1) { + t.push(`chooses the phallus next to ${contextualIntro(subSlave, eventSlave)}'s and starts to suck too.`); + } else { + t.push(`draws ${his2} ration and heads over towards ${contextualIntro(subSlave, eventSlave)} to drink it next to ${him}.`); + } + t.push(`${He2}'s clearly looking for some companionship this morning, but ${his2} gears visibly turn for a while before ${his2} sleepy head can come up with something to say. Both the slaves are allowed some variety of flavor in their liquid slave food, so ${he2} finally settles on that.`); + t.push(`${Spoken(subSlave, `"What flavor did you choose?"`)} ${he2} asks ${eventSlave.slaveName}.`); + App.Events.addParagraph(node, t); + t = []; + + + if (V.cockFeeder === 1) { + t.push(`${eventSlave.slaveName} pulls ${his} mouth off ${his} feeder with a luscious pop.`); + } else { + t.push(`${eventSlave.slaveName} lowers ${his} cup for a moment.`); + } + if (eventSlave.preg > eventSlave.pregData.normalBirth/2) { + t.push(`${Spoken(subSlave, `"The sour pickle flavor,"`)} ${he} responds, patting ${his} rounded middle. ${Spoken(eventSlave, `"I just can't get enough of it."`)}`); + } else { + t.push(`${Spoken(subSlave, `"The tart fruity kind,"`)} ${he} responds. ${Spoken(eventSlave, `"It's refreshing first thing in the morning."`)}`); + } + App.Events.addParagraph(node, t); + t = []; + + t.push(`"Oh," ${say2}s ${subSlave.slaveName}. ${Spoken(subSlave, `"Um, can I try some?"`)}`); + App.Events.addParagraph(node, t); + t = []; + + t.push(`${eventSlave.slaveName} smiles and murmurs, "Mm hm." There is a distinct`); + if (canSee(eventSlave)) { + t.push(`glint in ${his} eye.`); + } else { + t.push(`look on ${his} face.`); + } + t.push(`${He}'s got a healthy libido, to put it mildly. Like all slaves, ${subSlave.slaveName} sleeps nude and hasn't gotten dressed yet, and ${eventSlave.slaveName} has`); + if (canSee(eventSlave)) { + t.push(`obviously noticed ${his2}`); + if (subSlave.dick > 4) { + t.push(`enormous cock`); + } else if (subSlave.labia > 1) { + t.push(`remarkable pussylips`); + } else if (subSlave.boobs > 5000) { + t.push(`enormous bare udders`); + } else if (subSlave.lactation > 1) { + t.push(`milky nipples`); + } else if (subSlave.face > 40) { + t.push(`pretty face, nudity,`); + } else if (subSlave.belly >= 5000) { + if (subSlave.bellyPreg >= 5000) { + t.push(`pregnancy, nudity,`); + } else if (subSlave.bellyImplant >= 5000) { + t.push(`big belly, nudity`); + } else { + t.push(`${subSlave.inflationType}-filled belly, nudity`); + } + } else { + t.push(`nudity`); + } + t.push(`and`); + } else { + t.push(`picked up on the sound`); + if (subSlave.dick > 4) { + t.push(`of ${his2} enormous cock slapping against ${his2} thighs`); + } else if (subSlave.boobs > 5000) { + t.push(`of ${his2} enormous bare udders flopping around as ${he2} moves`); + } else if (subSlave.belly >= 5000) { + if (subSlave.bellyPreg >= 5000) { + t.push(`of ${his2} pregnancy pestering ${him2}`); + } else if (subSlave.bellyImplant >= 5000) { + t.push(`of ${his2} big belly bumping things`); + } else { + t.push(`of ${his2} ${subSlave.inflationType}-filled belly gurgling`); + } + } else if (subSlave.lactation > 1) { + t.push(`of the milk dripping from ${his2} nipples`); + } else { + t.push(`of ${his2} bare skin against the cool air`); + } + t.push(`in addition to ${his2}`); + } + t.push(`sleepy willingness to be friendly. ${eventSlave.slaveName}`); + if (V.cockFeeder === 1) { + t.push(`turns to ${his} phallus and sucks it powerfully, drawing`); + } else { + t.push(`raises ${his} cup again and draws`); + } + t.push(`liquid food into ${his} mouth. ${He} turns to ${subSlave.slaveName}.`); + t.push(`"Go ahead," ${he} ${say}s carefully, enunciating past ${his} mouthful of fluid, and then purses ${his} lips. ${subSlave.slaveName} is taken aback for a moment, but decides ${he2}'s game and steps in, planting ${his2} lips on ${eventSlave.slaveName}'s.`); + if ((eventSlave.boobs > 3000) && (subSlave.boobs > 3000)) { + t.push(`(Their tits are so huge that ${he2} has to fight to get close enough to kiss.)`); + } else if (eventSlave.boobs > 5000) { + t.push(`(${eventSlave.slaveName}'s tits are so huge that ${he2} has to press hard against them to get close enough to kiss.)`); + } else if (subSlave.boobs > 5000) { + t.push(`(subSlave.slaveName's tits are so huge that ${he2} has to press them hard against ${eventSlave.slaveName} to get close enough to kiss.)`); + } else if (eventSlave.belly >= 5000 && subSlave.belly >= 5000) { + t.push(`(Their bellies are so swollen`); + if ((eventSlave.preg > eventSlave.pregData.normalBirth / 8) && (subSlave.preg > subSlave.pregData.normalBirth / 8)) { + t.push(`with life`); + } + t.push(`that ${he2} has to fight to get close enough to kiss.)`); + } else if (eventSlave.belly >= 300000) { + t.push(`(${eventSlave.slaveName}'s`); + if (eventSlave.preg > eventSlave.pregData.normalBirth / 8) { + t.push(`pregnancy`); + } else { + t.push(`belly`); + } + t.push(`is so massive that ${he2} has to practically climb atop it to get close enough to kiss.)`); + } else if (subSlave.belly >= 300000) { + t.push(`(${subSlave.slaveName}'s`); + if (subSlave.preg > subSlave.pregData.normalBirth / 8) { + t.push(`pregnancy`); + } else { + t.push(`belly`); + } + t.push(`is so massive that ${he2} has to practically lift ${eventSlave.slaveName} with it to get close enough to kiss.)`); + } else if (eventSlave.belly >= 10000) { + t.push(`(${eventSlave.slaveName}'s`); + if (eventSlave.preg > eventSlave.pregData.normalBirth / 8) { + t.push(`pregnancy`); + } else { + t.push(`belly`); + } + t.push(`is so big that ${he2} has to press hard against it to get close enough to kiss.)`); + } else if (subSlave.belly >= 10000) { + t.push(`(${subSlave.slaveName}'s`); + if (subSlave.preg > subSlave.pregData.normalBirth / 8) { + t.push(`pregnancy`); + } else { + t.push(`belly`); + } + t.push(`is so big that ${he2} has to press it firmly against ${eventSlave.slaveName} to get close enough to kiss.)`); + } + t.push(`${He2} stiffens with the lewd feeling of the warm fluid pressing into ${his2} mouth. After a moment ${he2} tries to back off and concentrate on the food, but ${eventSlave.slaveName} is having none of that, and uses ${his} ${arms} to hug ${subSlave.slaveName} close, making out with ${his} catch.`); + if (subSlave.energy > 60) { + t.push(`${subSlave.slaveName}'s own powerful sex drive is waking up, and ${he2} clearly doesn't mind.`); + } else { + t.push(`${subSlave.slaveName} isn't sexually needy enough or awake enough to be as horny as ${eventSlave.slaveName}, but ${he2} goes along willingly enough.`); + } + + + App.Events.addParagraph(node, t); + App.Events.addResponses(node, [ + new App.Events.Result("This belongs on a live feed", feed), + new App.Events.Result("Get involved in the taste testing", involved), + ((canDoAnal(subSlave) && subSlave.anus !== 0) || (canDoVaginal(subSlave) && subSlave.vagina !== 0) + ? new App.Events.Result("Look, a bare butt", butt) + : new App.Events.Result() + ), + ]); + + + function feed() { + t = []; + + t.push(`You let them continue kissing, but use your tablet to slave one of the plaza's bigger screens to a feed of their nude makeout session. They have no way of knowing, and progress innocently from deep kissing to open mutual masturbation. This is a common sex act among your slaves: it's quick and clean and lets them achieve release before getting back to their duties. When they've both climaxed, you manipulate the situation again, setting a wallscreen in the kitchen to display a feed of the crowd in the plaza enjoying the feed of the situation in the kitchen.`); + if (eventSlave.fetish === "humiliation" && eventSlave.fetishKnown === 1 && subSlave.fetish === "humiliation" && subSlave.fetishKnown === 1) { + t.push(`They both blush crimson at the realization, but the pair of humiliation fetishists <span class="devotion inc">live for this</span> and wave at the camera, enjoying the afterglow.`); + eventSlave.devotion += 2; + subSlave.devotion += 2; + } else if (subSlave.fetish === "humiliation" && subSlave.fetishKnown === 1) { + t.push(`${subSlave.slaveName}, a confirmed humiliation slut, <span class="devotion inc">lives for this</span> and waves at the camera, enjoying the afterglow.`); + subSlave.devotion += 2; + } else if (eventSlave.fetish === "humiliation" && eventSlave.fetishKnown === 1) { + t.push(`${eventSlave.slaveName}, a confirmed humiliation slut, <span class="devotion inc">lives for this</span> and waves at the camera, enjoying the afterglow.`); + eventSlave.devotion += 2; + } else if (canSee(eventSlave) || canSee(subSlave)) { + t.push(`They blush crimson and both turn back towards each other, desperate to look anywhere but at the sight of the crowd that just watched them jerk each other off.`); + } else { + t.push(`They blush crimson and both turn back towards each other, desperate to look anywhere but at the crowd, but unable to tell where the camera actually is.`); + } + t.push(`Such honesty is very tough to fake, and the crowd <span class="reputation inc">knows they just saw real pleasure.</span>`); + repX(500, "event", eventSlave); + seX(subSlave, "oral", eventSlave, "oral"); + return t; + } + + function involved() { + const frag = document.createDocumentFragment(); + t = []; + + t.push(`You move in. ${eventSlave.slaveName}`); + if (canSee(eventSlave)) { + t.push(`catches sight of`); + } else { + t.push(`notices`); + } + t.push(`your approach, and you see the corners of ${his} mouth quirk upward. ${He} breaks the lip lock and ${say}s breathily,`); + t.push(Spoken(eventSlave, `"Hey ${subSlave.slaveName}, I think there's something else you should taste test."`)); + + App.Events.addParagraph(frag, t); + t = []; + t.push(`"Whaa-" the slave starts to ask warily before ${eventSlave.slaveName} pushes ${him2} to ${his2} knees, spinning ${him2} around as ${he} does so. This brings ${subSlave.slaveName} face to face with your`); + if (V.PC.dick !== 0) { + t.push(`stiff prick, a bead of precum already present at its tip.`); + } else { + t.push(`wet cunt, a bead of pussyjuice already trailing down your inner thigh.`); + } + t.push(`${Spoken(subSlave, `"Oh, um, hi ${getWrittenTitle(subSlave)},"`)} ${he2} stammers, and then starts to`); + if (V.PC.dick !== 0 && V.PC.vagina !== -1) { + t.push(`suck your dick and eat your pussy.`); + } else if (V.PC.dick !== 0) { + t.push(`suck your dick.`); + } else { + t.push(`eat your pussy.`); + } + t.push(`This leaves poor ${eventSlave.slaveName} without anyone to make out with, so you step in there, grabbing ${him} and pulling the giggling slave in to kiss ${him} deeply. ${His} mouth is indeed a bit`); + let aftertaste = ""; + if (eventSlave.dietCum === 2) { + aftertaste = ", once you get past the overwhelming taste of cum"; + } else if (eventSlave.dietCum === 1 && eventSlave.dietMilk === 0) { + aftertaste = ", though not without a hint of cum"; + } else if (eventSlave.dietCum === 1 && eventSlave.dietMilk === 1) { + aftertaste = ", though not without hints of cum and milk"; + } else if (eventSlave.dietMilk === 1 && eventSlave.dietCum === 0) { + aftertaste = ", with a hint of breast milk too"; + } else if (eventSlave.dietMilk === 2) { + aftertaste = ", but mostly tastes like mother's milk"; + } + if (eventSlave.preg > eventSlave.pregData.normalBirth / 2) { + t.push(`sour${aftertaste}.`); + } else { + t.push(`tart${aftertaste}.`); + } + t.push(`${He} moans into your mouth as ${he} feels ${his} nipples press against`); + if (V.PC.boobs >= 300) { + t.push(`yours,`); + } else { + t.push(`your hard chest,`); + } + t.push(`and then again as your tongue invades ${him}. When you`); + if (V.PC.dick !== 0) { + t.push(`fill ${subSlave.slaveName}'s mouth with cum,`); + seX(subSlave, "oral", V.PC, "penetrative"); + } else { + t.push(`climax wetly against ${subSlave.slaveName}'s mouth,`); + seX(subSlave, "oral", V.PC, "vaginal"); + } + t.push(`you pull away slightly, letting the slave on ${his2} knees below you gasp ${Spoken(subSlave, `"You taste great, ${getWrittenTitle(subSlave)}!"`)} before you spin ${him2} around in turn so ${he2} can give ${eventSlave.slaveName} ${his} own allotment of oral sex. You leave them to it. They <span class="trust inc">trust you a bit more</span> after such a lighthearted little escapade.`); + if (eventSlave.dick > 0 && eventSlave.chastityPenis === 0) { + seX(subSlave, "oral", eventSlave, "penetrative"); + } else if (canDoVaginal(eventSlave)) { + seX(subSlave, "oral", eventSlave, "vaginal"); + } else { + actX(subSlave, "oral"); + } + eventSlave.trust += 2; + subSlave.trust += 2; + + App.Events.addParagraph(frag, t); + return frag; + } + + function butt() { + const sexTarget = (canDoVaginal(subSlave) && subSlave.vagina !== 0) ? "vaginal" : "anal"; + t = []; + + t.push(`You move in, looking intently at ${subSlave.slaveName}'s bare, vulnerable butt. ${eventSlave.slaveName}`); + if (canSee(eventSlave)) { + t.push(`catches sight of your approach, and then follows the line of your gaze,`); + } else { + t.push(`notices your approach,`); + } + t.push(`the realization of what your intent likely quickly dawns on ${him}. You see the corners of ${his} mouth quirk upward with horny maliciousness. ${He} leans back against the edge of the kitchen counter, pulling ${subSlave.slaveName} with ${him}, and then reaches down and`); + if (subSlave.butt > 6) { + t.push(`grabs handfuls of ${subSlave.slaveName}'s massive ass,`); + } else if (subSlave.butt > 3) { + t.push(`seizes ${subSlave.slaveName}'s big buttocks,`); + } else { + t.push(`grabs ${subSlave.slaveName}'s cute butt,`); + } + t.push(`pulling ${him2} upward. ${subSlave.slaveName} thinks ${he2} gets the idea, and hops up, wrapping ${his2} legs around ${eventSlave.slaveName}'s`); + if (eventSlave.belly >= 5000) { + if (eventSlave.bellyPreg >= 2000) { + t.push(`gravid`); + } else { + t.push(`rounded`); + } + t.push(`middle`); + } else { + t.push(`waist`); + } + t.push(`and ${his2} ${arms2} around ${eventSlave.slaveName}'s`); + if (subSlave.belly >= 5000) { + t.push(`shoulder${hasBothArms(subSlave) ? "s" : ""}, pushing their`); + if (eventSlave.bellyPreg >= 2000) { + t.push(`pregnancies`); + } else { + t.push(`bellies`); + } + t.push(`together`); + } else { + t.push(`shoulder${hasBothArms(subSlave) ? "s" : ""}.`); + } + t.push(`${eventSlave.slaveName}`); + if (subSlave.butt > 6) { + t.push(`hauls ${subSlave.slaveName}'s huge buttocks apart to reveal the`); + } else if (subSlave.butt > 3) { + t.push(`pulls ${subSlave.slaveName}'s healthy asscheeks apart to reveal the`); + } else { + t.push(`spreads ${subSlave.slaveName}'s buttocks to show off the`); + } + if (subSlave.anus > 2) { + t.push(`lewd slit`); + } else if (subSlave.anus > 1) { + t.push(`inviting anus`); + } else { + t.push(`pretty rosebud`); + } + t.push(`between them. ${subSlave.slaveName} has only a brief moment to wonder why ${his2} butt is being spread this way before ${he2} feels`); + if (V.PC.dick !== 0) { + t.push(`your cockhead`); + } else if (subSlave.anus > 2) { + t.push(`your hand, formed into a beak shape`); + } else if (subSlave.anus > 1) { + t.push(`three fingers`); + } else { + t.push(`two fingers`); + } + if (sexTarget === "vaginal") { + t.push(`trace ${his2} pussy lips before slipping inside.`); + } else { + t.push(`press against and then inside ${his2} butthole.`); + } + t.push(`${He2} tries to turn away from ${eventSlave.slaveName} and greet you properly, but ${eventSlave.slaveName} won't let ${him2}, so ${he2} tries to mumble a greeting into ${eventSlave.slaveName}'s mouth and then settles for a spastic wave of ${hasBothArms(subSlave) ? "one hand" : "a foot"}. This is an alluringly awkward process made desperate by the distracting feeling of you`); + if (sexTarget === "vaginal") { + t.push(`fucking ${him2}.`); + } else { + t.push(`fucking ${his2} ass.`); + } + t.push(`You could have done something more inventive with the situation, but the feeling of`); + if (V.PC.dick !== 0) { + t.push(`an anal sphincter around the base of your dick`); + } else { + t.push(`finger fucking a compliant slave's submissive asspussy while you look after yourself with your other hand`); + } + t.push(`never gets old. Why complicate things? An hour later you leave your fucktoys stumbling tiredly towards the shower, <span class="devotion inc">sexually satiated</span> and ${(sexTarget === "anal") ? "anally" : "thoroughly"} dominated.`); + eventSlave.devotion += 2; + subSlave.devotion += 2; + if (sexTarget === "vaginal") { + if (canImpreg(subSlave, V.PC)) { + t.push(knockMeUp(subSlave, 5, 0, -1, true)); + } + } else { + if (canImpreg(subSlave, V.PC)) { + t.push(knockMeUp(subSlave, 5, 1, -1, true)); + } + } + seX(subSlave, sexTarget, V.PC, "penetrative", 2); + seX(eventSlave, "oral", subSlave, "oral", 2); + if (canDoVaginal(eventSlave) && eventSlave.vagina !== 0) { + seX(eventSlave, "vaginal", V.PC, "penetrative"); + if (canImpreg(eventSlave, V.PC)) { + t.push(knockMeUp(eventSlave, 5, 0, -1, true)); + } + seX(eventSlave, "oral", subSlave, "oral"); + } + if (canDoAnal(subSlave) && subSlave.anus !== 0) { + seX(eventSlave, "anal", V.PC, "penetrative"); + if (canImpreg(eventSlave, V.PC)) { + t.push(knockMeUp(eventSlave, 5, 0, -1, true)); + } + seX(eventSlave, "oral", subSlave, "oral"); + } + + return t; + } + } +}; diff --git a/src/events/nonRandomEvent.js b/src/events/nonRandomEvent.js index 1d6df25f9b715a89952601ec1a16fffa3b8e131a..90ec2462c7615f871bce6540d115509867224930 100644 --- a/src/events/nonRandomEvent.js +++ b/src/events/nonRandomEvent.js @@ -5,247 +5,245 @@ globalThis.nonRandomEvent = function() { if (V.plot) { if (effectiveWeek === 4 && V.arcologies[0].name.indexOf("Arcology ") !== -1) { V.Event = "arcology naming"; - Engine.play("Generic Plot Events"); + setTimeout(() => Engine.play("Generic Plot Events"), Engine.minDomActionDelay); } else if (effectiveWeek >= 5 && V.FCTV.receiver === -1) { - Engine.play("SE FCTV Install"); + setTimeout(() => Engine.play("SE FCTV Install"), Engine.minDomActionDelay); } else if (V.projectN.status === 1) { V.projectN.status = 2; V.projectN.phase1 = effectiveWeek; - Engine.play("SE projectNInitialized"); + setTimeout(() => Engine.play("SE projectNInitialized"), Engine.minDomActionDelay); } else if ((V.bodyPuristRiot === 1) && (V.puristRiotDone === 0) && (effectiveWeek >= V.projectN.phase1 + 1) && (V.projectN.status !== 9)) { - Engine.play("SE bodypuristprotest"); + setTimeout(() => Engine.play("SE bodypuristprotest"), Engine.minDomActionDelay); V.puristRiotDone = 1; } else if ((V.projectN.status === 2) && (V.projectN.public === 0) && (effectiveWeek >= V.projectN.phase1 + 3)) { - Engine.play("SE projectNmomoney"); + setTimeout(() => Engine.play("SE projectNmomoney"), Engine.minDomActionDelay); V.projectN.phase2 = effectiveWeek; } else if ((V.projectN.status === 2) && (V.projectN.public === 1) && (effectiveWeek >= V.projectN.phase1 + 5)) { - Engine.play("SE projectNmomoney"); + setTimeout(() => Engine.play("SE projectNmomoney"), Engine.minDomActionDelay); V.projectN.phase2 = effectiveWeek; } else if ((V.projectN.status === 3) && (V.projectN.wellFunded === 1) && (effectiveWeek >= V.projectN.phase2 + 4)) { - Engine.play("SE projectNbubbles"); + setTimeout(() => Engine.play("SE projectNbubbles"), Engine.minDomActionDelay); V.projectN.status = 4; V.projectN.phase3 = effectiveWeek; } else if ((V.projectN.status === 3) && (V.projectN.wellFunded !== 1) && (effectiveWeek >= V.projectN.phase2 + 6)) { - Engine.play("SE projectNbubbles"); + setTimeout(() => Engine.play("SE projectNbubbles"), Engine.minDomActionDelay); V.projectN.status = 4; V.projectN.phase3 = effectiveWeek; } else if ((V.projectN.status === 4) && (V.projectN.poorlyFunded !== 1) && (effectiveWeek >= V.projectN.phase3 + 4)) { - Engine.play("SE projectNsaboteur"); + setTimeout(() => Engine.play("SE projectNsaboteur"), Engine.minDomActionDelay); V.projectN.phase4 = effectiveWeek; } else if ((V.projectN.status === 4) && (V.projectN.public === 1) && (V.projectN.poorlyFunded === 1) && (effectiveWeek >= V.projectN.phase3 + 6)) { - Engine.play("SE projectNsaboteur"); + setTimeout(() => Engine.play("SE projectNsaboteur"), Engine.minDomActionDelay); V.projectN.phase4 = effectiveWeek; } else if ((V.projectN.status === 4) && (V.projectN.public === 0) && (V.projectN.poorlyFunded === 1) && (effectiveWeek >= V.projectN.phase3 + 6)) { - Engine.play("SE projectNblowingthelid"); + setTimeout(() => Engine.play("SE projectNblowingthelid"), Engine.minDomActionDelay); V.projectN.phase4 = effectiveWeek; } else if ((V.puristsFurious === 1) && (V.puristRiotDone === 0) && (effectiveWeek >= V.projectN.phase4 + 1 && (V.projectN.status !== 9))) { - Engine.play("SE bodypuristriot"); + setTimeout(() => Engine.play("SE bodypuristriot"), Engine.minDomActionDelay); V.puristRiotDone = 1; } else if ((V.projectN.status === 5) && (effectiveWeek >= V.projectN.phase4 + 4)) { - Engine.play("SE projectNcomplete"); + setTimeout(() => Engine.play("SE projectNcomplete"), Engine.minDomActionDelay); } else if ((V.projectN.status >= 6) && (V.projectN.status !== 9) && V.projectN.decisionMade !== 1 && (effectiveWeek >= V.projectN.phase4 + 5)) { - Engine.play("SE projectNtechrelease"); + setTimeout(() => Engine.play("SE projectNtechrelease"), Engine.minDomActionDelay); } else if ((V.projectN.status === 7) && (V.growingNewCat === 0)) { - Engine.play("SE vatcatgirl"); + setTimeout(() => Engine.play("SE vatcatgirl"), Engine.minDomActionDelay); } else if (V.projectN.status === 8 && V.growingNewCat === 0) { - Engine.play("SE vatcatboy"); + setTimeout(() => Engine.play("SE vatcatboy"), Engine.minDomActionDelay); } else if (effectiveWeek === 6) { V.Event = "strip club closing"; - Engine.play("Generic Plot Events"); + setTimeout(() => Engine.play("Generic Plot Events"), Engine.minDomActionDelay); } else if (effectiveWeek === 8) { V.Event = "strip club aftermath"; - Engine.play("Generic Plot Events"); + setTimeout(() => Engine.play("Generic Plot Events"), Engine.minDomActionDelay); } else if (effectiveWeek === 11) { V.Event = "assistant"; - Engine.play("Assistant Events"); + setTimeout(() => Engine.play("Assistant Events"), Engine.minDomActionDelay); } else if ((effectiveWeek === 12) && V.raped === -1 && V.arcologyUpgrade.drones !== 1 && V.BodyguardID === 0 && V.PC.career !== "arcology owner") { - Engine.play("P raped"); + setTimeout(() => Engine.play("P raped"), Engine.minDomActionDelay); } else if (effectiveWeek === 14 && V.badC !== 1) { const valid = V.slaves.find(function(s) { return s.curatives > 1 || s.inflationType === "curative"; }); + V.badC = 1; if (valid) { - V.badC = 1; V.Event = "bad curatives"; - Engine.play("Generic Plot Events"); + setTimeout(() => Engine.play("Generic Plot Events"), Engine.minDomActionDelay); } else { - V.badC = 1; - Engine.play("Nonrandom Event"); + setTimeout(() => Engine.play("Nonrandom Event"), Engine.minDomActionDelay); } } else if ((effectiveWeek >= 15) && (V.arcologies[0].FSNeoImperialistLaw1 === 1) && V.assholeKnight !== 1) { V.assholeKnight = 1; V.imperialEventWeek = effectiveWeek; - Engine.play("SE assholeknight"); + setTimeout(() => Engine.play("SE assholeknight"), Engine.minDomActionDelay); } else if (effectiveWeek === 17) { V.Event = "shoot invitation"; - Engine.play("Generic Plot Events"); + setTimeout(() => Engine.play("Generic Plot Events"), Engine.minDomActionDelay); } else if (effectiveWeek === 20) { V.Event = "slave food"; - Engine.play("Generic Plot Events"); + setTimeout(() => Engine.play("Generic Plot Events"), Engine.minDomActionDelay); } else if (effectiveWeek === 24) { V.Event = "militia"; - Engine.play("Generic Plot Events"); + setTimeout(() => Engine.play("Generic Plot Events"), Engine.minDomActionDelay); } else if (V.week === 29) { V.Event = "aid invitation"; - Engine.play("Generic Plot Events"); + setTimeout(() => Engine.play("Generic Plot Events"), Engine.minDomActionDelay); } else if (effectiveWeek === 31 && V.mercenaries === 0) { - Engine.play("P mercenaries"); + setTimeout(() => Engine.play("P mercenaries"), Engine.minDomActionDelay); } else if (effectiveWeek === 35 && V.mercenaries > 0) { - Engine.play("P snatch and grab"); + setTimeout(() => Engine.play("P snatch and grab"), Engine.minDomActionDelay); } else if (effectiveWeek === 43) { - Engine.play("P invasion"); + setTimeout(() => Engine.play("P invasion"), Engine.minDomActionDelay); } else if ((effectiveWeek === 44) && (V.mercenaries > 0) && V.mercRomeo !== 1) { const valid = V.slaves.find(function(s) { return (["serve the public", "serve in the club", "whore", "work in the brothel"].includes(s.assignment) || s.counter.publicUse >= 50) && s.fetish !== "mindbroken" && s.fuckdoll === 0; }); V.mercRomeo = 1; if (valid) { - Engine.play("P mercenary romeo"); + setTimeout(() => Engine.play("P mercenary romeo"), Engine.minDomActionDelay); } else { - Engine.play("Nonrandom Event"); + setTimeout(() => Engine.play("Nonrandom Event"), Engine.minDomActionDelay); } } else if (effectiveWeek === 46 && V.mercenaries > 0) { - Engine.play("P raid invitation"); + setTimeout(() => Engine.play("P raid invitation"), Engine.minDomActionDelay); } else if (effectiveWeek === 48 && V.experimental.food === 1) { V.foodCrisis = 1; - Engine.play("P food crisis"); + setTimeout(() => Engine.play("P food crisis"), Engine.minDomActionDelay); } else if (effectiveWeek === 50 && V.rations > 0) { V.foodCrisis = 2; - Engine.play("P food crisis"); + setTimeout(() => Engine.play("P food crisis"), Engine.minDomActionDelay); } else if ((effectiveWeek === 52) && (V.seeHyperPreg === 1) && V.seePreg !== 0 && V.badB !== 1) { const valid = V.slaves.find(function(s) { return s.drugs === "breast injections" || s.drugs === "hyper breast injections" || s.drugs === "intensive breast injections"; }); + V.badB = 1; if (valid) { - V.badB = 1; V.Event = "bad breasts"; - Engine.play("Generic Plot Events"); + setTimeout(() => Engine.play("Generic Plot Events"), Engine.minDomActionDelay); } else { - V.badB = 1; - Engine.play("Nonrandom Event"); + setTimeout(() => Engine.play("Nonrandom Event"), Engine.minDomActionDelay); } } else if (effectiveWeek === 54 && (V.peacekeepers) && V.peacekeepers.attitude >= 0) { - Engine.play("P peacekeepers deficit"); + setTimeout(() => Engine.play("P peacekeepers deficit"), Engine.minDomActionDelay); } else if (effectiveWeek === 56) { V.collaboration = 0; V.traitor = 0; V.hackerSupport = 0; - Engine.play("P underground railroad"); + setTimeout(() => Engine.play("P underground railroad"), Engine.minDomActionDelay); } else if (effectiveWeek === 58 && V.traitor === 0) { - Engine.play("P bombing"); + setTimeout(() => Engine.play("P bombing"), Engine.minDomActionDelay); } else if (effectiveWeek === 60 && V.rations > 0) { V.foodCrisis = 3; - Engine.play("P food crisis"); + setTimeout(() => Engine.play("P food crisis"), Engine.minDomActionDelay); } else if (effectiveWeek === 61 && V.traitor !== 0) { - Engine.play("P traitor message"); + setTimeout(() => Engine.play("P traitor message"), Engine.minDomActionDelay); } else if (effectiveWeek === 62 && V.mercenaries < 3) { - Engine.play("P defense fears"); + setTimeout(() => Engine.play("P defense fears"), Engine.minDomActionDelay); } else if (effectiveWeek === 65 && V.mercenaries >= 3) { - Engine.play("P citizens and civilians"); + setTimeout(() => Engine.play("P citizens and civilians"), Engine.minDomActionDelay); } else if (effectiveWeek === 67 && V.traitor !== 0) { - Engine.play("P collaboration choice"); + setTimeout(() => Engine.play("P collaboration choice"), Engine.minDomActionDelay); } else if (effectiveWeek === 69) { - Engine.play("P hacker support"); + setTimeout(() => Engine.play("P hacker support"), Engine.minDomActionDelay); } else if (effectiveWeek === 70 && V.collaboration === 1 && V.traitorType !== "trapper") { - Engine.play("P coup collaboration"); + setTimeout(() => Engine.play("P coup collaboration"), Engine.minDomActionDelay); } else if (effectiveWeek === 71) { const doubleAgent = (V.traitorType !== "agent" && V.traitorType !== "trapper") ? 0 : 1; if (V.traitorType === "trapper") { - Engine.play("P coup betrayal"); + setTimeout(() => Engine.play("P coup betrayal"), Engine.minDomActionDelay); } else if (V.mercenaries + V.personalArms + V.hackerSupport + doubleAgent < 5) { - Engine.play("P coup loss"); + setTimeout(() => Engine.play("P coup loss"), Engine.minDomActionDelay); } else { - Engine.play("P coup attempt"); + setTimeout(() => Engine.play("P coup attempt"), Engine.minDomActionDelay); } } else if (effectiveWeek === 72) { - Engine.play("P coup aftermath"); + setTimeout(() => Engine.play("P coup aftermath"), Engine.minDomActionDelay); } else if (V.SF.Toggle && V.SF.Active === -1 && effectiveWeek >= 72) { - Engine.play("Security Force Proposal"); + setTimeout(() => Engine.play("Security Force Proposal"), Engine.minDomActionDelay); } else if (V.arcologies[0].FSRestart !== "unset" && V.failedElite > 300 && V.eugenicsFullControl !== 1) { - Engine.play("eliteTakeOver"); + setTimeout(() => Engine.play("eliteTakeOver"), Engine.minDomActionDelay); } else if (effectiveWeek > 5 && V.rep > 3000 && V.FSAnnounced === 0) { - Engine.play("P FS Announcement"); + setTimeout(() => Engine.play("P FS Announcement"), Engine.minDomActionDelay); } else if (effectiveWeek > 18 && V.assistant.personality > 0 && !V.assistant.options) { V.Event = "assistant SP"; - Engine.play("Assistant Events"); + setTimeout(() => Engine.play("Assistant Events"), Engine.minDomActionDelay); } else if (effectiveWeek > 45 && V.bodyswapAnnounced === 0 && V.surgeryUpgrade === 1) { - Engine.play("P Bodyswap Reveal"); + setTimeout(() => Engine.play("P Bodyswap Reveal"), Engine.minDomActionDelay); } else if (effectiveWeek > 48 && V.invasionVictory > 0 && V.peacekeepers === 0 && V.peacekeepersGone !== 1) { - Engine.play("P peacekeepers intro"); + setTimeout(() => Engine.play("P peacekeepers intro"), Engine.minDomActionDelay); } else if (V.arcologies[0].prosperity > 80 && App.Utils.schoolCounter() === 0 && V.schoolSuggestion === 0) { - Engine.play("P school suggestion"); + setTimeout(() => Engine.play("P school suggestion"), Engine.minDomActionDelay); } else if ((V.assistant.fsOptions !== 1) && V.assistant.personality > 0 && V.assistant.appearance !== "normal" && FutureSocieties.HighestDecoration() >= 40) { V.Event = "assistant FS"; - Engine.play("Assistant Events"); + setTimeout(() => Engine.play("Assistant Events"), Engine.minDomActionDelay); } else if (V.assistant.personality > 0 && !V.assistant.announcedName && V.assistant.power > 0) { V.Event = "assistant name"; - Engine.play("Assistant Events"); + setTimeout(() => Engine.play("Assistant Events"), Engine.minDomActionDelay); } else if (!V.assistant.market && V.assistant.power > 1) { V.Event = "market assistant"; - Engine.play("Assistant Events"); + setTimeout(() => Engine.play("Assistant Events"), Engine.minDomActionDelay); } else if (effectiveWeek > 70 && V.corp.Incorporated > 0 && V.rivalOwnerEnslaved > 0 && V.mercenaries >= 3 && V.mercenariesHelpCorp === 0 && V.corp.DivExtra > 0) { - Engine.play("P Mercs Help Corp"); + setTimeout(() => Engine.play("P Mercs Help Corp"), Engine.minDomActionDelay); } else if (effectiveWeek > 75 && (V.peacekeepers) && V.peacekeepers.strength < 50 && V.rivalOwner === 0 && V.peacekeepersFate !== 1) { - Engine.play("P peacekeepers independence"); + setTimeout(() => Engine.play("P peacekeepers independence"), Engine.minDomActionDelay); } else if ((V.peacekeepers) && V.peacekeepers.strength >= 50 && V.peacekeepers.influenceAnnounced === 0) { - Engine.play("P peacekeepers influence"); + setTimeout(() => Engine.play("P peacekeepers influence"), Engine.minDomActionDelay); } else if (V.cash > 120000 && V.rep > 4000 && V.corp.Announced === 0) { - Engine.play("P Corp Announcement"); + setTimeout(() => Engine.play("P Corp Announcement"), Engine.minDomActionDelay); } else if (V.rivalOwner > 0) { if (V.hostageAnnounced === 0 && V.rivalSet !== 0) { - Engine.play("P rivalry hostage"); + setTimeout(() => Engine.play("P rivalry hostage"), Engine.minDomActionDelay); } else if ((V.rivalOwner - V.rivalryPower + 10) / V.arcologies[0].prosperity < 0.5) { - Engine.play("P rivalry victory"); + setTimeout(() => Engine.play("P rivalry victory"), Engine.minDomActionDelay); } else if (V.peacekeepers.attitude > 5 && V.rivalryDuration > 1) { - Engine.play("P rivalry peacekeepers"); + setTimeout(() => Engine.play("P rivalry peacekeepers"), Engine.minDomActionDelay); } else { - Engine.play("P rivalry actions"); + setTimeout(() => Engine.play("P rivalry actions"), Engine.minDomActionDelay); } } else if ((V.arcologies[0].FSPaternalistDecoration === 100) && (V.swanSong === 2) && (V.week - V.swanSongWeek >= 3)) { - Engine.play("RE The Siren Strikes Back"); + setTimeout(() => Engine.play("RE The Siren Strikes Back"), Engine.minDomActionDelay); } else if (V.eventResults.shoot === 1) { V.Event = "shoot result"; - Engine.play("Generic Plot Events"); + setTimeout(() => Engine.play("Generic Plot Events"), Engine.minDomActionDelay); } else if (V.eventResults.snatch === 1) { - Engine.play("P snatch and grab result"); + setTimeout(() => Engine.play("P snatch and grab result"), Engine.minDomActionDelay); } else if (V.eventResults.raid === 1) { - Engine.play("P raid result"); + setTimeout(() => Engine.play("P raid result"), Engine.minDomActionDelay); } else if (V.eventResults.aid === 1) { V.Event = "aid result"; - Engine.play("Generic Plot Events"); + setTimeout(() => Engine.play("Generic Plot Events"), Engine.minDomActionDelay); } else if (V.eventResults.slaveMedic > 0) { - Engine.play("P slave medic"); + setTimeout(() => Engine.play("P slave medic"), Engine.minDomActionDelay); } else if (V.eventResults.pit === 1 && V.BodyguardID !== 0) { - Engine.play("PE pit fight"); + setTimeout(() => Engine.play("PE pit fight"), Engine.minDomActionDelay); } else if ((effectiveWeek >= 37) && (V.arcologies[0].FSNeoImperialistLaw1 === 1) && (V.arcologies[0].FSNeoImperialistLaw2 === 1) && V.poorKnight !== 1 && effectiveWeek >= V.imperialEventWeek + 3) { V.poorKnight = 1; V.imperialEventWeek = effectiveWeek; - Engine.play("SE poorknight"); + setTimeout(() => Engine.play("SE poorknight"), Engine.minDomActionDelay); } else if ((effectiveWeek >= 40) && (V.arcologies[0].prosperity > 80) && (V.arcologies[0].FSNeoImperialistLaw2 === 1) && V.newBaron !== 1 && effectiveWeek >= V.imperialEventWeek + 3) { V.newBaron = 1; V.imperialEventWeek = effectiveWeek; - Engine.play("SE newBaron"); + setTimeout(() => Engine.play("SE newBaron"), Engine.minDomActionDelay); } else if (V.rivalOwner === 0 && V.secExpEnabled > 0 && (effectiveWeek >= 74 && V.SecExp.smilingMan.progress === 0 || effectiveWeek >= 77 && V.SecExp.smilingMan.progress === 1 || effectiveWeek >= 82 && V.SecExp.smilingMan.progress === 2 || V.SecExp.smilingMan.progress === 3)) { - Engine.play("secExpSmilingMan"); + setTimeout(() => Engine.play("secExpSmilingMan"), Engine.minDomActionDelay); } else if (V.rivalOwner === 0 && V.seeFCNN === 1 && V.FCNNstation === 0 && V.week > 95 && V.cash > 200000 && V.rep > 7500) { - Engine.play("SE FCNN Station"); + setTimeout(() => Engine.play("SE FCNN Station"), Engine.minDomActionDelay); } else if (effectiveWeek >= V.murderAttemptWeek) { - Engine.play("Murder Attempt"); + setTimeout(() => Engine.play("Murder Attempt"), Engine.minDomActionDelay); } else if (V.illegalDeals.slave !== 0 && V.illegalDeals.slave !== -1) { V.event = "slave trade"; - Engine.play("Murder Attempt"); + setTimeout(() => Engine.play("Murder Attempt"), Engine.minDomActionDelay); } else if (V.illegalDeals.trade !== 0 && V.illegalDeals.trade !== -1 && effectiveWeek >= V.illegalDeals.trade.week) { V.event = "trade deal"; - Engine.play("Murder Attempt"); + setTimeout(() => Engine.play("Murder Attempt"), Engine.minDomActionDelay); } else if (V.illegalDeals.military !== 0 && V.illegalDeals.military !== -1 && effectiveWeek >= V.illegalDeals.military.week) { V.event = "military deal"; - Engine.play("Murder Attempt"); + setTimeout(() => Engine.play("Murder Attempt"), Engine.minDomActionDelay); } else { if (random(1, 100) > effectiveWeek + 25) { - Engine.play("RIE Eligibility Check"); + setTimeout(() => Engine.play("RIE Eligibility Check"), Engine.minDomActionDelay); } else { - Engine.play("Random Nonindividual Event"); + setTimeout(() => Engine.play("Random Nonindividual Event"), Engine.minDomActionDelay); } } } else { if (random(1, 200) > effectiveWeek + 100 || V.hostageRescued === 1) { - Engine.play("RIE Eligibility Check"); + setTimeout(() => Engine.play("RIE Eligibility Check"), Engine.minDomActionDelay); } else { - Engine.play("Random Nonindividual Event"); + setTimeout(() => Engine.play("Random Nonindividual Event"), Engine.minDomActionDelay); } } // never reached, just for typing diff --git a/src/events/randomEvent.js b/src/events/randomEvent.js index 1fd209254e126523ab9cea92e1a2beb694b65f8e..4aa2d6f3cbf0757bce63c7f1896ddb2fac8ee34b 100644 --- a/src/events/randomEvent.js +++ b/src/events/randomEvent.js @@ -10,6 +10,7 @@ App.Events.getIndividualEvents = function() { return [ // instantiate all possible random individual events here // example: new App.Events.TestEvent(), + new App.Events.RESSDevotedFearfulSlave(), new App.Events.RESSAssFitting(), new App.Events.RESSCockFeederResistance(), new App.Events.RESSComfortableSeat(), @@ -48,6 +49,7 @@ App.Events.getIndividualEvents = function() { new App.Events.RECIUgly(), new App.Events.RETSAnalCowgirl(), + new App.Events.RETSBoobCollision(), new App.Events.RETSDatePlease(), new App.Events.RETSFucktoyPrefersRelative(), new App.Events.RETSIfYouEnjoyIt(), @@ -57,6 +59,7 @@ App.Events.getIndividualEvents = function() { new App.Events.RETSShowerForce(), new App.Events.RETSSiblingTussle(), new App.Events.RETSSimpleAssault(), + new App.Events.RETSTasteTest(), new App.Events.RETSTopExhaustion(), new App.Events.RENickname().setType("RIE"), @@ -84,6 +87,7 @@ App.Events.getNonindividualEvents = function() { new App.Events.RERelativeRecruiter(), new App.Events.REStaffedMorning(), new App.Events.REFullBed(), + new App.Events.REDevotedTwins(), new App.Events.RERoyalBlood(), new App.Events.REArcologyInspection(), diff --git a/src/events/story/pRivalryActions.js b/src/events/story/pRivalryActions.js new file mode 100644 index 0000000000000000000000000000000000000000..baa07c72f8f7c42e2ea4dbae97f1dee3d2dd2801 --- /dev/null +++ b/src/events/story/pRivalryActions.js @@ -0,0 +1,3648 @@ +App.Events.pRivalryActions = function() { + return execute(); + + function execute() { + const node = new DocumentFragment(); + if (V.hostage === 0) { + return node; + } + let r = []; + if (V.hostageAnnounced === 1) { + App.Events.drawEventArt(node, V.hostage); + } + + const { + HisR, HeR, + hisR, himR + } = getPronouns({pronoun: (V.rivalGender === 2) ? 1 : 0}).appendSuffix("R"); + const {girlU, hisU, himU, heU} = getNonlocalPronouns(V.seeDicks).appendSuffix("U"); + // const { womanP } = getPronouns(V.PC).appendSuffix("P"); + const {heA, hisA} = getPronouns(assistant.pronouns().main).appendSuffix("A"); + const {woman2, he2, his2, him2, mother2, wife2} = getPronouns(V.hostageWife || {pronoun: 0}).appendSuffix("2"); + + r.push(`Your inter-arcology war with the arcology owner behind the Daughters of Liberty has dragged on for ${V.rivalryDuration} ${(V.rivalryDuration > 1) ? `weeks` : `week`}. The tone of your arcology is a bit more somber than usual. You have enhanced security in place, and the populace has caught the mood.`); + + if (V.hostageAnnounced === 1) { + const { + He, His, + he, him, himself, his, girl, woman + } = getPronouns(V.hostage); + if (V.rivalryDuration >= 30) { + r.push(`The latest message from your rival is a live communication.`); + } else { + r.push(`The latest message from your rival recently arrived, showing ${SlaveFullName(V.hostage)}`); + } + if (V.rivalryDuration === 1) { + switch (V.rivalryFS) { + case "Racial Subjugationism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 10; + V.hostage.counter.vaginal += 10; + V.hostage.counter.anal += 10; + V.hostage.behavioralFlaw = "arrogant"; + V.hostage.sexualFlaw = "shamefast"; + r.push(`bound and offered to a pair of ${V.arcologies[0].FSSubjugationistRace} girls.`); + break; + case "Racial Supremacism": + V.hostage.trust += 5; + V.hostage.devotion += 5; + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + V.hostage.behavioralFlaw = "odd"; + V.hostage.sexualFlaw = "repressed"; + r.push(`being registered as a piece of ${V.arcologies[0].FSSupremacistRace} meat, fit only to be abused.`); + break; + case "Repopulation Focus": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 5; + V.hostage.counter.vaginal += 5; + V.hostage.counter.anal += 5; + V.hostage.counter.mammary += 5; + V.hostage.behavioralQuirk = "adores men"; + V.hostage.sexualQuirk = "caring"; + r.push(`being operated on to remove ${his} fertility.`); + break; + case "Eugenics": + if (V.seeHyperPreg !== 1) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.preg = 4; + V.hostage.pregType = 8; + V.hostage.pregKnown = 1; + V.hostage.pregWeek = V.rivalryDuration; + WombImpregnate(V.hostage, V.hostage.pregType, 0, V.hostage.preg); + SetBellySize(V.hostage); + V.hostage.vagina = 2; + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + V.hostage.behavioralFlaw = "odd"; + V.hostage.sexualFlaw = "hates penetration"; + r.push(`undergoing a fertility screening; the video ends with the positive results.`); + } else { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.preg = 4; + V.hostage.pregType = 40; + V.hostage.pregKnown = 1; + V.hostage.pregWeek = V.rivalryDuration; + WombImpregnate(V.hostage, V.hostage.pregType, 0, V.hostage.preg); + SetBellySize(V.hostage); + V.hostage.vagina = 2; + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + V.hostage.behavioralFlaw = "odd"; + V.hostage.sexualFlaw = "hates penetration"; + r.push(`undergoing a fertility screening; the video ends with the positive results.`); + } + break; + case "Gender Radicalism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.behavioralFlaw = "arrogant"; + V.hostage.sexualFlaw = "idealistic"; + V.hostage.fetish = "none"; + r.push(`having measurements taken for ${his} new station in life.`); + break; + case "Gender Fundamentalism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.anal += 10; + V.hostage.behavioralFlaw = "hates men"; + V.hostage.sexualFlaw = "hates anal"; + r.push(`begging for ${his} anal virginity to not be taken.`); + break; + case "Paternalism": + V.hostage.trust += 5; + V.hostage.devotion += 5; + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + V.hostage.earPiercing = 1; + V.hostage.nosePiercing = 1; + V.hostage.nipplesPiercing = 0; + V.hostage.lipsPiercing = 0; + V.hostage.vaginaPiercing = 0; + V.hostage.anusPiercing = 0; + V.hostage.clitPiercing = 0; + V.hostage.eyebrowPiercing = 0; + V.hostage.navelPiercing = 0; + V.hostage.corsetPiercing = 0; + V.hostage.areolaePiercing = 0; + V.hostage.tonguePiercing = 0; + V.hostage.boobsTat = 0; + V.hostage.buttTat = 0; + V.hostage.vaginaTat = 0; + V.hostage.lipsTat = 0; + V.hostage.anusTat = 0; + V.hostage.shouldersTat = 0; + V.hostage.backTat = 0; + V.hostage.armsTat = 0; + V.hostage.legsTat = 0; + V.hostage.stampTat = "degradation"; + V.hostage.behavioralFlaw = "odd"; + V.hostage.sexualFlaw = "apathetic"; + r.push(`crying as ${his} nose and ears are pierced and the first of many tattoos inked into ${his} flesh.`); + break; + case "Degradationism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.behavioralFlaw = "liberated"; + V.hostage.sexualFlaw = "idealistic"; + r.push(`being shown to ${his} luxurious new room, complete with heart-shaped love bed.`); + break; + case "Body Purism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.boobs += 2000; + V.hostage.boobsImplant += 2000; + V.hostage.boobsImplantType = "advanced fillable"; + V.hostage.behavioralFlaw = "anorexic"; + V.hostage.sexualFlaw = "shamefast"; + r.push(`struggling against ${his} restraints on the operating table as a pair of 2000cc implants are forced into ${his} chest.`); + break; + case "Transformation Fetishism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.behavioralFlaw = "anorexic"; + V.hostage.sexualFlaw = "shamefast"; + r.push(`being carefully checked for any implants.`); + break; + case "Youth Preferentialism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 1; + V.hostage.counter.vaginal += 1; + V.hostage.counter.anal += 1; + V.hostage.behavioralFlaw = "bitchy"; + V.hostage.sexualFlaw = "idealistic"; + r.push(`bound and offered to an older ${woman2}.`); + break; + case "Maturity Preferentialism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 1; + V.hostage.counter.vaginal += 1; + V.hostage.counter.anal += 1; + V.hostage.behavioralFlaw = "bitchy"; + V.hostage.sexualFlaw = "idealistic"; + r.push(`bound and offered to a young ${woman2}.`); + break; + case "Slimness Enthusiasm": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.boobs += 1500; + V.hostage.butt = 4; + V.hostage.behavioralFlaw = "anorexic"; + V.hostage.sexualFlaw = "crude"; + r.push(`screaming as ${he} watches ${his} breasts swell from the intense amount of A-HGH being pumped into them.`); + break; + case "Asset Expansionism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.behavioralFlaw = "bitchy"; + V.hostage.sexualFlaw = "shamefast"; + r.push(`being weighed and measured to document ${his} trim body.`); + break; + case "Physical IdealismOLD": + V.hostage.lactation = 2; + V.hostage.lactationDuration = 2; + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.boobs += 1000; + V.hostage.weight = 0; + V.hostage.butt = 4; + V.hostage.behavioralFlaw = "anorexic"; + V.hostage.sexualFlaw = "shamefast"; + r.push(`standing in front of a mirror sobbing as droplets of milk form on ${his} ${V.hostage.nipples} nipples, courtesy of ${his} newly implanted lactation drugs.`); + break; + case "Pastoralism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.muscles = 0; + V.hostage.behavioralFlaw = "gluttonous"; + V.hostage.sexualFlaw = "shamefast"; + r.push(`being weighed and measured to determine the best way to replace ${his} fat with muscle.`); + break; + case "Physical Idealism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.boobs = 400; + V.hostage.weight = 10; + V.hostage.counter.vaginal += 28; + V.hostage.vagina = 2; + V.hostage.butt = 2; + V.hostage.behavioralFlaw = "anorexic"; + V.hostage.sexualFlaw = "hates penetration"; + r.push(`struggling with a feeding tube down ${his} throat, ${his} belly heavily bloated with fattening slave food, ${his} body already looking a little soft. ${He} is being forcibly fucked, ${his} taut middle jiggling slightly with each thrust; 28 tallies are already drawn over ${his} pussy.`); + break; + case "Hedonistic Decadence": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.muscles = 0; + V.hostage.behavioralFlaw = "gluttonous"; + V.hostage.sexualFlaw = "shamefast"; + r.push(`being weighed and measured to determine the best way to replace ${his} fat with muscle.`); + break; + case "Chattel Religionism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.behavioralFlaw = "arrogant"; + V.hostage.sexualFlaw = "repressed"; + r.push(`bound and being introduced to ${his} new lifestyle.`); + break; + case "Multiculturalism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 10; + V.hostage.counter.vaginal += 10; + V.hostage.counter.anal += 10; + V.hostage.counter.mammary += 10; + V.hostage.behavioralFlaw = "liberated"; + V.hostage.sexualFlaw = "repressed"; + r.push(`being inducted into ${his} new religion.`); + break; + case "Intellectual Dependency": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.behavioralFlaw = "bitchy"; + V.hostage.sexualFlaw = "apathetic"; + r.push(`bound and being introduced to ${his} new curriculum.`); + break; + case "Slave Professionalism": + V.hostage.trust += 5; + V.hostage.devotion += 5; + V.hostage.counter.vaginal += 10; + V.hostage.energy += 5; + V.hostage.addict += 2; + V.hostage.hLength += 7; + V.hostage.behavioralFlaw = "arrogant"; + V.hostage.sexualFlaw = "repressed"; + r.push(`bound and being read the details of the drugs that will be correcting ${his} body and mind.`); + break; + case "Petite Admiration": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 1; + V.hostage.counter.vaginal += 1; + V.hostage.counter.anal += 1; + V.hostage.behavioralFlaw = "liberated"; + V.hostage.sexualFlaw = "idealistic"; + r.push(`bound and offered to a towering ${woman2}.`); + break; + case "Statuesque Glorification": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 1; + V.hostage.counter.vaginal += 1; + V.hostage.counter.anal += 1; + V.hostage.behavioralFlaw = "liberated"; + V.hostage.sexualFlaw = "judgemental"; + r.push(`tied down and offered to a tiny ${woman2}.`); + break; + default: + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.behavioralFlaw = "arrogant"; + V.hostage.sexualFlaw = "repressed"; + r.push(`bound and being introduced to ${his} new lifestyle.`); + } + } else if (V.rivalryDuration === 6) { + switch (V.rivalryFS) { + case "Racial Subjugationism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 10; + V.hostage.counter.vaginal += 10; + V.hostage.counter.anal += 10; + V.hostage.fetish = "submissive"; + V.hostage.fetishStrength = 10; + r.push(`no longer trying to escape from the ${V.arcologies[0].FSSubjugationistRace} girls.`); + break; + case "Racial Supremacism": + V.hostage.trust += 5; + V.hostage.devotion += 5; + if (V.hostage.vagina < 2) { + V.hostage.vagina = 2; + } + if (V.hostage.anus < 2) { + V.hostage.anus = 2; + } + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + V.hostage.fetish = "masochist"; + V.hostage.fetishStrength = 10; + r.push(`beginning to lose hope in ever being something more than just a piece of ${V.arcologies[0].FSSupremacistRace} meat.`); + break; + case "Repopulation Focus": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 5; + V.hostage.counter.vaginal += 5; + V.hostage.counter.anal += 5; + V.hostage.counter.mammary += 5; + r.push(`beginning to come to terms with ${his} lack of fertility.`); + break; + case "Eugenics": + if (V.seeHyperPreg !== 1) { + r.push(`groping ${his} rounded tummy, blushing thoroughly as ${he} explores ${his} new curve.`); + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.preg = 11; + V.hostage.pregType = 8; + V.hostage.pregKnown = 1; + V.hostage.pregWeek = V.rivalryDuration; + WombImpregnate(V.hostage, V.hostage.pregType, 0, V.hostage.preg); + SetBellySize(V.hostage); + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + V.hostage.fetish = "pregnancy"; + V.hostage.fetishStrength = 10; + } else { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.preg = 11; + V.hostage.pregType = 40; + V.hostage.pregKnown = 1; + V.hostage.pregWeek = V.rivalryDuration; + WombImpregnate(V.hostage, V.hostage.pregType, 0, V.hostage.preg); + SetBellySize(V.hostage); + V.hostage.boobs += 100; + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + V.hostage.fetish = "pregnancy"; + V.hostage.fetishStrength = 10; + r.push(`groping ${his} massively distended belly, blushing thoroughly as ${he} explores ${his} new curve.`); + } + break; + case "Gender Radicalism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.vaginal += 1; + V.hostage.fetish = "submissive"; + V.hostage.fetishStrength = 10; + r.push(`trying on new clothes while ${he} thinks no-one is watching.`); + break; + case "Gender Fundamentalism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.anus = 2; + V.hostage.counter.anal += 10; + V.hostage.fetish = "buttslut"; + V.hostage.fetishStrength = 10; + r.push(`questioning why getting buttfucked is starting to feel so good.`); + break; + case "Paternalism": + V.hostage.trust += 5; + V.hostage.devotion += 5; + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + V.hostage.heels = 1; + V.hostage.earPiercing = 1; + V.hostage.nosePiercing = 1; + V.hostage.nipplesPiercing = 1; + V.hostage.lipsPiercing = 1; + V.hostage.vaginaPiercing = 0; + V.hostage.anusPiercing = 0; + V.hostage.clitPiercing = 1; + V.hostage.eyebrowPiercing = 0; + V.hostage.navelPiercing = 1; + V.hostage.corsetPiercing = 0; + V.hostage.areolaePiercing = 0; + V.hostage.tonguePiercing = 1; + V.hostage.boobsTat = "degradation"; + V.hostage.backTat = "degradation"; + V.hostage.stampTat = "degradation"; + V.hostage.fetish = "masochist"; + V.hostage.fetishStrength = 10; + App.Medicine.Modification.addScar(V.hostage, "left ankle", "surgical", 2); + App.Medicine.Modification.addScar(V.hostage, "right ankle", "surgical", 2); + App.Medicine.Modification.addScar(V.hostage, "left calf", "surgical", 2); + App.Medicine.Modification.addScar(V.hostage, "right calf", "surgical", 2); + r.push(`undergoing surgery to sever the tendons in ${his} heels.`); + break; + case "Degradationism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.vaginal += 1; + V.hostage.fetish = "submissive"; + V.hostage.fetishStrength = 10; + r.push(`questioning if being ${his} owner's plaything is what ${he} really wants.`); + break; + case "Body Purism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.boobs += 2000; + V.hostage.boobsImplant += 2000; + if (V.hostage.boobsImplant > 10000) { + V.hostage.boobsImplantType = "hyper fillable"; + } + V.hostage.boobShape = "spherical"; + V.hostage.nipples = "flat"; + V.hostage.fetish = "boobs"; + V.hostage.fetishStrength = 10; + r.push(`blushing as ${he} attempts to get dressed with ${his} massive ${V.hostage.boobs}cc fake tits getting in the way.`); + break; + case "Transformation Fetishism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.vaginal += 1; + V.hostage.fetish = "submissive"; + V.hostage.fetishStrength = 10; + r.push(`blushing as ${he} recollects all the compliments ${his} pure body has received so far.`); + break; + case "Youth Preferentialism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 5; + V.hostage.counter.vaginal += 5; + V.hostage.counter.anal += 5; + V.hostage.fetish = "submissive"; + V.hostage.fetishStrength = 10; + r.push(`blushing as ${he} thinks about being dominated by that MILF.`); + break; + case "Maturity Preferentialism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 5; + V.hostage.counter.vaginal += 5; + V.hostage.counter.anal += 5; + V.hostage.fetish = "dom"; + V.hostage.fetishStrength = 10; + r.push(`blushing as ${he} thinks about possibly dominating ${his} energetic harasser.`); + break; + case "Slimness Enthusiasm": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight = 0; + V.hostage.boobs += 1500; + V.hostage.butt = 5; + V.hostage.fetish = "boobs"; + V.hostage.fetishStrength = 10; + r.push(`blushing as ${he} attempts to get dressed with ${his} massive ${V.hostage.boobs}cc tits getting in the way.`); + break; + case "Asset Expansionism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.vaginal += 1; + r.push(`blushing as ${he} recollects all the compliments ${his} slim body has received so far.`); + break; + case "Pastoralism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight = 50; + V.hostage.muscles = 25; + V.hostage.boobs = 1000; + V.hostage.counter.vaginal += 1; + V.hostage.fetish = "dom"; + V.hostage.fetishStrength = 10; + r.push(`crashing into ${his} bed, exhausted from all ${his} exercise. As ${he} massages ${his} sore body, ${he} can't help gasp at the weight ${he} has lost.`); + break; + case "Cummunism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight = 20; + V.hostage.boobs += 1000; + V.hostage.fetish = "boobs"; + V.hostage.fetishStrength = 10; + r.push(`groaning as ${he} lowers ${his} growing body onto ${his} cot. ${He} shoves a massive ${V.hostage.boobs}cc milky breast aside so ${he} can massage ${his} hugely distended belly. ${He} moans in pain under the massive amount of high-caloric fluid within ${his} gut.`); + break; + case "Physical Idealism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight = 50; + V.hostage.boobs = 800; + V.hostage.butt = 4; + V.hostage.counter.vaginal += 28; + V.hostage.vagina = 3; + V.hostage.behavioralFlaw = "anorexic"; + V.hostage.sexualFlaw = "hates penetration"; + r.push(`groaning as ${his} taut belly is measured and ${his} weight is taken; 140 tallies adorn ${his} lower belly. "88 kilos, a good start, but nowhere near the end. Now about that fetish of yours..." ${He} responds with a meek`); + if (V.seePreg !== 0) { + V.hostage.fetish = either("boobs", "buttslut", "cumslut", "dom", "humiliation", "masochist", "pregnancy", "sadist", "submissive"); + } else { + V.hostage.fetish = either("boobs", "buttslut", "cumslut", "dom", "humiliation", "masochist", "sadist", "submissive"); + } + V.hostage.fetishStrength = 10; + switch (V.hostage.fetish) { + case "submissive": + r.push(Spoken(V.hostage, `"I like getting dominated..."`)); + break; + case "cumslut": + r.push(Spoken(V.hostage, `"I like getting cummed on..."`)); + break; + case "humiliation": + r.push(Spoken(V.hostage, `"I like being humiliated..."`)); + break; + case "buttslut": + r.push(Spoken(V.hostage, `"I like getting assfucked..."`)); + break; + case "boobs": + r.push(Spoken(V.hostage, `"I like big breasts..."`)); + break; + case "sadist": + r.push(Spoken(V.hostage, `"I like hurting people..."`)); + break; + case "masochist": + r.push(Spoken(V.hostage, `"I like getting beaten..."`)); + break; + case "dom": + r.push(Spoken(V.hostage, `"I like getting my way..."`)); + break; + case "pregnancy": + r.push(Spoken(V.hostage, `"I want to get pregnant..."`)); + break; + } + r.push(`"No need to be shy about it! We'll make sure to`); + switch (V.hostage.fetish) { + case "submissive": + r.push(`get a big strong man to teach you your place right away."`); + break; + case "cumslut": + r.push(`have plenty of cum ready for you."`); + break; + case "humiliation": + r.push(`broadcast your life to the world."`); + break; + case "buttslut": + r.push(`give your ass plenty of attention."`); + break; + case "boobs": + r.push(`get a big pair of fillable implants in you right away."`); + V.hostage.boobs += 1000; + V.hostage.boobsImplant += 1000; + V.hostage.boobsImplantType = "fillable"; + break; + case "sadist": + r.push(`have a sissy little bitch in reach for you to torment as you please."`); + break; + case "masochist": + r.push(`get a big strong man to teach you your place right away."`); + break; + case "dom": + r.push(`have a sissy little bitch to do whatever you please."`); + break; + case "pregnancy": + r.push(`take you off your birth control, won't be long after that."`); + V.hostage.preg = 1; + V.hostage.pregType = setPregType(V.hostage); + WombImpregnate(V.hostage, V.hostage.pregType, 0, 1); + V.hostage.pregKnown = 1; + V.hostage.pregWeek = 1; + SetBellySize(V.hostage); + break; + } + break; + case "Hedonistic Decadence": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight = 50; + V.hostage.muscles = 25; + V.hostage.boobs = 1000; + V.hostage.counter.vaginal += 1; + V.hostage.fetish = "dom"; + V.hostage.fetishStrength = 10; + r.push(`crashing into ${his} bed, exhausted from all ${his} exercise. As ${he} massages ${his} sore body, ${he} can't help gasp at the weight ${he} has lost.`); + break; + case "Chattel Religionism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.vaginal += 1; + V.hostage.fetish = "submissive"; + V.hostage.fetishStrength = 10; + r.push(`questioning why ${he} is yearning to be a part of this society.`); + break; + case "Multiculturalism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 10; + V.hostage.counter.vaginal += 10; + V.hostage.counter.anal += 10; + V.hostage.counter.mammary += 10; + V.hostage.fetish = "dom"; + V.hostage.fetishStrength = 10; + r.push(`studying ${his} scriptures with the hope that ${he} can do something to help you.`); + break; + case "Intellectual Dependency": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 10; + V.hostage.counter.vaginal += 10; + V.hostage.counter.anal += 10; + V.hostage.intelligenceImplant = Math.clamp(V.hostage.intelligenceImplant + 1, 0, 30); + V.hostage.skill.oral = Math.clamp(V.hostage.skill.oral + 5, 0, 100); + V.hostage.skill.entertainment = Math.clamp(V.hostage.skill.entertainment + 5, 0, 100); + V.hostage.skill.anal = Math.clamp(V.hostage.skill.anal + 5, 0, 100); + V.hostage.skill.vaginal = Math.clamp(V.hostage.skill.vaginal + 5, 0, 100); + V.hostage.skill.whoring = Math.clamp(V.hostage.skill.whoring + 5, 0, 100); + V.hostage.fetish = "submissive"; + V.hostage.fetishStrength = 10; + r.push(`reading a book on styling oneself.`); + break; + case "Slave Professionalism": + V.hostage.trust += 5; + V.hostage.devotion += 5; + V.hostage.intelligenceImplant = Math.clamp(V.hostage.intelligenceImplant - 5, 0, 30); + V.hostage.counter.oral += 30; + V.hostage.counter.vaginal += 30; + V.hostage.counter.anal += 30; + V.hostage.vagina = 3; + V.hostage.anus = 3; + V.hostage.energy += 5; + V.hostage.addict += 2; + V.hostage.hLength += 7; + V.hostage.fetish = "humiliation"; + V.hostage.fetishStrength = 10; + r.push(`uncontrollably masturbating as ${he} struggles to stay coherent.`); + r.push(Spoken(V.hostage, `"I need it... I can't stop... Need more..."`)); + r.push(`${He} orgasms in full view of the camera and passes out.`); + break; + case "Petite Admiration": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 10; + V.hostage.counter.vaginal += 5; + V.hostage.counter.anal += 5; + V.hostage.fetish = "submissive"; + V.hostage.fetishStrength = 10; + r.push(`blushing as ${he} thinks about being picked up, pinned against a wall and dominated by that giant.`); + break; + case "Statuesque Glorification": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 3; + V.hostage.counter.vaginal += 7; + V.hostage.counter.anal += 7; + V.hostage.fetish = "dom"; + V.hostage.fetishStrength = 10; + r.push(`blushing as ${he} thinks about possibly dominating ${his} minuscule harasser.`); + break; + default: + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.vaginal += 1; + V.hostage.fetish = "submissive"; + V.hostage.fetishStrength = 10; + r.push(`questioning why ${he} is yearning to be a part of this society.`); + } + } else if (V.rivalryDuration === 11) { + switch (V.rivalryFS) { + case "Racial Subjugationism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 20; + V.hostage.counter.vaginal += 20; + V.hostage.counter.anal += 20; + V.hostage.fetishStrength = 65; + V.hostage.behavioralFlaw = "none"; + V.hostage.sexualFlaw = "none"; + V.hostage.behavioralQuirk = "confident"; + V.hostage.sexualQuirk = "perverted"; + r.push(`calling ${his} ${V.arcologies[0].FSSubjugationistRace} girls for some release.`); + break; + case "Racial Supremacism": + V.hostage.trust += 5; + V.hostage.devotion += 5; + if (V.hostage.preg < 1 && V.seePreg !== 0) { + V.hostage.preg = 12; + V.hostage.pregType = 1; + V.hostage.pregKnown = 1; + V.hostage.pregWeek = 12; + WombImpregnate(V.hostage, V.hostage.pregType, 0, V.hostage.preg); + SetBellySize(V.hostage); + } + if (V.hostage.vagina < 3) { + V.hostage.vagina = 3; + } + if (V.hostage.anus < 3) { + V.hostage.anus = 3; + } + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + V.hostage.fetishStrength = 65; + V.hostage.behavioralQuirk = "none"; + V.hostage.behavioralFlaw = "odd"; + V.hostage.sexualFlaw = "apathetic"; + App.Medicine.Modification.addScourged(V.hostage); + App.Medicine.Modification.addScar(V.hostage, "anus", "generic"); + App.Medicine.Modification.addScar(V.hostage, "vagina", "generic"); + r.push(`collapsing into ${his} rancid cot, hands on ${his}`); + if (V.seePreg !== 0) { + r.push(`rounded middle,`); + } else { + r.push(`empty belly,`); + } + r.push(`sobbing in terror.`); + break; + case "Repopulation Focus": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 5; + V.hostage.counter.vaginal += 5; + V.hostage.counter.anal += 5; + V.hostage.counter.mammary += 5; + V.hostage.behavioralFlaw = "hates men"; + V.hostage.sexualFlaw = "hates penetration"; + r.push(`realizing that ${he} doesn't need to bear children to be happy in life.`); + break; + case "Eugenics": + if (V.seeHyperPreg !== 1) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.preg = 21; + V.hostage.pregType = 8; + V.hostage.pregKnown = 1; + V.hostage.pregWeek = V.rivalryDuration; + WombImpregnate(V.hostage, V.hostage.pregType, 0, V.hostage.preg); + SetBellySize(V.hostage); + V.hostage.vagina = 3; + V.hostage.boobs += 100; + V.hostage.lactation = 1; + V.hostage.lactationDuration = 2; + V.hostage.counter.oral += 100; + V.hostage.counter.vaginal += 100; + V.hostage.counter.anal += 100; + V.hostage.counter.mammary += 100; + V.hostage.behavioralFlaw = "none"; + V.hostage.sexualFlaw = "none"; + V.hostage.behavioralQuirk = "adores men"; + V.hostage.sexualQuirk = "caring"; + V.hostage.fetishStrength = 65; + r.push(`realizing that being pregnant is possibly the best thing in life, as ${he} cradles ${his} growing belly.`); + } else { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.preg = 21; + V.hostage.pregType = 40; + V.hostage.pregKnown = 1; + V.hostage.pregWeek = V.rivalryDuration; + WombImpregnate(V.hostage, V.hostage.pregType, 0, V.hostage.preg); + SetBellySize(V.hostage); + V.hostage.vagina = 3; + V.hostage.boobs += 300; + V.hostage.lactation = 1; + V.hostage.lactationDuration = 2; + V.hostage.counter.oral += 100; + V.hostage.counter.vaginal += 100; + V.hostage.counter.anal += 100; + V.hostage.counter.mammary += 100; + V.hostage.behavioralFlaw = "none"; + V.hostage.sexualFlaw = "none"; + V.hostage.behavioralQuirk = "adores men"; + V.hostage.sexualQuirk = "caring"; + V.hostage.fetishStrength = 65; + r.push(`realizing that being pregnant is possibly the best thing in life, as ${he} attempts to cradle ${his} enormous belly.`); + } + break; + case "Gender Radicalism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.vaginal += 1; + V.hostage.fetishStrength = 65; + V.hostage.behavioralFlaw = "none"; + V.hostage.sexualFlaw = "none"; + V.hostage.behavioralQuirk = "insecure"; + V.hostage.sexualQuirk = "romantic"; + r.push(`realizing that a woman's place is next to the powerful, not being powerful.`); + break; + case "Gender Fundamentalism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.anus = 3; + V.hostage.counter.anal += 10; + if (V.seeDicks !== 0) { + V.hostage.dick = 1; + } + V.hostage.behavioralFlaw = "none"; + V.hostage.sexualFlaw = "none"; + V.hostage.behavioralQuirk = "adores men"; + V.hostage.sexualQuirk = "size queen"; + V.hostage.fetishStrength = 65; + r.push(`realizing that nothing feels better than a huge dick up ${his} ass.`); + if (V.seeDicks !== 0) { + r.push(`Well, except maybe touching ${his} new penis while taking it in the ass.`); + } + break; + case "Paternalism": + V.hostage.trust += 5; + V.hostage.devotion += 5; + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + V.hostage.voice = 0; + V.hostage.earPiercing = 2; + V.hostage.nosePiercing = 2; + V.hostage.nipplesPiercing = 1; + V.hostage.lipsPiercing = 1; + V.hostage.vaginaPiercing = 1; + V.hostage.anusPiercing = 0; + V.hostage.clitPiercing = 1; + V.hostage.eyebrowPiercing = 1; + V.hostage.navelPiercing = 2; + V.hostage.corsetPiercing = 0; + V.hostage.areolaePiercing = 1; + V.hostage.tonguePiercing = 1; + V.hostage.buttTat = "degradation"; + V.hostage.vaginaTat = "degradation"; + V.hostage.shouldersTat = "degradation"; + V.hostage.armsTat = "degradation"; + V.hostage.legsTat = "degradation"; + App.Medicine.Modification.addScar(V.hostage, "anus", "generic"); + App.Medicine.Modification.addScar(V.hostage, "vagina", "generic"); + V.hostage.fetishStrength = 65; + App.Medicine.Modification.addScar(V.hostage, "neck", "surgical", 2); + r.push(`screaming as ${his} throat is prepared for surgery, knowing this will be the last sound ${he} ever vocalizes.`); + break; + case "Degradationism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.vaginal += 1; + V.hostage.behavioralFlaw = "none"; + V.hostage.sexualFlaw = "none"; + V.hostage.behavioralQuirk = "advocate"; + V.hostage.sexualQuirk = "romantic"; + V.hostage.fetishStrength = 65; + r.push(`waiting on ${his} love-bed for ${his} owner to come and take ${him} to heaven.`); + break; + case "Body Purism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.boobs += 2000; + V.hostage.boobsImplant += 2000; + if (V.hostage.boobsImplant > 10000) { + V.hostage.boobsImplantType = "hyper fillable"; + } + V.hostage.butt = 7; + V.hostage.buttImplant = 4; + V.hostage.buttImplantType = "fillable"; + V.hostage.behavioralFlaw = "none"; + V.hostage.behavioralQuirk = "insecure"; + V.hostage.sexualFlaw = "crude"; + V.hostage.fetishStrength = 65; + r.push(`getting off the surgical table and immediately falling to the floor under the weight of ${his} immense ${V.hostage.boobs}cc implants. ${He} quickly calls out, not for help, but for a dick in ${him} to celebrate this occasion.`); + break; + case "Transformation Fetishism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.vaginal += 1; + V.hostage.behavioralFlaw = "none"; + V.hostage.sexualFlaw = "none"; + V.hostage.behavioralQuirk = "fitness"; + V.hostage.sexualQuirk = "romantic"; + V.hostage.fetishStrength = 65; + r.push(`realizing that ${his} pure body really is gorgeous.`); + break; + case "Youth Preferentialism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 10; + V.hostage.counter.vaginal += 10; + V.hostage.counter.anal += 10; + V.hostage.behavioralFlaw = "none"; + V.hostage.sexualFlaw = "none"; + V.hostage.behavioralQuirk = "adores women"; + V.hostage.sexualQuirk = "romantic"; + V.hostage.fetishStrength = 65; + r.push(`beginning to fall in love with ${his} loving ${mother2} figure.`); + break; + case "Maturity Preferentialism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 10; + V.hostage.counter.vaginal += 10; + V.hostage.counter.anal += 10; + V.hostage.behavioralFlaw = "none"; + V.hostage.sexualFlaw = "none"; + V.hostage.behavioralQuirk = "adores women"; + V.hostage.sexualQuirk = "romantic"; + V.hostage.fetishStrength = 65; + r.push(`beginning to fall in love with ${his} energetic friend.`); + break; + case "Slimness Enthusiasm": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight = 20; + V.hostage.boobs += 1500; + V.hostage.butt = 6; + V.hostage.sexualFlaw = "none"; + V.hostage.behavioralFlaw = "gluttonous"; + V.hostage.sexualQuirk = "size queen"; + r.push(`getting out of bed and immediately falling to the floor under the weight of ${his} immense ${V.hostage.boobs}cc breasts. ${He} quickly calls out, not for help, but for a dick in ${him} to celebrate this occasion.`); + break; + case "Asset Expansionism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.vaginal += 1; + V.hostage.behavioralFlaw = "none"; + V.hostage.sexualFlaw = "none"; + V.hostage.behavioralQuirk = "fitness"; + V.hostage.sexualQuirk = "tease"; + r.push(`realizing that a thin female figure is gorgeous.`); + break; + case "Pastoralism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight = 20; + V.hostage.muscles = 50; + V.hostage.boobs = 700; + V.hostage.counter.vaginal += 1; + V.hostage.behavioralFlaw = "none"; + V.hostage.sexualFlaw = "none"; + V.hostage.behavioralQuirk = "fitness"; + V.hostage.sexualQuirk = "romantic"; + V.hostage.fetishStrength = 65; + r.push(`stepping onto a scale and gawking out how much weight ${he} has lost. ${He} flexes, giggling to ${himself}, before picking up a weight.`); + break; + case "Cummunism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight = 50; + V.hostage.boobs += 1000; + V.hostage.butt = 5; + V.hostage.fetishStrength = 65; + V.hostage.behavioralFlaw = "gluttonous"; + V.hostage.sexualFlaw = "crude"; + r.push(`getting out of bed and immediately falling to the floor under the weight of ${his} immense ${V.hostage.boobs}cc breasts. As ${his} meaty body jiggles and a veritable flood of milk escapes ${his} breasts; ${he} calls out, not for help, but for a dick in ${him} to celebrate this occasion.`); + break; + case "Physical Idealism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight = 75; + V.hostage.boobs += 100; + V.hostage.butt = 5; + V.hostage.fetishStrength = 65; + V.hostage.behavioralFlaw = "gluttonous"; + V.hostage.sexualFlaw = "crude"; + V.hostage.counter.vaginal += 35; + V.hostage.vagina = 3; + r.push(`giggling and flirting while ${his} body is measured and ${his} weight is taken; 280 tallies adorn ${his} soft belly. "108 kilos, getting there. Oh don't make that face, there's plenty of food left."`); + switch (V.hostage.fetish) { + case "cumslut": + V.hostage.counter.oral += 70; + break; + case "buttslut": + V.hostage.counter.anal += 21; + V.hostage.anus = 3; + break; + case "boobs": + V.hostage.boobs += 100; + V.hostage.boobsImplant += 100; + if (V.hostage.boobsImplant > 2000) { + V.hostage.boobsImplantType = "advanced fillable"; + } + break; + case "pregnancy": + V.hostage.preg++; + V.hostage.pregKnown = 1; + V.hostage.pregWeek = V.hostage.preg; + SetBellySize(V.hostage); + break; + } + break; + case "Hedonistic Decadence": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight = 20; + V.hostage.muscles = 50; + V.hostage.boobs = 700; + V.hostage.counter.vaginal += 1; + V.hostage.behavioralFlaw = "none"; + V.hostage.sexualFlaw = "none"; + V.hostage.behavioralQuirk = "fitness"; + V.hostage.sexualQuirk = "romantic"; + V.hostage.fetishStrength = 65; + r.push(`stepping onto a scale and gawking out how much weight ${he} has lost. ${He} flexes, giggling to ${himself}, before picking up a weight.`); + break; + case "Chattel Religionism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.vaginal += 1; + V.hostage.fetishStrength = 65; + V.hostage.behavioralFlaw = "none"; + V.hostage.sexualFlaw = "none"; + V.hostage.behavioralQuirk = "cutting"; + V.hostage.sexualQuirk = "unflinching"; + r.push(`eagerly getting ready to spend some time in the city.`); + break; + case "Multiculturalism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 25; + V.hostage.counter.vaginal += 25; + V.hostage.counter.anal += 25; + V.hostage.counter.mammary += 25; + V.hostage.fetishStrength = 65; + V.hostage.sexualFlaw = "none"; + V.hostage.behavioralFlaw = "devout"; + V.hostage.sexualQuirk = "caring"; + r.push(`practicing reciting ${his} prayers from memory, the notion that ${he} can save your arcology still strong.`); + break; + case "Intellectual Dependency": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 10; + V.hostage.counter.vaginal += 10; + V.hostage.counter.anal += 10; + V.hostage.intelligenceImplant = Math.clamp(V.hostage.intelligenceImplant + 2, 0, 30); + V.hostage.skill.oral = Math.clamp(V.hostage.skill.oral + 5, 0, 100); + V.hostage.skill.entertainment = Math.clamp(V.hostage.skill.entertainment + 5, 0, 100); + V.hostage.skill.anal = Math.clamp(V.hostage.skill.anal + 5, 0, 100); + V.hostage.skill.vaginal = Math.clamp(V.hostage.skill.vaginal + 5, 0, 100); + V.hostage.skill.whoring = Math.clamp(V.hostage.skill.whoring + 5, 0, 100); + V.hostage.fetishStrength = 65; + V.hostage.sexualFlaw = "none"; + V.hostage.behavioralFlaw = "none"; + V.hostage.behavioralQuirk = "cutting"; + V.hostage.sexualQuirk = "caring"; + r.push(`diligently reading the Kama Sutra and taking notes.`); + break; + case "Slave Professionalism": + V.hostage.trust += 5; + V.hostage.devotion += 5; + V.hostage.intelligenceImplant = Math.clamp(V.hostage.intelligenceImplant - 5, 0, 30); + V.hostage.intelligence = Math.clamp(V.hostage.intelligence - 10, -100, 100); + V.hostage.skill.oral = 0; + V.hostage.skill.entertainment = 0; + V.hostage.skill.anal = 0; + V.hostage.skill.vaginal = 0; + V.hostage.skill.whoring = 0; + V.hostage.skill.combat = 0; + V.hostage.makeup = 4; + V.hostage.nails = 5; + V.hostage.shoes = "heels"; + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.vagina = 3; + V.hostage.anus = 3; + V.hostage.energy += 5; + V.hostage.addict += 2; + V.hostage.hLength += 7; + V.hostage.fetishStrength = 65; + V.hostage.sexualFlaw = "none"; + V.hostage.behavioralFlaw = "none"; + V.hostage.behavioralQuirk = "confident"; + V.hostage.sexualQuirk = "perverted"; + r.push(`struggling to solve a puzzle to gain access to the extra large dildo cupboard.`); + break; + case "Petite Admiration": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 15; + V.hostage.counter.vaginal += 10; + V.hostage.counter.anal += 10; + V.hostage.behavioralFlaw = "none"; + V.hostage.sexualFlaw = "none"; + V.hostage.behavioralQuirk = "advocate"; + V.hostage.sexualQuirk = "romantic"; + V.hostage.fetishStrength = 65; + r.push(`beginning to fall in love with ${his} big friend.`); + break; + case "Statuesque Glorification": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 5; + V.hostage.counter.vaginal += 15; + V.hostage.counter.anal += 15; + V.hostage.behavioralFlaw = "none"; + V.hostage.sexualFlaw = "none"; + V.hostage.behavioralQuirk = "advocate"; + V.hostage.sexualQuirk = "caring"; + V.hostage.fetishStrength = 65; + r.push(`beginning to fall in love with ${his} little friend.`); + break; + default: + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.vaginal += 1; + V.hostage.fetishStrength = 65; + V.hostage.behavioralFlaw = "none"; + V.hostage.sexualFlaw = "none"; + V.hostage.behavioralQuirk = "confident"; + V.hostage.sexualQuirk = "caring"; + r.push(`eagerly getting ready to spend some time in the city.`); + } + } else if (V.rivalryDuration === 16) { + switch (V.rivalryFS) { + case "Racial Subjugationism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 40; + V.hostage.counter.vaginal += 40; + V.hostage.counter.anal += 20; + V.hostage.fetishStrength = 100; + r.push(`approaching and pulling ${his} ${V.arcologies[0].FSSubjugationistRace} girlfriends into a pre-sex embrace, a look of wild joy on ${his} face.`); + break; + case "Racial Supremacism": + V.hostage.trust += 5; + V.hostage.devotion += 5; + if (V.hostage.preg < 20 && V.seePreg !== 0) { + V.hostage.preg = 25; + V.hostage.pregType = 1; + V.hostage.pregKnown = 1; + V.hostage.pregWeek = V.hostage.preg; + WombImpregnate(V.hostage, V.hostage.pregType, 0, V.hostage.preg); + SetBellySize(V.hostage); + } + if (V.hostage.vagina < 4) { + V.hostage.vagina = 4; + } + if (V.hostage.anus < 4) { + V.hostage.anus = 4; + } + V.hostage.sexualFlaw = "self hating"; + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + V.hostage.fetishStrength = 100; + /* Make scars worse: */ + App.Medicine.Modification.addScourged(V.hostage); + r.push(`collapsing into ${his} rancid cot and curling into the fetal position${(V.seePreg !== 0) ? ` around ${his} pregnant belly` : ``}. ${He}'s audibly begging for someone, anyone, to save ${him}.`); + break; + case "Repopulation Focus": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 5; + V.hostage.counter.vaginal += 5; + V.hostage.counter.anal += 5; + V.hostage.counter.mammary += 5; + r.push(`convincing a fellow slave to give up ${hisU} fertility.`); + break; + case "Eugenics": + if (V.seeHyperPreg !== 1) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.preg = 31; + V.hostage.pregType = 8; + V.hostage.pregKnown = 1; + V.hostage.pregWeek = V.rivalryDuration; + WombImpregnate(V.hostage, V.hostage.pregType, 0, V.hostage.preg); + SetBellySize(V.hostage); + V.hostage.vagina = 4; + V.hostage.boobs += 100; + V.hostage.lactation = 1; + V.hostage.lactationDuration = 2; + V.hostage.counter.oral += 100; + V.hostage.counter.vaginal += 100; + V.hostage.counter.anal += 100; + V.hostage.counter.mammary += 100; + V.hostage.fetishStrength = 100; + V.hostage.sexualFlaw = "breeder"; + r.push(`resting in ${his} bed with ${his} master's head against ${his} full-term belly. ${He} appears to be genuinely happy.`); + } else { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.preg = 31; + V.hostage.pregType = 40; + V.hostage.pregKnown = 1; + V.hostage.pregWeek = V.rivalryDuration; + WombImpregnate(V.hostage, V.hostage.pregType, 0, V.hostage.preg); + SetBellySize(V.hostage); + V.hostage.vagina = 4; + V.hostage.boobs += 400; + V.hostage.lactation = 1; + V.hostage.lactationDuration = 2; + V.hostage.counter.oral += 100; + V.hostage.counter.vaginal += 100; + V.hostage.counter.anal += 100; + V.hostage.counter.mammary += 100; + V.hostage.fetishStrength = 100; + V.hostage.sexualFlaw = "breeder"; + V.hostage.bellySag = 2; + V.hostage.bellySagPreg = 2; + r.push(`orgasming lewdly from the obscene movements happening within ${his} straining womb. ${He} looks like ${he} wants this to never end.`); + } + break; + case "Gender Radicalism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.vaginal += 1; + V.hostage.fetishStrength = 100; + r.push(`embracing ${his} owner with quite the look of devotion on ${his} face.`); + break; + case "Gender Fundamentalism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.anus = 4; + V.hostage.counter.anal += 10; + if (V.seeDicks !== 0) { + V.hostage.dick = 3; + V.hostage.balls = 2; + V.hostage.scrotum = 1; + } + V.hostage.fetishStrength = 100; + V.hostage.sexualFlaw = "anal addict"; + r.push(`convincing a fellow slave that butt sex is best sex. ${He} turns around and shows off the enormous dildo shoved up ${his} ass.`); + break; + case "Paternalism": + V.hostage.trust += 5; + V.hostage.devotion += 5; + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + eyeSurgery(V.hostage, "both", "blind"); + V.hostage.earPiercing = 2; + V.hostage.nosePiercing = 2; + V.hostage.nipplesPiercing = 2; + V.hostage.lipsPiercing = 1; + V.hostage.vaginaPiercing = 1; + V.hostage.anusPiercing = 1; + V.hostage.clitPiercing = 1; + V.hostage.eyebrowPiercing = 2; + V.hostage.navelPiercing = 2; + V.hostage.corsetPiercing = 1; + V.hostage.areolaePiercing = 1; + V.hostage.tonguePiercing = 2; + V.hostage.lipsTat = "degradation"; + V.hostage.anusTat = "degradation"; + const seed = random(1, 100); + if (seed < 40) { + App.Medicine.Modification.addScar(V.hostage, "left breast", "burn", 2); + } else if (seed < 80) { + App.Medicine.Modification.addScar(V.hostage, "right breast", "burn", 2); + } else { + App.Medicine.Modification.addScar(V.hostage, "left breast", "burn", 2); + App.Medicine.Modification.addScar(V.hostage, "right breast", "burn", 2); + App.Medicine.Modification.addScar(V.hostage, "belly", "burn", 2); + } + /* Next scene will mention nasty surgical arm scars, but immediately amputate, so adding them here. */ + App.Medicine.Modification.addScar(V.hostage, "left upper arm", "surgical", 2); + App.Medicine.Modification.addScar(V.hostage, "right upper arm", "surgical", 2); + App.Medicine.Modification.addScar(V.hostage, "left thigh", "surgical", 2); + App.Medicine.Modification.addScar(V.hostage, "right thigh", "surgical", 2); + V.hostage.fetishStrength = 100; + r.push(`strapped to an operating table, eyes wide with terror, as a pair of syringes approach them.`); + break; + case "Degradationism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.vaginal += 1; + V.hostage.fetishStrength = 100; + r.push(`cheerfully talking about the future with ${his} owner. The video ends on ${him} asking for an`); + if (V.seePreg !== 0) { + r.push(`impregnation`); + } else { + r.push(`elaborate`); + } + r.push(`ceremony when they get married.`); + break; + case "Body Purism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.boobs += 2000; + V.hostage.boobsImplant += 2000; + if (V.hostage.boobsImplant > 10000) { + V.hostage.boobsImplantType = "hyper fillable"; + } + V.hostage.fetishStrength = 100; + V.hostage.sexualFlaw = "breast growth"; + r.push(`getting ${his} taut ${V.hostage.boobs}cc tits massaged by a pair of flat slaves. ${He} is rambling on about how much happier ${he} is with ${his} massive implants than when ${he} was flat like them.`); + break; + case "Transformation Fetishism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.vaginal += 1; + V.hostage.fetishStrength = 100; + r.push(`publicly showing off ${his} pure and flawless body, a look of complete joy on ${his} face.`); + break; + case "Youth Preferentialism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength = 100; + V.hostage.counter.oral += 10; + V.hostage.counter.vaginal += 10; + V.hostage.counter.anal += 10; + r.push(`blushing happily as ${his} MILF lover discusses their future marriage.`); + break; + case "Maturity Preferentialism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength = 100; + V.hostage.counter.oral += 10; + V.hostage.counter.vaginal += 10; + V.hostage.counter.anal += 10; + r.push(`blushing happily as ${he} discusses ${his} future marriage to ${his} young lover.`); + break; + case "Slimness Enthusiasm": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight = 50; + V.hostage.boobs += 1500; + V.hostage.butt = 7; + V.hostage.fetishStrength = 100; + V.hostage.sexualFlaw = "breast growth"; + r.push(`getting ${his} immobilizing ${V.hostage.boobs}cc breasts massaged by a pair of flat slaves. ${He} is rambling on about how much happier ${he} is with ${his} massive tits and ass than when ${he} was flat like them.`); + break; + case "Asset Expansionism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.vaginal += 1; + r.push(`publicly showing off ${his} thin, sleek body, a look of complete joy on ${his} face.`); + break; + case "Pastoralism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight = 0; + V.hostage.muscles = 75; + V.hostage.boobs = 400; + V.hostage.counter.vaginal += 1; + V.hostage.fetishStrength = 100; + r.push(`bench pressing a rather large dumbbell in a strong${woman} contest. ${He} is overjoyed when ${he} places first.`); + break; + case "Cummunism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight = 100; + V.hostage.boobs += 100; + V.hostage.butt = 6; + V.hostage.fetishStrength = 100; + V.hostage.sexualFlaw = "breast growth"; + r.push(`getting ${his} immobilizing ${V.hostage.boobs}cc breasts, massive ass, and cow-like body massaged by a trio of slim slaves. ${He} is rambling on about how much happier ${he} is with ${his} massive assets than when ${he} was thin like them.`); + break; + case "Physical Idealism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight = 100; + V.hostage.boobs += 100; + V.hostage.butt = 6; + V.hostage.fetishStrength = 100; + V.hostage.counter.vaginal += 40; + V.hostage.vagina = 4; + r.push(`giggling and flirting as ${his} flabby body is groped and fondled while ${his} weight is taken; ${his} stomach is so large you can't make out how many tallies adorn it any longer. "128 kilos, pretty big now, aren't we?"`); + switch (V.hostage.fetish) { + case "cumslut": + V.hostage.counter.oral += 70; + break; + case "buttslut": + V.hostage.counter.anal += 35; + V.hostage.anus = 3; + break; + case "boobs": + V.hostage.boobs += 100; + V.hostage.boobsImplant += 100; + if (V.hostage.boobsImplant > 2000) { + V.hostage.boobsImplantType = "advanced fillable"; + } + break; + case "pregnancy": + V.hostage.preg++; + V.hostage.pregKnown = 1; + V.hostage.pregWeek++; + SetBellySize(V.hostage); + break; + } + break; + case "Hedonistic Decadence": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight = 0; + V.hostage.muscles = 75; + V.hostage.boobs = 400; + V.hostage.counter.vaginal += 1; + V.hostage.fetishStrength = 100; + r.push(`bench pressing a rather large dumbbell in a strong${woman} contest. ${He} is overjoyed when ${he} places first.`); + break; + case "Chattel Religionism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.vaginal += 1; + V.hostage.fetishStrength = 100; + r.push(`chatting with a group of fresh slaves, explaining how nice it is to live in this arcology.`); + break; + case "Multiculturalism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + V.hostage.fetishStrength = 100; + V.hostage.sexualFlaw = "neglectful"; + r.push(`finishing a sermon how to achieve happiness. ${He} smiles at the camera and says it's not too late to convert.`); + break; + case "Intellectual Dependency": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 10; + V.hostage.counter.vaginal += 10; + V.hostage.counter.anal += 10; + V.hostage.intelligenceImplant = Math.clamp(V.hostage.intelligenceImplant + 2, 0, 30); + V.hostage.skill.oral = Math.clamp(V.hostage.skill.oral + 5, 0, 100); + V.hostage.skill.entertainment = Math.clamp(V.hostage.skill.entertainment + 5, 0, 100); + V.hostage.skill.anal = Math.clamp(V.hostage.skill.anal + 5, 0, 100); + V.hostage.skill.vaginal = Math.clamp(V.hostage.skill.vaginal + 5, 0, 100); + V.hostage.skill.whoring = Math.clamp(V.hostage.skill.whoring + 5, 0, 100); + V.hostage.fetishStrength = 100; + r.push(`giving a lesson to a group of fresh slaves on what is expected of them in this arcology.`); + break; + case "Slave Professionalism": + V.hostage.trust += 5; + V.hostage.devotion += 5; + V.hostage.intelligenceImplant = Math.clamp(V.hostage.intelligenceImplant - 5, 0, 30); + V.hostage.intelligence = Math.clamp(V.hostage.intelligence - 10, -100, 100); + V.hostage.counter.oral += 70; + V.hostage.counter.vaginal += 40; + V.hostage.counter.anal += 30; + V.hostage.energy += 5; + V.hostage.addict += 2; + V.hostage.fetishStrength = 100; + V.hostage.tonguePiercing = 1; + V.hostage.stampTat = "'Princess' is tattooed over ${his} rear."; + V.hostage.hLength += 7; + V.hostage.lips = Math.clamp(V.hostage.lips + 5, 0, 100); + r.push(`giggling and chatting with a group of fellow bimbos as they try to entice a quick fuck from passersby.`); + if (V.seePreg !== 0) { + V.hostage.preg = 8; + V.hostage.pregType = 1; + V.hostage.pregKnown = 1; + V.hostage.pregWeek = 8; + WombImpregnate(V.hostage, V.hostage.pregType, 0, V.hostage.preg); + SetBellySize(V.hostage); + r.push(`A very pregnant slut pokes at the curve of ${his} belly and declares ${him} preggo, to which ${he} waves it off as`); + r.push(Spoken(V.hostage, `"obviously having sucked too much dick."`)); + } + break; + case "Petite Admiration": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength = 100; + V.hostage.counter.oral += 15; + V.hostage.counter.vaginal += 7; + V.hostage.counter.anal += 7; + r.push(`blushing happily as ${his} giant lover discusses their future marriage.`); + break; + case "Statuesque Glorification": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength = 100; + V.hostage.counter.oral += 7; + V.hostage.counter.vaginal += 15; + V.hostage.counter.anal += 15; + r.push(`blushing happily as ${he} discusses ${his} future marriage to ${his} little lover.`); + break; + default: + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.vaginal += 1; + V.hostage.fetishStrength = 100; + r.push(`chatting with a group of fresh slaves, explaining how nice it is to live in this arcology.`); + } + } else if (V.rivalryDuration === 21) { + switch (V.rivalryFS) { + case "Racial Subjugationism": + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + r.push(`giving an interview. ${He} gushes over how great ${V.arcologies[0].FSSubjugationistRace} people are and how terrible it is that some people believe them barely human.`); + break; + case "Racial Supremacism": + if (V.hostage.preg < 35 && V.seePreg !== 0) { + V.hostage.preg = 32; + V.hostage.pregType = 1; + V.hostage.pregKnown = 1; + V.hostage.pregWeek = V.hostage.preg; + WombImpregnate(V.hostage, V.hostage.pregType, 0, V.hostage.preg); + SetBellySize(V.hostage); + } + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + V.hostage.lactation = 1; + V.hostage.lactationDuration = 2; + V.hostage.fetish = "mindbroken"; + V.hostage.fetishStrength = 10; + /* Make scars worse: */ + App.Medicine.Modification.addScourged(V.hostage); + App.Medicine.Modification.addScar(V.hostage, "left cheek", "generic", 3); + App.Medicine.Modification.addScar(V.hostage, "right cheek", "generic", 3); + App.Medicine.Modification.addScar(V.hostage, "left lower arm", "generic", 2); + App.Medicine.Modification.addScar(V.hostage, "right lower arm", "generic", 3); + r.push(`with a pair of slavers threatening`); + if (V.seePreg !== 0) { + r.push(`${his} pregnancy.`); + } else { + r.push(`${him}.`); + } + r.push(`${He} keeps blocking the blows, again and again, until ${he} can barely stay upright. With a final, brutal kick to the head, ${he} falls to the floor, unmoving. Several seconds later, ${he} struggles upright, a blank expression across ${his} bloodied face.`); + break; + case "Repopulation Focus": + V.hostage.counter.oral += 5; + V.hostage.counter.vaginal += 5; + V.hostage.counter.anal += 5; + V.hostage.counter.mammary += 5; + r.push(`giving an interview. ${He} gushes over how important it is for only the best of society to reproduce, and how it is an atrocity that some people bring so many wasted lives into being.`); + break; + case "Eugenics": + if (V.seeHyperPreg !== 1) { + V.hostage.preg = 1; + V.hostage.pregType = 8; + V.hostage.pregKnown = 1; + V.hostage.pregWeek = 1; + WombImpregnate(V.hostage, V.hostage.pregType, 0, V.hostage.preg); + SetBellySize(V.hostage); + V.hostage.vagina = 5; + if (V.hostage.counter.births < 1) { + V.hostage.counter.births = 1; + V.hostage.counter.birthsTotal += 1; + } + V.hostage.counter.oral += 100; + V.hostage.counter.vaginal += 100; + V.hostage.counter.anal += 100; + V.hostage.counter.mammary += 100; + V.hostage.bellySag = 2; + V.hostage.bellySagPreg = 2; + } else { + V.hostage.preg = 1; + V.hostage.pregType = 40; + V.hostage.pregKnown = 1; + V.hostage.pregWeek = 1; + WombImpregnate(V.hostage, V.hostage.pregType, 0, V.hostage.preg); + SetBellySize(V.hostage); + V.hostage.vagina = 5; + if (V.hostage.counter.births < 50) { + V.hostage.counter.births = 20; + V.hostage.counter.birthsTotal += 20; + } + V.hostage.counter.oral += 100; + V.hostage.counter.vaginal += 100; + V.hostage.counter.anal += 100; + V.hostage.counter.mammary += 100; + V.hostage.bellySag = 5; + V.hostage.bellySagPreg = 5; + } + r.push(`giving an interview. ${He} gushes over how important it is for women to conceive and carry as many children as they can, as well as how terrible it is that some people strip away a woman's most important purpose. Before ${he} can continue, ${his} water breaks and ${he} drops to the floor. You close the video in disgust of what's coming.`); + break; + case "Gender Radicalism": + V.hostage.counter.vaginal += 1; + if (V.seePreg !== 0) { + V.hostage.preg = 8; + V.hostage.pregType = 1; + V.hostage.pregKnown = 1; + V.hostage.pregWeek = 8; + WombImpregnate(V.hostage, V.hostage.pregType, 0, V.hostage.preg); + SetBellySize(V.hostage); + } + r.push(`giving an interview. ${He} gushes over how great it feels knowing that someone is always watching out for ${his} safety and health as a traditional ${woman}, as well as how terrible it is that some people want to blur the lines between the genders.`); + break; + case "Gender Fundamentalism": + V.hostage.counter.anal += 10; + if (V.seeDicks !== 0) { + V.hostage.dick = 4; + V.hostage.balls = 4; + V.hostage.scrotum = 2; + } + r.push(`giving an interview. ${He} gushes over how great it feels being fucked in the rear and how ${he} never has to worry about pregnancy that way. ${He} carries on about how terrible it is that some people want to deny people this great sensation.`); + break; + case "Paternalism": + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + removeLimbs(V.hostage, "all"); + V.hostage.earPiercing = 2; + V.hostage.nosePiercing = 2; + V.hostage.nipplesPiercing = 2; + V.hostage.lipsPiercing = 2; + V.hostage.vaginaPiercing = 2; + V.hostage.anusPiercing = 2; + V.hostage.clitPiercing = 2; + V.hostage.eyebrowPiercing = 2; + V.hostage.navelPiercing = 2; + V.hostage.corsetPiercing = 1; + V.hostage.areolaePiercing = 1; + V.hostage.tonguePiercing = 2; + V.hostage.fetish = "mindbroken"; + V.hostage.fetishStrength = 10; + const seed = random(1, 100); + if (seed < 40) { + App.Medicine.Modification.addScar(V.hostage, "anus", "burn", 2); + } else if (seed < 80) { + App.Medicine.Modification.addScar(V.hostage, "vagina", "burn", 2); + } else { + App.Medicine.Modification.addScar(V.hostage, "anus", "burn", 2); + App.Medicine.Modification.addScar(V.hostage, "vagina", "burn", 2); + App.Medicine.Modification.addScar(V.hostage, "left cheek", "burn", 2); + } + r.push(`strapped to an operating table, with surgical marks on ${his} bare arms and legs. ${His} face contorts into absolute horror as ${he} hears the running saw lowering towards ${his} right arm. As it makes contact, ${his} mouth opens wide in a silent scream, ceasing only once ${his} arm is severed completely. As it comes into contact with ${his} other arm, ${his} silent screams stop completely, ${his} mind having completely shattered. You end the video early, disgusted by what you just saw.`); + break; + case "Degradationism": + V.hostage.counter.vaginal += 1; + if (V.seePreg !== 0) { + V.hostage.preg = 14; + V.hostage.pregType = 1; + V.hostage.pregKnown = 1; + V.hostage.pregWeek = 14; + WombImpregnate(V.hostage, V.hostage.pregType, 0, V.hostage.preg); + SetBellySize(V.hostage); + } + r.push(`and ${his} owner at the altar during their wedding.`); + if (V.seePreg !== 0) { + r.push(`It seems ${he} couldn't wait, since ${his} belly already shows signs of an early pregnancy.`); + } + break; + case "Body Purism": + V.hostage.boobs = 50000; + V.hostage.boobsImplant = 45000; + V.hostage.boobsImplantType = "hyper fillable"; + r.push(`giving an interview. ${He} gushes over how great it feels being more silicone than ${girl} and how terrible it is that some people want to deny ${girl}s this pleasure.`); + break; + case "Transformation Fetishism": + V.hostage.counter.vaginal += 1; + r.push(`giving an interview. ${He} gushes over how great it feels being implant free and how terrible some people are to force inhumane implants into their slaves.`); + break; + case "Youth Preferentialism": + V.hostage.counter.oral += 20; + V.hostage.counter.vaginal += 20; + V.hostage.counter.anal += 20; + r.push(`giving an interview alongside ${his} older ${wife2}. ${He} gushes over how great it feels being in love and how, if some people had their way, ${he}'d have never gotten to experience this bliss.`); + break; + case "Maturity Preferentialism": + V.hostage.counter.oral += 20; + V.hostage.counter.vaginal += 20; + V.hostage.counter.anal += 20; + r.push(`giving an interview alongside ${his} young ${wife2}. ${He} gushes over how great it feels being in love and how, if some people had their way, ${he}'d have never gotten to experience this bliss.`); + break; + case "Slimness Enthusiasm": + V.hostage.boobs = 50000; + V.hostage.weight = 100; + V.hostage.butt = 9; + r.push(`giving an interview. ${He} gushes over how great it feels being more breast than ${girl} and how terrible it is that some people want to keep ${girl}s anorexic toothpicks.`); + break; + case "Asset Expansionism": + V.hostage.counter.vaginal += 1; + r.push(`giving an interview. ${He} gushes over how great it feels being more thin and fit and how terrible it is that some people want to keep ${girl}s nothing more than bloated cows.`); + break; + case "Pastoralism": + V.hostage.muscles = 100; + V.hostage.counter.vaginal += 1; + r.push(`giving an interview. ${He} gushes over how great it feels being a chiseled goddess and how terrible it is that some people want to keep ${girl}s as obese${(V.seePreg !== 0) ? `, pregnant,` : ``} milky cows.`); + break; + case "Cummunism": + V.hostage.boobs = 24300; + V.hostage.weight = 100; + r.push(`giving an interview. ${He} gushes over how great it feels being so soft and how happy ${he} is to be feeding ${his} people. ${He} continues with how terrible it is that some people want slaves to be hard and sinewy instead of being motherly providers.`); + break; + case "Physical Idealism": + V.hostage.weight = 150; + V.hostage.boobs += 100; + V.hostage.butt = 6; + V.hostage.fetishStrength = 100; + V.hostage.counter.vaginal += 60; + V.hostage.vagina = 5; + r.push(`moaning as ${he} shoves food into ${his} mouth with one hand and fondles ${his} lover's body with the other. "My apologies. I don't have ${his} weight for you this week. You see, ${he} broke the scale when ${he} stepped on it. Well, I suppose that tells you plenty. Though I have another surprise for you! ${SlaveFullName(V.hostage)}, would you like to tell 'em yourself?" ${He} shouts, spewing crumbs everywhere,`); + switch (V.hostage.fetish) { + case "submissive": + r.push(Spoken(V.hostage, `"I haven't orgasmed all week, but I've made sure to bring every one of my lovers to climax! That's what I love most, seeing the look of satisfaction on their faces as they blow their loads deep into me!"`)); + V.hostage.sexualFlaw = "neglectful"; + break; + case "cumslut": + r.push(Spoken(V.hostage, `"I suck dicks all day and have cum mixed in with my many meals but it still isn't enough! If I could, I'd drink cum till I burst!"`)); + V.hostage.counter.oral += 70; + V.hostage.sexualFlaw = "cum addict"; + break; + case "humiliation": + r.push(Spoken(V.hostage, `"I love taking part in orgies and being the center of attention! You can't possible know what it feels like to pleasure fifteen guys at once!"`)); + V.hostage.sexualFlaw = "attention whore"; + break; + case "buttslut": + r.push(Spoken(V.hostage, `"I love it up the butt! I get assfucked all day long and when I don't have a dick in my rear, I have the biggest dildo we've got rammed up it!"`)); + V.hostage.counter.anal += 45; + V.hostage.anus = 4; + V.hostage.sexualFlaw = "anal addict"; + break; + case "boobs": + r.push(Spoken(V.hostage, `"I love my big boobs and get off watching them get bigger!"`)); + V.hostage.boobs += 100; + V.hostage.boobsImplant += 100; + if (V.hostage.boobsImplant > 2000) { + V.hostage.boobsImplantType = "advanced fillable"; + } + V.hostage.sexualFlaw = "breast growth"; + break; + case "sadist": + r.push(Spoken(V.hostage, `"Nothing turns me on more than crushing my lovers' nuts! That or maybe whipping or cutting them... Or anything that makes them bleed..."`)); + V.hostage.sexualFlaw = "malicious"; + break; + case "masochist": + r.push(Spoken(V.hostage, `"I love just stuffing my face with the fattiest foods around! I'm going to have a heart attack and I can't wait since I am such a disgusting slut and I deserve this!"`)); + V.hostage.sexualFlaw = "self hating"; + break; + case "dom": + r.push(Spoken(V.hostage, `"Nothing turns me on more than forcing new slaves to service me! I love their reactions as they struggle against me!"`)); + V.hostage.sexualFlaw = "abusive"; + break; + case "pregnancy": + r.push(Spoken(V.hostage, `"I'm preggers you know! V.hostage.preg weeks along now and you know what? I always want to be pregnant! Always!"`)); + V.hostage.preg++; + V.hostage.pregKnown = 1; + V.hostage.pregWeek++; + SetBellySize(V.hostage); + V.hostage.sexualFlaw = "breeder"; + break; + } + break; + case "Hedonistic Decadence": + V.hostage.muscles = 100; + V.hostage.counter.vaginal += 1; + r.push(`giving an interview. ${He} gushes over how great it feels being a chiseled goddess and how terrible it is that some people want to keep ${girl}s obese, slovenly wastes of flesh.`); + break; + case "Chattel Religionism": + V.hostage.counter.vaginal += 1; + r.push(`giving an interview. ${He} gushes over how great it is to experience all manners of class and culture, both physically and spiritually.`); + break; + case "Multiculturalism": + V.hostage.counter.oral += 100; + V.hostage.counter.vaginal += 100; + V.hostage.counter.anal += 100; + V.hostage.counter.mammary += 100; + r.push(`giving a public sermon. ${He} declares that if it would save the nonbelievers, ${he} would gladly take every one of their dicks into ${his} body; at once, if ${he} were able to.`); + break; + case "Intellectual Dependency": + V.hostage.counter.oral += 10; + V.hostage.counter.vaginal += 10; + V.hostage.counter.anal += 10; + V.hostage.intelligenceImplant = 30; + V.hostage.skill.oral = 100; + V.hostage.skill.entertainment = 100; + V.hostage.skill.anal = 100; + V.hostage.skill.vaginal = 100; + V.hostage.skill.whoring = 100; + r.push(`sealing a business deal for ${his} owner. Buy the end of the meeting, the client is thoroughly exhausted from ${his} skilled 'negotiations' and eager to listen to the terms entrusted to ${him}.`); + break; + case "Slave Professionalism": + V.hostage.intelligenceImplant = 0; + V.hostage.intelligence = -100; + V.hostage.counter.oral += 100; + V.hostage.counter.vaginal += 100; + V.hostage.counter.anal += 100; + V.hostage.energy = 100; + V.hostage.lips = Math.clamp(V.hostage.lips + 5, 0, 100); + if (V.hostage.preg > 0) { + V.hostage.preg++; + V.hostage.pregWeek++; + SetBellySize(V.hostage); + } + V.hostage.sexualFlaw = "attention whore"; + V.hostage.hLength += 7; + V.hostage.career = "a bimbo"; + r.push(`taking part in a giant orgy. Several attempts are made to get ${his} attention, but ${his} body is ruled by ${his} libido and ${he} is deaf to the world. The video is several hours long.`); + break; + case "Petite Admiration": + V.hostage.counter.oral += 40; + V.hostage.counter.vaginal += 20; + V.hostage.counter.anal += 20; + r.push(`giving an interview alongside ${his} twice ${his} size ${wife2}. ${He} gushes over how great it feels being in love and how, if some people had their way, ${he}'d have never gotten to experience this bliss.`); + break; + case "Statuesque Glorification": + V.hostage.counter.oral += 10; + V.hostage.counter.vaginal += 30; + V.hostage.counter.anal += 30; + r.push(`giving an interview alongside ${his} half ${his} size ${wife2}. ${He} gushes over how great it feels being in love and how, if some people had their way, ${he}'d have never gotten to experience this bliss.`); + break; + default: + V.hostage.counter.vaginal += 1; + r.push(`giving an interview. ${He} gushes over how great it is to experience all manners of class and culture, both physically and spiritually.`); + } + } else if (V.rivalryDuration >= 30) { + V.hostageAnnounced = 0; + switch (V.rivalryFS) { + case "Racial Subjugationism": + r.push(`"Looking for ${SlaveFullName(V.hostage)}? Too bad, I couldn't bear to think of you ever getting your rotten little hands on ${him}, so I sent ${him} and ${his} lovers someplace far away. Someplace you'll never find them. Bet tha"`); + break; + case "Racial Supremacism": + r.push(`"Looking for ${SlaveFullName(V.hostage)} ? Too bad, the poor bitch died`); + if (V.seePreg !== 0) { + r.push(`trying to give birth to ${his} baby.`); + } else { + r.push(`from having too much 'fun' with ${his} clients.`); + } + r.push(`We had lots of room in the clinic too, but slaves like ${him} aren't worth the expenses, you know? I should find some more people you knew, keep our little game goi"`); + break; + case "Repopulation Focus": + r.push(`"Looking for ${SlaveFullName(V.hostage)} ? Too bad, I couldn't bear to think of you ever getting your rotten little hands on ${him}, so I sent ${him} far away. Someplace you'll never find ${him}. Bet tha"`); + break; + case "Eugenics": + r.push(`"Looking for ${SlaveFullName(V.hostage)} ? Too bad, I couldn't bear to think of you ever getting your rotten little hands on ${him}, so I sent ${him} far away. Someplace you'll never find ${him}. Bet tha"`); + break; + case "Gender Radicalism": + r.push(`"Looking for ${SlaveFullName(V.hostage)} ? Too bad, I couldn't bear to think of you ever getting your rotten little hands on ${him}, so I sent ${him} far away. I'll miss ${him}, of course, but there is no way I'd let you have ${him}. Bet that piss"`); + break; + case "Gender Fundamentalism": + r.push(`"Looking for ${SlaveFullName(V.hostage)} ? Too bad, ${he} took a dick a little too big for ${his} ass and ruined ${his} sphincter. ${He}'s off, someplace far away, recovering. But I'll never tell you where, bet that piss"`); + break; + case "Paternalism": + r.push(`"Looking for ${SlaveFullName(V.hostage)} ? Too bad, ${he} got kicked around just a little too much. We had lots of fun with ${him}, before ${he} broke of course...Say, do you have anyone else you love, or even were familiar with? I should acquire them, keep our little game goi"`); + break; + case "Degradationism": + r.push(`"Looking for ${SlaveFullName(V.hostage)} ? Too bad, I couldn't bear to think of you ever getting your rotten little hands on ${him}, so I sent ${him} far away. I'll miss ${him}, of course, but there is no way I'd let you have ${him}. I'll keep ${him} saf"`); + break; + case "Body Purism": + r.push(`"Looking for ${SlaveFullName(V.hostage)} ? Too bad, apparently implants can be too big. ${His} breasts literally popped, couldn't save ${him} though. Definitely going to miss playing with those balloons. I should hunt down more people you knew, keep our little game goi"`); + break; + case "Transformation Fetishism": + r.push(`"Looking for ${SlaveFullName(V.hostage)} ? Too bad, I couldn't bear to think of you ever getting your rotten little hands on ${him}, so I sent ${him} far away. Someplace you'll never find ${him}. Bet tha"`); + break; + case "Youth Preferentialism": + r.push(`"Looking for ${SlaveFullName(V.hostage)} ? Too bad, I couldn't bear to think of you ever getting your rotten little hands on ${him}, so I sent ${him} and ${his} lover someplace far away. Someplace you'll never find them. Bet tha"`); + break; + case "Maturity Preferentialism": + r.push(`"Looking for ${SlaveFullName(V.hostage)} ? Too bad, I couldn't bear to think of you ever getting your rotten little hands on ${him}, so I sent ${him} and ${his} lover someplace far away. Someplace you'll never find them. Bet tha"`); + break; + case "Slimness Enthusiasm": + r.push(`"Looking for ${SlaveFullName(V.hostage)} ? Too bad, apparently those growth drugs have quite the side effects.Pretty much had cancer everywhere.Definitely going to miss playing with those milkbags, though.I should hunt down more people you knew, keep our little game goi"`); + break; + case "Asset Expansionism": + r.push(`"Looking for ${SlaveFullName(V.hostage)} ? Too bad, I couldn't bear to think of you ever getting your rotten little hands on ${him}, so I sent ${him} far away. Someplace you'll never find ${him}. Bet tha"`); + break; + case "Pastoralism": + r.push(`"Looking for ${SlaveFullName(V.hostage)} ? Too bad, I couldn't bear to think of you ever getting your rotten little hands on ${him}, so I sent ${him} far away. I'll miss ${him}, of course, but there is no way I'd let you have ${him}. Bet that piss"`); + break; + case "Physical Idealism": + r.push(`"Looking for ${SlaveFullName(V.hostage)} ? Too bad, apparently being that fat isn't good for your heart, who knew? Definitely going to miss playing with those folds; ${he} jiggled so much when I fucked ${him}. I should hunt down more people you knew, fatten them up, keep our little game goi"`); + break; + case "Hedonistic Decadence": + r.push(`"Looking for ${SlaveFullName(V.hostage)} ? Too bad, I couldn't bear to think of you ever getting your rotten little hands on ${him}, so I sent ${him} far away. I'll miss ${him}, of course, but there is no way I'd let you have ${him}. Bet that piss"`); + break; + case "Chattel Religionism": + r.push(`"Looking for ${SlaveFullName(V.hostage)} ? Too bad, I couldn't bear to think of you ever getting your rotten little hands on ${him}, so I sent ${him} far away. Someplace you'll never find ${him}. Bet tha"`); + break; + case "Multiculturalism": + r.push(`"Looking for ${SlaveFullName(V.hostage)} ? Too bad, ${he} decided to martyr ${himself} for your arcology's salvation. Got fucked till ${his} body gave out. Of course I enjoyed ${him} in ${his} final moments, and don't worry, ${he} died smiling.I should hunt down more people you knew, keep our little game goi"`); + break; + case "Intellectual Dependency": + r.push(`"Looking for ${SlaveFullName(V.hostage)} ? Too bad, ${he} ran the math and determined that the odds of me keeping ${him} through this were too low and that ${he} should go into hiding until it's safe to come back. ${He}'s a well trained ${girl} now, so I trust ${him}, and even if I did lose this war, it'd still be worth taking ${his} advice just to deny you your prize. Bet tha"`); + break; + case "Slave Professionalism": + r.push(`"Looking for ${SlaveFullName(V.hostage)} ? Too bad, bitch was so dumb ${he} couldn't understand the warning signs, rushed down some slick stairs for a fuck and broke ${his} neck. ${He} was fun, no denying that. Died the way ${he} lived, thinking of sucking cock. Not unlike you, act"`); + break; + case "Petite Admiration": + r.push(`"Looking for ${SlaveFullName(V.hostage)} ? Too bad, I couldn't bear to think of you ever getting your rotten little hands on ${him}, so I sent ${him} and ${his} lover someplace far away. Someplace you'll never find them. Bet tha"`); + break; + case "Statuesque Glorification": + r.push(`"Looking for ${SlaveFullName(V.hostage)} ? Too bad, I couldn't bear to think of you ever getting your rotten little hands on ${him}, so I sent ${him} and ${his} lover someplace far away. Someplace you'll never find them. Bet tha"`); + break; + default: + r.push(`"Looking for ${SlaveFullName(V.hostage)} ? Too bad, I couldn't bear to think of you ever getting your rotten little hands on ${him}, so I sent ${him} far away. Someplace you'll never find ${him}. Bet tha"`); + } + r.push(`- You end the call.`); + } else { + const hostageAction = []; + switch (V.rivalryFS) { + case "Racial Subjugationism": + if (V.rivalryDuration <= 5) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 10; + V.hostage.counter.vaginal += 10; + V.hostage.counter.anal += 10; + hostageAction.push(`struggling to escape the grasp of a pair of ${V.arcologies[0].FSSubjugationistRace} ${girlU}s.`); + hostageAction.push(`struggling to avoid giving an ${V.arcologies[0].FSSubjugationistRace} ${girlU} oral.`); + hostageAction.push(`screaming as ${he} gets fucked by an ${V.arcologies[0].FSSubjugationistRace} ${girlU}.`); + } else if (V.rivalryDuration <= 10) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.oral += 10; + V.hostage.counter.vaginal += 10; + V.hostage.counter.anal += 10; + hostageAction.push(`crying gently while a pair of ${V.arcologies[0].FSSubjugationistRace} ${girlU}s fondle ${him}.`); + hostageAction.push(`reluctantly giving an ${V.arcologies[0].FSSubjugationistRace} ${girlU} oral.`); + hostageAction.push(`crying as ${he} gets fucked by an ${V.arcologies[0].FSSubjugationistRace} ${girlU}.`); + } else if (V.rivalryDuration <= 15) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.oral += 20; + V.hostage.counter.vaginal += 20; + V.hostage.counter.anal += 20; + hostageAction.push(`fooling around with a pair of ${V.arcologies[0].FSSubjugationistRace} ${girlU}s.`); + hostageAction.push(`giving an ${V.arcologies[0].FSSubjugationistRace} ${girlU} oral.`); + hostageAction.push(`panting as ${he} gets fucked by an ${V.arcologies[0].FSSubjugationistRace} ${girlU}.`); + } else if (V.rivalryDuration <= 20) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 40; + V.hostage.counter.vaginal += 40; + V.hostage.counter.anal += 20; + hostageAction.push(`having a threesome with a pair of ${V.arcologies[0].FSSubjugationistRace} ${girlU}s.`); + hostageAction.push(`eagerly giving an ${V.arcologies[0].FSSubjugationistRace} ${girlU} oral.`); + hostageAction.push(`moaning as ${he} gets fucked by an ${V.arcologies[0].FSSubjugationistRace} ${girlU}.`); + } else { + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + hostageAction.push(`making love to ${his} favorite two ${V.arcologies[0].FSSubjugationistRace} ${girlU}s.`); + hostageAction.push(`enthusiastically giving an ${V.arcologies[0].FSSubjugationistRace} ${girlU} oral.`); + hostageAction.push(`enthusiastically wiggling ${his} rear as ${he} gets fucked by an ${V.arcologies[0].FSSubjugationistRace} ${girlU}.`); + } + break; + case "Racial Supremacism": + if (V.rivalryDuration <= 5) { + V.hostage.trust += 5; + V.hostage.devotion += 5; + V.hostage.weight -= 5; + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + hostageAction.push(`desperately struggling in a stockade, alongside several other ${V.arcologies[0].FSSupremacistRace} slaves, while a man tries to get it in ${him}.`); + hostageAction.push(`struggling against ${his} bindings in a line of ${V.arcologies[0].FSSupremacistRace} slaves, having ${his} bruised holes checked.`); + hostageAction.push(`weeping as a dispassionate slave assayer goes down a line of ${V.arcologies[0].FSSupremacistRace} slaves, reciting prices.`); + } else if (V.rivalryDuration <= 10) { + V.hostage.trust += 5; + V.hostage.devotion += 5; + V.hostage.weight -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + hostageAction.push(`meekly taking it in the cunt by a man while bound in a stockade alongside several other ${V.arcologies[0].FSSupremacistRace} girls.`); + hostageAction.push(`tied up with a defeated look in a line of ${V.arcologies[0].FSSupremacistRace} slaves, having ${his} stretched holes checked.`); + hostageAction.push(`crying as a dispassionate slave assayer goes down a line of ${V.arcologies[0].FSSupremacistRace} slaves, reciting prices.`); + } else if (V.rivalryDuration <= 15) { + V.hostage.trust += 5; + V.hostage.devotion += 5; + V.hostage.weight -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + if (V.seePreg !== 0) { + hostageAction.push(`moaning slightly as a man pounds ${his} pussy. ${His} belly has a notable roundness to it, most likely the spawn of a non-${V.arcologies[0].FSSupremacistRace} man.`); + hostageAction.push(`tied up with a downtrodden look in a line of ${V.arcologies[0].FSSupremacistRace} slaves, having ${his} new pregnancy examined.`); + } else { + hostageAction.push(`moaning slightly as a man pounds ${his} pussy.`); + hostageAction.push(`tied up with a downtrodden look in a line of ${V.arcologies[0].FSSupremacistRace} slaves, having ${his} overworked holes examined.`); + } + hostageAction.push(`silently staring at ${his} feet as a dispassionate slave assayer goes down a line of ${V.arcologies[0].FSSupremacistRace} slaves, reciting prices.`); + } else if (V.rivalryDuration <= 20) { + V.hostage.trust += 5; + V.hostage.devotion += 5; + V.hostage.weight -= 5; + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + if (V.seePreg !== 0) { + hostageAction.push(`barely caring as a non-${V.arcologies[0].FSSupremacistRace} man pounds ${his} pregnant pussy. ${His} belly is noticeably distended by a non-${V.arcologies[0].FSSupremacistRace} baby.`); + hostageAction.push(`nearly comatose in a line of ${V.arcologies[0].FSSupremacistRace} slaves, having ${his} pregnancy and destroyed holes examined`); + } else { + hostageAction.push(`barely caring as a non-${V.arcologies[0].FSSupremacistRace} man pounds ${his} overused holes.`); + hostageAction.push(`nearly comatose in a line of ${V.arcologies[0].FSSupremacistRace} slaves, having ${his} destroyed holes examined`); + } + hostageAction.push(`standing silently as a dispassionate slave assayer goes down a line of ${V.arcologies[0].FSSupremacistRace} slaves, reciting prices.`); + } else { + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + if (V.seePreg !== 0) { + hostageAction.push(`blankly getting pounded by several non-${V.arcologies[0].FSSupremacistRace} men as they fondle ${his} breasts, butt, and full-term pregnancy.`); + hostageAction.push(`blankly standing in a line of ${V.arcologies[0].FSSupremacistRace} slaves, having ${his} advanced pregnancy and broken holes examined.`); + } else { + hostageAction.push(`blankly getting pounded by several non-${V.arcologies[0].FSSupremacistRace} men as they fondle ${his} breasts and butt.`); + hostageAction.push(`blankly standing in a line of ${V.arcologies[0].FSSupremacistRace} slaves, having ${his} broken holes examined.`); + } + hostageAction.push(`blankly standing in place as a dispassionate slave assayer goes down a line of ${V.arcologies[0].FSSupremacistRace} slaves, reciting prices.`); + } + break; + case "Repopulation Focus": + if (V.rivalryDuration <= 5) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 5; + V.hostage.counter.vaginal += 5; + V.hostage.counter.anal += 5; + V.hostage.counter.mammary += 5; + hostageAction.push(`desperately trying to avoid reading the reports on pregnancy in your arcology.`); + hostageAction.push(`crying while gently rubbing ${his} infertile stomach.`); + hostageAction.push(`sobbing as an autosurgery reads out the details of ${his} infertility.`); + } else if (V.rivalryDuration <= 10) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 5; + V.hostage.counter.vaginal += 5; + V.hostage.counter.anal += 5; + V.hostage.counter.mammary += 5; + hostageAction.push(`carefully reading the reports on pregnancy in your arcology.`); + hostageAction.push(`staring at ${his} midriff, contemplating why someone would take ${his} fertility away.`); + hostageAction.push(`pondering the health benefits being given to ${him}.`); + } else if (V.rivalryDuration <= 15) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 5; + V.hostage.counter.vaginal += 5; + V.hostage.counter.anal += 5; + V.hostage.counter.mammary += 5; + hostageAction.push(`gently crying while reading the reports on pregnancy in your arcology.`); + hostageAction.push(`relaxing, knowing ${he} will never deal with menstruation again.`); + hostageAction.push(`accepting that ${his} body will never be ruined by pregnancy.`); + } else if (V.rivalryDuration <= 20) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 5; + V.hostage.counter.vaginal += 5; + V.hostage.counter.anal += 5; + V.hostage.counter.mammary += 5; + hostageAction.push(`praying for the well-being of the pregnant women in your arcology.`); + hostageAction.push(`playing with ${his} owner without worry, seeing as ${he} can't get pregnant.`); + hostageAction.push(`happy that ${his} body will never be ruined by pregnancy.`); + } else { + V.hostage.counter.oral += 5; + V.hostage.counter.vaginal += 5; + V.hostage.counter.anal += 5; + V.hostage.counter.mammary += 5; + hostageAction.push(`actively reading a report to crowd about the dangers of pregnancy, using your arcology as an example.`); + hostageAction.push(`running ${his} fingers across ${his} tight belly with a smile, knowing it will never be ruined.`); + hostageAction.push(`celebrating that ${his} body will never be ruined by a child.`); + } + break; + case "Eugenics": + if (V.rivalryDuration <= 5) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + if (V.seeHyperPreg !== 1) { + hostageAction.push(`weeping in ${his} restraints as a crowd of a dozen criminals line up to fuck ${his} fertile womb pregnant.`); + hostageAction.push(`crying at the results of a pregnancy test.`); + hostageAction.push(`sobbing as ${he} tries to coax the cum out of ${his} womb.`); + } else { + hostageAction.push(`weeping in ${his} restraints as a crowd of a dozen criminals line up to fuck ${his} fertile womb pregnant.`); + hostageAction.push(`weeping at the results of a pregnancy test.`); + hostageAction.push(`sobbing as ${he} tries to coax the cum out of ${his} womb.`); + } + } else if (V.rivalryDuration <= 10) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + if (V.seeHyperPreg !== 1) { + hostageAction.push(`reluctantly fucking a man while he rubs ${his} swollen belly.`); + hostageAction.push(`cringing at a report of the number of babies ${he} is carrying.`); + hostageAction.push(`crying as ${he} cradles ${his} unwelcome pregnancy.`); + } else { + hostageAction.push(`reluctantly orgasming as ${he} is taken doggystyle, ${his} full pregnancy brushing the floor under ${him}.`); + hostageAction.push(`cringing at a report of the obscene number of babies stretching ${his} womb.`); + hostageAction.push(`crying as ${he} cradles ${his} full-sized pregnancy.`); + } + } else if (V.rivalryDuration <= 15) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.boobs += 50; + V.hostage.lactation = 1; + V.hostage.lactationDuration = 2; + V.hostage.counter.oral += 100; + V.hostage.counter.vaginal += 100; + V.hostage.counter.anal += 100; + V.hostage.counter.mammary += 100; + if (V.seeHyperPreg !== 1) { + hostageAction.push(`moaning gently as ${he} rides a man, cowgirl style, as he rubs ${his} pregnant belly.`); + hostageAction.push(`smilingly slightly at an ultrasound of ${his} womb.`); + hostageAction.push(`doing yoga to prepare ${his} body for childbirth.`); + } else { + hostageAction.push(`moaning gently as ${he} rides a man completely obscured by ${his} enormous pregnancy.`); + hostageAction.push(`smilingly slightly seeing ${his} many babies via ultrasound.`); + hostageAction.push(`doing yoga with helpers to prepare ${his} bloated body for mass childbirth.`); + } + } else if (V.rivalryDuration <= 20) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.boobs += 50; + V.hostage.lactation = 1; + V.hostage.lactationDuration = 2; + V.hostage.counter.oral += 100; + V.hostage.counter.vaginal += 100; + V.hostage.counter.anal += 100; + V.hostage.counter.mammary += 100; + if (V.seeHyperPreg !== 1) { + hostageAction.push(`enthusiastically taking part in an orgy centered around ${his} huge pregnant belly.`); + hostageAction.push(`happily letting ${his} owner fawn over ${his} big belly.`); + hostageAction.push(`gleefully rubbing ${his} big pregnant belly with oils to prevent stretch marks.`); + } else { + hostageAction.push(`getting brutally fucked over ${his} own gigantic pregnant belly and loving every moment of it.`); + hostageAction.push(`happily letting ${his} owner fawn over ${his} immense belly and giggling with every kick ${his} many children make in response.`); + hostageAction.push(`giggling as several slaves slather ${his} belly with creams to prevent stretch marks.`); + } + } else { + V.hostage.boobs += 50; + V.hostage.lactation = 1; + V.hostage.lactationDuration = 2; + V.hostage.counter.oral += 100; + V.hostage.counter.vaginal += 100; + V.hostage.counter.anal += 100; + V.hostage.counter.mammary += 100; + if (V.seeHyperPreg !== 1) { + hostageAction.push(`happily rubbing ${his} cum filled belly, eager for ${his} next pregnancy to take.`); + hostageAction.push(`eagerly checking a pregnancy test before dropping it sadly.`); + hostageAction.push(`injecting cum into ${his} vagina, hoping to get pregnant again sooner.`); + } else { + hostageAction.push(`happily rubbing ${his} bloated belly, eager for ${his} new pregnancy to get bigger.`); + hostageAction.push(`eagerly researching ways ${he} can always be pregnant.`); + hostageAction.push(`begging ${his} master to get ${him} even more pregnant this time.`); + } + } + break; + case "Gender Radicalism": + if (V.rivalryDuration <= 5) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + hostageAction.push(`being dragged along by ${his} owner on their rounds around their arcology.`); + hostageAction.push(`being forced into a pretty dress as to not embarrass ${his} owner, though ${his} tantrum will do just that.`); + hostageAction.push(`viciously slapping ${his} owner's hand away.`); + } else if (V.rivalryDuration <= 10) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.vaginal += 1; + hostageAction.push(`reluctantly following ${his} owner along on their rounds around their arcology.`); + hostageAction.push(`reluctantly allowing ${himself} to be dressed to present a good appearance alongside ${his} owner.`); + hostageAction.push(`reluctantly holding ${his} owner's hand.`); + } else if (V.rivalryDuration <= 15) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.vaginal += 1; + V.hostage.fetishStrength = 65; + hostageAction.push(`politely accompanying ${his} owner on their rounds around their arcology.`); + hostageAction.push(`allowing ${himself} to be dressed to present a good appearance alongside ${his} owner.`); + hostageAction.push(`holding ${his} owner's hand.`); + } else if (V.rivalryDuration <= 20) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.vaginal += 1; + hostageAction.push(`happily accompanying ${his} owner on their rounds around their arcology.`); + hostageAction.push(`happily allowing ${himself} to be dressed to present a good appearance alongside ${his} owner.`); + hostageAction.push(`happily holding ${his} owner's hand.`); + } else { + V.hostage.counter.vaginal += 1; + if (V.seePreg !== 0) { + hostageAction.push(`happily accompanying ${his} owner on their rounds around their arcology, ${his} hand resting on ${his} gently rounded stomach.`); + hostageAction.push(`carefully getting ${himself} dressed to present a good appearance alongside ${his} owner, paying special attention to ${his} swollen midriff.`); + hostageAction.push(`happy with ${his} owner's arm around ${his} waist.`); + } else { + hostageAction.push(`happily accompanying ${his} owner on their rounds around their arcology, his arm around ${his} waist.`); + hostageAction.push(`carefully getting ${himself} dressed to present a good appearance alongside ${his} owner.`); + hostageAction.push(`happy with ${his} owner's arm around ${him}.`); + } + } + break; + case "Gender Fundamentalism": + if (V.rivalryDuration <= 5) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.anal += 10; + hostageAction.push(`struggling not to orgasm to the dick up ${his} ass.`); + hostageAction.push(`screaming in terror as a hot shaft slips into ${his} rectum.`); + hostageAction.push(`crying in the shower as ${he} attempts to soothe ${his} throbbing rectum.`); + } else if (V.rivalryDuration <= 10) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.anal += 10; + hostageAction.push(`reluctantly pleasuring a man with ${his} ass.`); + hostageAction.push(`groaning in discomfort as yet another dick slides into ${his} ass.`); + hostageAction.push(`groaning in the shower as ${he} soothes ${his} sore ass.`); + } else if (V.rivalryDuration <= 15) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.anal += 10; + if (V.seeDicks !== 0) { + hostageAction.push(`enjoying a hard anal pounding, ${his} tiny new penis swinging from the thrusts.`); + hostageAction.push(`letting off a moan as a penis slides into ${his} asspussy, ${his} tiny new penis trying to get hard.`); + hostageAction.push(`cleaning ${his} rear while fondling ${his} asspussy, ${his} other hand teasing ${his} new tiny penis.`); + } else { + hostageAction.push(`enjoying a hard anal pounding.`); + hostageAction.push(`letting off a moan as a penis slides into ${his} asspussy.`); + hostageAction.push(`cleaning ${his} rear while fondling ${his} asspussy.`); + } + } else if (V.rivalryDuration <= 20) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.anal += 10; + if (V.seeDicks !== 0) { + hostageAction.push(`orgasming immodestly to a hard anal pounding, ${his} erect penis cumming across ${his} belly.`); + hostageAction.push(`moaning lewdly as a huge dick slides up ${his} asspussy, ${his} erect penis bumping into ${his} belly.`); + hostageAction.push(`seeing how many fingers ${he} can fit into ${his} ass as ${he} showers, while teasing ${his} erect dick with the other hand.`); + } else { + hostageAction.push(`orgasming immodestly to a hard anal pounding.`); + hostageAction.push(`moaning lewdly as a huge dick slides up ${his} asspussy.`); + hostageAction.push(`seeing how many fingers ${he} can fit into ${his} ass as ${he} showers.`); + } + } else { + V.hostage.counter.anal += 10; + if (V.seeDicks !== 0) { + hostageAction.push(`happily taking two dicks at once in ${his} blown out anus, while stroking ${his} rock hard cock.`); + hostageAction.push(`getting assfucked, ${his} rock-hard cock dribbling precum everywhere. ${He} gasps with delight as ${he} feels a second hot shaft slide inside ${his} asspussy next to the first.`); + hostageAction.push(`fisting ${his} own ass in the shower, and jacking off to the prostrate stimulation. ${He} gasps with delight as an orgasm wracks ${his} body.`); + } else { + hostageAction.push(`happily taking two dicks at once in ${his} blown out anus.`); + hostageAction.push(`getting assfucked. ${He} gasps with delight as ${he} feels a second hot shaft slide inside ${his} asspussy next to the first.`); + hostageAction.push(`fisting ${his} own ass in the shower. ${He} gasps with delight as an orgasm wracks ${his} body.`); + } + } + break; + case "Paternalism": + if (V.rivalryDuration <= 5) { + V.hostage.trust += 5; + V.hostage.devotion += 5; + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + if (V.seePee === 1) { + hostageAction.push(`weeping on the floor as a crowd of citizens urinate on ${him}.`); + } else { + hostageAction.push(`weeping on the floor as a crowd of citizens masturbate onto ${him}.`); + } + hostageAction.push(`screaming as ${he} has the soles of ${his} feet whipped.`); + hostageAction.push(`tearfully begging someone not to cut ${him}.`); + } else if (V.rivalryDuration <= 10) { + V.hostage.trust += 5; + V.hostage.devotion += 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + if (V.seePee === 1) { + hostageAction.push(`trying ${his} best not to break down as a crowd of citizens urinate on ${him}.`); + } else { + hostageAction.push(`trying ${his} best not to break down as a crowd of citizens jack off onto ${him}.`); + } + hostageAction.push(`crying out as ${his} back is lashed.`); + hostageAction.push(`tearfully crying on the ground after someone tripped ${him} and stole ${his} heels for the sole purpose of denying ${him} the ability to walk.`); + } else if (V.rivalryDuration <= 15) { + V.hostage.trust += 5; + V.hostage.devotion += 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + if (V.seePee === 1) { + hostageAction.push(`meekly accepting ${his} golden shower.`); + } else { + hostageAction.push(`meekly accepting ${his} bukkake.`); + } + hostageAction.push(`sobbing as ${he} is mercilessly beaten.`); + hostageAction.push(`panicking as ${he} attempts to mime a plea to not get cut by ${his} aggressor.`); + } else if (V.rivalryDuration <= 20) { + V.hostage.trust += 5; + V.hostage.devotion += 5; + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + if (V.seePee === 1) { + hostageAction.push(`laying there, indifferent to the citizens urinating on ${him}.`); + } else { + hostageAction.push(`laying there, indifferent to the citizens ejaculating on ${him}.`); + } + hostageAction.push(`softly crying as ${he} is kicked around.`); + hostageAction.push(`crying muffled sobs as someone snatches ${his} earnings from under ${his} blinded eyes.`); + } else { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + hostageAction.push(`completely broken, indifferent to the citizens abusing ${his} body.`); + hostageAction.push(`barely showing signs of life as ${his} ruined body is kicked around the floor.`); + hostageAction.push(`getting shoved onto a shelf with dozens of other limbless, broken slaves.`); + } + break; + case "Degradationism": + if (V.rivalryDuration <= 5) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + hostageAction.push(`refusing to be touched by ${his} owner.`); + hostageAction.push(`refusing to even look at ${his} owner.`); + hostageAction.push(`getting mad when asked about ${his} sexual exploits.`); + } else if (V.rivalryDuration <= 10) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.vaginal += 1; + hostageAction.push(`reluctantly allowing ${his} owner to play with ${his} body.`); + hostageAction.push(`gingerly looking at ${his} owner as they approach.`); + hostageAction.push(`blushing and avoiding the question when asked about ${his} sexual exploits.`); + } else if (V.rivalryDuration <= 15) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.vaginal += 1; + hostageAction.push(`making love with ${his} owner.`); + hostageAction.push(`curiously watching ${his} owner as they approach.`); + hostageAction.push(`blurting it out and burying ${his} face in ${his} hands when asked about ${his} sexual exploits with ${his} owner.`); + } else if (V.rivalryDuration <= 20) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.vaginal += 1; + hostageAction.push(`happily making love to ${his} owner.`); + hostageAction.push(`eagerly watching ${his} owner as they approach.`); + hostageAction.push(`giggling with another slave over their sexual exploits with their owners.`); + } else { + V.hostage.counter.vaginal += 1; + if (V.seePreg === 1) { + hostageAction.push(`happily making love to ${his} owner. ${His} belly has a noticeable roundness to it.`); + hostageAction.push(`biting ${his} lip with nervous anticipation as ${his} owner approaches where ${he}'s standing, ${his} hands cupping ${his} rounded middle.`); + hostageAction.push(`gossiping with another slave over their sexual exploits with their owners, all the while cradling ${his} growing pregnancy with pride.`); + } else { + hostageAction.push(`trying ${his} hardest to conceive a child with ${his} owner.`); + hostageAction.push(`biting ${his} lip with nervous anticipation as ${his} owner approaches where ${he}'s standing.`); + hostageAction.push(`gossiping with another slave over how they conceived their child with their owner.`); + } + } + break; + case "Body Purism": + if (V.rivalryDuration <= 5) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.boobs += 2000; + V.hostage.boobsImplant += 2000; + if (V.hostage.boobsImplant > 10000) { + V.hostage.boobsImplantType = "hyper fillable"; + } + hostageAction.push(`trying desperately to stand despite ${his} massive ${V.hostage.boobs}cc fake tits.`); + hostageAction.push(`crying while trying to get comfortable with ${his} ${V.hostage.boobs}cc fake tits.`); + hostageAction.push(`sobbing as an autosurgery reads out how much ${his} ${V.hostage.boobs}cc implants can be expanded this week.`); + } else if (V.rivalryDuration <= 10) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.boobs += 1000; + V.hostage.boobsImplant += 1000; + if (V.hostage.boobsImplant > 10000) { + V.hostage.boobsImplantType = "hyper fillable"; + } + hostageAction.push(`reluctantly exploring ${his} new massive ${V.hostage.boobs}cc implants.`); + hostageAction.push(`reluctantly exploring new resting positions due to ${his} ${V.hostage.boobs}cc implants.`); + hostageAction.push(`crying as an autosurgery reads out how much ${his} ${V.hostage.boobs}cc implants can be expanded this week.`); + } else if (V.rivalryDuration <= 15) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.boobs += 1000; + V.hostage.boobsImplant += 1000; + if (V.hostage.boobsImplant > 10000) { + V.hostage.boobsImplantType = "hyper fillable"; + } + hostageAction.push(`happily playing with ${his} truly immense ${V.hostage.boobs}cc breast implants and huge butt implants.`); + hostageAction.push(`happily resting ${his} head on ${his} ${V.hostage.boobs}cc breast implants.`); + hostageAction.push(`blushing as an autosurgery reads out how much ${his} ${V.hostage.boobs}cc implants can be expanded this week.`); + } else if (V.rivalryDuration <= 20) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.boobs += 1000; + V.hostage.boobsImplant += 1000; + if (V.hostage.boobsImplant > 10000) { + V.hostage.boobsImplantType = "hyper fillable"; + } + hostageAction.push(`happily getting titfucked against ${his} anchoring ${V.hostage.boobs}cc fake tits.`); + hostageAction.push(`contently resting against ${his} ${V.hostage.boobs}cc fake tits.`); + hostageAction.push(`getting excited as an autosurgery reads out how much ${his} ${V.hostage.boobs}cc implants can be expanded this week.`); + } else { + hostageAction.push(`resting on ${his} monstrous ${V.hostage.boobs}cc fake tits, whining about not being allowed larger implants.`); + hostageAction.push(`resting atop ${his} monstrous ${V.hostage.boobs}cc fake tits, daydreaming about being even bigger.`); + hostageAction.push(`throwing a fit that ${his} ${V.hostage.boobs}cc fake tits are too big to expand further.`); + hostageAction.push(`throwing a fit that ${his} ${V.hostage.boobs}cc fake tits stick out too far to allow ${him} to squeeze into the surgery suite.`); + } + break; + case "Transformation Fetishism": + if (V.rivalryDuration <= 5) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + hostageAction.push(`attempting to refute a report on surgical side effects in your arcology.`); + hostageAction.push(`refusing to believe pictures of surgeries performed in your arcology are real.`); + hostageAction.push(`wondering why these maniacs care if ${his} body is unaltered or not.`); + } else if (V.rivalryDuration <= 10) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.vaginal += 1; + hostageAction.push(`refusing to believe a report on surgical side effects in your arcology.`); + hostageAction.push(`gaping in surprise at pictures of surgeries performed in your arcology.`); + hostageAction.push(`admiring how natural ${his} body truly is.`); + } else if (V.rivalryDuration <= 15) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.vaginal += 1; + hostageAction.push(`gasping at a report on surgical side effects in your arcology.`); + hostageAction.push(`gasping in horror at pictures of surgeries performed in your arcology.`); + hostageAction.push(`beginning to understand how beautiful ${his} pure body is.`); + } else if (V.rivalryDuration <= 20) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.vaginal += 1; + hostageAction.push(`crying over a report on surgical side effects in your arcology.`); + hostageAction.push(`crying in terror at pictures of surgeries performed in your arcology.`); + hostageAction.push(`admiring how pure ${his} body is in the mirror.`); + } else { + V.hostage.counter.vaginal += 1; + hostageAction.push(`making a public speech over surgical side effects in your arcology.`); + hostageAction.push(`genuinely thanking ${his} owner for keeping ${his} body pure and beautiful.`); + hostageAction.push(`admiring ${his} pure body from every angle ${he} can.`); + } + break; + case "Youth Preferentialism": + if (V.rivalryDuration <= 5) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 1; + V.hostage.counter.vaginal += 1; + V.hostage.counter.anal += 1; + hostageAction.push(`struggling to escape the grasp of a motherly ${woman2}.`); + hostageAction.push(`hiding from ${his} MILF partner, sobbing quietly.`); + hostageAction.push(`struggling to escape being mothered by ${his} older partner.`); + } else if (V.rivalryDuration <= 10) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.oral += 5; + V.hostage.counter.vaginal += 5; + V.hostage.counter.anal += 5; + hostageAction.push(`crying gently while a ${mother2}ly ${woman2} fondles ${him}.`); + hostageAction.push(`cringing as ${he} massages ${his} MILF partner's back.`); + hostageAction.push(`cautiously tasting ${his} MILF partner's milk.`); + } else if (V.rivalryDuration <= 15) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.oral += 10; + V.hostage.counter.vaginal += 10; + V.hostage.counter.anal += 10; + hostageAction.push(`resting in the arms of ${his} MILF friend.`); + hostageAction.push(`carefully giving ${his} MILF lover a back massage.`); + hostageAction.push(`carefully suckling ${his} MILF friend's nipple.`); + } else if (V.rivalryDuration <= 20) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 10; + V.hostage.counter.vaginal += 10; + V.hostage.counter.anal += 10; + hostageAction.push(`happily being cradled by ${his} MILF lover.`); + hostageAction.push(`happily giving ${his} MILF lover a foot massage before bed.`); + hostageAction.push(`happily suckling ${his} MILF lover's motherly tits.`); + } else { + V.hostage.counter.oral += 20; + V.hostage.counter.vaginal += 20; + V.hostage.counter.anal += 20; + hostageAction.push(`resting intertwined with ${his} favorite MILF in the world.`); + hostageAction.push(`energetically giving ${his} MILF lover a full body massage before bed.`); + hostageAction.push(`happily suckling ${his} MILF lover's motherly tits while fondling ${his} lover's crotch.`); + } + break; + case "Maturity Preferentialism": + if (V.rivalryDuration <= 5) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 1; + V.hostage.counter.vaginal += 1; + V.hostage.counter.anal += 1; + hostageAction.push(`struggling to escape the grasp of an energetic young $woman2}.`); + hostageAction.push(`shouting profanity at ${his} young partner.`); + hostageAction.push(`rebuking ${his} young partner's advances.`); + } else if (V.rivalryDuration <= 10) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.oral += 5; + V.hostage.counter.vaginal += 5; + V.hostage.counter.anal += 5; + hostageAction.push(`crying gently while a young ${woman2} eagerly fondles ${him}.`); + hostageAction.push(`shying away from ${his} young partner.`); + hostageAction.push(`curiously fondling ${his} young partner's dick.`); + } else if (V.rivalryDuration <= 15) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.oral += 10; + V.hostage.counter.vaginal += 10; + V.hostage.counter.anal += 10; + hostageAction.push(`trying to catch a break as ${his} young friend begs to have some more fun.`); + hostageAction.push(`resting alongside ${his} young friend.`); + hostageAction.push(`cautiously rubbing ${his} energetic young friend's cock.`); + } else if (V.rivalryDuration <= 20) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 10; + V.hostage.counter.vaginal += 10; + V.hostage.counter.anal += 10; + hostageAction.push(`kissing ${his} young lover.`); + hostageAction.push(`talking about things with ${his} young lover.`); + hostageAction.push(`giving ${his} energetic young lover a handjob.`); + } else { + V.hostage.counter.oral += 20; + V.hostage.counter.vaginal += 20; + V.hostage.counter.anal += 20; + hostageAction.push(`basking in the afterglow, intertwined with ${his} favorite youth.`); + hostageAction.push(`whispering something sexy into ${his} young lover's ear.`); + hostageAction.push(`giving ${his} energetic young lover a handjob while deeply kissing ${him2}.`); + } + break; + case "Slimness Enthusiasm": + if (V.rivalryDuration <= 5) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight += 5; + V.hostage.boobs += 1500; + hostageAction.push(`trying desperately to stand despite ${his} massive ${V.hostage.boobs}cc tits.`); + hostageAction.push(`crying over ${his} swollen breasts and butt.`); + hostageAction.push(`weeping as the breast injections swell ${his} breasts to ${V.hostage.boobs}ccs.`); + } else if (V.rivalryDuration <= 10) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.weight += 5; + V.hostage.boobs += 1000; + hostageAction.push(`reluctantly exploring ${his} new massive ${V.hostage.boobs}cc tits, bigger bottom, and softer body.`); + hostageAction.push(`cringing as ${he} feels ${his} huge soft tits and ass.`); + hostageAction.push(`cringing as the breast injections swell ${his} breasts to ${V.hostage.boobs}ccs along with ${his} butt.`); + } else if (V.rivalryDuration <= 15) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.weight += 5; + V.hostage.boobs += 1000; + hostageAction.push(`happily playing with ${his} truly immense ${V.hostage.boobs}cc breasts and huge butt.`); + hostageAction.push(`giggling as ${he} gropes ${his} soft body.`); + hostageAction.push(`smiling as the breast injections swell ${his} breasts to ${V.hostage.boobs}ccs. ${He} runs ${his} hand across ${his} huge butt and softening body.`); + } else if (V.rivalryDuration <= 20) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight += 5; + V.hostage.boobs += 1000; + hostageAction.push(`happily getting titfucked in ${his} immobilizing ${V.hostage.boobs}cc tits.`); + hostageAction.push(`happily massaging ${his} super soft body and huge assets.`); + hostageAction.push(`practically orgasming as the breast injections swell ${his} breasts to ${V.hostage.boobs}ccs. ${He} sinks ${his} hands into ${his} enormous butt and soft belly.`); + } else { + hostageAction.push(`resting atop ${his} monstrous ${V.hostage.boobs}cc tits, whining about not being allowed to have ${his} assets swollen more.`); + hostageAction.push(`resting in ${his} own mountainous softness.`); + hostageAction.push(`shouting at a plastic surgeon to make ${his} ${V.hostage.boobs}cc tits even larger.`); + hostageAction.push(`attempting to maneuver around ${his} ${V.hostage.boobs}cc tits to reach a drug cabinet for more injections.`); + } + break; + case "Asset Expansionism": + if (V.rivalryDuration <= 5) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + hostageAction.push(`attempting to refute a report on drug side effects in your arcology.`); + hostageAction.push(`refusing to believe pictures of excessively expanded slaves in your arcology are real.`); + hostageAction.push(`refusing to show off ${his} natural body.`); + } else if (V.rivalryDuration <= 10) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.vaginal += 1; + hostageAction.push(`refusing to believe a report on drug side effects in your arcology.`); + hostageAction.push(`gasping in surprise at pictures of excessively expanded slaves in your arcology.`); + hostageAction.push(`reluctantly doing a series of stretching exercises to show off ${his} natural body.`); + } else if (V.rivalryDuration <= 15) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.vaginal += 1; + hostageAction.push(`gasping at a report on drug side effects in your arcology.`); + hostageAction.push(`gasping in horror at pictures of excessively expanded slaves in your arcology.`); + hostageAction.push(`doing a series of stretching exercises to show off ${his} natural body.`); + } else if (V.rivalryDuration <= 20) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.vaginal += 1; + hostageAction.push(`crying over a report on drug side effects in your arcology.`); + hostageAction.push(`crying in terror at pictures of excessively expanded slaves in your arcology.`); + hostageAction.push(`happily doing a series of stretching exercises to show off ${his} natural body.`); + } else { + V.hostage.counter.vaginal += 1; + hostageAction.push(`making a public speech over drug side effects in your arcology.`); + hostageAction.push(`genuinely thanking ${his} owner for keeping ${him} healthy and from becoming nothing more than a bloated pair of tits and ass.`); + hostageAction.push(`showing off ${his} completely natural body with pride before an audience of civilians.`); + } + break; + case "Pastoralism": + if (V.rivalryDuration <= 5) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight -= 5; + V.hostage.muscles += 5; + hostageAction.push(`angrily jogging on a treadmill, ${his} fat body and big tits jiggling constantly.`); + hostageAction.push(`trying to catch ${his} breath and stop ${his} fat body from sweating.`); + hostageAction.push(`struggling to run ${his} overweight body around a track.`); + } else if (V.rivalryDuration <= 10) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight -= 5; + V.hostage.muscles += 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.vaginal += 1; + hostageAction.push(`reluctantly doing sit-ups, ${his} plush body struggling to manage.`); + hostageAction.push(`checking ${himself} out in the mirror, gawking at how much weight ${he}'s lost.`); + hostageAction.push(`attempting to run a lap around the track despite ${his} overweight body.`); + } else if (V.rivalryDuration <= 15) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight -= 5; + V.hostage.muscles += 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.vaginal += 1; + hostageAction.push(`lifting weights, ${his} soft body barely hiding ${his} bulging muscles.`); + hostageAction.push(`pinching ${his} remaining flab and making a disgusted face.`); + hostageAction.push(`running laps around the track to burn off ${his} excess bodyfat.`); + } else if (V.rivalryDuration <= 20) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight -= 5; + V.hostage.muscles += 5; + V.hostage.counter.vaginal += 1; + hostageAction.push(`eagerly pumping iron using ${his} lean and powerful body.`); + hostageAction.push(`massaging body oil into ${his} abs and checking ${himself} out in a mirror.`); + hostageAction.push(`eagerly running laps around a track, showing off ${his} thin and fit body.`); + } else { + V.hostage.counter.vaginal += 1; + hostageAction.push(`performing an impressive clean and jerk, and then giving ${his} owner a high five.`); + hostageAction.push(`massaging body oil into ${his} abs and posing in front of the mirror. ${He} is proud to have gone from a fat cow to a ripped goddess.`); + hostageAction.push(`running laps around a track, competing with other eagerly competitive slaves to be the best.`); + } + break; + case "Cummunism": + if (V.rivalryDuration <= 5) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight += 5; + V.hostage.boobs += 1000; + V.hostage.lactation = 2; + V.hostage.lactationDuration = 2; + hostageAction.push(`trying desperately to extract the milk from ${his} massive ${V.hostage.boobs}cc tits. ${He} appears to have gained some weight.`); + hostageAction.push(`sobbing as ${he} massages ${his} sore ${V.hostage.boobs}cc udders.`); + hostageAction.push(`sobbing as the milkers drain ${his} ${V.hostage.boobs}cc udders.`); + } else if (V.rivalryDuration <= 10) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight += 5; + V.hostage.fetishStrength += 5; + V.hostage.boobs += 1000; + V.hostage.lactation = 2; + V.hostage.lactationDuration = 2; + hostageAction.push(`reluctantly asking for ${his} massive ${V.hostage.boobs}cc tits to be milked. ${He}'s certainly getting soft.`); + hostageAction.push(`crying as rubs ${his} uncomfortably massive ${V.hostage.boobs}cc udders and softening belly.`); + hostageAction.push(`sighing as the milkers drain ${his} big ${V.hostage.boobs}cc udders while ${he} massages ${his} softening belly.`); + } else if (V.rivalryDuration <= 15) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight += 5; + V.hostage.fetishStrength += 5; + V.hostage.boobs += 1000; + V.hostage.lactation = 2; + V.hostage.lactationDuration = 2; + hostageAction.push(`happily asking for ${his} truly immense ${V.hostage.boobs}cc breasts to be milked. ${His} body has become notably plush.`); + hostageAction.push(`humming as ${he} soothes ${his} truly immense sore ${V.hostage.boobs}cc udders. ${He} lets off a content sigh as ${he} jiggles ${his} soft belly.`); + hostageAction.push(`sighing with relief as the milkers drain ${his} huge ${V.hostage.boobs}cc udders while ${he} massages ${his} jiggly belly.`); + } else if (V.rivalryDuration <= 20) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight += 5; + V.hostage.boobs += 1000; + V.hostage.lactation = 2; + V.hostage.lactationDuration = 2; + hostageAction.push(`begging for ${his} immobilizing ${V.hostage.boobs}cc tits to be drained. ${He} has become quite fat.`); + hostageAction.push(`happily playing with ${his} ${V.hostage.boobs}cc udders. ${He} squirms and giggles as ${his} entire body jiggles in response.`); + hostageAction.push(`happily humming as the milkers drain ${his} giant ${V.hostage.boobs}cc udders while ${he} plays with ${his} fat belly and breasts.`); + } else { + V.hostage.lactation = 2; + V.hostage.lactationDuration = 2; + hostageAction.push(`resting atop ${his} monstrous ${V.hostage.boobs}cc tits, whining about not being allowed to have ${his} assets swollen more and that ${he} has to squeeze ${his} milk out ${himself}.`); + hostageAction.push(`moans lewdly as a pair of slaves massage ${his} ${V.hostage.boobs}cc udders, and as a third appears from under ${his} heavy body.`); + hostageAction.push(`moaning loudly as the milkers drain ${his} massive ${V.hostage.boobs}cc udders.`); + } + break; + case "Physical Idealism": + if (V.rivalryDuration <= 5) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight += 5; + V.hostage.boobs += 50; + V.hostage.counter.vaginal += 28; + hostageAction.push(`trying desperately to vomit up all the food forced into ${his} bloated stomach while being thwarted by a specialized gag. ${He} appears to have gained some weight.`); + hostageAction.push(`sobbing as ${he} is forcibly raped and broken in.`); + hostageAction.push(`sobbing as ${he} is forced is experience all manner of perversion in an effort to reveal ${his} fetishes.`); + } else if (V.rivalryDuration <= 10) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight += 5; + V.hostage.fetishStrength += 5; + V.hostage.boobs += 100; + V.hostage.counter.vaginal += 28; + switch (V.hostage.fetish) { + case "cumslut": + V.hostage.counter.oral += 70; + break; + case "buttslut": + V.hostage.counter.anal += 21; + V.hostage.anus = 3; + break; + case "boobs": + V.hostage.boobs += 100; + V.hostage.boobsImplant += 100; + if (V.hostage.boobsImplant > 2000) { + V.hostage.boobsImplantType = "advanced fillable"; + } + break; + case "pregnancy": + V.hostage.preg++; + V.hostage.pregKnown = 1; + V.hostage.pregWeek++; + SetBellySize(V.hostage); + break; + } + hostageAction.push(`relaxing in ${his} comfy bed carefully exploring ${his} food stuffed belly and its unique curvature. ${He}'s certainly getting soft.`); + hostageAction.push(`crying as ${he} rubs the uncomfortable bulge of ${his} overfilled stomach and soft belly as yet another guy fucks ${his} loosening cunt.`); + switch (V.hostage.fetish) { + case "submissive": + hostageAction.push(`struggling to hold back ${his} joy as ${he} is forced to eat out another slave.`); + break; + case "cumslut": + hostageAction.push(`struggling to hold back ${his} joy as a hot load spurts across ${his} face.`); + break; + case "humiliation": + hostageAction.push(`struggling to hold back ${his} joy as ${he} is paraded, naked, through the arcology.`); + break; + case "buttslut": + hostageAction.push(`struggling to hold back ${his} joy as ${his} ass is roughly fucked.`); + break; + case "boobs": + hostageAction.push(`struggling to hold back ${his} joy as ${he} checks out ${his} new ${V.hostage.boobsImplant}cc implants.`); + break; + case "sadist": + hostageAction.push(`struggling to hold back ${his} joy as ${he} is encouraged to beat a slave that spilled a cup of food on the clean floor.`); + break; + case "masochist": + hostageAction.push(`struggling to hold back ${his} joy as ${his} nipples are cruelly pinched and twisted.`); + break; + case "dom": + hostageAction.push(`struggling to hold back ${his} joy as ${he} is told to order a waiting slave to do whatever ${he} wants.`); + break; + case "pregnancy": + hostageAction.push(`struggling to hold back ${his} joy as another huge load shoots into ${his} fertile womb.`); + break; + } + } else if (V.rivalryDuration <= 15) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight += 5; + V.hostage.fetishStrength += 5; + V.hostage.boobs += 100; + V.hostage.counter.vaginal += 35; + switch (V.hostage.fetish) { + case "cumslut": + V.hostage.counter.oral += 70; + break; + case "buttslut": + V.hostage.counter.anal += 35; + V.hostage.anus = 3; + break; + case "boobs": + V.hostage.boobs += 100; + V.hostage.boobsImplant += 100; + if (V.hostage.boobsImplant > 2000) { + V.hostage.boobsImplantType = "advanced fillable"; + } + break; + case "pregnancy": + V.hostage.preg++; + V.hostage.pregKnown = 1; + V.hostage.pregWeek++; + SetBellySize(V.hostage); + break; + } + hostageAction.push(`relaxing in ${his} comfy bed sucking on ${his} feeding tube. One hand is fondling ${his} plush body while the other is teasing ${his} clit. ${His} body has become notably plush, made even more obvious when an orgasm sends ripples through ${his} soft flesh.`); + hostageAction.push(`humming as ${he} soothes ${his} full belly as ${he} enjoys a good fucking.`); + switch (V.hostage.fetish) { + case "submissive": + hostageAction.push(`begging ${his} master-slave to permit ${him} to service ${hisU} dick.`); + break; + case "cumslut": + hostageAction.push(`happily sucking a dick and swallowing every last drop of cum.`); + break; + case "humiliation": + hostageAction.push(`walking alongside ${his} master in a figure-revealing pair of tight pants and a tube top. The pair of vibrators on ${his} nipples and the huge dildo in ${his} cunt are obvious through the taut material.`); + break; + case "buttslut": + hostageAction.push(`happily taking a huge dick in ${his} ass while wishing it was even bigger.`); + break; + case "boobs": + hostageAction.push(`happily teasing a dick between ${his} new ${V.hostage.boobsImplant}cc implants.`); + break; + case "sadist": + hostageAction.push(`happily tormenting a sissy slave's limp dick as ${he} rails ${himU} with a strap-on.`); + break; + case "masochist": + hostageAction.push(`struggling to smile while being strangled during sex.`); + break; + case "dom": + hostageAction.push(`forcing ${his} sissy slave to feed ${him} ${his} favorite foods while hoping ${heU} makes a mistake so ${heU} may be punished.`); + break; + case "pregnancy": + hostageAction.push(`humming softly as ${he} caresses ${his} early pregnancy.`); + break; + } + } else if (V.rivalryDuration <= 20) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight += 5; + V.hostage.boobs += 100; + V.hostage.counter.vaginal += 40; + switch (V.hostage.fetish) { + case "cumslut": + V.hostage.counter.oral += 70; + break; + case "buttslut": + V.hostage.counter.anal += 35; + V.hostage.anus = 4; + break; + case "boobs": + V.hostage.boobs += 100; + V.hostage.boobsImplant += 100; + if (V.hostage.boobsImplant > 2000) { + V.hostage.boobsImplantType = "advanced fillable"; + } + break; + case "pregnancy": + V.hostage.preg++; + V.hostage.pregKnown = 1; + V.hostage.pregWeek++; + SetBellySize(V.hostage); + break; + } + hostageAction.push(`relaxing in ${his} comfy bed surrounded by mountains of molded slave food. ${He} is eagerly shoving handfuls of the fattening treats into ${his} mouth while simultaneously begging for someone to fill ${his} neglected pussy. ${He} has become quite fat; ${his} body jiggles with every motion.`); + hostageAction.push(`happily stuffing ${his} face as another guy fucks ${his} fat body.`); + switch (V.hostage.fetish) { + case "submissive": + hostageAction.push(`desperately begging for ${his} master-slave to tear ${him} out of ${his} clothes and rape ${him} on the spot.`); + break; + case "cumslut": + hostageAction.push(`desperately begging for the owner of the dick being waved in ${his} face to shower ${him} with cum.`); + break; + case "humiliation": + hostageAction.push(`standing on a balcony fully nude shouting at passersby to ogle ${him}, desperate for stronger forms of humiliation.`); + break; + case "buttslut": + hostageAction.push(`begging for more cocks in ${his} ass as the two men already penetrating it struggle to not get too intimate with each other.`); + break; + case "boobs": + hostageAction.push(`groping ${his} already huge ${V.hostage.boobsImplant}cc breasts and begging for them to be even bigger.`); + break; + case "sadist": + hostageAction.push(`cumming hard as the slave mounting ${him} writhes in pain at ${hisU} torment.`); + break; + case "masochist": + hostageAction.push(`cumming hard as ${he} is beaten during sex.`); + break; + case "dom": + hostageAction.push(`sitting on a slave that displeased ${him} and forcing the struggling ${girlU} to eat ${him} out.`); + break; + case "pregnancy": + hostageAction.push(`puffing out ${his} already large belly pretending to be even more pregnant than ${he} already is.`); + break; + } + } else { + V.hostage.weight += 5; + V.hostage.boobs += 100; + V.hostage.counter.vaginal += 60; + switch (V.hostage.fetish) { + case "cumslut": + V.hostage.counter.oral += 70; + break; + case "buttslut": + V.hostage.counter.anal += 45; + break; + case "boobs": + V.hostage.boobs += 100; + V.hostage.boobsImplant += 100; + if (V.hostage.boobsImplant > 2000) { + V.hostage.boobsImplantType = "advanced fillable"; + } + break; + case "pregnancy": + V.hostage.preg++; + V.hostage.pregKnown = 1; + V.hostage.pregWeek++; + SetBellySize(V.hostage); + break; + } + hostageAction.push(`relaxing in ${his} comfy bed surrounded by mountains of molded slave food. ${He} is greedily shoving handfuls of the fattening treats into ${his} mouth as fast as ${he} can. ${He} has grown enormously fat and ${his} belly is jiggling oddly. When ${he} repositions ${himself}, you catch sight of a quartet of large vibrating dildos crammed into ${his} stretched cunt.`); + switch (V.hostage.fetish) { + case "submissive": + hostageAction.push(`greedily stuffing ${his} face with slave food as a pair of guys double team ${his} ruined pussy.`); + hostageAction.push(`going out of ${his} way to bring ${his} partner to orgasm with no interest in ${his} own.`); + break; + case "cumslut": + hostageAction.push(`greedily stuffing ${his} face with slave food as a pair of guys double team ${his} ruined pussy. Several more encircle ${him}, ready to shower ${him} with cum the moment ${he} climaxes.`); + hostageAction.push(`greedily sucking cocks, desperate to fill ${himself} with cum.`); + break; + case "humiliation": + hostageAction.push(`greedily stuffing ${his} face with slave food as a pair of guys double team ${his} ruined pussy.`); + hostageAction.push(`in the center of a gangbang ${he} started in the middle of one of the arcology's shopping malls.`); + break; + case "buttslut": + hostageAction.push(`greedily stuffing ${his} face with slave food as a pair of guys double team ${his} ruined pussy. Another struggles to support ${his} weight as he plows ${his} gaping anus.`); + hostageAction.push(`desperately trying to shove a fifth dildo into ${his} asshole and becoming distraught when it doesn't fit.`); + break; + case "boobs": + hostageAction.push(`greedily stuffing ${his} face with slave food as a pair of guys double team ${his} ruined pussy. ${He} takes time between bites to hungrily fondle ${his} ${V.hostage.boobs}cc tits.`); + hostageAction.push(`crying with joy after ${his} breasts ruined a shirt ${he} was just able to fit into that morning.`); + break; + case "sadist": + hostageAction.push(`greedily stuffing ${his} face with slave food as a pair of guys double team ${his} ruined pussy.`); + hostageAction.push(`laughing maniacally as ${he} beats a slave viciously as ${he} rides ${himU}. ${He} keeps going even after the poor ${girlU}'s dick breaks from penetrating ${him} at a bad angle.`); + break; + case "masochist": + hostageAction.push(`greedily stuffing ${his} face with slave food as a pair of guys double team ${his} ruined pussy.`); + hostageAction.push(`going out of ${his} way to find the most undesirable men in the arcology to offer ${himself} to.`); + break; + case "dom": + hostageAction.push(`greedily stuffing ${his} face with slave food as a pair of guys double team ${his} ruined pussy.`); + hostageAction.push(`mercilessly beating the unfortunate slave servicing ${him} as punishment for knocking over ${his} tray of snacks.`); + break; + case "pregnancy": + hostageAction.push(`greedily stuffing ${his} face with slave food as a pair of guys double team ${his} ruined pussy. ${He} takes time between bites to hungrily fondle ${his} pregnancy.`); + hostageAction.push(`deliriously crying for ${his} current lover to pump more children into ${his} pregnant womb.`); + break; + } + } + break; + case "Hedonistic Decadence": + if (V.rivalryDuration <= 5) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight -= 5; + V.hostage.muscles += 5; + hostageAction.push(`angrily jogging on a treadmill, ${his} fat body and big tits jiggling constantly.`); + hostageAction.push(`trying to catch ${his} breath and stop ${his} fat body from sweating.`); + hostageAction.push(`struggling to run ${his} overweight body around a track.`); + } else if (V.rivalryDuration <= 10) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight -= 5; + V.hostage.muscles += 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.vaginal += 1; + hostageAction.push(`reluctantly doing sit-ups, ${his} plush body struggling to manage.`); + hostageAction.push(`checking ${himself} out in the mirror, gawking at how much weight ${he}'s lost.`); + hostageAction.push(`attempting to run a lap around the track despite ${his} overweight body.`); + } else if (V.rivalryDuration <= 15) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight -= 5; + V.hostage.muscles += 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.vaginal += 1; + hostageAction.push(`lifting weights, ${his} soft body barely hiding ${his} bulging muscles.`); + hostageAction.push(`pinching ${his} remaining flab and making a disgusted face.`); + hostageAction.push(`running laps around the track to burn off ${his} excess bodyfat.`); + } else if (V.rivalryDuration <= 20) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.weight -= 5; + V.hostage.muscles += 5; + V.hostage.counter.vaginal += 1; + hostageAction.push(`eagerly pumping iron using ${his} lean and powerful body.`); + hostageAction.push(`massaging body oil into ${his} abs and checking ${himself} out in a mirror.`); + hostageAction.push(`eagerly running laps around a track, showing off ${his} thin and fit body.`); + } else { + V.hostage.counter.vaginal += 1; + hostageAction.push(`performing an impressive clean and jerk, and then giving ${his} owner a high five.`); + hostageAction.push(`massaging body oil into ${his} abs and posing in front of the mirror. ${He} is proud to have gone from a fat cow to a ripped goddess.`); + hostageAction.push(`running laps around a track, competing with other eagerly competitive slaves to be the best.`); + } + break; + case "Chattel Religionism": + if (V.rivalryDuration <= 5) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + hostageAction.push(`attempting to refute a report on what's expected of slaves as part of your new religion.`); + hostageAction.push(`refusing to believe a video of a religious service in your arcology is real.`); + hostageAction.push(`refusing to socialize with other slaves.`); + } else if (V.rivalryDuration <= 10) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.vaginal += 1; + hostageAction.push(`refusing to believe a report on what's expected of slaves as part of your new religion.`); + hostageAction.push(`questioning the validity of a video of a religious service in your arcology.`); + hostageAction.push(`reluctantly spending time in ${his} arcology's cosmopolitan public spaces.`); + } else if (V.rivalryDuration <= 15) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.vaginal += 1; + hostageAction.push(`gasping at a report on what's expected of slaves as part of your new religion.`); + hostageAction.push(`gasping at the absurdity of a video of a religious service in your arcology.`); + hostageAction.push(`cautiously chatting with a group of slaves in ${his} arcology's cosmopolitan public spaces.`); + } else if (V.rivalryDuration <= 20) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.vaginal += 1; + hostageAction.push(`crying over a report on what's expected of slaves as part of your new religion.`); + hostageAction.push(`shaking ${his} head in incomprehension at video of a religious service in your arcology.`); + hostageAction.push(`happily chatting with a group of slaves in ${his} arcology's cosmopolitan public spaces.`); + } else { + V.hostage.counter.vaginal += 1; + hostageAction.push(`making a public speech on the horrors of your new religion.`); + hostageAction.push(`laughing at the ridiculousness of a video of a religious service in your arcology.`); + hostageAction.push(`chatting with a group of slaves and feeling right at home in ${his} arcology's cosmopolitan public spaces.`); + } + break; + case "Multiculturalism": + if (V.rivalryDuration <= 5) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + hostageAction.push(`refusing the tenets of ${his} new religion.`); + hostageAction.push(`refusing to pray for your arcology's salvation.`); + hostageAction.push(`freaking out as several men approach ${him} for sex.`); + } else if (V.rivalryDuration <= 10) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.oral += 10; + V.hostage.counter.vaginal += 10; + V.hostage.counter.anal += 10; + V.hostage.counter.mammary += 10; + hostageAction.push(`reluctantly following the tenets of ${his} new religion.`); + hostageAction.push(`questioning why ${he} is made to pray for your arcology's salvation.`); + hostageAction.push(`crying as ${he} is forced to service three dicks at once.`); + } else if (V.rivalryDuration <= 15) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.oral += 25; + V.hostage.counter.vaginal += 25; + V.hostage.counter.anal += 25; + V.hostage.counter.mammary += 25; + hostageAction.push(`praying for the souls of the citizens and slaves of your arcology.`); + hostageAction.push(`trying to pray for your arcology's salvation.`); + hostageAction.push(`attempting to please the three dicks in ${him} as quickly as possible.`); + } else if (V.rivalryDuration <= 20) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.counter.mammary += 50; + hostageAction.push(`crying over the souls of the citizens and slaves of your arcology.`); + hostageAction.push(`steadily praying for your arcology's salvation.`); + hostageAction.push(`enjoying belonging to a religion so intent to fill ${him} with dicks.`); + } else { + V.hostage.counter.oral += 100; + V.hostage.counter.vaginal += 100; + V.hostage.counter.anal += 100; + V.hostage.counter.mammary += 100; + hostageAction.push(`imploring the public to pray for the salvation of the citizens and slaves of your arcology.`); + hostageAction.push(`desperately praying for the salvation of your arcology.`); + hostageAction.push(`having a religious experience with as many dicks ${his} body can fit inside itself.`); + } + break; + case "Intellectual Dependency": + if (V.rivalryDuration <= 5) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + hostageAction.push(`refusing to pay attention to ${his} lessons.`); + hostageAction.push(`refusing to act like a proper ${girl}.`); + hostageAction.push(`forced into remedial training after threatening ${his} owner's reputation.`); + } else if (V.rivalryDuration <= 10) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.oral += 10; + V.hostage.counter.vaginal += 10; + V.hostage.counter.anal += 10; + V.hostage.intelligenceImplant = Math.clamp(V.hostage.intelligenceImplant + 1, 0, 30); + V.hostage.skill.oral = Math.clamp(V.hostage.skill.oral + 5, 0, 100); + V.hostage.skill.entertainment = Math.clamp(V.hostage.skill.entertainment + 5, 0, 100); + V.hostage.skill.anal = Math.clamp(V.hostage.skill.anal + 5, 0, 100); + V.hostage.skill.vaginal = Math.clamp(V.hostage.skill.vaginal + 5, 0, 100); + V.hostage.skill.whoring = Math.clamp(V.hostage.skill.whoring + 5, 0, 100); + hostageAction.push(`crying silently while being positioned to properly please ${his} partner.`); + hostageAction.push(`reluctantly balancing a book on ${his} head to perfect ${his} posture.`); + hostageAction.push(`reluctantly practicing enunciation to not risk angering ${his} owner.`); + } else if (V.rivalryDuration <= 15) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.oral += 10; + V.hostage.counter.vaginal += 10; + V.hostage.counter.anal += 10; + V.hostage.intelligenceImplant = Math.clamp(V.hostage.intelligenceImplant + 2, 0, 30); + V.hostage.skill.oral = Math.clamp(V.hostage.skill.oral + 5, 0, 100); + V.hostage.skill.entertainment = Math.clamp(V.hostage.skill.entertainment + 5, 0, 100); + V.hostage.skill.anal = Math.clamp(V.hostage.skill.anal + 5, 0, 100); + V.hostage.skill.vaginal = Math.clamp(V.hostage.skill.vaginal + 5, 0, 100); + V.hostage.skill.whoring = Math.clamp(V.hostage.skill.whoring + 5, 0, 100); + hostageAction.push(`attempting to pass an exam on sexual satisfaction.`); + hostageAction.push(`trying to show no reaction as ${he} is felt up by ${his} owner's client.`); + hostageAction.push(`attempting to please ${his} owner's friends and not be a failure.`); + } else if (V.rivalryDuration <= 20) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 10; + V.hostage.counter.vaginal += 10; + V.hostage.counter.anal += 10; + V.hostage.intelligenceImplant = Math.clamp(V.hostage.intelligenceImplant + 2, 0, 30); + V.hostage.skill.oral = Math.clamp(V.hostage.skill.oral + 5, 0, 100); + V.hostage.skill.entertainment = Math.clamp(V.hostage.skill.entertainment + 5, 0, 100); + V.hostage.skill.anal = Math.clamp(V.hostage.skill.anal + 5, 0, 100); + V.hostage.skill.vaginal = Math.clamp(V.hostage.skill.vaginal + 5, 0, 100); + V.hostage.skill.whoring = Math.clamp(V.hostage.skill.whoring + 5, 0, 100); + hostageAction.push(`demonstrating proper technique in drawing out a powerful ejaculation.`); + hostageAction.push(`elegantly luring in a client for ${his} owner.`); + hostageAction.push(`giving a blowjob to ${his} owner's client during business negotiations.`); + } else { + V.hostage.counter.oral += 10; + V.hostage.counter.vaginal += 10; + V.hostage.counter.anal += 10; + hostageAction.push(`diligently showcasing a series of advanced sexual positions to a group of fresh ${girlU}s.`); + hostageAction.push(`acting with refined grace even as a strand of cum splashes across ${his} face.`); + hostageAction.push(`holding perfectly still as ${his} owner and a client eat sushi off ${his} nude body. Even as they amuse themselves with ${his} vulnerable clit and nipples, ${he} shows no reaction.`); + } + break; + case "Slave Professionalism": + if (V.rivalryDuration <= 5) { + V.hostage.trust += 5; + V.hostage.devotion += 5; + V.hostage.counter.vaginal += 10; + V.hostage.energy += 5; + V.hostage.addict += 2; + V.hostage.hLength += 7; + V.hostage.intelligenceImplant = Math.clamp(V.hostage.intelligenceImplant - 5, 0, 30); + V.hostage.intelligence = Math.clamp(V.hostage.intelligence - 5, -100, 100); + hostageAction.push(`sobbing as ${he} struggles to not masturbate after a large hit of aphrodisiacs.`); + hostageAction.push(`holding ${his} head and struggling to recite ${his} favorite poem.`); + hostageAction.push(`refusing to put on the makeup presented to ${him}.`); + } else if (V.rivalryDuration <= 10) { + V.hostage.trust += 5; + V.hostage.devotion += 5; + V.hostage.fetishStrength += 5; + V.hostage.intelligenceImplant = Math.clamp(V.hostage.intelligenceImplant - 5, 0, 30); + V.hostage.intelligence = Math.clamp(V.hostage.intelligence - 5, -100, 100); + V.hostage.counter.oral += 30; + V.hostage.counter.vaginal += 30; + V.hostage.counter.anal += 30; + V.hostage.energy += 5; + V.hostage.addict += 2; + V.hostage.hLength += 7; + hostageAction.push(`crying as ${he} rides a dick to orgasm.`); + hostageAction.push(`trying not to lose the memories of ${his} life before being captured.`); + hostageAction.push(`hesitantly trying on clothes and admiring ${his} figure in the mirror.`); + } else if (V.rivalryDuration <= 15) { + V.hostage.trust += 5; + V.hostage.devotion += 5; + V.hostage.fetishStrength += 5; + V.hostage.intelligenceImplant = Math.clamp(V.hostage.intelligenceImplant - 5, 0, 30); + V.hostage.intelligence = Math.clamp(V.hostage.intelligence - 10, -100, 100); + V.hostage.counter.oral += 50; + V.hostage.counter.vaginal += 50; + V.hostage.counter.anal += 50; + V.hostage.energy += 5; + V.hostage.addict += 2; + V.hostage.hLength += 7; + hostageAction.push(`being presented with a selection of amusements and instead opting for the one between ${hisU} legs.`); + hostageAction.push(`walking around with ${his} breasts bouncing out of ${his} top and ${his} short skirt revealing ${his} lack of panties.`); + hostageAction.push(`admiring ${himself} in the mirror.`); + } else if (V.rivalryDuration <= 20) { + V.hostage.trust += 5; + V.hostage.devotion += 5; + V.hostage.intelligenceImplant = Math.clamp(V.hostage.intelligenceImplant - 5, 0, 30); + V.hostage.intelligence = Math.clamp(V.hostage.intelligence - 10, -100, 100); + V.hostage.counter.oral += 70; + V.hostage.counter.vaginal += 40; + V.hostage.counter.anal += 30; + V.hostage.energy += 5; + V.hostage.addict += 2; + V.hostage.hLength += 7; + V.hostage.lips = Math.clamp(V.hostage.lips + 5, 0, 100); + if (V.seePreg !== 0) { + V.hostage.preg++; + V.hostage.pregWeek++; + SetBellySize(V.hostage); + } + hostageAction.push(`sloppily sucking a dick while taking it in both ${his} ass and pussy.`); + hostageAction.push(`struggling to fasten ${his} top before giving up and going without it.`); + if (V.seePreg !== 0) { + hostageAction.push(`attempting to suck in ${his} ever growing pregnancy.`); + } + hostageAction.push(`pursing ${his} swollen lips at ${his} own reflection.`); + } else { + V.hostage.counter.oral += 70; + V.hostage.counter.vaginal += 40; + V.hostage.counter.anal += 30; + V.hostage.hLength += 7; + V.hostage.lips = Math.clamp(V.hostage.lips + 5, 0, 100); + if (V.seePreg !== 0) { + V.hostage.preg++; + V.hostage.pregWeek++; + SetBellySize(V.hostage); + } + hostageAction.push(`taking as many dicks as ${he} can think of: one in the mouth, two in`); + if (V.hostage.vagina > -1) { + r.push(`each`); + } else { + r.push(his); + } + r.push(`hole, and another in each hand.`); + hostageAction.push(`pushing on a sliding door, begging to be let out.`); + hostageAction.push(`checking out ${his} reflection in a window, blissfully unaware of the show ${he} is giving to street below.`); + } + break; + case "Petite Admiration": + if (V.rivalryDuration <= 5) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 1; + V.hostage.counter.vaginal += 1; + V.hostage.counter.anal += 1; + hostageAction.push(`struggling in vain as ${he} is carried around by ${his} towering partner.`); + hostageAction.push(`crammed under a bed to escape ${his} much larger partner.`); + hostageAction.push(`struggling to pull ${his} head away from ${his} much larger partner's crotch.`); + } else if (V.rivalryDuration <= 10) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.oral += 7; + V.hostage.counter.vaginal += 3; + V.hostage.counter.anal += 3; + hostageAction.push(`crying to ${himself} in the arms of ${his} towering partner as ${he} is carried around one of the arcology's public spaces.`); + hostageAction.push(`cringing as ${his} much larger partner sits ${him} in ${his2} lap and paws at ${him}.`); + hostageAction.push(`crying gently as ${his} much larger partner forces ${his} face to ${his2} crotch.`); + } else if (V.rivalryDuration <= 15) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.oral += 15; + V.hostage.counter.vaginal += 7; + V.hostage.counter.anal += 7; + hostageAction.push(`calmly letting ${his} towering partner carry ${him} around one of the arcology's public spaces.`); + hostageAction.push(`carefully sitting in ${his} much larger partner's lap and letting ${him2} fondle ${his} body.`); + hostageAction.push(`carefully putting ${his} mouth to use on ${his} much larger partner's crotch.`); + } else if (V.rivalryDuration <= 20) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 15; + V.hostage.counter.vaginal += 7; + V.hostage.counter.anal += 7; + hostageAction.push(`happily letting ${his} towering partner carry ${him} around one of the arcology's public spaces as ${he} fondles ${his2} genitals.`); + hostageAction.push(`happily resting in ${his} much larger partner's lap as ${he2} pets ${his} head.`); + hostageAction.push(`happily putting ${his} mouth to work on ${his} much larger partner's genitals.`); + } else { + V.hostage.counter.oral += 30; + V.hostage.counter.vaginal += 15; + V.hostage.counter.anal += 15; + hostageAction.push(`begging for ${his} towering partner to pick ${him} up and take ${him} for a walk'n'fuck.`); + hostageAction.push(`enjoying the feeling of ${his} much larger partner inside of ${him} as ${he} rests on ${his2} lap.`); + hostageAction.push(`happily putting ${his} mouth to work on ${his} much larger partner's genitals as ${he2} returns the favor.`); + } + break; + case "Statuesque Glorification": + if (V.rivalryDuration <= 5) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 1; + V.hostage.counter.vaginal += 1; + V.hostage.counter.anal += 1; + hostageAction.push(`sitting on a table, out of reach of a shorter ${woman2} and swearing at ${him2}.`); + hostageAction.push(`keeping ${his} smaller partner from reaching ${him}.`); + hostageAction.push(`rebuking ${his} smaller partner's advances.`); + } else if (V.rivalryDuration <= 10) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.oral += 3; + V.hostage.counter.vaginal += 7; + V.hostage.counter.anal += 7; + hostageAction.push(`crying gently as a shorter ${woman2} eagerly fondles ${him}.`); + hostageAction.push(`shying away from ${his} shorter partner.`); + hostageAction.push(`curiously exploring ${his} shorter partner's body.`); + } else if (V.rivalryDuration <= 15) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.oral += 7; + V.hostage.counter.vaginal += 13; + V.hostage.counter.anal += 13; + hostageAction.push(`trying to catch a break from ${his} shorter partner's tongue in ${his} pussy.`); + hostageAction.push(`spooning ${his} shorter partner.`); + hostageAction.push(`cautiously giving ${his} shorter partner a full body massage.`); + } else if (V.rivalryDuration <= 20) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.oral += 7; + V.hostage.counter.vaginal += 13; + V.hostage.counter.anal += 13; + hostageAction.push(`patting ${his} tiny lover's head.`); + hostageAction.push(`resting ${his} head on ${his} tiny love's lap.`); + hostageAction.push(`helping support ${his} tiny lover so ${he2} can fuck ${him} properly.`); + } else { + V.hostage.counter.oral += 15; + V.hostage.counter.vaginal += 25; + V.hostage.counter.anal += 25; + hostageAction.push(`basking in the afterglow with ${his} tiny love seated in ${his} lap.`); + hostageAction.push(`whispering something sexy into ${his} tiny lover's ear.`); + hostageAction.push(`hugging ${his} tiny lover tight as ${he2} fucks ${him} as deep as ${he2} can.`); + } + break; + default: + if (V.rivalryDuration <= 5) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + hostageAction.push(`refusing to believe what happens to slaves who don't fit into your arcology's revivalist culture.`); + hostageAction.push(`refusing to believe a video of your arcology's revivalist public events is real.`); + hostageAction.push(`refusing to socialize with other slaves.`); + } else if (V.rivalryDuration <= 10) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.vaginal += 1; + hostageAction.push(`reluctantly reading a report on what happens to slaves who don't fit into your arcology's revivalist culture.`); + hostageAction.push(`questioning the validity of a video of your arcology's revivalist public events.`); + hostageAction.push(`reluctantly spending time in ${his} arcology's modern public spaces.`); + } else if (V.rivalryDuration <= 15) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.fetishStrength += 5; + V.hostage.counter.vaginal += 1; + hostageAction.push(`gasping at a report on what happens to slaves who don't fit into your arcology's revivalist culture.`); + hostageAction.push(`gasping at the absurdity of a video of your arcology's revivalist public events.`); + hostageAction.push(`cautiously chatting with a group of slaves in ${his} arcology's modern public spaces.`); + } else if (V.rivalryDuration <= 20) { + V.hostage.trust -= 5; + V.hostage.devotion -= 5; + V.hostage.counter.vaginal += 1; + hostageAction.push(`crying over a report on what happens to slaves who don't fit into your arcology's revivalist culture.`); + hostageAction.push(`shaking ${his} head in incomprehension at video of your arcology's revivalist public events.`); + hostageAction.push(`happily chatting with a group of slaves in ${his} arcology's modern public spaces.`); + } else { + V.hostage.counter.vaginal += 1; + hostageAction.push(`educating the public on what happens to slaves who don't fit into your arcology's revivalist culture.`); + hostageAction.push(`laughing at the ridiculousness of a video of your arcology's revivalist public events.`); + hostageAction.push(`chatting with a group of slaves and feeling right at home in ${his} arcology's modern public spaces.`); + } + } + r.push(hostageAction.random()); + } + } + + App.Events.addParagraph(node, r); + + App.UI.DOM.appendNewElement("p", node, `You remind yourself that success in this conflict will not be defined by the traditional measures of impending victory and defeat. The primary concern here is the weight of your holdings against those of your opponent. Improving your arcology's prosperity will move you closer to victory${(V.rivalSet === 1) ? `, and so will attacking the prosperity of your rival's neighboring arcology through economic means` : ``}. Of course, you can also take more direct action.`); + + r = []; + + r.push(`${capFirstChar(V.assistant.name)} collates several options for directly attacking your rival. This is a corporate war, not a military one; your peers would not tolerate a direct attack on ${himR}. You must bankrupt your opponent so they are no longer able to hide within the physical and intangible fortress that is their arcology. Your rival`); + if ((V.rivalOwner - V.rivalryPower) / V.arcologies[0].prosperity < 0.6) { + r.push(`is on their economic knees, putting them on the verge of defeat.`); + } else if ((V.rivalOwner - V.rivalryPower) / V.arcologies[0].prosperity < 0.7) { + r.push(`is in a bad financial state, well on the way to final dissolution and defeat.`); + } else if ((V.rivalOwner - V.rivalryPower) / V.arcologies[0].prosperity < 0.8) { + r.push(`has taken some hard corporate blows but is still standing.`); + } else if ((V.rivalOwner - V.rivalryPower) / V.arcologies[0].prosperity < 0.9) { + r.push(`is starting to feel the pressure.`); + } else { + r.push(`is essentially undamaged; you have hard work ahead of you.`); + } + App.Events.addParagraph(node, r); + + const result = App.UI.DOM.appendNewElement("div", node); + + App.UI.DOM.appendNewElement("div", result, App.UI.DOM.link( + `Apply ${cashFormat(10000)} in standard corporate warfare`, + () => { + cashX(-10000, "war"); + if (random(1, 100) > 50) { + V.rivalryPower += 2; + jQuery(result).empty().append(`Money is your infantry, your weapon, your ammunition in one. Last century, your soldiers would have died taking the enemy's positions. Today, your ¤ die <span class="green">taking</span> ${hisR} holdings. Once more unto the breach.`); + } else { + V.rivalryPower += 1; + jQuery(result).empty().append(`Money is your infantry, your weapon, your ammunition in one. Last century, your soldiers would have died before the enemy's machine guns. Today, your ¤ die <span class="red">failing to take</span> ${hisR} holdings. Once more unto the breach.`); + } + } + )); + + App.UI.DOM.appendNewElement("div", result, App.UI.DOM.link( + `Spend ${cashFormat(10000)} funding sabotage`, + () => { + cashX(-10000, "war"); + if (random(1, 100) > 70) { + repX(-100, "war"); + V.rivalryPower += 5; + jQuery(result).empty().append(`Since you are not so uncouth as to, for example, help fund a coup attempt, you fund traditional acts of corporate sabotage, including hacking, slander, and actual, physical thievery. There are some <span class="red">minor rumors</span> that you are to blame, but they're outweighed by the <span class="green">great pressure</span> these incidents put on your enemy.`); + } else { + repX(-500, "war"); + V.rivalryPower += 2; + jQuery(result).empty().append(`Since you are not so uncouth as to, for example, help fund a coup attempt, you fund traditional acts of corporate sabotage, including hacking, slander, and actual, physical thievery. Unfortunately, you seem to be a step behind this week. Your enemy <span class="red">prevents</span> many of your attacks, and even manages to turn a few minor players into public confessions that <span class="red">damage</span> your reputation.`); + } + } + )); + App.UI.DOM.appendNewElement("div", result, App.UI.DOM.link( + `Use ${cashFormat(25000)} creating local shortages`, + () => { + cashX(-25000, "war"); + V.rivalryPower += 3; + jQuery(result).empty().append(`With enough money, it's entirely possible to temporarily overwhelm even the advanced free market of the Free Cities. You choose a few critical items — pharmaceutical materials, electronic components, and other physical items — and purchase shipments intended for your rival's arcology. ${HisR} tenants are <span class="green">seriously inconvenienced</span> and blame their difficulties on their hapless landlord.`); + } + )); + + App.UI.DOM.appendNewElement("div", result, App.UI.DOM.link( + `Devote ${cashFormat(50000)} to purchasing the support of your peers`, + () => { + cashX(-50000, "war"); + V.rivalryPower += 5; + jQuery(result).empty().append(`Your fellow arcology owners have an interest in seeing the funder of the Daughters' attempt on you destroyed, but few of them are willing to spend any money or real effort on the matter. You do a few of them the favor of making the money and effort spent yours. Your rival finds ${hisR} dealings with your mutual peers becoming <span class="green">strangely difficult.</span> Market opinion is swinging your way.`); + } + )); + if (V.arcologies[0].FSRestartDecoration === 100) { + if (V.rep >= 15000) { + const link = App.UI.DOM.appendNewElement("div", result, App.UI.DOM.link( + `Use your connections to throttle your rival's arcology`, + () => { + V.rivalryPower += 10; + jQuery(result).empty().append(`With every external, and several internal, supply lines severed, ${hisR} tenants are faced with imminent destruction and <span class="green">rise up</span> against their hapless landlord. ${HeR} will not be able to weather such a siege for long.`); + } + )); + App.Events.addNode(link, [` This option is available due to your <span class="springgreen">societal connections,</span> and will economically devastate your rival`], "span", "note"); + } + } + if (V.PC.career === "mercenary" || V.PC.career === "arcology owner") { + if (V.mercenaries >= 3) { + const link = App.UI.DOM.appendNewElement("div", result, App.UI.DOM.link( + `Your peers will tolerate an attack if it's covert`, + () => { + const el = new DocumentFragment(); + const r = []; + r.push(`One night, you're working late in your office, ${V.assistant.name}'s avatar glowing companionably beside you. Without preamble, ${heA} reports to you in ${hisA} normal tones, "Team One reports ${nickname()} EKIA. Confirm, E. K. I. A. No other casualties, team exfiltrating."`); + V.rivalOwner = 0; + V.rivalryPower = 0; + if (V.rivalSet !== 0) { + for (const arc of V.arcologies) { + if (arc.rival === 1) { + arc.embargo = 0; + arc.embargoTarget = -1; + arc.influenceTarget = -1; + arc.rival = 0; + arc.government = "direct democracy"; + break; + } + } + } + if (V.hostageAnnounced === 1) { + r.push(`${V.assistant.name} pauses. "Also confirm package is secure."`); + V.hostageRescued = 1; + } + r.push(`You go back to your work.`); + App.Events.addNode(el, r, "div"); + jQuery(result).empty().append(el); + } + )); + App.Events.addNode(link, [` This option is available due to your <span class="springgreen">military background,</span> and will immediately end the conflict without enslaving your rival`], "span", "note"); + } + } + + if (V.PC.skill.hacking >= 100) { + if (V.mercenaries >= 3) { + const link = App.UI.DOM.appendNewElement("div", result, App.UI.DOM.link( + `Lock your rival down and let your mercs walk right in.`, + () => { + const el = new DocumentFragment(); + const r = []; + r.push(`While you hold your rival's arcology's system under your complete control, ${V.assistant.name} finally reports to you in ${hisA} normal tones, "Team One reports ${nickname()}`); + const rivalCaptured = (random(0, 100) > 50); + if (rivalCaptured) { + r.push(`Bagged and tagged. Confirm, bagged and tagged. No`); + } else { + r.push(`EKIA. Confirm, E. K. I. A. No other`); + } + r.push(`casualties, team exfiltrating."`); + V.rivalryPower = 0; + if (V.rivalSet !== 0) { + for (const arc of V.arcologies) { + if (arc.rival === 1) { + arc.embargo = 0; + arc.embargoTarget = -1; + arc.influenceTarget = -1; + arc.rival = 0; + arc.government = "direct democracy"; + if (rivalCaptured && arc.FSSupremacist > 20) { + V.rivalRace = arc.FSSupremacistRace; + } else if (rivalCaptured && arc.FSSubjugationist > 20) { + V.rivalRace = Array.from(setup.filterRaces.keys()).filter(race => race !== arc.FSSubjugationistRace).random(); + } + break; + } + } + } + if (V.hostageAnnounced === 1) { + r.push(`${V.assistant.name} pauses. "Also confirm package is secure."`); + V.hostageRescued = 1; + } + r.push(`Smirking to yourself at a job well done, you`); + if (rivalCaptured) { + r.push(`await the bastard's arrival.`); + App.Events.addParagraph(el, r); + App.UI.DOM.appendNewElement("div", el, pRivalryCapture()); + } else { + r.push(`return to your usual work.`); + App.Events.addParagraph(el, r); + } + + jQuery(result).empty().append(el); + } + )); + App.Events.addNode(link, [` This option is available due to your <span class="springgreen">your hacking mastery,</span> and will immediately end the conflict with a chance of enslaving your rival`], "span", "note"); + } + } + return node; + function nickname() { + switch (V.rivalryFS) { + case "Racial Subjugationism": + return `Racemixer`; + case "Racial Supremacism": + return `Miscegenator`; + case "Repopulation Focus": + return `Sterilizer`; + case "Eugenics": + return `Breeder`; + case "Gender Radicalism": + return `Handholder`; + case "Gender Fundamentalism": + return `Sodomite`; + case "Paternalism": + return `Lucifer`; + case "Degradationism": + return `Archangel Prime`; + case "Body Purism": + return `Plastic Surgeon`; + case "Transformation Fetishism": + return `Purist One`; + case "Youth Preferentialism": + return `Cake Eater`; + case "Maturity Preferentialism": + return `Epheb`; + case "Slimness Enthusiasm": + return `Grower`; + case "Asset Expansionism": + return `Flat Lover`; + case "Pastoralism": + return `Gym Rat`; + case "Physical Idealism": + return `Feeder`; + case "Hedonistic Decadence": + return `Gym Rat`; + case "Chattel Religionism": + return `Cultural Marxist`; + case "Multiculturalism": + return `Prophet`; + case "Intellectual Dependency": + return `Teacher`; + case "Slave Professionalism": + return `Brain Drainer`; + case "Petite Admiration": + return `Macrophile`; + case "Statuesque Glorification": + return `Midget Muncher`; + default: + return `Target One`; + } + } + } +}; diff --git a/src/events/story/pRivalryActions.tw b/src/events/story/pRivalryActions.tw deleted file mode 100644 index 20a98d797f94ca8f4e516b253dbf8b3abeb54142..0000000000000000000000000000000000000000 --- a/src/events/story/pRivalryActions.tw +++ /dev/null @@ -1,3352 +0,0 @@ -:: P rivalry actions [nobr] - -<<set $nextButton = "Continue", $nextLink = "Random Nonindividual Event", $rivalryDuration += 1>> - -<<if $hostageAnnounced == 1>> - /* 000-250-006 */ - <<if $seeImages == 1>> - <<if $imageChoice == 1>> - <div class="imageRef medImg"><<SlaveArt $hostage 2 0>></div> - <<else>> - <div class="imageRef medImg"><<SlaveArt $hostage 2 0>></div> - <</if>> - <</if>> - /* 000-250-006 */ - - <<setLocalPronouns $hostage>> - <<run Enunciate($hostage)>> -<</if>> - -<<setAssistantPronouns>> -<<setNonlocalPronouns $seeDicks>> - -<<if $hostageWife != 0>> - <<setLocalPronouns $hostageWife 2>> -<</if>> - -Your inter-arcology war with the arcology owner behind the Daughters of Liberty has dragged on for $rivalryDuration week<<if $rivalryDuration > 1>>s<</if>>. The tone of your arcology is a bit more somber than usual. You have enhanced security in place, and the populace has caught the mood. - -<<if $hostageAnnounced == 1>> -<<if $rivalryDuration >= 30>>The latest message from your rival is a live communication.<<else>>The latest message from your rival recently arrived, showing <<= SlaveFullName($hostage)>><</if>> -<<if $rivalryDuration == 1>> - <<switch $rivalryFS>> - <<case "Racial Subjugationism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 10>> - <<set $hostage.counter.vaginal += 10>> - <<set $hostage.counter.anal += 10>> - <<set $hostage.behavioralFlaw = "arrogant">> - <<set $hostage.sexualFlaw = "shamefast">> - bound and offered to a pair of $arcologies[0].FSSubjugationistRace girls. - <<case "Racial Supremacism">> - <<set $hostage.trust += 5>> - <<set $hostage.devotion += 5>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<set $hostage.behavioralFlaw = "odd">> - <<set $hostage.sexualFlaw = "repressed">> - being registered as a piece of <<print $arcologies[0].FSSupremacistRace>> meat, fit only to be abused. - <<case "Repopulation Focus">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 5>> - <<set $hostage.counter.vaginal += 5>> - <<set $hostage.counter.anal += 5>> - <<set $hostage.counter.mammary += 5>> - <<set $hostage.behavioralQuirk = "adores men">> - <<set $hostage.sexualQuirk = "caring">> - being operated on to remove $his fertility. - <<case "Eugenics">> - <<if $seeHyperPreg != 1>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.preg = 4>> - <<set $hostage.pregType = 8>> - <<set $hostage.pregKnown = 1>> - <<set $hostage.pregWeek = $rivalryDuration>> - <<set WombImpregnate($hostage, $hostage.pregType, 0, $hostage.preg)>> - <<run SetBellySize($hostage)>> - <<set $hostage.vagina = 2>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<set $hostage.behavioralFlaw = "odd">> - <<set $hostage.sexualFlaw = "hates penetration">> - undergoing a fertility screening; the video ends with the positive results. - <<else>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.preg = 4>> - <<set $hostage.pregType = 40>> - <<set $hostage.pregKnown = 1>> - <<set $hostage.pregWeek = $rivalryDuration>> - <<set WombImpregnate($hostage, $hostage.pregType, 0, $hostage.preg)>> - <<run SetBellySize($hostage)>> - <<set $hostage.vagina = 2>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<set $hostage.behavioralFlaw = "odd">> - <<set $hostage.sexualFlaw = "hates penetration">> - undergoing a fertility screening; the video ends with the positive results. - <</if>> - <<case "Gender Radicalism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.behavioralFlaw = "arrogant">> - <<set $hostage.sexualFlaw = "idealistic">> - <<set $hostage.fetish = "none">> - having measurements taken for $his new station in life. - <<case "Gender Fundamentalism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.anal += 10>> - <<set $hostage.behavioralFlaw = "hates men">> - <<set $hostage.sexualFlaw = "hates anal">> - begging for $his anal virginity to not be taken. - <<case "Paternalism">> - <<set $hostage.trust += 5>> - <<set $hostage.devotion += 5>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<set $hostage.earPiercing = 1>> - <<set $hostage.nosePiercing = 1>> - <<set $hostage.nipplesPiercing = 0>> - <<set $hostage.lipsPiercing = 0>> - <<set $hostage.vaginaPiercing = 0>> - <<set $hostage.anusPiercing = 0>> - <<set $hostage.clitPiercing = 0>> - <<set $hostage.eyebrowPiercing = 0>> - <<set $hostage.navelPiercing = 0>> - <<set $hostage.corsetPiercing = 0>> - <<set $hostage.areolaePiercing = 0>> - <<set $hostage.tonguePiercing = 0>> - <<set $hostage.boobsTat = 0>> - <<set $hostage.buttTat = 0>> - <<set $hostage.vaginaTat = 0>> - <<set $hostage.lipsTat = 0>> - <<set $hostage.anusTat = 0>> - <<set $hostage.shouldersTat = 0>> - <<set $hostage.backTat = 0>> - <<set $hostage.armsTat = 0>> - <<set $hostage.legsTat = 0>> - <<set $hostage.stampTat = "degradation">> - <<set $hostage.behavioralFlaw = "odd">> - <<set $hostage.sexualFlaw = "apathetic">> - crying as $his nose and ears are pierced and the first of many tattoos inked into $his flesh. - <<case "Degradationism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.behavioralFlaw = "liberated">> - <<set $hostage.sexualFlaw = "idealistic">> - being shown to $his luxurious new room, complete with heart-shaped love bed. - <<case "Body Purism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.boobs += 2000>> - <<set $hostage.boobsImplant += 2000>> - <<set $hostage.boobsImplantType = "advanced fillable">> - <<set $hostage.behavioralFlaw = "anorexic">> - <<set $hostage.sexualFlaw = "shamefast">> - struggling against $his restraints on the operating table as a pair of 2000cc implants are forced into $his chest. - <<case "Transformation Fetishism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.behavioralFlaw = "anorexic">> - <<set $hostage.sexualFlaw = "shamefast">> - being carefully checked for any implants. - <<case "Youth Preferentialism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 1>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.counter.anal += 1>> - <<set $hostage.behavioralFlaw = "bitchy">> - <<set $hostage.sexualFlaw = "idealistic">> - bound and offered to an older _woman2. - <<case "Maturity Preferentialism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 1>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.counter.anal += 1>> - <<set $hostage.behavioralFlaw = "bitchy">> - <<set $hostage.sexualFlaw = "idealistic">> - bound and offered to a young _woman2. - <<case "Slimness Enthusiasm">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.boobs += 1500>> - <<set $hostage.butt = 4>> - <<set $hostage.behavioralFlaw = "anorexic">> - <<set $hostage.sexualFlaw = "crude">> - screaming as $he watches $his breasts swell from the intense amount of A-HGH being pumped into them. - <<case "Asset Expansionism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.behavioralFlaw = "bitchy">> - <<set $hostage.sexualFlaw = "shamefast">> - being weighed and measured to document $his trim body. - <<case "Physical IdealismOLD">> - <<set $hostage.lactation = 2>> - <<set $hostage.lactationDuration = 2>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.boobs += 1000>> - <<set $hostage.weight = 0>> - <<set $hostage.butt = 4>> - <<set $hostage.behavioralFlaw = "anorexic">> - <<set $hostage.sexualFlaw = "shamefast">> - standing in front of a mirror sobbing as droplets of milk form on $his $hostage.nipples nipples, courtesy of $his newly implanted lactation drugs. - <<case "Pastoralism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.muscles = 0>> - <<set $hostage.behavioralFlaw = "gluttonous">> - <<set $hostage.sexualFlaw = "shamefast">> - being weighed and measured to determine the best way to replace $his fat with muscle. - <<case "Physical Idealism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.boobs = 400>> - <<set $hostage.weight = 10>> - <<set $hostage.counter.vaginal += 28>> - <<set $hostage.vagina = 2>> - <<set $hostage.butt = 2>> - <<set $hostage.behavioralFlaw = "anorexic">> - <<set $hostage.sexualFlaw = "hates penetration">> - struggling with a feeding tube down $his throat, $his belly heavily bloated with fattening slave food, $his body already looking a little soft. $He is being forcibly fucked, $his taut middle jiggling slightly with each thrust; 28 tallies are already drawn over $his pussy. - <<case "Hedonistic Decadence">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.muscles = 0>> - <<set $hostage.behavioralFlaw = "gluttonous">> - <<set $hostage.sexualFlaw = "shamefast">> - being weighed and measured to determine the best way to replace $his fat with muscle. - <<case "Chattel Religionism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.behavioralFlaw = "arrogant">> - <<set $hostage.sexualFlaw = "repressed">> - bound and being introduced to $his new lifestyle. - <<case "Multiculturalism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 10>> - <<set $hostage.counter.vaginal += 10>> - <<set $hostage.counter.anal += 10>> - <<set $hostage.counter.mammary += 10>> - <<set $hostage.behavioralFlaw = "liberated">> - <<set $hostage.sexualFlaw = "repressed">> - being inducted into $his new religion. - <<case "Intellectual Dependency">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.behavioralFlaw = "bitchy">> - <<set $hostage.sexualFlaw = "apathetic">> - bound and being introduced to $his new curriculum. - <<case "Slave Professionalism">> - <<set $hostage.trust += 5>> - <<set $hostage.devotion += 5>> - <<set $hostage.counter.vaginal += 10>> - <<set $hostage.energy += 5>> - <<set $hostage.addict += 2>> - <<set $hostage.hLength += 7>> - <<set $hostage.behavioralFlaw = "arrogant">> - <<set $hostage.sexualFlaw = "repressed">> - bound and being read the details of the drugs that will be correcting $his body and mind. - <<case "Petite Admiration">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 1>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.counter.anal += 1>> - <<set $hostage.behavioralFlaw = "liberated">> - <<set $hostage.sexualFlaw = "idealistic">> - bound and offered to a towering _woman2. - <<case "Statuesque Glorification">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 1>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.counter.anal += 1>> - <<set $hostage.behavioralFlaw = "liberated">> - <<set $hostage.sexualFlaw = "judgemental">> - tied down and offered to a tiny _woman2. - <<default>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.behavioralFlaw = "arrogant">> - <<set $hostage.sexualFlaw = "repressed">> - bound and being introduced to $his new lifestyle. - <</switch>> -<<elseif $rivalryDuration == 6>> - <<switch $rivalryFS>> - <<case "Racial Subjugationism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 10>> - <<set $hostage.counter.vaginal += 10>> - <<set $hostage.counter.anal += 10>> - <<set $hostage.fetish = "submissive">> - <<set $hostage.fetishStrength = 10>> - no longer trying to escape from the $arcologies[0].FSSubjugationistRace girls. - <<case "Racial Supremacism">> - <<set $hostage.trust += 5>> - <<set $hostage.devotion += 5>> - <<if $hostage.vagina < 2>> - <<set $hostage.vagina = 2>> - <</if>> - <<if $hostage.anus < 2>> - <<set $hostage.anus = 2>> - <</if>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<set $hostage.fetish = "masochist">> - <<set $hostage.fetishStrength = 10>> - beginning to lose hope in ever being something more than just a piece of <<print $arcologies[0].FSSupremacistRace>> meat. - <<case "Repopulation Focus">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 5>> - <<set $hostage.counter.vaginal += 5>> - <<set $hostage.counter.anal += 5>> - <<set $hostage.counter.mammary += 5>> - beginning to come to terms with $his lack of fertility. - <<case "Eugenics">> - <<if $seeHyperPreg != 1>> - groping $his rounded tummy, blushing thoroughly as $he explores $his new curve. - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.preg = 11>> - <<set $hostage.pregType = 8>> - <<set $hostage.pregKnown = 1>> - <<set $hostage.pregWeek = $rivalryDuration>> - <<set WombImpregnate($hostage, $hostage.pregType, 0, $hostage.preg)>> - <<run SetBellySize($hostage)>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<set $hostage.fetish = "pregnancy">> - <<set $hostage.fetishStrength = 10>> - <<else>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.preg = 11>> - <<set $hostage.pregType = 40>> - <<set $hostage.pregKnown = 1>> - <<set $hostage.pregWeek = $rivalryDuration>> - <<set WombImpregnate($hostage, $hostage.pregType, 0, $hostage.preg)>> - <<run SetBellySize($hostage)>> - <<set $hostage.boobs += 100>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<set $hostage.fetish = "pregnancy">> - <<set $hostage.fetishStrength = 10>> - groping $his massively distended belly, blushing thoroughly as $he explores $his new curve. - <</if>> - <<case "Gender Radicalism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.fetish = "submissive">> - <<set $hostage.fetishStrength = 10>> - trying on new clothes while $he thinks no-one is watching. - <<case "Gender Fundamentalism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.anus = 2>> - <<set $hostage.counter.anal += 10>> - <<set $hostage.fetish = "buttslut">> - <<set $hostage.fetishStrength = 10>> - questioning why getting buttfucked is starting to feel so good. - <<case "Paternalism">> - <<set $hostage.trust += 5>> - <<set $hostage.devotion += 5>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<set $hostage.heels = 1>> - <<set $hostage.earPiercing = 1>> - <<set $hostage.nosePiercing = 1>> - <<set $hostage.nipplesPiercing = 1>> - <<set $hostage.lipsPiercing = 1>> - <<set $hostage.vaginaPiercing = 0>> - <<set $hostage.anusPiercing = 0>> - <<set $hostage.clitPiercing = 1>> - <<set $hostage.eyebrowPiercing = 0>> - <<set $hostage.navelPiercing = 1>> - <<set $hostage.corsetPiercing = 0>> - <<set $hostage.areolaePiercing = 0>> - <<set $hostage.tonguePiercing = 1>> - <<set $hostage.boobsTat = "degradation">> - <<set $hostage.backTat = "degradation">> - <<set $hostage.stampTat = "degradation">> - <<set $hostage.fetish = "masochist">> - <<set $hostage.fetishStrength = 10>> - <<run App.Medicine.Modification.addScar($hostage, "left ankle", "surgical", 2)>> - <<run App.Medicine.Modification.addScar($hostage, "right ankle", "surgical", 2)>> - <<run App.Medicine.Modification.addScar($hostage, "left calf", "surgical", 2)>> - <<run App.Medicine.Modification.addScar($hostage, "right calf", "surgical", 2)>> - undergoing surgery to sever the tendons in $his heels. - <<case "Degradationism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.fetish = "submissive">> - <<set $hostage.fetishStrength = 10>> - questioning if being $his owner's plaything is what $he really wants. - <<case "Body Purism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.boobs += 2000>> - <<set $hostage.boobsImplant += 2000>> - <<if $hostage.boobsImplant > 10000>> - <<set $hostage.boobsImplantType = "hyper fillable">> - <</if>> - <<set $hostage.boobShape = "spherical">> - <<set $hostage.nipples = "flat">> - <<set $hostage.fetish = "boobs">> - <<set $hostage.fetishStrength = 10>> - blushing as $he attempts to get dressed with $his massive <<print $hostage.boobs>>cc fake tits getting in the way. - <<case "Transformation Fetishism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.fetish = "submissive">> - <<set $hostage.fetishStrength = 10>> - blushing as $he recollects all the compliments $his pure body has received so far. - <<case "Youth Preferentialism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 5>> - <<set $hostage.counter.vaginal += 5>> - <<set $hostage.counter.anal += 5>> - <<set $hostage.fetish = "submissive">> - <<set $hostage.fetishStrength = 10>> - blushing as $he thinks about being dominated by that MILF. - <<case "Maturity Preferentialism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 5>> - <<set $hostage.counter.vaginal += 5>> - <<set $hostage.counter.anal += 5>> - <<set $hostage.fetish = "dom">> - <<set $hostage.fetishStrength = 10>> - blushing as $he thinks about possibly dominating $his energetic harasser. - <<case "Slimness Enthusiasm">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight = 0>> - <<set $hostage.boobs += 1500>> - <<set $hostage.butt = 5>> - <<set $hostage.fetish = "boobs">> - <<set $hostage.fetishStrength = 10>> - blushing as $he attempts to get dressed with $his massive <<print $hostage.boobs>>cc tits getting in the way. - <<case "Asset Expansionism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.vaginal += 1>> - blushing as $he recollects all the compliments $his slim body has received so far. - <<case "Pastoralism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight = 50>> - <<set $hostage.muscles = 25>> - <<set $hostage.boobs = 1000>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.fetish = "dom">> - <<set $hostage.fetishStrength = 10>> - crashing into $his bed, exhausted from all $his exercise. As $he massages $his sore body, $he can't help gasp at the weight $he has lost. - <<case "Cummunism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight = 20>> - <<set $hostage.boobs += 1000>> - <<set $hostage.fetish = "boobs">> - <<set $hostage.fetishStrength = 10>> - groaning as $he lowers $his growing body onto $his cot. $He shoves a massive <<print $hostage.boobs>>cc milky breast aside so $he can massage $his hugely distended belly. $He moans in pain under the massive amount of high-caloric fluid within $his gut. - <<case "Physical Idealism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight = 50>> - <<set $hostage.boobs = 800>> - <<set $hostage.butt = 4>> - <<set $hostage.counter.vaginal += 28>> - <<set $hostage.vagina = 3>> - <<set $hostage.behavioralFlaw = "anorexic">> - <<set $hostage.sexualFlaw = "hates penetration">> - groaning as $his taut belly is measured and $his weight is taken; 140 tallies adorn $his lower belly. "88 kilos, a good start, but nowhere near the end. Now about that fetish of yours..." $He responds with a meek - <<if $seePreg != 0>> - <<set $hostageFetish = either("boobs", "buttslut", "cumslut", "dom", "humiliation", "masochist", "pregnancy", "sadist", "submissive")>> - <<else>> - <<set $hostageFetish = either("boobs", "buttslut", "cumslut", "dom", "humiliation", "masochist", "sadist", "submissive")>> - <</if>> - <<switch $hostageFetish>> - <<case "submissive">> - "I like getting dominated..." - <<set $hostage.fetish = "submissive">> - <<set $hostage.fetishStrength = 10>> - <<case "cumslut">> - "I like getting cummed on..." - <<set $hostage.fetish = "cumslut">> - <<set $hostage.fetishStrength = 10>> - <<case "humiliation">> - "I like being humiliated..." - <<set $hostage.fetish = "humiliation">> - <<set $hostage.fetishStrength = 10>> - <<case "buttslut">> - "I like getting assfucked..." - <<set $hostage.fetish = "buttslut">> - <<set $hostage.fetishStrength = 10>> - <<case "boobs">> - "I like big breasts..." - <<set $hostage.fetish = "boobs">> - <<set $hostage.fetishStrength = 10>> - <<case "sadist">> - "I like hurting people..." - <<set $hostage.fetish = "sadist">> - <<set $hostage.fetishStrength = 10>> - <<case "masochist">> - "I like getting beaten..." - <<set $hostage.fetish = "masochist">> - <<set $hostage.fetishStrength = 10>> - <<case "dom">> - "I like getting my way..." - <<set $hostage.fetish = "dom">> - <<set $hostage.fetishStrength = 10>> - <<case "pregnancy">> - "I want to get pregnant..." - <<set $hostage.fetish = "pregnancy">> - <<set $hostage.fetishStrength = 10>> - <</switch>> - "No need to be shy about it! We'll make sure to - <<switch $hostageFetish>> - <<case "submissive">> - get a big strong man to teach you your place right away." - <<case "cumslut">> - have plenty of cum ready for you." - <<case "humiliation">> - broadcast your life to the world." - <<case "buttslut">> - give your ass plenty of attention." - <<case "boobs">> - get a big pair of fillable implants in you right away." - <<set $hostage.boobs += 1000>> - <<set $hostage.boobsImplant += 1000>> - <<set $hostage.boobsImplantType = "fillable">> - <<case "sadist">> - have a sissy little bitch in reach for you to torment as you please." - <<case "masochist">> - get a big strong man to teach you your place right away." - <<case "dom">> - have a sissy little bitch to do whatever you please." - <<case "pregnancy">> - take you off your birth control, won't be long after that." - <<set $hostage.preg = 1>> - <<set $hostage.pregType = setPregType($hostage)>> - <<set WombImpregnate($hostage, $hostage.pregType, 0, 1)>> - <<set $hostage.pregKnown = 1>> - <<set $hostage.pregWeek = 1>> - <<run SetBellySize($hostage)>> - <</switch>> - <<case "Hedonistic Decadence">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight = 50>> - <<set $hostage.muscles = 25>> - <<set $hostage.boobs = 1000>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.fetish = "dom">> - <<set $hostage.fetishStrength = 10>> - crashing into $his bed, exhausted from all $his exercise. As $he massages $his sore body, $he can't help gasp at the weight $he has lost. - <<case "Chattel Religionism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.fetish = "submissive">> - <<set $hostage.fetishStrength = 10>> - questioning why $he is yearning to be a part of this society. - <<case "Multiculturalism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 10>> - <<set $hostage.counter.vaginal += 10>> - <<set $hostage.counter.anal += 10>> - <<set $hostage.counter.mammary += 10>> - <<set $hostage.fetish = "dom">> - <<set $hostage.fetishStrength = 10>> - studying $his scriptures with the hope that $he can do something to help you. - <<case "Intellectual Dependency">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 10>> - <<set $hostage.counter.vaginal += 10>> - <<set $hostage.counter.anal += 10>> - <<set $hostage.intelligenceImplant = Math.clamp($hostage.intelligenceImplant+1, 0, 30)>> - <<set $hostage.skill.oral = Math.clamp($hostage.skill.oral+5, 0, 100)>> - <<set $hostage.skill.entertainment = Math.clamp($hostage.skill.entertainment+5, 0, 100)>> - <<set $hostage.skill.anal = Math.clamp($hostage.skill.anal+5, 0, 100)>> - <<set $hostage.skill.vaginal = Math.clamp($hostage.skill.vaginal+5, 0, 100)>> - <<set $hostage.skill.whoring = Math.clamp($hostage.skill.whoring+5, 0, 100)>> - <<set $hostage.fetish = "submissive">> - <<set $hostage.fetishStrength = 10>> - reading a book on styling oneself. - <<case "Slave Professionalism">> - <<set $hostage.trust += 5>> - <<set $hostage.devotion += 5>> - <<set $hostage.intelligenceImplant = Math.clamp($hostage.intelligenceImplant-5, 0, 30)>> - <<set $hostage.counter.oral += 30>> - <<set $hostage.counter.vaginal += 30>> - <<set $hostage.counter.anal += 30>> - <<set $hostage.vagina = 3>> - <<set $hostage.anus = 3>> - <<set $hostage.energy += 5>> - <<set $hostage.addict += 2>> - <<set $hostage.hLength += 7>> - <<set $hostage.fetish = "humiliation">> - <<set $hostage.fetishStrength = 10>> - uncontrollably masturbating as $he struggles to stay coherent. "I need it... I can't <<s>>top... Need more..." $He orgasms in full view of the camera and passes out. - <<case "Petite Admiration">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 10>> - <<set $hostage.counter.vaginal += 5>> - <<set $hostage.counter.anal += 5>> - <<set $hostage.fetish = "submissive">> - <<set $hostage.fetishStrength = 10>> - blushing as $he thinks about being picked up, pinned against a wall and dominated by that giant. - <<case "Statuesque Glorification">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 3>> - <<set $hostage.counter.vaginal += 7>> - <<set $hostage.counter.anal += 7>> - <<set $hostage.fetish = "dom">> - <<set $hostage.fetishStrength = 10>> - blushing as $he thinks about possibly dominating $his minuscule harasser. - <<default>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.fetish = "submissive">> - <<set $hostage.fetishStrength = 10>> - questioning why $he is yearning to be a part of this society. - <</switch>> -<<elseif $rivalryDuration == 11>> - <<switch $rivalryFS>> - <<case "Racial Subjugationism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 20>> - <<set $hostage.counter.vaginal += 20>> - <<set $hostage.counter.anal += 20>> - <<set $hostage.fetishStrength = 65>> - <<set $hostage.behavioralFlaw = "none">> - <<set $hostage.sexualFlaw = "none">> - <<set $hostage.behavioralQuirk = "confident">> - <<set $hostage.sexualQuirk = "perverted">> - calling $his $arcologies[0].FSSubjugationistRace girls for some release. - <<case "Racial Supremacism">> - <<set $hostage.trust += 5>> - <<set $hostage.devotion += 5>> - <<if $hostage.preg < 1 && $seePreg != 0>> - <<set $hostage.preg = 12>> - <<set $hostage.pregType = 1>> - <<set $hostage.pregKnown = 1>> - <<set $hostage.pregWeek = 12>> - <<set WombImpregnate($hostage, $hostage.pregType, 0, $hostage.preg)>> - <<run SetBellySize($hostage)>> - <</if>> - <<if $hostage.vagina < 3>> - <<set $hostage.vagina = 3>> - <</if>> - <<if $hostage.anus < 3>> - <<set $hostage.anus = 3>> - <</if>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<set $hostage.fetishStrength = 65>> - <<set $hostage.behavioralQuirk = "none">> - <<set $hostage.behavioralFlaw = "odd">> - <<set $hostage.sexualFlaw = "apathetic">> - <<run App.Medicine.Modification.addScourged($hostage)>> - <<run App.Medicine.Modification.addScar($hostage, "anus", "generic")>> - <<run App.Medicine.Modification.addScar($hostage, "vagina", "generic")>> - collapsing into $his rancid cot, hands on $his <<if $seePreg != 0>>rounded middle<<else>>empty belly<</if>>, sobbing in terror. - <<case "Repopulation Focus">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 5>> - <<set $hostage.counter.vaginal += 5>> - <<set $hostage.counter.anal += 5>> - <<set $hostage.counter.mammary += 5>> - <<set $hostage.behavioralFlaw = "hates men">> - <<set $hostage.sexualFlaw = "hates penetration">> - realizing that $he doesn't need to bear children to be happy in life. - <<case "Eugenics">> - <<if $seeHyperPreg != 1>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.preg = 21>> - <<set $hostage.pregType = 8>> - <<set $hostage.pregKnown = 1>> - <<set $hostage.pregWeek = $rivalryDuration>> - <<set WombImpregnate($hostage, $hostage.pregType, 0, $hostage.preg)>> - <<run SetBellySize($hostage)>> - <<set $hostage.vagina = 3>> - <<set $hostage.boobs += 100>> - <<set $hostage.lactation = 1>> - <<set $hostage.lactationDuration = 2>> - <<set $hostage.counter.oral += 100>> - <<set $hostage.counter.vaginal += 100>> - <<set $hostage.counter.anal += 100>> - <<set $hostage.counter.mammary += 100>> - <<set $hostage.behavioralFlaw = "none">> - <<set $hostage.sexualFlaw = "none">> - <<set $hostage.behavioralQuirk = "adores men">> - <<set $hostage.sexualQuirk = "caring">> - <<set $hostage.fetishStrength = 65>> - realizing that being pregnant is possibly the best thing in life, as $he cradles $his growing belly. - <<else>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.preg = 21>> - <<set $hostage.pregType = 40>> - <<set $hostage.pregKnown = 1>> - <<set $hostage.pregWeek = $rivalryDuration>> - <<set WombImpregnate($hostage, $hostage.pregType, 0, $hostage.preg)>> - <<run SetBellySize($hostage)>> - <<set $hostage.vagina = 3>> - <<set $hostage.boobs += 300>> - <<set $hostage.lactation = 1>> - <<set $hostage.lactationDuration = 2>> - <<set $hostage.counter.oral += 100>> - <<set $hostage.counter.vaginal += 100>> - <<set $hostage.counter.anal += 100>> - <<set $hostage.counter.mammary += 100>> - <<set $hostage.behavioralFlaw = "none">> - <<set $hostage.sexualFlaw = "none">> - <<set $hostage.behavioralQuirk = "adores men">> - <<set $hostage.sexualQuirk = "caring">> - <<set $hostage.fetishStrength = 65>> - realizing that being pregnant is possibly the best thing in life, as $he attempts to cradle $his enormous belly. - <</if>> - <<case "Gender Radicalism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.fetishStrength = 65>> - <<set $hostage.behavioralFlaw = "none">> - <<set $hostage.sexualFlaw = "none">> - <<set $hostage.behavioralQuirk = "insecure">> - <<set $hostage.sexualQuirk = "romantic">> - realizing that a woman's place is next to the powerful, not being powerful. - <<case "Gender Fundamentalism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.anus = 3>> - <<set $hostage.counter.anal += 10>> - <<if $seeDicks != 0>> - <<set $hostage.dick = 1>> - <</if>> - <<set $hostage.behavioralFlaw = "none">> - <<set $hostage.sexualFlaw = "none">> - <<set $hostage.behavioralQuirk = "adores men">> - <<set $hostage.sexualQuirk = "size queen">> - <<set $hostage.fetishStrength = 65>> - realizing that nothing feels better than a huge dick up $his ass.<<if $seeDicks != 0>> Well, except maybe touching $his new penis while taking it in the ass.<</if>> - <<case "Paternalism">> - <<set $hostage.trust += 5>> - <<set $hostage.devotion += 5>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<set $hostage.voice = 0>> - <<set $hostage.earPiercing = 2>> - <<set $hostage.nosePiercing = 2>> - <<set $hostage.nipplesPiercing = 1>> - <<set $hostage.lipsPiercing = 1>> - <<set $hostage.vaginaPiercing = 1>> - <<set $hostage.anusPiercing = 0>> - <<set $hostage.clitPiercing = 1>> - <<set $hostage.eyebrowPiercing = 1>> - <<set $hostage.navelPiercing = 2>> - <<set $hostage.corsetPiercing = 0>> - <<set $hostage.areolaePiercing = 1>> - <<set $hostage.tonguePiercing = 1>> - <<set $hostage.buttTat = "degradation">> - <<set $hostage.vaginaTat = "degradation">> - <<set $hostage.shouldersTat = "degradation">> - <<set $hostage.armsTat = "degradation">> - <<set $hostage.legsTat = "degradation">> - <<run App.Medicine.Modification.addScar($hostage, "anus", "generic")>> - <<run App.Medicine.Modification.addScar($hostage, "vagina", "generic")>> - <<set $hostage.fetishStrength = 65>> - <<run App.Medicine.Modification.addScar($hostage, "neck", "surgical", 2)>> - screaming as $his throat is prepared for surgery, knowing this will be the last sound $he ever vocalizes. - <<case "Degradationism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.behavioralFlaw = "none">> - <<set $hostage.sexualFlaw = "none">> - <<set $hostage.behavioralQuirk = "advocate">> - <<set $hostage.sexualQuirk = "romantic">> - <<set $hostage.fetishStrength = 65>> - waiting on $his love-bed for $his owner to come and take $him to heaven. - <<case "Body Purism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.boobs += 2000>> - <<set $hostage.boobsImplant += 2000>> - <<if $hostage.boobsImplant > 10000>> - <<set $hostage.boobsImplantType = "hyper fillable">> - <</if>> - <<set $hostage.butt = 7>> - <<set $hostage.buttImplant = 4>> - <<set $hostage.buttImplantType = "fillable">> - <<set $hostage.behavioralFlaw = "none">> - <<set $hostage.behavioralQuirk = "insecure">> - <<set $hostage.sexualFlaw = "crude">> - <<set $hostage.fetishStrength = 65>> - getting off the surgical table and immediately falling to the floor under the weight of $his immense <<print $hostage.boobs>>cc implants. $He quickly calls out, not for help, but for a dick in $him to celebrate this occasion. - <<case "Transformation Fetishism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.behavioralFlaw = "none">> - <<set $hostage.sexualFlaw = "none">> - <<set $hostage.behavioralQuirk = "fitness">> - <<set $hostage.sexualQuirk = "romantic">> - <<set $hostage.fetishStrength = 65>> - realizing that $his pure body really is gorgeous. - <<case "Youth Preferentialism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 10>> - <<set $hostage.counter.vaginal += 10>> - <<set $hostage.counter.anal += 10>> - <<set $hostage.behavioralFlaw = "none">> - <<set $hostage.sexualFlaw = "none">> - <<set $hostage.behavioralQuirk = "adores women">> - <<set $hostage.sexualQuirk = "romantic">> - <<set $hostage.fetishStrength = 65>> - beginning to fall in love with $his loving _mother2 figure. - <<case "Maturity Preferentialism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 10>> - <<set $hostage.counter.vaginal += 10>> - <<set $hostage.counter.anal += 10>> - <<set $hostage.behavioralFlaw = "none">> - <<set $hostage.sexualFlaw = "none">> - <<set $hostage.behavioralQuirk = "adores women">> - <<set $hostage.sexualQuirk = "romantic">> - <<set $hostage.fetishStrength = 65>> - beginning to fall in love with $his energetic friend. - <<case "Slimness Enthusiasm">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight = 20>> - <<set $hostage.boobs += 1500>> - <<set $hostage.butt = 6>> - <<set $hostage.sexualFlaw = "none">> - <<set $hostage.behavioralFlaw = "gluttonous">> - <<set $hostage.sexualQuirk = "size queen">> - getting out of bed and immediately falling to the floor under the weight of $his immense <<print $hostage.boobs>>cc breasts. $He quickly calls out, not for help, but for a dick in $him to celebrate this occasion. - <<case "Asset Expansionism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.behavioralFlaw = "none">> - <<set $hostage.sexualFlaw = "none">> - <<set $hostage.behavioralQuirk = "fitness">> - <<set $hostage.sexualQuirk = "tease">> - realizing that a thin female figure is gorgeous. - <<case "Pastoralism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight = 20>> - <<set $hostage.muscles = 50>> - <<set $hostage.boobs = 700>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.behavioralFlaw = "none">> - <<set $hostage.sexualFlaw = "none">> - <<set $hostage.behavioralQuirk = "fitness">> - <<set $hostage.sexualQuirk = "romantic">> - <<set $hostage.fetishStrength = 65>> - stepping onto a scale and gawking out how much weight $he has lost. $He flexes, giggling to $himself, before picking up a weight. - <<case "Cummunism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight = 50>> - <<set $hostage.boobs += 1000>> - <<set $hostage.butt = 5>> - <<set $hostage.fetishStrength = 65>> - <<set $hostage.behavioralFlaw = "gluttonous">> - <<set $hostage.sexualFlaw = "crude">> - getting out of bed and immediately falling to the floor under the weight of $his immense <<print $hostage.boobs>>cc breasts. As $his meaty body jiggles and a veritable flood of milk escapes $his breasts; $he calls out, not for help, but for a dick in $him to celebrate this occasion. - <<case "Physical Idealism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight = 75>> - <<set $hostage.boobs += 100>> - <<set $hostage.butt = 5>> - <<set $hostage.fetishStrength = 65>> - <<set $hostage.behavioralFlaw = "gluttonous">> - <<set $hostage.sexualFlaw = "crude">> - <<set $hostage.counter.vaginal += 35>> - <<set $hostage.vagina = 3>> - giggling and flirting while $his body is measured and $his weight is taken; 280 tallies adorn $his soft belly. "108 kilos, getting there. Oh don't make that face, there's plenty of food left." - <<switch $hostageFetish>> - <<case "cumslut">> - <<set $hostage.counter.oral += 70>> - <<case "buttslut">> - <<set $hostage.counter.anal += 21>> - <<set $hostage.anus = 3>> - <<case "boobs">> - <<set $hostage.boobs += 100>> - <<set $hostage.boobsImplant += 100>> - <<if $hostage.boobsImplant > 2000>> - <<set $hostage.boobsImplantType = "advanced fillable">> - <</if>> - <<case "pregnancy">> - <<set $hostage.preg++>> - <<set $hostage.pregKnown = 1>> - <<set $hostage.pregWeek = $hostage.preg>> - <<run SetBellySize($hostage)>> - <</switch>> - <<case "Hedonistic Decadence">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight = 20>> - <<set $hostage.muscles = 50>> - <<set $hostage.boobs = 700>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.behavioralFlaw = "none">> - <<set $hostage.sexualFlaw = "none">> - <<set $hostage.behavioralQuirk = "fitness">> - <<set $hostage.sexualQuirk = "romantic">> - <<set $hostage.fetishStrength = 65>> - stepping onto a scale and gawking out how much weight $he has lost. $He flexes, giggling to $himself, before picking up a weight. - <<case "Chattel Religionism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.fetishStrength = 65>> - <<set $hostage.behavioralFlaw = "none">> - <<set $hostage.sexualFlaw = "none">> - <<set $hostage.behavioralQuirk = "cutting">> - <<set $hostage.sexualQuirk = "unflinching">> - eagerly getting ready to spend some time in the city. - <<case "Multiculturalism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 25>> - <<set $hostage.counter.vaginal += 25>> - <<set $hostage.counter.anal += 25>> - <<set $hostage.counter.mammary += 25>> - <<set $hostage.fetishStrength = 65>> - <<set $hostage.sexualFlaw = "none">> - <<set $hostage.behavioralFlaw = "devout">> - <<set $hostage.sexualQuirk = "caring">> - practicing reciting $his prayers from memory, the notion that $he can save your arcology still strong. - <<case "Intellectual Dependency">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 10>> - <<set $hostage.counter.vaginal += 10>> - <<set $hostage.counter.anal += 10>> - <<set $hostage.intelligenceImplant = Math.clamp($hostage.intelligenceImplant+2, 0, 30)>> - <<set $hostage.skill.oral = Math.clamp($hostage.skill.oral+5, 0, 100)>> - <<set $hostage.skill.entertainment = Math.clamp($hostage.skill.entertainment+5, 0, 100)>> - <<set $hostage.skill.anal = Math.clamp($hostage.skill.anal+5, 0, 100)>> - <<set $hostage.skill.vaginal = Math.clamp($hostage.skill.vaginal+5, 0, 100)>> - <<set $hostage.skill.whoring = Math.clamp($hostage.skill.whoring+5, 0, 100)>> - <<set $hostage.fetishStrength = 65>> - <<set $hostage.sexualFlaw = "none">> - <<set $hostage.behavioralFlaw = "none">> - <<set $hostage.behavioralQuirk = "cutting">> - <<set $hostage.sexualQuirk = "caring">> - diligently reading the Kama Sutra and taking notes. - <<case "Slave Professionalism">> - <<set $hostage.trust += 5>> - <<set $hostage.devotion += 5>> - <<set $hostage.intelligenceImplant = Math.clamp($hostage.intelligenceImplant-5, 0, 30)>> - <<set $hostage.intelligence = Math.clamp($hostage.intelligence-10, -100, 100)>> - <<set $hostage.skill.oral = 0>> - <<set $hostage.skill.entertainment = 0>> - <<set $hostage.skill.anal = 0>> - <<set $hostage.skill.vaginal = 0>> - <<set $hostage.skill.whoring = 0>> - <<set $hostage.skill.combat = 0>> - <<set $hostage.makeup = 4>> - <<set $hostage.nails = 5>> - <<set $hostage.shoes = "heels">> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.vagina = 3>> - <<set $hostage.anus = 3>> - <<set $hostage.energy += 5>> - <<set $hostage.addict += 2>> - <<set $hostage.hLength += 7>> - <<set $hostage.fetishStrength = 65>> - <<set $hostage.sexualFlaw = "none">> - <<set $hostage.behavioralFlaw = "none">> - <<set $hostage.behavioralQuirk = "confident">> - <<set $hostage.sexualQuirk = "perverted">> - struggling to solve a puzzle to gain access to the extra large dildo cupboard. - <<case "Petite Admiration">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 15>> - <<set $hostage.counter.vaginal += 10>> - <<set $hostage.counter.anal += 10>> - <<set $hostage.behavioralFlaw = "none">> - <<set $hostage.sexualFlaw = "none">> - <<set $hostage.behavioralQuirk = "advocate">> - <<set $hostage.sexualQuirk = "romantic">> - <<set $hostage.fetishStrength = 65>> - beginning to fall in love with $his big friend. - <<case "Statuesque Glorification">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 5>> - <<set $hostage.counter.vaginal += 15>> - <<set $hostage.counter.anal += 15>> - <<set $hostage.behavioralFlaw = "none">> - <<set $hostage.sexualFlaw = "none">> - <<set $hostage.behavioralQuirk = "advocate">> - <<set $hostage.sexualQuirk = "caring">> - <<set $hostage.fetishStrength = 65>> - beginning to fall in love with $his little friend. - <<default>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.fetishStrength = 65>> - <<set $hostage.behavioralFlaw = "none">> - <<set $hostage.sexualFlaw = "none">> - <<set $hostage.behavioralQuirk = "confident">> - <<set $hostage.sexualQuirk = "caring">> - eagerly getting ready to spend some time in the city. - <</switch>> -<<elseif $rivalryDuration == 16>> - <<switch $rivalryFS>> - <<case "Racial Subjugationism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 40>> - <<set $hostage.counter.vaginal += 40>> - <<set $hostage.counter.anal += 20>> - <<set $hostage.fetishStrength = 100>> - approaching and pulling $his $arcologies[0].FSSubjugationistRace girlfriends into a pre-sex embrace, a look of wild joy on $his face. - <<case "Racial Supremacism">> - <<set $hostage.trust += 5>> - <<set $hostage.devotion += 5>> - <<if $hostage.preg < 20 && $seePreg != 0>> - <<set $hostage.preg = 25>> - <<set $hostage.pregType = 1>> - <<set $hostage.pregKnown = 1>> - <<set $hostage.pregWeek = $hostage.preg>> - <<set WombImpregnate($hostage, $hostage.pregType, 0, $hostage.preg)>> - <<run SetBellySize($hostage)>> - <</if>> - <<if $hostage.vagina < 4>> - <<set $hostage.vagina = 4>> - <</if>> - <<if $hostage.anus < 4>> - <<set $hostage.anus = 4>> - <</if>> - <<set $hostage.sexualFlaw = "self hating">> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<set $hostage.fetishStrength = 100>> - /* Make scars worse: */ - <<run App.Medicine.Modification.addScourged($hostage)>> - collapsing into $his rancid cot and curling into the fetal position<<if $seePreg != 0>> around $his pregnant belly<</if>>. $He's audibly begging for someone, anyone, to save $him. - <<case "Repopulation Focus">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 5>> - <<set $hostage.counter.vaginal += 5>> - <<set $hostage.counter.anal += 5>> - <<set $hostage.counter.mammary += 5>> - convincing a fellow slave to give up _hisU fertility. - <<case "Eugenics">> - <<if $seeHyperPreg != 1>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.preg = 31>> - <<set $hostage.pregType = 8>> - <<set $hostage.pregKnown = 1>> - <<set $hostage.pregWeek = $rivalryDuration>> - <<set WombImpregnate($hostage, $hostage.pregType, 0, $hostage.preg)>> - <<run SetBellySize($hostage)>> - <<set $hostage.vagina = 4>> - <<set $hostage.boobs += 100>> - <<set $hostage.lactation = 1>> - <<set $hostage.lactationDuration = 2>> - <<set $hostage.counter.oral += 100>> - <<set $hostage.counter.vaginal += 100>> - <<set $hostage.counter.anal += 100>> - <<set $hostage.counter.mammary += 100>> - <<set $hostage.fetishStrength = 100>> - <<set $hostage.sexualFlaw = "breeder">> - resting in $his bed with $his master's head against $his full-term belly. $He appears to be genuinely happy. - <<else>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.preg = 31>> - <<set $hostage.pregType = 40>> - <<set $hostage.pregKnown = 1>> - <<set $hostage.pregWeek = $rivalryDuration>> - <<set WombImpregnate($hostage, $hostage.pregType, 0, $hostage.preg)>> - <<run SetBellySize($hostage)>> - <<set $hostage.vagina = 4>> - <<set $hostage.boobs += 400>> - <<set $hostage.lactation = 1>> - <<set $hostage.lactationDuration = 2>> - <<set $hostage.counter.oral += 100>> - <<set $hostage.counter.vaginal += 100>> - <<set $hostage.counter.anal += 100>> - <<set $hostage.counter.mammary += 100>> - <<set $hostage.fetishStrength = 100>> - <<set $hostage.sexualFlaw = "breeder">> - <<set $hostage.bellySag = 2, $hostage.bellySagPreg = 2>> - orgasming lewdly from the obscene movements happening within $his straining womb. $He looks like $he wants this to never end. - <</if>> - <<case "Gender Radicalism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.fetishStrength = 100>> - embracing $his owner with quite the look of devotion on $his face. - <<case "Gender Fundamentalism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.anus = 4>> - <<set $hostage.counter.anal += 10>> - <<if $seeDicks != 0>> - <<set $hostage.dick = 3>> - <<set $hostage.balls = 2>> - <<set $hostage.scrotum = 1>> - <</if>> - <<set $hostage.fetishStrength = 100>> - <<set $hostage.sexualFlaw = "anal addict">> - convincing a fellow slave that butt sex is best sex. $He turns around and shows off the enormous dildo shoved up $his ass. - <<case "Paternalism">> - <<set $hostage.trust += 5>> - <<set $hostage.devotion += 5>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<run eyeSurgery($hostage, "both", "blind")>> - <<set $hostage.earPiercing = 2>> - <<set $hostage.nosePiercing = 2>> - <<set $hostage.nipplesPiercing = 2>> - <<set $hostage.lipsPiercing = 1>> - <<set $hostage.vaginaPiercing = 1>> - <<set $hostage.anusPiercing = 1>> - <<set $hostage.clitPiercing = 1>> - <<set $hostage.eyebrowPiercing = 2>> - <<set $hostage.navelPiercing = 2>> - <<set $hostage.corsetPiercing = 1>> - <<set $hostage.areolaePiercing = 1>> - <<set $hostage.tonguePiercing = 2>> - <<set $hostage.lipsTat = "degradation">> - <<set $hostage.anusTat = "degradation">> - <<set _seed = random(1,100)>> - <<if _seed < 40>> - <<run App.Medicine.Modification.addScar($hostage, "left breast", "burn", 2)>> - <<elseif _seed < 80>> - <<run App.Medicine.Modification.addScar($hostage, "right breast", "burn", 2)>> - <<else>> - <<run App.Medicine.Modification.addScar($hostage, "left breast", "burn", 2)>> - <<run App.Medicine.Modification.addScar($hostage, "right breast", "burn", 2)>> - <<run App.Medicine.Modification.addScar($hostage, "belly", "burn", 2)>> - <</if>> - /* Next scene will mention nasty surgical arm scars, but immediately amputate, so adding them here. */ - <<run App.Medicine.Modification.addScar($hostage, "left upper arm", "surgical", 2)>> - <<run App.Medicine.Modification.addScar($hostage, "right upper arm", "surgical", 2)>> - <<run App.Medicine.Modification.addScar($hostage, "left thigh", "surgical", 2)>> - <<run App.Medicine.Modification.addScar($hostage, "right thigh", "surgical", 2)>> - <<set $hostage.fetishStrength = 100>> - strapped to an operating table, eyes wide with terror, as a pair of syringes approach them. - <<case "Degradationism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.fetishStrength = 100>> - cheerfully talking about the future with $his owner. The video ends on $him asking for an <<if $seePreg != 0>>impregnation<<else>>elaborate<</if>> ceremony when they get married. - <<case "Body Purism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.boobs += 2000>> - <<set $hostage.boobsImplant += 2000>> - <<if $hostage.boobsImplant > 10000>> - <<set $hostage.boobsImplantType = "hyper fillable">> - <</if>> - <<set $hostage.fetishStrength = 100>> - <<set $hostage.sexualFlaw = "breast growth">> - getting $his taut <<print $hostage.boobs>>cc tits massaged by a pair of flat slaves. $He is rambling on about how much happier $he is with $his massive implants than when $he was flat like them. - <<case "Transformation Fetishism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.fetishStrength = 100>> - publicly showing off $his pure and flawless body, a look of complete joy on $his face. - <<case "Youth Preferentialism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength = 100>> - <<set $hostage.counter.oral += 10>> - <<set $hostage.counter.vaginal += 10>> - <<set $hostage.counter.anal += 10>> - blushing happily as $his MILF lover discusses their future marriage. - <<case "Maturity Preferentialism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength = 100>> - <<set $hostage.counter.oral += 10>> - <<set $hostage.counter.vaginal += 10>> - <<set $hostage.counter.anal += 10>> - blushing happily as $he discusses $his future marriage to $his young lover. - <<case "Slimness Enthusiasm">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight = 50>> - <<set $hostage.boobs += 1500>> - <<set $hostage.butt = 7>> - <<set $hostage.fetishStrength = 100>> - <<set $hostage.sexualFlaw = "breast growth">> - getting $his immobilizing <<print $hostage.boobs>>cc breasts massaged by a pair of flat slaves. $He is rambling on about how much happier $he is with $his massive tits and ass than when $he was flat like them. - <<case "Asset Expansionism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.vaginal += 1>> - publicly showing off $his thin, sleek body, a look of complete joy on $his face. - <<case "Pastoralism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight = 0>> - <<set $hostage.muscles = 75>> - <<set $hostage.boobs = 400>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.fetishStrength = 100>> - bench pressing a rather large dumbbell in a strong<<= $woman>> contest. $He is overjoyed when $he places first. - <<case "Cummunism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight = 100>> - <<set $hostage.boobs += 100>> - <<set $hostage.butt = 6>> - <<set $hostage.fetishStrength = 100>> - <<set $hostage.sexualFlaw = "breast growth">> - getting $his immobilizing <<print $hostage.boobs>>cc breasts, massive ass, and cow-like body massaged by a trio of slim slaves. $He is rambling on about how much happier $he is with $his massive assets than when $he was thin like them. - <<case "Physical Idealism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight = 100>> - <<set $hostage.boobs += 100>> - <<set $hostage.butt = 6>> - <<set $hostage.fetishStrength = 100>> - <<set $hostage.counter.vaginal += 40>> - <<set $hostage.vagina = 4>> - giggling and flirting as $his flabby body is groped and fondled while $his weight is taken; $his stomach is so large you can't make out how many tallies adorn it any longer. "128 kilos, pretty big now, aren't we?" - <<switch $hostageFetish>> - <<case "cumslut">> - <<set $hostage.counter.oral += 70>> - <<case "buttslut">> - <<set $hostage.counter.anal += 35>> - <<set $hostage.anus = 3>> - <<case "boobs">> - <<set $hostage.boobs += 100>> - <<set $hostage.boobsImplant += 100>> - <<if $hostage.boobsImplant > 2000>> - <<set $hostage.boobsImplantType = "advanced fillable">> - <</if>> - <<case "pregnancy">> - <<set $hostage.preg++>> - <<set $hostage.pregKnown = 1>> - <<set $hostage.pregWeek++>> - <<run SetBellySize($hostage)>> - <</switch>> - <<case "Hedonistic Decadence">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight = 0>> - <<set $hostage.muscles = 75>> - <<set $hostage.boobs = 400>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.fetishStrength = 100>> - bench pressing a rather large dumbbell in a strong<<= $woman>> contest. $He is overjoyed when $he places first. - <<case "Chattel Religionism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.fetishStrength = 100>> - chatting with a group of fresh slaves, explaining how nice it is to live in this arcology. - <<case "Multiculturalism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<set $hostage.fetishStrength = 100>> - <<set $hostage.sexualFlaw = "neglectful">> - finishing a sermon how to achieve happiness. $He smiles at the camera and says it's not too late to convert. - <<case "Intellectual Dependency">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 10>> - <<set $hostage.counter.vaginal += 10>> - <<set $hostage.counter.anal += 10>> - <<set $hostage.intelligenceImplant = Math.clamp($hostage.intelligenceImplant+2, 0, 30)>> - <<set $hostage.skill.oral = Math.clamp($hostage.skill.oral+5, 0, 100)>> - <<set $hostage.skill.entertainment = Math.clamp($hostage.skill.entertainment+5, 0, 100)>> - <<set $hostage.skill.anal = Math.clamp($hostage.skill.anal+5, 0, 100)>> - <<set $hostage.skill.vaginal = Math.clamp($hostage.skill.vaginal+5, 0, 100)>> - <<set $hostage.skill.whoring = Math.clamp($hostage.skill.whoring+5, 0, 100)>> - <<set $hostage.fetishStrength = 100>> - giving a lesson to a group of fresh slaves on what is expected of them in this arcology. - <<case "Slave Professionalism">> - <<set $hostage.trust += 5>> - <<set $hostage.devotion += 5>> - <<set $hostage.intelligenceImplant = Math.clamp($hostage.intelligenceImplant-5, 0, 30)>> - <<set $hostage.intelligence = Math.clamp($hostage.intelligence-10, -100, 100)>> - <<set $hostage.counter.oral += 70>> - <<set $hostage.counter.vaginal += 40>> - <<set $hostage.counter.anal += 30>> - <<set $hostage.energy += 5>> - <<set $hostage.addict += 2>> - <<set $hostage.fetishStrength = 100>> - <<set $hostage.tonguePiercing = 1>> - <<set $hostage.stampTat = "'Princess' is tattooed over $his rear.">> - <<set $hostage.hLength += 7>> - <<set $hostage.lips = Math.clamp($hostage.lips+5, 0, 100)>> - giggling and chatting with a group of fellow bimbos as they try to entice a quick fuck from passersby. - <<if $seePreg != 0>> - <<set $hostage.preg = 8>> - <<set $hostage.pregType = 1>> - <<set $hostage.pregKnown = 1>> - <<set $hostage.pregWeek = 8>> - <<set WombImpregnate($hostage, $hostage.pregType, 0, $hostage.preg)>> - <<run SetBellySize($hostage)>> - A very pregnant slut pokes at the curve of $his belly and declares $him preggo, to which $he waves it off as "obviou<<s>>ly having <<s>>ucked too much dick". - <</if>> - <<case "Petite Admiration">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength = 100>> - <<set $hostage.counter.oral += 15>> - <<set $hostage.counter.vaginal += 7>> - <<set $hostage.counter.anal += 7>> - blushing happily as $his giant lover discusses their future marriage. - <<case "Statuesque Glorification">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength = 100>> - <<set $hostage.counter.oral += 7>> - <<set $hostage.counter.vaginal += 15>> - <<set $hostage.counter.anal += 15>> - blushing happily as $he discusses $his future marriage to $his little lover. - <<default>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.fetishStrength = 100>> - chatting with a group of fresh slaves, explaining how nice it is to live in this arcology. - <</switch>> -<<elseif $rivalryDuration == 21>> - <<switch $rivalryFS>> - <<case "Racial Subjugationism">> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - giving an interview. $He gushes over how great $arcologies[0].FSSubjugationistRace people are and how terrible it is that some people believe them barely human. - <<case "Racial Supremacism">> - <<if $hostage.preg < 35 && $seePreg != 0>> - <<set $hostage.preg = 32>> - <<set $hostage.pregType = 1>> - <<set $hostage.pregKnown = 1>> - <<set $hostage.pregWeek = $hostage.preg>> - <<set WombImpregnate($hostage, $hostage.pregType, 0, $hostage.preg)>> - <<run SetBellySize($hostage)>> - <</if>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<set $hostage.lactation = 1>> - <<set $hostage.lactationDuration = 2>> - <<set $hostage.fetish = "mindbroken">> - <<set $hostage.fetishStrength = 10>> - /* Make scars worse: */ - <<run App.Medicine.Modification.addScourged($hostage)>> - <<run App.Medicine.Modification.addScar($hostage, "left cheek", "generic", 3)>> - <<run App.Medicine.Modification.addScar($hostage, "right cheek", "generic", 3)>> - <<run App.Medicine.Modification.addScar($hostage, "left lower arm", "generic", 2)>> - <<run App.Medicine.Modification.addScar($hostage, "right lower arm", "generic", 3)>> - with a pair of slavers threatening <<if $seePreg != 0>>$his pregnancy<<else>>$him<</if>>. $He keeps blocking the blows, again and again, until $he can barely stay upright. With a final, brutal kick to the head, $he falls to the floor, unmoving. Several seconds later, $he struggles upright, a blank expression across $his bloodied face. - <<case "Repopulation Focus">> - <<set $hostage.counter.oral += 5>> - <<set $hostage.counter.vaginal += 5>> - <<set $hostage.counter.anal += 5>> - <<set $hostage.counter.mammary += 5>> - giving an interview. $He gushes over how important it is for only the best of society to reproduce, and how it is an atrocity that some people bring so many wasted lives into being. - <<case "Eugenics">> - <<if $seeHyperPreg != 1>> - <<set $hostage.preg = 1>> - <<set $hostage.pregType = 8>> - <<set $hostage.pregKnown = 1>> - <<set $hostage.pregWeek = 1>> - <<set WombImpregnate($hostage, $hostage.pregType, 0, $hostage.preg)>> - <<run SetBellySize($hostage)>> - <<set $hostage.vagina = 5>> - <<if $hostage.counter.births < 1>> - <<set $hostage.counter.births = 1>> - <<set $hostage.counter.birthsTotal += 1>> - <</if>> - <<set $hostage.counter.oral += 100>> - <<set $hostage.counter.vaginal += 100>> - <<set $hostage.counter.anal += 100>> - <<set $hostage.counter.mammary += 100>> - <<set $hostage.bellySag = 2, $hostage.bellySagPreg = 2>> - <<else>> - <<set $hostage.preg = 1>> - <<set $hostage.pregType = 40>> - <<set $hostage.pregKnown = 1>> - <<set $hostage.pregWeek = 1>> - <<set WombImpregnate($hostage, $hostage.pregType, 0, $hostage.preg)>> - <<run SetBellySize($hostage)>> - <<set $hostage.vagina = 5>> - <<if $hostage.counter.births < 50>> - <<set $hostage.counter.births = 20>> - <<set $hostage.counter.birthsTotal += 20>> - <</if>> - <<set $hostage.counter.oral += 100>> - <<set $hostage.counter.vaginal += 100>> - <<set $hostage.counter.anal += 100>> - <<set $hostage.counter.mammary += 100>> - <<set $hostage.bellySag = 5, $hostage.bellySagPreg = 5>> - <</if>> - giving an interview. $He gushes over how important it is for women to conceive and carry as many children as they can, as well as how terrible it is that some people strip away a woman's most important purpose. Before $he can continue, $his water breaks and $he drops to the floor. You close the video in disgust of what's coming. - <<case "Gender Radicalism">> - <<set $hostage.counter.vaginal += 1>> - <<if $seePreg != 0>> - <<set $hostage.preg = 8>> - <<set $hostage.pregType = 1>> - <<set $hostage.pregKnown = 1>> - <<set $hostage.pregWeek = 8>> - <<set WombImpregnate($hostage, $hostage.pregType, 0, $hostage.preg)>> - <<run SetBellySize($hostage)>> - <</if>> - giving an interview. $He gushes over how great it feels knowing that someone is always watching out for $his safety and health as a traditional $woman, as well as how terrible it is that some people want to blur the lines between the genders. - <<case "Gender Fundamentalism">> - <<set $hostage.counter.anal += 10>> - <<if $seeDicks != 0>> - <<set $hostage.dick = 4>> - <<set $hostage.balls = 4>> - <<set $hostage.scrotum = 2>> - <</if>> - giving an interview. $He gushes over how great it feels being fucked in the rear and how $he never has to worry about pregnancy that way. $He carries on about how terrible it is that some people want to deny people this great sensation. - <<case "Paternalism">> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<run removeLimbs($hostage, "all")>> - <<set $hostage.earPiercing = 2>> - <<set $hostage.nosePiercing = 2>> - <<set $hostage.nipplesPiercing = 2>> - <<set $hostage.lipsPiercing = 2>> - <<set $hostage.vaginaPiercing = 2>> - <<set $hostage.anusPiercing = 2>> - <<set $hostage.clitPiercing = 2>> - <<set $hostage.eyebrowPiercing = 2>> - <<set $hostage.navelPiercing = 2>> - <<set $hostage.corsetPiercing = 1>> - <<set $hostage.areolaePiercing = 1>> - <<set $hostage.tonguePiercing = 2>> - <<set $hostage.fetish = "mindbroken">> - <<set $hostage.fetishStrength = 10>> - <<set _seed = random(1,100)>> - <<if _seed < 40>> - <<run App.Medicine.Modification.addScar($hostage, "anus", "burn", 2)>> - <<elseif _seed < 80>> - <<run App.Medicine.Modification.addScar($hostage, "vagina", "burn", 2)>> - <<else>> - <<run App.Medicine.Modification.addScar($hostage, "anus", "burn", 2)>> - <<run App.Medicine.Modification.addScar($hostage, "vagina", "burn", 2)>> - <<run App.Medicine.Modification.addScar($hostage, "left cheek", "burn", 2)>> - <</if>> - strapped to an operating table, with surgical marks on $his bare arms and legs. $His face contorts into absolute horror as $he hears the running saw lowering towards $his right arm. As it makes contact, $his mouth opens wide in a silent scream, ceasing only once $his arm is severed completely. As it comes into contact with $his other arm, $his silent screams stop completely, $his mind having completely shattered. You end the video early, disgusted by what you just saw. - <<case "Degradationism">> - <<set $hostage.counter.vaginal += 1>> - <<if $seePreg != 0>> - <<set $hostage.preg = 14>> - <<set $hostage.pregType = 1>> - <<set $hostage.pregKnown = 1>> - <<set $hostage.pregWeek = 14>> - <<set WombImpregnate($hostage, $hostage.pregType, 0, $hostage.preg)>> - <<run SetBellySize($hostage)>> - <</if>> - and $his owner at the altar during their wedding. - <<if $seePreg != 0>> - It seems $he couldn't wait, since $his belly already shows signs of an early pregnancy. - <</if>> - <<case "Body Purism">> - <<set $hostage.boobs = 50000>> - <<set $hostage.boobsImplant = 45000>> - <<set $hostage.boobsImplantType = "hyper fillable">> - giving an interview. $He gushes over how great it feels being more silicone than $girl and how terrible it is that some people want to deny <<= $girl>>s this pleasure. - <<case "Transformation Fetishism">> - <<set $hostage.counter.vaginal += 1>> - giving an interview. $He gushes over how great it feels being implant free and how terrible some people are to force inhumane implants into their slaves. - <<case "Youth Preferentialism">> - <<set $hostage.counter.oral += 20>> - <<set $hostage.counter.vaginal += 20>> - <<set $hostage.counter.anal += 20>> - giving an interview alongside $his older _wife2. $He gushes over how great it feels being in love and how, if some people had their way, $he'd have never gotten to experience this bliss. - <<case "Maturity Preferentialism">> - <<set $hostage.counter.oral += 20>> - <<set $hostage.counter.vaginal += 20>> - <<set $hostage.counter.anal += 20>> - giving an interview alongside $his young _wife2. $He gushes over how great it feels being in love and how, if some people had their way, $he'd have never gotten to experience this bliss. - <<case "Slimness Enthusiasm">> - <<set $hostage.boobs = 50000>> - <<set $hostage.weight = 100>> - <<set $hostage.butt = 9>> - giving an interview. $He gushes over how great it feels being more breast than $girl and how terrible it is that some people want to keep <<= $girl>>s anorexic toothpicks. - <<case "Asset Expansionism">> - <<set $hostage.counter.vaginal += 1>> - giving an interview. $He gushes over how great it feels being more thin and fit and how terrible it is that some people want to keep <<= $girl>>s nothing more than bloated cows. - <<case "Pastoralism">> - <<set $hostage.muscles = 100>> - <<set $hostage.counter.vaginal += 1>> - giving an interview. $He gushes over how great it feels being a chiseled goddess and how terrible it is that some people want to keep <<= $girl>>s as obese<<if $seePreg != 0>>, pregnant,<</if>> milky cows. - <<case "Cummunism">> - <<set $hostage.boobs = 24300>> - <<set $hostage.weight = 100>> - giving an interview. $He gushes over how great it feels being so soft and how happy $he is to be feeding $his people. $He continues with how terrible it is that some people want slaves to be hard and sinewy instead of being motherly providers. - <<case "Physical Idealism">> - <<set $hostage.weight = 150>> - <<set $hostage.boobs += 100>> - <<set $hostage.butt = 6>> - <<set $hostage.fetishStrength = 100>> - <<set $hostage.counter.vaginal += 60>> - <<set $hostage.vagina = 5>> - moaning as $he shoves food into $his mouth with one hand and fondles $his lover's body with the other. "My apologies. I don't have $his weight for you this week. You see, $he broke the scale when $he stepped on it. Well, I suppose that tells you plenty. Though I have another surprise for you! <<= SlaveFullName($hostage)>>, would you like to tell 'em yourself?" $He shouts, spewing crumbs everywhere, - <<switch $hostageFetish>> - <<case "submissive">> - "I haven't orgasmed all week, but I've made sure to bring every one of my lovers to climax! That's what I love most, seeing the look of satisfaction on their faces as they blow their loads deep into me!" - <<set $hostage.sexualFlaw = "neglectful">> - <<case "cumslut">> - "I suck dicks all day and have cum mixed in with my many meals but it still isn't enough! If I could, I'd drink cum till I burst!" - <<set $hostage.counter.oral += 70>> - <<set $hostage.sexualFlaw = "cum addict">> - <<case "humiliation">> - "I love taking part in orgies and being the center of attention! You can't possible know what it feels like to pleasure fifteen guys at once!" - <<set $hostage.sexualFlaw = "attention whore">> - <<case "buttslut">> - "I love it up the butt! I get assfucked all day long and when I don't have a dick in my rear, I have the biggest dildo we've got rammed up it!" - <<set $hostage.counter.anal += 45>> - <<set $hostage.anus = 4>> - <<set $hostage.sexualFlaw = "anal addict">> - <<case "boobs">> - "I love my big boobs and get off watching them get bigger!" - <<set $hostage.boobs += 100>> - <<set $hostage.boobsImplant += 100>> - <<if $hostage.boobsImplant > 2000>> - <<set $hostage.boobsImplantType = "advanced fillable">> - <</if>> - <<set $hostage.sexualFlaw = "breast growth">> - <<case "sadist">> - "Nothing turns me on more than crushing my lovers' nuts! That or maybe whipping or cutting them... Or anything that makes them bleed..." - <<set $hostage.sexualFlaw = "malicious">> - <<case "masochist">> - "I love just stuffing my face with the fattiest foods around! I'm going to have a heart attack and I can't wait since I am such a disgusting slut and I deserve this!" - <<set $hostage.sexualFlaw = "self hating">> - <<case "dom">> - "Nothing turns me on more than forcing new slaves to service me! I love their reactions as they struggle against me!" - <<set $hostage.sexualFlaw = "abusive">> - <<case "pregnancy">> - "I'm preggers you know! $hostage.preg weeks along now and you know what? I always want to be pregnant! Always!" - <<set $hostage.preg++>> - <<set $hostage.pregKnown = 1>> - <<set $hostage.pregWeek++>> - <<run SetBellySize($hostage)>> - <<set $hostage.sexualFlaw = "breeder">> - <</switch>> - <<case "Hedonistic Decadence">> - <<set $hostage.muscles = 100>> - <<set $hostage.counter.vaginal += 1>> - giving an interview. $He gushes over how great it feels being a chiseled goddess and how terrible it is that some people want to keep <<= $girl>>s obese, slovenly wastes of flesh. - <<case "Chattel Religionism">> - <<set $hostage.counter.vaginal += 1>> - giving an interview. $He gushes over how great it is to experience all manners of class and culture, both physically and spiritually. - <<case "Multiculturalism">> - <<set $hostage.counter.oral += 100>> - <<set $hostage.counter.vaginal += 100>> - <<set $hostage.counter.anal += 100>> - <<set $hostage.counter.mammary += 100>> - giving a public sermon. $He declares that if it would save the nonbelievers, $he would gladly take every one of their dicks into $his body; at once, if $he were able to. - <<case "Intellectual Dependency">> - <<set $hostage.counter.oral += 10>> - <<set $hostage.counter.vaginal += 10>> - <<set $hostage.counter.anal += 10>> - <<set $hostage.intelligenceImplant = 30>> - <<set $hostage.skill.oral = 100>> - <<set $hostage.skill.entertainment = 100>> - <<set $hostage.skill.anal = 100>> - <<set $hostage.skill.vaginal = 100>> - <<set $hostage.skill.whoring = 100>> - sealing a business deal for $his owner. Buy the end of the meeting, the client is thoroughly exhausted from $his skilled 'negotiations' and eager to listen to the terms entrusted to $him. - <<case "Slave Professionalism">> - <<set $hostage.intelligenceImplant = 0>> - <<set $hostage.intelligence = -100>> - <<set $hostage.counter.oral += 100>> - <<set $hostage.counter.vaginal += 100>> - <<set $hostage.counter.anal += 100>> - <<set $hostage.energy = 100>> - <<set $hostage.lips = Math.clamp($hostage.lips+5, 0, 100)>> - <<if $hostage.preg > 0>> - <<set $hostage.preg++>> - <<set $hostage.pregWeek++>> - <<run SetBellySize($hostage)>> - <</if>> - <<set $hostage.sexualFlaw = "attention whore">> - <<set $hostage.hLength += 7>> - <<set $hostage.career = "a bimbo">> - taking part in a giant orgy. Several attempts are made to get $his attention, but $his body is ruled by $his libido and $he is deaf to the world. The video is several hours long. - <<case "Petite Admiration">> - <<set $hostage.counter.oral += 40>> - <<set $hostage.counter.vaginal += 20>> - <<set $hostage.counter.anal += 20>> - giving an interview alongside $his twice $his size _wife2. $He gushes over how great it feels being in love and how, if some people had their way, $he'd have never gotten to experience this bliss. - <<case "Statuesque Glorification">> - <<set $hostage.counter.oral += 10>> - <<set $hostage.counter.vaginal += 30>> - <<set $hostage.counter.anal += 30>> - giving an interview alongside $his half $his size _wife2. $He gushes over how great it feels being in love and how, if some people had their way, $he'd have never gotten to experience this bliss. - <<default>> - <<set $hostage.counter.vaginal += 1>> - giving an interview. $He gushes over how great it is to experience all manners of class and culture, both physically and spiritually. - <</switch>> -<<elseif $rivalryDuration >= 30>> - <<set $hostageAnnounced = 0>> - <<switch $rivalryFS>> - <<case "Racial Subjugationism">> - "Looking for <<= SlaveFullName($hostage)>>? Too bad, I couldn't bear to think of you ever getting your rotten little hands on $him, so I sent $him and $his lovers someplace far away. Someplace you'll never find them. Bet tha"-You end the call. - <<case "Racial Supremacism">> - "Looking for <<= SlaveFullName($hostage)>>? Too bad, the poor bitch died <<if $seePreg != 0>>trying to give birth to $his baby<<else>>from having too much 'fun' with $his clients<</if>>. We had lots of room in the clinic too, but slaves like $him aren't worth the expenses, you know? I should find some more people you knew, keep our little game goi"-You end the call. - <<case "Repopulation Focus">> - "Looking for <<= SlaveFullName($hostage)>>? Too bad, I couldn't bear to think of you ever getting your rotten little hands on $him, so I sent $him far away. Someplace you'll never find $him. Bet tha"-You end the call. - <<case "Eugenics">> - "Looking for <<= SlaveFullName($hostage)>>? Too bad, I couldn't bear to think of you ever getting your rotten little hands on $him, so I sent $him far away. Someplace you'll never find $him. Bet tha"-You end the call. - <<case "Gender Radicalism">> - "Looking for <<= SlaveFullName($hostage)>>? Too bad, I couldn't bear to think of you ever getting your rotten little hands on $him, so I sent $him far away. I'll miss $him, of course, but there is no way I'd let you have $him. Bet that piss"-You end the call. - <<case "Gender Fundamentalism">> - "Looking for <<= SlaveFullName($hostage)>>? Too bad, $he took a dick a little too big for $his ass and ruined $his sphincter. $He's off, someplace far away, recovering. But I'll never tell you where, bet that piss"-You end the call. - <<case "Paternalism">> - "Looking for <<= SlaveFullName($hostage)>>? Too bad, $he got kicked around just a little too much. We had lots of fun with $him, before $he broke of course... Say, do you have anyone else you love, or even were familiar with? I should acquire them, keep our little game goi"-You end the call. - <<case "Degradationism">> - "Looking for <<= SlaveFullName($hostage)>>? Too bad, I couldn't bear to think of you ever getting your rotten little hands on $him, so I sent $him far away. I'll miss $him, of course, but there is no way I'd let you have $him. I'll keep $him saf"-You end the call. - <<case "Body Purism">> - "Looking for <<= SlaveFullName($hostage)>>? Too bad, apparently implants can be too big. $His breasts literally popped, couldn't save $him though. Definitely going to miss playing with those balloons. I should hunt down more people you knew, keep our little game goi"-You end the call. - <<case "Transformation Fetishism">> - "Looking for <<= SlaveFullName($hostage)>>? Too bad, I couldn't bear to think of you ever getting your rotten little hands on $him, so I sent $him far away. Someplace you'll never find $him. Bet tha"-You end the call. - <<case "Youth Preferentialism">> - "Looking for <<= SlaveFullName($hostage)>>? Too bad, I couldn't bear to think of you ever getting your rotten little hands on $him, so I sent $him and $his lover someplace far away. Someplace you'll never find them. Bet tha"-You end the call. - <<case "Maturity Preferentialism">> - "Looking for <<= SlaveFullName($hostage)>>? Too bad, I couldn't bear to think of you ever getting your rotten little hands on $him, so I sent $him and $his lover someplace far away. Someplace you'll never find them. Bet tha"-You end the call. - <<case "Slimness Enthusiasm">> - "Looking for <<= SlaveFullName($hostage)>>? Too bad, apparently those growth drugs have quite the side effects. Pretty much had cancer everywhere. Definitely going to miss playing with those milkbags, though. I should hunt down more people you knew, keep our little game goi"-You end the call. - <<case "Asset Expansionism">> - "Looking for <<= SlaveFullName($hostage)>>? Too bad, I couldn't bear to think of you ever getting your rotten little hands on $him, so I sent $him far away. Someplace you'll never find $him. Bet tha"-You end the call. - <<case "Pastoralism">> - "Looking for <<= SlaveFullName($hostage)>>? Too bad, I couldn't bear to think of you ever getting your rotten little hands on $him, so I sent $him far away. I'll miss $him, of course, but there is no way I'd let you have $him. Bet that piss"-You end the call. - <<case "Physical Idealism">> - "Looking for <<= SlaveFullName($hostage)>>? Too bad, apparently being that fat isn't good for your heart, who knew? Definitely going to miss playing with those folds; $he jiggled so much when I fucked $him. I should hunt down more people you knew, fatten them up, keep our little game goi"-You end the call. - <<case "Hedonistic Decadence">> - "Looking for <<= SlaveFullName($hostage)>>? Too bad, I couldn't bear to think of you ever getting your rotten little hands on $him, so I sent $him far away. I'll miss $him, of course, but there is no way I'd let you have $him. Bet that piss"-You end the call. - <<case "Chattel Religionism">> - "Looking for <<= SlaveFullName($hostage)>>? Too bad, I couldn't bear to think of you ever getting your rotten little hands on $him, so I sent $him far away. Someplace you'll never find $him. Bet tha"-You end the call. - <<case "Multiculturalism">> - "Looking for <<= SlaveFullName($hostage)>>? Too bad, $he decided to martyr $himself for your arcology's salvation. Got fucked till $his body gave out. Of course I enjoyed $him in $his final moments, and don't worry, $he died smiling. I should hunt down more people you knew, keep our little game goi"-You end the call. - <<case "Intellectual Dependency">> - "Looking for <<= SlaveFullName($hostage)>>? Too bad, $he ran the math and determined that the odds of me keeping $him through this were too low and that $he should go into hiding until it's safe to come back. $He's a well trained $girl now, so I trust $him, and even if I did lose this war, it'd still be worth taking $his advice just to deny you your prize. Bet tha"-You end the call. - <<case "Slave Professionalism">> - "Looking for <<= SlaveFullName($hostage)>>? Too bad, bitch was so dumb $he couldn't understand the warning signs, rushed down some slick stairs for a fuck and broke $his neck. $He was fun, no denying that. Died the way $he lived, thinking of sucking cock. Not unlike you, act"-You end the call. - <<case "Petite Admiration">> - "Looking for <<= SlaveFullName($hostage)>>? Too bad, I couldn't bear to think of you ever getting your rotten little hands on $him, so I sent $him and $his lover someplace far away. Someplace you'll never find them. Bet tha"-You end the call. - <<case "Statuesque Glorification">> - "Looking for <<= SlaveFullName($hostage)>>? Too bad, I couldn't bear to think of you ever getting your rotten little hands on $him, so I sent $him and $his lover someplace far away. Someplace you'll never find them. Bet tha"-You end the call. - <<default>> - "Looking for <<= SlaveFullName($hostage)>>? Too bad, I couldn't bear to think of you ever getting your rotten little hands on $him, so I sent $him far away. Someplace you'll never find $him. Bet tha"-You end the call. - <</switch>> -<<else>> - <<set _hostageAction = []>> - <<switch $rivalryFS>> - <<case "Racial Subjugationism">> - <<if $rivalryDuration <= 5>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 10>> - <<set $hostage.counter.vaginal += 10>> - <<set $hostage.counter.anal += 10>> - <<set _hostageAction.push("struggling to escape the grasp of a pair of $arcologies[0].FSSubjugationistRace <<= _girlU>>s.")>> - <<set _hostageAction.push("struggling to avoid giving an $arcologies[0].FSSubjugationistRace _girlU oral.")>> - <<set _hostageAction.push("screaming as $he gets fucked by an $arcologies[0].FSSubjugationistRace _girlU.")>> - <<elseif $rivalryDuration <= 10>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.oral += 10>> - <<set $hostage.counter.vaginal += 10>> - <<set $hostage.counter.anal += 10>> - <<set _hostageAction.push("crying gently while a pair of $arcologies[0].FSSubjugationistRace <<= _girlU>>s fondle $him.")>> - <<set _hostageAction.push("reluctantly giving an $arcologies[0].FSSubjugationistRace _girlU oral.")>> - <<set _hostageAction.push("crying as $he gets fucked by an $arcologies[0].FSSubjugationistRace _girlU.")>> - <<elseif $rivalryDuration <= 15>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.oral += 20>> - <<set $hostage.counter.vaginal += 20>> - <<set $hostage.counter.anal += 20>> - <<set _hostageAction.push("fooling around with a pair of $arcologies[0].FSSubjugationistRace <<= _girlU>>s.")>> - <<set _hostageAction.push("giving an $arcologies[0].FSSubjugationistRace _girlU oral.")>> - <<set _hostageAction.push("panting as $he gets fucked by an $arcologies[0].FSSubjugationistRace _girlU.")>> - <<elseif $rivalryDuration <= 20>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 40>> - <<set $hostage.counter.vaginal += 40>> - <<set $hostage.counter.anal += 20>> - <<set _hostageAction.push("having a threesome with a pair of $arcologies[0].FSSubjugationistRace <<= _girlU>>s.")>> - <<set _hostageAction.push("eagerly giving an $arcologies[0].FSSubjugationistRace _girlU oral.")>> - <<set _hostageAction.push("moaning as $he gets fucked by an $arcologies[0].FSSubjugationistRace _girlU.")>> - <<else>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set _hostageAction.push("making love to $his favorite two $arcologies[0].FSSubjugationistRace <<= _girlU>>s.")>> - <<set _hostageAction.push("enthusiastically giving an $arcologies[0].FSSubjugationistRace _girlU oral.")>> - <<set _hostageAction.push("enthusiastically wiggling $his rear as $he gets fucked by an $arcologies[0].FSSubjugationistRace _girlU.")>> - <</if>> - <<case "Racial Supremacism">> - <<if $rivalryDuration <= 5>> - <<set $hostage.trust += 5>> - <<set $hostage.devotion += 5>> - <<set $hostage.weight -= 5>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<set _hostageAction.push("desperately struggling in a stockade, alongside several other $arcologies[0].FSSupremacistRace slaves, while a man tries to get it in $him.")>> - <<set _hostageAction.push("struggling against $his bindings in a line of $arcologies[0].FSSupremacist slaves, having $his bruised holes checked.")>> - <<set _hostageAction.push("weeping as a dispassionate slave assayer goes down a line of $arcologies[0].FSSupremacist slaves, reciting prices.")>> - <<elseif $rivalryDuration <= 10>> - <<set $hostage.trust += 5>> - <<set $hostage.devotion += 5>> - <<set $hostage.weight -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<set _hostageAction.push("meekly taking it in the cunt by a man while bound in a stockade alongside several other $arcologies[0].FSSupremacistRace girls.")>> - <<set _hostageAction.push("tied up with a defeated look in a line of $arcologies[0].FSSupremacist slaves, having $his stretched holes checked.")>> - <<set _hostageAction.push("crying as a dispassionate slave assayer goes down a line of $arcologies[0].FSSupremacist slaves, reciting prices.")>> - <<elseif $rivalryDuration <= 15>> - <<set $hostage.trust += 5>> - <<set $hostage.devotion += 5>> - <<set $hostage.weight -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<if $seePreg != 0>> - <<set _hostageAction.push("moaning slightly as a man pounds $his pussy. $His belly has a notable roundness to it, most likely the spawn of a non-<<print $arcologies[0].FSSupremacistRace>> man.")>> - <<set _hostageAction.push("tied up with a downtrodden look in a line of $arcologies[0].FSSupremacist slaves, having $his new pregnancy examined.")>> - <<else>> - <<set _hostageAction.push("moaning slightly as a man pounds $his pussy.")>> - <<set _hostageAction.push("tied up with a downtrodden look in a line of $arcologies[0].FSSupremacist slaves, having $his overworked holes examined.")>> - <</if>> - <<set _hostageAction.push("silently staring at $his feet as a dispassionate slave assayer goes down a line of $arcologies[0].FSSupremacist slaves, reciting prices.")>> - <<elseif $rivalryDuration <= 20>> - <<set $hostage.trust += 5>> - <<set $hostage.devotion += 5>> - <<set $hostage.weight -= 5>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<if $seePreg != 0>> - <<set _hostageAction.push("barely caring as a non-<<= $arcologies[0].FSSupremacistRace>> man pounds $his pregnant pussy. $His belly is noticeably distended by a non-<<= $arcologies[0].FSSupremacistRace>> baby.")>> - <<set _hostageAction.push("nearly comatose in a line of $arcologies[0].FSSupremacist slaves, having $his pregnancy and destroyed holes examined")>> - <<else>> - <<set _hostageAction.push("barely caring as a non-<<= $arcologies[0].FSSupremacistRace>> man pounds $his overused holes.")>> - <<set _hostageAction.push("nearly comatose in a line of $arcologies[0].FSSupremacist slaves, having $his destroyed holes examined")>> - <</if>> - <<set _hostageAction.push("standing silently as a dispassionate slave assayer goes down a line of $arcologies[0].FSSupremacist slaves, reciting prices.")>> - <<else>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<if $seePreg != 0>> - <<set _hostageAction.push("blankly getting pounded by several non-<<print $arcologies[0].FSSupremacistRace>> men as they fondle $his breasts, butt, and full-term pregnancy.")>> - <<set _hostageAction.push("blankly standing in a line of $arcologies[0].FSSupremacist slaves, having $his advanced pregnancy and broken holes examined.")>> - <<else>> - <<set _hostageAction.push("blankly getting pounded by several non-<<print $arcologies[0].FSSupremacistRace>> men as they fondle $his breasts and butt.")>> - <<set _hostageAction.push("blankly standing in a line of $arcologies[0].FSSupremacist slaves, having $his broken holes examined.")>> - <</if>> - <<set _hostageAction.push("blankly standing in place as a dispassionate slave assayer goes down a line of $arcologies[0].FSSupremacist slaves, reciting prices.")>> - <</if>> - <<case "Repopulation Focus">> - <<if $rivalryDuration <= 5>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 5>> - <<set $hostage.counter.vaginal += 5>> - <<set $hostage.counter.anal += 5>> - <<set $hostage.counter.mammary += 5>> - <<set _hostageAction.push("desperately trying to avoid reading the reports on pregnancy in your arcology.")>> - <<set _hostageAction.push("crying while gently rubbing $his infertile stomach.")>> - <<set _hostageAction.push("sobbing as an autosurgery reads out the details of $his infertility.")>> - <<elseif $rivalryDuration <= 10>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 5>> - <<set $hostage.counter.vaginal += 5>> - <<set $hostage.counter.anal += 5>> - <<set $hostage.counter.mammary += 5>> - <<set _hostageAction.push("carefully reading the reports on pregnancy in your arcology.")>> - <<set _hostageAction.push("staring at $his midriff, contemplating why someone would take $his fertility away.")>> - <<set _hostageAction.push("pondering the health benefits being given to $him.")>> - <<elseif $rivalryDuration <= 15>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 5>> - <<set $hostage.counter.vaginal += 5>> - <<set $hostage.counter.anal += 5>> - <<set $hostage.counter.mammary += 5>> - <<set _hostageAction.push("gently crying while reading the reports on pregnancy in your arcology.")>> - <<set _hostageAction.push("relaxing, knowing $he will never deal with menstruation again.")>> - <<set _hostageAction.push("accepting that $his body will never be ruined by pregnancy.")>> - <<elseif $rivalryDuration <= 20>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 5>> - <<set $hostage.counter.vaginal += 5>> - <<set $hostage.counter.anal += 5>> - <<set $hostage.counter.mammary += 5>> - <<set _hostageAction.push("praying for the well-being of the pregnant women in your arcology.")>> - <<set _hostageAction.push("playing with $his owner without worry, seeing as $he can't get pregnant.")>> - <<set _hostageAction.push("happy that $his body will never be ruined by pregnancy.")>> - <<else>> - <<set $hostage.counter.oral += 5>> - <<set $hostage.counter.vaginal += 5>> - <<set $hostage.counter.anal += 5>> - <<set $hostage.counter.mammary += 5>> - <<set _hostageAction.push("actively reading a report to crowd about the dangers of pregnancy, using your arcology as an example.")>> - <<set _hostageAction.push("running $his fingers across $his tight belly with a smile, knowing it will never be ruined.")>> - <<set _hostageAction.push("celebrating that $his body will never be ruined by a child.")>> - <</if>> - <<case "Eugenics">> - <<if $rivalryDuration <= 5>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<if $seeHyperPreg != 1>> - <<set _hostageAction.push("weeping in $his restraints as a crowd of a dozen criminals line up to fuck $his fertile womb pregnant.")>> - <<set _hostageAction.push("crying at the results of a pregnancy test.")>> - <<set _hostageAction.push("sobbing as $he tries to coax the cum out of $his womb.")>> - <<else>> - <<set _hostageAction.push("weeping in $his restraints as a crowd of a dozen criminals line up to fuck $his fertile womb pregnant.")>> - <<set _hostageAction.push("weeping at the results of a pregnancy test.")>> - <<set _hostageAction.push("sobbing as $he tries to coax the cum out of $his womb.")>> - <</if>> - <<elseif $rivalryDuration <= 10>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<if $seeHyperPreg != 1>> - <<set _hostageAction.push("reluctantly fucking a man while he rubs $his swollen belly.")>> - <<set _hostageAction.push("cringing at a report of the number of babies $he is carrying.")>> - <<set _hostageAction.push("crying as $he cradles $his unwelcome pregnancy.")>> - <<else>> - <<set _hostageAction.push("reluctantly orgasming as $he is taken doggystyle, $his full pregnancy brushing the floor under $him.")>> - <<set _hostageAction.push("cringing at a report of the obscene number of babies stretching $his womb.")>> - <<set _hostageAction.push("crying as $he cradles $his full-sized pregnancy.")>> - <</if>> - <<elseif $rivalryDuration <= 15>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.boobs += 50>> - <<set $hostage.lactation = 1>> - <<set $hostage.lactationDuration = 2>> - <<set $hostage.counter.oral += 100>> - <<set $hostage.counter.vaginal += 100>> - <<set $hostage.counter.anal += 100>> - <<set $hostage.counter.mammary += 100>> - <<if $seeHyperPreg != 1>> - <<set _hostageAction.push("moaning gently as $he rides a man, cowgirl style, as he rubs $his pregnant belly.")>> - <<set _hostageAction.push("smilingly slightly at an ultrasound of $his womb.")>> - <<set _hostageAction.push("doing yoga to prepare $his body for childbirth.")>> - <<else>> - <<set _hostageAction.push("moaning gently as $he rides a man completely obscured by $his enormous pregnancy.")>> - <<set _hostageAction.push("smilingly slightly seeing $his many babies via ultrasound.")>> - <<set _hostageAction.push("doing yoga with helpers to prepare $his bloated body for mass childbirth.")>> - <</if>> - <<elseif $rivalryDuration <= 20>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.boobs += 50>> - <<set $hostage.lactation = 1>> - <<set $hostage.lactationDuration = 2>> - <<set $hostage.counter.oral += 100>> - <<set $hostage.counter.vaginal += 100>> - <<set $hostage.counter.anal += 100>> - <<set $hostage.counter.mammary += 100>> - <<if $seeHyperPreg != 1>> - <<set _hostageAction.push("enthusiastically taking part in an orgy centered around $his huge pregnant belly.")>> - <<set _hostageAction.push("happily letting $his owner fawn over $his big belly.")>> - <<set _hostageAction.push("gleefully rubbing $his big pregnant belly with oils to prevent stretch marks.")>> - <<else>> - <<set _hostageAction.push("getting brutally fucked over $his own gigantic pregnant belly and loving every moment of it.")>> - <<set _hostageAction.push("happily letting $his owner fawn over $his immense belly and giggling with every kick $his many children make in response.")>> - <<set _hostageAction.push("giggling as several slaves slather $his belly with creams to prevent stretch marks.")>> - <</if>> - <<else>> - <<set $hostage.boobs += 50>> - <<set $hostage.lactation = 1>> - <<set $hostage.lactationDuration = 2>> - <<set $hostage.counter.oral += 100>> - <<set $hostage.counter.vaginal += 100>> - <<set $hostage.counter.anal += 100>> - <<set $hostage.counter.mammary += 100>> - <<if $seeHyperPreg != 1>> - <<set _hostageAction.push("happily rubbing $his cum filled belly, eager for $his next pregnancy to take.")>> - <<set _hostageAction.push("eagerly checking a pregnancy test before dropping it sadly.")>> - <<set _hostageAction.push("injecting cum into $his vagina, hoping to get pregnant again sooner.")>> - <<else>> - <<set _hostageAction.push("happily rubbing $his bloated belly, eager for $his new pregnancy to get bigger.")>> - <<set _hostageAction.push("eagerly researching ways $he can always be pregnant.")>> - <<set _hostageAction.push("begging $his master to get $him even more pregnant this time.")>> - <</if>> - <</if>> - <<case "Gender Radicalism">> - <<if $rivalryDuration <= 5>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set _hostageAction.push("being dragged along by $his owner on their rounds around their arcology.")>> - <<set _hostageAction.push("being forced into a pretty dress as to not embarrass $his owner, though $his tantrum will do just that.")>> - <<set _hostageAction.push("viciously slapping $his owner's hand away.")>> - <<elseif $rivalryDuration <= 10>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("reluctantly following $his owner along on their rounds around their arcology.")>> - <<set _hostageAction.push("reluctantly allowing $himself to be dressed to present a good appearance alongside $his owner.")>> - <<set _hostageAction.push("reluctantly holding $his owner's hand.")>> - <<elseif $rivalryDuration <= 15>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.fetishStrength = 65>> - <<set _hostageAction.push("politely accompanying $his owner on their rounds around their arcology.")>> - <<set _hostageAction.push("allowing $himself to be dressed to present a good appearance alongside $his owner.")>> - <<set _hostageAction.push("holding $his owner's hand.")>> - <<elseif $rivalryDuration <= 20>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("happily accompanying $his owner on their rounds around their arcology.")>> - <<set _hostageAction.push("happily allowing $himself to be dressed to present a good appearance alongside $his owner.")>> - <<set _hostageAction.push("happily holding $his owner's hand.")>> - <<else>> - <<set $hostage.counter.vaginal += 1>> - <<if $seePreg != 0>> - <<set _hostageAction.push("happily accompanying $his owner on their rounds around their arcology, $his hand resting on $his gently rounded stomach.")>> - <<set _hostageAction.push("carefully getting $himself dressed to present a good appearance alongside $his owner, paying special attention to $his swollen midriff.")>> - <<set _hostageAction.push("happy with $his owner's arm around $his waist.")>> - <<else>> - <<set _hostageAction.push("happily accompanying $his owner on their rounds around their arcology, his arm around $his waist.")>> - <<set _hostageAction.push("carefully getting $himself dressed to present a good appearance alongside $his owner.")>> - <<set _hostageAction.push("happy with $his owner's arm around $him.")>> - <</if>> - <</if>> - <<case "Gender Fundamentalism">> - <<if $rivalryDuration <= 5>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.anal += 10>> - <<set _hostageAction.push("struggling not to orgasm to the dick up $his ass.")>> - <<set _hostageAction.push("screaming in terror as a hot shaft slips into $his rectum.")>> - <<set _hostageAction.push("crying in the shower as $he attempts to soothe $his throbbing rectum.")>> - <<elseif $rivalryDuration <= 10>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.anal += 10>> - <<set _hostageAction.push("reluctantly pleasuring a man with $his ass.")>> - <<set _hostageAction.push("groaning in discomfort as yet another dick slides into $his ass.")>> - <<set _hostageAction.push("groaning in the shower as $he soothes $his sore ass.")>> - <<elseif $rivalryDuration <= 15>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.anal += 10>> - <<if $seeDicks != 0>> - <<set _hostageAction.push("enjoying a hard anal pounding, $his tiny new penis swinging from the thrusts.")>> - <<set _hostageAction.push("letting off a moan as a penis slides into $his asspussy, $his tiny new penis trying to get hard.")>> - <<set _hostageAction.push("cleaning $his rear while fondling $his asspussy, $his other hand teasing $his new tiny penis.")>> - <<else>> - <<set _hostageAction.push("enjoying a hard anal pounding.")>> - <<set _hostageAction.push("letting off a moan as a penis slides into $his asspussy.")>> - <<set _hostageAction.push("cleaning $his rear while fondling $his asspussy.")>> - <</if>> - <<elseif $rivalryDuration <= 20>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.anal += 10>> - <<if $seeDicks != 0>> - <<set _hostageAction.push("orgasming immodestly to a hard anal pounding, $his erect penis cumming across $his belly.")>> - <<set _hostageAction.push("moaning lewdly as a huge dick slides up $his asspussy, $his erect penis bumping into $his belly.")>> - <<set _hostageAction.push("seeing how many fingers $he can fit into $his ass as $he showers, while teasing $his erect dick with the other hand.")>> - <<else>> - <<set _hostageAction.push("orgasming immodestly to a hard anal pounding.")>> - <<set _hostageAction.push("moaning lewdly as a huge dick slides up $his asspussy.")>> - <<set _hostageAction.push("seeing how many fingers $he can fit into $his ass as $he showers.")>> - <</if>> - <<else>> - <<set $hostage.counter.anal += 10>> - <<if $seeDicks != 0>> - <<set _hostageAction.push("happily taking two dicks at once in $his blown out anus, while stroking $his rock hard cock.")>> - <<set _hostageAction.push("getting assfucked, $his rock-hard cock dribbling precum everywhere. $He gasps with delight as $he feels a second hot shaft slide inside $his asspussy next to the first.")>> - <<set _hostageAction.push("fisting $his own ass in the shower, and jacking off to the prostrate stimulation. $He gasps with delight as an orgasm wracks $his body.")>> - <<else>> - <<set _hostageAction.push("happily taking two dicks at once in $his blown out anus.")>> - <<set _hostageAction.push("getting assfucked. $He gasps with delight as $he feels a second hot shaft slide inside $his asspussy next to the first.")>> - <<set _hostageAction.push("fisting $his own ass in the shower. $He gasps with delight as an orgasm wracks $his body.")>> - <</if>> - <</if>> - <<case "Paternalism">> - <<if $rivalryDuration <= 5>> - <<set $hostage.trust += 5>> - <<set $hostage.devotion += 5>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<if $seePee == 1>> - <<set _hostageAction.push("weeping on the floor as a crowd of citizens urinate on $him.")>> - <<else>> - <<set _hostageAction.push("weeping on the floor as a crowd of citizens masturbate onto $him.")>> - <</if>> - <<set _hostageAction.push("screaming as $he has the soles of $his feet whipped.")>> - <<set _hostageAction.push("tearfully begging someone not to cut $him.")>> - <<elseif $rivalryDuration <= 10>> - <<set $hostage.trust += 5>> - <<set $hostage.devotion += 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<if $seePee == 1>> - <<set _hostageAction.push("trying $his best not to break down as a crowd of citizens urinate on $him.")>> - <<else>> - <<set _hostageAction.push("trying $his best not to break down as a crowd of citizens jack off onto $him.")>> - <</if>> - <<set _hostageAction.push("crying out as $his back is lashed.")>> - <<set _hostageAction.push("tearfully crying on the ground after someone tripped $him and stole $his heels for the sole purpose of denying $him the ability to walk.")>> - <<elseif $rivalryDuration <= 15>> - <<set $hostage.trust += 5>> - <<set $hostage.devotion += 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<if $seePee == 1>> - <<set _hostageAction.push("meekly accepting $his golden shower.")>> - <<else>> - <<set _hostageAction.push("meekly accepting $his bukkake.")>> - <</if>> - <<set _hostageAction.push("sobbing as $he is mercilessly beaten.")>> - <<set _hostageAction.push("panicking as $he attempts to mime a plea to not get cut by $his aggressor.")>> - <<elseif $rivalryDuration <= 20>> - <<set $hostage.trust += 5>> - <<set $hostage.devotion += 5>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<if $seePee == 1>> - <<set _hostageAction.push("laying there, indifferent to the citizens urinating on $him.")>> - <<else>> - <<set _hostageAction.push("laying there, indifferent to the citizens ejaculating on $him.")>> - <</if>> - <<set _hostageAction.push("softly crying as $he is kicked around.")>> - <<set _hostageAction.push("crying muffled sobs as someone snatches $his earnings from under $his blinded eyes.")>> - <<else>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<set _hostageAction.push("completely broken, indifferent to the citizens abusing $his body.")>> - <<set _hostageAction.push("barely showing signs of life as $his ruined body is kicked around the floor.")>> - <<set _hostageAction.push("getting shoved onto a shelf with dozens of other limbless, broken slaves.")>> - <</if>> - <<case "Degradationism">> - <<if $rivalryDuration <= 5>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set _hostageAction.push("refusing to be touched by $his owner.")>> - <<set _hostageAction.push("refusing to even look at $his owner.")>> - <<set _hostageAction.push("getting mad when asked about $his sexual exploits.")>> - <<elseif $rivalryDuration <= 10>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("reluctantly allowing $his owner to play with $his body.")>> - <<set _hostageAction.push("gingerly looking at $his owner as they approach.")>> - <<set _hostageAction.push("blushing and avoiding the question when asked about $his sexual exploits.")>> - <<elseif $rivalryDuration <= 15>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("making love with $his owner.")>> - <<set _hostageAction.push("curiously watching $his owner as they approach.")>> - <<set _hostageAction.push("blurting it out and burying $his face in $his hands when asked about $his sexual exploits with $his owner.")>> - <<elseif $rivalryDuration <= 20>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("happily making love to $his owner.")>> - <<set _hostageAction.push("eagerly watching $his owner as they approach.")>> - <<set _hostageAction.push("giggling with another slave over their sexual exploits with their owners.")>> - <<else>> - <<set $hostage.counter.vaginal += 1>> - <<if $seePreg == 1>> - <<set _hostageAction.push("happily making love to $his owner. $His belly has a noticeable roundness to it.")>> - <<set _hostageAction.push("biting $his lip with nervous anticipation as $his owner approaches where $he's standing, $his hands cupping $his rounded middle.")>> - <<set _hostageAction.push("gossiping with another slave over their sexual exploits with their owners, all the while cradling $his growing pregnancy with pride.")>> - <<else>> - <<set _hostageAction.push("trying $his hardest to conceive a child with $his owner.")>> - <<set _hostageAction.push("biting $his lip with nervous anticipation as $his owner approaches where $he's standing.")>> - <<set _hostageAction.push("gossiping with another slave over how they conceived their child with their owner.")>> - <</if>> - <</if>> - <<case "Body Purism">> - <<if $rivalryDuration <= 5>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.boobs += 2000>> - <<set $hostage.boobsImplant += 2000>> - <<if $hostage.boobsImplant > 10000>> - <<set $hostage.boobsImplantType = "hyper fillable">> - <</if>> - <<set _hostageAction.push("trying desperately to stand despite $his massive <<print $hostage.boobs>>cc fake tits.")>> - <<set _hostageAction.push("crying while trying to get comfortable with $his <<print $hostage.boobs>>cc fake tits.")>> - <<set _hostageAction.push("sobbing as an autosurgery reads out how much $his <<print $hostage.boobs>>cc implants can be expanded this week.")>> - <<elseif $rivalryDuration <= 10>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.boobs += 1000>> - <<set $hostage.boobsImplant += 1000>> - <<if $hostage.boobsImplant > 10000>> - <<set $hostage.boobsImplantType = "hyper fillable">> - <</if>> - <<set _hostageAction.push("reluctantly exploring $his new massive <<print $hostage.boobs>>cc implants.")>> - <<set _hostageAction.push("reluctantly exploring new resting positions due to $his <<print $hostage.boobs>>cc implants.")>> - <<set _hostageAction.push("crying as an autosurgery reads out how much $his <<print $hostage.boobs>>cc implants can be expanded this week.")>> - <<elseif $rivalryDuration <= 15>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.boobs += 1000>> - <<set $hostage.boobsImplant += 1000>> - <<if $hostage.boobsImplant > 10000>> - <<set $hostage.boobsImplantType = "hyper fillable">> - <</if>> - <<set _hostageAction.push("happily playing with $his truly immense <<print $hostage.boobs>>cc breast implants and huge butt implants.")>> - <<set _hostageAction.push("happily resting $his head on $his <<print $hostage.boobs>>cc breast implants.")>> - <<set _hostageAction.push("blushing as an autosurgery reads out how much $his <<print $hostage.boobs>>cc implants can be expanded this week.")>> - <<elseif $rivalryDuration <= 20>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.boobs += 1000>> - <<set $hostage.boobsImplant += 1000>> - <<if $hostage.boobsImplant > 10000>> - <<set $hostage.boobsImplantType = "hyper fillable">> - <</if>> - <<set _hostageAction.push("happily getting titfucked against $his anchoring <<print $hostage.boobs>>cc fake tits.")>> - <<set _hostageAction.push("contently resting against $his <<print $hostage.boobs>>cc fake tits.")>> - <<set _hostageAction.push("getting excited as an autosurgery reads out how much $his <<print $hostage.boobs>>cc implants can be expanded this week.")>> - <<else>> - <<set _hostageAction.push("resting on $his monstrous <<print $hostage.boobs>>cc fake tits, whining about not being allowed larger implants.")>> - <<set _hostageAction.push("resting atop $his monstrous <<print $hostage.boobs>>cc fake tits, daydreaming about being even bigger.")>> - <<set _hostageAction.push("throwing a fit that $his <<print $hostage.boobs>>cc fake tits are too big to expand further.")>> - <<set _hostageAction.push("throwing a fit that $his <<print $hostage.boobs>>cc fake tits stick out too far to allow $him to squeeze into the surgery suite.")>> - <</if>> - <<case "Transformation Fetishism">> - <<if $rivalryDuration <= 5>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set _hostageAction.push("attempting to refute a report on surgical side effects in your arcology.")>> - <<set _hostageAction.push("refusing to believe pictures of surgeries performed in your arcology are real.")>> - <<set _hostageAction.push("wondering why these maniacs care if $his body is unaltered or not.")>> - <<elseif $rivalryDuration <= 10>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("refusing to believe a report on surgical side effects in your arcology.")>> - <<set _hostageAction.push("gaping in surprise at pictures of surgeries performed in your arcology.")>> - <<set _hostageAction.push("admiring how natural $his body truly is.")>> - <<elseif $rivalryDuration <= 15>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("gasping at a report on surgical side effects in your arcology.")>> - <<set _hostageAction.push("gasping in horror at pictures of surgeries performed in your arcology.")>> - <<set _hostageAction.push("beginning to understand how beautiful $his pure body is.")>> - <<elseif $rivalryDuration <= 20>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("crying over a report on surgical side effects in your arcology.")>> - <<set _hostageAction.push("crying in terror at pictures of surgeries performed in your arcology.")>> - <<set _hostageAction.push("admiring how pure $his body is in the mirror.")>> - <<else>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("making a public speech over surgical side effects in your arcology.")>> - <<set _hostageAction.push("genuinely thanking $his owner for keeping $his body pure and beautiful.")>> - <<set _hostageAction.push("admiring $his pure body from every angle $he can.")>> - <</if>> - <<case "Youth Preferentialism">> - <<if $rivalryDuration <= 5>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 1>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.counter.anal += 1>> - <<set _hostageAction.push("struggling to escape the grasp of a motherly _woman2.")>> - <<set _hostageAction.push("hiding from $his MILF partner, sobbing quietly.")>> - <<set _hostageAction.push("struggling to escape being mothered by $his older partner.")>> - <<elseif $rivalryDuration <= 10>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.oral += 5>> - <<set $hostage.counter.vaginal += 5>> - <<set $hostage.counter.anal += 5>> - <<set _hostageAction.push("crying gently while a <<= _mother2>>ly _woman2 fondles $him.")>> - <<set _hostageAction.push("cringing as $he massages $his MILF partner's back.")>> - <<set _hostageAction.push("cautiously tasting $his MILF partner's milk.")>> - <<elseif $rivalryDuration <= 15>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.oral += 10>> - <<set $hostage.counter.vaginal += 10>> - <<set $hostage.counter.anal += 10>> - <<set _hostageAction.push("resting in the arms of $his MILF friend.")>> - <<set _hostageAction.push("carefully giving $his MILF lover a back massage.")>> - <<set _hostageAction.push("carefully suckling $his MILF friend's nipple.")>> - <<elseif $rivalryDuration <= 20>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 10>> - <<set $hostage.counter.vaginal += 10>> - <<set $hostage.counter.anal += 10>> - <<set _hostageAction.push("happily being cradled by $his MILF lover.")>> - <<set _hostageAction.push("happily giving $his MILF lover a foot massage before bed.")>> - <<set _hostageAction.push("happily suckling $his MILF lover's motherly tits.")>> - <<else>> - <<set $hostage.counter.oral += 20>> - <<set $hostage.counter.vaginal += 20>> - <<set $hostage.counter.anal += 20>> - <<set _hostageAction.push("resting intertwined with $his favorite MILF in the world.")>> - <<set _hostageAction.push("energetically giving $his MILF lover a full body massage before bed.")>> - <<set _hostageAction.push("happily suckling $his MILF lover's motherly tits while fondling $his lover's crotch.")>> - <</if>> - <<case "Maturity Preferentialism">> - <<if $rivalryDuration <= 5>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 1>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.counter.anal += 1>> - <<set _hostageAction.push("struggling to escape the grasp of an energetic young _woman2.")>> - <<set _hostageAction.push("shouting profanity at $his young partner.")>> - <<set _hostageAction.push("rebuking $his young partner's advances.")>> - <<elseif $rivalryDuration <= 10>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.oral += 5>> - <<set $hostage.counter.vaginal += 5>> - <<set $hostage.counter.anal += 5>> - <<set _hostageAction.push("crying gently while a young _woman2 eagerly fondles $him.")>> - <<set _hostageAction.push("shying away from $his young partner.")>> - <<set _hostageAction.push("curiously fondling $his young partner's dick.")>> - <<elseif $rivalryDuration <= 15>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.oral += 10>> - <<set $hostage.counter.vaginal += 10>> - <<set $hostage.counter.anal += 10>> - <<set _hostageAction.push("trying to catch a break as $his young friend begs to have some more fun.")>> - <<set _hostageAction.push("resting alongside $his young friend.")>> - <<set _hostageAction.push("cautiously rubbing $his energetic young friend's cock.")>> - <<elseif $rivalryDuration <= 20>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 10>> - <<set $hostage.counter.vaginal += 10>> - <<set $hostage.counter.anal += 10>> - <<set _hostageAction.push("kissing $his young lover.")>> - <<set _hostageAction.push("talking about things with $his young lover.")>> - <<set _hostageAction.push("giving $his energetic young lover a handjob.")>> - <<else>> - <<set $hostage.counter.oral += 20>> - <<set $hostage.counter.vaginal += 20>> - <<set $hostage.counter.anal += 20>> - <<set _hostageAction.push("basking in the afterglow, intertwined with $his favorite youth.")>> - <<set _hostageAction.push("whispering something sexy into $his young lover's ear.")>> - <<set _hostageAction.push("giving $his energetic young lover a handjob while deeply kissing _him2.")>> - <</if>> - <<case "Slimness Enthusiasm">> - <<if $rivalryDuration <= 5>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight += 5>> - <<set $hostage.boobs += 1500>> - <<set _hostageAction.push("trying desperately to stand despite $his massive <<print $hostage.boobs>>cc tits.")>> - <<set _hostageAction.push("crying over $his swollen breasts and butt.")>> - <<set _hostageAction.push("weeping as the breast injections swell $his breasts to <<print $hostage.boobs>>ccs.")>> - <<elseif $rivalryDuration <= 10>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.weight += 5>> - <<set $hostage.boobs += 1000>> - <<set _hostageAction.push("reluctantly exploring $his new massive <<print $hostage.boobs>>cc tits, bigger bottom, and softer body.")>> - <<set _hostageAction.push("cringing as $he feels $his huge soft tits and ass.")>> - <<set _hostageAction.push("cringing as the breast injections swell $his breasts to <<print $hostage.boobs>>ccs along with $his butt.")>> - <<elseif $rivalryDuration <= 15>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.weight += 5>> - <<set $hostage.boobs += 1000>> - <<set _hostageAction.push("happily playing with $his truly immense <<print $hostage.boobs>>cc breasts and huge butt.")>> - <<set _hostageAction.push("giggling as $he gropes $his soft body.")>> - <<set _hostageAction.push("smiling as the breast injections swell $his breasts to <<print $hostage.boobs>>ccs. $He runs $his hand across $his huge butt and softening body.")>> - <<elseif $rivalryDuration <= 20>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight += 5>> - <<set $hostage.boobs += 1000>> - <<set _hostageAction.push("happily getting titfucked in $his immobilizing <<print $hostage.boobs>>cc tits.")>> - <<set _hostageAction.push("happily massaging $his super soft body and huge assets.")>> - <<set _hostageAction.push("practically orgasming as the breast injections swell $his breasts to <<print $hostage.boobs>>ccs. $He sinks $his hands into $his enormous butt and soft belly.")>> - <<else>> - <<set _hostageAction.push("resting atop $his monstrous <<print $hostage.boobs>>cc tits, whining about not being allowed to have $his assets swollen more.")>> - <<set _hostageAction.push("resting in $his own mountainous softness.")>> - <<set _hostageAction.push("shouting at a plastic surgeon to make $his <<print $hostage.boobs>>cc tits even larger.")>> - <<set _hostageAction.push("attempting to maneuver around $his <<print $hostage.boobs>>cc tits to reach a drug cabinet for more injections.")>> - <</if>> - <<case "Asset Expansionism">> - <<if $rivalryDuration <= 5>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set _hostageAction.push("attempting to refute a report on drug side effects in your arcology.")>> - <<set _hostageAction.push("refusing to believe pictures of excessively expanded slaves in your arcology are real.")>> - <<set _hostageAction.push("refusing to show off $his natural body.")>> - <<elseif $rivalryDuration <= 10>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("refusing to believe a report on drug side effects in your arcology.")>> - <<set _hostageAction.push("gasping in surprise at pictures of excessively expanded slaves in your arcology.")>> - <<set _hostageAction.push("reluctantly doing a series of stretching exercises to show off $his natural body.")>> - <<elseif $rivalryDuration <= 15>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("gasping at a report on drug side effects in your arcology.")>> - <<set _hostageAction.push("gasping in horror at pictures of excessively expanded slaves in your arcology.")>> - <<set _hostageAction.push("doing a series of stretching exercises to show off $his natural body.")>> - <<elseif $rivalryDuration <= 20>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("crying over a report on drug side effects in your arcology.")>> - <<set _hostageAction.push("crying in terror at pictures of excessively expanded slaves in your arcology.")>> - <<set _hostageAction.push("happily doing a series of stretching exercises to show off $his natural body.")>> - <<else>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("making a public speech over drug side effects in your arcology.")>> - <<set _hostageAction.push("genuinely thanking $his owner for keeping $him healthy and from becoming nothing more than a bloated pair of tits and ass.")>> - <<set _hostageAction.push("showing off $his completely natural body with pride before an audience of civilians.")>> - <</if>> - <<case "Pastoralism">> - <<if $rivalryDuration <= 5>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight -= 5>> - <<set $hostage.muscles += 5>> - <<set _hostageAction.push("angrily jogging on a treadmill, $his fat body and big tits jiggling constantly.")>> - <<set _hostageAction.push("trying to catch $his breath and stop $his fat body from sweating.")>> - <<set _hostageAction.push("struggling to run $his overweight body around a track.")>> - <<elseif $rivalryDuration <= 10>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight -= 5>> - <<set $hostage.muscles += 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("reluctantly doing sit-ups, $his plush body struggling to manage.")>> - <<set _hostageAction.push("checking $himself out in the mirror, gawking at how much weight $he's lost.")>> - <<set _hostageAction.push("attempting to run a lap around the track despite $his overweight body.")>> - <<elseif $rivalryDuration <= 15>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight -= 5>> - <<set $hostage.muscles += 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("lifting weights, $his soft body barely hiding $his bulging muscles.")>> - <<set _hostageAction.push("pinching $his remaining flab and making a disgusted face.")>> - <<set _hostageAction.push("running laps around the track to burn off $his excess bodyfat.")>> - <<elseif $rivalryDuration <= 20>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight -= 5>> - <<set $hostage.muscles += 5>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("eagerly pumping iron using $his lean and powerful body.")>> - <<set _hostageAction.push("massaging body oil into $his abs and checking $himself out in a mirror.")>> - <<set _hostageAction.push("eagerly running laps around a track, showing off $his thin and fit body.")>> - <<else>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("performing an impressive clean and jerk, and then giving $his owner a high five.")>> - <<set _hostageAction.push("massaging body oil into $his abs and posing in front of the mirror. $He is proud to have gone from a fat cow to a ripped goddess.")>> - <<set _hostageAction.push("running laps around a track, competing with other eagerly competitive slaves to be the best.")>> - <</if>> - <<case "Cummunism">> - <<if $rivalryDuration <= 5>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight += 5>> - <<set $hostage.boobs += 1000>> - <<set $hostage.lactation = 2>> - <<set $hostage.lactationDuration = 2>> - <<set _hostageAction.push("trying desperately to extract the milk from $his massive <<print $hostage.boobs>>cc tits. $He appears to have gained some weight.")>> - <<set _hostageAction.push("sobbing as $he massages $his sore <<print $hostage.boobs>>cc udders.")>> - <<set _hostageAction.push("sobbing as the milkers drain $his <<print $hostage.boobs>>cc udders.")>> - <<elseif $rivalryDuration <= 10>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight += 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.boobs += 1000>> - <<set $hostage.lactation = 2>> - <<set $hostage.lactationDuration = 2>> - <<set _hostageAction.push("reluctantly asking for $his massive <<print $hostage.boobs>>cc tits to be milked. $He's certainly getting soft.")>> - <<set _hostageAction.push("crying as rubs $his uncomfortably massive <<print $hostage.boobs>>cc udders and softening belly.")>> - <<set _hostageAction.push("sighing as the milkers drain $his big <<print $hostage.boobs>>cc udders while $he massages $his softening belly.")>> - <<elseif $rivalryDuration <= 15>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight += 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.boobs += 1000>> - <<set $hostage.lactation = 2>> - <<set $hostage.lactationDuration = 2>> - <<set _hostageAction.push("happily asking for $his truly immense <<print $hostage.boobs>>cc breasts to be milked. $His body has become notably plush.")>> - <<set _hostageAction.push("humming as $he soothes $his truly immense sore <<print $hostage.boobs>>cc udders. $He lets off a content sigh as $he jiggles $his soft belly.")>> - <<set _hostageAction.push("sighing with relief as the milkers drain $his huge <<print $hostage.boobs>>cc udders while $he massages $his jiggly belly.")>> - <<elseif $rivalryDuration <= 20>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight += 5>> - <<set $hostage.boobs += 1000>> - <<set $hostage.lactation = 2>> - <<set $hostage.lactationDuration = 2>> - <<set _hostageAction.push("begging for $his immobilizing <<print $hostage.boobs>>cc tits to be drained. $He has become quite fat.")>> - <<set _hostageAction.push("happily playing with $his <<print $hostage.boobs>>cc udders. $He squirms and giggles as $his entire body jiggles in response.")>> - <<set _hostageAction.push("happily humming as the milkers drain $his giant <<print $hostage.boobs>>cc udders while $he plays with $his fat belly and breasts.")>> - <<else>> - <<set $hostage.lactation = 2>> - <<set $hostage.lactationDuration = 2>> - <<set _hostageAction.push("resting atop $his monstrous <<print $hostage.boobs>>cc tits, whining about not being allowed to have $his assets swollen more and that $he has to squeeze $his milk out $himself.")>> - <<set _hostageAction.push("moans lewdly as a pair of slaves massage $his <<print $hostage.boobs>>cc udders, and as a third appears from under $his heavy body.")>> - <<set _hostageAction.push("moaning loudly as the milkers drain $his massive <<print $hostage.boobs>>cc udders.")>> - <</if>> - <<case "Physical Idealism">> - <<if $rivalryDuration <= 5>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight += 5>> - <<set $hostage.boobs += 50>> - <<set $hostage.counter.vaginal += 28>> - <<set _hostageAction.push("trying desperately to vomit up all the food forced into $his bloated stomach while being thwarted by a specialized gag. $He appears to have gained some weight.")>> - <<set _hostageAction.push("sobbing as $he is forcibly raped and broken in.")>> - <<set _hostageAction.push("sobbing as $he is forced is experience all manner of perversion in an effort to reveal $his fetishes.")>> - <<elseif $rivalryDuration <= 10>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight += 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.boobs += 100>> - <<set $hostage.counter.vaginal += 28>> - <<switch $hostageFetish>> - <<case "cumslut">> - <<set $hostage.counter.oral += 70>> - <<case "buttslut">> - <<set $hostage.counter.anal += 21>> - <<set $hostage.anus = 3>> - <<case "boobs">> - <<set $hostage.boobs += 100>> - <<set $hostage.boobsImplant += 100>> - <<if $hostage.boobsImplant > 2000>> - <<set $hostage.boobsImplantType = "advanced fillable">> - <</if>> - <<case "pregnancy">> - <<set $hostage.preg++>> - <<set $hostage.pregKnown = 1>> - <<set $hostage.pregWeek++>> - <<run SetBellySize($hostage)>> - <</switch>> - <<set _hostageAction.push("relaxing in $his comfy bed carefully exploring $his food stuffed belly and its unique curvature. $He's certainly getting soft.")>> - <<set _hostageAction.push("crying as $he rubs the uncomfortable bulge of $his overfilled stomach and soft belly as yet another guy fucks $his loosening cunt.")>> - <<switch $hostageFetish>> - <<case "submissive">> - <<set _hostageAction.push("struggling to hold back $his joy as $he is forced to eat out another slave.")>> - <<case "cumslut">> - <<set _hostageAction.push("struggling to hold back $his joy as a hot load spurts across $his face.")>> - <<case "humiliation">> - <<set _hostageAction.push("struggling to hold back $his joy as $he is paraded, naked, through the arcology.")>> - <<case "buttslut">> - <<set _hostageAction.push("struggling to hold back $his joy as $his ass is roughly fucked.")>> - <<case "boobs">> - <<set _hostageAction.push("struggling to hold back $his joy as $he checks out $his new <<print $hostage.boobsImplant>>cc implants.")>> - <<case "sadist">> - <<set _hostageAction.push("struggling to hold back $his joy as $he is encouraged to beat a slave that spilled a cup of food on the clean floor.")>> - <<case "masochist">> - <<set _hostageAction.push("struggling to hold back $his joy as $his nipples are cruelly pinched and twisted.")>> - <<case "dom">> - <<set _hostageAction.push("struggling to hold back $his joy as $he is told to order a waiting slave to do whatever $he wants.")>> - <<case "pregnancy">> - <<set _hostageAction.push("struggling to hold back $his joy as another huge load shoots into $his fertile womb.")>> - <</switch>> - <<elseif $rivalryDuration <= 15>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight += 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.boobs += 100>> - <<set $hostage.counter.vaginal += 35>> - <<switch $hostageFetish>> - <<case "cumslut">> - <<set $hostage.counter.oral += 70>> - <<case "buttslut">> - <<set $hostage.counter.anal += 35>> - <<set $hostage.anus = 3>> - <<case "boobs">> - <<set $hostage.boobs += 100>> - <<set $hostage.boobsImplant += 100>> - <<if $hostage.boobsImplant > 2000>> - <<set $hostage.boobsImplantType = "advanced fillable">> - <</if>> - <<case "pregnancy">> - <<set $hostage.preg++>> - <<set $hostage.pregKnown = 1>> - <<set $hostage.pregWeek++>> - <<run SetBellySize($hostage)>> - <</switch>> - <<set _hostageAction.push("relaxing in $his comfy bed sucking on $his feeding tube. One hand is fondling $his plush body while the other is teasing $his clit. $His body has become notably plush, made even more obvious when an orgasm sends ripples through $his soft flesh.")>> - <<set _hostageAction.push("humming as $he soothes $his full belly as $he enjoys a good fucking.")>> - <<switch $hostageFetish>> - <<case "submissive">> - <<set _hostageAction.push("begging $his master-slave to permit $him to service _hisU dick.")>> - <<case "cumslut">> - <<set _hostageAction.push("happily sucking a dick and swallowing every last drop of cum.")>> - <<case "humiliation">> - <<set _hostageAction.push("walking alongside $his master in a figure-revealing pair of tight pants and a tube top. The pair of vibrators on $his nipples and the huge dildo in $his cunt are obvious through the taut material.")>> - <<case "buttslut">> - <<set _hostageAction.push("happily taking a huge dick in $his ass while wishing it was even bigger.")>> - <<case "boobs">> - <<set _hostageAction.push("happily teasing a dick between $his new <<print $hostage.boobsImplant>>cc implants.")>> - <<case "sadist">> - <<set _hostageAction.push("happily tormenting a sissy slave's limp dick as $he rails _himU with a strap-on.")>> - <<case "masochist">> - <<set _hostageAction.push("struggling to smile while being strangled during sex.")>> - <<case "dom">> - <<set _hostageAction.push("forcing $his sissy slave to feed $him $his favorite foods while hoping _heU makes a mistake so _heU may be punished.")>> - <<case "pregnancy">> - <<set _hostageAction.push("humming softly as $he caresses $his early pregnancy.")>> - <</switch>> - <<elseif $rivalryDuration <= 20>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight += 5>> - <<set $hostage.boobs += 100>> - <<set $hostage.counter.vaginal += 40>> - <<switch $hostageFetish>> - <<case "cumslut">> - <<set $hostage.counter.oral += 70>> - <<case "buttslut">> - <<set $hostage.counter.anal += 35>> - <<set $hostage.anus = 4>> - <<case "boobs">> - <<set $hostage.boobs += 100>> - <<set $hostage.boobsImplant += 100>> - <<if $hostage.boobsImplant > 2000>> - <<set $hostage.boobsImplantType = "advanced fillable">> - <</if>> - <<case "pregnancy">> - <<set $hostage.preg++>> - <<set $hostage.pregKnown = 1>> - <<set $hostage.pregWeek++>> - <<run SetBellySize($hostage)>> - <</switch>> - <<set _hostageAction.push("relaxing in $his comfy bed surrounded by mountains of molded slave food. $He is eagerly shoving handfuls of the fattening treats into $his mouth while simultaneously begging for someone to fill $his neglected pussy. $He has become quite fat; $his body jiggles with every motion.")>> - <<set _hostageAction.push("happily stuffing $his face as another guy fucks $his fat body.")>> - <<switch $hostageFetish>> - <<case "submissive">> - <<set _hostageAction.push("desperately begging for $his master-slave to tear $him out of $his clothes and rape $him on the spot.")>> - <<case "cumslut">> - <<set _hostageAction.push("desperately begging for the owner of the dick being waved in $his face to shower $him with cum.")>> - <<case "humiliation">> - <<set _hostageAction.push("standing on a balcony fully nude shouting at passersby to ogle $him, desperate for stronger forms of humiliation.")>> - <<case "buttslut">> - <<set _hostageAction.push("begging for more cocks in $his ass as the two men already penetrating it struggle to not get too intimate with each other.")>> - <<case "boobs">> - <<set _hostageAction.push("groping $his already huge <<print $hostage.boobsImplant>>cc breasts and begging for them to be even bigger.")>> - <<case "sadist">> - <<set _hostageAction.push("cumming hard as the slave mounting $him writhes in pain at _hisU torment.")>> - <<case "masochist">> - <<set _hostageAction.push("cumming hard as $he is beaten during sex.")>> - <<case "dom">> - <<set _hostageAction.push("sitting on a slave that displeased $him and forcing the struggling _girlU to eat $him out.")>> - <<case "pregnancy">> - <<set _hostageAction.push("puffing out $his already large belly pretending to be even more pregnant than $he already is.")>> - <</switch>> - <<else>> - <<set $hostage.weight += 5>> - <<set $hostage.boobs += 100>> - <<set $hostage.counter.vaginal += 60>> - <<switch $hostageFetish>> - <<case "cumslut">> - <<set $hostage.counter.oral += 70>> - <<case "buttslut">> - <<set $hostage.counter.anal += 45>> - <<case "boobs">> - <<set $hostage.boobs += 100>> - <<set $hostage.boobsImplant += 100>> - <<if $hostage.boobsImplant > 2000>> - <<set $hostage.boobsImplantType = "advanced fillable">> - <</if>> - <<case "pregnancy">> - <<set $hostage.preg++>> - <<set $hostage.pregKnown = 1>> - <<set $hostage.pregWeek++>> - <<run SetBellySize($hostage)>> - <</switch>> - <<set _hostageAction.push("relaxing in $his comfy bed surrounded by mountains of molded slave food. $He is greedily shoving handfuls of the fattening treats into $his mouth as fast as $he can. $He has grown enormously fat and $his belly is jiggling oddly. When $he repositions $himself, you catch sight of a quartet of large vibrating dildos crammed into $his stretched cunt.")>> - <<switch $hostageFetish>> - <<case "submissive">> - <<set _hostageAction.push("greedily stuffing $his face with slave food as a pair of guys double team $his ruined pussy.")>> - <<set _hostageAction.push("going out of $his way to bring $his partner to orgasm with no interest in $his own.")>> - <<case "cumslut">> - <<set _hostageAction.push("greedily stuffing $his face with slave food as a pair of guys double team $his ruined pussy. Several more encircle $him, ready to shower $him with cum the moment $he climaxes.")>> - <<set _hostageAction.push("greedily sucking cocks, desperate to fill $himself with cum.")>> - <<case "humiliation">> - <<set _hostageAction.push("greedily stuffing $his face with slave food as a pair of guys double team $his ruined pussy.")>> - <<set _hostageAction.push("in the center of a gangbang $he started in the middle of one of the arcology's shopping malls.")>> - <<case "buttslut">> - <<set _hostageAction.push("greedily stuffing $his face with slave food as a pair of guys double team $his ruined pussy. Another struggles to support $his weight as he plows $his gaping anus.")>> - <<set _hostageAction.push("desperately trying to shove a fifth dildo into $his asshole and becoming distraught when it doesn't fit.")>> - <<case "boobs">> - <<set _hostageAction.push("greedily stuffing $his face with slave food as a pair of guys double team $his ruined pussy. $He takes time between bites to hungrily fondle $his <<print $hostage.boobs>>cc tits.")>> - <<set _hostageAction.push("crying with joy after $his breasts ruined a shirt $he was just able to fit into that morning.")>> - <<case "sadist">> - <<set _hostageAction.push("greedily stuffing $his face with slave food as a pair of guys double team $his ruined pussy.")>> - <<set _hostageAction.push("laughing maniacally as $he beats a slave viciously as $he rides _himU. $He keeps going even after the poor _girlU's dick breaks from penetrating $him at a bad angle.")>> - <<case "masochist">> - <<set _hostageAction.push("greedily stuffing $his face with slave food as a pair of guys double team $his ruined pussy.")>> - <<set _hostageAction.push("going out of $his way to find the most undesirable men in the arcology to offer $himself to.")>> - <<case "dom">> - <<set _hostageAction.push("greedily stuffing $his face with slave food as a pair of guys double team $his ruined pussy.")>> - <<set _hostageAction.push("mercilessly beating the unfortunate slave servicing $him as punishment for knocking over $his tray of snacks.")>> - <<case "pregnancy">> - <<set _hostageAction.push("greedily stuffing $his face with slave food as a pair of guys double team $his ruined pussy. $He takes time between bites to hungrily fondle $his pregnancy.")>> - <<set _hostageAction.push("deliriously crying for $his current lover to pump more children into $his pregnant womb.")>> - <</switch>> - <</if>> - <<case "Hedonistic Decadence">> - <<if $rivalryDuration <= 5>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight -= 5>> - <<set $hostage.muscles += 5>> - <<set _hostageAction.push("angrily jogging on a treadmill, $his fat body and big tits jiggling constantly.")>> - <<set _hostageAction.push("trying to catch $his breath and stop $his fat body from sweating.")>> - <<set _hostageAction.push("struggling to run $his overweight body around a track.")>> - <<elseif $rivalryDuration <= 10>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight -= 5>> - <<set $hostage.muscles += 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("reluctantly doing sit-ups, $his plush body struggling to manage.")>> - <<set _hostageAction.push("checking $himself out in the mirror, gawking at how much weight $he's lost.")>> - <<set _hostageAction.push("attempting to run a lap around the track despite $his overweight body.")>> - <<elseif $rivalryDuration <= 15>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight -= 5>> - <<set $hostage.muscles += 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("lifting weights, $his soft body barely hiding $his bulging muscles.")>> - <<set _hostageAction.push("pinching $his remaining flab and making a disgusted face.")>> - <<set _hostageAction.push("running laps around the track to burn off $his excess bodyfat.")>> - <<elseif $rivalryDuration <= 20>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.weight -= 5>> - <<set $hostage.muscles += 5>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("eagerly pumping iron using $his lean and powerful body.")>> - <<set _hostageAction.push("massaging body oil into $his abs and checking $himself out in a mirror.")>> - <<set _hostageAction.push("eagerly running laps around a track, showing off $his thin and fit body.")>> - <<else>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("performing an impressive clean and jerk, and then giving $his owner a high five.")>> - <<set _hostageAction.push("massaging body oil into $his abs and posing in front of the mirror. $He is proud to have gone from a fat cow to a ripped goddess.")>> - <<set _hostageAction.push("running laps around a track, competing with other eagerly competitive slaves to be the best.")>> - <</if>> - <<case "Chattel Religionism">> - <<if $rivalryDuration <= 5>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set _hostageAction.push("attempting to refute a report on what's expected of slaves as part of your new religion.")>> - <<set _hostageAction.push("refusing to believe a video of a religious service in your arcology is real.")>> - <<set _hostageAction.push("refusing to socialize with other slaves.")>> - <<elseif $rivalryDuration <= 10>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("refusing to believe a report on what's expected of slaves as part of your new religion.")>> - <<set _hostageAction.push("questioning the validity of a video of a religious service in your arcology.")>> - <<set _hostageAction.push("reluctantly spending time in $his arcology's cosmopolitan public spaces.")>> - <<elseif $rivalryDuration <= 15>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("gasping at a report on what's expected of slaves as part of your new religion.")>> - <<set _hostageAction.push("gasping at the absurdity of a video of a religious service in your arcology.")>> - <<set _hostageAction.push("cautiously chatting with a group of slaves in $his arcology's cosmopolitan public spaces.")>> - <<elseif $rivalryDuration <= 20>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("crying over a report on what's expected of slaves as part of your new religion.")>> - <<set _hostageAction.push("shaking $his head in incomprehension at video of a religious service in your arcology.")>> - <<set _hostageAction.push("happily chatting with a group of slaves in $his arcology's cosmopolitan public spaces.")>> - <<else>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("making a public speech on the horrors of your new religion.")>> - <<set _hostageAction.push("laughing at the ridiculousness of a video of a religious service in your arcology.")>> - <<set _hostageAction.push("chatting with a group of slaves and feeling right at home in $his arcology's cosmopolitan public spaces.")>> - <</if>> - <<case "Multiculturalism">> - <<if $rivalryDuration <= 5>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set _hostageAction.push("refusing the tenets of $his new religion.")>> - <<set _hostageAction.push("refusing to pray for your arcology's salvation.")>> - <<set _hostageAction.push("freaking out as several men approach $him for sex.")>> - <<elseif $rivalryDuration <= 10>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.oral += 10>> - <<set $hostage.counter.vaginal += 10>> - <<set $hostage.counter.anal += 10>> - <<set $hostage.counter.mammary += 10>> - <<set _hostageAction.push("reluctantly following the tenets of $his new religion.")>> - <<set _hostageAction.push("questioning why $he is made to pray for your arcology's salvation.")>> - <<set _hostageAction.push("crying as $he is forced to service three dicks at once.")>> - <<elseif $rivalryDuration <= 15>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.oral += 25>> - <<set $hostage.counter.vaginal += 25>> - <<set $hostage.counter.anal += 25>> - <<set $hostage.counter.mammary += 25>> - <<set _hostageAction.push("praying for the souls of the citizens and slaves of your arcology.")>> - <<set _hostageAction.push("trying to pray for your arcology's salvation.")>> - <<set _hostageAction.push("attempting to please the three dicks in $him as quickly as possible.")>> - <<elseif $rivalryDuration <= 20>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.counter.mammary += 50>> - <<set _hostageAction.push("crying over the souls of the citizens and slaves of your arcology.")>> - <<set _hostageAction.push("steadily praying for your arcology's salvation.")>> - <<set _hostageAction.push("enjoying belonging to a religion so intent to fill $him with dicks.")>> - <<else>> - <<set $hostage.counter.oral += 100>> - <<set $hostage.counter.vaginal += 100>> - <<set $hostage.counter.anal += 100>> - <<set $hostage.counter.mammary += 100>> - <<set _hostageAction.push("imploring the public to pray for the salvation of the citizens and slaves of your arcology.")>> - <<set _hostageAction.push("desperately praying for the salvation of your arcology.")>> - <<set _hostageAction.push("having a religious experience with as many dicks $his body can fit inside itself.")>> - <</if>> - <<case "Intellectual Dependency">> - <<if $rivalryDuration <= 5>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set _hostageAction.push("refusing to pay attention to $his lessons.")>> - <<set _hostageAction.push("refusing to act like a proper $girl.")>> - <<set _hostageAction.push("forced into remedial training after threatening $his owner's reputation.")>> - <<elseif $rivalryDuration <= 10>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.oral += 10>> - <<set $hostage.counter.vaginal += 10>> - <<set $hostage.counter.anal += 10>> - <<set $hostage.intelligenceImplant = Math.clamp($hostage.intelligenceImplant+1, 0, 30)>> - <<set $hostage.skill.oral = Math.clamp($hostage.skill.oral+5, 0, 100)>> - <<set $hostage.skill.entertainment = Math.clamp($hostage.skill.entertainment+5, 0, 100)>> - <<set $hostage.skill.anal = Math.clamp($hostage.skill.anal+5, 0, 100)>> - <<set $hostage.skill.vaginal = Math.clamp($hostage.skill.vaginal+5, 0, 100)>> - <<set $hostage.skill.whoring = Math.clamp($hostage.skill.whoring+5, 0, 100)>> - <<set _hostageAction.push("crying silently while being positioned to properly please $his partner.")>> - <<set _hostageAction.push("reluctantly balancing a book on $his head to perfect $his posture.")>> - <<set _hostageAction.push("reluctantly practicing enunciation to not risk angering $his owner.")>> - <<elseif $rivalryDuration <= 15>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.oral += 10>> - <<set $hostage.counter.vaginal += 10>> - <<set $hostage.counter.anal += 10>> - <<set $hostage.intelligenceImplant = Math.clamp($hostage.intelligenceImplant+2, 0, 30)>> - <<set $hostage.skill.oral = Math.clamp($hostage.skill.oral+5, 0, 100)>> - <<set $hostage.skill.entertainment = Math.clamp($hostage.skill.entertainment+5, 0, 100)>> - <<set $hostage.skill.anal = Math.clamp($hostage.skill.anal+5, 0, 100)>> - <<set $hostage.skill.vaginal = Math.clamp($hostage.skill.vaginal+5, 0, 100)>> - <<set $hostage.skill.whoring = Math.clamp($hostage.skill.whoring+5, 0, 100)>> - <<set _hostageAction.push("attempting to pass an exam on sexual satisfaction.")>> - <<set _hostageAction.push("trying to show no reaction as $he is felt up by $his owner's client.")>> - <<set _hostageAction.push("attempting to please $his owner's friends and not be a failure.")>> - <<elseif $rivalryDuration <= 20>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 10>> - <<set $hostage.counter.vaginal += 10>> - <<set $hostage.counter.anal += 10>> - <<set $hostage.intelligenceImplant = Math.clamp($hostage.intelligenceImplant+2, 0, 30)>> - <<set $hostage.skill.oral = Math.clamp($hostage.skill.oral+5, 0, 100)>> - <<set $hostage.skill.entertainment = Math.clamp($hostage.skill.entertainment+5, 0, 100)>> - <<set $hostage.skill.anal = Math.clamp($hostage.skill.anal+5, 0, 100)>> - <<set $hostage.skill.vaginal = Math.clamp($hostage.skill.vaginal+5, 0, 100)>> - <<set $hostage.skill.whoring = Math.clamp($hostage.skill.whoring+5, 0, 100)>> - <<set _hostageAction.push("demonstrating proper technique in drawing out a powerful ejaculation.")>> - <<set _hostageAction.push("elegantly luring in a client for $his owner.")>> - <<set _hostageAction.push("giving a blowjob to $his owner's client during business negotiations.")>> - <<else>> - <<set $hostage.counter.oral += 10>> - <<set $hostage.counter.vaginal += 10>> - <<set $hostage.counter.anal += 10>> - <<set _hostageAction.push("diligently showcasing a series of advanced sexual positions to a group of fresh <<= _girlU>>s.")>> - <<set _hostageAction.push("acting with refined grace even as a strand of cum splashes across $his face.")>> - <<set _hostageAction.push("holding perfectly still as $his owner and a client eat sushi off $his nude body. Even as they amuse themselves with $his vulnerable clit and nipples, $he shows no reaction.")>> - <</if>> - <<case "Slave Professionalism">> - <<if $rivalryDuration <= 5>> - <<set $hostage.trust += 5>> - <<set $hostage.devotion += 5>> - <<set $hostage.counter.vaginal += 10>> - <<set $hostage.energy += 5>> - <<set $hostage.addict += 2>> - <<set $hostage.hLength += 7>> - <<set $hostage.intelligenceImplant = Math.clamp($hostage.intelligenceImplant-5, 0, 30)>> - <<set $hostage.intelligence = Math.clamp($hostage.intelligence-5, -100, 100)>> - <<set _hostageAction.push("sobbing as $he struggles to not masturbate after a large hit of aphrodisiacs.")>> - <<set _hostageAction.push("holding $his head and struggling to recite $his favorite poem.")>> - <<set _hostageAction.push("refusing to put on the makeup presented to $him.")>> - <<elseif $rivalryDuration <= 10>> - <<set $hostage.trust += 5>> - <<set $hostage.devotion += 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.intelligenceImplant = Math.clamp($hostage.intelligenceImplant-5, 0, 30)>> - <<set $hostage.intelligence = Math.clamp($hostage.intelligence-5, -100, 100)>> - <<set $hostage.counter.oral += 30>> - <<set $hostage.counter.vaginal += 30>> - <<set $hostage.counter.anal += 30>> - <<set $hostage.energy += 5>> - <<set $hostage.addict += 2>> - <<set $hostage.hLength += 7>> - <<set _hostageAction.push("crying as $he rides a dick to orgasm.")>> - <<set _hostageAction.push("trying not to lose the memories of $his life before being captured.")>> - <<set _hostageAction.push("hesitantly trying on clothes and admiring $his figure in the mirror.")>> - <<elseif $rivalryDuration <= 15>> - <<set $hostage.trust += 5>> - <<set $hostage.devotion += 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.intelligenceImplant = Math.clamp($hostage.intelligenceImplant-5, 0, 30)>> - <<set $hostage.intelligence = Math.clamp($hostage.intelligence-10, -100, 100)>> - <<set $hostage.counter.oral += 50>> - <<set $hostage.counter.vaginal += 50>> - <<set $hostage.counter.anal += 50>> - <<set $hostage.energy += 5>> - <<set $hostage.addict += 2>> - <<set $hostage.hLength += 7>> - <<set _hostageAction.push("being presented with a selection of amusements and instead opting for the one between _hisU legs.")>> - <<set _hostageAction.push("walking around with $his breasts bouncing out of $his top and $his short skirt revealing $his lack of panties.")>> - <<set _hostageAction.push("admiring $himself in the mirror.")>> - <<elseif $rivalryDuration <= 20>> - <<set $hostage.trust += 5>> - <<set $hostage.devotion += 5>> - <<set $hostage.intelligenceImplant = Math.clamp($hostage.intelligenceImplant-5, 0, 30)>> - <<set $hostage.intelligence = Math.clamp($hostage.intelligence-10, -100, 100)>> - <<set $hostage.counter.oral += 70>> - <<set $hostage.counter.vaginal += 40>> - <<set $hostage.counter.anal += 30>> - <<set $hostage.energy += 5>> - <<set $hostage.addict += 2>> - <<set $hostage.hLength += 7>> - <<set $hostage.lips = Math.clamp($hostage.lips+5, 0, 100)>> - <<if $seePreg != 0>> - <<set $hostage.preg++>> - <<set $hostage.pregWeek++>> - <<run SetBellySize($hostage)>> - <</if>> - <<set _hostageAction.push("sloppily sucking a dick while taking it in both $his ass and pussy.")>> - <<set _hostageAction.push("struggling to fasten $his top before giving up and going without it.")>> - <<if $seePreg != 0>> - <<set _hostageAction.push("attempting to suck in $his ever growing pregnancy.")>> - <</if>> - <<set _hostageAction.push("pursing $his swollen lips at $his own reflection.")>> - <<else>> - <<set $hostage.counter.oral += 70>> - <<set $hostage.counter.vaginal += 40>> - <<set $hostage.counter.anal += 30>> - <<set $hostage.hLength += 7>> - <<set $hostage.lips = Math.clamp($hostage.lips+5, 0, 100)>> - <<if $seePreg != 0>> - <<set $hostage.preg++>> - <<set $hostage.pregWeek++>> - <<run SetBellySize($hostage)>> - <</if>> - <<set _hostageAction.push("taking as many dicks as $he can think of: one in the mouth, two in <<if $hostage.vagina > -1>>each<<else>>$his<</if>> hole, and another in each hand.")>> - <<set _hostageAction.push("pushing on a sliding door, begging to be let out.")>> - <<set _hostageAction.push("checking out $his reflection in a window, blissfully unaware of the show $he is giving to street below.")>> - <</if>> - <<case "Petite Admiration">> - <<if $rivalryDuration <= 5>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 1>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.counter.anal += 1>> - <<set _hostageAction.push("struggling in vain as $he is carried around by $his towering partner.")>> - <<set _hostageAction.push("crammed under a bed to escape $his much larger partner.")>> - <<set _hostageAction.push("struggling to pull $his head away from $his much larger partner's crotch.")>> - <<elseif $rivalryDuration <= 10>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.oral += 7>> - <<set $hostage.counter.vaginal += 3>> - <<set $hostage.counter.anal += 3>> - <<set _hostageAction.push("crying to $himself in the arms of $his towering partner as $he is carried around one of the arcology's public spaces.")>> - <<set _hostageAction.push("cringing as $his much larger partner sits $him in _his2 lap and paws at $him.")>> - <<set _hostageAction.push("crying gently as $his much larger partner forces $his face to _his2 crotch.")>> - <<elseif $rivalryDuration <= 15>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.oral += 15>> - <<set $hostage.counter.vaginal += 7>> - <<set $hostage.counter.anal += 7>> - <<set _hostageAction.push("calmly letting $his towering partner carry $him around one of the arcology's public spaces.")>> - <<set _hostageAction.push("carefully sitting in $his much larger partner's lap and letting _him2 fondle $his body.")>> - <<set _hostageAction.push("carefully putting $his mouth to use on $his much larger partner's crotch.")>> - <<elseif $rivalryDuration <= 20>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 15>> - <<set $hostage.counter.vaginal += 7>> - <<set $hostage.counter.anal += 7>> - <<set _hostageAction.push("happily letting $his towering partner carry $him around one of the arcology's public spaces as $he fondles _his2 genitals.")>> - <<set _hostageAction.push("happily resting in $his much larger partner's lap as _he2 pets $his head.")>> - <<set _hostageAction.push("happily putting $his mouth to work on $his much larger partner's genitals.")>> - <<else>> - <<set $hostage.counter.oral += 30>> - <<set $hostage.counter.vaginal += 15>> - <<set $hostage.counter.anal += 15>> - <<set _hostageAction.push("begging for $his towering partner to pick $him up and take $him for a walk'n'fuck.")>> - <<set _hostageAction.push("enjoying the feeling of $his much larger partner inside of $him as $he rests on _his2 lap.")>> - <<set _hostageAction.push("happily putting $his mouth to work on $his much larger partner's genitals as _he2 returns the favor.")>> - <</if>> - <<case "Statuesque Glorification">> - <<if $rivalryDuration <= 5>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 1>> - <<set $hostage.counter.vaginal += 1>> - <<set $hostage.counter.anal += 1>> - <<set _hostageAction.push("sitting on a table, out of reach of a shorter _woman2 and swearing at _him2.")>> - <<set _hostageAction.push("keeping $his smaller partner from reaching $him.")>> - <<set _hostageAction.push("rebuking $his smaller partner's advances.")>> - <<elseif $rivalryDuration <= 10>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.oral += 3>> - <<set $hostage.counter.vaginal += 7>> - <<set $hostage.counter.anal += 7>> - <<set _hostageAction.push("crying gently as a shorter _woman2 eagerly fondles $him.")>> - <<set _hostageAction.push("shying away from $his shorter partner.")>> - <<set _hostageAction.push("curiously exploring $his shorter partner's body.")>> - <<elseif $rivalryDuration <= 15>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.oral += 7>> - <<set $hostage.counter.vaginal += 13>> - <<set $hostage.counter.anal += 13>> - <<set _hostageAction.push("trying to catch a break from $his shorter partner's tongue in $his pussy.")>> - <<set _hostageAction.push("spooning $his shorter partner.")>> - <<set _hostageAction.push("cautiously giving $his shorter partner a full body massage.")>> - <<elseif $rivalryDuration <= 20>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.oral += 7>> - <<set $hostage.counter.vaginal += 13>> - <<set $hostage.counter.anal += 13>> - <<set _hostageAction.push("patting $his tiny lover's head.")>> - <<set _hostageAction.push("resting $his head on $his tiny love's lap.")>> - <<set _hostageAction.push("helping support $his tiny lover so _he2 can fuck $him properly.")>> - <<else>> - <<set $hostage.counter.oral += 15>> - <<set $hostage.counter.vaginal += 25>> - <<set $hostage.counter.anal += 25>> - <<set _hostageAction.push("basking in the afterglow with $his tiny love seated in $his lap.")>> - <<set _hostageAction.push("whispering something sexy into $his tiny lover's ear.")>> - <<set _hostageAction.push("hugging $his tiny lover tight as _he2 fucks $him as deep as _he2 can.")>> - <</if>> - <<default>> - <<if $rivalryDuration <= 5>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set _hostageAction.push("refusing to believe what happens to slaves who don't fit into your arcology's Revivalist culture.")>> - <<set _hostageAction.push("refusing to believe a video of your arcology's Revivalist public events is real.")>> - <<set _hostageAction.push("refusing to socialize with other slaves.")>> - <<elseif $rivalryDuration <= 10>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("reluctantly reading a report on what happens to slaves who don't fit into your arcology's Revivalist culture.")>> - <<set _hostageAction.push("questioning the validity of a video of your arcology's Revivalist public events.")>> - <<set _hostageAction.push("reluctantly spending time in $his arcology's modern public spaces.")>> - <<elseif $rivalryDuration <= 15>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.fetishStrength += 5>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("gasping at a report on what happens to slaves who don't fit into your arcology's Revivalist culture.")>> - <<set _hostageAction.push("gasping at the absurdity of a video of your arcology's Revivalist public events.")>> - <<set _hostageAction.push("cautiously chatting with a group of slaves in $his arcology's modern public spaces.")>> - <<elseif $rivalryDuration <= 20>> - <<set $hostage.trust -= 5>> - <<set $hostage.devotion -= 5>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("crying over a report on what happens to slaves who don't fit into your arcology's Revivalist culture.")>> - <<set _hostageAction.push("shaking $his head in incomprehension at video of your arcology's Revivalist public events.")>> - <<set _hostageAction.push("happily chatting with a group of slaves in $his arcology's modern public spaces.")>> - <<else>> - <<set $hostage.counter.vaginal += 1>> - <<set _hostageAction.push("educating the public on what happens to slaves who don't fit into your arcology's Revivalist culture.")>> - <<set _hostageAction.push("laughing at the ridiculousness of a video of your arcology's Revivalist public events.")>> - <<set _hostageAction.push("chatting with a group of slaves and feeling right at home in $his arcology's modern public spaces.")>> - <</if>> - <</switch>> - <<= _hostageAction.random()>> -<</if>> -<</if>> - -<br><br> - -<<if $rivalGender == 2>> - <<set _hisR = "his">> - <<set _himR = "him">> - <<set _HeR = "He">> - <<set _HisR = capFirstChar(_hisR)>> -<<else>> - <<set _hisR = "her">> - <<set _himR = "her">> - <<set _HeR = "She">> - <<set _HisR = capFirstChar(_hisR)>> -<</if>> - -You remind yourself that success in this conflict will not be defined by the traditional measures of impending victory and defeat. The primary concern here is the weight of your holdings against those of your opponent. Improving your arcology's prosperity will move you closer to victory<<if $rivalSet == 1>>, and so will attacking the prosperity of your rival's neighboring arcology through economic means<</if>>. Of course, you can also take more direct action. - -<br><br> - -<<= capFirstChar($assistant.name)>> collates several options for directly attacking your rival. This is a corporate war, not a military one; your peers would not tolerate a direct attack on _himR. You must bankrupt your opponent so they are no longer able to hide within the physical and intangible fortress that is their arcology. Your rival <<if ($rivalOwner-$rivalryPower)/$arcologies[0].prosperity < 0.6>>is on their economic knees, putting them on the verge of defeat.<<elseif ($rivalOwner-$rivalryPower)/$arcologies[0].prosperity < 0.7>>is in a bad financial state, well on the way to final dissolution and defeat.<<elseif ($rivalOwner-$rivalryPower)/$arcologies[0].prosperity < 0.8>>has taken some hard corporate blows but is still standing.<<elseif ($rivalOwner-$rivalryPower)/$arcologies[0].prosperity < 0.9>>is starting to feel the pressure.<<else>>is essentially undamaged; you have hard work ahead of you.<</if>> - -<br><br> - -<span id="result"> -<<link "Apply <<print cashFormat(10000)>> in standard corporate warfare">> - <<if random(1,100) > 50>> - <<replace "#result">> - Money is your infantry, your weapon, your ammunition in one. Last century, your soldiers would have died taking the enemy's positions. Today, your ¤ die @@.green;taking@@ _hisR holdings. Once more unto the breach. - <<run cashX(-10000, "war")>> - <<set $rivalryPower += 2>> - <</replace>> - <<else>> - <<replace "#result">> - Money is your infantry, your weapon, your ammunition in one. Last century, your soldiers would have died before the enemy's machine guns. Today, your ¤ die @@.red;failing to take@@ _hisR holdings. Once more unto the breach. - <<run cashX(-10000, "war")>> - <<set $rivalryPower += 1>> - <</replace>> - <</if>> -<</link>> -<br><<link "Spend <<print cashFormat(10000)>> funding sabotage">> - <<if random(1,100) > 70>> - <<replace "#result">> - Since you are not so uncouth as to, for example, help fund a coup attempt, you fund traditional acts of corporate sabotage, including hacking, slander, and actual, physical thievery. There are some @@.red;minor rumors@@ that you are to blame, but they're outweighed by the @@.green;great pressure@@ these incidents put on your enemy. - <<run cashX(-10000, "war")>> - <<run repX(-100, "war")>> - <<set $rivalryPower += 5>> - <</replace>> - <<else>> - <<replace "#result">> - Since you are not so uncouth as to, for example, help fund a coup attempt, you fund traditional acts of corporate sabotage, including hacking, slander, and actual, physical thievery. Unfortunately, you seem to be a step behind this week. Your enemy @@.red;prevents@@ many of your attacks, and even manages to turn a few minor players into public confessions that @@.red;damage@@ your reputation. - <<run cashX(-10000, "war")>> - <<run repX(-500, "war")>> - <<set $rivalryPower += 2>> - <</replace>> - <</if>> -<</link>> -<br><<link "Use <<print cashFormat(25000)>> creating local shortages">> - <<replace "#result">> - With enough money, it's entirely possible to temporarily overwhelm even the advanced free market of the Free Cities. You choose a few critical items — pharmaceutical materials, electronic components, and other physical items — and purchase shipments intended for your rival's arcology. _HisR tenants are @@.green;seriously inconvenienced@@ and blame their difficulties on their hapless landlord. - <<run cashX(-25000, "war")>> - <<set $rivalryPower += 3>> - <</replace>> -<</link>> -<br><<link "Devote <<print cashFormat(50000)>> to purchasing the support of your peers">> - <<replace "#result">> - Your fellow arcology owners have an interest in seeing the funder of the Daughters' attempt on you destroyed, but few of them are willing to spend any money or real effort on the matter. You do a few of them the favor of making the money and effort spent yours. Your rival finds _hisR dealings with your mutual peers becoming @@.green;strangely difficult.@@ Market opinion is swinging your way. - <<run cashX(-50000, "war")>> - <<set $rivalryPower += 5>> - <</replace>> -<</link>> -<<if $arcologies[0].FSRestartDecoration == 100>> - <<if $rep >= 15000>> - <br><<link "Use your connections to throttle your rival's arcology">> - <<replace "#result">> - With every external, and several internal, supply lines severed, _hisR tenants are faced with imminent destruction and @@.green;rise up@@ against their hapless landlord. _HeR will not be able to weather such a siege for long. - <<set $rivalryPower += 10>> - <</replace>> - <</link>> //This option is available due to your @@.springgreen;societal connections,@@ and will economically devastate your rival// - <</if>> -<</if>> -<<if ($PC.career == "mercenary") || ($PC.career == "arcology owner")>> - <<if $mercenaries >= 3>> - <br><<link "Your peers will tolerate an attack if it's covert">> - <<replace "#result">> - One night, you're working late in your office, $assistant.name's avatar glowing companionably beside you. Without preamble, _heA reports to you in _hisA normal tones, "Team One reports - <<switch $rivalryFS>> - <<case "Racial Subjugationism">>Racemixer - <<case "Racial Supremacism">>Miscegenator - <<case "Repopulation Focus">>Sterilizer - <<case "Eugenics">>Breeder - <<case "Gender Radicalism">>Handholder - <<case "Gender Fundamentalism">>Sodomite - <<case "Paternalism">>Lucifer - <<case "Degradationism">>Archangel Prime - <<case "Body Purism">>Plastic Surgeon - <<case "Transformation Fetishism">>Purist One - <<case "Youth Preferentialism">>Cake Eater - <<case "Maturity Preferentialism">>Epheb - <<case "Slimness Enthusiasm">>Grower - <<case "Asset Expansionism">>Flat Lover - <<case "Pastoralism">>Gym Rat - <<case "Physical Idealism">>Feeder - <<case "Hedonistic Decadence">>Gym Rat - <<case "Chattel Religionism">>Cultural Marxist - <<case "Multiculturalism">>Prophet - <<case "Intellectual Dependency">>Teacher - <<case "Slave Professionalism">>Brain Drainer - <<case "Petite Admiration">>Macrophile - <<case "Statuesque Glorification">>Midget Muncher - <<default>>Target One - <</switch>> - EKIA. Confirm, E. K. I. A. No other casualties, team exfiltrating." - <<set $rivalOwner = 0, $rivalryPower = 0>> - <<if $rivalSet != 0>> - <<for _pra = 0; _pra < $arcologies.length; _pra++>> - <<if $arcologies[_pra].rival == 1>> - <<set $arcologies[_pra].embargo = 0>> - <<set $arcologies[_pra].embargoTarget = -1>> - <<set $arcologies[_pra].influenceTarget = -1>> - <<set $arcologies[_pra].rival = 0>> - <<set $arcologies[_pra].government = "direct democracy">> - <<break>> - <</if>> - <</for>> - <</if>> - <<if $hostageAnnounced == 1>> - $assistant.name pauses. "Also confirm package is secure." - <<set $hostageRescued = 1>> - <</if>> - You go back to your work. - <</replace>> - <</link>> //This option is available due to your @@.springgreen;military background,@@ and will immediately end the conflict without enslaving your rival// - <</if>> -<</if>> - -<<if ($PC.skill.hacking >= 100)>> - <<if $mercenaries >= 3>> - <br><<link "Lock your rival down and let your mercs walk right in.">> - <<replace "#result">> - While you hold your rival's arcology's system under your complete control, $assistant.name finally reports to you in _hisA normal tones, "Team One reports - <<switch $rivalryFS>> - <<case "Racial Subjugationism">>Racemixer - <<case "Racial Supremacism">>Miscegenator - <<case "Repopulation Focus">>Sterilizer - <<case "Eugenics">>Breeder - <<case "Gender Radicalism">>Handholder - <<case "Gender Fundamentalism">>Sodomite - <<case "Paternalism">>Lucifer - <<case "Degradationism">>Archangel Prime - <<case "Body Purism">>Plastic Surgeon - <<case "Transformation Fetishism">>Purist One - <<case "Youth Preferentialism">>Cake Eater - <<case "Maturity Preferentialism">>Epheb - <<case "Slimness Enthusiasm">>Grower - <<case "Asset Expansionism">>Flat Lover - <<case "Pastoralism">>Gym Rat - <<case "Physical Idealism">>Feeder - <<case "Hedonistic Decadence">>Gym Rat - <<case "Chattel Religionism">>Cultural Marxist - <<case "Multiculturalism">>Prophet - <<case "Intellectual Dependency">>Teacher - <<case "Slave Professionalism">>Brain Drainer - <<case "Petite Admiration">>Macrophile - <<case "Statuesque Glorification">>Midget Muncher - <<default>>Target One - <</switch>> - <<if random(0,100) > 50>> - Bagged and tagged. Confirm, bagged and tagged. No - <<set _rivalCaptured = 1>> - <<else>> - EKIA. Confirm, E. K. I. A. No other - <<set $rivalOwner = 0>> - <</if>> - casualties, team exfiltrating." - <<set $rivalryPower = 0>> - <<if $rivalSet != 0>> - <<for _pra = 0; _pra < $arcologies.length; _pra++>> - <<if $arcologies[_pra].rival == 1>> - <<set $arcologies[_pra].embargo = 0>> - <<set $arcologies[_pra].embargoTarget = -1>> - <<set $arcologies[_pra].influenceTarget = -1>> - <<set $arcologies[_pra].rival = 0>> - <<set $arcologies[_pra].government = "direct democracy">> - <<if _rivalCaptured == 1 && $arcologies[_pra].FSSupremacist > 20>> - <<set $rivalRace = $arcologies[_pra].FSSupremacistRace>> - <<elseif _rivalCaptured == 1 && $arcologies[_pra].FSSubjugationist > 20>> - <<set $rivalRace = Array.from(setup.filterRaces.keys()).filter(race => race !== $arcologies[_pra].FSSubjugationistRace)>> - <</if>> - <<break>> - <</if>> - <</for>> - <</if>> - <<if $hostageAnnounced == 1>> - $assistant.name pauses. "Also confirm package is secure." - <<set $hostageRescued = 1>> - <</if>> - Smirking to yourself at a job well done, you - <<if _rivalCaptured != 1>> - return to your usual work. - <<else>> - await the bastard's arrival. - <br><br> - <<includeDOM pRivalryCapture()>> - <</if>> - <</replace>> - <</link>> //This option is available due to your @@.springgreen;your hacking mastery,@@ and will immediately end the conflict with a chance of enslaving your rival// - <</if>> -<</if>> -</span> diff --git a/src/events/story/pRivalryVictory.js b/src/events/story/pRivalryVictory.js new file mode 100644 index 0000000000000000000000000000000000000000..b47499f2ead484b131a67e5db2f959d7a43074a1 --- /dev/null +++ b/src/events/story/pRivalryVictory.js @@ -0,0 +1,151 @@ +App.Events.pRivalryVictory = function() { + return execute(); + + function execute() { + const node = new DocumentFragment(); + const { + HisR, HeR, + hisR, heR + } = getPronouns({pronoun: (V.rivalGender === 2) ? 1 : 0}).appendSuffix("R"); + V.nextButton = " "; // hide button until user makes a selection + V.rivalOwner = 0; + V.rivalryPower = 0; + V.rivalRace = 0; + const rivalArc = V.arcologies.find(a => a.rival === 1); + + App.Events.addParagraph(node, [`For the first time, you receive a direct call from your rival. You pictured the moment as feeling grander than this, sitting at your desk as usual looking into ${hisR} downcast face. You're the victor in a new form of warfare in which bankruptcy has replaced surrender. If the world survives in its present state, you may one day be remembered as an innovator in the evolution of (nearly) bloodless war. Today, your reputation has <span class="green">greatly improved.</span> But today all you have that's tangible is a view of a still-dignified arcology owner, self-possessed despite the situation.`]); + + App.UI.DOM.appendNewElement("p", node, `"For what it's worth," ${heR} says without preamble, "I had nothing against you. The Daughters wouldn't accept a straight buy-off. Their leadership needed a target to attack, or the rank and file would have killed them themselves and gone ahead attacking me. I had to give them an alternative, or it would have been me." ${HeR} looks nervous for the first time. "So, what do we do now? I've still got enough resources to make the end of this story a messy one for you. Let me go, and I won't. I'll walk away, and I'll sign everything I've got left over to you.${(V.hostageAnnounced === 1 && V.hostage) ? ` Including ${V.hostage.slaveName}, of course.` : ``}`); + + const result = App.UI.DOM.appendNewElement("div", node); + + App.UI.DOM.appendNewElement("div", result, App.UI.DOM.link( + `Accept`, + () => { + const el = new DocumentFragment(); + const r = []; + unlockContinue(); + r.push(`You accept, magnanimous in victory. "I don't think I would have done that," your rival replies. "Thank you. When they write the book, I'll make sure you look good."`); + if (V.rivalSet !== 0) { + r.push(`${HisR} remaining liquid assets will go to satisfy ${hisR} great debts, but ${hisR} <span class="yellowgreen">arcology holdings are yours.</span>`); + if (rivalArc) { + updateArc(); + rivalArc.PCminority += rivalArc.ownership; + rivalArc.PCminority = Math.clamp(rivalArc.PCminority, 0, 49); + } + if (V.hostageAnnounced === 1) { + V.hostageRescued = 1; + } + } else { + r.push(`${HisR} arcology will go to satisfy ${hisR} great debts, but you will still profit <span class="yellowgreen">immensely</span> from your victory${(V.hostageAnnounced === 1 && V.hostage) ? `, and acquire ${V.hostage.slaveName} as a slave` : ``}.`); + cashX(random(100000, 250000), "war"); + } + App.Events.addNode(el, r, "div"); + jQuery(result).empty().append(el); + } + )); + + App.UI.DOM.appendNewElement("div", result, App.UI.DOM.link( + `Refuse`, + () => { + const el = new DocumentFragment(); + const r = []; + unlockContinue(); + r.push(`You coldly decline. "That was a mistake," your rival replies, entering a computer command.`); + if (V.rivalSet !== 0) { + r.push(`"All my remaining liquid assets have just been <span class="red">carefully dispersed to deny you control of my arcology.</span> You'll get nothing from me." It's true. The financial self-destruction ensures that the fiscal wreckage goes to the arcology's citizens, not you.`); + if (rivalArc) { + updateArc(); + } + if (V.hostageAnnounced === 1) { + r.push(hostageBounty()); + } + } else { + r.push(`"All my remaining liquid assets have just been <span class="red">expended in an attack on the value of your holdings,</span> and my arcology has been heavily sabotaged. You'll get nothing from me." It's not entirely true, but the damage to your holdings does outweigh your gains by a significant margin. Your rival vanishes back into the old world.`); + cashX(random(-10000, -25000), "war"); + } + App.Events.addNode(el, r, "div"); + jQuery(result).empty().append(el); + } + )); + if (V.rivalryDuration >= 30 && V.hostageAnnounced === 0 && V.rivalSet !== 0) { + App.UI.DOM.appendNewElement("div", result, App.UI.DOM.link( + `Refuse, and place a bounty of ${cashFormat(50000)} on your rival's death`, + () => { + const el = new DocumentFragment(); + const r = []; + unlockContinue(); + App.UI.DOM.appendNewElement("p", el, `You coldly decline. "That was a mistake," your rival replies, entering a computer command. "All my remaining liquid assets have just been <span class="red">expended in an attack on the value of your holdings,</span> and my arcology has been heavily sabotaged. You'll get nothing from me." It's not entirely true, but the damage to your holdings does outweigh your gains by a significant margin. Your rival vanishes back into the old world — but only for a few days.`); + App.UI.DOM.appendNewElement("p", el, `Your bounty is quickly claimed, and you are treated to the delicious moment of finding your rival's head delivered to your doorstep. It might not have done much good, but damn did it feel good.`); + cashX(-50000, "war"); + if (rivalArc) { + updateArc(); + } + App.Events.addNode(el, r, "div"); + jQuery(result).empty().append(el); + } + )); + } + App.UI.DOM.appendNewElement("div", result, App.UI.DOM.link( + `Refuse, and place a bounty of ${cashFormat(50000)} on your rival's enslavement`, + () => { + const el = new DocumentFragment(); + const r = []; + unlockContinue(); + r.push(`You coldly decline. "That was a mistake," your rival replies, entering a computer command.`); + if (V.rivalSet !== 0) { + r.push(`"All my remaining liquid assets have just been <span class="red">carefully dispersed to deny you control of my arcology.</span> You'll get nothing from me." It's true.The financial self - destruction ensures that the fiscal wreckage goes to the arcology's citizens, not you.`); + if (rivalArc) { + updateArc(); + if (rivalArc.FSSupremacist > 20) { + V.rivalRace = rivalArc.FSSupremacistRace; + } else if (rivalArc.FSSubjugationist > 20) { + V.rivalRace = Array.from(setup.filterRaces.keys()).filter(race => race !== rivalArc.FSSubjugationistRace).random(); + } + } + if (V.hostageAnnounced === 1) { + r.push(hostageBounty()); + } + } else { + r.push(`"All my remaining liquid assets have just been <span class="red">expended in an attack on the value of your holdings,</span> and my arcology has been heavily sabotaged. You'll get nothing from me." It's not entirely true, but the damage to your holdings does outweigh your gains by a significant margin.`); + cashX(random(-10000, -25000), "war"); + } + cashX(-50000, "war"); + r.push(pRivalryCapture()); + App.Events.addNode(el, r, "div"); + jQuery(result).empty().append(el); + } + )); + + return node; + + function hostageBounty() { + const result2 = App.UI.DOM.makeElement("p"); + App.UI.DOM.appendNewElement("div", result2, App.UI.DOM.link( + `Place a bounty of ${cashFormat(10000)} on your rival's psychological warfare tool`, + () => { + if (V.hostage) { + const {He} = getPronouns(V.hostage); + jQuery(result2).empty().append(`You make sure to post a bounty sufficient to ensure that ${V.hostage.slaveName}, your rival's psychological warfare tool, does not escape or go unrescued, depending on one's point of view. ${He} is quickly picked out of the chaos of your rival's escape and delivered to you.`); + V.hostageRescued = 1; + cashX(-10000, "war"); + } + } + )); + return result2; + } + + function unlockContinue() { + V.nextButton = "Continue"; + App.Utils.updateUserButton(); + } + + function updateArc() { + rivalArc.embargo = 0; + rivalArc.embargoTarget = -1; + rivalArc.influenceTarget = -1; + rivalArc.rival = 0; + rivalArc.government = "direct democracy"; + } + } +}; diff --git a/src/events/story/pRivalryVictory.tw b/src/events/story/pRivalryVictory.tw deleted file mode 100644 index dfa4c946a9bb207eafb66cdef9d96efaf3268bad..0000000000000000000000000000000000000000 --- a/src/events/story/pRivalryVictory.tw +++ /dev/null @@ -1,150 +0,0 @@ -:: P rivalry victory [nobr] - -<<set $nextButton = " ", $nextLink = "Random Nonindividual Event", $rivalOwner = 0, $rivalryPower = 0>> /* hide button until user makes a selection */ -<<set $rivalRace = 0>> -<<if $rivalGender == 2>> - <<set _heR = "he">> - <<set _hisR = "his">> - <<set _HeR = capFirstChar(_heR)>> - <<set _HisR = capFirstChar(_hisR)>> -<<else>> - <<set _heR = "she">> - <<set _hisR = "her">> - <<set _HeR = capFirstChar(_heR)>> - <<set _HisR = capFirstChar(_hisR)>> -<</if>> - - -For the first time, you receive a direct call from your rival. You pictured the moment as feeling grander than this, sitting at your desk as usual looking into _hisR downcast face. You're the victor in a new form of warfare in which bankruptcy has replaced surrender. If the world survives in its present state, you may one day be remembered as an innovator in the evolution of (nearly) bloodless war. Today, your reputation has @@.green;greatly improved.@@ But today all you have that's tangible is a view of a still-dignified arcology owner, self-possessed despite the situation. - -<br><br> - -"For what it's worth," _heR says without preamble, "I had nothing against you. The Daughters wouldn't accept a straight buy-off. Their leadership needed a target to attack, or the rank and file would have killed them themselves and gone ahead attacking me. I had to give them an alternative, or it would have been me." _HeR looks nervous for the first time. "So, what do we do now? I've still got enough resources to make the end of this story a messy one for you. Let me go, and I won't. I'll walk away, and I'll sign everything I've got left over to you.<<if $hostageAnnounced == 1>> Including $hostage.slaveName, of course.<</if>>" - -<br><br> - -<span id="result"> -<<link "Accept">> - <<set $nextButton = "Continue">><<run App.Utils.updateUserButton()>> /* unlock Continue button */ - <<replace "#result">> - You accept, magnanimous in victory. "I don't think I would have done that," your rival replies. "Thank you. When they write the book, I'll make sure you look good." - <<if $rivalSet != 0>> - _HisR remaining liquid assets will go to satisfy _hisR great debts, but _hisR @@.yellowgreen;arcology holdings are yours.@@ - <<for _prv = 0; _prv < $arcologies.length; _prv++>> - <<if $arcologies[_prv].rival == 1>> - <<set $arcologies[_prv].embargo = 0>> - <<set $arcologies[_prv].embargoTarget = -1>> - <<set $arcologies[_prv].influenceTarget = -1>> - <<set $arcologies[_prv].rival = 0>> - <<set $arcologies[_prv].government = "direct democracy">> - <<set $arcologies[_prv].PCminority += $arcologies[_prv].ownership>> - <<set $arcologies[_prv].PCminority = Math.clamp($arcologies[_prv].PCminority, 0, 49)>> - <<break>> - <</if>> - <</for>> - <<if $hostageAnnounced == 1>><<set $hostageRescued = 1>><</if>> - <<else>> - _HisR arcology will go to satisfy _hisR great debts, but you will still profit @@.yellowgreen;immensely@@ from your victory<<if $hostageAnnounced == 1>>, and acquire $hostage.slaveName as a slave<</if>>. - <<run cashX(random(100000,250000), "war")>> - <</if>> - <</replace>> -<</link>> -<br><<link "Refuse">> - <<set $nextButton = "Continue">><<run App.Utils.updateUserButton()>> /* unlock Continue button */ - <<replace "#result">> - You coldly decline. "That was a mistake," your rival replies, entering a computer command. - <<if $rivalSet != 0>> - "All my remaining liquid assets have just been @@.red;carefully dispersed to deny you control of my arcology.@@ You'll get nothing from me." It's true. The financial self-destruction ensures that the fiscal wreckage goes to the arcology's citizens, not you. - <<for _prv = 0; _prv < $arcologies.length; _prv++>> - <<if $arcologies[_prv].rival == 1>> - <<set $arcologies[_prv].embargo = 0>> - <<set $arcologies[_prv].embargoTarget = -1>> - <<set $arcologies[_prv].influenceTarget = -1>> - <<set $arcologies[_prv].rival = 0>> - <<set $arcologies[_prv].government = "direct democracy">> - <<break>> - <</if>> - <</for>> - <<if $hostageAnnounced == 1>> - <br><br> - <span id="result2"> - <br><<link "Place a bounty of <<print cashFormat(10000)>> on your rival's psychological warfare tool">> - <<replace "#result2">> - <<run cashX(-10000, "war")>> - <<setLocalPronouns $hostage>> - You make sure to post a bounty sufficient to ensure that $hostage.slaveName, your rival's psychological warfare tool, does not escape or go unrescued, depending on one's point of view. $He is quickly picked out of the chaos of your rival's escape and delivered to you. - <<set $hostageRescued = 1>> - <</replace>> - <</link>> - </span> - <</if>> - <<else>> - "All my remaining liquid assets have just been @@.red;expended in an attack on the value of your holdings,@@ and my arcology has been heavily sabotaged. You'll get nothing from me." It's not entirely true, but the damage to your holdings does outweigh your gains by a significant margin. Your rival vanishes back into the old world. - <<run cashX(random(-10000,-25000), "war")>> - <</if>> - <</replace>> -<</link>> -<<if $rivalryDuration >= 30 && $hostageAnnounced == 0 && $rivalSet != 0>> - <br><<link "Refuse, and place a bounty of <<print cashFormat(50000)>> on your rival's death">> - <<set $nextButton = "Continue">><<run App.Utils.updateUserButton()>> /* unlock Continue button */ - <<replace "#result">> - You coldly decline. "That was a mistake," your rival replies, entering a computer command. "All my remaining liquid assets have just been @@.red;expended in an attack on the value of your holdings,@@ and my arcology has been heavily sabotaged. You'll get nothing from me." It's not entirely true, but the damage to your holdings does outweigh your gains by a significant margin. Your rival vanishes back into the old world — but only for a few days. - <br><br> - Your bounty is quickly claimed, and you are treated to the delicious moment of finding your rival's head delivered to your doorstep. It might not have done much good, but damn did it feel good. - <<run cashX(-50000, "war")>> - <<for _prv = 0; _prv < $arcologies.length; _prv++>> - <<if $arcologies[_prv].rival == 1>> - <<set $arcologies[_prv].embargo = 0>> - <<set $arcologies[_prv].embargoTarget = -1>> - <<set $arcologies[_prv].influenceTarget = -1>> - <<set $arcologies[_prv].rival = 0>> - <<set $arcologies[_prv].government = "direct democracy">> - <<break>> - <</if>> - <</for>> - <</replace>> - <</link>> -<</if>> -<br><<link "Refuse, and place a bounty of <<print cashFormat(50000)>> on your rival's enslavement">> - <<set $nextButton = "Continue">><<run App.Utils.updateUserButton()>> /* unlock Continue button */ - <<replace "#result">> - You coldly decline. "That was a mistake," your rival replies, entering a computer command. - <<if $rivalSet != 0>> - "All my remaining liquid assets have just been @@.red;carefully dispersed to deny you control of my arcology.@@ You'll get nothing from me." It's true. The financial self-destruction ensures that the fiscal wreckage goes to the arcology's citizens, not you. - <<for _prv = 0; _prv < $arcologies.length; _prv++>> - <<if $arcologies[_prv].rival == 1>> - <<set $arcologies[_prv].embargo = 0>> - <<set $arcologies[_prv].embargoTarget = -1>> - <<set $arcologies[_prv].influenceTarget = -1>> - <<set $arcologies[_prv].rival = 0>> - <<set $arcologies[_prv].government = "direct democracy">> - <<if $arcologies[_prv].FSSupremacist > 20>> - <<set $rivalRace = $arcologies[_prv].FSSupremacistRace>> - <<elseif $arcologies[_prv].FSSubjugationist > 20>> - <<set $rivalRace = Array.from(setup.filterRaces.keys()).filter(race => race !== $arcologies[_prv].FSSubjugationistRace)>> - <</if>> - <<break>> - <</if>> - <</for>> - <<if $hostageAnnounced == 1>> - <br><br> - <span id="result2"> - <br><<link "Place a bounty of <<print cashFormat(10000)>> on your rival's psychological warfare tool">> - <<replace "#result2">> - <<run cashX(-10000, "war")>> - <<setLocalPronouns $hostage>> - You make sure to post a bounty sufficient to ensure that $hostage.slaveName, your rival's psychological warfare tool, does not escape or go unrescued, depending on one's point of view. $He is quickly picked out of the chaos of your rival's escape and delivered to you. - <<set $hostageRescued = 1>> - <</replace>> - <</link>> - </span> - <</if>> - <<else>> - "All my remaining liquid assets have just been @@.red;expended in an attack on the value of your holdings,@@ and my arcology has been heavily sabotaged. You'll get nothing from me." It's not entirely true, but the damage to your holdings does outweigh your gains by a significant margin. - <<run cashX(random(-10000,-25000), "war")>> - <</if>> - <<run cashX(-50000, "war")>> - <<includeDOM pRivalryCapture()>> - <</replace>> -<</link>> -</span> diff --git a/src/facilities/incubator/incubatorFramework.js b/src/facilities/incubator/incubatorFramework.js index da746eeacd68b383c446a86e883057c1620ff5d2..22d9d4bae2006f146dd16321fd9f202ea6aa6669 100644 --- a/src/facilities/incubator/incubatorFramework.js +++ b/src/facilities/incubator/incubatorFramework.js @@ -19,7 +19,7 @@ App.Entity.Facilities.IncubatorTankJob = class extends App.Entity.Facilities.Job * @returns {App.Entity.SlaveState[]} */ employees() { - return V.tanks; + return V.incubator.tanks; } /** @override */ diff --git a/src/facilities/incubator/incubatorInteract.js b/src/facilities/incubator/incubatorInteract.js index 55c5d60d8ccf504f534a2dafa64afb4ef5824c03..fcca66f3cf5a99ca732a01bad75bb0ba65feafc3 100644 --- a/src/facilities/incubator/incubatorInteract.js +++ b/src/facilities/incubator/incubatorInteract.js @@ -3,13 +3,14 @@ App.UI.incubator = function() { V.nextLink = "Main"; V.returnTo = "Incubator"; V.encyclopedia = "The Incubation Facility"; - V.readySlaves = 0; + V.incubator.readySlaves = 0; V.readySlave = 0; + const tankMultiplier = [1, 5, 10, 20, 100, 500]; const el = new DocumentFragment(); - const _SL = V.slaves.length; + const SL = V.slaves.length; let childrenReserved; - const _incubatorNameCaps = capFirstChar(V.incubatorName); + const incubatorNameCaps = capFirstChar(V.incubator.name); App.UI.tabBar.handlePreSelectedTab(V.tabChoice.Incubator); const tabCaptions = { @@ -44,10 +45,11 @@ App.UI.incubator = function() { function intro() { const el = document.createElement("p"); - let r = []; - const incubatorSlaves = V.tanks.length; - const freeTanks = V.incubator - incubatorSlaves; - r.push(`${_incubatorNameCaps} is a clean, cold hall designed to be lined with tanks and their connected monitoring systems.`); + let r = [], tankBulkOptions = [], price; + const incubatorSlaves = V.incubator.tanks.length; + const freeTanks = V.incubator.capacity - incubatorSlaves; + const reservedChildren = FetusGlobalReserveCount("incubator"); + r.push(`${incubatorNameCaps} is a clean, cold hall designed to be lined with tanks and their connected monitoring systems.`); if (incubatorSlaves > 2) { r.push(`It's well used. The hum of active tanks fills the air.`); @@ -59,17 +61,7 @@ App.UI.incubator = function() { choice( "Decommission the incubator", () => { - V.incubator = 0; - V.incubatorUpgradeSpeed = 5; - V.incubatorUpgradeWeight = 0; - V.incubatorUpgradeMuscles = 0; - V.incubatorUpgradeReproduction = 0; - V.incubatorUpgradeGrowthStims = 0; - V.incubatorWeightSetting = 0; - V.incubatorMusclesSetting = 0; - V.incubatorReproductionSetting = 0; - V.incubatorGrowthStimsSetting = 0; - V.tanks = []; + App.Facilities.Incubator.init('base'); }, "Main" ) @@ -78,26 +70,53 @@ App.UI.incubator = function() { App.Events.addNode(el, r, "p"); r = []; - r.push(`It can support ${V.incubator}`); + r.push(`It can support ${V.incubator.capacity} child${(V.incubator.capacity > 1) ? "ren" : ""} as they age.`); if (incubatorSlaves === 1) { - r.push(`child. There is currently ${incubatorSlaves} tank`); + r.push(`There is currently 1 tank`); } else { - r.push(`children. There are currently ${incubatorSlaves} tanks`); + r.push(`There are currently ${incubatorSlaves} tanks`); } - r.push(`in use in ${V.incubatorName}.`); + r.push(`in use in ${V.incubator.name}.`); App.Events.addNode(el, r, "div"); - el.append( - choice( - `Add another incubation tank`, - () => { - cashX(forceNeg(Math.trunc(60000 * V.upgradeMultiplierArcology)), "capEx"); - V.incubator += 1; - }, - "Incubator", - `Costs ${cashFormat(Math.trunc(60000 * V.upgradeMultiplierArcology))} and will increase upkeep costs` - ) - ); + for (const multiplier of tankMultiplier) { + price = Math.trunc((60000 * multiplier) * V.upgradeMultiplierArcology); + tankBulkOptions.push( + App.UI.DOM.link( + `x${multiplier}`, + () => { + cashX(-price, "capEx"); + V.incubator.capacity += multiplier; + }, + [], passage() + ) + ); + } + price = Math.trunc(60000 * V.upgradeMultiplierArcology); + App.UI.DOM.appendNewElement("div", el, `Adding a tank costs ${cashFormat(price)} and will increase upkeep. `).append(App.UI.DOM.generateLinksStrip(tankBulkOptions)); + + const empty = freeTanks - reservedChildren; + if (empty > 0) { + tankBulkOptions = []; + for (const multiplier of tankMultiplier) { + price = Math.trunc((10000 * multiplier) * V.upgradeMultiplierArcology); + if (empty >= multiplier && V.incubator.capacity - multiplier > 0) { + tankBulkOptions.push( + App.UI.DOM.link( + `x${multiplier}`, + () => { + cashX(-price, "capEx"); + V.incubator.capacity -= multiplier; + }, + [], passage() + ) + ); + } + } + price = Math.trunc(10000 * V.upgradeMultiplierArcology); + App.UI.DOM.appendNewElement("div", el, `Currently ${empty} tanks are empty.${(V.incubator.capacity !== 1) ? ` Removing a tank costs ${cashFormat(price)} and will reduce upkeep.` : ``} `).append(App.UI.DOM.generateLinksStrip(tankBulkOptions)); + } + if (freeTanks === 0) { el.append(`All of the tanks are currently occupied by growing children.`); } @@ -111,9 +130,9 @@ App.UI.incubator = function() { let eligibility = 0; let linkArray; const reservedChildren = FetusGlobalReserveCount("incubator"); - const incubatorSlaves = V.tanks.length; - const freeTanks = V.incubator - incubatorSlaves; - r.push(`Reserve an eligible mother-to-be's child to be placed in a tank upon birth. Of ${V.incubator} tanks, ${freeTanks}`); + const incubatorSlaves = V.incubator.tanks.length; + const freeTanks = V.incubator.capacity - incubatorSlaves; + r.push(`Reserve an eligible mother-to-be's child to be placed in a tank upon birth. Of ${V.incubator.capacity} tanks, ${freeTanks}`); if (freeTanks === 1) { r.push(`is`); } else { @@ -131,7 +150,7 @@ App.UI.incubator = function() { ** With hundreds of slaves, navigating the Incubator room was giving me as much of a headache as other lists. ** So, I borrowed the sorting list and dropped a few options here. */ - if (0 < _SL) { + if (0 < SL) { const sortingBar = document.createElement("div"); sortingBar.id = "sorting-bar"; sortingBar.classList.add("incubator-underscore"); @@ -158,21 +177,21 @@ App.UI.incubator = function() { const r = []; if ((slave.assignment === "work in the dairy" && V.dairyPregSetting > 0) || slave.assignment === "be your agent" || slave.assignment === "live with your agent") { } else { - const freeTanks = V.incubator - incubatorSlaves; - const _slaveId = "slave-" + slave.ID; - const _WL = slave.womb.length; - const _reservedIncubator = WombReserveCount(slave, "incubator"); - const _reservedNursery = WombReserveCount(slave, "nursery"); - const _pregWeek = slave.pregWeek; - const _slaveName = SlaveFullName(slave); + const freeTanks = V.incubator.capacity - incubatorSlaves; + const slaveId = "slave-" + slave.ID; + const WL = slave.womb.length; + const reservedIncubator = WombReserveCount(slave, "incubator"); + const reservedNursery = WombReserveCount(slave, "nursery"); + const pregWeek = slave.pregWeek; + const slaveName = SlaveFullName(slave); const momEl = document.createElement("p"); - momEl.id = _slaveId; + momEl.id = slaveId; momEl.classList.add("possible"); momEl.setAttribute("data-preg-count", slave.womb.length.toString()); - momEl.setAttribute("data-reserved-spots", _reservedIncubator.toString()); - momEl.setAttribute("data-preg-week", _pregWeek.toString()); - momEl.setAttribute("data-name", _slaveName); + momEl.setAttribute("data-reserved-spots", reservedIncubator.toString()); + momEl.setAttribute("data-preg-week", pregWeek.toString()); + momEl.setAttribute("data-name", slaveName); linkArray = []; const choices = document.createElement("div"); @@ -203,23 +222,24 @@ App.UI.incubator = function() { r.push(`${father.slaveName}'s`); } } - if (_WL > 1) { - r.push(`${_WL} babies.`); + if (WL > 1) { + r.push(`${WL} babies.`); } else { r.push(`baby.`); } - if (_reservedIncubator > 0) { + if (reservedIncubator > 0) { childrenReserved = 1; - if (_WL === 1) { - r.push(`${His} child will be placed in ${V.incubatorName}.`); - } else if (_reservedIncubator < _WL) { - r.push(`${_reservedIncubator} of ${his} children will be placed in ${V.incubatorName}.`); - } else if (_WL === 2) { - r.push(`Both of ${his} children will be placed in ${V.incubatorName}.`); + if (WL === 1) { + r.push(`${His} child `); + } else if (reservedIncubator < WL) { + r.push(`${reservedIncubator} of ${his} children .`); + } else if (WL === 2) { + r.push(`Both of ${his} children `); } else { - r.push(`All ${_reservedIncubator} of ${his} children will be placed in ${V.incubatorName}.`); + r.push(`All ${reservedIncubator} of ${his} children `); } - if ((_reservedIncubator + _reservedNursery < _WL) && (reservedChildren < freeTanks)) { + r.push(`will be placed in ${V.incubator.name}.`); + if ((reservedIncubator + reservedNursery < WL) && (reservedChildren < freeTanks)) { if (V.pregnancyMonitoringUpgrade === 1) { linkArray.push( App.UI.DOM.link( @@ -241,7 +261,7 @@ App.UI.incubator = function() { } ) ); - if (_reservedIncubator > 0) { + if (reservedIncubator > 0) { linkArray.push( App.UI.DOM.link( `Keep one less child`, @@ -252,7 +272,7 @@ App.UI.incubator = function() { ) ); } - if (_reservedIncubator > 1) { + if (reservedIncubator > 1) { linkArray.push( App.UI.DOM.link( `Keep none of ${his} children`, @@ -263,7 +283,7 @@ App.UI.incubator = function() { ) ); } - if ((reservedChildren + _WL - _reservedIncubator) <= freeTanks) { + if ((reservedChildren + WL - reservedIncubator) <= freeTanks) { linkArray.push( App.UI.DOM.link( `Keep the rest of ${his} children`, @@ -274,7 +294,7 @@ App.UI.incubator = function() { ) ); } - } else if ((_reservedIncubator === _WL) || (reservedChildren === freeTanks) || (_reservedIncubator + _reservedNursery === _WL)) { + } else if ((reservedIncubator === WL) || (reservedChildren === freeTanks) || (reservedIncubator + reservedNursery === WL)) { if (V.pregnancyMonitoringUpgrade === 1) { linkArray.push( App.UI.DOM.link( @@ -296,7 +316,7 @@ App.UI.incubator = function() { } ) ); - if (_reservedIncubator > 1) { + if (reservedIncubator > 1) { linkArray.push( App.UI.DOM.link( `Keep none of ${his} children`, @@ -309,7 +329,7 @@ App.UI.incubator = function() { } } } else if ((reservedChildren < freeTanks)) { - if (_WL - _reservedNursery === 0) { + if (WL - reservedNursery === 0) { r.push(App.UI.DOM.makeElement("span", `${His} children are already reserved for V.nurseryName`, "note")); if (V.pregnancyMonitoringUpgrade === 1) { linkArray.push( @@ -325,7 +345,7 @@ App.UI.incubator = function() { } linkArray.push( App.UI.DOM.link( - `Keep ${his} ${((_WL > 1) ? "children" : "child")} here instead`, + `Keep ${his} ${((WL > 1) ? "children" : "child")} here instead`, () => { WombChangeReserveType(slave, 'nursery', 'incubator'); refresh(); @@ -355,14 +375,14 @@ App.UI.incubator = function() { } linkArray.push( App.UI.DOM.link( - `Keep ${(_WL > 1) ? "a" : "the"} child`, + `Keep ${(WL > 1) ? "a" : "the"} child`, () => { WombAddToGenericReserve(slave, 'incubator', 1); refresh(); } ) ); - if ((_WL > 1) && (reservedChildren + _WL - _reservedIncubator) <= freeTanks) { + if ((WL > 1) && (reservedChildren + WL - reservedIncubator) <= freeTanks) { linkArray.push( App.UI.DOM.link( `Keep all of ${his} children`, @@ -407,8 +427,7 @@ App.UI.incubator = function() { App.UI.DOM.appendNewElement("div", el, `You have no pregnant slaves bearing eligible children.`, "note"); } - if (reservedChildren !== 0 || childrenReserved === 1) { - /* the oops I made it go negative somehow button */ + if (reservedChildren !== 0 || childrenReserved === 1) { // the oops I made it go negative somehow button App.UI.DOM.appendNewElement( "div", el, @@ -506,16 +525,16 @@ App.UI.incubator = function() { let r = []; let linkArray = []; const reservedChildren = FetusGlobalReserveCount("incubator"); - const incubatorSlaves = V.tanks.length; - const freeTanks = V.incubator - incubatorSlaves; - const _WL = V.PC.womb.length; - const _reservedIncubator = WombReserveCount(V.PC, "incubator"); - const _reservedNursery = WombReserveCount(V.PC, "nursery"); - r.push(App.UI.DOM.makeElement("span", `You're ${V.PC.pregWeek} ${(V.PC.pregWeek === 1) ? `week`: `weeks`} pregnant`, ["pink", "bold"])); - if (_WL === 1) { - r.push(`with a baby`); + const incubatorSlaves = V.incubator.tanks.length; + const freeTanks = V.incubator.capacity - incubatorSlaves; + const WL = V.PC.womb.length; + const reservedIncubator = WombReserveCount(V.PC, "incubator"); + const reservedNursery = WombReserveCount(V.PC, "nursery"); + r.push(App.UI.DOM.makeElement("span", `You're ${V.PC.pregWeek} ${(V.PC.pregWeek === 1) ? `week` : `weeks`} pregnant`, ["pink", "bold"])); + if (WL === 1) { + r.push(`with a baby.`); } else { - r.push(`with ${pregNumberName(_WL, 2)}`); + r.push(`with ${pregNumberName(WL, 2)}.`); } if (reservedChildren < freeTanks) { @@ -544,33 +563,33 @@ App.UI.incubator = function() { let choices = document.createElement("div"); choices.classList.add("choices"); - if (_reservedIncubator > 0) { + if (reservedIncubator > 0) { childrenReserved = 1; - if (_WL === 1) { - r.push(`Your child will be placed in ${V.incubatorName}.`); - } else if (_reservedIncubator < _WL) { - r.push(`${_reservedIncubator} of your children will be placed in ${V.incubatorName}.`); - } else if (_WL === 2) { - r.push(`Both of your children will be placed in ${V.incubatorName}.`); + if (WL === 1) { + r.push(`Your child `); + } else if (reservedIncubator < WL) { + r.push(`${reservedIncubator} of your children `); + } else if (WL === 2) { + r.push(`Both of your children `); } else { - r.push(`All ${_reservedIncubator} of your children will be placed in ${V.incubatorName}.`); + r.push(`All ${reservedIncubator} of your children `); } } App.Events.addNode(el, r, "div"); r = []; if (reservedChildren < freeTanks) { - if (_WL - _reservedNursery === 0) { + if (WL - reservedNursery=== 0) { r.push( App.UI.DOM.makeElement( "span", - `Your ${(_WL === 1) ? `child is` : `children are`} already reserved for ${V.nurseryName}`, + `Your ${(WL === 1) ? `child is` : `children are`} already reserved for ${V.nurseryName}`, "note" ) ); linkArray.push( App.UI.DOM.link( - `Keep your ${(_WL === 1) ? `child` : `children`} here instead`, + `Keep your ${(WL === 1) ? `child` : `children`} here instead`, () => { WombChangeReserveType(V.PC, 'nursery', 'incubator'); refresh(); @@ -580,7 +599,7 @@ App.UI.incubator = function() { } else { linkArray.push( App.UI.DOM.link( - `Keep ${(_WL > 1) ? `a` : `your`} child`, + `Keep ${(WL > 1) ? `a` : `your`} child`, () => { WombAddToGenericReserve(V.PC, 'incubator', 1); refresh(); @@ -588,8 +607,8 @@ App.UI.incubator = function() { ) ); - const availableChildren = reservedChildren + _WL - _reservedIncubator; - if (_WL > 1 && (availableChildren <= freeTanks)) { + const availableChildren = reservedChildren + WL - reservedIncubator; + if (WL > 1 && (availableChildren <= freeTanks)) { linkArray.push( App.UI.DOM.link( `Keep the rest of your children`, @@ -610,7 +629,7 @@ App.UI.incubator = function() { choices = document.createElement("div"); choices.classList.add("choices"); linkArray = []; - if (_reservedIncubator > 0) { + if (reservedIncubator > 0) { linkArray.push( App.UI.DOM.link( `Keep one less child`, @@ -621,7 +640,7 @@ App.UI.incubator = function() { ) ); } - if (_reservedIncubator > 1) { + if (reservedIncubator > 1) { linkArray.push( App.UI.DOM.link( `Keep none of your children`, @@ -650,9 +669,9 @@ App.UI.incubator = function() { let row; let linkArray; const reservedChildren = FetusGlobalReserveCount("incubator"); - const incubatorSlaves = V.tanks.length; + const incubatorSlaves = V.incubator.tanks.length; if (incubatorSlaves > 0) { - App.UI.DOM.appendNewElement("h2", el, `Children in ${V.incubatorName}`); + App.UI.DOM.appendNewElement("h2", el, `Children in ${V.incubator.name}`); for (let i = 0; i < incubatorSlaves; i++) { const p = document.createElement("p"); @@ -661,152 +680,152 @@ App.UI.incubator = function() { const { He, His, he, him, his - } = getPronouns(V.tanks[i]); - r.push(App.UI.DOM.makeElement("span", V.tanks[i].slaveName, "pink")); + } = getPronouns(V.incubator.tanks[i]); + r.push(App.UI.DOM.makeElement("span", V.incubator.tanks[i].slaveName, "pink")); r.push(`occupies this tank.`); if (V.geneticMappingUpgrade >= 1) { r.push(`${He} is a`); - if (V.tanks[i].genes === "XX") { + if (V.incubator.tanks[i].genes === "XX") { r.push(`female`); } else { r.push(`male`); } - r.push(`of ${V.tanks[i].race} descent with ${App.Desc.eyesColor(V.tanks[i])}, ${V.tanks[i].hColor} hair and ${V.tanks[i].skin} skin. Given ${his} parentage, ${he} is considered ${V.tanks[i].nationality}.`); + r.push(`of ${V.incubator.tanks[i].race} descent with ${App.Desc.eyesColor(V.incubator.tanks[i])}, ${V.incubator.tanks[i].hColor} hair and ${V.incubator.tanks[i].skin} skin. Given ${his} parentage, ${he} is considered ${V.incubator.tanks[i].nationality}.`); } else { r.push(`${He} appears to be`); - if (V.tanks[i].genes === "XX") { + if (V.incubator.tanks[i].genes === "XX") { r.push(`a natural girl,`); } else { r.push(`a natural boy,`); } - r.push(`with ${V.tanks[i].hColor}`); - if (getBestVision(V.tanks[i]) === 0) { - r.push(`hair and ${App.Desc.eyesColor(V.tanks[i])}.`); + r.push(`with ${V.incubator.tanks[i].hColor}`); + if (getBestVision(V.incubator.tanks[i]) === 0) { + r.push(`hair and ${App.Desc.eyesColor(V.incubator.tanks[i])}.`); } else { r.push(`hair. ${He} most likely will be blind.`); } } - if (V.tanks[i].preg > 0) { + if (V.incubator.tanks[i].preg > 0) { r.push(`<span class="red">Warning! Subject may be pregnant! Unanticipated growth may occur!</span>`); } - r.push(`Statistical projections indicates that once released ${he} will be around ${heightToEitherUnit(V.tanks[i].height + random(-5, 5))} tall. Most likely ${he} will be`); - if (V.tanks[i].weight <= 30 && V.tanks[i].weight >= -30) { + r.push(`Statistical projections indicates that once released ${he} will be around ${heightToEitherUnit(V.incubator.tanks[i].height + random(-5, 5))} tall. Most likely ${he} will be`); + if (V.incubator.tanks[i].weight <= 30 && V.incubator.tanks[i].weight >= -30) { r.push(`at a healthy weight and`); - } else if (V.tanks[i].weight >= 31 && V.tanks[i].weight <= 95) { + } else if (V.incubator.tanks[i].weight >= 31 && V.incubator.tanks[i].weight <= 95) { r.push(`quite overweight and`); - } else if (V.tanks[i].weight >= 96) { + } else if (V.incubator.tanks[i].weight >= 96) { r.push(`very overweight and`); - } else if (V.tanks[i].weight <= -31 && V.tanks[i].weight >= -95) { + } else if (V.incubator.tanks[i].weight <= -31 && V.incubator.tanks[i].weight >= -95) { r.push(`quite thin and`); - } else if (V.tanks[i].weight <= -96) { + } else if (V.incubator.tanks[i].weight <= -96) { r.push(`very thin and`); } - if (V.tanks[i].muscles <= 5 && V.tanks[i].muscles >= -5) { + if (V.incubator.tanks[i].muscles <= 5 && V.incubator.tanks[i].muscles >= -5) { r.push(`with a normal musculature.`); - } else if (V.tanks[i].muscles >= 6 && V.tanks[i].muscles <= 30) { + } else if (V.incubator.tanks[i].muscles >= 6 && V.incubator.tanks[i].muscles <= 30) { r.push(`quite toned.`); - } else if (V.tanks[i].muscles >= 31 && V.tanks[i].muscles <= 95) { + } else if (V.incubator.tanks[i].muscles >= 31 && V.incubator.tanks[i].muscles <= 95) { r.push(`quite muscular.`); - } else if (V.tanks[i].muscles >= 96) { + } else if (V.incubator.tanks[i].muscles >= 96) { r.push(`with a powerful musculature.`); - } else if (V.tanks[i].muscles <= -6 && V.tanks[i].muscles >= -30) { + } else if (V.incubator.tanks[i].muscles <= -6 && V.incubator.tanks[i].muscles >= -30) { r.push(`quite weak.`); - } else if (V.tanks[i].muscles <= -31 && V.tanks[i].muscles >= -95) { + } else if (V.incubator.tanks[i].muscles <= -31 && V.incubator.tanks[i].muscles >= -95) { r.push(`very weak.`); - } else if (V.tanks[i].muscles <= -96) { + } else if (V.incubator.tanks[i].muscles <= -96) { r.push(`extremely weak.`); } r.push(`${His} breasts are projected to be`); - if (V.tanks[i].boobs <= 299) { + if (V.incubator.tanks[i].boobs <= 299) { r.push(`of small size,`); - } else if (V.tanks[i].boobs <= 799) { + } else if (V.incubator.tanks[i].boobs <= 799) { r.push(`of normal size,`); - } else if (V.tanks[i].boobs <= 1799) { + } else if (V.incubator.tanks[i].boobs <= 1799) { r.push(`of generous size,`); - } else if (V.tanks[i].boobs <= 3249) { + } else if (V.incubator.tanks[i].boobs <= 3249) { r.push(`of incredible size,`); } else { r.push(`of humongous size,`); } r.push(`while ${his} rear will be`); - if (V.tanks[i].butt <= 3) { + if (V.incubator.tanks[i].butt <= 3) { r.push(`a healthy size.`); - } else if (V.tanks[i].butt <= 6) { + } else if (V.incubator.tanks[i].butt <= 6) { r.push(`quite impressive.`); - } else if (V.tanks[i].butt <= 9) { + } else if (V.incubator.tanks[i].butt <= 9) { r.push(`very impressive.`); } else { r.push(`immense.`); } - if (V.tanks[i].dick > 0) { - if (V.tanks[i].dick <= 3) { + if (V.incubator.tanks[i].dick > 0) { + if (V.incubator.tanks[i].dick <= 3) { r.push(`The latest analysis reported ${his} dick will end up being around the average`); - } else if (V.tanks[i].dick >= 4 && V.tanks[i].dick <= 6) { + } else if (V.incubator.tanks[i].dick >= 4 && V.incubator.tanks[i].dick <= 6) { r.push(`The latest analysis reported ${his} dick will end up being above average`); - } else if (V.tanks[i].dick >= 7 && V.tanks[i].dick <= 9) { + } else if (V.incubator.tanks[i].dick >= 7 && V.incubator.tanks[i].dick <= 9) { r.push(`The latest analysis reported ${his} dick will end up being far above the average`); } else { r.push(`The latest analysis reported ${his} dick will end up being of monstrous size`); } } - if (V.tanks[i].balls > 0) { - if (V.tanks[i].balls <= 3) { + if (V.incubator.tanks[i].balls > 0) { + if (V.incubator.tanks[i].balls <= 3) { r.push(`and ${his} testicles will reach a normal size.`); - } else if (V.tanks[i].balls >= 4 && V.tanks[i].balls <= 6) { + } else if (V.incubator.tanks[i].balls >= 4 && V.incubator.tanks[i].balls <= 6) { r.push(`and ${his} testicles will be of remarkable size.`); - } else if (V.tanks[i].balls >= 7 && V.tanks[i].balls <= 9) { + } else if (V.incubator.tanks[i].balls >= 7 && V.incubator.tanks[i].balls <= 9) { r.push(`and ${his} testicles will reach an impressive size.`); } else { r.push(`and ${his} testicles will reach a monstrous size.`); } } - if (V.tanks[i].pubertyXX === 1 && V.tanks[i].ovaries === 1) { + if (V.incubator.tanks[i].pubertyXX === 1 && V.incubator.tanks[i].ovaries === 1) { r.push(`Scanners report ${his} womb is fertile.`); } else { r.push(`Scanners report ${he} is not fertile,`); - if (V.tanks[i].pubertyXX === 0) { + if (V.incubator.tanks[i].pubertyXX === 0) { r.push(`as ${he} has not yet entered puberty.`); } else { r.push(`as it appears ${his} womb is sterile.`); } } - if ((V.incubatorPregAdaptationSetting === 1 && V.tanks[i].genes === "XX") || (V.incubatorPregAdaptationSetting === 2 && V.tanks[i].genes === "XY") || V.incubatorPregAdaptationSetting === 3) { - r.push(`There are probes and tubes inserted inside ${his} reproductive organs so ${V.incubatorName} may work on them.`); - const _safeCC = (V.tanks[i].pregAdaptation - 5) * 2000; - if (_safeCC > 300000) { + if ((V.incubator.setting.pregAdaptation === 1 && V.incubator.tanks[i].genes === "XX") || (V.incubator.setting.pregAdaptation === 2 && V.incubator.tanks[i].genes === "XY") || V.incubator.setting.pregAdaptation === 3) { + r.push(`There are probes and tubes inserted inside ${his} reproductive organs so ${V.incubator.capacity} may work on them.`); + const safeCC = (V.incubator.tanks[i].pregAdaptation - 5) * 2000; + if (safeCC > 300000) { /* Some bigger size descriptions may be unreachable by normal game mechanics, so they are here just in case.*/ r.push(`${His} bloated form looks more like an overinflated beachball made of the overstretched skin of ${his} belly with ${his} relative tiny body attached to its side. ${He} is completely dominated by it now. The process has gone too far, so ${his} body can't maintain its form with the belly as part of abdominal cavity. Now ${his} skin, tissues and muscles have stretched enough for ${his} belly to expand outside of any physical boundaries and appear more an attachment to ${his} body, rather than part of it.`); - } else if (_safeCC > 150000) { + } else if (safeCC > 150000) { r.push(`${His} body looks almost spherical, having been grotesquely inflated with the stimulator sacs inserted into ${his} internals. The incubator constantly maintains high pressure inside ${him}, forcing the displacement of ${his} organs and stretching skin, tissues, and muscles. Even ${his} chest forced to become a part of the top of ${his} belly, having been pushed forward from the overwhelming volume inside.`); - } else if (_safeCC > 75000) { + } else if (safeCC > 75000) { r.push(`${His} belly has become so huge that can be easily compared with belly of a woman ready to birth quintuplets. It pulses from the pressure applied within by the incubator probes.`); - } else if (_safeCC > 45000) { + } else if (safeCC > 45000) { r.push(`${His} belly, in the current state, would look normal on a woman who was ready to birth triplets. On ${his} still growing form, it's something completely out of the ordinary.`); - } else if (_safeCC > 30000) { + } else if (safeCC > 30000) { r.push(`${His} belly looks like it contains full sized twins, ready to be birthed.`); - } else if (_safeCC > 15000) { + } else if (safeCC > 15000) { r.push(`${His} belly has reached the size of full term pregnancy.`); - } else if (_safeCC > 10000) { + } else if (safeCC > 10000) { r.push(`${His} belly has inflated to the size of late term pregnancy; its skin shines from the tension.`); - } else if (_safeCC > 5000) { + } else if (safeCC > 5000) { r.push(`${His} belly resembles a mid term pregnancy; it pulses slightly from the expansion and contraction of expandable sacs tipping the incubator probes.`); - } else if (_safeCC > 1500) { + } else if (safeCC > 1500) { r.push(`${His} belly slightly bulges and rhythmically expands and contracts to the cycles of ${his} stimulation as the incubator inflates and deflates expandable sacs on its probes within ${his} body cavity. With the correct serums applied, this should allow it to stretch the skin, tissues, and muscles of ${his} belly to better to tolerate the displacement of internal organs caused by fetal growth.`); } } App.Events.addNode(p, r, "div"); - if (V.tanks[i].growTime <= 0) { - V.readySlaves = 1; + if (V.incubator.tanks[i].growTime <= 0) { + V.incubator.readySlaves = 1; appendRow(p, `${He} is ready to be released from ${his} tank.`); } else { - const _weekDisplay = Math.round(V.tanks[i].growTime / V.incubatorUpgradeSpeed); - appendRow(p, `${His} growth is currently being accelerated. ${He} will be ready for release in about ${_weekDisplay} ${(_weekDisplay > 1) ? `weeks` : `week`}.`); + const weekDisplay = Math.round(V.incubator.tanks[i].growTime / V.incubator.upgrade.speed); + appendRow(p, `${His} growth is currently being accelerated. ${He} will be ready for release in about ${weekDisplay} ${(weekDisplay > 1) ? `weeks` : `week`}.`); } - if (V.tanks[i].tankBaby !== 3) { + if (V.incubator.tanks[i].tankBaby !== 3) { r = []; r.push(`The tank is imprinting ${him} with basic life and sexual skills, though ${he} will still be very naïve and inexperienced on release.`); - if (V.tanks[i].tankBaby === 2) { + if (V.incubator.tanks[i].tankBaby === 2) { r.push(`The majority of ${his} indoctrination involves painting the world as a terrible place where only horror awaits ${him} should ${he} not obey ${his} owner.`); } else { r.push(`The majority of ${his} indoctrination involves painting the world as a wonderful place only if ${he} is unconditionally devoted to, and absolutely trusting of, ${his} owner.`); @@ -817,50 +836,50 @@ App.UI.incubator = function() { } - if (V.incubatorUpgradeWeight === 1) { - if (V.incubatorWeightSetting === 1) { + if (V.incubator.upgrade.weight === 1) { + if (V.incubator.setting.weight === 1) { appendRow(p, `${His} weight is not being properly managed, saving costs but likely causing excessive weight gain.`); - } else if (V.incubatorWeightSetting === 2) { + } else if (V.incubator.setting.weight === 2) { appendRow(p, `${His} weight is being carefully managed; ${he} will be released at a healthy weight.`); - } else if (V.incubatorWeightSetting === 0) { + } else if (V.incubator.setting.weight === 0) { appendRow(p, `Weight management systems are offline; ${he} will likely be malnourished.`); } } - if (V.incubatorUpgradeMuscles === 1) { - if (V.incubatorMusclesSetting === 2) { + if (V.incubator.upgrade.muscles === 1) { + if (V.incubator.setting.muscles === 2) { appendRow(p, `${His} strength levels are purposefully set higher than recommended; ${he} is likely to have excessive musculature.`); - } else if (V.incubatorMusclesSetting === 1) { + } else if (V.incubator.setting.muscles === 1) { appendRow(p, `${His} musculature is being carefully managed; ${he} will be released with near normal strength.`); - } else if (V.incubatorMusclesSetting === 0) { + } else if (V.incubator.setting.muscles === 0) { appendRow(p, `Strength management systems are offline; ${he} will likely be released extremely weak.`); } } - if (V.incubatorUpgradeGrowthStims === 1) { - if (V.incubatorGrowthStimsSetting === 2) { + if (V.incubator.upgrade.growthStims === 1) { + if (V.incubator.setting.growthStims === 2) { appendRow(p, `${He} is being injected with higher than recommended doses of stimulants; ${he} is likely to be much taller than expected.`); - } else if (V.incubatorGrowthStimsSetting === 1) { + } else if (V.incubator.setting.growthStims === 1) { appendRow(p, `${He} is injected with the recommended dosage of stimulants; ${he} will grow to ${his} full expected height.`); - } else if (V.incubatorGrowthStimsSetting === 0) { + } else if (V.incubator.setting.growthStims === 0) { appendRow(p, `Growth stimulant injection systems are offline; ${he} will develop normally.`); } } - if (V.incubatorUpgradeReproduction === 1) { - if (V.incubatorReproductionSetting === 2) { + if (V.incubator.upgrade.reproduction === 1) { + if (V.incubator.setting.reproduction === 2) { appendRow(p, `${His} hormone levels are purposefully set higher than recommended; ${his} reproductive systems are likely to be over-active.`); - } else if (V.incubatorReproductionSetting === 1) { + } else if (V.incubator.setting.reproduction === 1) { appendRow(p, `${His} hormone levels are being carefully managed; ${he} will be released with fully functional reproductive organs.`); - } else if (V.incubatorReproductionSetting === 0) { + } else if (V.incubator.setting.reproduction === 0) { appendRow(p, `Reproduction management systems are offline; ${he} will undergo normal puberty.`); } - if ((V.incubatorPregAdaptationSetting === 1 && V.tanks[i].genes === "XX") || (V.incubatorPregAdaptationSetting === 2 && V.tanks[i].genes === "XY") || V.incubatorPregAdaptationSetting === 3) { - /* Should be visible only after incubatorUpgradeReproduction is installed and activated*/ + if ((V.incubator.setting.pregAdaptation === 1 && V.incubator.tanks[i].genes === "XX") || (V.incubator.setting.pregAdaptation === 2 && V.incubator.tanks[i].genes === "XY") || V.incubator.setting.pregAdaptation === 3) { + /* Should be visible only after incubator.setting.reproduction is installed and activated*/ r = []; r.push(`${His} reproductive organs are getting`); - if (V.tanks[i].incubatorPregAdaptationPower === 1) { + if (V.incubator.setting.pregAdaptationPower === 1) { r.push(`an advanced`); - } else if (V.tanks[i].incubatorPregAdaptationPower === 2) { + } else if (V.incubator.setting.pregAdaptationPower === 2) { r.push(`an intensive`); - } else if (V.tanks[i].incubatorPregAdaptationPower === 3) { + } else if (V.incubator.setting.pregAdaptationPower === 3) { r.push(`an extreme`); } else { r.push(`a standard`); @@ -873,10 +892,10 @@ App.UI.incubator = function() { r.push(`Rename ${him}:`); r.push( App.UI.DOM.makeTextBox( - V.tanks[i].slaveName, + V.incubator.tanks[i].slaveName, (v) => { - V.tanks[i].slaveName = v; - V.tanks[i].birthName = V.tanks[i].slaveName; + V.incubator.tanks[i].slaveName = v; + V.incubator.tanks[i].birthName = V.incubator.tanks[i].slaveName; refresh(); } ) @@ -891,8 +910,8 @@ App.UI.incubator = function() { App.UI.DOM.link( "Retrieve immediately", () => { - V.readySlave = V.tanks[i]; - V.tanks.splice(i, 1); + V.readySlave = V.incubator.tanks[i]; + V.incubator.tanks.splice(i, 1); }, [], "Incubator Retrieval Workaround" @@ -900,7 +919,7 @@ App.UI.incubator = function() { ); p.append(row); } - if ((V.incubatorUpgradeOrgans === 1) && (V.tanks[i].tankBaby !== 3)) { + if ((V.incubator.upgrade.organs === 1) && (V.incubator.tanks[i].tankBaby !== 3)) { r = []; r.push(`You can extract a sample and prepare a new organ for ${him} to be implanted once ${he} exits ${his} tank.`); const tankOrgans = { @@ -911,13 +930,13 @@ App.UI.incubator = function() { leftEye: 0, voiceBox: 0 }; - for (const organ of V.incubatorOrgans) { - if (V.tanks[i].ID === organ.ID) { + for (const organ of V.incubator.organs) { + if (V.incubator.tanks[i].ID === organ.ID) { tankOrgans[organ.type] = 1; } } - if (V.tanks[i].genes === "XX") { + if (V.incubator.tanks[i].genes === "XX") { r.push(`Being a natural girl, ${he} possesses a functional vagina and ovaries. You can:`); } else { r.push(`Being a natural boy, ${he} possesses a functional penis and balls. You can:`); @@ -925,13 +944,13 @@ App.UI.incubator = function() { App.Events.addNode(p, r, "div"); linkArray = []; - if (V.tanks[i].ovaries === 0) { + if (V.incubator.tanks[i].ovaries === 0) { if (tankOrgans.ovaries !== 1) { linkArray.push( makeLink( "Prepare ovaries", () => { - App.Medicine.OrganFarm.growIncubatorOrgan(V.tanks[i], "ovaries"); + App.Medicine.OrganFarm.growIncubatorOrgan(V.incubator.tanks[i], "ovaries"); }, refresh ) @@ -940,25 +959,25 @@ App.UI.incubator = function() { linkArray.push(App.UI.DOM.makeElement("span", `Ovaries are already prepared.`, "detail")); } } - if (V.tanks[i].dick === 0) { + if (V.incubator.tanks[i].dick === 0) { if (tankOrgans.penis !== 1) { linkArray.push( - makeLink("Prepare penis", () => { App.Medicine.OrganFarm.growIncubatorOrgan(V.tanks[i], "penis"); }, refresh) + makeLink("Prepare penis", () => { App.Medicine.OrganFarm.growIncubatorOrgan(V.incubator.tanks[i], "penis"); }, refresh) ); } else { linkArray.push(App.UI.DOM.makeElement("span", `A penis is already prepared`, "detail")); } } - if (V.tanks[i].balls === 0) { + if (V.incubator.tanks[i].balls === 0) { if (tankOrgans.testicles !== 1) { - linkArray.push(makeLink("Prepare testicles", () => { App.Medicine.OrganFarm.growIncubatorOrgan(V.tanks[i], "testicles"); }, refresh)); + linkArray.push(makeLink("Prepare testicles", () => { App.Medicine.OrganFarm.growIncubatorOrgan(V.incubator.tanks[i], "testicles"); }, refresh)); } else { linkArray.push(App.UI.DOM.makeElement("span", `Testicles are already prepared.`, "detail")); } } const vision = { - left: getLeftEyeVision(V.tanks[i]), - right: getRightEyeVision(V.tanks[i]) + left: getLeftEyeVision(V.incubator.tanks[i]), + right: getRightEyeVision(V.incubator.tanks[i]) }; if (vision.left === 0 || vision.right === 0) { if (vision.left === 0 && vision.right === 0) { @@ -969,18 +988,18 @@ App.UI.incubator = function() { linkArray.push(App.UI.DOM.makeElement("span", `${He} appears to be blind in ${his} right eye:`)); } if (vision.left === 0 && tankOrgans.leftEye !== 1) { - linkArray.push(makeLink("Prepare left eye", () => { App.Medicine.OrganFarm.growIncubatorOrgan(V.tanks[i], "leftEye"); }, refresh)); + linkArray.push(makeLink("Prepare left eye", () => { App.Medicine.OrganFarm.growIncubatorOrgan(V.incubator.tanks[i], "leftEye"); }, refresh)); } if (vision.right === 0 && tankOrgans.rightEye !== 1) { - linkArray.push(makeLink("Prepare right eye", () => { App.Medicine.OrganFarm.growIncubatorOrgan(V.tanks[i], "rightEye"); }, refresh)); + linkArray.push(makeLink("Prepare right eye", () => { App.Medicine.OrganFarm.growIncubatorOrgan(V.incubator.tanks[i], "rightEye"); }, refresh)); } if (vision.left === 0 && vision.right === 0 && linkArray.length === 2) { linkArray.push( makeLink( "Prepare right eye", () => { - App.Medicine.OrganFarm.growIncubatorOrgan(V.tanks[i], "rightEye"); - App.Medicine.OrganFarm.growIncubatorOrgan(V.tanks[i], "leftEye"); + App.Medicine.OrganFarm.growIncubatorOrgan(V.incubator.tanks[i], "rightEye"); + App.Medicine.OrganFarm.growIncubatorOrgan(V.incubator.tanks[i], "leftEye"); }, refresh ) @@ -995,11 +1014,11 @@ App.UI.incubator = function() { } } App.UI.DOM.appendNewElement("div", p, App.UI.DOM.generateLinksStrip(linkArray)); - if (V.tanks[i].voice === 0) { + if (V.incubator.tanks[i].voice === 0) { r = []; r.push(`${He} appears to be mute:`); if (tankOrgans.voicebox !== 1) { - r.push(makeLink("Prepare vocal cords", () => { App.Medicine.OrganFarm.growIncubatorOrgan(V.tanks[i], "voicebox"); }, refresh)); + r.push(makeLink("Prepare vocal cords", () => { App.Medicine.OrganFarm.growIncubatorOrgan(V.incubator.tanks[i], "voicebox"); }, refresh)); } else { r.push(App.UI.DOM.makeElement("span", `Vocal cords are already prepared.`, `detail`)); } @@ -1016,29 +1035,6 @@ App.UI.incubator = function() { empty.append("This tank is currently reserved"); el.append(empty); } - const freeTanks = V.incubator - incubatorSlaves; - const empty = freeTanks - reservedChildren; - if (empty) { - for (let i = 0; i < empty; i++) { - const empty = document.createElement("div"); - empty.classList.add("incubator-tank"); - empty.append("This tank is currently empty"); - empty.append( - choice( - `Remove incubation tank`, - () => { - cashX(forceNeg(Math.trunc(10000 * V.upgradeMultiplierArcology)), "capEx"); - V.incubator -= 1; - refresh(); - }, - "", - `Costs ${cashFormat(Math.trunc(10000 * V.upgradeMultiplierArcology))} and will reduce upkeep costs` - ) - ); - el.append(empty); - } - } - // if (V.incubator > 1 && reservedChildren < freeTanks) return el; @@ -1109,13 +1105,13 @@ App.UI.incubator = function() { App.Events.addNode(el, r, "p"); row = document.createElement("p"); - if (V.incubatorBulkRelease === 1) { + if (V.incubator.setting.bulkRelease === 1) { row.append(`Released children will be handled in bulk and not receive personal attention. `); row.append( App.UI.DOM.link( `Individual release`, () => { - V.incubatorBulkRelease = 0; + V.incubator.setting.bulkRelease = 0; refresh(); } ) @@ -1126,7 +1122,7 @@ App.UI.incubator = function() { App.UI.DOM.link( `Bulk release`, () => { - V.incubatorBulkRelease = 1; + V.incubator.setting.bulkRelease = 1; refresh(); } ) @@ -1136,9 +1132,9 @@ App.UI.incubator = function() { row = document.createElement("p"); - if (V.incubatorUpgradeSpeed === 52) { + if (V.incubator.upgrade.speed === 52) { row.append(`It has been upgraded with perfected growth accelerants; children grow at the rate of 1 week to 1 year.`); - } else if (V.incubatorUpgradeSpeed === 18) { + } else if (V.incubator.upgrade.speed === 18) { cost = Math.trunc(500000 * V.upgradeMultiplierArcology); row.append(`It has been upgraded with advanced experimental growth accelerants; children grow at the rate of 3 weeks to 1 year. `); row.append( @@ -1146,14 +1142,14 @@ App.UI.incubator = function() { `Fund speculative research into maximizing growth rate`, () => { cashX(forceNeg(cost), "capEx"); - V.incubatorUpgradeSpeed = 52; + V.incubator.upgrade.speed = 52; refresh(); }, "", `Costs ${cashFormat(cost)} and will increase upkeep costs` ) ); - } else if (V.incubatorUpgradeSpeed === 9) { + } else if (V.incubator.upgrade.speed === 9) { cost = Math.trunc(75000 * V.upgradeMultiplierArcology); row.append(`It has been upgraded with advanced growth accelerants; children grow at the rate of 6 weeks to 1 year. `); row.append( @@ -1161,14 +1157,14 @@ App.UI.incubator = function() { `Fund research into increasing growth rate even further`, () => { cashX(forceNeg(cost), "capEx"); - V.incubatorUpgradeSpeed = 18; + V.incubator.upgrade.speed = 18; refresh(); }, "", `Costs ${cashFormat(cost)} and will increase upkeep costs` ) ); - } else if (V.incubatorUpgradeSpeed === 6) { + } else if (V.incubator.upgrade.speed === 6) { cost = Math.trunc(30000 * V.upgradeMultiplierArcology); row.append(`It has been upgraded with growth accelerants; children grow at the rate of 9 weeks to 1 year. `); row.append( @@ -1176,14 +1172,14 @@ App.UI.incubator = function() { `Further upgrade the incubators with specialized stem cells to speed growth`, () => { cashX(forceNeg(cost), "capEx"); - V.incubatorUpgradeSpeed = 9; + V.incubator.upgrade.speed = 9; refresh(); }, "", `Costs ${cashFormat(cost)} and will increase upkeep costs` ) ); - } else if (V.incubatorUpgradeSpeed === 5) { + } else if (V.incubator.upgrade.speed === 5) { cost = Math.trunc(30000 * V.upgradeMultiplierArcology); row.append(`The incubation tanks are basic; children grow at the rate of 12 weeks to 1 year. `); row.append( @@ -1191,7 +1187,7 @@ App.UI.incubator = function() { `Upgrade the incubators with growth accelerating drugs`, () => { cashX(forceNeg(cost), "capEx"); - V.incubatorUpgradeSpeed = 6; + V.incubator.upgrade.speed = 6; refresh(); }, "", @@ -1204,27 +1200,27 @@ App.UI.incubator = function() { p = document.createElement("p"); row = document.createElement("div"); - if (V.incubatorUpgradeWeight === 1) { + if (V.incubator.upgrade.weight === 1) { row.append(`Advanced caloric monitoring systems have been installed in the tanks to monitor and maintain a developing child's weight.`); p.append(row); row = document.createElement("div"); linkArray = []; - if (V.incubatorWeightSetting === 1) { + if (V.incubator.setting.weight === 1) { row.append(`Weight is not being properly managed; excessive weight gain is likely. `); } else { - linkArray.push(makeLink(`Estimate only`, () => { V.incubatorWeightSetting = 1; }, refresh)); + linkArray.push(makeLink(`Estimate only`, () => { V.incubator.setting.weight = 1; }, refresh)); } - if (V.incubatorWeightSetting === 2) { + if (V.incubator.setting.weight === 2) { row.append(`Weight is being carefully managed; children will be released at a healthy weight. `); } else { - linkArray.push(makeLink(`Activate`, () => { V.incubatorWeightSetting = 2; }, refresh)); + linkArray.push(makeLink(`Activate`, () => { V.incubator.setting.weight = 2; }, refresh)); } - if (V.incubatorWeightSetting === 0) { + if (V.incubator.setting.weight === 0) { row.append(`Weight management systems are offline; children will likely be malnourished. `); } else { - linkArray.push(makeLink(`Disable`, () => { V.incubatorWeightSetting = 0; }, refresh)); + linkArray.push(makeLink(`Disable`, () => { V.incubator.setting.weight = 0; }, refresh)); } row.append(App.UI.DOM.generateLinksStrip(linkArray)); } else { @@ -1235,7 +1231,7 @@ App.UI.incubator = function() { `Upgrade the growth tanks with weight monitoring systems`, () => { cashX(forceNeg(cost), "capEx"); - V.incubatorUpgradeWeight = 1; + V.incubator.upgrade.weight = 1; refresh(); }, "", @@ -1250,27 +1246,27 @@ App.UI.incubator = function() { p = document.createElement("p"); row = document.createElement("div"); - if (V.incubatorUpgradeMuscles === 1) { + if (V.incubator.upgrade.muscles === 1) { row.append(`Advanced monitoring and steroid injection systems have been installed in the tanks to monitor and maintain a developing child's musculature.`); p.append(row); row = document.createElement("div"); linkArray = []; - if (V.incubatorMusclesSetting === 2) { + if (V.incubator.setting.muscles === 2) { row.append(`Strength levels are purposefully set higher than recommended; excessive muscle gain is likely. `); } else { - linkArray.push(makeLink(`Overload`, () => { V.incubatorMusclesSetting = 2; }, refresh)); + linkArray.push(makeLink(`Overload`, () => { V.incubator.setting.muscles = 2; }, refresh)); } - if (V.incubatorMusclesSetting === 1) { + if (V.incubator.setting.muscles === 1) { row.append(`Musculature is being carefully managed; children will be released with near normal strength. `); } else { - linkArray.push(makeLink(`Activate`, () => { V.incubatorMusclesSetting = 1; }, refresh)); + linkArray.push(makeLink(`Activate`, () => { V.incubator.setting.muscles = 1; }, refresh)); } - if (V.incubatorMusclesSetting === 0) { + if (V.incubator.setting.muscles === 0) { row.append(`Strength management systems are offline; children will likely be released extremely weak. `); } else { - linkArray.push(makeLink(`Disable`, () => { V.incubatorMusclesSetting = 0; }, refresh)); + linkArray.push(makeLink(`Disable`, () => { V.incubator.setting.muscles = 0; }, refresh)); } row.append(App.UI.DOM.generateLinksStrip(linkArray)); @@ -1282,7 +1278,7 @@ App.UI.incubator = function() { `Upgrade the growth tanks with muscle monitoring systems`, () => { cashX(forceNeg(cost), "capEx"); - V.incubatorUpgradeMuscles = 1; + V.incubator.upgrade.muscles = 1; refresh(); }, "", @@ -1297,87 +1293,87 @@ App.UI.incubator = function() { p = document.createElement("p"); row = document.createElement("div"); - if (V.incubatorUpgradeReproduction === 1) { + if (V.incubator.upgrade.reproduction === 1) { row.append(`Advanced monitoring and hormone injection systems have been installed in the tanks to influence a developing child's reproductive organs.`); p.append(row); row = document.createElement("div"); linkArray = []; - if (V.incubatorReproductionSetting === 2) { + if (V.incubator.setting.reproduction === 2) { row.append(`Hormone levels are purposefully set higher than recommended; over-active reproductive systems are likely. `); } else { - linkArray.push(makeLink(`Overload`, () => { V.incubatorReproductionSetting = 2; }, refresh)); + linkArray.push(makeLink(`Overload`, () => { V.incubator.setting.reproduction = 2; }, refresh)); } - if (V.incubatorReproductionSetting === 1) { + if (V.incubator.setting.reproduction === 1) { row.append(`Hormone levels are being carefully managed; children will be released with fully functional reproductive organs. `); } else { - linkArray.push(makeLink(`Limit`, () => { V.incubatorReproductionSetting = 1; }, refresh)); + linkArray.push(makeLink(`Limit`, () => { V.incubator.setting.reproduction = 1; }, refresh)); } - if (V.incubatorReproductionSetting === 0) { + if (V.incubator.setting.reproduction === 0) { row.append(`Reproduction management systems are offline; children will undergo normal puberty. `); } else { - linkArray.push(makeLink(`Disable`, () => { V.incubatorReproductionSetting = 0; }, refresh)); + linkArray.push(makeLink(`Disable`, () => { V.incubator.setting.reproduction = 0; }, refresh)); } row.append(App.UI.DOM.generateLinksStrip(linkArray)); - if (V.incubatorUpgradePregAdaptation === 1) { - // Should be visible only after incubatorUpgradeReproduction is installed + if (V.incubator.upgrade.pregAdaptation === 1) { + // Should be visible only after incubator.upgrade.reproduction is installed p.append(row); row = document.createElement("div"); linkArray = []; - if (V.incubatorPregAdaptationSetting === 3) { + if (V.incubator.setting.pregAdaptation === 3) { row.append(`Pregnancy adaptation system online: All. `); } else { - linkArray.push(makeLink(`All`, () => { V.incubatorPregAdaptationSetting = 3; }, refresh)); + linkArray.push(makeLink(`All`, () => { V.incubator.setting.pregAdaptation = 3; }, refresh)); } - if (V.incubatorPregAdaptationSetting === 2) { + if (V.incubator.setting.pregAdaptation === 2) { row.append(`Pregnancy adaptation system online: Males only. `); } else { - linkArray.push(makeLink(`Males`, () => { V.incubatorPregAdaptationSetting = 2; }, refresh)); + linkArray.push(makeLink(`Males`, () => { V.incubator.setting.pregAdaptation = 2; }, refresh)); } - if (V.incubatorPregAdaptationSetting === 1) { + if (V.incubator.setting.pregAdaptation === 1) { row.append(`Pregnancy adaptation system online: Females only. `); } else { - linkArray.push(makeLink(`Females`, () => { V.incubatorPregAdaptationSetting = 1; }, refresh)); + linkArray.push(makeLink(`Females`, () => { V.incubator.setting.pregAdaptation = 1; }, refresh)); } - if (V.incubatorPregAdaptationSetting === 0) { + if (V.incubator.setting.pregAdaptation === 0) { row.append(`Pregnancy adaptation system offline. `); } else { - linkArray.push(makeLink(`Disable`, () => { V.incubatorPregAdaptationSetting = 0; }, refresh)); + linkArray.push(makeLink(`Disable`, () => { V.incubator.setting.pregAdaptation = 0; }, refresh)); } row.append(App.UI.DOM.generateLinksStrip(linkArray)); } - if (V.incubatorUpgradePregAdaptation === 1 && V.incubatorPregAdaptationSetting > 0) { - // Should be visible only after incubatorUpgradeReproduction is installed and turned on + if (V.incubator.upgrade.pregAdaptation === 1 && V.incubator.setting.pregAdaptation > 0) { + // Should be visible only after incubator.upgrade.reproduction is installed and turned on p.append(row); row = document.createElement("div"); linkArray = []; - if (V.incubatorPregAdaptationPower === 1) { + if (V.incubator.setting.pregAdaptationPower === 1) { row.append(`Pregnancy adaptation programmed to advanced procedures. Up to triplet pregnancy should be safe for the subjects.`); } else { - linkArray.push(makeLink(`Advanced`, () => { V.incubatorPregAdaptationPower = 1; }, refresh)); + linkArray.push(makeLink(`Advanced`, () => { V.incubator.setting.pregAdaptationPower = 1; }, refresh)); } - if (V.incubatorPregAdaptationPower === 2) { + if (V.incubator.setting.pregAdaptationPower === 2) { row.append(`Pregnancy adaptation programmed to intensive procedures. Up to octuplet pregnancy should be possible for the subjects. Warning! Side effects may occur to health and mental condition.`); } else { - linkArray.push(makeLink(`Intensive`, () => { V.incubatorPregAdaptationPower = 2; }, refresh)); + linkArray.push(makeLink(`Intensive`, () => { V.incubator.setting.pregAdaptationPower = 2; }, refresh)); } - if (V.incubatorPregAdaptationPower === 3) { + if (V.incubator.setting.pregAdaptationPower === 3) { row.append(`Pregnancy adaptation programmed to extreme procedures. Normally unsustainable pregnancies may be possible for some subjects. Actual capacity will vary with genetic and other individual conditions. WARNING! Extreme side effects may occur to health and mental condition!`); } else { - linkArray.push(makeLink(`Extreme`, () => { V.incubatorPregAdaptationPower = 3; }, refresh)); + linkArray.push(makeLink(`Extreme`, () => { V.incubator.setting.pregAdaptationPower = 3; }, refresh)); } - if (V.incubatorPregAdaptationPower === 0) { + if (V.incubator.setting.pregAdaptationPower === 0) { row.append(`Pregnancy adaptation programmed to standard procedures. Normal pregnancy should be safe for subjects.`); } else { - linkArray.push(makeLink(`Standard`, () => { V.incubatorPregAdaptationPower = 0; }, refresh)); + linkArray.push(makeLink(`Standard`, () => { V.incubator.setting.pregAdaptationPower = 0; }, refresh)); } row.append(App.UI.DOM.generateLinksStrip(linkArray)); App.UI.DOM.appendNewElement("span", row, `Due to the high complexity and steep risks of the procedure, settings will not be changed on tanks in use.`, "note"); @@ -1390,7 +1386,7 @@ App.UI.incubator = function() { `Upgrade the growth tanks with hormone monitoring systems`, () => { cashX(forceNeg(cost), "capEx"); - V.incubatorUpgradeReproduction = 1; + V.incubator.upgrade.reproduction = 1; refresh(); }, "", @@ -1404,7 +1400,7 @@ App.UI.incubator = function() { row = document.createElement("div"); - if (V.incubatorUpgradeOrgans === 1) { + if (V.incubator.upgrade.organs === 1) { row.append(`Surgical tools have been added to the tank to be able to extract tissue samples from the occupant.`); } else if (V.organFarmUpgrade >= 1) { cost = Math.trunc(10000 * V.upgradeMultiplierArcology); @@ -1414,7 +1410,7 @@ App.UI.incubator = function() { `Upgrade the growth tanks with surgical extraction tools`, () => { cashX(forceNeg(cost), "capEx"); - V.incubatorUpgradeOrgans = 1; + V.incubator.upgrade.organs = 1; refresh(); }, "", @@ -1430,29 +1426,29 @@ App.UI.incubator = function() { p = document.createElement("p"); row = document.createElement("div"); - if (V.incubatorUpgradeGrowthStims === 1) { + if (V.incubator.upgrade.growthStims === 1) { row.append(`Advanced monitoring and stimulant injection systems have been installed in the tanks to monitor and maintain a developing child's height.`); row = document.createElement("div"); linkArray = []; - if (V.incubatorGrowthStimsSetting === 2) { + if (V.incubator.upgrade.growthStims === 2) { row.append(`Children are injected with higher than recommended doses of stimulants; exceeding expected final height is likely. `); } else { - linkArray.push(makeLink(`Overload`, () => { V.incubatorGrowthStimsSetting = 2; }, refresh)); + linkArray.push(makeLink(`Overload`, () => { V.incubator.setting.growthStims = 2; }, refresh)); } - if (V.incubatorGrowthStimsSetting === 1) { + if (V.incubator.setting.growthStims === 1) { row.append(`Children are injected with the recommended dosage of stimulants; they will grow to their full expected height. `); } else { - linkArray.push(makeLink(`Limit`, () => { V.incubatorGrowthStimsSetting = 1; }, refresh)); + linkArray.push(makeLink(`Limit`, () => { V.incubator.setting.growthStims = 1; }, refresh)); } - if (V.incubatorGrowthStimsSetting === 0) { + if (V.incubator.setting.growthStims === 0) { row.append(`Growth stimulant injection systems are offline; children will develop normally. `); } else { - linkArray.push(makeLink(`Disable`, () => { V.incubatorGrowthStimsSetting = 0; }, refresh)); + linkArray.push(makeLink(`Disable`, () => { V.incubator.setting.growthStims = 0; }, refresh)); } row.append(App.UI.DOM.generateLinksStrip(linkArray)); - } else if (V.growthStim === 1) { + } else if (V.incubator.setting.growthStims === 1) { cost = Math.trunc(20000 * V.upgradeMultiplierArcology); row.append(`There are no systems in place to control a growing child's height. `); row.append( @@ -1460,7 +1456,7 @@ App.UI.incubator = function() { `Upgrade the growth tanks with stimulants injection systems`, () => { cashX(forceNeg(cost), "capEx"); - V.incubatorUpgradeGrowthStims = 1; + V.incubator.upgrade.growthStims = 1; refresh(); }, "", @@ -1477,24 +1473,24 @@ App.UI.incubator = function() { /* Main prerequisite - stable repopulation FS OR documentation purchased from black market. And age gate. */ p = document.createElement("p"); row = document.createElement("div"); - if (V.incubatorUpgradePregAdaptation === 1) { + if (V.incubator.upgrade.pregAdaptation === 1) { row.append(`The incubators have been upgraded with special set of manipulators, probes, nozzles and syringes coupled together with specific programs to take advantage of the accelerated growth to heighten viable reproductive capacity. These include injections of specialized serums and mechanical manipulation of the reproductive system and associated tissues, organs, muscles and bones.`); } else { row.append(`The highly controlled environment inside incubation tube coupled with the greatly accelerated growth process is the perfect opportunity to push the boundaries of a body's ability to sustain pregnancy. This will include injections of specialized serums and mechanical manipulation of their reproductive system through a special set of manipulators, probes, nozzles and syringes supervised by a powerful monitoring program. Costly to maintain.`); p.append(row); row = document.createElement("div"); - if (V.incubatorUpgradeReproduction < 1) { + if (V.incubator.upgrade.reproduction < 1) { /* Now with reports - what is lacking for construction */ - row.append(`${_incubatorNameCaps} lacks advanced monitoring and hormone injection systems. Construction not possible.`); - } else if (V.incubatorUpgradeOrgans < 1) { - row.append(`${_incubatorNameCaps} lacks the ability to extract tissue samples. Construction not possible.`); + row.append(`${incubatorNameCaps} lacks advanced monitoring and hormone injection systems. Construction not possible.`); + } else if (V.incubator.upgrade.organs < 1) { + row.append(`${incubatorNameCaps} lacks the ability to extract tissue samples. Construction not possible.`); } else if (V.dispensaryUpgrade < 1) { - row.append(`${_incubatorNameCaps} lacks a connection to an advanced pharmaceutical fabricator. Cutting-edge targeted serums production needed as integral part. Construction not possible.`); + row.append(`${incubatorNameCaps} lacks a connection to an advanced pharmaceutical fabricator. Cutting-edge targeted serums production needed as integral part. Construction not possible.`); } else if (V.bellyImplants < 1) { - row.append(`${_incubatorNameCaps} lacks a connection with an implant manufacturing to construct fillable abdominal implants to simulate expansion. Construction not possible.`); - } else if (V.incubatorUpgradeGrowthStims < 1) { - row.append(`${_incubatorNameCaps} lacks advanced monitoring and stimulant injection systems. Construction not possible.`); + row.append(`${incubatorNameCaps} lacks a connection with an implant manufacturing to construct fillable abdominal implants to simulate expansion. Construction not possible.`); + } else if (V.incubator.upgrade.growthStims < 1) { + row.append(`${incubatorNameCaps} lacks advanced monitoring and stimulant injection systems. Construction not possible.`); } else { cost = Math.trunc(2000000 * V.upgradeMultiplierArcology); row.append( @@ -1502,7 +1498,7 @@ App.UI.incubator = function() { `Manufacture and install this subsystem`, () => { cashX(forceNeg(cost), "capEx"); - V.incubatorUpgradePregAdaptation = 1; + V.incubator.upgrade.pregAdaptation = 1; refresh(); }, "", @@ -1517,7 +1513,7 @@ App.UI.incubator = function() { p = document.createElement("p"); row = document.createElement("div"); - if (V.incubatorImprintSetting === "terror") { + if (V.incubator.setting.imprint === "terror") { row.append(`The imprinting system is currently focused on making them devoted but fearful of you. The imprinting cycle is locked upon incubation start. `); App.UI.DOM.appendNewElement("span", row, `Only affects new infants`, "note"); if (V.bodyswapAnnounced === 1) { @@ -1525,7 +1521,7 @@ App.UI.incubator = function() { choice( `Switch the system to focus on preparation for body-swapping`, () => { - V.incubatorImprintSetting = "husk"; + V.incubator.setting.imprint = "husk"; refresh(); } ) @@ -1535,19 +1531,19 @@ App.UI.incubator = function() { choice( `Switch the system to focus on attachment`, () => { - V.incubatorImprintSetting = "trust"; + V.incubator.setting.imprint = "trust"; refresh(); } ) ); - } else if (V.incubatorImprintSetting === "trust") { + } else if (V.incubator.setting.imprint === "trust") { row.append(`The imprinting system is currently focused on making them devoted and trusting of you. The imprinting cycle is locked upon incubation start.`); if (V.bodyswapAnnounced === 1) { row.append( choice( `Switch the system to focus preparation for body-swapping`, () => { - V.incubatorImprintSetting = "husk"; + V.incubator.setting.imprint = "husk"; refresh(); } ) @@ -1557,7 +1553,7 @@ App.UI.incubator = function() { choice( `Switch the system to focus on dependence`, () => { - V.incubatorImprintSetting = "terror"; + V.incubator.setting.imprint = "terror"; refresh(); } ) @@ -1568,7 +1564,7 @@ App.UI.incubator = function() { choice( `Switch the system to focus on dependence`, () => { - V.incubatorImprintSetting = "terror"; + V.incubator.setting.imprint = "terror"; refresh(); } ) @@ -1577,7 +1573,7 @@ App.UI.incubator = function() { choice( `Switch the system to focus on attachment`, () => { - V.incubatorImprintSetting = "trust"; + V.incubator.setting.imprint = "trust"; refresh(); } ) @@ -1599,19 +1595,19 @@ App.UI.incubator = function() { } function release() { - const multiple = (V.incubatorBulkRelease === 1) && V.tanks.filter(t => t.growTime <= 0).length > 1; + const multiple = (V.incubator.setting.bulkRelease === 1) && V.incubator.tanks.filter(t => t.growTime <= 0).length > 1; const singleRelease = () => { - const baby = V.tanks.find(t => t.growTime <= 0); - V.tanks.delete(baby); + const baby = V.incubator.tanks.find(t => t.growTime <= 0); + V.incubator.tanks.delete(baby); V.readySlave = baby; }; const multipleRelease = () => { - V.newSlavePool = V.tanks.deleteWith(t => t.growTime <= 0); + V.newSlavePool = V.incubator.tanks.deleteWith(t => t.growTime <= 0); }; - if (V.readySlaves === 1) { + if (V.incubator.readySlaves === 1) { if (multiple) { return App.UI.DOM.passageLink(`Release ready tanks`, "Incubator Retrieval Workaround", multipleRelease); } else { diff --git a/src/facilities/incubator/incubatorRetrievalWorkaround.tw b/src/facilities/incubator/incubatorRetrievalWorkaround.tw index b5b886d376c5e9ca7529f534384f90917f24cb9a..efa13fb8b7b22e6b3295377de79e6c3e932a5690 100644 --- a/src/facilities/incubator/incubatorRetrievalWorkaround.tw +++ b/src/facilities/incubator/incubatorRetrievalWorkaround.tw @@ -4,22 +4,22 @@ <<if $readySlave != 0>> <<setLocalPronouns $readySlave>> - $readySlave.slaveName has been discharged from $incubatorName and is ready for $his first ever inspection. + $readySlave.slaveName has been discharged from <<= $incubator.name>> and is ready for $his first ever inspection. <br><br> <<includeDOM App.Desc.longSlave($readySlave)>> <<if $readySlave.tankBaby != 3>> - <<if $incubatorOrgans.length > 0>> - <<for _irw = 0; _irw < $incubatorOrgans.length; _irw++>> - <<if $incubatorOrgans[_irw].ID == $readySlave.ID>> - <<set _newOrgan = {type: $incubatorOrgans[_irw].type, weeksToCompletion: $incubatorOrgans[_irw].weeksToCompletion, ID: $readySlave.ID}>> + <<if $incubator.organs.length > 0>> + <<for _irw = 0; _irw < $incubator.organs.length; _irw++>> + <<if $incubator.organs[_irw].ID == $readySlave.ID>> + <<set _newOrgan = {type: $incubator.organs[_irw].type, weeksToCompletion: $incubator.organs[_irw].weeksToCompletion, ID: $readySlave.ID}>> <<if _newOrgan.weeksToCompletion <= 0>> - <<set $completedOrgans.push($incubatorOrgans[_irw])>> + <<set $completedOrgans.push($incubator.organs[_irw])>> <<else>> <<set $organs.push(_newOrgan)>> <</if>> - <<set $incubatorOrgans.deleteAt(_irw), _irw-->> + <<set $incubator.organs.deleteAt(_irw), _irw-->> <</if>> <</for>> <</if>> @@ -42,7 +42,7 @@ </span> <</if>> <<else>> - The following slaves were discharged from $incubatorName: + The following slaves were discharged from <<= $incubator.name>>: <<for _irw = 0; _irw < $newSlavePool.length; _irw++>> <br><br> @@ -97,16 +97,16 @@ <</if>> <<run newSlave(_newSlave)>> - <<if $incubatorOrgans.length > 0>> - <<for _irw2 = 0; _irw2 < $incubatorOrgans.length; _irw2++>> - <<if $incubatorOrgans[_irw2].ID == $newSlavePool[_irw].ID>> - <<set _newOrgan = {type: $incubatorOrgans[_irw2].type, weeksToCompletion: $incubatorOrgans[_irw2].weeksToCompletion, ID: _newSlave.ID}>> + <<if $incubator.organs.length > 0>> + <<for _irw2 = 0; _irw2 < $incubator.organs.length; _irw2++>> + <<if $incubator.organs[_irw2].ID == $newSlavePool[_irw].ID>> + <<set _newOrgan = {type: $incubator.organs[_irw2].type, weeksToCompletion: $incubator.organs[_irw2].weeksToCompletion, ID: _newSlave.ID}>> <<if _newOrgan.weeksToCompletion <= 0>> - <<set $completedOrgans.push($incubatorOrgans[_irw2])>> + <<set $completedOrgans.push($incubator.organs[_irw2])>> <<else>> <<set $organs.push(_newOrgan)>> <</if>> - <<set $incubatorOrgans.deleteAt(_irw2), _irw2-->> + <<set $incubator.organs.deleteAt(_irw2), _irw2-->> <</if>> <</for>> <</if>> diff --git a/src/facilities/incubator/incubatorUtils.js b/src/facilities/incubator/incubatorUtils.js index ad935672e005c9ef8cc9298db78906c8aa6ed97c..cb47b07c38763f5c85979117644483570cdcd6dd 100644 --- a/src/facilities/incubator/incubatorUtils.js +++ b/src/facilities/incubator/incubatorUtils.js @@ -16,5 +16,38 @@ App.Facilities.Incubator.newChild = function(child) { fullAdapt = 15000 / 2000; } child.incubatorPregAdaptationInWeek = (fullAdapt - child.pregAdaptation) / child.growTime; - V.tanks.push(child); + V.incubator.tanks.push(child); }; + +App.Facilities.Incubator.init = function(state) { + if (state === 'base') { + return V.incubator = {capacity: 0, tanks: []}; + } + + V.incubator = { + capacity: 1, + tanks: [], + name: "the Incubator", + organs: [], + readySlaves: 0, + upgrade: { + speed: 5, + weight: 0, + muscles: 0, + growthStims: 0, + reproduction: 0, + organs: 0, + pregAdaptation: 0, + }, + setting: { + imprint: "trust", + weight: 0, + muscles: 0, + growthStims: 0, + reproduction: 0, + bulkRelease: 0, + pregAdaptation: 0, + pregAdaptationPower: 0, + }, + }; +}; \ No newline at end of file diff --git a/src/facilities/nursery/nursery.tw b/src/facilities/nursery/nursery.tw index 4700ad94edeb464e2db7d7096180c24e8f5b2c9c..9decd73212eeb37884ab10901fba8ada0548defc 100644 --- a/src/facilities/nursery/nursery.tw +++ b/src/facilities/nursery/nursery.tw @@ -261,7 +261,7 @@ <<elseif (_reservedChildrenNursery < _freecribs) && (_freecribs > _WL)>> <<if _WL - _reservedIncubator == 0>> <span class="note"> - $His children are already reserved for $incubatorName + $His children are already reserved for <<= $incubator.name>> </span> <br> <<print "[[Keep " + $his + " " + ((_WL > 1) ? "children" : "child") + " here instead|Nursery][WombChangeReserveType($slaves[" + _u + "], 'incubator', 'nursery')]]">> diff --git a/src/facilities/nursery/nurseryDatatypeCleanup.js b/src/facilities/nursery/nurseryDatatypeCleanup.js index 6521f32e9daa8649e77424cfc61dbb1aaf8b2bd7..d78a9da7f2d0ec7f01dc1d2f7a786b8c1277b3ba 100644 --- a/src/facilities/nursery/nurseryDatatypeCleanup.js +++ b/src/facilities/nursery/nurseryDatatypeCleanup.js @@ -532,7 +532,7 @@ App.Facilities.Nursery.InfantDatatypeCleanup = function(child) { // old versions of FC assign overlapping IDs to infants and other slaves, which needs to be fixed // deconflict IDs between infants and older children/tank babies/adults by reassigning the infant's ID if (V.cribs.find((s) => s.ID === child.ID && (s.birthWeek !== child.birthWeek || s.actualAge !== child.actualAge)) !== undefined - || V.slaves.find((s) => s.ID === child.ID) !== undefined || V.tanks.find((s) => s.ID === child.ID) !== undefined) { + || V.slaves.find((s) => s.ID === child.ID) !== undefined || (V.incubator.tanks.find((s) => s.ID === child.ID) !== undefined)) { child.ID = generateSlaveID(); } diff --git a/src/facilities/nursery/utils/nurseryUtils.js b/src/facilities/nursery/utils/nurseryUtils.js index 65fdb9233beec8fc2e2260fc779f8e66cc3b5c92..effa6edb7653b16917e02e47c17ee183a58968bd 100644 --- a/src/facilities/nursery/utils/nurseryUtils.js +++ b/src/facilities/nursery/utils/nurseryUtils.js @@ -813,7 +813,7 @@ App.Facilities.Nursery.nurserySort = function nurserySort() { } } else if (reservedChildrenNursery < freeCribs && freeCribs > WL) { if (WL - reservedIncubator === 0) { - r += `<i>${His} children are already reserved for ${V.incubatorName}</i>`; + r += `<i>${His} children are already reserved for ${V.incubator.name}</i>`; r += `<br> `; r += App.UI.passageLink(`Keep ${his} child${WL > 1 ? `ren` : ``} here instead`, "Nursery", `${WombAddToGenericReserve(slave, "nursery", 1)}`); } else { @@ -887,7 +887,7 @@ App.Facilities.Nursery.nurserySort = function nurserySort() { } } else if (reservedChildrenNursery < freeCribs) { if (WL - reservedIncubator === 0) { - r += `<i>Your child${WL > 1 ? `ren are` : ` is`} already reserved for ${V.incubatorName}</i>`; + r += `<i>Your child${WL > 1 ? `ren are` : ` is`} already reserved for ${V.incubator.name}</i>`; r += App.UI.passageLink(`Keep your child${WL > 1 ? `ren` : ``} here instead`, "Nursery", `${reservedNursery += WL}, ${reservedIncubator = 0}`); } else { r += `You have ${freeCribs === 1 ? `an ` : ``}<span class="lime">available room${freeCribs > 1 ? `s` : ``}. `; diff --git a/src/facilities/penthouse/penthousePassage.js b/src/facilities/penthouse/penthousePassage.js index ee06d0367d1e6ab6d4dd346cf449b945de11f41a..44f21d08d343d5b5d056ef7c6105d8240db3e1b7 100644 --- a/src/facilities/penthouse/penthousePassage.js +++ b/src/facilities/penthouse/penthousePassage.js @@ -152,10 +152,9 @@ App.UI.managePenthouse = function() { if (V.seePreg !== 0) { if (V.arcologyUpgrade.grid === 1) { - if (V.incubator === 0) { + if (V.incubator.capacity === 0) { App.UI.DOM.appendNewElement("div", el, makeLink("Install an incubation chamber to rapidly age children", () => { - V.incubator = 5; - V.readySlaves = 0; + App.Facilities.Incubator.init('full'); })); } else { App.UI.DOM.appendNewElement("div", el, `The penthouse has a specialized facility dedicated to rapidly aging children.`); diff --git a/src/futureSocieties/fsDecoration.js b/src/futureSocieties/fsDecoration.js index a8521b78cbfef789adc354b16fcf7a540eea12f1..7861241d48ae57bb351a16903a3729b531e4cb72 100644 --- a/src/futureSocieties/fsDecoration.js +++ b/src/futureSocieties/fsDecoration.js @@ -65,33 +65,40 @@ App.UI.facilityRedecoration = function() { // dummy variable to make sure the first option is selected by default const currentSelected = {value: "none"}; - options.addOption(`The decoration style of ${name} is`, "value", currentSelected) + let option = options.addOption(`Set decoration value for all facilities to`, "value", currentSelected) .addValue("(Select option)", "none") - .addValue("Standard", "standard") - .addValueList(decorationNames) - .addValue("Distribute Evenly", "even") - .addCallbackToEach(value => { - console.log(value); - if (value === "even") { // Cycles through the list of available FS decorations, and distributes them to facilities round robin style. - let i = 0; - for (const decoration of activeFacilities.values()) { - cashX(-5000, "capEx"); + .addValue("Standard", "standard"); + if (decorationNames.length > 0) { + option.addValueList(decorationNames) + .addValue("Distribute Evenly", "even"); + } + option.addCallbackToEach(value => { + console.log(value); + let totalCost = 0; + if (value === "even") { // Cycles through the list of available FS decorations, and distributes them to facilities round robin style. + let i = 0; + for (const decoration of activeFacilities.values()) { + if (V[decoration] !== decorationNames[i]) { + totalCost += 5000; V[decoration] = decorationNames[i]; - i++; - if (i >= decorationNames.length) { - i = 0; - } } - } else { - for (const decoration of activeFacilities.values()) { - if (value !== "standard") { - cashX(-5000, "capEx"); - } - V[decoration] = value; + i++; + if (i >= decorationNames.length) { + i = 0; + } + } + } else if (value !== "none") { + for (const decoration of activeFacilities.values()) { + if (value !== "standard") { + totalCost += 5000; } + V[decoration] = value; } - }) - .pulldown(); + } + if (totalCost > 0) { + cashX(forceNeg(totalCost), "capEx"); + } + }).pulldown(); for (const [name, decoration] of activeFacilities) { options.addOption(`The decoration style of ${name} is`, decoration) diff --git a/src/futureSocieties/fsPassage.js b/src/futureSocieties/fsPassage.js index 47aa8eaa69d4800a591e587e08115b7265d41dca..61b46e1489aeb9ee2716055f28074bd6b0fd6b2c 100644 --- a/src/futureSocieties/fsPassage.js +++ b/src/futureSocieties/fsPassage.js @@ -299,25 +299,13 @@ App.UI.fsPassage = function() { () => { for (const slave of V.slaves) { if (slave.devotion > 20 || (slave.devotion >= -20 && slave.trust < -20)) { - const _toSearch = slave.slaveName; - if (_toSearch.indexOf("Miss") === -1) { - if (_toSearch.indexOf("Ms.") === -1) { - if (_toSearch.indexOf("Mrs.") === -1) { - if (slave.relationship > 4) { - /* - <<for V.j = 0; V.j < V.slaves.length; V.j++>> - if (slave.relationshipTarget === V.slaves[V.j].ID) { - slave.slaveName = ("Mrs. " + slave.slaveName + " " + V.slaves[V.j].slaveName); - } - <</for>> - */ - slave.slaveName = ("Mrs. " + slave.slaveName); - } else if (slave.actualAge > 24) { - slave.slaveName = ("Ms. " + slave.slaveName); - } else { - slave.slaveName = ("Miss " + slave.slaveName); - } - } + if (!["Miss", "Ms.", "Mrs."].some(title => slave.slaveName.includes(title))) { + if (slave.relationship > 4) { + slave.slaveName = ("Mrs. " + slave.slaveName); + } else if (slave.actualAge > 24) { + slave.slaveName = ("Ms. " + slave.slaveName); + } else { + slave.slaveName = ("Miss " + slave.slaveName); } } } diff --git a/src/gui/quicklinks.js b/src/gui/quicklinks.js index 151ef4198848d1e8b7d96b58c68f933ecbacad1c..aebe0a9fbd2cec8363d8bb990932967cf0ebe2cb 100644 --- a/src/gui/quicklinks.js +++ b/src/gui/quicklinks.js @@ -100,7 +100,7 @@ App.UI.quickMenu = (function() { "Toy Shop": () => !V.toyShop, "Head Girl Suite": () => !V.HGSuite, "Implant Manufactory": () => !V.ImplantProductionUpgrade, - "Incubator": () => !V.incubator, + "Incubator": () => V.incubator.capacity === 0, "Manage Corporation": () => V.corp.Announced !== 1, "Master Suite": () => !V.masterSuite, "Neighbor Interact": () => V.arcologies.length === 0, @@ -177,7 +177,7 @@ App.UI.quickMenu = (function() { // true shows a notification symbol const notifications = cleanPassageMapping({ "Future Society": () => FutureSocieties.availCredits() > 0 || V.FSReminder, - "Incubator": () => V.readySlaves > 0, + "Incubator": () => V.incubator.capacity > 0 && V.incubator.readySlaves > 0, "Manage Corporation": () => V.corp.SpecToken > 0 && V.corp.SpecTimer === 0, }); diff --git a/src/interaction/main/toychest.js b/src/interaction/main/toychest.js index 407e339838055102c48191d299270d3966e642b4..bd1b307b1e3d479e0e42141f10e989565eb89aa1 100644 --- a/src/interaction/main/toychest.js +++ b/src/interaction/main/toychest.js @@ -158,7 +158,7 @@ App.Interact.ToyChest = function(slave) { case "attractive lingerie for a pregnant woman": r += `${His} breasts gently spill out of ${his} slightly too small top.`; if (slave.lactation) { - r += `${His} leaking nipples have rendered ${his} top see-through.`; + r += ` ${His} leaking nipples have rendered ${his} top see-through.`; } break; case "a maternity dress": diff --git a/src/interaction/multiImplant.js b/src/interaction/multiImplant.js index be65676c7da4a594297ea53e90323c92803e29e7..87ef27e9abb7fdfdb0e961e4d6fdd9d1af8642cb 100644 --- a/src/interaction/multiImplant.js +++ b/src/interaction/multiImplant.js @@ -47,7 +47,7 @@ App.UI.multiImplant = function() { App.UI.DOM.appendNewElement("div", frag, error, "warning"); } } else if (slave.health.health - actions[k].healthImpact < -75) { - App.UI.Dom.appendNewElement("div", frag, "Estimated health impact too high, skipping further surgeries."); + App.UI.DOM.appendNewElement("div", frag, "Estimated health impact too high, skipping further surgeries."); cancel = true; break; } else { @@ -58,7 +58,7 @@ App.UI.multiImplant = function() { } if (cancel) { break; } if (!success && manual) { - App.UI.Dom.appendNewElement("div", frag, `Cannot implant ${F.Organs.get(sortedOrgans[j]).name.toLowerCase()} automatically, try implanting manually in the remote surgery.`, "note"); + App.UI.DOM.appendNewElement("div", frag, `Cannot implant ${F.Organs.get(sortedOrgans[j]).name.toLowerCase()} automatically, try implanting manually in the remote surgery.`, "note"); } } } diff --git a/src/interaction/siPhysicalRegimen.js b/src/interaction/siPhysicalRegimen.js index 254e313cf940d5a6e68b5c32deb47a9b12d29715..40b92cd5555fe607a0f9b318023d964b66e3cb21 100644 --- a/src/interaction/siPhysicalRegimen.js +++ b/src/interaction/siPhysicalRegimen.js @@ -546,7 +546,7 @@ App.UI.SlaveInteract.physicalRegimen = function(slave) { let el = document.createElement('div'); const linkArray = []; - if (V.incubator > 0) { + if (V.incubator.capacity > 0) { if (slave.preg > 0 && slave.broodmother === 0 && slave.pregKnown === 1 && slave.eggType === "human") { if ((slave.assignment !== Job.DAIRY || V.dairyPregSetting === 0) && (slave.assignment !== Job.FARMYARD || V.farmyardBreeding === 0)) { let title = document.createElement('div'); @@ -554,17 +554,18 @@ App.UI.SlaveInteract.physicalRegimen = function(slave) { title.textContent = `${His} children are already reserved for ${V.nurseryName}`; title.style.fontStyle = "italic"; } else { - const freeTanks = (V.incubator - V.tanks.length); + const freeTanks = (V.incubator.capacity - V.incubator.tanks.length); if (_reservedIncubator > 0) { if (_WL === 1) { - title.textContent = `${His} child will be placed in ${V.incubatorName}. `; + title.textContent = `${His} child `; } else if (_reservedIncubator < _WL) { - title.textContent = `${_reservedIncubator} of ${his} children will be placed in ${V.incubatorName}.`; + title.textContent = `${_reservedIncubator} of ${his} children `; } else if (_WL === 2) { - title.textContent = `Both of ${his} children will be placed in ${V.incubatorName}. `; + title.textContent = `Both of ${his} children `; } else { - title.textContent = `All ${_reservedIncubator} of ${his} children will be placed in ${V.incubatorName}. `; + title.textContent = `All ${_reservedIncubator} of ${his} children `; } + title.textContent += ` will be placed in ${V.incubator.name}. `; if ((_reservedIncubator + _reservedNursery < _WL) && (reservedChildren < freeTanks)) { linkArray.push( App.UI.DOM.link(`Keep another child`, () => wombUpdateIncubator(1, true)) @@ -650,7 +651,7 @@ App.UI.SlaveInteract.physicalRegimen = function(slave) { let title = document.createElement('div'); const linkArray = []; if (_WL - reservedIncubator === 0) { - title.textContent = `${His} children are already reserved for ${V.incubatorName}`; + title.textContent = `${His} children are already reserved for ${V.incubator.name}`; title.style.fontStyle = "italic"; } else { const freeCribs = (V.nursery - V.cribs.length); diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js index f0d6cbadd60cca790f662475f2445c2297afa373..e2ae85a7b8b4082b07d6030c0139f9cada9ad8a4 100644 --- a/src/js/DefaultRules.js +++ b/src/js/DefaultRules.js @@ -2683,30 +2683,32 @@ globalThis.DefaultRules = (function() { * @param {FC.RA.RuleSetters} rule */ function ProcessSmartPiercings(slave, rule) { - if (slave.clitPiercing === 3) { + const hasSmartVibe = dildoVibeLevel(slave) > 1 || slave.dickAccessory === "smart bullet vibrator"; + const smartThing = (slave.clitPiercing === 3) ? "smart piercing" : "smart vibrator"; + if (slave.clitPiercing === 3 || hasSmartVibe) { if (rule.clitSetting !== undefined && rule.clitSetting !== null && rule.clitSetting !== "random") { if (slave.clitSetting !== rule.clitSetting && slave.fetishStrength !== 100) { slave.clitSetting = rule.clitSetting; - r += `<br>${slave.slaveName}'s smart piercing has been set to ${slave.clitSetting}.`; + r += `<br>${slave.slaveName}'s ${smartThing} has been set to ${slave.clitSetting}.`; return; } else if (slave.fetishStrength < 100) { return; } } else if (rule.clitSetting === "random") { slave.clitSetting = either("vanilla", "oral", "anal", "boobs", "submissive", "dom", "humiliation", "pregnancy", "masochist", "sadist"); - r += `<br>${slave.slaveName}'s smart piercing has been set to ${slave.clitSetting}.`; + r += `<br>${slave.slaveName}'s ${smartThing} has been set to ${slave.clitSetting}.`; return; } if (rule.clitSettingEnergy !== undefined && (rule.clitSettingEnergy !== null)) { if (slave.energy < rule.clitSettingEnergy) { if (slave.clitSetting !== "all") { - r += `<br>${slave.slaveName}'s smart piercing has been set to enhance libido.`; + r += `<br>${slave.slaveName}'s ${smartThing} has been set to enhance libido.`; } slave.clitSetting = "all"; return; } else if (slave.energy >= rule.clitSettingEnergy + 10) { if (slave.clitSetting !== "none") { - r += `<br>${slave.slaveName}'s smart piercing has been set to suppress libido.`; + r += `<br>${slave.slaveName}'s ${smartThing} has been set to suppress libido.`; } slave.clitSetting = "none"; return; @@ -2715,13 +2717,13 @@ globalThis.DefaultRules = (function() { if (rule.clitSettingXY !== undefined && (rule.clitSettingXY !== null)) { if (slave.attrXY < rule.clitSettingXY) { if (slave.clitSetting !== "men") { - r += `<br>${slave.slaveName}'s smart piercing has been set to encourage attraction to men.`; + r += `<br>${slave.slaveName}'s ${smartThing} has been set to encourage attraction to men.`; } slave.clitSetting = "men"; return; } else if (slave.attrXY >= rule.clitSettingXY + 10) { if (slave.clitSetting !== "anti-men") { - r += `<br>${slave.slaveName}'s smart piercing has been set to discourage attraction to men.`; + r += `<br>${slave.slaveName}'s ${smartThing} has been set to discourage attraction to men.`; } slave.clitSetting = "anti-men"; return; @@ -2730,24 +2732,19 @@ globalThis.DefaultRules = (function() { if (rule.clitSettingXX !== undefined && (rule.clitSettingXX !== null)) { if (slave.attrXX < rule.clitSettingXX) { if (slave.clitSetting !== "women") { - r += `<br>${slave.slaveName}'s smart piercing has been set to encourage attraction to women.`; + r += `<br>${slave.slaveName}'s ${smartThing} has been set to encourage attraction to women.`; } slave.clitSetting = "women"; return; } else if (slave.attrXX >= rule.clitSettingXX + 10) { if (slave.clitSetting !== "anti-women") { - r += `<br>${slave.slaveName}'s smart piercing has been set to discourage attraction to women.`; + r += `<br>${slave.slaveName}'s ${smartThing} has been set to discourage attraction to women.`; } slave.clitSetting = "anti-women"; return; } } } - if (rule.clitSetting !== undefined && rule.clitSetting !== null && slave.clitSetting !== rule.clitSetting) { - slave.clitSetting = rule.clitSetting; - r += `<br>${slave.slaveName}'s smart piercing has been set to ${slave.clitSetting}.`; - return; - } } /** diff --git a/src/js/birth/birth.js b/src/js/birth/birth.js index 0e280b5dd9b652e8c34e69739cee0e779e26d049..75bb681025146b0dd2722c153b2c2a751f6c69c6 100644 --- a/src/js/birth/birth.js +++ b/src/js/birth/birth.js @@ -1518,7 +1518,7 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false} = {}) } else { r.push(`were`); } - r.push(`taken to ${V.incubatorName}`); + r.push(`taken to ${V.incubator.name}`); if (cToNursery > 0) { r.push(`and`); } @@ -1543,9 +1543,9 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false} = {}) if (numBeingBorn > 0) { r.push(`After sending ${his} reserved ${children} to`); if (cToIncubator > 0 && cToNursery > 0) { - r.push(`${V.incubatorName} and ${V.nurseryName},`); + r.push(`${V.incubator.name} and ${V.nurseryName},`); } else if (cToIncubator > 0) { - r.push(`${V.incubatorName},`); + r.push(`${V.incubator.name},`); } else { r.push(`${V.nurseryName},`); } @@ -9116,7 +9116,7 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false} = {}) globalThis.sendNewbornsToFacility = function(mom, babiesBeingBorn) { const remainingBabies = []; for (const ovum of babiesBeingBorn) { - if (ovum.reserve === "incubator" && V.tanks.length < V.incubator) { + if (ovum.reserve === "incubator" && V.incubator.tanks.length < V.incubator.capacity) { App.Facilities.Incubator.newChild(generateChild(mom, ovum, true)); } else if (ovum.reserve === "nursery" && V.cribs.length < V.nursery) { App.Facilities.Nursery.newChild(generateChild(mom, ovum)); diff --git a/src/js/economyJS.js b/src/js/economyJS.js index 63f0cfc364a328dbeb68a569c8e9b14e214e5fc4..435f4796b5be45228ae6da38ac36ae2d477645f7 100644 --- a/src/js/economyJS.js +++ b/src/js/economyJS.js @@ -244,8 +244,6 @@ globalThis.calculateCosts = (function() { getClubCosts() + getClubAdsCosts() + getDairyCosts() + - getIncubatorCosts() + - getIncubatorSlavesCosts() + getServantsQuartersCosts() + getMasterSuiteCosts() + getNurseryCosts() + @@ -268,6 +266,10 @@ globalThis.calculateCosts = (function() { getPCCosts() + predictTotalSlaveCosts() ); + + if (V.incubator.capacity > 0) { + totalCosts += getIncubatorCosts(); + } // these two apply a multiplicative effect to all costs so far. totalCosts = getEnvironmentCosts(totalCosts); @@ -294,8 +296,6 @@ globalThis.calculateCosts = (function() { cashX(forceNeg(getClubCosts()), "club"); cashX(forceNeg(getClubAdsCosts()), "clubAds"); cashX(forceNeg(getDairyCosts()), "dairy"); - cashX(forceNeg(getIncubatorCosts()), "incubator"); - cashX(forceNeg(getIncubatorSlavesCosts()), "incubatorSlaves"); cashX(forceNeg(getServantsQuartersCosts()), "servantsQuarters"); cashX(forceNeg(getMasterSuiteCosts()), "masterSuite"); cashX(forceNeg(getNurseryCosts()), "nursery"); @@ -317,6 +317,11 @@ globalThis.calculateCosts = (function() { cashX(forceNeg(getPCTrainingCosts()), "PCtraining"); cashX(forceNeg(getPCCosts()), "PCmedical"); getTotalSlaveCosts(); + + if (V.incubator.capacity > 0) { + cashX(forceNeg(getIncubatorCosts()), "incubator"); + cashX(forceNeg(getIncubatorSlavesCosts()), "incubatorSlaves"); + } // these two apply a multiplicative effect to all costs so far. // Calculate what the deduced expenses would be, then subtract @@ -572,22 +577,21 @@ globalThis.calculateCosts = (function() { } function getIncubatorCosts() { - const facIncMultiplier = V.facilityCost * V.incubator; - let costs = (facIncMultiplier * 10) + - 0.2 * V.incubatorUpgradeWeight * facIncMultiplier + - 0.2 * V.incubatorUpgradeMuscles * facIncMultiplier + - 0.2 * V.incubatorUpgradeReproduction * facIncMultiplier + - 0.2 * V.incubatorUpgradeGrowthStims * facIncMultiplier + - 0.2 * V.incubatorUpgradeOrgans * facIncMultiplier + - 0.5 * V.incubatorUpgradePregAdaptation * facIncMultiplier + - 0.5 * V.incubatorUpgradeSpeed * facIncMultiplier; - return costs; + const facIncMultiplier = V.facilityCost * V.incubator.capacity; + return (facIncMultiplier * 10) + + 0.2 * V.incubator.upgrade.weight * facIncMultiplier + + 0.2 * V.incubator.upgrade.muscles * facIncMultiplier + + 0.2 * V.incubator.upgrade.reproduction * facIncMultiplier + + 0.2 * V.incubator.upgrade.growthStims * facIncMultiplier + + 0.2 * V.incubator.upgrade.organs * facIncMultiplier + + 0.5 * V.incubator.upgrade.reproduction * facIncMultiplier + + 0.5 * V.incubator.upgrade.speed * facIncMultiplier; } function getIncubatorSlavesCosts() { - let costs = 0; - costs += ((V.incubatorUpgradeWeight + V.incubatorUpgradeMuscles + V.incubatorUpgradeReproduction + V.incubatorUpgradeGrowthStims + V.incubatorUpgradeOrgans + V.incubatorPregAdaptationPower) * 500 * V.tanks.length); - return costs; + return ((V.incubator.upgrade.weight + V.incubator.upgrade.muscles + V.incubator.upgrade.reproduction + + V.incubator.upgrade.growthStims + V.incubator.upgrade.organs + V.incubator.setting.pregAdaptationPower) + * 500 * V.incubator.tanks.length); } function getServantsQuartersCosts() { diff --git a/src/js/eventSelectionJS.js b/src/js/eventSelectionJS.js index 1a47bb1a224b0f2ad1f9af799d6654a15c3b5dbf..a52a22e79f595d09394da08207ee0d7e09e9e210 100644 --- a/src/js/eventSelectionJS.js +++ b/src/js/eventSelectionJS.js @@ -143,18 +143,6 @@ globalThis.generateRandomEventPool = function(eventSlave) { } } - if (V.RETasteTestSubIDs.length > 1) { - if (eventSlave.rules.living === "luxurious") { - if (eventSlave.devotion > 20) { - if (eventSlave.energy > 80) { - if (canTaste(eventSlave)) { - V.RETSevent.push("taste test"); - } - } - } - } - } - if (eventSlave.assignment !== Job.QUARTER) { if (V.modRequestsAllowed > 0) { if (eventSlave.trust > 50) { @@ -193,18 +181,6 @@ globalThis.generateRandomEventPool = function(eventSlave) { } } } - - if (V.REBoobCollisionSubIDs.length > 1) { - if (eventSlave.devotion > 20) { - if (eventSlave.trust > 20) { - if (eventSlave.boobs > 3000) { - if (eventSlave.attrXX >= 50 || (eventSlave.fetish === "boobs" && eventSlave.fetishStrength > 95)) { - V.RETSevent.push("boob collision"); - } - } - } - } - } } if (V.weatherToday.severity <= 1) { @@ -1313,14 +1289,6 @@ if(eventSlave.drugs === "breast injections") { } } - if (eventSlave.devotion >= 50) { - if (eventSlave.trust <= 20) { - if (canWalk(eventSlave)) { - V.RESSevent.push("devoted fearful slave"); - } - } - } - if (eventSlave.prestige === 0 && eventSlave.assignment !== Job.QUARTER) { if (eventSlave.devotion > 50) { if (eventSlave.trust > 50) { diff --git a/src/js/familyTreeJS.js b/src/js/familyTreeJS.js index 4cf9bca040699305e7cbb2a94e2c54034cbc6512..c7c12b21b52bf191f3354e70ec581933c972f8ec 100644 --- a/src/js/familyTreeJS.js +++ b/src/js/familyTreeJS.js @@ -219,14 +219,14 @@ globalThis.buildFamilyTree = function(slaves, filterID) { }; let charList = [fake_pc]; charList.push.apply(charList, slaves); - charList.push.apply(charList, V.tanks); + charList.push.apply(charList, V.incubator.tanks); let unborn = {}; - for (let i = 0; i < V.tanks.length; i++) { - unborn[V.tanks[i].ID] = true; + for (const child of V.incubator.tanks) { + unborn[child.ID] = true; } - for (let i = 0; i < V.cribs.length; i++) { - unborn[V.cribs[i].ID] = true; + for (const child of V.cribs) { + unborn[child.ID] = true; } for (let i = 0; i < charList.length; i++) { diff --git a/src/js/ibcJS.js b/src/js/ibcJS.js index a36f8359357c24073e6583020e729a8afed69023..938c44a0cba32df56e31814fadc424ff173f6530 100644 --- a/src/js/ibcJS.js +++ b/src/js/ibcJS.js @@ -454,7 +454,7 @@ globalThis.ibc = (() => { // be multiple elements with the same ID: we want this, since we have to replace all // occurrences of the COI for the affected slaves /** @type {IBCRelative[]} */ - let all_slave_like = V.slaves.concat(V.genePool).concat(V.cribs).concat(V.tanks).concat(Object.values(V.missingTable)); + let all_slave_like = V.slaves.concat(V.genePool).concat(V.cribs).concat(V.incubator.tanks).concat(Object.values(V.missingTable)); if (V.boomerangSlave !== 0) { all_slave_like.push(V.boomerangSlave); } diff --git a/src/js/pregJS.js b/src/js/pregJS.js index 94e61a195e811251fb2f42ad90e84044d0344807..8615dcb7c82b6dfd43f3bd9d12d37f7f1009964a 100644 --- a/src/js/pregJS.js +++ b/src/js/pregJS.js @@ -530,8 +530,8 @@ globalThis.findFather = function(fatherID) { father = getSlave(fatherID); if (father === undefined) { - if (V.incubator > 0) { - father = V.tanks.find(s => s.ID === fatherID); + if (V.incubator.capacity > 0) { + father = V.incubator.tanks.find(s => s.ID === fatherID); } } if (father === undefined) { @@ -550,30 +550,6 @@ globalThis.adjustFatherProperty = function(actor, property, newValue) { } }; -/* OLD -globalThis.adjustFatherProperty = function(actor, property, newValue) { - let fatherIndex; - - fatherIndex = V.slaves.findIndex(function(s) { return s.ID === actor.ID; }); - if (fatherIndex > 0) { - V.slaves[fatherIndex][property] = newValue; - } else if (V.incubator > 0) { - fatherIndex = V.tanks.findIndex(function(s) { return s.ID === actor.ID; }); - if (fatherIndex > 0) { - V.tanks[fatherIndex][property] = newValue; - } - } - if (fatherIndex === -1) { - if (V.nursery > 0) { - fatherIndex = V.cribs.findIndex(function(s) { return s.ID === actor.ID; }); - if (fatherIndex !== -1) { - V.cribs[fatherIndex][property] = newValue; - } - } - } -} -*/ - /* not to be used until that last part is defined. It may become slave.boobWomb.volume or some shit */ /** * @param {App.Entity.SlaveState} slave diff --git a/src/js/removeSlave.js b/src/js/removeSlave.js index e11bd4c29dc67cc25f0b16b452af2bba40defbf5..5698b177612b680009840745a021e9188fcc3907 100644 --- a/src/js/removeSlave.js +++ b/src/js/removeSlave.js @@ -38,8 +38,8 @@ globalThis.removeSlave = function(slave) { V.researchLab.tasks = V.researchLab.tasks.filter((t) => t.slaveID !== AS_ID); if (INDEX >= 0 && INDEX < LENGTH) { - if (V.incubator > 0) { - V.tanks.forEach(child => { + if (V.incubator.capacity > 0) { + V.incubator.tanks.forEach(child => { if (AS_ID === child.mother) { child.mother = V.missingParentID; missing = true; diff --git a/src/js/rulesAssistantOptions.js b/src/js/rulesAssistantOptions.js index a289ccc665e09e968fb59a8a66cdb776ca5496c5..f918d49506395228368cfce72b9195b48c5427bb 100644 --- a/src/js/rulesAssistantOptions.js +++ b/src/js/rulesAssistantOptions.js @@ -1279,6 +1279,7 @@ App.RA.options = (function() { ["Devotion", "devotion"], ["Trust", "trust"], ["Health", "health.condition"], + ["Fatigue", "health.tired"], ["Sex", "genes"], ["Sex drive", "energy"], ["Height", "height"], @@ -1326,6 +1327,7 @@ App.RA.options = (function() { "devotion", "trust", "health.condition", + "health.tired", "energy", "height", "weight", @@ -1490,8 +1492,9 @@ App.RA.options = (function() { "devotion": "Very Hateful: (-∞, -95), Hateful: [-95, -50), Resistant: [-50, -20), Ambivalent: [-20, 20], Accepting: (20, 50], Devoted: (50, 95], Worshipful: (95, ∞)", "trust": "Extremely terrified: (-∞, -95), Terrified: [-95, -50), Frightened: [-50, -20), Fearful: [-20, 20], Careful: (20, 50], Trusting: (50, 95], Total trust: (95, ∞)", "health.condition": "Death: (-∞, -100), Near Death: [-100, -90), Extremely Unhealthy: [-90, -50), Unhealthy: [-50, -20), Healthy: [-20, 20], Very Healthy: (20, 50], Extremely Healthy: (50, 90], Unnaturally Healthy: (90, ∞)", + "health.tired": "Energetic: (-∞, 0], Rested: (0, 30], Tired: (30, 60], Fatigued: (60, 90], Exhausted: (90, ∞)", "energy": "Frigid: (-∞, 20], Poor: (20, 40], Average: (40, 60], Powerful: (60, 80], Sex Addict: (80, 100), Nympho: 100", - "weight": "Emaciated: (-∞, -95), Skinny: [-95, -30), Thin: [-30, -10), Average: [-10, 10], Plush: (10, 30], Fat: (30, 95], Overweight: (95, ∞)", + "weight": "Emaciated: (-∞, -95), Skinny: [-95, -30), Thin: [-30, -10), Average: [-10, 10], Plush: (10, 30], Overweight: (30, 95], Fat: (95, 130], Obese: (130, 160], Super Obese: (160, 190], Dangerously Obese: (190, ∞)", "lactation": "None: 0, 1: Natural, 2: Lactation implant", "preg": "Barren: -2, On contraceptives: -1, Not pregnant: 0, Pregnancy weeks: [1, ∞)", "pregType": "Fetus count, known only after the 10th week of pregnancy", diff --git a/src/js/rulesAutosurgery.js b/src/js/rulesAutosurgery.js index 03178aecde43d1b5ed2824a5522fab74ee646318..e7f40989fb32789c6a47743fa0568c009bc24a7b 100644 --- a/src/js/rulesAutosurgery.js +++ b/src/js/rulesAutosurgery.js @@ -170,7 +170,7 @@ globalThis.rulesAutosurgery = (function() { } else if (slave.tastes === 0 && thisSurgery.tastes === -1) { commitProcedure(`surgery to muffle ${his} sense of taste`, s => { s.tastes = -1; }); } else if (_.isNumber(thisSurgery.voice) && slave.voice !== thisSurgery.voice) { - const voiceDifference = slave.voice - thisSurgery.voice; + const voiceDifference = thisSurgery.voice - slave.voice; commitProcedure(`surgery to ${(voiceDifference < 0) ? "lower" : "raise"} ${his} voice`, s => { s.voice += voiceDifference; s.voiceImplant += voiceDifference; diff --git a/src/js/utilsDOM.js b/src/js/utilsDOM.js index 7c70d8a71398b1ac1e3f920856a3d705878a7cfe..ce7b7c13d233c7f6375653a54688464bee40deee 100644 --- a/src/js/utilsDOM.js +++ b/src/js/utilsDOM.js @@ -447,7 +447,7 @@ App.UI.DOM.cashFormat = function(s) { * Renders an exception to DOM. * Tries it's best to not fail itself. * - * @param {Error } ex Exception + * @param {any} ex Exception - normally of type Error, but Javascript literally lets you throw anything * @param {boolean} recursion set if formatException() called itself, never set from outside * @returns {DocumentFragment|HTMLParagraphElement} */ @@ -488,17 +488,26 @@ App.UI.DOM.formatException = function formatException(ex, recursion = false) { App.UI.DOM.appendNewElement("p", fragment, `Passage: ${passage()}; Version: ${Config.saves.version}`, "bold"); const error = document.createElement("p"); - App.UI.DOM.appendNewElement("div", error, `${ex.name}: ${ex.message}`, "bold"); - - const body = document.createElement("div"); - const lines = ex.stack.split("\n"); - for (const ll of lines) { - const div = document.createElement("div"); - // remove file path from error message - div.append(ll.replace(/file:.*\//, "<path>/")); - body.append(div); + if (ex instanceof Error) { + App.UI.DOM.appendNewElement("div", error, `${ex.name}: ${ex.message}`, "bold"); + + const body = document.createElement("div"); + if (ex.stack) { + const lines = ex.stack.split("\n"); + for (const ll of lines) { + const div = document.createElement("div"); + // remove file path from error message + div.append(ll.replace(/file:.*\//, "<path>/")); + body.append(div); + } + } else { + body.append("No stack available."); + } + error.append(body); + } else { + App.UI.DOM.appendNewElement("div", error, ex.toString(), "bold"); } - error.append(body); + fragment.append(error); return fragment; diff --git a/src/js/utilsSlave.js b/src/js/utilsSlave.js index 7c2ba4ede394c9838f66426b2945350b693906b2..f0433cad9643afbdd0d50c9979bbabbd1af613b4 100644 --- a/src/js/utilsSlave.js +++ b/src/js/utilsSlave.js @@ -3462,7 +3462,7 @@ globalThis.slaveSkillIncrease = function(targetSkill, slave, skillIncrease = 1) globalThis.generateSlaveID = function() { // household liquidators and recETS generate slaves at an offset of 1000 (and many such slaves already exist) // if you go through enough slaves you WILL generate collisions, so make sure we haven't just done that. - let allSlaveIDs = [...V.slaves.map((s) => s.ID), ...V.tanks.map((s) => s.ID), ...V.cribs.map((s) => s.ID)]; + let allSlaveIDs = [...V.slaves.map((s) => s.ID), ...V.incubator.tanks.map((s) => s.ID), ...V.cribs.map((s) => s.ID)]; while (allSlaveIDs.includes(V.IDNumber)) { V.IDNumber++; } diff --git a/src/npc/descriptions/belly/belly.js b/src/npc/descriptions/belly/belly.js index a3e1e6ca3662b210939eafc2a5138f8b1f894d31..122c7b4d8502cfd22a2ba9e2db2c272b9c265dcc 100644 --- a/src/npc/descriptions/belly/belly.js +++ b/src/npc/descriptions/belly/belly.js @@ -258,11 +258,6 @@ App.Desc.belly = function(slave, {market, eventDescription} = {}) { } else { r.push(`${He} is so overfilled you can clearly make out the implant within ${his} body through ${his} skin. It is so full, not one motion can be seen in its contents nor can one push their hand into it. It's a wonder that both ${him} and ${his} implant have managed to hold together this long.`); } - if (slave.weight > 190) { - r.push(`${His} massively fat belly is stretched to the limit, so much so ${his} folds are pulled flat and ${his} softness, firm. ${He} is so overfilled you can clearly make out the implant within ${his} body through ${his} skin.`); - } else { - r.push(`${He} is so overfilled you can clearly make out the implant within ${his} body through ${his} skin. It is so full, not one motion can be seen in its contents nor can one push their hand into it.`); - } r.push(`It baffles the mind how ${him} and ${his} implant could swell to such a size.`); if (slave.belly <= (slave.pregAdaptation * 1000)) { r.push(`Unbelievably, ${he} seems unshaken by ${his} obscene gravidity; ${his} body is so adapted to carrying children that, even at ${his} current volume, ${he} is physically capable of growing larger.`); diff --git a/src/npc/descriptions/womb/pregnancy.js b/src/npc/descriptions/womb/pregnancy.js index 63b20b5a8d270ceeb31d3c8fa716f7dde913ad4f..896cfa05fb84480f0df8f9850fb27279a2353e06 100644 --- a/src/npc/descriptions/womb/pregnancy.js +++ b/src/npc/descriptions/womb/pregnancy.js @@ -362,7 +362,7 @@ App.Desc.pregnancy = function(slave, {market, eventDescription} = {}) { } else if (slave.preg === slave.pregWeek / 4) { r.push(`${he} could shockingly pass for a girl only a quarter as far along.`); } else { - r.push(`${he} shockingly only looks like a girl on ${his} ${ordinalSuffix(slave.preg)} week of pregnancy.`); + r.push(`${he} shockingly only looks like a girl on ${his} ${ordinalSuffix(Math.round(slave.preg))} week of pregnancy.`); } } else if (slave.preg + (slave.pregData.normalBirth / 2) <= slave.pregWeek) { if (slave.preg === slave.pregWeek / 2) { @@ -370,7 +370,7 @@ App.Desc.pregnancy = function(slave, {market, eventDescription} = {}) { } else if (slave.preg === slave.pregWeek / 4) { r.push(`${he} could surprisingly pass for a girl only a quarter as far along.`); } else { - r.push(`${he} surprisingly only looks like a girl on ${his} ${ordinalSuffix(slave.preg)} week of pregnancy.`); + r.push(`${he} surprisingly only looks like a girl on ${his} ${ordinalSuffix(Math.round(slave.preg))} week of pregnancy.`); } } else if (slave.preg + (slave.pregData.normalBirth / 4) <= slave.pregWeek) { if (slave.preg === slave.pregWeek / 2) { @@ -378,7 +378,7 @@ App.Desc.pregnancy = function(slave, {market, eventDescription} = {}) { } else if (slave.preg === slave.pregWeek / 4) { r.push(`${he} could pass for a girl only a quarter as far along.`); } else { - r.push(`${he} only looks like a woman on ${his} ${ordinalSuffix(slave.preg)} week of pregnancy.`); + r.push(`${he} only looks like a woman on ${his} ${ordinalSuffix(Math.round(slave.preg))} week of pregnancy.`); } } else { r.push(`${his} pregnancy is smaller than anticipated.`); @@ -393,7 +393,7 @@ App.Desc.pregnancy = function(slave, {market, eventDescription} = {}) { } else if (slave.preg === slave.pregWeek * 4) { r.push(`${he} could shockingly pass for a girl nearly four times as far along.`); } else { - r.push(`${he} shockingly looks like a girl on ${his} ${ordinalSuffix(slave.preg)} week of pregnancy.`); + r.push(`${he} shockingly looks like a girl on ${his} ${ordinalSuffix(Math.round(slave.preg))} week of pregnancy.`); } } else if (slave.preg >= slave.pregWeek + (slave.pregData.normalBirth / 4)) { r.push(`Despite being pregnant for only ${slave.pregWeek} weeks,`); @@ -402,7 +402,7 @@ App.Desc.pregnancy = function(slave, {market, eventDescription} = {}) { } else if (slave.preg === slave.pregWeek * 4) { r.push(`${he} could surprisingly pass for a girl nearly four times as far along.`); } else { - r.push(`${he} surprisingly looks like a girl on ${his} ${ordinalSuffix(slave.preg)} week of pregnancy.`); + r.push(`${he} surprisingly looks like a girl on ${his} ${ordinalSuffix(Math.round(slave.preg))} week of pregnancy.`); } } else if (slave.preg >= slave.pregWeek + (slave.pregData.normalBirth / 8)) { r.push(`Despite being pregnant for only ${slave.pregWeek} weeks,`); @@ -411,7 +411,7 @@ App.Desc.pregnancy = function(slave, {market, eventDescription} = {}) { } else if (slave.preg === slave.pregWeek * 4) { r.push(`${he} could pass for a girl nearly four times as far along.`); } else { - r.push(`${he} looks like a woman on ${his} ${ordinalSuffix(slave.preg)} week of pregnancy.`); + r.push(`${he} looks like a woman on ${his} ${ordinalSuffix(Math.round(slave.preg))} week of pregnancy.`); } } else { r.push(`Despite being pregnant for only ${slave.pregWeek} weeks, ${his} pregnancy is larger than anticipated.`); diff --git a/src/npc/generate/generateGenetics.js b/src/npc/generate/generateGenetics.js index 4cb2f91ea5bc8f5e003e207220625a40f7983f00..505d260e2b284654bc8cfc9dcbfac5fd22a3f4cf 100644 --- a/src/npc/generate/generateGenetics.js +++ b/src/npc/generate/generateGenetics.js @@ -71,8 +71,8 @@ globalThis.generateGenetics = (function() { father = activeFather; } if (father === undefined) { - if (V.incubator > 0) { - father = V.tanks.find(s => s.ID === actor2); + if (V.incubator.capacity > 0) { + father = V.incubator.tanks.find(s => s.ID === actor2); activeFather = 0; // activeFather = father? } } @@ -1287,10 +1287,10 @@ globalThis.generateChild = function(mother, ovum, incubator = false) { child.canRecruit = 0; child.hStyle = "long"; child.hLength = 300; - if (V.incubatorImprintSetting === "terror") { + if (V.incubator.setting.imprint === "terror") { child.origin = "$He was conditioned from birth into mindless terror in an aging tank."; child.tankBaby = 2; - } else if (V.incubatorImprintSetting === "trust") { + } else if (V.incubator.setting.imprint === "trust") { child.origin = "$He was conditioned from birth into trusting obedience in an aging tank."; child.tankBaby = 1; } else { diff --git a/src/npc/generate/generateRelatedSlave.js b/src/npc/generate/generateRelatedSlave.js index 6230dbd8c7f9107338df39745920201d7019ce1d..0d3918fbde840797d0d79479df0de181f5aca4f9 100644 --- a/src/npc/generate/generateRelatedSlave.js +++ b/src/npc/generate/generateRelatedSlave.js @@ -483,6 +483,11 @@ globalThis.generateRelatedSlave = (function() { // swap attraction [slave.attrXX, slave.attrXY] = [slave.attrXY, slave.attrXX]; + // consider face + if (slave.faceShape === "masculine") { + slave.faceShape = either("androgynous", "androgynous", "cute", "cute", "exotic", slave.faceShape, "normal", "normal", "sensual"); + } + // adjust voice and hair slave.voice = Math.min(3, slave.voice + 1); slave.hLength = 60; @@ -538,6 +543,11 @@ globalThis.generateRelatedSlave = (function() { // swap attraction [slave.attrXX, slave.attrXY] = [slave.attrXY, slave.attrXX]; + // consider face + if (slave.faceShape !== "masculine" && slave.faceShape !== "androgynous") { + slave.faceShape = either("androgynous", "masculine", slave.faceShape, slave.faceShape); + } + // adjust voice and hair slave.voice = Math.max(1, slave.voice - 1); slave.hLength = 10; diff --git a/src/npc/generate/newChildIntro.js b/src/npc/generate/newChildIntro.js index 98f019284dbc3ed0e3437d14bf47f79677aed30b..eeac10e98a9df3c8a657caceb2ae657776076c37 100644 --- a/src/npc/generate/newChildIntro.js +++ b/src/npc/generate/newChildIntro.js @@ -21,7 +21,7 @@ App.UI.newChildIntro = function(slave) { r = []; - r.push(`You completed the legalities before heading to ${V.incubatorName}, knowing the tank will release ${him} on your approach, and instruct ${V.assistant.name} to notify the new ${girl}'s parents to meet you in your office. As the tank exhumes the disoriented ${girl},`); + r.push(`You completed the legalities before heading to ${V.incubator.name}, knowing the tank will release ${him} on your approach, and instruct ${V.assistant.name} to notify the new ${girl}'s parents to meet you in your office. As the tank exhumes the disoriented ${girl},`); if (slave.preg > 0) { /* Unused for now. Fetal development would be accelerated as well. As a result, the released slave would be shocking to see in such a state. */ if (slave.geneticQuirks.progeria) { @@ -32,7 +32,7 @@ App.UI.newChildIntro = function(slave) { } else if (slave.geneticQuirks.neoteny && slave.actualAge > 12 && V.geneticMappingUpgrade === 0) { r.push(`you have to make sure the right ${girl} was released. ${He} was supposed to be ${slave.actualAge}, not this child sitting before you. You double check the machine's logs to be certain and it turns out ${he} really is ${slave.actualAge}, just abnormally young looking for ${his} age.`); } else { - r.push(`you help ${him} to ${his} feet${(V.incubatorReproductionSetting > 1) ? `, making sure to feel-up ${his} overdeveloped body,` : ``} and walk ${him} to your penthouse.`); + r.push(`you help ${him} to ${his} feet${(V.incubator.setting.reproduction > 1) ? `, making sure to feel-up ${his} overdeveloped body,` : ``} and walk ${him} to your penthouse.`); } r.push(`Though first you must decide upon a name for the new ${girl}; it won't take long to reach your office, so you have only <span class="orange">one chance to name ${him}</span> before you arrive.`); App.Events.addParagraph(el, r); @@ -610,7 +610,7 @@ App.UI.newChildIntro = function(slave) { } else if (V.PC.dick !== 0) { r.push(`${He} notices your privates differ from ${hers}, and thanks to the tank's teachings, <span class="hotpink">can't look away.</span>`); slave.devotion += 4; - if (V.incubatorReproductionSetting > 0) { + if (V.incubator.setting.reproduction > 0) { r.push(`${He} seems a little alarmed at ${his} nipples and clit stiffening to the `); if (canSee(slave)) { r.push(`sight`); @@ -627,7 +627,7 @@ App.UI.newChildIntro = function(slave) { } else if (V.PC.vagina !== -1) { r.push(`${He} notices your privates differ from ${hers}, and thanks to the tank's teachings, <span class="hotpink">can't look away.</span>`); slave.devotion += 4; - if (V.incubatorReproductionSetting > 0) { + if (V.incubator.setting.reproduction > 0) { r.push(`${He} seems a little alarmed at ${his} dick `); if (canAchieveErection(slave)) { r.push(`rapidly stiffening`); @@ -645,7 +645,7 @@ App.UI.newChildIntro = function(slave) { } } - if (V.incubatorReproductionSetting > 0) { + if (V.incubator.setting.reproduction > 0) { if (((slave.attrXX > 50) || (slave.behavioralQuirk === "adores women")) && (slave.behavioralFlaw !== "hates women") && (slave.trust >= -20)) { if (V.PC.boobs >= 900) { r.push(`${He} seems to think you're pretty, and is more willing to <span class="hotpink">try for your approval</span> than ${he} would otherwise be. ${He} openly ogles your rack at every opportunity.`); diff --git a/src/npc/generate/newSlaveIntro.js b/src/npc/generate/newSlaveIntro.js index fcc177501b0595ec6b71351af4530b0839461538..52ffd4cd0556247e6426dfc534f51f0f5d27c318 100644 --- a/src/npc/generate/newSlaveIntro.js +++ b/src/npc/generate/newSlaveIntro.js @@ -3158,7 +3158,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = } if (tankBorn) { r.push(`${He} accepts your groping, even becoming aroused by it, but might not be a breast fetishist, though ${he} <span class="hotpink">certainly enjoys the attention.</span> By the feel of ${his} nipples between your fingers, ${he} may certainly develop into one.`); - if (V.incubatorReproductionSetting === 2 && slave.boobs > 400) { + if (V.incubator.setting.reproduction === 2 && slave.boobs > 400) { r.push(`A loud moan and a distinct wetness in your hand quickly draw your attention to ${him}. It seems <span class="green">${he} is lactating!</span>`); slave.lactation = 1; slave.lactationDuration = 2; @@ -3331,12 +3331,12 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = } else if (slave.dick === 6) { r.push(`You grin sadistically at ${him} as ${his} massive dick fills both of your hands.`); } + r.push(`As ${he} begins to moan with lust, you grip down tightly and force ${him} to the floor. You straddle ${him} and lower your dripping pussy onto ${his} face${PC.dick !== 0 ? `, your erect cock coming to rest on ${his} forehead` : ``}. You continue stroking your toy's rod as ${he} eagerly begins eating you out. As ${his} cock begins to throb, anticipating ${his} upcoming orgasm,`); - if ((tankBorn) && (overpowerCheck(slave, V.PC) < random(1, 100)) && (V.incubatorReproductionSetting > 0)) { + if (tankBorn && (overpowerCheck(slave, V.PC) < random(1, 100)) && (V.incubator.setting.reproduction > 0)) { r.push(`${he} shoves you onto your back and deeply penetrates you. Before you can kick ${him} off, ${he} thrusts twice and unloads ${his} pent up orgasm deep into your pussy. ${He} pulls out with a huge smile on ${his} face and a <span class="hotpink">deep love</span> for ${his} mate. You glower at ${him} as cum pools from your stretched cunt; ${he} might not be a dom now, but ${he} may certainly become one.`); slave.devotion += 5; - slave.counter.penetrative++; - V.penetrativeTotal++; + seX(slave, "penetrative", V.PC, "vaginal"); if (random(1, 100) > 60 && slave.fetish === "none") { slave.fetish = "dom"; slave.fetishStrength = 20; @@ -3719,7 +3719,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = } else { r.push(`grumbling unhappily when ${he} finds no milk within.`); } - if ((overpowerCheck(slave, V.PC) < random(1, 100)) && slave.muscles > 30 && V.incubatorReproductionSetting > 0 && canAchieveErection(slave)) { + if ((overpowerCheck(slave, V.PC) < random(1, 100)) && slave.muscles > 30 && V.incubator.setting.reproduction > 0 && canAchieveErection(slave)) { r.push(`Suddenly, ${he} shoves you onto your back and begins enthusiastically fucking your breasts. Before you can push ${him} off, ${he} thrusts hard and unloads ${his} pent-up orgasm deep into your cleavage and across your face. ${He} sits back with a huge smile on ${his} face and a <span class="hotpink">new connection to you.</span> ${He} <span class="gold">recoils in surprise and fear</span> when you respond by slapping ${him} across the face for ${his} impudence. ${He} might not look like a dom, but ${he} may turn into one.`); slave.devotion += 5; slave.trust -= 5; diff --git a/src/npc/surgery/bodySwap/bodySwap.js b/src/npc/surgery/bodySwap/bodySwap.js index 36b5f8566661937eb26e2ef785712917cf7670e4..578616d1e1cf6eaf19cd013992ed5e5fcab667fa 100644 --- a/src/npc/surgery/bodySwap/bodySwap.js +++ b/src/npc/surgery/bodySwap/bodySwap.js @@ -325,7 +325,7 @@ globalThis.bodySwapSelection = function(soul) { globalThis.huskSwapSelection = function(body) { const el = new DocumentFragment(); const cost = 10000; - App.UI.DOM.appendNewElement("div", el, `"This operation is neither simple nor is it perfected. There are extreme health risks involved and no guarantee of success. Strap a slave into your remote surgery to consent to the operation. Indentured servants${(V.incubator > 0) || (V.nurseryChildren) ? ` and slaves with reserved children` : ``} are not eligible." + App.UI.DOM.appendNewElement("div", el, `"This operation is neither simple nor is it perfected. There are extreme health risks involved and no guarantee of success. Strap a slave into your remote surgery to consent to the operation. Indentured servants${(V.incubator.capacity > 0 || V.nurseryChildren) ? ` and slaves with reserved children` : ``} are not eligible." `, "scene-intro"); App.UI.DOM.appendNewElement("div", el, `Select the slave whose mind will be transferred into the waiting husk. Amputated slaves must not be wearing prosthetics. This operation will cost ${cashFormat(cost)}.`); diff --git a/src/npc/surgery/organFarm.js b/src/npc/surgery/organFarm.js index 22dcf3d2fbc2c8522a7376b87779e2d0c98518b1..02d5d02b20d82013add13144b3acf204a32c9bf6 100644 --- a/src/npc/surgery/organFarm.js +++ b/src/npc/surgery/organFarm.js @@ -115,7 +115,7 @@ App.Medicine.OrganFarm.growOrgan = function(slave, organType) { App.Medicine.OrganFarm.growIncubatorOrgan = function(slave, organType) { const organ = App.Medicine.OrganFarm.Organs.get(organType); - V.incubatorOrgans.push({type: organType, weeksToCompletion: organ.time, ID: slave.ID}); + V.incubator.organs.push({type: organType, weeksToCompletion: organ.time, ID: slave.ID}); cashX(-organ.cost, "slaveSurgery", slave); }; @@ -315,19 +315,21 @@ App.Medicine.OrganFarm.currentlyGrowing = function() { growLines.push(App.UI.DOM.makeElement("span", `ERROR: No slave with ID ${o.ID} found.`, "error")); } }); - V.incubatorOrgans.forEach(o => { - const tank = V.tanks.find((t) => t.ID === o.ID); - if (tank !== undefined) { - if (o.weeksToCompletion <= 0) { - finishLines.push(`${tank.slaveName}'s ${App.Medicine.OrganFarm.Organs.get(o.type).name}.`); + if (V.incubator.capacity > 0) { + V.incubator.organs.forEach(o => { + const tank = V.incubator.tanks.find((t) => t.ID === o.ID); + if (tank !== undefined) { + if (o.weeksToCompletion <= 0) { + finishLines.push(`${tank.slaveName}'s ${App.Medicine.OrganFarm.Organs.get(o.type).name}.`); + } else { + growLines.push(`${tank.slaveName}'s ${App.Medicine.OrganFarm.Organs.get(o.type).name}, ${ + weeksToCompletion(o.weeksToCompletion)} week(s) left.`); + } } else { - growLines.push(`${tank.slaveName}'s ${App.Medicine.OrganFarm.Organs.get(o.type).name}, ${ - weeksToCompletion(o.weeksToCompletion)} week(s) left.`); + growLines.push(App.UI.DOM.makeElement("span", `ERROR: No tank with ID ${o.ID} found.`, "error")); } - } else { - growLines.push(App.UI.DOM.makeElement("span", `ERROR: No tank with ID ${o.ID} found.`, "error")); - } - }); + }); + } V.completedOrgans.forEach(o => { const slave = getSlave(o.ID); diff --git a/src/player/desc/playerBelly.js b/src/player/desc/playerBelly.js index 1ea8b10e09c17c835b77a16c04878f6e7821de7e..4ae76b84930d27ab39c4eadbf68e5a6731af9b2a 100644 --- a/src/player/desc/playerBelly.js +++ b/src/player/desc/playerBelly.js @@ -1,9 +1,7 @@ App.Desc.Player.belly = function() { const r = []; const children = V.PC.pregType > 1 ? "children" : "child"; - let fertRefresh; - let toSearch; - let babyDaddy; + const fertRefresh = V.PC.refreshment.includes("fertility") ? 1 : 0; let adjust; const {girlP} = getPronouns(V.PC).appendSuffix("P"); @@ -87,11 +85,6 @@ App.Desc.Player.belly = function() { } else if (V.PC.belly >= 105000) { r.push(`You can barely function any more. You're so big and heavy that even the simplest of actions requires both intense effort and thought just to get it done. Your frumpy dress is also at its limit, and much to your annoyance, your children will not stay still enough to let you fix it.`); } else if (V.PC.belly >= 90000) { - toSearch = V.PC.refreshment.toLowerCase(); - fertRefresh = 0; - if (toSearch.indexOf("fertility") !== -1) { - fertRefresh = 1; - } r.push(`You may have a`); if (fertRefresh === 1) { r.push(`problem, but then again, you did take all those fertility drugs, so you can't really say you didn't want it.`); @@ -222,7 +215,7 @@ App.Desc.Player.belly = function() { } else if (V.PC.preg === 22) { r.push(`Something startling happened this week; while enjoying a slave, your belly button popped out!`); } else if (V.PC.preg === 8 && V.PC.pregSource > 0) { - babyDaddy = findFather(V.PC.pregSource); + const babyDaddy = findFather(V.PC.pregSource); if (babyDaddy) { adjust = babyDaddy.counter.PCKnockedUp++; adjustFatherProperty(babyDaddy, "PCKnockedUp", adjust); @@ -254,10 +247,6 @@ App.Desc.Player.belly = function() { } else if (V.PC.belly >= 105000) { r.push(`You can barely function any more. You're so big and heavy that even the simplest of actions requires both intense effort and thought just to get it done. None of your poses work with your gravid body either, and you're practically popping out of your skimpiest outfit.`); } else if (V.PC.belly >= 90000) { - let toSearch = V.PC.refreshment.toLowerCase(), fertRefresh = 0; - if (toSearch.indexOf("fertility") !== -1) { - fertRefresh = 1; - } if (fertRefresh === 1) { r.push(`You may have a problem, but then again, you did take all those fertility drugs, so you can't really say you didn't want it.`); } else { @@ -367,7 +356,7 @@ App.Desc.Player.belly = function() { } else if (V.PC.preg === 22) { r.push(`Something startling happened this week; while enjoying a slave, your belly button popped out!`); } else if (V.PC.preg === 8 && V.PC.pregSource > 0) { - babyDaddy = findFather(V.PC.pregSource); + const babyDaddy = findFather(V.PC.pregSource); if (babyDaddy) { adjust = babyDaddy.counter.PCKnockedUp++; adjustFatherProperty(babyDaddy, "PCKnockedUp", adjust); @@ -399,10 +388,6 @@ App.Desc.Player.belly = function() { } else if (V.PC.belly >= 105000) { r.push(`You can barely function any more. You're so big and heavy that even the simplest of actions requires both intense effort and thought just to get it done. Your suit buttons keep popping, and much to your annoyance, your ${children} will not stay still enough to let you redo them.`); } else if (V.PC.belly >= 90000) { - let toSearch = V.PC.refreshment.toLowerCase(), fertRefresh = 0; - if (toSearch.indexOf("fertility") !== -1) { - fertRefresh = 1; - } if (fertRefresh === 1) { r.push(`You may have a problem, but then again, you did take all those fertility drugs, so you can't really say you didn't want it.`); } else { @@ -490,7 +475,7 @@ App.Desc.Player.belly = function() { } else if (V.PC.preg === 22) { r.push(`Something startling happened this week; while enjoying a slave, your belly button popped out!`); } else if (V.PC.preg === 8 && V.PC.pregSource > 0) { - babyDaddy = findFather(V.PC.pregSource); + const babyDaddy = findFather(V.PC.pregSource); if (babyDaddy) { adjust = babyDaddy.counter.PCKnockedUp++; adjustFatherProperty(babyDaddy, "PCKnockedUp", adjust); diff --git a/src/pregmod/analyzePlayerPregnancy.tw b/src/pregmod/analyzePlayerPregnancy.tw index ccc64318142b41f749cab12c136a35fcbf0cfac0..f38748459d2db7adc685d53a12993fd1a20164ba 100644 --- a/src/pregmod/analyzePlayerPregnancy.tw +++ b/src/pregmod/analyzePlayerPregnancy.tw @@ -7,7 +7,7 @@ <</if>> <<set $nextButton = "Continue", $nextLink = $storedLink>> -<<set _WL = $PC.womb.length, _incubatorReservations = WombReserveCount($PC, "incubator"), _nurseryReservations = WombReserveCount($PC, "nursery"), _freeTanks = $incubator - $tanks.length, _freeCribs = $nursery - $cribs.length>> +<<set _WL = $PC.womb.length, _incubatorReservations = WombReserveCount($PC, "incubator"), _nurseryReservations = WombReserveCount($PC, "nursery"), _freeTanks = $incubator.capacity - $incubator.tanks.length, _freeCribs = $nursery - $cribs.length>> <<set _reservedChildren = FetusGlobalReserveCount("incubator")>> <<set _reservedChildrenNursery = FetusGlobalReserveCount("nursery")>> @@ -25,24 +25,24 @@ </div> </p> - <<if $incubator + $nursery > 0>> + <<if $incubator.capacity > 0 || $nursery > 0>> <p> - <<if $incubator > 0>> + <<if $incubator.capacity > 0>> <<if _incubatorReservations > 0>> - <<link "Remove all of your children from $incubatorName" "Analyze PC Pregnancy">> + <<link "Remove all of your children from $incubator.name" "Analyze PC Pregnancy">> <<run WombChangeReserveType($PC, "incubator", "")>> <<set _reservedChildren -= _incubatorReservations>> <</link>> | <</if>> <<if _incubatorReservations < _WL && (_reservedChildren + _WL - _incubatorReservations <= _freeTanks)>> - <<link "Keep all of your children in $incubatorName" "Analyze PC Pregnancy">> + <<link "Keep all of your children in $incubator.name" "Analyze PC Pregnancy">> <<run WombChangeReserveType($PC, "nursery", "incubator")>> <<run WombChangeReserveType($PC, "", "incubator")>> <<set _reservedChildrenNursery -= _nurseryReservations>> <<set _reservedChildren += _WL - _incubatorReservations>> <</link>> <<elseif _incubatorReservations < _WL>> - There is not enough free space in $incubatorName for the rest of your children. + There is not enough free space in <<= $incubator.name>> for the rest of your children. <</if>> <</if>> </p> @@ -167,7 +167,7 @@ </div> <</if>> <</if>> - <<if $incubator > 0 || $nursery > 0>> + <<if $incubator.capacity > 0 || $nursery > 0>> <div class="indent"> Reserved: $PC.womb[_ap].reserve </div> @@ -184,15 +184,15 @@ <</if>> </div> <</if>> - <<if $incubator > 0>> + <<if $incubator.capacity > 0>> <div class="indent"> <<if $PC.womb[_ap].reserve === "incubator">> - <<link "Don't keep this child $incubatorName" "Analyze PC Pregnancy">> + <<link "Don't keep this child $incubator.name" "Analyze PC Pregnancy">> <<set $PC.womb[_ap].reserve = "">> <<set _reservedChildren-->> <</link>> <<elseif _freeTanks - _reservedChildren > 0>> - <<link "Keep this child in $incubatorName" "Analyze PC Pregnancy">> + <<link "Keep this child in $incubator.name" "Analyze PC Pregnancy">> <<if $PC.womb[_ap].reserve === "nursery">> <<set _reservedChildrenNursery-->> <</if>> @@ -200,7 +200,7 @@ <<set _reservedChildren++>> <</link>> <<else>> - There is not enough free space to keep this child in $incubatorName. + There is not enough free space to keep this child in <<= $incubator.name>>. <</if>> </div> <</if>> diff --git a/src/pregmod/analyzePregnancy.tw b/src/pregmod/analyzePregnancy.tw index 18da93ad6211aba4c58b52bca813c57460fc0051..609d75d51a87bcaa7c679cabfa254cc91a75a6dd 100644 --- a/src/pregmod/analyzePregnancy.tw +++ b/src/pregmod/analyzePregnancy.tw @@ -8,7 +8,7 @@ <<set $nextButton = "Continue", $nextLink = $storedLink>> <<run App.Utils.setLocalPronouns(getSlave($AS))>> -<<set _WL = getSlave($AS).womb.length, _incubatorReservations = WombReserveCount(getSlave($AS), "incubator"), _nurseryReservations = WombReserveCount(getSlave($AS), "nursery"), _freeTanks = $incubator - $tanks.length, _freeCribs = $nursery - $cribs.length>> +<<set _WL = getSlave($AS).womb.length, _incubatorReservations = WombReserveCount(getSlave($AS), "incubator"), _nurseryReservations = WombReserveCount(getSlave($AS), "nursery"), _freeTanks = $incubator.capacity - $incubator.tanks.length, _freeCribs = $nursery - $cribs.length>> <<set _reservedChildren = FetusGlobalReserveCount("incubator")>> <<set _reservedChildrenNursery = FetusGlobalReserveCount("nursery")>> @@ -61,24 +61,24 @@ </p> <p> - <<if $incubator + $nursery > 0>> + <<if $incubator.capacity > 0 || $nursery > 0>> <div> - <<if $incubator > 0>> + <<if $incubator.capacity > 0>> <<if _incubatorReservations > 0>> - <<link "Remove all of $his children from $incubatorName" "Analyze Pregnancy">> + <<link "Remove all of $his children from $incubator.name" "Analyze Pregnancy">> <<run WombChangeReserveType(getSlave($AS), "incubator", "")>> <<set _reservedChildren -= _incubatorReservations>> <</link>> | <</if>> <<if _incubatorReservations < _WL && (_reservedChildren + _WL - _incubatorReservations <= _freeTanks)>> - <<link "Keep all of $his children in $incubatorName" "Analyze Pregnancy">> + <<link "Keep all of $his children in $incubator.name" "Analyze Pregnancy">> <<run WombChangeReserveType(getSlave($AS), "nursery", "incubator")>> <<run WombChangeReserveType(getSlave($AS), "", "incubator")>> <<set _reservedChildrenNursery -= _nurseryReservations>> <<set _reservedChildren += _WL - _incubatorReservations>> <</link>> <<elseif _incubatorReservations < _WL>> - There is not enough free space in $incubatorName for the rest of $his children. + There is not enough free space in <<= $incubator.name>> for the rest of $his children. <</if>> <</if>> </div> @@ -202,7 +202,7 @@ </div> <</if>> <</if>> - <<if $incubator > 0 || $nursery > 0>> + <<if $incubator.capacity > 0 || $nursery > 0>> <div class="indent"> Reserved: <<= getSlave($AS).womb[_ap].reserve>> </div> @@ -219,15 +219,15 @@ <</if>> </div> <</if>> - <<if $incubator > 0>> + <<if $incubator.capacity > 0>> <div class="indent"> <<if getSlave($AS).womb[_ap].reserve === "incubator">> - <<link "Don't keep this child in $incubatorName" "Analyze Pregnancy">> + <<link "Don't keep this child in $incubator.name" "Analyze Pregnancy">> <<set getSlave($AS).womb[_ap].reserve = "">> <<set _reservedChildren-->> <</link>> <<elseif _freeTanks - _reservedChildren > 0>> - <<link "Keep this child in $incubatorName" "Analyze Pregnancy">> + <<link "Keep this child in $incubator.name" "Analyze Pregnancy">> <<if getSlave($AS).womb[_ap].reserve === "nursery">> <<set _reservedChildrenNursery-->> <</if>> @@ -235,7 +235,7 @@ <<set _reservedChildren++>> <</link>> <<else>> - There is not enough free space to keep this child in $incubatorName. + There is not enough free space to keep this child in <<= $incubator.name>>. <</if>> </div> <</if>> diff --git a/src/pregmod/artificialInsemination.tw b/src/pregmod/artificialInsemination.tw index fa5e2e35b2517adff6ae51f1380dd6cbebc32339..46eba1c2a0d05108212c8dd353e02cbadae7db66 100644 --- a/src/pregmod/artificialInsemination.tw +++ b/src/pregmod/artificialInsemination.tw @@ -23,16 +23,13 @@ __Select an eligible slave to serve as the semen donatrix:__ <br>//You have no slaves with potent sperm.// <</if>> -<<if $tanks.length > 0 && $incubatorReproductionSetting == 2>> - <br><br> - - __Incubator settings are resulting in large-scale fluid secretion. Select an eligible incubatee to milk for semen:__ - +<<if $incubator.tanks.length > 0 && $incubator.setting.reproduction === 2>> + <br><br>__Incubator settings are resulting in large-scale fluid secretion. Select an eligible incubatee to milk for semen:__ <br> - <<for _ai = 0; _ai < $tanks.length; _ai++>> - <<capture _ai>> - <<if $tanks[_ai].balls > 0 && $tanks[_ai].dick > 0 && canBreed(getSlave($AS), $tanks[_ai])>> - <br>[[$tanks[_ai].slaveName|Surgery Degradation][$impregnatrix = $tanks[_ai], cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), $surgeryType = "insemination"]] + <<for _tank range $incubator.tanks>> + <<capture _tank>> + <<if _tank.balls > 0 && _tank.dick > 0 && canBreed(getSlave($AS), _tank)>> + <br>[[_tank.slaveName|Surgery Degradation][$impregnatrix = _tank, cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), $surgeryType = "insemination"]] <<set _eligibilityI = 1>> <</if>> <</capture>> diff --git a/src/pregmod/sePlayerBirth.tw b/src/pregmod/sePlayerBirth.tw index b71305beb0d60f1b8e5218ad0f37ee5258a34bc8..4d897a06853fd85951b5946d47a81103f4726cc2 100644 --- a/src/pregmod/sePlayerBirth.tw +++ b/src/pregmod/sePlayerBirth.tw @@ -378,7 +378,7 @@ You arrange yourself to give birth, relaxing until your body urges you to begin <<if $PC.curBabies[0].reserve === "incubator">> @@.pink;You set <<if _gender == "XX">>her<<else>>him<</if>> aside for incubation.@@ - <<if $tanks.length < $incubator>> + <<if $incubator.tanks.length < $incubator.capacity>> <<run App.Facilities.Incubator.newChild(generateChild($PC, $PC.curBabies[0], true))>> <</if>> <<elseif $PC.curBabies[0].reserve === "nursery">> @@ -430,7 +430,7 @@ You arrange yourself to give birth, relaxing until your body urges you to begin <</if>> <<if $PC.curBabies[_p].reserve == "incubator">> @@.pink;You set <<if $PC.curBabies[_p].genetics.gender == "XX">>her<<else>>him<</if>> aside for incubation.@@ - <<if $tanks.length < $incubator>> + <<if $incubator.tanks.length < $incubator.capacity>> <<run App.Facilities.Incubator.newChild(generateChild($PC, $PC.curBabies[_p], true))>> <</if>> <<run $PC.curBabies.splice($PC.curBabies[_p], 1)>> diff --git a/src/pregmod/surrogacyWorkaround.tw b/src/pregmod/surrogacyWorkaround.tw index 3220c7446895bab9cccc7510d26f13c9ae1cd00f..68e15ef2a4aa8e62c52dc5aba26be3d5c242cd46 100644 --- a/src/pregmod/surrogacyWorkaround.tw +++ b/src/pregmod/surrogacyWorkaround.tw @@ -42,17 +42,14 @@ __Semen donatrix: _impreg __ <br>//You have no slaves with potent sperm.// <</if>> -<<if $tanks.length > 0 && $incubatorReproductionSetting == 2>> - <br><br> - - __Incubator settings are resulting in large-scale fluid secretion. Select an eligible incubatee to milk for semen:__ - +<<if $incubator.tanks.length > 0 && $incubator.setting.reproduction === 2>> + <br><br>__Incubator settings are resulting in large-scale fluid secretion. Select an eligible incubatee to milk for semen:__ <br> - <<for _sw3 = 0; _sw3 < $tanks.length; _sw3++>> - <<capture _sw3>> - <<if $tanks[_sw3].balls > 0 && $tanks[_sw3].dick > 0 && canBreed($donatrix, $tanks[_sw3])>> - <<set _name3 = $tanks[_sw3].slaveName>> - [[_name3|Surrogacy Workaround][$impregnatrix = $tanks[_sw3]]] + <<for _tank range $incubator.tanks>> + <<capture _tank>> + <<if _tank.balls > 0 && _tank.dick > 0 && canBreed($donatrix, _tank)>> + <<set _name3 = _tank.slaveName>> + [[_name3|Surrogacy Workaround][$impregnatrix = _tank]] <<set _eligibilityI = 1>> <</if>> <</capture>> diff --git a/src/pregmod/theBlackMarket.tw b/src/pregmod/theBlackMarket.tw index 0cfef465f7316a0332d22e86327d0528c68d126e..07b6a69200b45aa86cb05aab199defaa9c9e9338 100644 --- a/src/pregmod/theBlackMarket.tw +++ b/src/pregmod/theBlackMarket.tw @@ -290,19 +290,21 @@ He gestures to a door in the back of the stall. "The good shit's back there<<if <br>"I'm not sure about this one, but you might still be interested. Let me just begin with a story... some time ago, there was a man with a very pregnant girl in tow. Not so unusual in these days, but what made it really stand out was the girl's age — she couldn't have been any older then six! And looked ready to birth full sized triplets, no less. To top it all off, she did not look stressed by it at all, which was just amazing, given her size. The man said that he invented some sort of subsystem for those modern incubators to prep the occupant's body in a special way, and that this girl was a test subject. I do not understand much about this technical stuff, but the documentation seems legit enough. If you like, I can sell it to you; no guarantees though, on either the construction or the results." <<if $arcologies[0].FSRepopulationFocus >= 60>> <p style="text-indent:2em"> As a repopulationist society, you already have similar documentation in your possession. Buying this would be a waste of money. </p> - <<elseif $incubatorUpgradeReproduction < 1 || $incubatorUpgradeOrgans < 1 || $dispensaryUpgrade < 1 || $bellyImplants < 1 || $incubatorUpgradeGrowthStims < 1>> + <<elseif $incubator.capacity === 0 || $dispensaryUpgrade < 1 || $bellyImplants < 1>> <p style="text-indent:2em"> You lack the facilities needed to manufacture something this complex, so while you can buy its documentation, actual production and installation of the module is currently out of your reach.</p> <</if>> <<else>> You have no interest in research that involves pregnancy. <<run $merchantIllegalWares.delete("BlackmarketPregAdaptation")>> <</if>> - <<elseif $incubatorUpgradePregAdaptation == 0 && $minimumSlaveAge > 6>> - You have no interest in such a distasteful offer. - <<run $merchantIllegalWares.delete("BlackmarketPregAdaptation")>> - <<else>> - You already possess the incubator pregnancy adaptation module. - <<run $merchantIllegalWares.delete("BlackmarketPregAdaptation")>> + <<elseif $incubator.capacity > 0>> + <<if $incubator.upgrade.pregAdaptation === 0 && $minimumSlaveAge > 6>> + You have no interest in such a distasteful offer. + <<run $merchantIllegalWares.delete("BlackmarketPregAdaptation")>> + <<else>> + You already possess the incubator pregnancy adaptation module. + <<run $merchantIllegalWares.delete("BlackmarketPregAdaptation")>> + <</if>> <</if>> <<case "RapidCellGrowthFormula">> diff --git a/src/uncategorized/RESS.tw b/src/uncategorized/RESS.tw index dcd7cbd613b7dc99e9868878babfc11dfd5b5cb5..28ea635f285f176185505f4a25fdd67d62190778 100644 --- a/src/uncategorized/RESS.tw +++ b/src/uncategorized/RESS.tw @@ -2307,7 +2307,7 @@ Lately, you've noticed that $he reacts to these <<if canSee($activeSlave)>>sight <<case "huge naturals">> -<<= App.UI.slaveDescriptionDialog($activeSlave)>> comes before you naked for a routine inspection. You take particular care to examine $his massive breasts, since they've grown so large it's necessary to check for unsightly veins, stretch marks, and the like. You note $his big nipples with appreciation. Since $his breasts are so enormous and completely free of implants, they're quite saggy. When $he stands, +<<= App.UI.slaveDescriptionDialog($activeSlave)>> comes before you naked for a routine inspection. You take particular care to examine $his massive breasts, since they've grown so large it's necessary to check for unsightly veins, stretch marks, and the like. You note $his big nipples with appreciation. Since $his breasts are so enormous and completely free of implants, they're quite heavy. When $he stands, <<if $activeSlave.boobShape == "saggy" || $activeSlave.boobShape == "downward-facing">> $his nipples face out and down. <<else>> @@ -3921,26 +3921,6 @@ squeezed painfully by the inadequate doorway and framing the attractive rear vie <br><br> $He cranes $his neck, glancing over $his shoulder to give you a pleading look. -<<case "devoted fearful slave">> - -You are working late tonight, poring over some particularly troublesome business documents — though, thankfully, the end appears to be in sight. The sun has all but completely slipped below the horizon, drowning your office in moody twilight. Seeing that you are finally approaching the end of a long day, $assistant.name takes the liberty of having a -<<if $PC.refreshmentType == 0>> - $PC.refreshment -<<elseif $PC.refreshmentType == 1>> - glass of $PC.refreshment -<<elseif $PC.refreshmentType == 2>> - plate of $PC.refreshment -<<elseif $PC.refreshmentType == 3>> - line of $PC.refreshment -<<elseif $PC.refreshmentType == 4>> - syringe of $PC.refreshment -<<elseif $PC.refreshmentType == 5>> - pill of $PC.refreshment -<<elseif $PC.refreshmentType == 6>> - tab of $PC.refreshment -<</if>> -brought in to you. This time <<= App.UI.slaveDescriptionDialog($activeSlave)>> has been sent to deliver it. $He loves you, but fears you simultaneously. Such relationships were not uncommon before the advent of modern slavery, but they are especially prevalent in its wake, as fear has proven a highly effective control method for those slaveowners with the inclination and relative lack of conscience to utilize it as such. You hurriedly put the finishing touches on your work, eager to be done, and then reach for your $PC.refreshment. $activeSlave.slaveName flinches at your sudden movement, taking a few frightened steps back, nearly dropping the serving tray and leaving you grasping at thin air. It was a simple fear response; $he didn't realize you were ready for your treat and instinctively thought you were reaching out to strike $him. Tears swell up in $his eyes as $he apologizes profusely. - <<default>> <br>ERROR: bad RESS event $RESSevent @@ -6305,7 +6285,7 @@ brought in to you. This time <<= App.UI.slaveDescriptionDialog($activeSlave)>> h <<else>> inserting slowly into $his still-tight pussy. <</if>> - You pump $him hard from the first stroke, making it clear you're taking your pleasure, leaving $him nothing to do but cling to the door frame and try to ride it out. At first $he was squashed painfully against it, but $he manages to <<if ($activeSlave.belly >= 5000)>>shift $his _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>belly<</if>>beside the frame and<</if>> cock $his hips out at enough of an angle that $he can get back to + You pump $him hard from the first stroke, making it clear you're taking your pleasure, leaving $him nothing to do but cling to the door frame and try to ride it out. At first $he was squashed painfully against it, but $he manages to <<if ($activeSlave.belly >= 5000)>>shift $his _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>belly<</if>> beside the frame and<</if>> cock $his hips out at enough of an angle that $he can get back to <<if ($activeSlave.dick > 6) && !canAchieveErection($activeSlave)>> rubbing $his oversized cock between it and $his leg. <<elseif ($activeSlave.dick > 0) && !canAchieveErection($activeSlave)>> @@ -6480,7 +6460,7 @@ brought in to you. This time <<= App.UI.slaveDescriptionDialog($activeSlave)>> h <<else>> worsened by $his tight little sphincter. <</if>> - You ravage $his ass hard from the first stroke, making it clear you're taking your pleasure, leaving $him nothing to do but cling to the door frame and try to ride it out. At first $he was squashed painfully against it, but $he manages to <<if ($activeSlave.belly >= 5000)>>shift $his _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>belly<</if>>beside the frame and<</if>> cock $his hips out at enough of an angle that $he can get back to + You ravage $his ass hard from the first stroke, making it clear you're taking your pleasure, leaving $him nothing to do but cling to the door frame and try to ride it out. At first $he was squashed painfully against it, but $he manages to <<if ($activeSlave.belly >= 5000)>>shift $his _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>belly<</if>> beside the frame and<</if>> cock $his hips out at enough of an angle that $he can get back to <<if ($activeSlave.dick > 6) && !canAchieveErection($activeSlave)>> rubbing $his oversized cock between it and $his leg <<elseif ($activeSlave.dick > 0) && !canAchieveErection($activeSlave)>> @@ -12037,7 +12017,7 @@ brought in to you. This time <<= App.UI.slaveDescriptionDialog($activeSlave)>> h <</if>> <</replace>> <</link>> -<<if canDoAnal($activeSlave) || canDoVaginal($activeSlave) && $activeSlave.belly < 100000>> +<<if (canDoAnal($activeSlave) || canDoVaginal($activeSlave)) && $activeSlave.belly < 100000>> <br><<link "Use $him so they swing around">> <<replace "#result">> You tell $him to kneel on the smooth floor. $He knows this means doggy style, so $he compliantly arches $his back and cocks $his hips to offer $himself to you. You<<if $PC.dick == 0>> don a strap-on and<</if>> enter @@ -16832,10 +16812,20 @@ brought in to you. This time <<= App.UI.slaveDescriptionDialog($activeSlave)>> h You order $him to get beneath your desk <<if hasAllLimbs($activeSlave)>>on all fours<<else>>and bend over<</if>>, a task that $he carries out quickly and obediently. Once as comfortable as $he can be perched awkwardly underneath your desk, <</if>> $he braces - <<if !canDoAnal($activeSlave)>> + <<if canDoVaginal($activeSlave)>> + <<if $activeSlave.vagina == 0>> + $himself for the loss of $his virginity + <<else>> + $himself for the inevitable rough fucking + <</if>> + <<elseif !canDoAnal($activeSlave)>> $himself for the inevitable molestation <<else>> - $his ass for the inevitable rough anal + <<if $activeSlave.anus == 0>> + $himself for the anal breaking + <<else>> + $his ass for the inevitable rough anal + <</if>> <</if>> $he assumes must be coming. Fortunately for $him, it never does. Instead, you kick your feet up and rest them on the small of $his back. After a few hours of objectifying degradation in this way, you rise from your chair to attend business elsewhere in your penthouse and dismiss $activeSlave.slaveName. Although you didn't fuck $him, $his experience as a piece of furniture for your comfort @@.hotpink;has increased $his submissiveness.@@ <<set $activeSlave.devotion += 5>> @@ -17729,30 +17719,6 @@ brought in to you. This time <<= App.UI.slaveDescriptionDialog($activeSlave)>> h <</replace>> <</link>> -<<case "devoted fearful slave">> - -<<link "Comfort $him">> - <<replace "#result">> - You set the $PC.refreshment aside on your desk for now, and take $him gently by the hand. You lead $him out onto the balcony of the Penthouse over to the railing. $He obediently assumes a position for you, bracing $his arm<<if hasBothArms($activeSlave)>>s<</if>> on the railing, arching $his back and sticking $his bottom out to present $himself for use. Much to $his surprise, your hand guides $him back into a comfortable position, and simply pulls $him close into you. You explain to $him that $he is a good $girl who tries $his best, and that you don't want $him to fear you. After a little coddling, you fall silent, and simply hold $him tight, watching the street lights of $arcologies[0].name blink to life one after the other, slowly transforming the arcology into a vibrant, elegant light show. $activeSlave.slaveName can hardly believe what's happening, but eventually is able to relax fully, melting into your arms like butter into a hot pan. $He rests $his head lovingly against your chest and silently appreciates the view with you. When $he eventually departs, $he does so with @@.hotpink;tears of joy,@@ @@.mediumaquamarine;rather than fear,@@ welling behind $his eyes. - <<set $activeSlave.devotion += 15>> - <<set $activeSlave.trust += 15>> - <</replace>> -<</link>> -<br><<link "Gently reassure $him">> - <<replace "#result">> - You set the $PC.refreshment aside on your desk for now, and take $him gently by the shoulders. You assure $him that $he is a good $girl who tries $his best, and that $he won't be hurt so long as $he remains well behaved. You affectionately stroke $his shoulders with your thumbs as you speak in a further attempt to calm $him down. $He is highly receptive to your soothing touch and kind words. $He dries $his eyes, gives you an @@.hotpink;affectionate kiss@@ and @@.mediumaquamarine;thanks you prettily@@ before departing. - <<set $activeSlave.devotion += 10>> - <<set $activeSlave.trust += 10>> - <</replace>> -<</link>> -<br><<link "Vindicate $his fears">> - <<replace "#result">> - You set the $PC.refreshment aside on your desk, then, when the slave least expects, whirl around, delivering a fierce backhand slap to $his <<if $activeSlave.face >= -10>>pretty<<else>>homely<</if>> face that nearly sends $him to the ground. You instruct $him to be more careful in future, and that you won't tolerate slaves that shy away from you for any reason, nor ones that are clumsy enough to nearly drop a serving tray while standing still. $He all but begs <<if hasAllLimbs($activeSlave)>>upon $his hands and knees<<else>>and grovels<</if>> for your forgiveness. You dismiss $him without further comment, and sit down to enjoy your evening refreshments. The battered, dejected slave slinks away, @@.gold;choking down tears.@@ $He will be @@.hotpink;less careless@@ in the future. - <<set $activeSlave.devotion += 10>> - <<set $activeSlave.trust -= 10>> - <</replace>> -<</link>> - <<default>> <br>ERROR: bad RESS event $RESSevent <</switch>> diff --git a/src/uncategorized/RETS.tw b/src/uncategorized/RETS.tw index d312409e0497b57c23e35eb23faa6d524a9bf620..4360b0a2d140c8cda4176f1d7c487dc78c335bdb 100644 --- a/src/uncategorized/RETS.tw +++ b/src/uncategorized/RETS.tw @@ -43,30 +43,6 @@ <<switch $RETSevent>> -<<case "taste test">> - -<<if Array.isArray($RETasteTestSubIDs)>> - <<set $RETasteTestSubIDs = $RETasteTestSubIDs.shuffle()>> - <<for $i = 0; $i < $RETasteTestSubIDs.length; $i++>> - <<if $eventSlave.ID != $RETasteTestSubIDs[$i]>> - <<set $subSlave = $slaves[$slaveIndices[$RETasteTestSubIDs[$i]]]>> - <<break>> - <</if>> - <</for>> -<</if>> - -<<case "boob collision">> - -<<if Array.isArray($REBoobCollisionSubIDs)>> - <<set $REBoobCollisionSubIDs = $REBoobCollisionSubIDs.shuffle()>> - <<for $i = 0; $i < $REBoobCollisionSubIDs.length; $i++>> - <<if $eventSlave.ID != $REBoobCollisionSubIDs[$i]>> - <<set $subSlave = $slaves[$slaveIndices[$REBoobCollisionSubIDs[$i]]]>> - <<break>> - <</if>> - <</for>> -<</if>> - <<case "cockmilk interception">> <<if Array.isArray($RECockmilkInterceptionIDs)>> @@ -96,7 +72,7 @@ <<set _clothesTemp2 = $subSlave.clothes>> <<switch $RETSevent>> /*Some events start with the slave naked (any event that starts with the daily inspection, for example). Here we switch their clothing just for the image to load, then switch it back quickly so the player's choice is not messed up.*/ - <<case "boob collision" "cockmilk interception" "incestuous nursing" "taste test">> + <<case "cockmilk interception" "incestuous nursing">> <<set $activeSlave.clothes = "no clothing">> <<set $subSlave.clothes = "no clothing">> <</switch>> @@ -127,265 +103,6 @@ <<switch $RETSevent>> -<<case "taste test">> - -You look into the part of the kitchens used for slave feeding one morning during a quiet time, finding the area deserted except for <<= App.UI.slaveDescriptionDialog($activeSlave)>>. $He -<<if canSee($activeSlave)>> - sees you enter -<<elseif canHear($activeSlave)>> - hears you enter -<<else>> - feels a light touch on $his shoulder -<</if>> - and -<<if $cockFeeder == 1>> - stops sucking $his feeder phallus, -<<else>> - puts $his cup of liquid slave food down, -<</if>> -but you make a dismissive "go back to what you were doing" <<if canSee($activeSlave)>>gesture<<elseif canHear($activeSlave)>>sound<<else>>nudge<</if>>, and $he obediently -<<if $cockFeeder == 1>> - resumes sucking down -<<else>> - goes back to drinking -<</if>> -$his breakfast. You pull out a tablet and start getting some work done, enjoying the low, human sounds of your chattel going about their business in the rooms all around you. <<= capFirstChar(contextualIntro($activeSlave, $subSlave, true))>> pads in, looking not quite awake yet. Not noticing you in _his2 stupor, _he2 -<<if $cockFeeder == 1>> - chooses the phallus next to $activeSlave.slaveName's and starts to suck too. -<<else>> - draws _his2 ration and heads over towards $activeSlave.slaveName to drink it next to $him. -<</if>> -_He2's clearly looking for some companionship this morning, but _his2 gears visibly turn for a while before _his2 sleepy head can come up with something to say. Both the slaves are allowed some variety of flavor in their liquid slave food, so _he2 finally settles on that. -<<run Enunciate($subSlave)>> -"What flavor did you choo<<s>>e?" _he2 asks $activeSlave.slaveName. -<br><br> -<<run Enunciate($activeSlave)>> -$activeSlave.slaveName -<<if $cockFeeder == 1>> - pulls $his mouth off $his feeder with a luscious pop. -<<else>> - lowers $his cup for a moment. -<</if>> -<<if $activeSlave.preg > $activeSlave.pregData.normalBirth/2>> - "The <<s>>our pickle flavor," $he responds, patting $his rounded middle. "I ju<<s>>t can't get enough of it." -<<else>> - "The tart fruity kind," $he responds. "It'<<s>> refre<<sh>>ing fir<<s>>t thing in the morning." -<</if>> -<br><br> -<<run Enunciate($subSlave)>> -"Oh," says $subSlave.slaveName. "Um, can I try <<s>>ome?" -<br><br> -$activeSlave.slaveName smiles and murmurs, "Mm hm." There is a distinct <<if canSee($activeSlave)>>glint in $his eye<<else>>look on $his face<</if>>. $He's got a healthy libido, to put it mildly. Like all slaves, $subSlave.slaveName sleeps nude and hasn't gotten dressed yet, and $activeSlave.slaveName has -<<if canSee($activeSlave)>> -obviously noticed _his2 - <<if $subSlave.dick > 4>> - enormous cock - <<elseif $subSlave.labia > 1>> - remarkable pussylips - <<elseif $subSlave.boobs > 5000>> - enormous bare udders - <<elseif $subSlave.lactation > 1>> - milky nipples - <<elseif $subSlave.face > 40>> - pretty face, nudity, - <<elseif $subSlave.belly >= 5000>> - <<if $subSlave.bellyPreg >= 5000>> - pregnancy, nudity, - <<elseif $subSlave.bellyImplant >= 5000>> - big belly, nudity - <<else>> - $subSlave.inflationType-filled belly, nudity - <</if>> - <<else>> - nudity - <</if>> -<<else>> - noticed _his2 - <<if $subSlave.dick > 4>> - enormous cock - <<elseif $subSlave.boobs > 5000>> - enormous bare udders - <<elseif $subSlave.belly >= 5000>> - <<if $subSlave.bellyPreg >= 5000>> - pregnancy, nudity, - <<elseif $subSlave.bellyImplant >= 5000>> - big belly, nudity - <<else>> - $subSlave.inflationType-filled belly, nudity - <</if>> - <<elseif $subSlave.lactation > 1>> - milky nipples - <<else>> - nudity - <</if>> -<</if>> -and sleepy willingness to be friendly. $activeSlave.slaveName -<<if $cockFeeder == 1>> - turns to $his phallus and sucks it powerfully, drawing -<<else>> - raises $his cup again and draws -<</if>> -liquid food into $his mouth. $He turns to $subSlave.slaveName. -"Go ahead," $he says carefully, enunciating past $his mouthful of fluid, and then purses $his lips. $subSlave.slaveName is taken aback for a moment, but decides _he2's game and steps in, planting _his2 lips on $activeSlave.slaveName's. -<<if ($activeSlave.boobs > 3000) && ($subSlave.boobs > 3000)>> - (Their tits are so huge that _he2 has to fight to get close enough to kiss.) -<<elseif ($activeSlave.boobs > 5000)>> - ($activeSlave.slaveName's tits are so huge that _he2 has to press hard against them to get close enough to kiss.) -<<elseif ($subSlave.boobs > 5000)>> - ($subSlave.slaveName's tits are so huge that _he2 has to press them hard against $activeSlave.slaveName to get close enough to kiss.) -<<elseif ($activeSlave.belly >= 5000) && ($subSlave.belly >= 5000)>> - (Their bellies are so swollen <<if ($activeSlave.preg > $activeSlave.pregData.normalBirth/8) && ($subSlave.preg > $subSlave.pregData.normalBirth/8)>>with life <</if>>that _he2 has to fight to get close enough to kiss.) -<<elseif ($activeSlave.belly >= 300000)>> - ($activeSlave.slaveName's <<if ($activeSlave.preg > $activeSlave.pregData.normalBirth/8)>>pregnancy<<else>>belly<</if>> is so massive that _he2 has to practically climb atop it to get close enough to kiss.) -<<elseif ($subSlave.belly >= 300000)>> - ($subSlave.slaveName's <<if ($subSlave.preg > $subSlave.pregData.normalBirth/8)>>pregnancy<<else>>belly<</if>> is so massive that _he2 has to practically climb atop it to get close enough to kiss.) -<<elseif ($activeSlave.belly >= 10000)>> - ($activeSlave.slaveName's <<if ($activeSlave.preg > $activeSlave.pregData.normalBirth/8)>>pregnancy<<else>>belly<</if>> is so big that _he2 has to press hard against it to get close enough to kiss.) -<<elseif ($subSlave.belly >= 10000)>> - ($subSlave.slaveName's <<if ($subSlave.preg > $subSlave.pregData.normalBirth/8)>>pregnancy<<else>>belly<</if>> is so big that _he2 has to press it firmly against $activeSlave.slaveName to get close enough to kiss.) -<</if>> -_He2 stiffens with the lewd feeling of the warm fluid pressing into _his2 mouth. After a moment _he2 tries to back off and concentrate on the food, but $activeSlave.slaveName is having none of that, and uses $his arms to hug $subSlave.slaveName close, making out with $his catch. -<<if ($subSlave.energy > 60)>> - $subSlave.slaveName's own powerful sex drive is waking up, and _he2 clearly doesn't mind. -<<else>> - $subSlave.slaveName isn't sexually needy enough or awake enough to be as horny as $activeSlave.slaveName, but _he2 goes along willingly enough. -<</if>> - -<<case "boob collision">> - -<<set _headGirlPresent = 1>> -<<if $HeadGirlID != 0>> - <<if $activeSlave.ID == $HeadGirlID>> - <<set _headGirlPresent = 0>> - <</if>> -<</if>> -You pass by the slave quarters during a busy time. Slaves are hurrying back and forth, rushing to bathe, eat, and get dressed. <<= App.UI.slaveDescriptionDialog($activeSlave)>> is in a particular hurry, $his <<if $activeSlave.belly >= 10000>><<if $activeSlave.bellyPreg >= 8000>>heavy pregnancy<<else>>heavy belly<</if>> and <</if>><<if $activeSlave.boobs > 8000>>gargantuan tits hampering $him badly<<else>>huge boobs getting in the way<</if>> as $he rushes around. Returning from the shower to the sleeping area, $he turns a corner and runs hard into <<= App.UI.slaveDescriptionDialog($subSlave)>>. Both slaves are nude, and the collision of their massive breasts makes an audibly painful smack. $activeSlave.slaveName has enough momentum that $he overbears the top-heavy $subSlave.slaveName entirely. The poor <<if $subSlave.physicalAge > 30>>_woman2<<else>>_girl2<</if>> crashes backwards, _his2 <<if $subSlave.butt > 8>>monstrous bottom<<elseif $subSlave.butt > 4>>big behind<<else>>hind end<</if>> hitting the floor with a slap. $activeSlave.slaveName lands on top of _him2, the fall and the sudden weight of $activeSlave.slaveName on top of _him2 driving the wind out of $subSlave.slaveName with a whoosh. -<br><br> -"<<S>>orry! I'm <<s>>o <<s>>orry," apologizes $activeSlave.slaveName. $He starts to try to disentangle $himself as $subSlave.slaveName struggles to get _his2 breath back, but you see $activeSlave.slaveName's back stiffen. $He stops trying to get up. As the discomfort of the collision fades, $he notices the warmth of $subSlave.slaveName underneath $him, and the way their nipples are pressed against one another. Impulsively, $he kisses $subSlave.slaveName full on the lips, -<<if $activeSlave.boobs+$subSlave.boobs > 20000>> - even though the mass of boob between them is so massive that $he has to struggle to bring $his mouth down to meet $subSlave.slaveName's. -<<elseif $activeSlave.belly >= 5000 && $subSlave.belly >= 5000>> - even though their combined <<if $activeSlave.bellyPreg >= 5000>>pregnancies<<else>>bellies<</if>> and breasts complicate things. -<<elseif $activeSlave.belly >= 120000 || $subSlave.belly >= 120000>> - even though <<if $activeSlave.belly >= 120000>>$his massive <<if $activeSlave.bellyPreg >= 5000>>pregnancy<<else>>belly<</if>> complicates reaching $subSlave.slaveName's<<else>>$subSlave.slaveName's massive <<if $activeSlave.bellyPreg >= 5000>>pregnancy<<else>>belly<</if>> complicates reaching _hers2<</if>>. -<<else>> - squashing their boobs together hard so $he can reach despite the mass of soft flesh between them. -<</if>> -<br><br> -"H-hey," $subSlave.slaveName gasps when $activeSlave.slaveName finally breaks the lip lock, but _he2's clearly not that displeased. $activeSlave.slaveName, who has clearly forgotten running into the other slave entirely and now has other things on $his mind, begins to grind against _him2. When $subSlave.slaveName smiles back at the horny <<if $activeSlave.physicalAge > 30>>$woman<<elseif $activeSlave.physicalAge >= 18>>$girl<<elseif $activeSlave.physicalAge >= 13>>teenager<<else>>$loli<</if>> on top of _him2, $activeSlave.slaveName -<<if canPenetrate($activeSlave)>> - <<if !canDoVaginal($subSlave)>> - <<if $subSlave.anus == 0 || !canDoAnal($subSlave)>> - reaches down to seat $his rapidly hardening dick between $subSlave.slaveName's thighs for a bit of frottage. - <<run actX($activeSlave, "penetrative")>> /* frotage is not recorded */ - <<elseif $activeSlave.dick > 4>> - pushes $subSlave.slaveName's legs apart to rotate _his2 hips, reaches down, and - <<if $subSlave.anus > 2>> - rubs a little saliva on $his cock before shoving it up $subSlave.slaveName's anus. - <<else>> - carefully pushes $his cock up the whimpering $subSlave.slaveName's tight butt. - <</if>> - <<run seX($subSlave, "anal", $activeSlave, "penetrative")>> - <<if canImpreg($subSlave, $activeSlave)>> - <<= knockMeUp($subSlave, 5, 1, $activeSlave.ID, 1)>> - <</if>> - <<else>> - pushes $subSlave.slaveName's legs apart to rotate _his2 hips, reaches down, and - <<if $subSlave.anus > 2>> - shoves $his cock up $subSlave.slaveName's anus, which is loose enough that $he doesn't need much lubrication. - <<else>> - pushes $his cock up the $subSlave.slaveName's willing butt. - <</if>> - <<run seX($subSlave, "anal", $activeSlave, "penetrative")>> - <<if canImpreg($subSlave, $activeSlave)>> - <<= knockMeUp($subSlave, 5, 1, $activeSlave.ID, 1)>> - <</if>> - <</if>> - <<else>> - <<if $subSlave.vagina == 0>> - reaches down to seat $his rapidly hardening dick between $subSlave.slaveName's thighs for a bit of frottage. - <<elseif $activeSlave.dick > 4>> - reaches down - <<if $subSlave.vagina > 1>> - to insert $his huge cock into $subSlave.slaveName's loose wet cunt. - <<else>> - and carefully pushes $his cock into the whimpering $subSlave.slaveName's tight pussy. - <</if>> - <<run seX($subSlave, "vaginal", $activeSlave, "penetrative")>> - <<if canImpreg($subSlave, $activeSlave)>> - <<= knockMeUp($subSlave, 5, 0, $activeSlave.ID, 1)>> - <</if>> - <<else>> - reaches down - <<if $subSlave.vagina > 1>> - and inserts $his dick into $subSlave.slaveName's loose wet cunt. - <<else>> - to put $his dick inside $subSlave.slaveName's tight pussy. - <</if>> - <<run seX($subSlave, "vaginal", $activeSlave, "penetrative")>> - <<if canImpreg($subSlave, $activeSlave)>> - <<= knockMeUp($subSlave, 5, 0, $activeSlave.ID, 1)>> - <</if>> - <</if>> - <</if>> -<<elseif canAchieveErection($activeSlave) && !($activeSlave.chastityPenis) && $activeSlave.dick >= 8>> - reaches down to seat $his rapidly hardening monster of a cock between $subSlave.slaveName's thighs for a bit of frottage. -<<elseif $activeSlave.dick > 0 && !($activeSlave.chastityPenis)>> - starts to rub $his soft bitchclit against $subSlave.slaveName's - <<if ($subSlave.chastityVagina)>> - chastity belt. - <<elseif ($subSlave.dick > 0)>> - dick. - <<elseif $subSlave.vagina == -1>> - asspussy. - <<else>> - pussy. - <</if>> -<<elseif $activeSlave.dick > 0 && ($activeSlave.chastityPenis == 1)>> - starts to rub $his chastity cage against $subSlave.slaveName's - <<if ($subSlave.chastityVagina)>> - own belt, a rather pathetic display. - <<elseif ($subSlave.dick > 0)>> - dick. - <<elseif $subSlave.vagina == -1>> - asspussy. - <<else>> - pussy. - <</if>> -<<elseif ($activeSlave.chastityVagina)>> - starts to rub $his chastity belt against $subSlave.slaveName's - <<if ($subSlave.chastityVagina)>> - own belt, a rather pathetic display. - <<elseif ($subSlave.dick > 0)>> - dick. - <<elseif $subSlave.vagina == -1>> - asspussy. - <<else>> - pussy. - <</if>> -<<elseif $activeSlave.vagina == -1>> - starts to rub $his soft groin against $subSlave.slaveName's - <<if ($subSlave.chastityVagina)>> - chastity belt. - <<elseif ($subSlave.dick > 0)>> - dick. - <<else>> - mons. - <</if>> -<<else>> - starts to rub $his wet pussy against $subSlave.slaveName's - <<if ($subSlave.chastityVagina)>> - chastity belt. - <<elseif ($subSlave.dick > 0)>> - dick. - <<elseif $subSlave.vagina == -1>> - asspussy. - <<else>> - mons. - <</if>> -<</if>> -Once $he's gotten $himself positioned, $subSlave.slaveName reaches around $activeSlave.slaveName's $activeSlave.skin body to grab $his ass. _He2 holds $activeSlave.slaveName against _him2 as $activeSlave.slaveName starts humping gently, and cranes _his2 neck up to kiss $him. - <<case "cockmilk interception">> <<run seX($subSlave, "oral", $activeSlave, "oral")>> @@ -521,240 +238,6 @@ $he adds impishly. <<if canHear($subSlave)>>Hearing this<<else>>Realizing your p <span id="result"> <<switch $RETSevent>> -<<case "taste test">> - -<<link "This belongs on a live feed">> - <<replace "#result">> - You let them continue kissing, but use your tablet to slave one of the plaza's bigger screens to a feed of their nude makeout session. They have no way of knowing, and progress innocently from deep kissing to open mutual masturbation. This is a common sex act among your slaves: it's quick and clean and lets them achieve release before getting back to their duties. When they've both climaxed, you manipulate the situation again, setting a wallscreen in the kitchen to display a feed of the crowd in the plaza enjoying the feed of the situation in the kitchen. - <<if ($activeSlave.fetish == "humiliation") && ($activeSlave.fetishKnown == 1) && ($subSlave.fetish == "humiliation") && ($subSlave.fetishKnown == 1)>> - They both blush crimson at the realization, but the pair of humiliation fetishists @@.hotpink;live for this@@ and wave at the camera, enjoying the afterglow. - <<set $activeSlave.devotion += 2, $subSlave.devotion += 2>> - <<elseif ($subSlave.fetish == "humiliation") && ($subSlave.fetishKnown == 1)>> - $subSlave.slaveName, a confirmed humiliation slut, @@.hotpink;lives for this@@ and waves at the camera, enjoying the afterglow. - <<set $subSlave.devotion += 2>> - <<elseif ($activeSlave.fetish == "humiliation") && ($activeSlave.fetishKnown == 1)>> - $activeSlave.slaveName, a confirmed humiliation slut, @@.hotpink;lives for this@@ and waves at the camera, enjoying the afterglow. - <<set $activeSlave.devotion += 2>> - <<else>> - They blush crimson and both turn back towards each other, desperate to look anywhere but at the sight of the crowd that just watched them jerk each other off. - <</if>> - Such honesty is very tough to fake, and the crowd @@.green;knows they just saw real pleasure.@@ - <<run repX(500, "event", $activeSlave)>> - <<run seX($subSlave, "oral", $activeSlave, "oral")>> - <<set $oralTotal += 2>> - <<set $slaves[$slaveIndices[$subSlave.ID]] = $subSlave>> - <</replace>> -<</link>> -<br><<link "Get involved in the taste testing">> - <<replace "#result">> - <<run Enunciate($activeSlave)>> - You move in. $activeSlave.slaveName <<if canSee($activeSlave)>>catches sight of<<else>>notices<</if>> your approach, and you see the corners of $his mouth quirk upward. $He breaks the lip lock and says breathily, "Hey $subSlave.slaveName, I think there'<<s>> <<s>>omething el<<s>>e you <<sh>>ould ta<<s>>te te<<s>>t." - <br><br> - <<run Enunciate($subSlave)>> - "Whaa-" the slave starts to ask warily before $activeSlave.slaveName pushes _him2 to _his2 knees, spinning _him2 around as $he does so. This brings $subSlave.slaveName face to face with your <<if $PC.dick != 0>>stiff prick, a bead of precum already present at its tip<<else>>wet cunt, a bead of pussyjuice already trailing down your inner thigh<</if>>. "Oh, um, hi <<Master $subSlave>>," _he2 stammers, and then starts to <<if $PC.dick != 0>>suck your dick<<if $PC.vagina != -1>> and <</if>><</if>><<if $PC.vagina != -1>>eat your pussy<</if>>. This leaves poor $activeSlave.slaveName without anyone to make out with, so you step in there, grabbing $him and pulling the giggling slave in to kiss $him deeply. $His mouth is indeed a bit <<if $activeSlave.preg > $activeSlave.pregData.normalBirth/2>>sour<<else>>tart<</if>>. $He moans into your mouth as $he feels $his nipples press against <<if $PC.boobs >= 300>>yours<<else>>your hard chest<</if>>, and then again as your tongue invades $him. When you <<if $PC.dick != 0>>fill $subSlave.slaveName's mouth with cum<<else>>climax wetly against $subSlave.slaveName's mouth<</if>>, you pull away slightly, letting the slave on _his2 knees below you gasp "You ta<<s>>te great, <<Master>>!" before you spin _him2 around in turn so _he2 can give $activeSlave.slaveName $his own allotment of oral sex. You leave them to it. They @@.mediumaquamarine;trust you a bit more@@ after such a lighthearted little escapade. - <<set $activeSlave.trust += 2, $subSlave.trust += 2>> - <<run seX($subSlave, "oral", $activeSlave, "penetrative", 2)>> - <<set $slaves[$slaveIndices[$subSlave.ID]] = $subSlave>> - <</replace>> -<</link>> -<br><<link "Look, a bare butt">> - <<replace "#result">> - You move in, looking intently at $subSlave.slaveName's bare, vulnerable butt. $activeSlave.slaveName <<if canSee($activeSlave)>>catches sight of your approach, and then follows the line of your gaze<<else>>notices your approach<</if>>, the realization of what your intent likely quickly dawns on $him. You see the corners of $his mouth quirk upward with horny maliciousness. $He leans back against the edge of the kitchen counter, pulling $subSlave.slaveName with $him, and then reaches down and - <<if ($subSlave.butt > 6)>> - grabs handfuls of $subSlave.slaveName's massive ass, - <<elseif ($subSlave.butt > 3)>> - seizes $subSlave.slaveName's big buttocks, - <<else>> - grabs $subSlave.slaveName's cute butt, - <</if>> - pulling _him2 upward. $subSlave.slaveName thinks _he2 gets the idea, and hops up, wrapping _his2 legs around $activeSlave.slaveName's <<if $activeSlave.belly >= 5000>><<if $activeSlave.bellyPreg >= 2000>>gravid<<else>>rounded<</if>> middle<<else>>waist<</if>> and _his2 arms around $activeSlave.slaveName's shoulders<<if $subSlave.belly >= 5000>>, pushing their <<if $activeSlave.bellyPreg >= 2000>>pregnancies<<else>>bellies<</if>> together<</if>>. $activeSlave.slaveName<<if ($subSlave.butt > 6)>> - hauls $subSlave.slaveName's huge buttocks apart to reveal the - <<elseif ($subSlave.butt > 3)>> - pulls $subSlave.slaveName's healthy asscheeks apart to reveal the - <<else>> - spreads $subSlave.slaveName's buttocks to show off the - <</if>> - <<if ($subSlave.anus > 2)>> - lewd slit - <<elseif ($subSlave.anus > 1)>> - inviting anus - <<else>> - pretty rosebud - <</if>> - between them. $subSlave.slaveName has only a brief moment to wonder why _his2 butt is being spread this way before _he2 feels - <<if ($PC.dick != 0)>> - your cockhead - <<elseif ($subSlave.anus > 2)>> - your hand, formed into a beak shape - <<elseif ($subSlave.anus > 1)>> - three fingers - <<else>> - two fingers - <</if>> - press against and then inside _his2 butthole. _He2 tries to turn away from $activeSlave.slaveName and greet you properly, but $activeSlave.slaveName won't let _him2, so _he2 tries to mumble a greeting into $activeSlave.slaveName's mouth and then settles for a spastic wave of one hand. This is an alluringly awkward process made desperate by the distracting feeling of you fucking _his2 ass. You could have done something more inventive with the situation, but the feeling of <<if ($PC.dick != 0)>>an anal sphincter around the base of your dick<<else>>finger fucking a compliant slave's submissive asspussy while you look after yourself with your other hand<</if>> never gets old. Why complicate things? An hour later you leave your fucktoys stumbling tiredly towards the shower, @@.hotpink;sexually satiated@@ and anally dominated. - <<set $activeSlave.trust += 2, $subSlave.trust += 2>> - <<run seX($subSlave, "anal", $PC, "penetrative", 2)>> - <<run seX($activeSlave, "anal", $PC, "penetrative", 2)>> - <<if canImpreg($activeSlave, $PC)>> - <<= knockMeUp($activeSlave, 5, 1, -1, 1)>> - <</if>> - <<if canImpreg($subSlave, $PC)>> - <<= knockMeUp($subSlave, 5, 1, -1, 1)>> - <</if>> - <<set $slaves[$slaveIndices[$subSlave.ID]] = $subSlave>> - <</replace>> -<</link>> - -<<case "boob collision">> - -<<link "Fuck them">> - <<replace "#result">> - You approach the fucking slaves, kneeling next to them and running a possessive hand over $activeSlave.slaveName's butt. The slave doesn't even have to look, recognizing you by your grip, and greets you cheerfully: "Hi <<Master>>!" $subSlave.slaveName giggles and cranes around to <<if canSee($subSlave)>>see<<else>>greet you<</if>>. "Hi <<Master $subSlave>>," _he2 choruses. $activeSlave.slaveName wiggles $his bottom under your hand, @@.mediumaquamarine;trusting your judgment,@@ and $subSlave.slaveName <<if canSee($subSlave)>>watches<<else>>waits<</if>> to see what you'll do @@.mediumaquamarine;with anticipation.@@ - <<if $PC.dick == 0>> - You decide to make use of the position the slaves have gotten themselves into. Once naked, you get on all fours ahead of them, and then back yourself between them until you're effectively sitting on the massive cushion formed between them by their breasts. This puts your pussy against $subSlave.slaveName's mouth, and your butt right in front of $activeSlave.slaveName's face. $subSlave.slaveName starts to eat you out with dedication, and after planting a wet kiss on each of your thighs, $activeSlave.slaveName runs $his tongue from the base of your cunt and along your perineum, and then begins to kiss your asshole. The universe of warm wetness created by their mouths is so intense that your arms almost buckle. - <<run seX($subSlave, "oral", $activeSlave, "oral")>> - <<else>> - They don't have long to wait. There's no need to be excessively creative. You get behind them and start from the top, laying your cock against $activeSlave.slaveName's back, which produces an anticipatory shudder. Moving down, you - <<if !canDoAnal($activeSlave)>> - <<if $PC.vagina != -1>>trail your hot cunt across the tops of $his buttocks and then <</if>>trace your dickhead around $activeSlave.slaveName's chastity belt before continuing. You move your cockhead, beaded with precum, down $his soft perineum - <<elseif $activeSlave.anus == 0>> - <<if $PC.vagina != -1>>trail your hot cunt across the tops of $his buttocks and then <</if>>tease your dickhead against $activeSlave.slaveName's virgin butt for a moment before continuing. You move your cockhead, beaded with precum, down $his soft perineum - <<elseif $activeSlave.anus < 3>> - push your cock against $activeSlave.slaveName's tight asshole, causing $him to stiffen and struggle momentarily before it pops inside $him. After giving $his butt a thorough fuck, you move your wet cockhead down $his soft perineum - <<run seX($subSlave, "anal", $PC, "penetrative")>> - <<if canImpreg($activeSlave, $PC)>> - <<= knockMeUp($activeSlave, 5, 1, -1, 1)>> - <</if>> - <<else>> - push your cock up $activeSlave.slaveName's asspussy, which accepts it with ease. After giving it a good hard reaming, you move your wet cockhead down $his soft perineum - <<run seX($subSlave, "anal", $PC, "penetrative")>> - <<if canImpreg($activeSlave, $PC)>> - <<= knockMeUp($activeSlave, 5, 1, -1, 1)>> - <</if>> - <</if>> - <<if !canDoVaginal($activeSlave) || ($activeSlave.vagina == 0)>> - and into the warm space between the two slaves for a little while. - <<else>> - and into $his cunt, giving it a good hard fuck. - <<run seX($activeSlave, "vaginal", $PC, "penetrative")>> - <<if canImpreg($activeSlave, $PC)>> - <<= knockMeUp($activeSlave, 5, 0, -1, 1)>> - <</if>> - <</if>> - Then you see to $subSlave.slaveName beneath $him, - <<if !canDoVaginal($subSlave) || ($subSlave.vagina == 0)>> - <<else>> - giving _him2 a turn with _his2 owner's cock inside _his2 womanhood before - <<run seX($activeSlave, "vaginal", $PC, "penetrative")>> - <<if canImpreg($subSlave, $PC)>> - <<= knockMeUp($subSlave, 5, 0, -1, 1)>> - <</if>> - <</if>> - <<if $subSlave.anus == 0 || !canDoAnal($subSlave)>> - using the slave's smashed-together buttocks to rub against. - <<else>> - giving _him2 as hard a buttfuck as you can manage with $activeSlave.slaveName between you. - <<run seX($subSlave, "anal", $PC, "penetrative")>> - <<if canImpreg($subSlave, $PC)>> - <<= knockMeUp($subSlave, 5, 1, -1, 1)>> - <</if>> - <</if>> - <</if>> - Then you move back up, using them until you're spent and they're lying limply in a pool of sweat and tits. - <<set $subSlave.trust += 2, $activeSlave.trust += 2>> - <<set $slaves[$slaveIndices[$subSlave.ID]] = $subSlave>> - <</replace>> -<</link>> -<<if $activeSlave.anus > 0 && _notVirgin == 1>> -<br><<link "Dominate the clumsy slave's ass">> - <<replace "#result">> - You tell $activeSlave.slaveName that that was very clumsy of $him. The slaves start with surprise, since they didn't know you were watching, producing a delightful jiggle of smashed-together boob. - "Ye<<s>> <<Master>>," $activeSlave.slaveName <<say>>s obediently, suspecting that you aren't done. $He's right. In an idle, speculative tone, you muse that with $his huge boobs <<if $activeSlave.belly >= 10000>>and big belly <</if>>pinning $him to the ground and $subSlave.slaveName holding $his butt like that, $he can't get up. "Ye<<s>> <<Master>>," $he agrees. - Quite helpless, you continue. "Ye<<s>> <<Master>>," $he parrots. - Unable to escape, you conclude. "Ye<<s>> <<Master>>," $he moans. - <br><br> - You tell $subSlave.slaveName to - <<if canPenetrate($subSlave)>> - sodomize $him. $subSlave.slaveName obeys hurriedly, shoving a hand between their hips to - <<if $subSlave.dick > 4>> - <<if $activeSlave.anus > 2>> - shove _his2 cock up $activeSlave.slaveName's loose anus. - <<else>> - carefully push _his2 cock inside $activeSlave.slaveName's tight butthole. - <</if>> - $activeSlave.slaveName rides $subSlave.slaveName hard, knowing that the looser $his ass is, the easier whatever you're planning will be. $subSlave.slaveName's big tool gapes $his hole quickly. - <<else>> - <<if $activeSlave.anus > 2>> - shove _his2 dick inside $activeSlave.slaveName's loose anus. - <<else>> - push push _his2 dick up $activeSlave.slaveName's tight butthole. - <</if>> - $activeSlave.slaveName rides $subSlave.slaveName hard, knowing that the looser $his ass is, the easier whatever you're planning will be. $subSlave.slaveName's penis isn't big enough to gape $him very much, so $activeSlave.slaveName, trying to be prepared, reaches around to shove an extra finger in alongside it. - <</if>> - You<<if $PC.dick == 0>> put on a strap-on,<</if>> stop $his desperate humping<<if $PC.dick == 0>>,<</if>> and shove $his <<if $activeSlave.bellyPreg >= 1500>>gravid <<elseif $activeSlave.belly >= 1500>>bloated <</if>>torso back down against $subSlave.slaveName's boobs. $subSlave.slaveName grabs hold of $activeSlave.slaveName's buttocks and pulls them as far apart as _he2 possibly can, removing all protection from $activeSlave.slaveName's already-full asshole. $activeSlave.slaveName takes a deep breath and lets it out slowly as $he feels <<if $PC.dick == 0>>the head of the strap-on<<else>>your cockhead<</if>> press insistently against the outside of $his anus and then, <<if $showInches == 2>>inch<<else>>centimeter<</if>> by agonizing <<if $showInches == 2>>inch<<else>>centimeter<</if>>, seat itself up $his butt alongside $subSlave.slaveName's cock. $He shudders when you begin to thrust. $subSlave.slaveName, overstimulated, climaxes first; as the edge comes off _his2 hard-on, _his2 cock slides out of $activeSlave.slaveName's ass, letting you be utterly merciless to the loosened, cum-soaked hole. - <<run seX($activeSlave, "anal", $subSlave, "penetrative")>> - <<run seX($activeSlave, "anal", $PC, "penetrative")>> - <<if canImpreg($activeSlave, $PC)>> - <<= knockMeUp($activeSlave, 5, 1, -1, 1)>> - <</if>> - <<if canImpreg($activeSlave, $subSlave)>> - <<= knockMeUp($activeSlave, 5, 1, $subSlave.ID, 1)>> - <</if>> - <<else>> - fingerfuck $him. $subSlave.slaveName obeys hurriedly, reaching inward and - <<if $subSlave.anus > 2>> - pushing two fingers from each hand inside $activeSlave.slaveName's loose anus. - <<else>> - carefully pushing a finger from each hand up $activeSlave.slaveName's tight butthole. - <</if>> - $activeSlave.slaveName begs $subSlave.slaveName to fuck $his butt, knowing that the looser $his ass is, the easier whatever you're planning will be. $subSlave.slaveName does _his2 best, using _his2 fingers to stretch $activeSlave.slaveName's sphincter as much as _he2 can without hurting $him. - <<run seX($activeSlave, "anal", $subSlave, "penetrative")>> - <<run seX($activeSlave, "anal", $PC, "penetrative")>> - Once you're satisfied that $he can take what's coming, you<<if $PC.dick == 0>> put on a strap-on,<</if>> steady $his hips<<if $PC.dick == 0>>,<</if>> and shove $his <<if $activeSlave.bellyPreg >= 1500>>gravid <<elseif $activeSlave.belly >= 1500>>bloated <</if>>torso back down against $subSlave.slaveName's boobs. $subSlave.slaveName pulls to either side, gaping $activeSlave.slaveName's hole for you. $activeSlave.slaveName takes a deep breath and lets it out slowly as $he feels <<if $PC.dick == 0>>the head of the strap-on<<else>>your cockhead<</if>> slide between $subSlave.slaveName's fingers, <<if $showInches == 2>>inch<<else>>centimeter<</if>> by agonizing <<if $showInches == 2>>inch<<else>>centimeter<</if>>, and seat itself up $his butt. $He shudders when you begin to thrust. $subSlave.slaveName keeps _his2 fingers where they are, doing _his2 best to use them to give you a handjob inside $activeSlave.slaveName's ass. - <<if canImpreg($activeSlave, $PC)>> - <<= knockMeUp($activeSlave, 5, 1, -1, 1)>> - <</if>> - <</if>> - <<run Enunciate($subSlave)>> - When you're done, you pull out, leaving $activeSlave.slaveName to collapse, whimpering and shaking, onto $subSlave.slaveName's boobs. $subSlave.slaveName <<if canSee($subSlave)>>winks<<else>>smiles<</if>> at you over _his2 shoulder. "That wa<<s>> fun <<Master $subSlave>>," _he2 <<say>>s brightly. "@@.hotpink;Can we do that again@@ <<s>>oon, plea<<s>>e?" - <br><br> - "Ohh fffuck," $activeSlave.slaveName moans into $his boobs, to no one in particular. - <<set $subSlave.devotion += 4>> - <<run Enunciate($activeSlave)>> - <<if $activeSlave.anus < 3>> - "Plea<<s>>e nooo, @@.lime;my poor hole will never be the <<s>>ame againnn..@@ - <<set $activeSlave.anus += 1>> - <</if>> - <<set $slaves[$slaveIndices[$subSlave.ID]] = $subSlave>> - <</replace>> -<</link>> -<</if>> -<<if ($activeSlave.relationship == 0) || ($activeSlave.relationship == -1)>> -<<if ($subSlave.relationship == 0) || ($subSlave.relationship == -1)>> -<br><<link "What a cute couple">> - <<replace "#result">> - You tell them they make a cute couple. The slaves start with surprise, since they didn't know you were watching, producing a delightful jiggle of smashed-together boob. "Thank you, <<= properMaster()>>," they chorus correctly, before turning back to look at each other. They take your comment quite seriously, both of them seemingly forgetting that they're in the middle of having sex to consider it. $activeSlave.slaveName speaks first. - "I gue<<ss>> I never really thought about you that way," - $he says to the huge-boobed <<if $subSlave.physicalAge > 30>>_woman2<<elseif $subSlave.physicalAge > 18>>_girl2<<elseif $subSlave.physicalAge > 12>>teen<<else>>_loli2<</if>> trapped beneath $him. - <br><br> - <<run Enunciate($subSlave)>> - $subSlave.slaveName, who is still holding $activeSlave.slaveName's buttocks, gives them a squeeze. "Well, you <<s>>illy $girl, what do you think about it now?" - <br><br> - $activeSlave.slaveName stiffens with sudden embarrassment. "Uh, um," $he stammers, before saying in a rush, "$subSlave.slaveName, will you go out with me?" - <br><br> - $subSlave.slaveName laughs, a pure, unclouded sound, and gives $activeSlave.slaveName a cute little peck on the tip of $his nose. "@@.lightgreen;Of cour<<s>>e I will,@@" _he2 purrs, and runs _his2 hands up $activeSlave.slaveName's back to hug $him tightly. - <br><br> - <<run Enunciate($activeSlave)>> - The encounter becomes far more heartfelt than it was before you spoke up. $activeSlave.slaveName, who seems affected, says self-consciously, "Um, doe<<s>> thi<<s>> mean I get a <<= _girl2>>friend every time I'm clum<<s>>y?" $subSlave.slaveName giggles and shushes $him. They begin to kiss earnestly while they fuck, and you leave them to it. Each of them comes to you later to @@.hotpink;thank you@@ for permitting them to be together. - <<set $subSlave.devotion += 2, $activeSlave.devotion += 2>> - <<set $subSlave.relationship = 3, $subSlave.relationshipTarget = $activeSlave.ID>> - <<set $activeSlave.relationship = 3, $activeSlave.relationshipTarget = $subSlave.ID>> - <<set $slaves[$slaveIndices[$subSlave.ID]] = $subSlave>> - <</replace>> -<</link>> -<</if>> -<</if>> - <<case "cockmilk interception">> <<link "Step in for the stimulator">> diff --git a/src/uncategorized/pCoupAttempt.tw b/src/uncategorized/pCoupAttempt.tw index c20fa86c83001768aee86d9e44676c12db3a3d09..59092130f434d707e75faf534e92db0eca07522a 100644 --- a/src/uncategorized/pCoupAttempt.tw +++ b/src/uncategorized/pCoupAttempt.tw @@ -278,23 +278,23 @@ You are awakened in the middle of the night by a jolt that shakes the entire arc <<set $slaves[_pca].pregSource = $traitor.ID>> <</if>> <</for>> - <<if $incubator > 0>> - <<for _pca = 0; _pca < $tanks.length; _pca++>> - <<if $traitorStats.traitorMotherTank.includes($tanks[_pca].ID)>> - <<set $tanks[_pca].mother = $traitor.ID>> + <<if $incubator.capacity > 0>> + <<for _pca range $incubator.tanks>> + <<if $traitorStats.traitorMotherTank.includes(_pca.ID)>> + <<set _pca.mother = $traitor.ID>> <</if>> - <<if $traitorStats.traitorFatherTank.includes($tanks[_pca].ID)>> - <<set $tanks[_pca].father = $traitor.ID>> + <<if $traitorStats.traitorFatherTank.includes(_pca.ID)>> + <<set _pca.father = $traitor.ID>> <</if>> <</for>> <</if>> <<if $nursery > 0>> - <<for _pca = 0; _pca < $cribs.length; _pca++>> - <<if $traitorStats.traitorMotherTank.includes($cribs[_pca].ID)>> - <<set $cribs[_pca].mother = $traitor.ID>> + <<for _pca range $cribs>> + <<if $traitorStats.traitorMotherTank.includes(_pca.ID)>> + <<set _pca.mother = $traitor.ID>> <</if>> - <<if $traitorStats.traitorFatherTank.includes($cribs[_pca].ID)>> - <<set $cribs[_pca].father = $traitor.ID>> + <<if $traitorStats.traitorFatherTank.includes(_pca.ID)>> + <<set _pca.father = $traitor.ID>> <</if>> <</for>> <</if>> diff --git a/src/uncategorized/pCoupBetrayal.tw b/src/uncategorized/pCoupBetrayal.tw index 9c47bad358b41dd81a8bae48b5107dc123f0faf7..b909a046674801b0cfb16ad20a25793cc28f1567 100644 --- a/src/uncategorized/pCoupBetrayal.tw +++ b/src/uncategorized/pCoupBetrayal.tw @@ -61,23 +61,23 @@ When $traitor.slaveName finally manages to return to you, $he explains what happ <<set $slaves[_pca].pregSource = $traitor.ID>> <</if>> <</for>> -<<if $incubator > 0>> - <<for _pca = 0; _pca < $tanks.length; _pca++>> - <<if $traitorStats.traitorMotherTank.includes($tanks[_pca].ID)>> - <<set $tanks[_pca].mother = $traitor.ID>> +<<if $incubator.capacity > 0>> + <<for _pca range $incubator.tanks>> + <<if $traitorStats.traitorMotherTank.includes(_pca.ID)>> + <<set _pca.mother = $traitor.ID>> <</if>> - <<if $traitorStats.traitorFatherTank.includes($tanks[_pca].ID)>> - <<set $tanks[_pca].father = $traitor.ID>> + <<if $traitorStats.traitorFatherTank.includes(_pca.ID)>> + <<set _pca.father = $traitor.ID>> <</if>> <</for>> <</if>> <<if $nursery > 0>> - <<for _pca = 0; _pca < $cribs.length; _pca++>> - <<if $traitorStats.traitorMotherTank.includes($cribs[_pca].ID)>> - <<set $cribs[_pca].mother = $traitor.ID>> + <<for _pca range $cribs>> + <<if $traitorStats.traitorMotherTank.includes(_pca.ID)>> + <<set _pca.mother = $traitor.ID>> <</if>> - <<if $traitorStats.traitorFatherTank.includes($cribs[_pca].ID)>> - <<set $cribs[_pca].father = $traitor.ID>> + <<if $traitorStats.traitorFatherTank.includes(_pca.ID)>> + <<set _pca.father = $traitor.ID>> <</if>> <</for>> <</if>> diff --git a/src/uncategorized/pUndergroundRailroad.tw b/src/uncategorized/pUndergroundRailroad.tw index c027d8b68ecf9e7d2ae717989c8e43acf0f0d239..3fe0cb167fc8230b983766886690c24d2e5e083d 100644 --- a/src/uncategorized/pUndergroundRailroad.tw +++ b/src/uncategorized/pUndergroundRailroad.tw @@ -159,23 +159,23 @@ This is disturbing, to say the least. After close investigation, it appears some <</if>> <</if>> <</for>> - <<if $incubator > 0>> - <<for _z = 0; _z < $tanks.length; _z++>> - <<if $traitor.ID == $tanks[_z].mother>> - <<set $traitorStats.traitorMotherTank.push($slaves[_z].ID)>> + <<if $incubator.capacity > 0>> + <<for _child range $incubator.tanks>> + <<if $traitor.ID === _child.mother>> + <<set $traitorStats.traitorMotherTank.push(_child.ID)>> <</if>> - <<if $traitor.ID == $tanks[_z].father>> - <<set $traitorStats.traitorFatherTank.push($slaves[_z].ID)>> + <<if $traitor.ID === $incubator.tanks[_z].father>> + <<set $traitorStats.traitorFatherTank.push(_child.ID)>> <</if>> <</for>> <</if>> <<if $nursery > 0>> - <<for _z = 0; _z < $cribs.length; _z++>> - <<if $traitor.ID == $cribs[_z].mother>> - <<set $traitorStats.traitorMotherTank.push($slaves[_z].ID)>> + <<for _child range $cribs>> + <<if $traitor.ID === _child.mother>> + <<set $traitorStats.traitorMotherTank.push(_child.ID)>> <</if>> - <<if $traitor.ID == $cribs[_z].father>> - <<set $traitorStats.traitorFatherTank.push($slaves[_z].ID)>> + <<if $traitor.ID === _child.father>> + <<set $traitorStats.traitorFatherTank.push(_child.ID)>> <</if>> <</for>> <</if>> @@ -294,23 +294,23 @@ This is disturbing, to say the least. After close investigation, it appears some <</if>> <</if>> <</for>> - <<if $incubator > 0>> - <<for _z = 0; _z < $tanks.length; _z++>> - <<if $traitor.ID == $tanks[_z].mother>> - <<set $traitorStats.traitorMotherTank.push($slaves[_z].ID)>> + <<if $incubator.capacity > 0>> + <<for _child range $incubator.tanks>> + <<if $traitor.ID === _child.mother>> + <<set $traitorStats.traitorMotherTank.push(_child.ID)>> <</if>> - <<if $traitor.ID == $tanks[_z].father>> - <<set $traitorStats.traitorFatherTank.push($slaves[_z].ID)>> + <<if $traitor.ID === _child.father>> + <<set $traitorStats.traitorFatherTank.push(_child.ID)>> <</if>> <</for>> <</if>> <<if $nursery > 0>> - <<for _z = 0; _z < $cribs.length; _z++>> - <<if $traitor.ID == $cribs[_z].mother>> - <<set $traitorStats.traitorMotherTank.push($slaves[_z].ID)>> + <<for _child range $cribs>> + <<if $traitor.ID === _child.mother>> + <<set $traitorStats.traitorMotherTank.push(_child.ID)>> <</if>> - <<if $traitor.ID == $cribs[_z].father>> - <<set $traitorStats.traitorFatherTank.push($slaves[_z].ID)>> + <<if $traitor.ID === _child.father>> + <<set $traitorStats.traitorFatherTank.push(_child.ID)>> <</if>> <</for>> <</if>> diff --git a/src/uncategorized/randomIndividualEvent.tw b/src/uncategorized/randomIndividualEvent.tw index da3d09041dd32544e7c1211a24fc7a4730054981..db0b4db674abd3828500818f3158ce04f846b9e3 100644 --- a/src/uncategorized/randomIndividualEvent.tw +++ b/src/uncategorized/randomIndividualEvent.tw @@ -28,32 +28,10 @@ /* SUB CHECKS */ - <<set $RETasteTestSubIDs = [], $RECockmilkInterceptionIDs = [], $REBoobCollisionSubIDs = []>> + <<set $RECockmilkInterceptionIDs = []>> <<for $i = 0; $i < $slaves.length; $i++>> <<if $slaves[$i].fetish != "mindbroken">> - <<if canWalk($slaves[$i])>> - <<if canTalk($slaves[$i])>> - <<if isSlaveAvailable($slaves[$i])>> - <<if $slaves[$i].devotion > 20>> - <<if $slaves[$i].boobs > 3000>> - <<set $REBoobCollisionSubIDs.push($slaves[$i].ID)>> - <</if>> - <</if>> - <</if>> - <<if assignmentVisible($slaves[$i])>> - <<if $slaves[$i].rules.living == "luxurious">> - <<if $slaves[$i].devotion >= -20>> - <<if $slaves[$i].anus != 0>> - <<if canTaste($slaves[$i])>> - <<set $RETasteTestSubIDs.push($slaves[$i].ID)>> - <</if>> - <</if>> - <</if>> - <</if>> - <</if>> - <</if>> - <</if>> <<if $slaves[$i].assignment == "work in the dairy" || $slaves[$i].assignment == "get milked">> <<if $slaves[$i].balls>> <<if $slaves[$i].dick>> diff --git a/src/uncategorized/randomNonindividualEvent.tw b/src/uncategorized/randomNonindividualEvent.tw index e8d8ccfdc6e2d93d04d63c618cf5ade3801286f1..0cdf92e9fedcbbe76144941687fb6f75a0da0df3 100644 --- a/src/uncategorized/randomNonindividualEvent.tw +++ b/src/uncategorized/randomNonindividualEvent.tw @@ -143,18 +143,6 @@ <</if>> <</for>> - <<set _twins = _relatedSlaves.filter(function(s) { return s.sisters > 0 && s.anus > 0 && s.devotion > 50 && canWalk(s); })>> - <<for _twins.length > 0>> - <<set $alphaTwin = _twins.pluck()>> - <<set $betaTwin = randomTwinSister($alphaTwin)>> - <<if (def $betaTwin) && ($betaTwin.anus > 0) && ($betaTwin.devotion > 50) && canWalk($betaTwin)>> - <<set $events.push("RE devoted twins")>> - <<set $alphaTwin = $alphaTwin.ID>> - <<set $betaTwin = $betaTwin.ID>> - <<break>> - <</if>> - <</for>> - <</if>> /* Fetish Interest Events */ diff --git a/src/uncategorized/reBoomerang.tw b/src/uncategorized/reBoomerang.tw index 0aa8b04ce9859dc07975c278e40abe8929a68a5b..338eccaa18835cac7a3d9387da4cbb52d02e45c3 100644 --- a/src/uncategorized/reBoomerang.tw +++ b/src/uncategorized/reBoomerang.tw @@ -433,23 +433,23 @@ It isn't obvious how $he managed to escape, though no doubt you could review the <<set $slaves[_reb].pregSource = _slave.ID>> <</if>> <</for>> - <<if $incubator > 0>> - <<for _reb = 0; _reb < $tanks.length; _reb++>> - <<if $boomerangStats.boomerangMotherTank.includes($tanks[_reb].ID)>> - <<set $tanks[_reb].mother = _slave.ID>> + <<if $incubator.capacity > 0>> + <<for _reb range $incubator.tanks>> + <<if $boomerangStats.boomerangMotherTank.includes(_reb.ID)>> + <<set _reb.mother = _slave.ID>> <</if>> - <<if $boomerangStats.boomerangFatherTank.includes($tanks[_reb].ID)>> - <<set $tanks[_reb].father = _slave.ID>> + <<if $boomerangStats.boomerangFatherTank.includes(_reb.ID)>> + <<set _reb.father = _slave.ID>> <</if>> <</for>> <</if>> <<if $nursery > 0>> - <<for _reb = 0; _reb < $cribs.length; _reb++>> - <<if $boomerangStats.boomerangMotherTank.includes($cribs[_reb].ID)>> - <<set $cribs[_reb].mother = _slave.ID>> + <<for _reb range $cribs>> + <<if $boomerangStats.boomerangMotherTank.includes(_reb.ID)>> + <<set _reb.mother = _slave.ID>> <</if>> - <<if $boomerangStats.boomerangFatherTank.includes($cribs[_reb].ID)>> - <<set $cribs[_reb].father = _slave.ID>> + <<if $boomerangStats.boomerangFatherTank.includes(_reb.ID)>> + <<set _reb.father = _slave.ID>> <</if>> <</for>> <</if>> diff --git a/src/uncategorized/reDevotedTwins.tw b/src/uncategorized/reDevotedTwins.tw deleted file mode 100644 index e70b2682b022187ee34ebb558ba6219d132cc51b..0000000000000000000000000000000000000000 --- a/src/uncategorized/reDevotedTwins.tw +++ /dev/null @@ -1,65 +0,0 @@ -:: RE devoted twins [nobr] - -<<set $nextButton = "Continue", $nextLink = "RIE Eligibility Check">> - -<<set $i = $slaveIndices[$alphaTwin]>> -<<set $j = $slaveIndices[$betaTwin]>> - -<span id="art-frame"> - /* 000-250-006 */ - <<if $seeImages == 1>> - <div class="imageColumn"> - <div class="imageRef medImg"> - <<SlaveArt $slaves[$j] 2 0>> - </div> - <div class="imageRef medImg"> - <<SlaveArt $slaves[$i] 2 0>> - </div> - </div> - <</if>> - /* 000-250-006 */ -</span> - -$slaves[$i].slaveName and $slaves[$j].slaveName are such good and devoted slaves that they happily do everything together. They sleep <<if hasBothArms($slaves[$i]) && hasBothArms($slaves[$j])>>in each other's arms<<else>>together<</if>>, bathe together, work together whenever they can, and fuck together. For a while they masturbated together until they became so habituated to sexual slavery that they stopped seeing much distinction between masturbation and sex with one another. At the moment, they're getting ready for their day, chatting quietly and helping each other. -<br><br> -<span id="result"> -<<link "Take them out for the morning">> - <<replace "#result">> - <br>You head out of your penthouse with a pretty sex slave under each arm. They're attentive companions, doing everything they can to mirror each other as they show off their bodies to onlookers. It's a bright, sunny day, so you walk them up and down a busy glassed-in galleria. They clearly expect you to fuck them in public, but for once you just enjoy a couple of hours with them. They start disappointed that you aren't going to use them, but they quickly get over it and enjoy preening under your arms. - @@.mediumaquamarine;They have both become more trusting of you,@@ and @@.green;your reputation has increased considerably.@@ - <<set $slaves[$i].trust += 4, $slaves[$j].trust += 4>> - <<run repX(2500, "event", $slaves[$i])>> - <<run repX(2500, "event", $slaves[$j])>> - <</replace>> -<</link>> -<br><<link "Use them side by side">> - <<replace "#result">> - <br>Slave twins inevitably get used to threesomes with their sibling, and $slaves[$i].slaveName and $slaves[$j].slaveName are no exception. They greet you with every appearance of arousal and begin a carefully balanced routine — foreplay with you, of course, but whatever parts of them aren't working on you work on the other slave. They stroke you while making out, stroke each other while sucking you to rock hardness, and finger each others' holes while <<if $PC.vagina != -1>>crowding their faces against your pussy. You reach down and seize a nipple in each hand, pulling them upward so they can suck your nipples instead; they use manual stimulation to keep you going while they do. With one straddling each of your thighs, grinding shamelessly, you can reach around and molest their butts with your own hands.<<else>>rubbing four breasts up and down your dick. Since you only have one cock, the symmetry ends when you start fucking them. As you switch from hole to hole, whichever twin isn't getting fucked at the moment uses their mouth and hands to stimulate your balls and their twin's fuckhole as you pound it. When you finally cum in $slaves[$j].slaveName, $slaves[$i].slaveName sucks it out and they kiss deeply to share your ejaculate.<</if>> @@.hotpink;They have both become more devoted to you.@@ - - <<set $slaves[$i].devotion += 4, $slaves[$j].devotion += 4>> - - <<if canDoAnal($slaves[$i])>> - <<set $slaves[$i].counter.anal += 1>> - <<set $analTotal += 1>> - <<elseif canDoVaginal($slaves[$i])>> - <<set $slaves[$i].counter.vaginal += 1>> - <<set $vaginalTotal += 1>> - <<else>> - <<set $slaves[$i].counter.oral += 1>> - <<set $oralTotal += 1>> - <</if>> - - <<if canDoAnal($slaves[$j])>> - <<set $slaves[$j].counter.anal += 1>> - <<set $analTotal += 1>> - <<elseif canDoVaginal($slaves[$j])>> - <<set $slaves[$j].counter.vaginal += 1>> - <<set $vaginalTotal += 1>> - <<else>> - <<set $slaves[$j].counter.oral += 1>> - <<set $oralTotal += 1>> - <</if>> - - <</replace>> -<</link>> -</span> diff --git a/src/uncategorized/slaveSold.tw b/src/uncategorized/slaveSold.tw index 0fec87d45b7837315f87b2a7611149f16a4bf6ad..f9a6789e4fb993ee0e1dbd5708eb5d0bb5d682d8 100644 --- a/src/uncategorized/slaveSold.tw +++ b/src/uncategorized/slaveSold.tw @@ -36,13 +36,13 @@ <</if>> <</if>> <</for>> - <<if $incubator > 0>> - <<for _z = 0; _z < $tanks.length; _z++>> - <<if $AS == $tanks[_z].mother>> - <<set $boomerangStats.boomerangMotherTank.push($slaves[_z].ID)>> + <<if $incubator.capacity > 0>> + <<for _child range $incubator.tanks>> + <<if $AS === _child.mother>> + <<set $boomerangStats.boomerangMotherTank.push(_child.ID)>> <</if>> - <<if $AS == $tanks[_z].father>> - <<set $boomerangStats.boomerangFatherTank.push($slaves[_z].ID)>> + <<if $AS === _child.father>> + <<set $boomerangStats.boomerangFatherTank.push(_child.ID)>> <</if>> <</for>> <</if>>