diff --git a/devNotes/twine JS.txt b/devNotes/twine JS.txt index c557524715416477a3aa3c031f1ed96c0a07ddb9..7151e77c2f163fa98377c4a9f1c98a626b93c390 100644 --- a/devNotes/twine JS.txt +++ b/devNotes/twine JS.txt @@ -12689,349 +12689,254 @@ window.saChoosesOwnClothes = (function() { })(); -/* :: FResult [script]*/ - -// this is a port of the FResult widget -// it has been broken up into several functions, because it grew too long -// it has been wrapped in a closure so as not to pollute the global namespace -// and so that nested functions are only evaluated once - -window.FResult = (function() { - "use strict"; - // we can't initialise our global variables on load, because SugarCube.State isn't initialised - // instead, declare them and initialise on run time - let V, result, incest_bonus; - function FResult(slave) { - V = State.variables; - incest_bonus = V.arcologies[0].FSEgyptianRevivalist > 20 || V.arcologies[0].FSEgyptianRevivalistIncestPolicy === 1; - - calcUseWeights(slave); - if (!slave.fuckdoll) - calcNotFuckdoll(slave); - else - result += slave.fuckdoll/10; - - result += Math.max(0, slave.aphrodisiacs) * 2; - - if (slave.inflationType === "aphrodisiac") - result += slave.inflation*4; - - if (slave.lactation > 0) - result += 1; +/* End Week Passage Conversions */ - if (slave.nipples === "fuckable") - calcFuckableTits(slave); +/*:: SA rest [script]*/ - if (V.seeAge === 1) - calcAge(slave); - if (slave.fetish === "mindbroken") - result = Math.trunc(result*0.4); - else - result = Math.trunc(result*0.7); +window.saRest = function saRest(slave) { - if (slave.pregWeek < 0) - result -= Math.trunc(result*slave.pregWeek/10); // reduced the most just after birth + var pronouns = getPronouns(slave); + var he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, boy = pronouns.noun; + var He = capFirstChar(he), His = capFirstChar(his); + var V = State.variables; - calcAmputation(slave); + var t = " takes the week off."; - if (V.arcologies[0].FSHedonisticDecadence > 20) - calcHedonismWeight(slave); - if (result < 2) { - if (supremeRaceP(slave) && V.arcologies[0].FSSupremacist > 20) - result = 0; - else - result = 2; + if (slave.fuckdoll > 0) { + t += " ${He} has nothing to do but "; + if (slave.amp == 0) { + t += "lie "; + } else { + t += "stand "; } - return result; + t += "in place."; } - function calcUseWeights(slave) { - result = (3 - slave.anus)+(slave.muscles/30); - if (slave.muscles < -95) - result -= 5; - else if (slave.muscles < -30) - result -= 2; - - const uses = V.oralUseWeight + V.vaginalUseWeight + V.analUseWeight; - if (uses <= 0) return; - - result += (6+slave.tonguePiercing) * (V.oralUseWeight/uses) * (slave.oralSkill/30); - if (slave.sexualFlaw === "cum addict") - result += (V.oralUseWeight/uses) * (slave.oralSkill/30); - if (canDoVaginal(slave)) { - result += 6 * (V.vaginalUseWeight/uses) * (slave.vaginalSkill/30); - result += (3 - slave.vagina); - result += slave.vaginaLube; - } - if (canDoAnal(slave)) { - result += 6 * (V.analUseWeight/uses) * (slave.analSkill/30); - if (slave.sexualFlaw === "anal addict") - result += (V.analUseWeight/uses) * (slave.analSkill/30); - if (slave.inflationType === "aphrodisiac") - result += (V.analUseWeight/uses) * (slave.inflation * 3); + if (slave.health > 90) { + t += ` ${His} health is so outstanding that rest does not improve it.`; + } else if (slave.health > -100) { + t += ` ${His} <span class='green'>health recovers</span> with rest.`; + slave.health += 10; + if (!(canHear(slave))) { + t += ` Since ${he} is deaf, the hustle and bustle of daily life in the penthouse <span class='green'>didn't bother ${him} at all.</span>`; + slave.health += 3; + } else if ((slave.hears == -1 && slave.earwear != "hearing aids") || (slave.hears == 0 && slave.earwear == "muffling ear plugs")) { + t += ` Since ${he} is hard of hearing, the hustle and bustle of daily life in the penthouse <span class='green'>didn't disturb ${his} rest as much.</span>`; + slave.health += 1; } } - function calcFuckableTits(slave) { - result += 2; - if (slave.fetish === "boobs") - result += Math.trunc(slave.fetishStrength/20); - } - - function calcWorksWithRelatives(slave) { - V.slaves.forEach(islave => { - if (isParentP(slave, islave) && sameAssignmentP(slave, islave)) { - result += 1; - if (incest_bonus) result += 1; + if (slave.fuckdoll == 0 && slave.fetish != "mindbroken") { + if (slave.devotion > 20) { + if (slave.trust <= 20) { + t += ` Being allowed to rest <span class='mediumaquamarine'>reduces ${his} fear</span> of you.`; + slave.trust += 4; + } else if (slave.trust <= 50) { + t += ` Being allowed to rest <span class='mediumaquamarine'>builds ${his} trust</span> in you.`; + slave.trust += 2; + } else { + t += ` Being allowed to rest <span class='mediumaquamarine'>confirms ${his} trust</span> in you.`; + slave.trust += 2; } - if (areSisters(slave, islave) > 0 && sameAssignmentP(slave, islave)) { - result += 1; - if (incest_bonus) result += 1; + } else { + if (slave.trust < -20) { + t += ` Being allowed to rest <span class='mediumaquamarine'>reduces ${his} fear</span> of you.`; + slave.trust += 4; } - }); - } - - function calcWorksWithRelativesVanilla(slave) { - const fre = getSlave(slave.relationTarget) - if (fre !== undefined && sameAssignmentP(slave, fre)) { - result += 2; - if (incest_bonus) result += 2; } } - function calcWorksWithRelationship(slave) { - const fre = V.slaves.findIndex(s => { - return haveRelationshipP(slave, s) && sameAssignmentP(slave, s); - }); - if (fre !== -1) result += 1; + if (V.showVignettes == 1 && slave.assignment === Job.REST) { + var _vignette = GetVignette(slave); + t += ` __This week__ ${_vignette.text} ` + if (_vignette.type == "cash") { + if (_vignette.effect > 0) { + t += `<span class='yellowgreen'>making you an extra ${cashFormat(Math.trunc(V.FResult*_vignette.effect))}.</span>`; + } else if (_vignette.effect < 0) { + t += `<span class='red'>losing you ${cashFormat(Math.abs(Math.trunc(V.FResult*_vignette.effect)))}.</span>`; + } else { + t += `an incident without lasting effect.`; + } + V.cash += Math.trunc(V.FResult*_vignette.effect); + } else if (_vignette.type == "devotion") { + if (_vignette.effect > 0) { + if (slave.devotion > 50) { + t += `<span class='hotpink'>increasing ${his} devotion to you.</span>`; + } else if (slave.devotion >= -20) { + t += `<span class='hotpink'>increasing ${his} acceptance of you.</span>`; + } else if (slave.devotion > -10) { + t += `<span class='hotpink'>reducing ${his} dislike of you.</span>`; + } else { + t += `<span class='hotpink'>reducing ${his} hatred of you.</span>`; + } + } else if (_vignette.effect < 0) { + if (slave.devotion > 50) { + t += `<span class='mediumorchid'>reducing ${his} devotion to you.</span>`; + } else if (slave.devotion >= -20) { + t += `<span class='mediumorchid'>reducing ${his} acceptance of you.</span>`; + } else if (slave.devotion > -10) { + t += `<span class='mediumorchid'>increasing ${his} dislike of you.</span>`; + } else { + t += `<span class='mediumorchid'>increasing ${his} hatred of you.</span>`; + } + } else { + t += `an incident without lasting effect.`; + } + slave.devotion += (1*_vignette.effect); + } else if (_vignette.type == "trust") { + if (_vignette.effect > 0) { + if (slave.trust > 20) { + t += `<span class='mediumaquamarine'>increasing ${his} trust in you.</span>`; + } else if (slave.trust > -10) { + t += `<span class='mediumaquamarine'>reducing ${his} fear of you.</span>`; + } else { + t += `<span class='mediumaquamarine'>reducing ${his} terror of you.</span>`; + } + } else if (_vignette.effect < 0) { + if (slave.trust > 20) { + t += `<span class='gold'>reducing ${his} trust in you.</span>`; + } else if (slave.trust >= -20) { + t += `<span class='gold'>increasing ${his} fear of you.</span>`; + } else { + t += `<span class='gold'>increasing ${his} terror of you.</span>`; + } + } else { + t += `an incident without lasting effect.`; + } + slave.trust += (1*_vignette.effect); + } else if (_vignette.type == "health") { + if (_vignette.effect > 0) { + t += `<span class='green'>improving ${his} health.</span>`; + } else if (_vignette.effect < 0) { + t += `<span class='red'>affecting ${his} health.</span>`; + } else { + t += `an incident without lasting effect.`; + } + slave.health += (2*_vignette.effect); + } else { + if (_vignette.effect > 0) { + t += `<span class='green'>gaining you a bit of reputation.</span>`; + } else if (_vignette.effect < 0) { + t += `<span class='red'>losing you a bit of reputation.</span>`; + } else { + t += `an incident without lasting effect.`; + } + V.rep += Math.trunc(V.FResult*_vignette.effect*0.1); + } } - function calcWorksWithRival(slave) { - const en = getSlave(slave.rivalryTarget); - if (en !== undefined && sameAssignmentP(slave, en)) result -= 1; - } + return t; +} - function calcHInjectionsDiet(slave) { - if (slave.drugs === "male hormone injections" || slave.drugs === "female hormone injections") - result -= 10; - if (slave.diet === "XXY") - result += 2; - else if (slave.diet === "XY" || slave.diet === "XX") - result += 1; - else if (slave.diet === "cum production") - result += 1; - else if (slave.diet === "fertility") - result += 1; - } - function calcPreg(slave) { - if (V.arcologies[0].FSRepopulationFocus > 20) { - if (slave.preg > 10) result += 2; - else result -= 2; - } else if (V.arcologies[0].FSRestart > 20) { - if (slave.bellyPreg >= 500 && slave.breedingMark === 1 && V.propOutcome === 1) - result += 1; - else if (slave.preg > 10) - result -= 10; - else - result += 0; - } - } +/*:: SA servant [script]*/ - function calcRace(slave) { - if (V.arcologies[0].FSSupremacist !== "unset" && supremeRaceP(slave)) - result -= (V.arcologies[0].FSSupremacist/5) + (V.arcologies[0].FSSupremacistLawME*10); - if (V.arcologies[0].FSSubjugationist !== "unset" && inferiorRaceP(slave)) - result += (V.arcologies[0].FSSubjugationist/10) + (V.arcologies[0].FSSubjugationistLawME); - } +window.saServant = function saServant(slave) { - function calcSexAttributes(slave) { - if (slave.clitPiercing > 2) result += 1; - if (slave.fetishKnown === 1 && slave.fetishStrength > 60 && slave.fetish != "none") - result += slave.fetishStrength/5; - - if (slave.attrKnown === 1) { - result += Math.trunc(slave.attrXX/20); - result += Math.trunc(slave.attrXY/20); - if (slave.energy > 95) result += 3; - else if (slave.energy > 80) result += 2; - else if (slave.energy > 60) result += 1; - else if (slave.energy <= 20) result -= 2; - else if (slave.energy <= 40) result -= 1; - } - if (slave.sexualFlaw !== "none") result -= 2; - if (slave.sexualQuirk !== "none") result += 2; - if (slave.behavioralFlaw !== "none") result -= 2; - if (slave.behavioralQuirk !== "none") result += 2; - } - - function calcCareer(slave) { - if (setup.whoreCareers.includes(slave.career)) - result += 1; - else if (slave.oralCount + slave.analCount + slave.vaginalCount + slave.mammaryCount + slave.penetrativeCount > 1000) - result += 1; - } - - function calcSight(slave) { - if (!canSee(slave)) result -= 3; - else if (slave.eyes <= -1) { - if (slave.eyewear !== "corrective glasses" && slave.eyewear !== "corrective contacts") - result -= 1; - } else if (slave.eyewear === "blurring glasses") - result -= 1; - else if (slave.eyewear === "blurring contacts") - result -= 1; - } + var pronouns = getPronouns(slave); + var he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, boy = pronouns.noun; + var He = capFirstChar(he), His = capFirstChar(his); + var V = State.variables; - function calcHearing(slave) { - if (!canHear(slave)) result -= 2; - else if (slave.hears <= -1) { - if (slave.earwear !== "hearing aids") - result -= 1; - } else if (slave.earwear === "muffling ear plugs") - result -= 1; - } + var t = `works as a servant. ${He} performs the lowest jobs in your penthouse, cleaning up after your other slaves, bathing them, helping them dress, and giving them sexual relief.`; - function calcEgyptianBonus(slave) { - if (V.racialVarieties === undefined) V.racialVarieties = []; - if (!V.racialVarieties.includes(slave.race)) - V.racialVarieties.push(slave.race); + if (V.servantsQuarters > 0) { + if ((V.universalRulesFacilityWork == 1 && slave.assignment == "be a servant" && V.servantsQuartersSpots > 0) || (slave.assignment == "work as a servant")) { + if (slave.assignment == "be a servant") { + t += ` Since there's extra space in the servants' quarters, ${V.assistantName} attaches ${him} to the cadre of maids there.`; + V.servantsQuartersSpots--; + } + if (V.Stewardess != 0) { + t += ` This brings ${him} under ${V.Stewardess.slaveName}'s supervision. The Stewardess `; + if (slave.devotion < -20) { + t += `subjects ${him} to <span class='gold'>corrective rape</span> when ${his} service is imperfect, <span class='hotpink'>when ${he} steps out of line</span>, or when the Stewardess just feels like raping ${him}, forcing the poor slave to <span class='yellowgreen'>find refuge in work.</span>`; + slave.devotion += 2; + slave.trust -= 2; + } else if (slave.devotion <= 20) { + t += `molests ${him}, encouraging the poor slave to <span class='hotpink'>keep ${his} head down</span> and <span class='yellowgreen'>work harder.</span>`; + slave.devotion += 2; + } else { + t += `uses <span class='hotpink'>sex as a reward</span>, getting ${him} off when ${he} <span class='yellowgreen'>works harder.</span>`; + slave.devotion++; + } + if (!(canHear(slave))) { + t += ` However, ${his} inability to hear often leaves ${him} oblivious to ${V.Stewardess.slaveName}'s orders, limiting their meaningful interactions.`; + V.cash += (V.stewardessBonus/4); + } else if ((slave.hears == -1 && slave.earwear != "hearing aids") || (slave.hears == 0 && slave.earwear == "muffling ear plugs")) { + t += ` However, ${he} often doesn't catch what ${V.Stewardess.slaveName} says, leading to frustration, confusion and less work done.`; + V.cash += (V.stewardessBonus/2); + } else { + V.cash += V.stewardessBonus; + } + } + } } - function calcYouthBonus(slave) { - if (slave.visualAge < 30) { - if (slave.actualAge > 30) - result += 5; // experienced for her apparent age - if (slave.physicalAge > 30) - result -= slave.physicalAge/2; // too old :( + t += ` ${He} is `; + if (slave.trust < -20) { + t += "frightened of punishment and works very hard, <span class='yellowgreen'>reducing the upkeep</span> of your slaves."; + } else if (slave.devotion < -20) { + if (slave.trust >= 20) { + t += `uninterested in doing such work and barely lifts a finger to <span class='yellowgreen'>reduce the upkeep</span> of your slaves.`; + } else { + t += `reluctant, requiring your other slaves to force ${his} services, and does not <span class='yellowgreen'>reduce upkeep</span> of your slaves much.`; } + } else if (slave.devotion <= 20) { + t += `hesitant, requiring your other slaves to demand ${his} services, and only slightly <span class='yellowgreen'>reduces upkeep</span> of your slaves.`; + } else if (slave.devotion <= 50) { + t += `obedient, offering your other slaves ${his} services, and moderately <span class='yellowgreen'>reduces the upkeep</span> of your slaves.`; + } else if (slave.devotion <= 95) { + t += `devoted, happily giving your other slaves ${his} services, and <span class='yellowgreen'>reduces the upkeep</span> of your slaves.`; + } else { + t += `so happy to serve your other slaves that ${he} often sees to their needs before they know they have them, and greatly <span class='yellowgreen'>reduces the upkeep</span> of your slaves.`; } - function calcMatureBonus(slave) { - if (slave.visualAge >= 30 && slave.actualAge >= 30 && slave.physicalAge < slave.visualAge) - result += Math.min((slave.physicalAge - slave.visualAge) * 2, 20); // looks and acts mature, but has a body that just won't quit - } + let _oral = jsRandom(5,10); + slave.oralCount += _oral; + V.oralTotal += _oral; - function calcNotFuckdoll(slave) { - if (V.familyTesting === 1 && totalRelatives(slave) > 0) - calcWorksWithRelatives(slave); - else if(!V.familyTesting && slave.relation !==0) - calcWorksWithRelativesVanilla(slave); - if (slave.relationship > 0) calcWorksWithRelationship(slave); - if (slave.rivalry !== 0) calcWorksWithRival(slave); - calcHInjectionsDiet(slave); - calcPreg(slave); - calcRace(slave); - calcSexAttributes(slave); - calcCareer(slave); - calcSight(slave); - calcHearing(slave); - if (V.arcologies[0].FSEgyptianRevivalist !== "unset") - calcEgyptianBonus(slave); - if (V.arcologies[0].FSYouthPreferentialist !== "unset") - calcYouthBonus(slave); - else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") - calcMatureBonus(slave); + if (slave.relationship == -2) { + t += ` ${He} does ${his} best to perfect your domesticity due to ${his} emotional bond to you.`; + } else if (slave.relationship == -3 && slave.devotion > 50) { + t += ` ${He} does ${his}very best to be the perfect housewife, making ${him} an outstanding servant.`; } - function calcAge(slave) { - if ((V.arcologies[0].FSRepopulationFocus !== "unset" || V.arcologies[0].FSGenderFundamentalist !== "unset") && slave.physicalAge === V.minimumSlaveAge && slave.physicalAge === V.fertilityAge && canGetPregnant(slave)) { - result += 1; - if (slave.birthWeek === 0) result += result; - else if (slave.birthWeek < 4) result += 0.2*result; - } else if (slave.physicalAge === V.minimumSlaveAge) { - result += 1; - if (slave.birthWeek === 0 ) result += 0.5*result; - else if (slave.birthWeek < 4) result += 0.1*result; - } else if (slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (V.arcologies[0].FSRepopulationFocus !== "unset" || V.arcologies[0].FSGenderFundamentalist !== "unset")) { - result += 1; - if (slave.birthWeek === 0) - result += 0.5*result; - else if (slave.birthWeek < 4) - result += 0.1*result; - } + if (setup.servantCareers.includes(slave.career)) { + t += ` ${He} has experience with house keeping from ${his} life before ${he} was a slave, making ${him} more effective.`; + } else if (slave.skillS >= V.masteredXP) { + t += ` ${He} has experience with house keeping from working for you, making ${him} more effective.`; + } else { + slave.skillS += jsRandom(1,Math.ceil((slave.intelligence+slave.intelligenceImplant)/15) + 8); } - function calcAmputation(slave) { - switch(slave.amp) { - case 0: - case -2: - case -5: - break; - case 1: - result -= 2; - break; - default: - result -= 1; + if (slave.fetishStrength > 60) { + if (slave.fetish == "submissive" && slave.fetishKnown == 1) { + t += ` ${His} natural affinity for submission increases ${his} effectiveness.`; + } else if (slave.fetishKnown == 1 && slave.fetish == "dom") { + t += ` ${His} sexual appetite for domination reduces ${his} effectiveness.`; } } - function calcHedonismWeight(slave) { - if (slave.weight < 10) - result -= 2; - else if (slave.weight > 190) - result -= 5; // too fat - } - return FResult; -})(); - -/* End Week Passage Conversions */ - -/*:: SA rest [script]*/ - -window.saRest = function saRest(slave) { - - var pronouns = getPronouns(slave); - var he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, boy = pronouns.noun; - var He = capFirstChar(he), His = capFirstChar(his); - var V = State.variables; - - var t = " takes the week off."; - - if (slave.fuckdoll > 0) { - t += " ${He} has nothing to do but "; - if (slave.amp == 0) { - t += "lie "; - } else { - t += "stand "; - } - t += "in place."; + if (slave.energy < 20) { + t += ` ${His} frigidity allows ${him} to ignore the intercourse all around ${him}, making ${him} very efficient.`; + } else if (slave.energy < 40) { + t += ` ${His} low sex drive keeps ${him} from becoming too distracted by the intercourse all around ${him}, making ${him} more efficient.`; } - if (slave.health > 90) { - t += ` ${His} health is so outstanding that rest does not improve it.`; - } else if (slave.health > -100) { - t += ` ${His} <span class='green'>health recovers</span> with rest.`; - slave.health += 10; - if (!(canHear(slave))) { - t += ` Since ${he} is deaf, the hustle and bustle of daily life in the penthouse <span class='green'>didn't bother ${him} at all.</span>`; - slave.health += 3; - } else if ((slave.hears == -1 && slave.earwear != "hearing aids") || (slave.hears == 0 && slave.earwear == "muffling ear plugs")) { - t += ` Since ${he} is hard of hearing, the hustle and bustle of daily life in the penthouse <span class='green'>didn't disturb ${his} rest as much.</span>`; - slave.health += 1; - } + if ((slave.eyes <= -1 && slave.eyewear != "corrective glasses" && slave.eyewear != "corrective contacts") || (slave.eyewear == "blurring glasses") || (slave.eyewear == "blurring contacts")) { + t += ` ${His} bad vision makes ${him} a worse servant.`; } - if (slave.fuckdoll == 0 && slave.fetish != "mindbroken") { - if (slave.devotion > 20) { - if (slave.trust <= 20) { - t += ` Being allowed to rest <span class='mediumaquamarine'>reduces ${his} fear</span> of you.`; - slave.trust += 4; - } else if (slave.trust <= 50) { - t += ` Being allowed to rest <span class='mediumaquamarine'>builds ${his} trust</span> in you.`; - slave.trust += 2; - } else { - t += ` Being allowed to rest <span class='mediumaquamarine'>confirms ${his} trust</span> in you.`; - slave.trust += 2; - } + if (slave.lactation > 0) { + t += ` Since ${he} is lactating, `; + if (slave.devotion > 20 || slave.trust < -20) { + t += ` ${he} serves `; } else { - if (slave.trust < -20) { - t += ` Being allowed to rest <span class='mediumaquamarine'>reduces ${his} fear</span> of you.`; - slave.trust += 4; - } + t += `and disobedient, ${he} is restrained to serve `; } + t += `as a drink dispenser at mealtimes, and makes a meaningful contribution to ${his} fellow slaves' nutrition in concert with the feeding systems.`; } - if (V.showVignettes == 1 && slave.assignment === Job.REST) { + if (V.showVignettes == 1 && (slave.assignment === Job.SERVANT || slave.assignment === Job.SERVER)) { var _vignette = GetVignette(slave); t += ` __This week__ ${_vignette.text} ` if (_vignette.type == "cash") { @@ -13111,201 +13016,11 @@ window.saRest = function saRest(slave) { } return t; -} - -/*:: SA servant [script]*/ +}; -window.saServant = function saServant(slave) { +/*:: SA stay confined [script]*/ - var pronouns = getPronouns(slave); - var he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, boy = pronouns.noun; - var He = capFirstChar(he), His = capFirstChar(his); - var V = State.variables; - - var t = `works as a servant. ${He} performs the lowest jobs in your penthouse, cleaning up after your other slaves, bathing them, helping them dress, and giving them sexual relief.`; - - if (V.servantsQuarters > 0) { - if ((V.universalRulesFacilityWork == 1 && slave.assignment == "be a servant" && V.servantsQuartersSpots > 0) || (slave.assignment == "work as a servant")) { - if (slave.assignment == "be a servant") { - t += ` Since there's extra space in the servants' quarters, ${V.assistantName} attaches ${him} to the cadre of maids there.`; - V.servantsQuartersSpots--; - } - if (V.Stewardess != 0) { - t += ` This brings ${him} under ${V.Stewardess.slaveName}'s supervision. The Stewardess `; - if (slave.devotion < -20) { - t += `subjects ${him} to <span class='gold'>corrective rape</span> when ${his} service is imperfect, <span class='hotpink'>when ${he} steps out of line</span>, or when the Stewardess just feels like raping ${him}, forcing the poor slave to <span class='yellowgreen'>find refuge in work.</span>`; - slave.devotion += 2; - slave.trust -= 2; - } else if (slave.devotion <= 20) { - t += `molests ${him}, encouraging the poor slave to <span class='hotpink'>keep ${his} head down</span> and <span class='yellowgreen'>work harder.</span>`; - slave.devotion += 2; - } else { - t += `uses <span class='hotpink'>sex as a reward</span>, getting ${him} off when ${he} <span class='yellowgreen'>works harder.</span>`; - slave.devotion++; - } - if (!(canHear(slave))) { - t += ` However, ${his} inability to hear often leaves ${him} oblivious to ${V.Stewardess.slaveName}'s orders, limiting their meaningful interactions.`; - V.cash += (V.stewardessBonus/4); - } else if ((slave.hears == -1 && slave.earwear != "hearing aids") || (slave.hears == 0 && slave.earwear == "muffling ear plugs")) { - t += ` However, ${he} often doesn't catch what ${V.Stewardess.slaveName} says, leading to frustration, confusion and less work done.`; - V.cash += (V.stewardessBonus/2); - } else { - V.cash += V.stewardessBonus; - } - } - } - } - - t += ` ${He} is `; - if (slave.trust < -20) { - t += "frightened of punishment and works very hard, <span class='yellowgreen'>reducing the upkeep</span> of your slaves."; - } else if (slave.devotion < -20) { - if (slave.trust >= 20) { - t += `uninterested in doing such work and barely lifts a finger to <span class='yellowgreen'>reduce the upkeep</span> of your slaves.`; - } else { - t += `reluctant, requiring your other slaves to force ${his} services, and does not <span class='yellowgreen'>reduce upkeep</span> of your slaves much.`; - } - } else if (slave.devotion <= 20) { - t += `hesitant, requiring your other slaves to demand ${his} services, and only slightly <span class='yellowgreen'>reduces upkeep</span> of your slaves.`; - } else if (slave.devotion <= 50) { - t += `obedient, offering your other slaves ${his} services, and moderately <span class='yellowgreen'>reduces the upkeep</span> of your slaves.`; - } else if (slave.devotion <= 95) { - t += `devoted, happily giving your other slaves ${his} services, and <span class='yellowgreen'>reduces the upkeep</span> of your slaves.`; - } else { - t += `so happy to serve your other slaves that ${he} often sees to their needs before they know they have them, and greatly <span class='yellowgreen'>reduces the upkeep</span> of your slaves.`; - } - - let _oral = jsRandom(5,10); - slave.oralCount += _oral; - V.oralTotal += _oral; - - if (slave.relationship == -2) { - t += ` ${He} does ${his} best to perfect your domesticity due to ${his} emotional bond to you.`; - } else if (slave.relationship == -3 && slave.devotion > 50) { - t += ` ${He} does ${his}very best to be the perfect housewife, making ${him} an outstanding servant.`; - } - - if (setup.servantCareers.includes(slave.career)) { - t += ` ${He} has experience with house keeping from ${his} life before ${he} was a slave, making ${him} more effective.`; - } else if (slave.skillS >= V.masteredXP) { - t += ` ${He} has experience with house keeping from working for you, making ${him} more effective.`; - } else { - slave.skillS += jsRandom(1,Math.ceil((slave.intelligence+slave.intelligenceImplant)/15) + 8); - } - - if (slave.fetishStrength > 60) { - if (slave.fetish == "submissive" && slave.fetishKnown == 1) { - t += ` ${His} natural affinity for submission increases ${his} effectiveness.`; - } else if (slave.fetishKnown == 1 && slave.fetish == "dom") { - t += ` ${His} sexual appetite for domination reduces ${his} effectiveness.`; - } - } - - if (slave.energy < 20) { - t += ` ${His} frigidity allows ${him} to ignore the intercourse all around ${him}, making ${him} very efficient.`; - } else if (slave.energy < 40) { - t += ` ${His} low sex drive keeps ${him} from becoming too distracted by the intercourse all around ${him}, making ${him} more efficient.`; - } - - if ((slave.eyes <= -1 && slave.eyewear != "corrective glasses" && slave.eyewear != "corrective contacts") || (slave.eyewear == "blurring glasses") || (slave.eyewear == "blurring contacts")) { - t += ` ${His} bad vision makes ${him} a worse servant.`; - } - - if (slave.lactation > 0) { - t += ` Since ${he} is lactating, `; - if (slave.devotion > 20 || slave.trust < -20) { - t += ` ${he} serves `; - } else { - t += `and disobedient, ${he} is restrained to serve `; - } - t += `as a drink dispenser at mealtimes, and makes a meaningful contribution to ${his} fellow slaves' nutrition in concert with the feeding systems.`; - } - - if (V.showVignettes == 1 && (slave.assignment === Job.SERVANT || slave.assignment === Job.SERVER)) { - var _vignette = GetVignette(slave); - t += ` __This week__ ${_vignette.text} ` - if (_vignette.type == "cash") { - if (_vignette.effect > 0) { - t += `<span class='yellowgreen'>making you an extra ${cashFormat(Math.trunc(V.FResult*_vignette.effect))}.</span>`; - } else if (_vignette.effect < 0) { - t += `<span class='red'>losing you ${cashFormat(Math.abs(Math.trunc(V.FResult*_vignette.effect)))}.</span>`; - } else { - t += `an incident without lasting effect.`; - } - V.cash += Math.trunc(V.FResult*_vignette.effect); - } else if (_vignette.type == "devotion") { - if (_vignette.effect > 0) { - if (slave.devotion > 50) { - t += `<span class='hotpink'>increasing ${his} devotion to you.</span>`; - } else if (slave.devotion >= -20) { - t += `<span class='hotpink'>increasing ${his} acceptance of you.</span>`; - } else if (slave.devotion > -10) { - t += `<span class='hotpink'>reducing ${his} dislike of you.</span>`; - } else { - t += `<span class='hotpink'>reducing ${his} hatred of you.</span>`; - } - } else if (_vignette.effect < 0) { - if (slave.devotion > 50) { - t += `<span class='mediumorchid'>reducing ${his} devotion to you.</span>`; - } else if (slave.devotion >= -20) { - t += `<span class='mediumorchid'>reducing ${his} acceptance of you.</span>`; - } else if (slave.devotion > -10) { - t += `<span class='mediumorchid'>increasing ${his} dislike of you.</span>`; - } else { - t += `<span class='mediumorchid'>increasing ${his} hatred of you.</span>`; - } - } else { - t += `an incident without lasting effect.`; - } - slave.devotion += (1*_vignette.effect); - } else if (_vignette.type == "trust") { - if (_vignette.effect > 0) { - if (slave.trust > 20) { - t += `<span class='mediumaquamarine'>increasing ${his} trust in you.</span>`; - } else if (slave.trust > -10) { - t += `<span class='mediumaquamarine'>reducing ${his} fear of you.</span>`; - } else { - t += `<span class='mediumaquamarine'>reducing ${his} terror of you.</span>`; - } - } else if (_vignette.effect < 0) { - if (slave.trust > 20) { - t += `<span class='gold'>reducing ${his} trust in you.</span>`; - } else if (slave.trust >= -20) { - t += `<span class='gold'>increasing ${his} fear of you.</span>`; - } else { - t += `<span class='gold'>increasing ${his} terror of you.</span>`; - } - } else { - t += `an incident without lasting effect.`; - } - slave.trust += (1*_vignette.effect); - } else if (_vignette.type == "health") { - if (_vignette.effect > 0) { - t += `<span class='green'>improving ${his} health.</span>`; - } else if (_vignette.effect < 0) { - t += `<span class='red'>affecting ${his} health.</span>`; - } else { - t += `an incident without lasting effect.`; - } - slave.health += (2*_vignette.effect); - } else { - if (_vignette.effect > 0) { - t += `<span class='green'>gaining you a bit of reputation.</span>`; - } else if (_vignette.effect < 0) { - t += `<span class='red'>losing you a bit of reputation.</span>`; - } else { - t += `an incident without lasting effect.`; - } - V.rep += Math.trunc(V.FResult*_vignette.effect*0.1); - } - } - - return t; -}; - -/*:: SA stay confined [script]*/ - -window.saStayConfined = function saStayConfined(slave) { +window.saStayConfined = function saStayConfined(slave) { var pronouns = getPronouns(slave) var he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, boy = pronouns.noun @@ -29679,7 +29394,7 @@ window.GetVignette = function GetVignette(slave) { type: "rep", effect: 0, }); - if ($seeDicks != 100) { + if (V.seeDicks != 100) { vignettes.push({ text: "a woman dragged her angry husband along so he could watch her get eaten out by a whore,", type: "rep", @@ -31256,7 +30971,7 @@ window.GetVignette = function GetVignette(slave) { type: "rep", effect: 0, }); - if ($seeDicks != 100) { + if (V.seeDicks != 100) { vignettes.push({ text: "a woman dragged her angry husband along so he could watch his wife get eaten out by a public slut,", type: "rep", @@ -31859,13 +31574,7 @@ window.nationalityToAccent = function nationalityToAccent(slave) { slave.accent = (V.language === "Spanish") ? jsEither([0, 1, 1, 1, 1, 2]) : naturalAccent; break; case "Bosnian": - if (V.language === "Croatian") { - slave.accent = jsEither([0, 1, 1, 1, 1, 2]); - } else if (V.language === "Serbian") { - slave.accent = jsEither([0, 1, 1, 1, 1, 2]); - } else { - slave.accent = naturalAccent; - } + slave.accent = naturalAccent; break; case "Brazilian": slave.accent = (V.language === "Portuguese") ? jsEither([0, 1, 1, 1, 1, 2]) : naturalAccent; @@ -31979,13 +31688,7 @@ window.nationalityToAccent = function nationalityToAccent(slave) { slave.accent = (V.language === "Spanish") ? jsEither([0, 1, 1, 1, 1, 2]) : naturalAccent; break; case "Croatian": - if (V.language === "Bosnian") { - slave.accent = jsEither([0, 1, 1, 1, 1, 2]); - } else if (V.language === "Serbian") { - slave.accent = jsEither([0, 1, 1, 1, 1, 2]); - } else { - slave.accent = naturalAccent; - } + slave.accent = naturalAccent; break; case "Cuban": slave.accent = (V.language === "Spanish") ? jsEither([0, 1, 1, 1, 1, 2]) : naturalAccent; @@ -32317,9 +32020,7 @@ window.nationalityToAccent = function nationalityToAccent(slave) { slave.accent = naturalAccent; break; case "Luxembourgian": - if (V.language === "Luxembourgish") { - slave.accent = jsEither([0, 0, 0, 0, 0, 0, 1]); - } else if (V.language === "German") { + if (V.language === "German") { slave.accent = jsEither([0, 1, 1, 1, 1, 2]); } else if (V.language === "French") { slave.accent = jsEither([0, 1, 1, 1, 1, 2]); @@ -32331,22 +32032,10 @@ window.nationalityToAccent = function nationalityToAccent(slave) { slave.accent = naturalAccent; break; case "Malagasy": - if (V.language === "French") { - slave.accent = jsEither([0, 1, 1, 1, 1, 2]); - } else if (V.language === "English") { - slave.accent = jsEither([0, 1, 2, 2, 2, 3, 3]); - } else { - slave.accent = naturalAccent; - } + slave.accent = naturalAccent; break; case "Malawian": - if (V.language === "English") { - slave.accent = jsEither([0, 1, 1, 1, 1, 2]); - } else if (V.language === "Chichewa") { - slave.accent = jsEither([0, 0, 0, 0, 0, 0, 1]); - } else { - slave.accent = naturalAccent; - } + slave.accent = naturalAccent; break; case "Malaysian": slave.accent = (V.language === "Malay") ? jsEither([0, 0, 0, 0, 0, 0, 1]) : naturalAccent; @@ -32585,13 +32274,7 @@ window.nationalityToAccent = function nationalityToAccent(slave) { slave.accent = (V.language === "French") ? jsEither([0, 1, 1, 1, 1, 2]) : naturalAccent; break; case "Serbian": - if (V.language === "Bosnian") { - slave.accent = jsEither([0, 1, 1, 1, 1, 2]); - } else if (V.language === "Serbian") { - slave.accent = jsEither([0, 1, 1, 1, 1, 2]); - } else { - slave.accent = naturalAccent; - } + slave.accent = naturalAccent; break; case "Seychellois": if (V.language === "French") { @@ -37279,7 +36962,7 @@ window.FacilityNameCleanup = function FacilityNameCleanup() { V.farmyardNameCaps = V.farmyardNameCaps || "The Farmyard"; }; -/*:: Beauty [script]*/ +/*:: Slave Cost JS [script]*/ window.Beauty = (function() { "use strict"; @@ -37342,7 +37025,7 @@ window.Beauty = (function() { calcMultipliersBeauty(slave); beauty = Math.max(1, Math.trunc(0.5*beauty)); - V.beauty = beauty; + return beauty; }; function calcInitBeauty(slave) { @@ -38136,367 +37819,1095 @@ window.Beauty = (function() { } break; } - }; + }; + + function calcFutaLawTrueFutaBeauty(slave) { + if (slave.dick <= 10) { + beauty += slave.dick; + } else if (slave.dick > 20) { + beauty += 2; + } else { + beauty += 4; + } + }; + + function calcFutaLawBigDickBeauty(slave) { + beauty += slave.dick; + if (slave.balls > 120) { + beauty += 14; + } else if (slave.balls > 100) { + beauty += 12; + } else if (slave.balls > 80) { + beauty += 10; + } else if (slave.balls > 60) { + beauty += 8; + } else if (slave.balls > 40) { + beauty += 6; + } else if (slave.balls > 20) { + beauty += 4; + } else if (slave.balls > 10) { + beauty += 2; + } else { + beauty += slave.balls; + } + }; + + function calcFutaLawBigBootyBeauty(slave) { + if (slave.hips >= 1) { + beauty += 4*(slave.hips - 1); /*8*/ + if (arcology.FSSlimnessEnthusiast !== "unset") { + beauty += 4*(slave.hips - 1); /*8*/ /* offsets the malus for big butts */ + } + } + if (slave.analSkill > 60 && slave.anus >= 2) { + beauty += 2*(slave.anus-2); /*6*/ + if (arcology.FSSlimnessEnthusiast != "unset") { + beauty += 2*(slave.anus-2); /*6*/ /* offsets the malus for big butts */ + } + } + if (slave.butt >= 5) { + beauty += (slave.butt - 5); /*15*/ + } + }; + + function calcFutaLawFemboyBeauty(slave) { + if (arcology.FSSlimnessEnthusiast === "unset") { /*balance with slimness*/ + beauty += 20; + if (slave.boobs < 300) { + beauty += 12; + } else if (slave.boobs < 400) { + beauty += 6; + } + } + if (slave.dick === 1) { + beauty += 12; + } else if (slave.dick === 2) { + beauty += 6; + } + if (slave.balls <= 2) { + beauty += 8; + } + if (slave.faceShape === "cute" && slave.face > 0) { /*uggos need not apply, maybe a small boost for other faceShapes*/ + beauty += ((arcology.FSGenderRadicalist/25)*(slave.face/30)) - 2; /*gives a slightly better boost than androgynous does with gendrad boost, 15.3*/ + } + if (slave.nipples === "tiny") { + beauty += 5; + } else if (slave.nipples === "cute") { + beauty += 2; + } else { + beauty -= 5; + } + }; + + function calcBodyProportionBeauty(slave) { + if (arcology.FSGenderFundamentalist !== "unset") { + if (slave.shoulders > slave.hips) { + if (slave.boobs <= 2000*(slave.shoulders - slave.hips)) { + beauty -= (slave.shoulders - slave.hips)*(1 + (arcology.FSGenderFundamentalist/200)); + } + } + } else if (arcology.FSGenderRadicalist === "unset") { + if (slave.shoulders > slave.hips) { + if (slave.boobs <= 2000*(slave.shoulders - slave.hips)) { + beauty -= slave.shoulders - slave.hips; + } + } + } + }; + + function calcVoiceBeauty(slave) { + if (canTalk(slave)) { + if (slave.accent >= 3) { + beauty -= 1; + } else if (slave.accent === 1) { + beauty += 1; + } + } else { + beauty -= 2; + } + }; + + function calcLimbsBeauty(slave) { + switch (slave.amp) { + case 1: + beauty -= 10; + break; + case -1: + case -2: + case -4: + beauty -= 2; + break; + } + }; + + function calcPubertyBeauty(slave) { + if (slave.pubertyXX === 1) { + beauty += 5; + } + if (slave.pubertyXY === 0 && slave.physicalAge > V.potencyAge && slave.balls > 0) { + beauty += 10; + if (arcology.FSGenderFundamentalist !== "unset") { + beauty += 5; + } + } + }; + + function calcFSMiscBeauty(slave) { + if (arcology.FSTransformationFetishist > 20) { + if (slave.lips > 70) { + if (slave.lipsImplant/slave.lips < 0.5) { + beauty -= ((slave.lips/10) + (arcology.FSTransformationFetishist/20)); + } + } + if (slave.hips === 3) { + beauty += 10; + } + } + if ((arcology.FSGenderRadicalist > 20 && arcology.FSGenderRadicalistLawFuta !== 3) || arcology.FSSlimnessEnthusiast > 20) { + if (slave.hips < 0) { + beauty += Math.abs(slave.hips); + } + } + if (arcology.FSPhysicalIdealist !== "unset") { + if (slave.height > Height.mean(slave)) { + beauty += 10; + } + } + if (arcology.FSHedonisticDecadenceLaw2 === 1) { + if (slave.boobs >= 2000 && slave.butt >= 5 && slave.weight > 95) { + beauty += 5 + (arcology.FSHedonisticDecadence/20); /*10*/ + } else { + beauty -= 15 + (arcology.FSHedonisticDecadence/20); /*-20*/ + } + } + if (arcology.FSChattelReligionistCreed === 1) { + if (V.nicaeaAssignment === slave.assignment) { + beauty += 2*V.nicaeaPower; + } + } + }; + + function calcPurityBeauty(slave) { + if (isPure(slave)) { + V.pure = V.pure++ || 1; + if (arcology.FSBodyPurist !== "unset") { + beauty += arcology.FSBodyPurist/5; + } + if (arcology.FSTransformationFetishist === "unset") { + beauty += 2; + } + } else if (arcology.FSTransformationFetishist !== "unset") { + beauty += arcology.FSTransformationFetishist/40; + } + }; + + function calcPhysiqueBeauty(slave) { + let physiquePass = 0; + + if (slave.boobs < 500 && slave.butt < 3) { + if (slave.muscles <= 30 && arcology.FSPhysicalIdealist === "unset" && slave.weight <= 10 && arcology.FSHedonisticDecadence === "unset") { + physiquePass = 1; + } else if (arcology.FSPhysicalIdealist !== "unset") { /* no muscle malus for muscle loving societies */ + if (arcology.FSPhysicalIdealistStrongFat === 1 && slave.weight <= 30) { /* reduced weight malus for fat loving societies */ + physiquePass = 1; + } else if (slave.weight <= 10) { + physiquePass = 1; + } + } else if (arcology.FSHedonisticDecadence !== "unset" && slave.weight <= 30) { /* reduced weight malus for fat loving societies */ + if (arcology.FSHedonisticDecadenceStrongFat === 1) { /* no muscle malus for muscle loving societies */ + physiquePass = 1; + } else if (slave.muscles <= 30) { + physiquePass = 1; + } + } + } + if (physiquePass === 1) { + beauty += 40; + if (arcology.FSSlimnessEnthusiast > 20) { + beauty += arcology.FSSlimnessEnthusiast/20; + if (canTalk(slave) && slave.voice === 3) { + beauty += arcology.FSSlimnessEnthusiast/40; + } + } + } else if (slave.butt > 4 && slave.boobs > 800) { + if (arcology.FSSlimnessEnthusiast === "unset") { + beauty += 1; + } + if (arcology.FSAssetExpansionist > 20) { + beauty += arcology.FSAssetExpansionist/20; + if (canTalk(slave) && slave.voice === 3) { + beauty += arcology.FSAssetExpansionist/40; + } + } + } + }; + + function calcSlimBeauty(slave) { + if (slimPass(slave) === 1) { + beauty += 40 + (arcology.FSSlimnessEnthusiast/20); /*45*/ + } else { + beauty -= arcology.FSSlimnessEnthusiast/20; + } + }; + + function calcGenderLawBeauty(slave) { + V.genderLawPass = 1; + + if (arcology.FSPhysicalIdealist === "unset" && arcology.FSHedonisticDecadenceStrongFat === 0 && slave.muscles > 30) { /*muscle check*/ + V.genderLawPass = 0; + } else if (arcology.FSHedonisticDecadence !== "unset" || arcology.FSPhysicalIdealistStrongFat === 1) { /*weight check*/ + if (slave.weight > 130 || slave.weight <= -30) { + V.genderLawPass = 0; + } + } else if (Math.abs(slave.weight) > 30) { + V.genderLawPass = 0; + } else if (arcology.FSAssetExpansionist !== "unset") { + if (slave.boobs < 500 || slave.boobs > 1600 || slave.butt < 3 || slave.butt > 6) { + V.genderLawPass = 0; + } + } else if (slave.boobs < 500 || slave.boobs > 800 || slave.butt < 3 || slave.butt > 4) { + V.genderLawPass = 0; + } + if (V.genderLawPass === 1) { + beauty += 60; + } else { + beauty -= 10; + } + }; + + function calcMultipliersBeauty(slave) { + calcBellyBeauty(slave); + if (arcology.FSGenderRadicalist !== "unset") { + if (slave.bellyPreg >= 500 && arcology.FSRepopulationFocus === "unset" && arcology.FSRestart === "unset") { + if (slave.mpreg === 1) { + beauty = 0.9*beauty; + } else { + beauty = 0.7*beauty; + } + } + } else if (arcology.FSGenderFundamentalist === "unset") { + if (slave.preg > 10 && arcology.FSRepopulationFocus === "unset" && arcology.FSRestart === "unset") { + beauty = 0.8*beauty; + } + } + if (slave.breedingMark === 1) { + if (V.propOutcome === 1) { + beauty = 2*beauty; + } else { + beauty += 2; + } + } + if (slave.fuckdoll === 0 && V.seeAge === 1) { + calcAgeBeauty(slave); + } + if (slave.prestige + slave.pornPrestige > 0) { + calcPrestigeBeauty(slave); + } + }; + + function calcBellyBeauty(slave) { + if (slave.bellySag > 0) { + if (slave.belly < 100) { + if (arcology.FSRepopulationFocus === "unset") { + beauty -= 20; + } + } + } + if (slave.bellyImplant >= 1500) { + if (arcology.FSTransformationFetishist > 20) { + beauty += Math.min(Math.trunc(slave.bellyImplant/1000), 50); /*50*/ + } else if (arcology.FSRepopulationFocus > 60) { + if ((slave.ovaries === 0 && slave.mpreg === 0) || slave.preg < -1) { + beauty += 20; + } + } else { + if (slave.bellyImplant >= 750000) { /* multipliers */ + beauty = 0.2*beauty; + } else if (slave.bellyImplant >= 450000) { + beauty = 0.5*beauty; + } else if (slave.bellyImplant >= 300000) { + beauty = 0.7*beauty; + } else if (slave.bellyImplant >= 100000) { + beauty = 0.8*beauty; + } else if (slave.bellyImplant >= 50000) { + beauty = 0.85*beauty; + } else { + beauty = 0.9*beauty; + } + } + } + }; + + function calcAgeBeauty(slave) { + if (slave.physicalAge === V.minimumSlaveAge) { + beauty += 1; + if (slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcology.FSRepopulationFocus !== "unset" || arcology.FSGenderFundamentalist !== "unset") && arcology.FSRestart === "unset") { + if (slave.birthWeek === 0) { + beauty += 1.6*beauty; + } else if (slave.birthWeek < 4) { + beauty += 0.2*beauty; + } + } else { + if (slave.birthWeek === 0) { + beauty += 0.8*beauty; + } else if (slave.birthWeek < 4) { + beauty += 0.1*beauty; + } + } + } else if (slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcology.FSRepopulationFocus !== "unset" || arcology.FSGenderFundamentalist !== "unset") && arcology.FSRestart === "unset") { + beauty += 1; + if (slave.birthWeek === 0) { + beauty += 0.8*beauty; + } else if (slave.birthWeek < 4) { + beauty += 0.1*beauty; + } + } + }; + + function calcPrestigeBeauty(slave) { /* multipliers */ + if (slave.prestige >= 3) { + beauty += 2*beauty; + } else if (slave.prestige === 2) { + beauty += 0.5*beauty; + } else if (slave.prestige === 1) { + beauty += 0.25*beauty; + } + if (slave.pornPrestige === 3) { + beauty += beauty; + } else if (slave.pornPrestige === 2) { + beauty += 0.5*beauty; + } else if (slave.pornPrestige === 1) { + beauty += 0.1*beauty; + } + }; + + return Beauty; +})(); + +// this is a port of the FResult widget +// it has been broken up into several functions, because it grew too long +// it has been wrapped in a closure so as not to pollute the global namespace +// and so that nested functions are only evaluated once + +window.FResult = (function() { + "use strict"; + // we can't initialise our global variables on load, because SugarCube.State isn't initialised + // instead, declare them and initialise on run time + let V, result, incest_bonus; + function FResult(slave) { + V = State.variables; + incest_bonus = V.arcologies[0].FSEgyptianRevivalist > 20 || V.arcologies[0].FSEgyptianRevivalistIncestPolicy === 1; + + calcUseWeights(slave); + if (!slave.fuckdoll) + calcNotFuckdoll(slave); + else + result += slave.fuckdoll/10; + + result += Math.max(0, slave.aphrodisiacs) * 2; + + if (slave.inflationType === "aphrodisiac") + result += slave.inflation*4; + + if (slave.lactation > 0) + result += 1; + + if (slave.nipples === "fuckable") + calcFuckableTits(slave); + + if (V.seeAge === 1) + calcAge(slave); + if (slave.fetish === "mindbroken") + result = Math.trunc(result*0.4); + else + result = Math.trunc(result*0.7); + + if (slave.pregWeek < 0) + result -= Math.trunc(result*slave.pregWeek/10); // reduced the most just after birth + + calcAmputation(slave); + + if (V.arcologies[0].FSHedonisticDecadence > 20) + calcHedonismWeight(slave); + if (result < 2) { + if (supremeRaceP(slave) && V.arcologies[0].FSSupremacist > 20) + result = 0; + else + result = 2; + } + return result; + } + + function calcUseWeights(slave) { + result = (3 - slave.anus)+(slave.muscles/30); + if (slave.muscles < -95) + result -= 5; + else if (slave.muscles < -30) + result -= 2; + + const uses = V.oralUseWeight + V.vaginalUseWeight + V.analUseWeight; + if (uses <= 0) return; + + result += (6+slave.tonguePiercing) * (V.oralUseWeight/uses) * (slave.oralSkill/30); + if (slave.sexualFlaw === "cum addict") + result += (V.oralUseWeight/uses) * (slave.oralSkill/30); + if (canDoVaginal(slave)) { + result += 6 * (V.vaginalUseWeight/uses) * (slave.vaginalSkill/30); + result += (3 - slave.vagina); + result += slave.vaginaLube; + } + if (canDoAnal(slave)) { + result += 6 * (V.analUseWeight/uses) * (slave.analSkill/30); + if (slave.sexualFlaw === "anal addict") + result += (V.analUseWeight/uses) * (slave.analSkill/30); + if (slave.inflationType === "aphrodisiac") + result += (V.analUseWeight/uses) * (slave.inflation * 3); + } + } + + function calcFuckableTits(slave) { + result += 2; + if (slave.fetish === "boobs") + result += Math.trunc(slave.fetishStrength/20); + } + + function calcWorksWithRelatives(slave) { + V.slaves.forEach(islave => { + if (isParentP(slave, islave) && sameAssignmentP(slave, islave)) { + result += 1; + if (incest_bonus) result += 1; + } + if (areSisters(slave, islave) > 0 && sameAssignmentP(slave, islave)) { + result += 1; + if (incest_bonus) result += 1; + } + }); + } + + function calcWorksWithRelativesVanilla(slave) { + const fre = getSlave(slave.relationTarget); + if (fre !== undefined && sameAssignmentP(slave, fre)) { + result += 2; + if (incest_bonus) result += 2; + } + } + + function calcWorksWithRelationship(slave) { + const fre = V.slaves.findIndex(s => { + return haveRelationshipP(slave, s) && sameAssignmentP(slave, s); + }); + if (fre !== -1) result += 1; + } + + function calcWorksWithRival(slave) { + const en = getSlave(slave.rivalryTarget); + if (en !== undefined && sameAssignmentP(slave, en)) result -= 1; + } + + function calcHInjectionsDiet(slave) { + if (slave.drugs === "male hormone injections" || slave.drugs === "female hormone injections") + result -= 10; + if (slave.diet === "XXY") + result += 2; + else if (slave.diet === "XY" || slave.diet === "XX") + result += 1; + else if (slave.diet === "cum production") + result += 1; + else if (slave.diet === "fertility") + result += 1; + } + function calcPreg(slave) { + if (V.arcologies[0].FSRepopulationFocus > 20) { + if (slave.preg > 10) result += 2; + else result -= 2; + } else if (V.arcologies[0].FSRestart > 20) { + if (slave.bellyPreg >= 500 && slave.breedingMark === 1 && V.propOutcome === 1) + result += 1; + else if (slave.preg > 10) + result -= 10; + else + result += 0; + } + } - function calcFutaLawTrueFutaBeauty(slave) { - if (slave.dick <= 10) { - beauty += slave.dick; - } else if (slave.dick > 20) { - beauty += 2; - } else { - beauty += 4; - } - }; + function calcRace(slave) { + if (V.arcologies[0].FSSupremacist !== "unset" && supremeRaceP(slave)) + result -= (V.arcologies[0].FSSupremacist/5) + (V.arcologies[0].FSSupremacistLawME*10); + if (V.arcologies[0].FSSubjugationist !== "unset" && inferiorRaceP(slave)) + result += (V.arcologies[0].FSSubjugationist/10) + (V.arcologies[0].FSSubjugationistLawME); + } - function calcFutaLawBigDickBeauty(slave) { - beauty += slave.dick; - if (slave.balls > 120) { - beauty += 14; - } else if (slave.balls > 100) { - beauty += 12; - } else if (slave.balls > 80) { - beauty += 10; - } else if (slave.balls > 60) { - beauty += 8; - } else if (slave.balls > 40) { - beauty += 6; - } else if (slave.balls > 20) { - beauty += 4; - } else if (slave.balls > 10) { - beauty += 2; - } else { - beauty += slave.balls; - } - }; + function calcSexAttributes(slave) { + if (slave.clitPiercing > 2) result += 1; + if (slave.fetishKnown === 1 && slave.fetishStrength > 60 && slave.fetish != "none") + result += slave.fetishStrength/5; - function calcFutaLawBigBootyBeauty(slave) { - if (slave.hips >= 1) { - beauty += 4*(slave.hips - 1); /*8*/ - if (arcology.FSSlimnessEnthusiast !== "unset") { - beauty += 4*(slave.hips - 1); /*8*/ /* offsets the malus for big butts */ - } - } - if (slave.analSkill > 60 && slave.anus >= 2) { - beauty += 2*(slave.anus-2); /*6*/ - if (arcology.FSSlimnessEnthusiast != "unset") { - beauty += 2*(slave.anus-2); /*6*/ /* offsets the malus for big butts */ - } + if (slave.attrKnown === 1) { + result += Math.trunc(slave.attrXX/20); + result += Math.trunc(slave.attrXY/20); + if (slave.energy > 95) result += 3; + else if (slave.energy > 80) result += 2; + else if (slave.energy > 60) result += 1; + else if (slave.energy <= 20) result -= 2; + else if (slave.energy <= 40) result -= 1; } - if (slave.butt >= 5) { - beauty += (slave.butt - 5); /*15*/ + if (slave.sexualFlaw !== "none") result -= 2; + if (slave.sexualQuirk !== "none") result += 2; + if (slave.behavioralFlaw !== "none") result -= 2; + if (slave.behavioralQuirk !== "none") result += 2; + } + + function calcCareer(slave) { + if (setup.whoreCareers.includes(slave.career)) + result += 1; + else if (slave.oralCount + slave.analCount + slave.vaginalCount + slave.mammaryCount + slave.penetrativeCount > 1000) + result += 1; + } + + function calcSight(slave) { + if (!canSee(slave)) result -= 3; + else if (slave.eyes <= -1) { + if (slave.eyewear !== "corrective glasses" && slave.eyewear !== "corrective contacts") + result -= 1; + } else if (slave.eyewear === "blurring glasses") + result -= 1; + else if (slave.eyewear === "blurring contacts") + result -= 1; + } + + function calcHearing(slave) { + if (!canHear(slave)) result -= 2; + else if (slave.hears <= -1) { + if (slave.earwear !== "hearing aids") + result -= 1; + } else if (slave.earwear === "muffling ear plugs") + result -= 1; + } + + function calcEgyptianBonus(slave) { + if (V.racialVarieties === undefined) V.racialVarieties = []; + if (!V.racialVarieties.includes(slave.race)) + V.racialVarieties.push(slave.race); + } + + function calcYouthBonus(slave) { + if (slave.visualAge < 30) { + if (slave.actualAge > 30) + result += 5; // experienced for her apparent age + if (slave.physicalAge > 30) + result -= slave.physicalAge/2; // too old :( } - }; + } - function calcFutaLawFemboyBeauty(slave) { - if (arcology.FSSlimnessEnthusiast === "unset") { /*balance with slimness*/ - beauty += 20; - if (slave.boobs < 300) { - beauty += 12; - } else if (slave.boobs < 400) { - beauty += 6; - } + function calcMatureBonus(slave) { + if (slave.visualAge >= 30 && slave.actualAge >= 30 && slave.physicalAge < slave.visualAge) + result += Math.min((slave.physicalAge - slave.visualAge) * 2, 20); // looks and acts mature, but has a body that just won't quit + } + + function calcNotFuckdoll(slave) { + if (V.familyTesting === 1 && totalRelatives(slave) > 0) + calcWorksWithRelatives(slave); + else if(!V.familyTesting && slave.relation !==0) + calcWorksWithRelativesVanilla(slave); + if (slave.relationship > 0) calcWorksWithRelationship(slave); + if (slave.rivalry !== 0) calcWorksWithRival(slave); + calcHInjectionsDiet(slave); + calcPreg(slave); + calcRace(slave); + calcSexAttributes(slave); + calcCareer(slave); + calcSight(slave); + calcHearing(slave); + if (V.arcologies[0].FSEgyptianRevivalist !== "unset") + calcEgyptianBonus(slave); + if (V.arcologies[0].FSYouthPreferentialist !== "unset") + calcYouthBonus(slave); + else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") + calcMatureBonus(slave); + } + + function calcAge(slave) { + if ((V.arcologies[0].FSRepopulationFocus !== "unset" || V.arcologies[0].FSGenderFundamentalist !== "unset") && slave.physicalAge === V.minimumSlaveAge && slave.physicalAge === V.fertilityAge && canGetPregnant(slave)) { + result += 1; + if (slave.birthWeek === 0) result += result; + else if (slave.birthWeek < 4) result += 0.2*result; + } else if (slave.physicalAge === V.minimumSlaveAge) { + result += 1; + if (slave.birthWeek === 0 ) result += 0.5*result; + else if (slave.birthWeek < 4) result += 0.1*result; + } else if (slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (V.arcologies[0].FSRepopulationFocus !== "unset" || V.arcologies[0].FSGenderFundamentalist !== "unset")) { + result += 1; + if (slave.birthWeek === 0) + result += 0.5*result; + else if (slave.birthWeek < 4) + result += 0.1*result; } - if (slave.dick === 1) { - beauty += 12; - } else if (slave.dick === 2) { - beauty += 6; + } + + function calcAmputation(slave) { + switch(slave.amp) { + case 0: + case -2: + case -5: + break; + case 1: + result -= 2; + break; + default: + result -= 1; } - if (slave.balls <= 2) { - beauty += 8; + } + + function calcHedonismWeight(slave) { + if (slave.weight < 10) + result -= 2; + else if (slave.weight > 190) + result -= 5; // too fat + } + return FResult; +})(); + +window.slaveCost = (function() { + "use strict"; + let V, arcology, multiplier, cost; + + function slaveCost(slave, isStartingSlave) { + V = State.variables; + arcology = V.arcologies[0]; + multiplier = V.slaveCostFactor; + cost = Beauty(slave)*FResult(slave); + + calcGenitalsCost(slave); + calcDevotionTrustCost(slave); + calcPreferencesCost(slave); + calcPregCost(slave); + if (slave.prestige + slave.pornPrestige > 0) { + calcPrestigeCost(slave); } - if (slave.faceShape === "cute" && slave.face > 0) { /*uggos need not apply, maybe a small boost for other faceShapes*/ - beauty += ((arcology.FSGenderRadicalist/25)*(slave.face/30)) - 2; /*gives a slightly better boost than androgynous does with gendrad boost, 15.3*/ + calcFSCost(slave); + if (V.seeAge === 1) { + calcAgeCost(slave); } - if (slave.nipples === "tiny") { - beauty += 5; - } else if (slave.nipples === "cute") { - beauty += 2; - } else { - beauty -= 5; + calcCareersCost(slave); + calcMiscCost(slave); + calcIndentureCost(slave); /* multipliers */ + + calcCost(slave); + if (isStartingSlave) { + calcStartingSlaveCost(slave); } + return cost; }; - function calcBodyProportionBeauty(slave) { - if (arcology.FSGenderFundamentalist !== "unset") { - if (slave.shoulders > slave.hips) { - if (slave.boobs <= 2000*(slave.shoulders - slave.hips)) { - beauty -= (slave.shoulders - slave.hips)*(1 + (arcology.FSGenderFundamentalist/200)); + function calcGenitalsCost(slave) { + if (slave.vagina === 0) { + multiplier += 0.1; + } + if (slave.vagina > -1 && arcology.FSRestartSMR === 1) { + if (slave.dick > 0) { + if (slave.ovaries === 0 && slave.balls === 0) { + multiplier += 0.8; } } - } else if (arcology.FSGenderRadicalist === "unset") { - if (slave.shoulders > slave.hips) { - if (slave.boobs <= 2000*(slave.shoulders - slave.hips)) { - beauty -= slave.shoulders - slave.hips; + } else if (slave.vagina > -1) { + if (slave.dick > 0) { + if (V.ui !== "start" || V.PC.dick === 0 || V.PC.vagina === 0) { + multiplier += 0.2; + if (slave.ovaries > 0) { + if (slave.balls > 0) { + multiplier += 0.8; + } + } + } else { + multiplier += 0.1; + if (slave.ovaries > 0) { + if (slave.balls > 0) { + multiplier += 0.2; + } + } } } } }; - function calcVoiceBeauty(slave) { - if (canTalk(slave)) { - if (slave.accent >= 3) { - beauty -= 1; - } else if (slave.accent === 1) { - beauty += 1; + function calcDevotionTrustCost(slave) { + if (V.specialSlavesPriceOverride === 1) { + if (slave.devotion > 50) { + multiplier += slave.devotion/200; + } + if (slave.trust > 50) { + multiplier += slave.trust/200; } } else { - beauty -= 2; - } - }; - - function calcLimbsBeauty(slave) { - switch (slave.amp) { - case 1: - beauty -= 10; - break; - case -1: - case -2: - case -4: - beauty -= 2; - break; - } - }; - - function calcPubertyBeauty(slave) { - if (slave.pubertyXX === 1) { - beauty += 5; - } - if (slave.pubertyXY === 0 && slave.physicalAge > V.potencyAge && slave.balls > 0) { - beauty += 10; - if (arcology.FSGenderFundamentalist !== "unset") { - beauty += 5; + multiplier += slave.devotion/200; + if (slave.devotion < -20) { + if (slave.trust > 0) { + multiplier -= slave.trust/200; + } + } else { + if (slave.trust > 0) { + multiplier += slave.trust/200; + } } } }; - function calcFSMiscBeauty(slave) { - if (arcology.FSTransformationFetishist > 20) { - if (slave.lips > 70) { - if (slave.lipsImplant/slave.lips < 0.5) { - beauty -= ((slave.lips/10) + (arcology.FSTransformationFetishist/20)); - } - } - if (slave.hips === 3) { - beauty += 10; - } + function calcPreferencesCost(slave) { + if (slave.behavioralFlaw !== "none") { + multiplier -= 0.1; } - if ((arcology.FSGenderRadicalist > 20 && arcology.FSGenderRadicalistLawFuta !== 3) || arcology.FSSlimnessEnthusiast > 20) { - if (slave.hips < 0) { - beauty += Math.abs(slave.hips); - } + if (slave.behavioralQuirk !== "none") { + multiplier += 0.1; } - if (arcology.FSPhysicalIdealist !== "unset") { - if (slave.height > Height.mean(slave)) { - beauty += 10; - } + if (slave.sexualFlaw === "breeder" && arcology.FSRepopulationFocus !== "unset") { + multiplier += 0.3; + } else if (slave.sexualFlaw !== "none") { + multiplier -= 0.1; } - if (arcology.FSHedonisticDecadenceLaw2 === 1) { - if (slave.boobs >= 2000 && slave.butt >= 5 && slave.weight > 95) { - beauty += 5 + (arcology.FSHedonisticDecadence/20); /*10*/ - } else { - beauty -= 15 + (arcology.FSHedonisticDecadence/20); /*-20*/ + if (slave.sexualQuirk !== "none") { + multiplier += 0.1; + } + if (slave.fetishKnown === 1) { + if (slave.fetish === "mindbroken") { + multiplier -= 0.3; + } else if (slave.fetish !== "none") { + multiplier += slave.fetishStrength/1000; } + } else { + multiplier -= 0.1; } - if (arcology.FSChattelReligionistCreed === 1) { - if (V.nicaeaAssignment === slave.assignment) { - beauty += 2*V.nicaeaPower; + if (slave.attrKnown === 1) { + if (slave.energy > 95) { + multiplier += 0.2; } } }; - function calcPurityBeauty(slave) { - if (isPure(slave)) { - V.pure = V.pure++ || 1; - if (arcology.FSBodyPurist !== "unset") { - beauty += arcology.FSBodyPurist/5; + function calcPregCost(slave) { + if (slave.mpreg === 1) { + multiplier += 0.2; + } + if (arcology.FSRepopulationFocusSMR === 1) { + if (slave.preg < -1) { + multiplier -= 0.5; + } else if (slave.bellyPreg >= 300000) { + multiplier += 1; + } else if (slave.bellyPreg >= 120000) { + multiplier += 0.5; + } else if (slave.preg > 10) { + multiplier += 0.1; } - if (arcology.FSTransformationFetishist === "unset") { - beauty += 2; + } else if (arcology.FSRestartSMR === 1) { + if (slave.preg < -1) { + multiplier += 0.5; + } else if (slave.bellyPreg >= 300000) { + multiplier -= 2.5; + } else if (slave.bellyPreg >= 30000) { + multiplier -= 1.5; + } else if (slave.preg > 10) { + multiplier -= 1.0; + } + } else { + if (slave.preg < -1) { + multiplier -= 0.1; + } else if (V.activeSlave.bellyPreg >= 300000) { + multiplier -= 1.5; + } else if (V.activeSlave.bellyPreg >= 120000) { + multiplier -= 0.5; + } else if (slave.preg > 10) { + multiplier -= 0.1; } - } else if (arcology.FSTransformationFetishist !== "unset") { - beauty += arcology.FSTransformationFetishist/40; } }; - function calcPhysiqueBeauty(slave) { - let physiquePass = 0; + function calcPrestigeCost(slave) { + if (slave.prestige > 0) { + multiplier += 0.7*slave.prestige; + } + if (slave.pornPrestige === 3) { + multiplier += 1.5; + } else if (slave.pornPrestige === 2) { + multiplier += 0.7; + } else if (slave.pornPrestige === 1) { + multiplier += 0.2; + } + }; - if (slave.boobs < 500 && slave.butt < 3) { - if (slave.muscles <= 30 && arcology.FSPhysicalIdealist === "unset" && slave.weight <= 10 && arcology.FSHedonisticDecadence === "unset") { - physiquePass = 1; - } else if (arcology.FSPhysicalIdealist !== "unset") { /* no muscle malus for muscle loving societies */ - if (arcology.FSPhysicalIdealistStrongFat === 1 && slave.weight <= 30) { /* reduced weight malus for fat loving societies */ - physiquePass = 1; - } else if (slave.weight <= 10) { - physiquePass = 1; - } - } else if (arcology.FSHedonisticDecadence !== "unset" && slave.weight <= 30) { /* reduced weight malus for fat loving societies */ - if (arcology.FSHedonisticDecadenceStrongFat === 1) { /* no muscle malus for muscle loving societies */ - physiquePass = 1; - } else if (slave.muscles <= 30) { - physiquePass = 1; - } + function calcFSCost(slave) { + if (arcology.FSSupremacistLawME !== 0) { + if (slave.race !== arcology.FSSupremacistRace) { + multiplier -= 0.1; } } - if (physiquePass === 1) { - beauty += 40; - if (arcology.FSSlimnessEnthusiast > 20) { - beauty += arcology.FSSlimnessEnthusiast/20; - if (canTalk(slave) && slave.voice === 3) { - beauty += arcology.FSSlimnessEnthusiast/40; - } + if (arcology.FSSubjugationistLawME !== 0) { + if (slave.race === arcology.FSSubjugationistRace) { + multiplier -= 0.2; } - } else if (slave.butt > 4 && slave.boobs > 800) { - if (arcology.FSSlimnessEnthusiast === "unset") { - beauty += 1; + } + if (arcology.FSRepopulationFocusSMR !== 0) { + if (slave.preg > 0) { + multiplier += 0.1; } - if (arcology.FSAssetExpansionist > 20) { - beauty += arcology.FSAssetExpansionist/20; - if (canTalk(slave) && slave.voice === 3) { - beauty += arcology.FSAssetExpansionist/40; - } + } else if (arcology.FSRestartSMR !== 0) { + if (slave.dick > 0) { + multiplier -= 0.1; + } + if (slave.balls > 0) { + multiplier -= 0.2; + } + if (slave.vagina > 0) { + multiplier -= 0.1; + } + if (slave.ovaries > 0) { + multiplier -= 0.5; } } - }; - - function calcSlimBeauty(slave) { - if (slimPass(slave) === 1) { - beauty += 40 + (arcology.FSSlimnessEnthusiast/20); /*45*/ - } else { - beauty -= arcology.FSSlimnessEnthusiast/20; + if (arcology.FSGenderFundamentalistSMR !== 0) { + if (slave.dick > 0) { + multiplier -= 0.1; + } + if (slave.balls > 0) { + multiplier -= 0.1; + } + } else if (arcology.FSGenderRadicalist !== "unset") { + if (slave.dick > 0) { + multiplier += 0.1; + } + if (slave.balls > 0) { + multiplier -= 0.1; + } + } + if (arcology.FSHedonisticDecadenceSMR !== 0) { + if (slave.weight > 60 && slave.muscles < 5) { + multiplier += 0.1; + } + } + if (arcology.FSArabianRevivalist > 50) { + multiplier += 0.1; } }; - function calcGenderLawBeauty(slave) { - V.genderLawPass = 1; - - if (arcology.FSPhysicalIdealist === "unset" && arcology.FSHedonisticDecadenceStrongFat === 0 && slave.muscles > 30) { /*muscle check*/ - V.genderLawPass = 0; - } else if (arcology.FSHedonisticDecadence !== "unset" || arcology.FSPhysicalIdealistStrongFat === 1) { /*weight check*/ - if (slave.weight > 130 || slave.weight <= -30) { - V.genderLawPass = 0; + function calcAgeCost(slave) { + if (slave.physicalAge === V.minimumSlaveAge && slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcology.FSRepopulationFocus !== "unset" || arcology.FSGenderFundamentalist !== "unset")) { + if (slave.birthWeek === 0) { + multiplier -= 0.4; + } else if (slave.birthWeek < 4) { + multiplier -= 0.1; } - } else if (Math.abs(slave.weight) > 30) { - V.genderLawPass = 0; - } else if (arcology.FSAssetExpansionist !== "unset") { - if (slave.boobs < 500 || slave.boobs > 1600 || slave.butt < 3 || slave.butt > 6) { - V.genderLawPass = 0; + } else if (slave.physicalAge === V.minimumSlaveAge) { + if (slave.birthWeek === 0) { + multiplier -= 0.2; + } else if (slave.birthWeek < 4) { + multiplier -= 0.05; + } + } else if (slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcology.FSRepopulationFocus !== "unset" || arcology.FSGenderFundamentalist !== "unset")) { + if (slave.birthWeek === 0) { + multiplier -= 0.2; + } else if (slave.birthWeek < 4) { + multiplier -= 0.05; } - } else if (slave.boobs < 500 || slave.boobs > 800 || slave.butt < 3 || slave.butt > 4) { - V.genderLawPass = 0; } - if (V.genderLawPass === 1) { - beauty += 60; - } else { - beauty -= 10; + }; + + function calcCareersCost() { + if (slave.career !== 0) { + if (slave.career === "a slave") { + multiplier += 0.1; + } else if (setup.bodyguardCareers.includes(slave.career)) { + multiplier += 0.1; + } else if (setup.wardenessCareers.includes(slave.career)) { + multiplier += 0.1; + } else if (setup.attendantCareers.includes(slave.career)) { + multiplier += 0.1; + } else if (setup.matronCareers.includes(slave.career)) { + multiplier += 0.1; + } else if (setup.schoolteacherCareers.includes(slave.career)) { + multiplier += 0.1; + } else if (setup.stewardessCareers.includes(slave.career)) { + multiplier += 0.1; + } else if (setup.milkmaidCareers.includes(slave.career)) { + multiplier += 0.1; + } else if (setup.farmerCareers.includes(slave.career)) { + multiplier += 0.1; + } else if (setup.madamCareers.includes(slave.career)) { + multiplier += 0.1; + } else if (setup.DJCareers.includes(slave.career)) { + multiplier += 0.1; + } else if (setup.HGCareers.includes(slave.career)) { + multiplier += 0.1; + } else if (setup.recruiterCareers.includes(slave.career)) { + multiplier += 0.1; + } else if (setup.entertainmentCareers.includes(slave.career)) { + multiplier += 0.05; + } else if (setup.whoreCareers.includes(slave.career)) { + multiplier += 0.05; + } else if (setup.gratefulCareers.includes(slave.career)) { + multiplier += 0.05; + } else if (setup.menialCareers.includes(slave.career)) { + multiplier += 0.05; + } else if (setup.servantCareers.includes(slave.career)) { + multiplier += 0.05; + } + } + if (V.week-slave.weekAcquired >= 20 && slave.entertainSkill >= 100) { + if (!setup.entertainmentCareers.includes(slave.career)) { + multiplier += 0.05; + } + } + if (slave.oralCount + slave.analCount + slave.vaginalCount + slave.mammaryCount + slave.penetrativeCount > 1000) { + if (!setup.whoreCareers.includes(slave.career)) { + multiplier += 0.05; + } + } + if (!setup.bodyguardCareers.includes(slave.career) && slave.skillBG >= V.masteredXP) { + multiplier += 0.1; + } + if (!setup.wardenessCareers.includes(slave.career) && slave.skillWA >= V.masteredXP) { + multiplier += 0.1; + } + if (!setup.attendantCareers.includes(slave.career) && slave.skillAT >= V.masteredXP) { + multiplier += 0.1; + } + if (!setup.matronCareers.includes(slave.career) && slave.skillMT >= V.masteredXP) { + multiplier += 0.1; + } + if (!setup.schoolteacherCareers.includes(slave.career) && slave.skillTE >= V.masteredXP) { + multiplier += 0.1; + } + if (!setup.stewardessCareers.includes(slave.career) && slave.skillST >= V.masteredXP) { + multiplier += 0.1; + } + if (!setup.milkmaidCareers.includes(slave.career) && slave.skillMM >= V.masteredXP) { + multiplier += 0.1; + } + if (!setup.farmerCareers.includes(slave.career) && slave.skillFA >= V.masteredXP) { + multiplier += 0.1; + } + if (!setup.madamCareers.includes(slave.career) && slave.skillMD >= V.masteredXP) { + multiplier += 0.1; + } + if (!setup.DJCareers.includes(slave.career) && slave.skillDJ >= V.masteredXP) { + multiplier += 0.1; + } + if (!setup.HGCareers.includes(slave.career) && slave.skillHG >= V.masteredXP) { + multiplier += 0.1; + } + if (!setup.recruiterCareers.includes(slave.career) && slave.skillRC >= V.masteredXP) { + multiplier += 0.1; + } + if (!setup.servantCareers.includes(slave.career) && slave.skillS >= V.masteredXP) { + multiplier += 0.05; + } + if (!setup.entertainmentCareers.includes(slave.career) && slave.skillE >= V.masteredXP) { + multiplier += 0.05; + } + if (!setup.whoreCareers.includes(slave.career) && slave.skillW >= V.masteredXP) { + multiplier += 0.05; } }; - function calcMultipliersBeauty(slave) { - calcBellyBeauty(slave); - if (arcology.FSGenderRadicalist !== "unset") { - if (slave.bellyPreg >= 500 && arcology.FSRepopulationFocus === "unset" && arcology.FSRestart === "unset") { - if (slave.mpreg === 1) { - beauty = 0.9*beauty; - } else { - beauty = 0.7*beauty; - } - } - } else if (arcology.FSGenderFundamentalist === "unset") { - if (slave.preg > 10 && arcology.FSRepopulationFocus === "unset" && arcology.FSRestart === "unset") { - beauty = 0.8*beauty; - } + function calcMiscCost(slave) { + let totalInt = Math.clamp(slave.intelligence + slave.intelligenceImplant,-130,130); /* make absolutely certain we do not use +-131 in the next line */ + multiplier += Math.floor((Math.asin(totalInt/131))*50)/50; + if (slave.pubertyXY === 0 && slave.physicalAge >= V.potencyAge && slave.genes === "XY" && arcology.FSGenderRadicalist === "unset") { + multiplier += 0.5; } - if (slave.breedingMark === 1) { - if (V.propOutcome === 1) { - beauty = 2*beauty; - } else { - beauty += 2; + if (slave.brand !== 0) { + if (V.rep > 10000) { + multiplier += 0.1; + } else if (V.rep < 5000) { + multiplier -= 0.1; } } - if (slave.fuckdoll === 0 && V.seeAge === 1) { - calcAgeBeauty(slave); + if (slave.amp === 1) { + multiplier -= 0.2; } - if (slave.prestige + slave.pornPrestige > 0) { - calcPrestigeBeauty(slave); + if (slave.eyes === -2) { + multiplier -= 0.2; } }; - function calcBellyBeauty(slave) { - if (slave.bellySag > 0) { - if (slave.belly < 100) { - if (arcology.FSRepopulationFocus === "unset") { - beauty -= 20; - } + function calcIndentureCost(slave) { + if (slave.indenture > -1) { + multiplier -= 0.1*slave.indentureRestrictions; + multiplier -= (260-slave.indenture)/260; + } else if (V.seeAge === 1) { + if (slave.actualAge >= (V.retirementAge-5) && V.PhysicalRetirementAgePolicy !== 1) { + multiplier *= (V.retirementAge-slave.actualAge)/5; } - } - if (slave.bellyImplant >= 1500) { - if (arcology.FSTransformationFetishist > 20) { - beauty += Math.min(Math.trunc(slave.bellyImplant/1000), 50); /*50*/ - } else if (arcology.FSRepopulationFocus > 60) { - if ((slave.ovaries === 0 && slave.mpreg === 0) || slave.preg < -1) { - beauty += 20; - } - } else { - if (slave.bellyImplant >= 750000) { /* multipliers */ - beauty = 0.2*beauty; - } else if (slave.bellyImplant >= 450000) { - beauty = 0.5*beauty; - } else if (slave.bellyImplant >= 300000) { - beauty = 0.7*beauty; - } else if (slave.bellyImplant >= 100000) { - beauty = 0.8*beauty; - } else if (slave.bellyImplant >= 50000) { - beauty = 0.85*beauty; - } else { - beauty = 0.9*beauty; - } + if (slave.physicalAge >= (V.retirementAge-5) && V.PhysicalRetirementAgePolicy === 1) { + multiplier *= (V.retirementAge-slave.actualAge)/5; } } }; - function calcAgeBeauty(slave) { - if (slave.physicalAge === V.minimumSlaveAge) { - beauty += 1; - if (slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcology.FSRepopulationFocus !== "unset" || arcology.FSGenderFundamentalist !== "unset") && arcology.FSRestart === "unset") { - if (slave.birthWeek === 0) { - beauty += 1.6*beauty; - } else if (slave.birthWeek < 4) { - beauty += 0.2*beauty; - } - } else { - if (slave.birthWeek === 0) { - beauty += 0.8*beauty; - } else if (slave.birthWeek < 4) { - beauty += 0.1*beauty; - } - } - } else if (slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcology.FSRepopulationFocus !== "unset" || arcology.FSGenderFundamentalist !== "unset") && arcology.FSRestart === "unset") { - beauty += 1; - if (slave.birthWeek === 0) { - beauty += 0.8*beauty; - } else if (slave.birthWeek < 4) { - beauty += 0.1*beauty; - } + function calcCost(slave) { + cost *= multiplier*50; + cost = Number(cost) || 0; + if (cost < V.minimumSlaveCost) { + cost = V.minimumSlaveCost; + } else if (cost <= 100000) { + /* do nothing */ + } else if (cost <= 200000) { + cost -= (cost-100000)*0.1; + } else if (cost <= 300000) { + cost -= 10000 + ((cost-200000)*0.2); + } else if (cost <= 400000) { + cost -= 30000 + ((cost-300000)*0.3); + } else if (cost <= 500000) { + cost -= 60000 + ((cost-400000)*0.4); + } else { + cost -= 100000 + ((cost-500000)*0.5); + } + if (cost < 1000) { + cost = 1000; } + cost = 500*Math.trunc(cost/500); }; - function calcPrestigeBeauty(slave) { /* multipliers */ - if (slave.prestige >= 3) { - beauty += 2*beauty; - } else if (slave.prestige === 2) { - beauty += 0.5*beauty; - } else if (slave.prestige === 1) { - beauty += 0.25*beauty; + function calcStartingSlaveCost(slave) { + let startingSlaveMultiplier = 0; + + if (slave.devotion > 20) { + startingSlaveMultiplier += (0.000117*(slave.devotion-20)*(slave.devotion-20))+(0.003167*(slave.devotion-20)); } - if (slave.pornPrestige === 3) { - beauty += beauty; - } else if (slave.pornPrestige === 2) { - beauty += 0.5*beauty; - } else if (slave.pornPrestige === 1) { - beauty += 0.1*beauty; + if (slave.whoreSkill) { + startingSlaveMultiplier += 0.00001*slave.whoreSkill*slave.whoreSkill; + } + if (slave.entertainSkill) { + startingSlaveMultiplier += 0.00001*slave.entertainSkill*slave.entertainSkill; + } + if (slave.vaginalSkill) { + startingSlaveMultiplier += 0.00001*slave.vaginalSkill*slave.vaginalSkill; + } + if (slave.analSkill) { + startingSlaveMultiplier += 0.00001*slave.analSkill*slave.analSkill; + } + if (slave.oralSkill) { + startingSlaveMultiplier += 0.00001*slave.oralSkill*slave.oralSkill; + } + if (slave.combatSkill) { + startingSlaveMultiplier += 0.1; + } + if (slave.prestige) { + startingSlaveMultiplier += slave.prestige; + } + if (startingSlaveMultiplier) { + if (slave.actualAge > 25) { + startingSlaveMultiplier -= startingSlaveMultiplier*(slave.actualAge-25)*0.05; + } + } + startingSlaveMultiplier = Math.clamp(startingSlaveMultiplier, 0, 10); + cost += cost*startingSlaveMultiplier; + cost = 500*Math.trunc(cost/500); + if (V.PC.career === "slaver") { + cost = cost/2; } }; - return Beauty; + return slaveCost; })(); + +window.startingSlaveCost = function startingSlaveCost(slave) { + return slaveCost(slave, true); +}; \ No newline at end of file diff --git a/src/Mods/DinnerParty/dinnerPartyExecution.tw b/src/Mods/DinnerParty/dinnerPartyExecution.tw index 3babad84576de1df681256ae81d29ad78cbeb7b6..062b35f3acac37d80c91e38cff42b29dcde1d3d9 100644 --- a/src/Mods/DinnerParty/dinnerPartyExecution.tw +++ b/src/Mods/DinnerParty/dinnerPartyExecution.tw @@ -44,7 +44,7 @@ You give the signal for your slaves to begin the ceremony. The four slaves hold $activeSlave.slaveName down on the platter. A fifth slave starts to give her oral sex. $activeSlave.slaveName moans with the apple in her mouth. When she is on the edge of climax you plunge the ceremonial dagger into her chest. The pain causes her to bite down on the apple deeply. Tears mixed with the juices of the apple flows down her face. With a twist of your hand, you carve out her beating heart. <<if ($activeSlave.fetish == "mindbroken") || ($activeSlave.devotion > 90)>> - Your guests @@.green;applaud@@ your slave’s willingness to die for $his <<= WrittenMaster()>>, a credit to your training. + Your guests @@.green;applaud@@ your slave's willingness to die for $his <<= WrittenMaster()>>, a credit to your training. <<set $rep += 500>> <<else>> Your guests @@.red;snicker@@ at your inability to provide a willing sacrifice. @@ -62,7 +62,7 @@ /*<img src='resources/spring roll.jpg' style="float:left" />*/ ''//Dicky Roll//'': <br> - $activeSlave.slaveName’s penis is wrapped in a spring roll wrapper, deep fried and placed on a plate. Green lettuce decorates the plate along with a side of dipping sauce. + $activeSlave.slaveName's penis is wrapped in a spring roll wrapper, deep fried and placed on a plate. Green lettuce decorates the plate along with a side of dipping sauce. <<if $activeSlave.dick >= 5>> The massive length and girth of the penis impressed your guests greatly and have them all salivating at the sight of the dish. <<elseif $activeSlave.dick >= 4>> @@ -345,12 +345,12 @@ <<set _dishRating -= 1>> <</if>> <<if $activeSlave.lipsImplant > 0>> - All of sudden one of your guest’s face turns red, then purple. It is clear he is choking on something. You leap out of your seat, rush over to him and start the Heimlich maneuver. On your third thrust into his abdominal, a piece of lip implants flies out of his mouth and hits another guest square in the face. You apologize profusely for your carelessness in selecting the meat. The rest of your guests had a great laugh at your @@.red;expense@@. + All of sudden one of your guest's face turns red, then purple. It is clear he is choking on something. You leap out of your seat, rush over to him and start the Heimlich maneuver. On your third thrust into his abdominal, a piece of lip implants flies out of his mouth and hits another guest square in the face. You apologize profusely for your carelessness in selecting the meat. The rest of your guests had a great laugh at your @@.red;expense@@. <<set _dishRating -= 5>> <<set $rep -= 500>> <</if>> <<if $activeSlave.buttImplant > 0>> - All of sudden one of your guest clutches his chest. His face turns pale as a ghost, foaming at the mouth falls over onto the table. You rush over to him, it is clear he is not breathing. You don’t know what’s wrong with him. It could not have been poison, since any toxins in the food would have been detected by your virtual assistant. You order your slave to rush the man to the nearest emergency clinic. You were informed later that he had died from ingesting a silicone butt implant. Your reputation @@.red;suffers@@ greatly due to this incident. + All of sudden one of your guest clutches his chest. His face turns pale as a ghost, foaming at the mouth falls over onto the table. You rush over to him, it is clear he is not breathing. You don't know what's wrong with him. It could not have been poison, since any toxins in the food would have been detected by your virtual assistant. You order your slave to rush the man to the nearest emergency clinic. You were informed later that he had died from ingesting a silicone butt implant. Your reputation @@.red;suffers@@ greatly due to this incident. <<set _dishRating -= 10>> <<set $rep -= 5000>> <</if>> @@ -384,7 +384,7 @@ /% successful evening %/ The party is in full swing. Your guests enjoy eating $activeSlave.slaveName and make good use of the slaves you provided for their pleasure. Sounds of an orgy of food drink and sex echoes through your dining hall. Your guests ate, drank and fucked their fill. - As the evening draw to a close, there isn’t a single morsel of $activeSlave.slaveName left to be found. Some of your slaves show signs of teeth mark on their skin. Perhaps some guests got confused about what’s for eating and what’s for fucking? + As the evening draw to a close, there isn't a single morsel of $activeSlave.slaveName left to be found. Some of your slaves show signs of teeth mark on their skin. Perhaps some guests got confused about what's for eating and what's for fucking? The evening was a @@.green;success@@. <<set $rep += (_dinnerRating * 100)>> @@ -421,7 +421,7 @@ <br><br> You notice a group of guests corner your Head Girl. The group consists of some very powerful people. Most of them arcology owners themselves, some of them have more powerful arcologies than yours. $HeadGirl.slaveName tries to slip away, but _he2 was grabbed at the neck by the leader of the pack. He pulls _him2 down to the ground forcefully. - $HeadGirl.slaveName knows better than to resist, _he2 is still a slave despite _his2 position as your head girl. A slave does not raise their hand against a Master, even one that’s not _his2 own. The leader rips off _his2 dress, exposing _his2 bare chest. Your head girl is frozen in terror when _he2 is lifted onto the hastily cleared dining hall table by several of the men. _Her2 eyes desperately search for you. You are the only one who can stop this. All that’s required is a single word from you. + $HeadGirl.slaveName knows better than to resist, _he2 is still a slave despite _his2 position as your head girl. A slave does not raise their hand against a Master, even one that's not _his2 own. The leader rips off _his2 dress, exposing _his2 bare chest. Your head girl is frozen in terror when _he2 is lifted onto the hastily cleared dining hall table by several of the men. _Her2 eyes desperately search for you. You are the only one who can stop this. All that's required is a single word from you. $HeadGirl.slaveName's eyes meets yours; the look of relief on _his2 face is soon replaced by the sad realization that you will not intervene. _His2 mouth forms the word <<if $PC.title > 0>> @@ -440,8 +440,8 @@ <<set $HeadGirl.vagina += 1>> <</if>> One man moves to the head of $HeadGirl.slaveName and shoved his cock into _his2 mouth, fucking _his2 throat roughly. He buries his cock deep down _his2 throat all the way to his balls. - He places both hands around _his2 neck and squeezes with every stroke. Your head girl’s face turns red and gags uncontrollably. _His2 eyes rolls back as another man shoved his hard cock in _his2 asshole, sodomizing _him2 with no mercy. As your head girl made squeaking noises in pain, serval guests picked up forks and jabbed it at _his2 butt and _his2 back chanting "more meat... more meat..." and "squeal piggy squeal". You slump over your chair at the head of the table. Gulping down your drink, fighting back the urge to order your security drones to open fire on those men. You know those men would never dare to harm your head girl, not permanently, at least not anything your remote surgery couldn’t fix. It’s not as if you haven’t done worse to your slaves, but the message is clear, the attack on your head girl was meant as disrespect and an insult towards you. Raping your head girl is like raping you. You stare at the group of men gang raping your head girl at the end of your own dining table, you burning their @@.yellow;names and their faces@@ into your memory as they take turns fucking _him2. They make use of _his2 every hole. When they are done, _he2 was left on the floor, battered and bruised, covered in cum and blood from superficial wounds. - The leader of the pack pulls out his half erect cock pees on your head girl as a final insult towards you. The poor _girl2 is so spent that _he2 doesn’t even flinch at the urine hitting _his2 face. + He places both hands around _his2 neck and squeezes with every stroke. Your head girl's face turns red and gags uncontrollably. _His2 eyes rolls back as another man shoved his hard cock in _his2 asshole, sodomizing _him2 with no mercy. As your head girl made squeaking noises in pain, serval guests picked up forks and jabbed it at _his2 butt and _his2 back chanting "more meat... more meat..." and "squeal piggy squeal". You slump over your chair at the head of the table. Gulping down your drink, fighting back the urge to order your security drones to open fire on those men. You know those men would never dare to harm your head girl, not permanently, at least not anything your remote surgery couldn't fix. It's not as if you haven't done worse to your slaves, but the message is clear, the attack on your head girl was meant as disrespect and an insult towards you. Raping your head girl is like raping you. You stare at the group of men gang raping your head girl at the end of your own dining table, you burning their @@.yellow;names and their faces@@ into your memory as they take turns fucking _him2. They make use of _his2 every hole. When they are done, _he2 was left on the floor, battered and bruised, covered in cum and blood from superficial wounds. + The leader of the pack pulls out his half erect cock pees on your head girl as a final insult towards you. The poor _girl2 is so spent that _he2 doesn't even flinch at the urine hitting _his2 face. He finishes showering your head girl, then turns towards you and says smilingly: <br><br> //"I must congratulate you// @@ -569,15 +569,15 @@ <<for _i = 0; _i < 6; _i++>> <<include "Generate XY Slave">> <<set $activeSlave.devotion = -20>> - <<set $activeSlave.trust = -2>> - <<set $activeSlave.oldDevotion = -20>> - <<set $activeSlave.origin = "She was once an arcology owner like yourself, who made the mistake of insulting you.">> + <<set $activeSlave.trust = -2>> + <<set $activeSlave.oldDevotion = -20>> + <<set $activeSlave.origin = "She was once an arcology owner like yourself, who made the mistake of insulting you.">> <<set $activeSlave.career = 0>> - <<set $activeSlave.prestige = 3>> - <<set $activeSlave.prestigeDesc = "You stormed her arcology, killed her guards and enslaved her in revenge for insulting you at a dinner party.">> - <<set $activeSlave.health = 20>> - <<set $activeSlave.dick = 5>> - <<set $activeSlave.balls = 5>> + <<set $activeSlave.prestige = 3>> + <<set $activeSlave.prestigeDesc = "You stormed her arcology, killed her guards and enslaved her in revenge for insulting you at a dinner party.">> + <<set $activeSlave.health = 20>> + <<set $activeSlave.dick = 5>> + <<set $activeSlave.balls = 5>> <<set $activeSlave.intelligenceImplant = 1>> <<set $activeSlave.age = random(30,44)>> <<set $MOD_enemy = {leader: 0, numSlave: 0, slaveTotalHP: 0, numDrone: 0, droneTotalHP: 0, numMerc: 0, mercTotalHP: 0, weekCreated: 0, enemyIndex: -1, hostility: 0}>> diff --git a/src/Mods/DinnerParty/dinnerPartyPreperations.tw b/src/Mods/DinnerParty/dinnerPartyPreperations.tw index e6bcb58fcf94431b6bb4dd2c2d72ec0e8f75e4ba..38b83ddf36a111264737c91234ebd6b96689ceba 100644 --- a/src/Mods/DinnerParty/dinnerPartyPreperations.tw +++ b/src/Mods/DinnerParty/dinnerPartyPreperations.tw @@ -7,7 +7,7 @@ Hosting of high society dinner parties will increase your prestige significantly <h1>Cooking Instructions and Recipes:</h1> -''Roast Long Pig'' – Made with the meat of a human roasted on a spit. Young meat is better than old meat. There should be some amount of fat to make the meat juicy, but not too much fat that makes the meat greasy. Muscles affect the texture of the meat. Meat without muscles lacks texture while an excess will be tough and hard to chew. Remember you can’t eat silicone, and virgin meat is highly sought after. If the human is pregnant a veal dish can also be made from the fetus. +''Roast Long Pig'' – Made with the meat of a human roasted on a spit. Young meat is better than old meat. There should be some amount of fat to make the meat juicy, but not too much fat that makes the meat greasy. Muscles affect the texture of the meat. Meat without muscles lacks texture while an excess will be tough and hard to chew. Remember you can't eat silicone, and virgin meat is highly sought after. If the human is pregnant a veal dish can also be made from the fetus. <br><br> ''Dicky Roll'' – An erect penis made into a spring roll. For best results harvest the penis at the moment of ejaculation. The size of the penis and the amount of accumulated ejaculate all affect the quality of the dish. Too big of a dick and too thin of semen can both ruin a dish. @@ -16,7 +16,7 @@ Hosting of high society dinner parties will increase your prestige significantly ''Testy Meat Balls'' – Testicles made into meat balls served with a sauce. Size matters. <br><br> -''Titty Tartare'' – Made from finely chopped breasts, mixed with onions, capers and seasonings, served raw. Big breasts make the best quality meat for this dish. To add a hint of creamy taste, make sure the breasts are lactating. Remember you can’t eat silicone. +''Titty Tartare'' – Made from finely chopped breasts, mixed with onions, capers and seasonings, served raw. Big breasts make the best quality meat for this dish. To add a hint of creamy taste, make sure the breasts are lactating. Remember you can't eat silicone. <br><br> ''Camel Toe à l'orange'' – Pussy grilled like a steak. A big clit and big labia will improve the quality of the dish. diff --git a/src/init/setupVars.tw b/src/init/setupVars.tw index 5bdc718c37d94860ac167144383bc127552e76a2..7764bb8426dffdece29a7b47edf5f6cabc04fab6 100644 --- a/src/init/setupVars.tw +++ b/src/init/setupVars.tw @@ -310,7 +310,9 @@ <<set setup.matronCareers = ["a babysitter", "a nanny", "a practitioner", "a wet nurse", "an au pair"]>> -<<set setup.milkmaidCareers = ["a beekeeper", "a bullfighter", "a cowgirl", "a dairy worker", "a farmer's daughter", "a farmer", "a milkmaid", "a rancher", "a rodeo star", "a shepherd", "a veterinarian", "a zookeeper"]>> +<<set setup.milkmaidCareers = ["a cowgirl", "a dairy worker", "a farmer's daughter", "a milkmaid", "a shepherd", "a veterinarian"]>> + +<<set setup.farmerCareers = ["a beekeeper", "a bullfighter", "a farmer", "a farmhand", "a rancher", "a rodeo star", "a zookeeper"]>> <<set setup.stewardessCareers = ["a barista", "a bartender", "a brewer", "a bureaucrat", "a caregiver", "a charity worker", "a club treasurer", "a concierge", "a critic", "a housekeeper", "a housesitter", "a lemonade stand operator", "a personal assistant", "a professional bartender", "a secretary", "a wedding planner", "an air hostess", "an architect", "an editor", "an estate agent", "an investor", "an office worker"]>> @@ -1264,10 +1266,7 @@ /* Name pool selector based on nationality and race. Use as follows, given some slave _slave: -<<set _namePool = - (setup.namePoolSelector[_slave.nationality + "." + _slave.race] - || setup.namePoolSelector[_slave.nationality] - || setup.whiteAmericanSlaveNames)>> +<<set _namePool = (setup.namePoolSelector[_slave.nationality + "." + _slave.race] || setup.namePoolSelector[_slave.nationality] || setup.whiteAmericanSlaveNames)>> Then pick _namePool.random(), or display those names as possible choices, or do whatever else you do with name pools. */ <<set setup.namePoolSelector = { @@ -2067,7 +2066,7 @@ Then pick _namePool.random(), or display those names as possible choices, or do {name: "Long, large plug", value: "long, large plug", rs: "buyBigPlugs"}, {name: "Huge plug", value: "huge plug"}, {name: "Long, huge plug", value: "long, huge plug", rs: "buyBigPlugs"}]>> -<<set setup.facilityCareers = ["be confined in the arcade", "be confined in the cellblock", "be the Attendant", "be the Matron", "be the DJ", "be the Madam", "be the Milkmaid", "be the Nurse", "be the Schoolteacher", "be the Stewardess", "be the Wardeness", "be your Concubine", "get treatment in the clinic", "learn in the schoolroom", "live with your Head Girl", "rest in the spa", "work as a nanny", "serve in the club", "serve in the master suite", "work as a servant", "work in the brothel", "work in the dairy"]>> +<<set setup.facilityCareers = ["be confined in the arcade", "be confined in the cellblock", "be the Attendant", "be the DJ", "be the Farmer", "be the Madam", "be the Matron", "be the Milkmaid", "be the Nurse", "be the Schoolteacher", "be the Stewardess", "be the Wardeness", "be your Concubine", "get treatment in the clinic", "learn in the schoolroom", "live with your Head Girl", "rest in the spa", "serve in the club", "serve in the master suite", "work as a farmhand", "work as a nanny", "work as a servant", "work in the brothel", "work in the dairy"]>> <<set setup.lightColorMap = { "rgb(0, 0, 0)":"rgb(255, 255, 255)", diff --git a/src/npc/descriptions/fAssistedSex.tw b/src/npc/descriptions/fAssistedSex.tw index a3ba84a6e1fea713cfddf55ceb735fcd8b3f1096..0843753e64c188172ef8e3b951613d1fd1bd7bcd 100644 --- a/src/npc/descriptions/fAssistedSex.tw +++ b/src/npc/descriptions/fAssistedSex.tw @@ -32,10 +32,10 @@ You order $his servants forward so that $he can tease you with $his enormously s <<else>> The hands covering $his eyes draw away, revealing $his crying face, then lift above $his head in a deliberately provocative pose. <</if>> - $He tenses in a moment of instinctive resistance, then surrenders $his body to $his aids’ total control, clearly afraid of punishment. + $He tenses in a moment of instinctive resistance, then surrenders $his body to $his aids' total control, clearly afraid of punishment. <</if>> You remove your clothes and lie back on the office couch, -<<if $PC.dick == 1>> +<<if $PC.dick == 1>> allowing your exposed, full-mast dick to loll in front of you. <<else>> spreading your exposed, oozing twat. @@ -48,18 +48,18 @@ You remove your clothes and lie back on the office couch, Smiling fakely, <</if>> $he draws toward you, half-floating on a river of silent, groping hands. When $he is inches away from you, $his servants lift $him higher, and $he -<<if $PC.dick == 1>> +<<if $PC.dick == 1>> teases your dick with a series of masterful--and carefully balanced--belly isolations, rubbing the thick nub of $his belly button in small semicircles around your oozing cockhead as $he does so. Right when you feel ready to explode, $he rotates around, bringing <<if $activeSlave.butt > 11>> $his overgrown, wobbling ass cheeks <<elseif $activeSlave.butt > 5>> - $his huge, wobbling ass cheeks + $his huge, wobbling ass cheeks <<elseif Math.floor($activeSlave.buttImplant/$activeSlave.butt) > .60>> - $his saline inflated ass cheeks + $his saline inflated ass cheeks <<elseif $activeSlave.butt > 2>> $his wobbling ass cheeks <<else>> - the shallow inverted bowls of $his petite ass cheeks + the shallow inverted bowls of $his petite ass cheeks <</if>> level with your erection. Two of $his servants reach around $his inflated profile and push $his cheeks together, wrapping your dick in a firm layer of butt cleavage. $He lifts $his ass, then drops it, again and again, smacking your chest on the downswing as $his servants manipulate $his hotdogging to maximize your pleasure. <<if canDoVaginal($activeSlave)>> @@ -71,8 +71,8 @@ $he draws toward you, half-floating on a river of silent, groping hands. When $h <<= AnalVCheck()>> When you feel your own orgasm approaching, you pull out, ejaculating <<else>> - When you feel the tension with your reaching its apex, you signal to $his servants and they pull him forward. You ejaculate - <</if>> + When you feel the tension with your reaching its apex, you signal to $his servants and they pull him forward. You ejaculate + <</if>> a thick stream of semen all over $his ass and back, $he shifts into a kneeling position on the ground in front of you, tilted sideways so that $his massive fecundity can pool on the ground beside $him, and gently sucks you off, cleaning your dick with $his mouth. <<set $activeSlave.oralCount++, $oralTotal++>> <<else>> diff --git a/src/npc/descriptions/fBellyFuck.tw b/src/npc/descriptions/fBellyFuck.tw index 78e4e3740762ce53ae57b440372a4f8c601d7f87..8a114d4cf4d623d0f3048bfc337a20b34f05890c 100644 --- a/src/npc/descriptions/fBellyFuck.tw +++ b/src/npc/descriptions/fBellyFuck.tw @@ -15,7 +15,7 @@ You have $him brought to you so that you can fuck $his hyperpregnant body. <<else>> massive belly, <</if>> - and won’t be a particularly able lover because of this, but enjoying $his immobility is half the point. + and won't be a particularly able lover because of this, but enjoying $his immobility is half the point. <<elseif $activeSlave.amp == 1>> $He has no limbs to stand on, so $he is left resting atop $his <<if $activeSlave.bellyPreg >= 1000000>> @@ -27,7 +27,7 @@ You have $him brought to you so that you can fuck $his hyperpregnant body. <<else>> massive belly. <</if>> - $He won’t be a particularly able lover, but enjoying $his immobility is half the point. + $He won't be a particularly able lover, but enjoying $his immobility is half the point. <<elseif !canWalk($activeSlave)>> $He can't support $himself, so $he is left leaning against $his <<if $activeSlave.bellyPreg >= 1000000>> @@ -39,7 +39,7 @@ You have $him brought to you so that you can fuck $his hyperpregnant body. <<else>> massive belly. <</if>> - $He won’t be a particularly able lover, but enjoying $his immobility is half the point. + $He won't be a particularly able lover, but enjoying $his immobility is half the point. <<else>> $He can still stand despite $his <<if $activeSlave.bellyPreg >= 1000000>> @@ -51,7 +51,7 @@ You have $him brought to you so that you can fuck $his hyperpregnant body. <<else>> massive belly, <</if>> - and won’t be a particularly able lover because of this, but enjoying this obstacle is half the point. + and won't be a particularly able lover because of this, but enjoying this obstacle is half the point. <</if>> Once $he is situated in the center of your office, you walk a circle around $him, taking special care to <<if ($activeSlave.bellyTat == "a heart")>> @@ -82,12 +82,12 @@ When you get to $his rear, you slap $his <<else>> pert ass, <</if>> -and then spread $his cheeks for easier access to $his <<if canDoVaginal($activeSlave)>>cunt. <<= VaginalVCheck()>><<else>>asshole. <<= AnalVCheck()>><</if>> Heaving upward, you push $him fully onto $his belly, then lean into $him, fucking $him in a unique spin on the wheelbarrow position<<if $PC.dick == 0>> with your strapon<</if>> and setting $his tightly packed gut to jiggling. $He moans in mixed pain and pleasure as you bring $him over the edge and, by the time you finish with $him and allow $him to return to $his duties, it’s clear +and then spread $his cheeks for easier access to $his <<if canDoVaginal($activeSlave)>>cunt. <<= VaginalVCheck()>><<else>>asshole. <<= AnalVCheck()>><</if>> Heaving upward, you push $him fully onto $his belly, then lean into $him, fucking $him in a unique spin on the wheelbarrow position<<if $PC.dick == 0>> with your strapon<</if>> and setting $his tightly packed gut to jiggling. $He moans in mixed pain and pleasure as you bring $him over the edge and, by the time you finish with $him and allow $him to return to $his duties, it's clear <<if $activeSlave.belly > $activeSlave.pregAdaptation*2000>> that your recent escapades @@.red;have done lasting damage to $his body.@@ <<set $activeSlave.health -= 10>> <<else>> - that you’ve left $him thoroughly exhausted. + that you've left $him thoroughly exhausted. <</if>> <<if passage() != "Slave Interact">> diff --git a/src/npc/descriptions/fPoolSex.tw b/src/npc/descriptions/fPoolSex.tw index e12edeceded53dee656e25621628a24925258fb6..4a1467eb133db247661488bf2ce3a8d2c9901d40 100644 --- a/src/npc/descriptions/fPoolSex.tw +++ b/src/npc/descriptions/fPoolSex.tw @@ -3,10 +3,10 @@ <<run clearSummaryCache($activeSlave)>> <<setLocalPronouns $activeSlave>> -You order $him to meet you in the spa for some quality time in the penthouse’s rejuvenating gelatin pool. When you get there, $he’s already in $his bathing attire, reclined at the side of the pool farthest from you with $his massive $activeSlave.skin stomach hanging over the edge and half sunk in the thick, steaming ooze, flushed and sweaty. +You order $him to meet you in the spa for some quality time in the penthouse's rejuvenating gelatin pool. When you get there, $he's already in $his bathing attire, reclined at the side of the pool farthest from you with $his massive $activeSlave.skin stomach hanging over the edge and half sunk in the thick, steaming ooze, flushed and sweaty. <<if $activeSlave.devotion > 95>> <<if $activeSlave.amp < 1>> - $He’s resting $his head on one arm, but $he gives you a little wave with the other before setting it to rubbing the flank of one + $He's resting $his head on one arm, but $he gives you a little wave with the other before setting it to rubbing the flank of one <<if $activeSlave.boobs >= 20000>> massively overgrown tit <<elseif Math.floor($activeSlave.boobsImplant/$activeSlave.boobs) >= .60>> @@ -18,9 +18,9 @@ You order $him to meet you in the spa for some quality time in the penthouse’s <</if>> as $he <<else>> - $He’s resting on a small pile of pillows, enjoying the feeling against the flanks of $his colossal belly. $He wiggles a welcome to you and then + $He's resting on a small pile of pillows, enjoying the feeling against the flanks of $his colossal belly. $He wiggles a welcome to you and then <</if>> - <<if canSee($activeSlave)>>watches<<else>>waits patiently as<</if>> you strip down and change into your swimming outfit. When it’s clear that you’re ready to join $him, $he motions at the pool’s holographic console and coos in delight as its mobility assistance devices kick in, rolling $him into the curative gel. You sink yourself into the pool, taking a moment to bask in the feeling of the warm, curative laced goo as it relaxes your muscles<<if $PC.preg > 30>> and soothes your stretched skin<</if>>, then wade toward your waiting slave. + <<if canSee($activeSlave)>>watches<<else>>waits patiently as<</if>> you strip down and change into your swimming outfit. When it's clear that you're ready to join $him, $he motions at the pool's holographic console and coos in delight as its mobility assistance devices kick in, rolling $him into the curative gel. You sink yourself into the pool, taking a moment to bask in the feeling of the warm, curative laced goo as it relaxes your muscles<<if $PC.preg > 30>> and soothes your stretched skin<</if>>, then wade toward your waiting slave. <br><br> $He smiles and beckons you toward $him, rubbing circles in the exploded sides of $his colossal belly, then gasps as you take a handful of the ooze and shove it right in $his face. $He sputters indignantly and then <<if $activeSlave.amp < 1>> @@ -28,8 +28,8 @@ You order $him to meet you in the spa for some quality time in the penthouse’s <<else>> wobbles back and forth, ineffectually trying to fight back as you cover $him in thick wads of gel, over and over. After several minutes of this, you decide that your <</if>> - <<if $PC.dick == 1>> - solid, quivering erection is in need of $his tender care. <<if canSee($activeSlave)>>Seeing<<else>>Sensing<</if>> the change in your demeanor, $he rolls back to recline at the pool’s edge and, once you’ve joined $him, + <<if $PC.dick == 1>> + solid, quivering erection is in need of $his tender care. <<if canSee($activeSlave)>>Seeing<<else>>Sensing<</if>> the change in your demeanor, $he rolls back to recline at the pool's edge and, once you've joined $him, <<if $activeSlave.amp < 1>> reaches down to masturbate your ooze lubricated dick. <<else>> @@ -47,29 +47,29 @@ You order $him to meet you in the spa for some quality time in the penthouse’s <<else>> back <</if>> - and the pool’s silk-lined wall. Reaching, you tease $his <<if canDoVaginal($activeSlave)>>kitty<<else>>asshole<</if>> with your fingers and $he crushes backward into you, moaning and rotating $his hips in response to your attention. Once you’re certain $he’s ready, you slide into $him, driving you both to orgasm. + and the pool's silk-lined wall. Reaching, you tease $his <<if canDoVaginal($activeSlave)>>kitty<<else>>asshole<</if>> with your fingers and $he crushes backward into you, moaning and rotating $his hips in response to your attention. Once you're certain $he's ready, you slide into $him, driving you both to orgasm. <<if canDoVaginal($activeSlave)>><<= VaginalVCheck()>><<else>><<= AnalVCheck()>><</if>> <<else>> - ooze stimulated quim is in need of $his tender care. Seeing the change in your demeanor, $he rolls back to recline at the pool’s edge and, once you’ve joined $him, + ooze stimulated quim is in need of $his tender care. Seeing the change in your demeanor, $he rolls back to recline at the pool's edge and, once you've joined $him, <<if $activeSlave.amp < 1>> reaches down to masterbate your pussy, squeezing and rubbing your clit. <<else>> rolls sideways and rubs your vulva as best $he can. <</if>> <<if $activeSlave.dick >= 1>> - When you feel yourself at the edge of orgasm, you have the pool’s mobility aids rotate $him into a position level with the pool’s edge, then hop up on that ledge yourself so that you can don a dildo and ream $his <<if canDoVaginal($activeSlave)>>pussy. <<= VaginalVCheck()>><<else>>asshole. <<= AnalVCheck()>><</if>> Satisfied that the angles are right, you grab hold of $his hips and slide half on top of $him, resting your lower half on the rear swell of $his obscenely bloated belly. Pressing your strapon to his needy hole, you tease $him for a moment before ramming home, driving the both of you to repeated orgasm. + When you feel yourself at the edge of orgasm, you have the pool's mobility aids rotate $him into a position level with the pool's edge, then hop up on that ledge yourself so that you can don a dildo and ream $his <<if canDoVaginal($activeSlave)>>pussy. <<= VaginalVCheck()>><<else>>asshole. <<= AnalVCheck()>><</if>> Satisfied that the angles are right, you grab hold of $his hips and slide half on top of $him, resting your lower half on the rear swell of $his obscenely bloated belly. Pressing your strapon to his needy hole, you tease $him for a moment before ramming home, driving the both of you to repeated orgasm. <<else>> - When you feel yourself at the edge of orgasm, you have the pool’s mobility aids rotate $him into a position level with the pool’s edge, then hop up on that ledge yourself so that your pussies are level. Satisfied that the angles are right, you grab hold of $his hips and slide half on top of $him, resting your lower half on the rear swell of $his obscenely bloated belly. Pressing your lower lips to $his, you rub your clits together, driving the both of you to repeated orgasm. + When you feel yourself at the edge of orgasm, you have the pool's mobility aids rotate $him into a position level with the pool's edge, then hop up on that ledge yourself so that your pussies are level. Satisfied that the angles are right, you grab hold of $his hips and slide half on top of $him, resting your lower half on the rear swell of $his obscenely bloated belly. Pressing your lower lips to $his, you rub your clits together, driving the both of you to repeated orgasm. <<set $activeSlave.vaginalCount++, $vaginalTotal++>> <</if>> <</if>> <<elseif ($activeSlave.trust < -20) && ($activeSlave.devotion > -10)>> <<if $activeSlave.amp < 1>> - $He’s resting $his head on one arm, but $he nods at you in acknowledgement as + $He's resting $his head on one arm, but $he nods at you in acknowledgement as <<else>> - $He’s resting on a small pile of pillows, enjoying the sensations against the flanks of $his colossal belly. $He nods as you enter, not stopping $his rubbing, and <<if canSee($activeSlave)>>watches<<else>>waits patiently as<</if>> + $He's resting on a small pile of pillows, enjoying the sensations against the flanks of $his colossal belly. $He nods as you enter, not stopping $his rubbing, and <<if canSee($activeSlave)>>watches<<else>>waits patiently as<</if>> <</if>> - you strip down and change into your swimming outfit. When it’s clear that you’re ready to join $him, $he motions at the pool’s holographic console and its mobility assistance devices kick in, rolling $him into the curative gel. You sink yourself into the pool, taking a moment to bask in the feeling of the warm, curative laced goo as it relaxes your muscles<<if $PC.preg > 30>> and soothes your stretched skin<</if>>, then wade toward your waiting slave. + you strip down and change into your swimming outfit. When it's clear that you're ready to join $him, $he motions at the pool's holographic console and its mobility assistance devices kick in, rolling $him into the curative gel. You sink yourself into the pool, taking a moment to bask in the feeling of the warm, curative laced goo as it relaxes your muscles<<if $PC.preg > 30>> and soothes your stretched skin<</if>>, then wade toward your waiting slave. <br><br> $He smiles politely, rubbing circles in the exploded sides of $his colossal belly, then gasps as you take a handful of the ooze and shove it right in $his face. $He sputters indignantly and then <<if $activeSlave.amp < 1>> @@ -77,8 +77,8 @@ You order $him to meet you in the spa for some quality time in the penthouse’s <<else>> wobbles back and forth, ineffectually trying to fight back as you cover $him in thick wads of gel, over and over. After several minutes of this, you decide that your <</if>> - <<if $PC.dick == 1>> - solid, quivering erection is in need of $his tender care. <<if canSee($activeSlave)>>Seeing<<else>>Sensing<</if>> the change in your demeanor, $he rolls back to recline at the pool’s edge and, once you’ve joined $him, + <<if $PC.dick == 1>> + solid, quivering erection is in need of $his tender care. <<if canSee($activeSlave)>>Seeing<<else>>Sensing<</if>> the change in your demeanor, $he rolls back to recline at the pool's edge and, once you've joined $him, <<if $activeSlave.amp < 1>> reaches down to masturbate your ooze lubricated dick. <<else>> @@ -96,27 +96,27 @@ You order $him to meet you in the spa for some quality time in the penthouse’s <<else>> back <</if>> - and the pool’s silk-lined wall. Reaching, you tease $his <<if canDoVaginal($activeSlave)>>kitty<<else>>asshole<</if>> with your fingers and $he crushes backward into you, moaning and rotating $his hips in response to your attention. Once you’re certain $he’s ready, you slide into $him, driving you both to orgasm. + and the pool's silk-lined wall. Reaching, you tease $his <<if canDoVaginal($activeSlave)>>kitty<<else>>asshole<</if>> with your fingers and $he crushes backward into you, moaning and rotating $his hips in response to your attention. Once you're certain $he's ready, you slide into $him, driving you both to orgasm. <<if canDoVaginal($activeSlave)>><<= VaginalVCheck()>><<else>><<= AnalVCheck()>><</if>> <<else>> - ooze stimulated quim is in need of $his tender care. Seeing the change in your demeanor, $he rolls back to recline at the pool’s edge and, once you’ve joined $him, + ooze stimulated quim is in need of $his tender care. Seeing the change in your demeanor, $he rolls back to recline at the pool's edge and, once you've joined $him, <<if $activeSlave.amp < 1>> reaches down to masterbate your pussy, squeezing and rubbing your clit. <<else>> rolls sideways and rubs your vulva as best $he can. <</if>> <<if $activeSlave.dick >= 1>> - When you feel yourself at the edge of orgasm, you have the pool’s mobility aids rotate $him into a position level with the pool’s edge, then hop up on that ledge yourself so that you can don a dildo and ream $his <<if canDoVaginal($activeSlave)>>pussy. <<= VaginalVCheck()>><<else>>asshole. <<= AnalVCheck()>><</if>> Satisfied that the angles are right, you grab hold of $his hips and slide half on top of $him, resting your lower half on the rear swell of $his obscenely bloated belly. Pressing your strapon to his needy hole, you tease $him for a moment before ramming home, driving the both of you to repeated orgasm. + When you feel yourself at the edge of orgasm, you have the pool's mobility aids rotate $him into a position level with the pool's edge, then hop up on that ledge yourself so that you can don a dildo and ream $his <<if canDoVaginal($activeSlave)>>pussy. <<= VaginalVCheck()>><<else>>asshole. <<= AnalVCheck()>><</if>> Satisfied that the angles are right, you grab hold of $his hips and slide half on top of $him, resting your lower half on the rear swell of $his obscenely bloated belly. Pressing your strapon to his needy hole, you tease $him for a moment before ramming home, driving the both of you to repeated orgasm. <<else>> - When you feel yourself at the edge of orgasm, you have the pool’s mobility aids rotate $him into a position level with the pool’s edge, then hop up on that ledge yourself so that your pussies are level. Satisfied that the angles are right, you grab hold of $his hips and slide half on top of $him, resting your lower half on the rear swell of $his obscenely bloated belly. Pressing your lower lips to $his, you rub your clits together, driving the both of you to repeated orgasm. + When you feel yourself at the edge of orgasm, you have the pool's mobility aids rotate $him into a position level with the pool's edge, then hop up on that ledge yourself so that your pussies are level. Satisfied that the angles are right, you grab hold of $his hips and slide half on top of $him, resting your lower half on the rear swell of $his obscenely bloated belly. Pressing your lower lips to $his, you rub your clits together, driving the both of you to repeated orgasm. <<set $activeSlave.vaginalCount++, $vaginalTotal++>> <</if>> <</if>> <<else>> <<if $activeSlave.amp < 1>> - $He’s resting $his head on one arm, but $he starts as you enter, watching tensely as + $He's resting $his head on one arm, but $he starts as you enter, watching tensely as <<else>> - $He’s resting on a small pile of pillows, savoring the sensations against the flanks of $his colossal belly and + $He's resting on a small pile of pillows, savoring the sensations against the flanks of $his colossal belly and <<if $activeSlave.boobs >= 20000>> massively overgrown tits <<elseif Math.floor($activeSlave.boobsImplant/$activeSlave.boobs) >= .60>> @@ -128,11 +128,11 @@ You order $him to meet you in the spa for some quality time in the penthouse’s <</if>> $He starts as you enter, watching tensely as <</if>> - you strip down and change into your swimming outfit. When you’re ready to join $him, you motion at the pool’s holographic console and its mobility assistance devices kick in, rolling $him into the curative gel. You sink yourself into the pool, taking a moment to bask in the feeling of the warm, curative laced goo as it relaxes your muscles<<if $PC.preg > 30>> and soothes your stretched skin<</if>>, then wade toward your worried looking slave. + you strip down and change into your swimming outfit. When you're ready to join $him, you motion at the pool's holographic console and its mobility assistance devices kick in, rolling $him into the curative gel. You sink yourself into the pool, taking a moment to bask in the feeling of the warm, curative laced goo as it relaxes your muscles<<if $PC.preg > 30>> and soothes your stretched skin<</if>>, then wade toward your worried looking slave. <br><br> $He smiles politely, rubbing circles in the exploded sides of $his colossal belly, then cries out in surprise as you take a handful of the ooze and shove it right in $his face. $He sputters, blushing, and wobbles back and forth, clearly trying not to react as you cover $him in thick wads of gel, over and over. After several minutes of this, you decide that your - <<if $PC.dick == 1>> - solid, quivering erection is in need of $his tender care. You force $him back into a reclining position at the pool’s edge and order $him to + <<if $PC.dick == 1>> + solid, quivering erection is in need of $his tender care. You force $him back into a reclining position at the pool's edge and order $him to <<if $activeSlave.amp < 1>> masturbate your ooze lubricated dick. <<else>> @@ -150,25 +150,25 @@ You order $him to meet you in the spa for some quality time in the penthouse’s <<else>> back <</if>> - and the pool’s silk lined walls. Reaching, you tease $his <<if canDoVaginal($activeSlave)>>kitty<<else>>asshole<</if>> with your fingers and rub one hand back and forth along the line of $his tensed shoulders as $he slowly gives in to lust. Once you’re certain $he’s ready, you slide into $him, driving you both to orgasm. + and the pool's silk lined walls. Reaching, you tease $his <<if canDoVaginal($activeSlave)>>kitty<<else>>asshole<</if>> with your fingers and rub one hand back and forth along the line of $his tensed shoulders as $he slowly gives in to lust. Once you're certain $he's ready, you slide into $him, driving you both to orgasm. <<if canDoVaginal($activeSlave)>><<= VaginalVCheck()>><<else>><<= AnalVCheck()>><</if>> <<else>> - ooze stimulated quim is in need of $his tender care. You force $him back to recline at the pool’s edge and, once you’ve joined $him, + ooze stimulated quim is in need of $his tender care. You force $him back to recline at the pool's edge and, once you've joined $him, <<if $activeSlave.amp < 1>> set $him to masturbating your pussy, squeezing and rubbing your clit. <<else>> set $him to rubbing your vulva with $his belly button. <</if>> <<if $activeSlave.dick >= 1>> - When you feel yourself at the edge of orgasm, you have the pool’s mobility aids rotate $him into a position level with the pool’s edge, then hop up on that ledge yourself so that you can don a dildo and ream $his <<if canDoVaginal($activeSlave)>>pussy. <<= VaginalVCheck()>><<else>>asshole. <<= AnalVCheck()>><</if>> Satisfied that the angles are right, you grab hold of $his hips and slide half on top of $him, resting your lower half on the rear swell of $his obscenely bloated belly. Pressing your strapon to his needy hole, you tease $him for a moment before ramming home, driving the both of you to repeated orgasm. + When you feel yourself at the edge of orgasm, you have the pool's mobility aids rotate $him into a position level with the pool's edge, then hop up on that ledge yourself so that you can don a dildo and ream $his <<if canDoVaginal($activeSlave)>>pussy. <<= VaginalVCheck()>><<else>>asshole. <<= AnalVCheck()>><</if>> Satisfied that the angles are right, you grab hold of $his hips and slide half on top of $him, resting your lower half on the rear swell of $his obscenely bloated belly. Pressing your strapon to his needy hole, you tease $him for a moment before ramming home, driving the both of you to repeated orgasm. <<= AnalVCheck()>> <<else>> - When you feel yourself at the edge of orgasm, you have the pool’s mobility aids rotate $him into a position level with the pool’s edge, then hop up on that ledge yourself so that your pussies are level. Satisfied that the angles are right, you grab hold of $his hips and slide half on top of $him, resting your lower half on the rear swell of $his obscenely bloated belly. Pressing your lower lips to $his, you rub your clits together, driving the both of you to repeated orgasm. + When you feel yourself at the edge of orgasm, you have the pool's mobility aids rotate $him into a position level with the pool's edge, then hop up on that ledge yourself so that your pussies are level. Satisfied that the angles are right, you grab hold of $his hips and slide half on top of $him, resting your lower half on the rear swell of $his obscenely bloated belly. Pressing your lower lips to $his, you rub your clits together, driving the both of you to repeated orgasm. <<set $activeSlave.vaginalCount++, $vaginalTotal++>> <</if>> <</if>> <</if>> -After you’ve finished with $him, you escort $him to the spa’s attached showers so that the two of you can enjoy a bit more time together as you clean off, then allow $him to return to $his duties as you return to your own. +After you've finished with $him, you escort $him to the spa's attached showers so that the two of you can enjoy a bit more time together as you clean off, then allow $him to return to $his duties as you return to your own. <<if passage() != "Slave Interact">> <<set _fv = $slaveIndices[$activeSlave.ID]>> diff --git a/src/pregmod/criminalMarkets.tw b/src/pregmod/criminalMarkets.tw index af3822dca93ec78e23436a702311aa7439a562dd..f9f3cacf5e832d5001efa2aee107afdd9b91f1a2 100644 --- a/src/pregmod/criminalMarkets.tw +++ b/src/pregmod/criminalMarkets.tw @@ -11,33 +11,33 @@ You board the transport to <<switch $weeklyMarket>> <<case "low tier criminals">> /* mixed prisoners */ - a small prison on the edge of the city spanning from the foot of your Arcology with the appearance of an Old World police station. You arrive inside and are met by a cute receptionist, asking why one such as yourself would visit such a place. With formalities out of the way, the head of the station is called and arrives shortly. "Well now, didn’t expect to see you here. Came to pick up a criminal and give them a chance at not being a menial?" You are then led further into the station and into the prisoners quarters; most of them downcast and dismal, but some look up to see what the commotion is about. "You! Come here! This gentleman wants to take a look so be on your best behavior!" the head calls out, bringing one of the criminals close enough to be inspected. + a small prison on the edge of the city spanning from the foot of your Arcology with the appearance of an Old World police station. You arrive inside and are met by a cute receptionist, asking why one such as yourself would visit such a place. With formalities out of the way, the head of the station is called and arrives shortly. "Well now, didn't expect to see you here. Came to pick up a criminal and give them a chance at not being a menial?" You are then led further into the station and into the prisoners quarters; most of them downcast and dismal, but some look up to see what the commotion is about. "You! Come here! This gentleman wants to take a look so be on your best behavior!" the head calls out, bringing one of the criminals close enough to be inspected. <<case "gangs and smugglers">> /* males only */ - a large gray prison at the edge of the Free City as word of your approach is sent ahead. The visage of the prison itself is a grim one, enclosed by a large gray concrete fence with electrified barbed wire coiled at the top. As the vehicle rolls to a stop before a large gate, the guard in control of the gate operates a board of buttons and levers, promptly opening it so it may continue. "Stay on the road," he respectfully advises, a final remark before letting your driver carries on. Beyond the fence is an array of guard towers manned with drones for 24/7 surveillance, giving you a clear idea of what was to happen if you were not to heed the guard’s words and decided to wander off from the group. + a large gray prison at the edge of the Free City as word of your approach is sent ahead. The visage of the prison itself is a grim one, enclosed by a large gray concrete fence with electrified barbed wire coiled at the top. As the vehicle rolls to a stop before a large gate, the guard in control of the gate operates a board of buttons and levers, promptly opening it so it may continue. "Stay on the road," he respectfully advises, a final remark before letting your driver carries on. Beyond the fence is an array of guard towers manned with drones for 24/7 surveillance, giving you a clear idea of what was to happen if you were not to heed the guard's words and decided to wander off from the group. <br><br> - Your destination at the end of the road is a garage, where upon your disembarking, no less than 4 heavily armored guards with electric batons at their sides come to greet you. You could almost mistake them for unmanned drones had they not spoken, "We’ve been expecting you, please follow us. We house some dangerous individuals in our establishment and we need to keep you safe". You accept their advice and enter the premises. + Your destination at the end of the road is a garage, where upon your disembarking, no less than 4 heavily armored guards with electric batons at their sides come to greet you. You could almost mistake them for unmanned drones had they not spoken, "We've been expecting you, please follow us. We house some dangerous individuals in our establishment and we need to keep you safe". You accept their advice and enter the premises. <br><br> You are met with a dimly lit concrete hallway as you enter, only for it to open up to a multi-floor prison that had placed its prisoners underground for the most part<<if $PC.title == 0 || $PC.boobsBonus > 1 || $PC.butt > 1>>, where you are met with a hailstorm of whistles, cheers and other catcalls<</if>>. You come to a bridge and look down to see its inhabitants, hard criminals that are coming together for a meal. You watch a fight break out at one point and an armored guard quickly stepped in and applying his baton to the offenders, coupled with a loud zap that silences the entire area. Around your level, you see the better stock; the attractive prisoners one would show to an interested customer. <br><br> - You finally reach the warden’s office, "Welcome <<if $PC.title == 1>>Mister<<else>>Miss<</if>> <<= PlayerName()>>, I never thought my prison could have turned to a trade such as this, but times are hard." He beckons you to the seat opposite him, "but I’m not one to complain when an opportunity such as this comes my way." He motions to his guards to bring in a select stock for your perusal, "We house some tough nuts in this establishment, but if you believe you can capitalize on these criminals, we’ll be happy to have you take them off our hands." The guard returns with a convict ready to be sold. + You finally reach the warden's office, "Welcome <<if $PC.title == 1>>Mister<<else>>Miss<</if>> <<= PlayerName()>>, I never thought my prison could have turned to a trade such as this, but times are hard." He beckons you to the seat opposite him, "but I'm not one to complain when an opportunity such as this comes my way." He motions to his guards to bring in a select stock for your perusal, "We house some tough nuts in this establishment, but if you believe you can capitalize on these criminals, we'll be happy to have you take them off our hands." The guard returns with a convict ready to be sold. <<case "white collar">> /* mixed prisoners */ - what looks more like an oversized vacation home rather than something one goes to for committing crimes. You enter the premises into a small chamber with a booth to the side and are immediately met with, "Ah! We’ve been waiting for you. Please go in. We’ll call someone to guide you immediately." + what looks more like an oversized vacation home rather than something one goes to for committing crimes. You enter the premises into a small chamber with a booth to the side and are immediately met with, "Ah! We've been waiting for you. Please go in. We'll call someone to guide you immediately." <br><br> - You nod at the prompt and enter further into the luxurious building to find a formally dressed guide and what appears to be the holding area of the prison. The cells, if you can call them that, are large and cozy, each with their own computer and television. The air is also conditioned for their comfort and Old World classical music is playing to provide further ambiance. Walking through, you see the prisoners themselves, lazing about in their beds, sitting at their computers or just talking to each other. If there was ever a prison you’d rather end up in, this would be it. + You nod at the prompt and enter further into the luxurious building to find a formally dressed guide and what appears to be the holding area of the prison. The cells, if you can call them that, are large and cozy, each with their own computer and television. The air is also conditioned for their comfort and Old World classical music is playing to provide further ambiance. Walking through, you see the prisoners themselves, lazing about in their beds, sitting at their computers or just talking to each other. If there was ever a prison you'd rather end up in, this would be it. <br><br> - You enter the warden’s office and are greeted with all due formalities, "Glad to see you at our establishment. When I heard that someone as renowned as yourself was coming over, I made the appropriate preparations." You are served a cup of tea as she brings in the chosen stock for you to observe at your leisure. + You enter the warden's office and are greeted with all due formalities, "Glad to see you at our establishment. When I heard that someone as renowned as yourself was coming over, I made the appropriate preparations." You are served a cup of tea as she brings in the chosen stock for you to observe at your leisure. <<case "military prison">> a holding facility for prisoners of war located on the outskirts of the Free City, which is reasonable due to the dangers inherent to the criminals imprisoned in such an establishment. The driver radios ahead that you and several other interested parties will be arriving shortly. Once you disembark at the edge of the grounds, you are recognized by the stationed guard and ushered into a heavily armored vehicle. <<if $PC.career == "mercenary">>The interior brings back memories and you completely<<else>>Although the interior makes you feel like a prisoner, you<</if>> understand the reasoning behind such a design choice. <br><br> - Once you arrive at the prison, the door opens to a garage and another door, brightly lit to welcome you to the premises. Through the door, you find the prisoner’s quarters, each of them enclosed by electrified fences to ensure your safety as you see the stock. A guard enters, asking you to follow him as he leads you across the chamber to meet with the warden. + Once you arrive at the prison, the door opens to a garage and another door, brightly lit to welcome you to the premises. Through the door, you find the prisoner's quarters, each of them enclosed by electrified fences to ensure your safety as you see the stock. A guard enters, asking you to follow him as he leads you across the chamber to meet with the warden. <br><br> - Entering the warden’s quarters, you take a seat across from the warden as he takes the initiative, "Ah, fancy meeting one such as yourself here. Though we house some of the hardiest criminals you can find, I’m sure one such as yourself could find great use for them" He smirks "... or perhaps great entertainment through the pits", he beckons to his staff as they bring in the selected stock. + Entering the warden's quarters, you take a seat across from the warden as he takes the initiative, "Ah, fancy meeting one such as yourself here. Though we house some of the hardiest criminals you can find, I'm sure one such as yourself could find great use for them" He smirks "... or perhaps great entertainment through the pits", he beckons to his staff as they bring in the selected stock. <</switch>> diff --git a/src/pregmod/fNippleFuck.tw b/src/pregmod/fNippleFuck.tw index d9741c99ee3bf99c3c191f9383e024040a897d7b..1860a77a3c6bd1cae82eb94088ec7d4e8a198352 100644 --- a/src/pregmod/fNippleFuck.tw +++ b/src/pregmod/fNippleFuck.tw @@ -21,15 +21,15 @@ You call $him over to make use of $his lewd nipple cunts. Once $he seems comfortable, you turn your attention to $his chest. You start by groping and nuzzling $his breasts, teasing $his nipples with your tongue. <<if $activeSlave.lactation > 0>> - It doesn’t take much stimulation before milk starts dribbling onto your tongue. + It doesn't take much stimulation before milk starts dribbling onto your tongue. <</if>> <<if $activeSlave.devotion > 20 || $activeSlave.trust > 20>> $He starts making soft noises of pleasure and luxuriates in your attentions. <<else>> - $He fidgets at your ministrations, but doesn’t say anything. + $He fidgets at your ministrations, but doesn't say anything. <</if>> -Once you’re satisfied, you line up your dick with $his right nipple and slowly ease yourself into $him. +Once you're satisfied, you line up your dick with $his right nipple and slowly ease yourself into $him. <<if $activeSlave.lactation > 0>> Milk gushes around your length and soaks your crotch, the feeling almost like a waterjet, as $his @@ -67,6 +67,6 @@ As your orgasm begins to build, you roughly grasp $his shoulders and begin to pi As $he reaches $his climax, $his body seems to tense and $he bites $his lip. <</if>> -It only takes few more thrusts before you bottom out inside $his breast and release your load deep inside $him. You pull yourself free with a lewd sound and proudly survey what you’ve wrought. Cum<<if $activeSlave.lactation > 0>> and milk dribble<<else>> dribbles <</if>> from $his gaping nipple. Enjoying the sight, you begin to feel yourself hardening and line up your dick at $his left nipple for a repeat performance. +It only takes few more thrusts before you bottom out inside $his breast and release your load deep inside $him. You pull yourself free with a lewd sound and proudly survey what you've wrought. Cum<<if $activeSlave.lactation > 0>> and milk dribble<<else>> dribbles <</if>> from $his gaping nipple. Enjoying the sight, you begin to feel yourself hardening and line up your dick at $his left nipple for a repeat performance. Once both $his breasts have been thoroughly fucked, you send $him away to clean $himself up.