From feca31d64d6b55579de2b217eaf19e13a26ed170 Mon Sep 17 00:00:00 2001 From: Pregmodder <pregmodder@gmail.com> Date: Sun, 17 May 2020 02:08:31 -0400 Subject: [PATCH] JS saServeYourOtherSlaves --- src/endWeek/saServeYourOtherSlaves.js | 1266 ++++++++++++++++++++++++ src/uncategorized/fullReport.tw | 2 +- src/utility/descriptionWidgetsFlesh.tw | 2 +- 3 files changed, 1268 insertions(+), 2 deletions(-) create mode 100644 src/endWeek/saServeYourOtherSlaves.js diff --git a/src/endWeek/saServeYourOtherSlaves.js b/src/endWeek/saServeYourOtherSlaves.js new file mode 100644 index 00000000000..8460fe37812 --- /dev/null +++ b/src/endWeek/saServeYourOtherSlaves.js @@ -0,0 +1,1266 @@ +App.SlaveAssignment.serveYourOtherSlaves = (function() { + "use strict"; + + let r; + + // eslint-disable-next-line no-unused-vars + let he, him, his, hers, himself, girl, loli, He, His; + // eslint-disable-next-line no-unused-vars + let he2, him2, his2, hers2, himself2, girl2, loli2, He2, His2; + + let jobType; + let fetishChange; + + let oralUse; + let analUse; + let vaginalUse; + let mammaryUse; + let penetrativeUse; + let fuckCount; + let load; + let cervixPump; + + let dom; + let domSlave; + let domName; + let domRace; + + let subName; + let subRace; + let hands; + + return saServeYourOtherSlaves; + + /** + * @param {App.Entity.SlaveState} slave + * @returns {string} + */ + function saServeYourOtherSlaves(slave) { + r = []; + fetishChange = fetishChangeChance(slave); + + ({ + // eslint-disable-next-line no-unused-vars + he, him, his, hers, himself, girl, He, His, loli + } = getPronouns(slave)); + + oralUse = 0; + analUse = 0; + vaginalUse = 0; + mammaryUse = 0; + penetrativeUse = 0; + cervixPump = 0; + fuckCount = 0; + load = 0; + + subName = slave.slaveName; + hands = hasBothArms(slave) ? "hands" : "hand"; + + validateJob(slave); + if (jobType === "stud") { + studLife(slave); + } else if (jobType === "cumdump") { + cumdumpLife(slave); + } else if (jobType === "sub") { + subLife(slave); + } + sexualSatiation(slave); + physicalEffects(slave); + mentalEffects(slave); + slaveSkills(slave); + + return r.join(" "); + } + + /** + * @param {App.Entity.SlaveState} slave + * */ + function validateJob(slave) { + if (slave.subTarget === -1) { + jobType = "stud"; + } else if (slave.subTarget === 0) { + jobType = "cumdump"; + } else { + // validate .subTarget + dom = V.slaveIndices[slave.subTarget]; + if (dom !== undefined) { + jobType = "sub"; + domSlave = V.slaves[dom]; + domName = domSlave.slaveName; + } else { + jobType = "cumdump"; + slave.subTarget = 0; + } + } + } + + /** + * @param {App.Entity.SlaveState} slave + * */ + function studLife(slave) { + if (slave.fuckdoll > 0) { + r.push(`is positioned as a sperm dispenser for fertile slaves to ride or milk at their discretion.`); + } else if (slave.fetish === "mindbroken") { + if (slave.career === "a breeding bull" && canWalk(slave)) { + r.push(`is allowed to freely breed any fertile slaves ${he} can find.`); + } else { + r.push(`is left as a sperm dispenser for fertile slaves to ride or milk at their discretion.`); + } + } else if (slave.career === "a breeding bull") { + r.push(`sees it as ${his} duty to impregnate everyone in ${his} path. A role ${he} <span class="hotpink">appreciates</span> you <span class="mediumaquamarine">untrusting ${him} with.</span>`); + slave.devotion += 1; + slave.trust += 1; + if (slave.fetishKnown === 1) { + if (slave.fetish === "pregnancy") { + r.push(`${He} <span class="hotpink">thoroughly enjoys</span> ${his} dream-like, pregnancy-centered life.`); + slave.devotion += 1; + } else if (slave.fetish === "dom") { + r.push(`${He} <span class="hotpink">thoroughly enjoys</span> having permission to mount and breed any slave ${he} wants.`); + slave.devotion += 1; + } + } + } else if (slave.devotion <= 20) { + if (slave.trust >= -20) { + r.push(`is bound and laid out to serve as a source of cum for your fertile slaves. Being tied up and left to the wolves <span class="gold">frightens ${him} into obedience.</span>`); + slave.trust -= 5; + if (slave.fetishKnown === 1) { + if (slave.fetish === "pregnancy") { + r.push(`${He} secretly gets off at the thought of all the wombs ${he} will seed <span class="hotpink">and can't wait to get to work.</span>`); + slave.devotion += 1; + } else if (slave.fetish === "submissive") { + r.push(`${He} secretly enjoys the prospect of being pinned by mothers-to-be and milked to orgasm; <span class="hotpink">${he} needs it.</span>`); + slave.devotion += 1; + } + } + } else { + r.push(`is forced to serve as a sperm dispenser for your fertile slaves. Being taken advantage of in such a way <span class="hotpink">habituates ${him} to subservience</span> and <span class="gold">keeps ${him} fearful.</span>`); + slave.trust -= 2; + slave.devotion += 2; + if (slave.fetishKnown === 1) { + if (slave.fetish === "pregnancy") { + r.push(`${He} privately enjoys the prospect of fertilizing so many eggs <span class="hotpink">and accepts it.</span>`); + slave.devotion += 1; + } else if (slave.fetish === "masochist") { + r.push(`${He} privately enjoys the prospect of rough treatment <span class="hotpink">and accepts it.</span>`); + slave.devotion += 1; + } else if (slave.fetish === "submissive") { + r.push(`${He} privately enjoys the prospect of being treated as a mere tool <span class="hotpink">and accepts it.</span>`); + slave.devotion += 1; + } + } + } + } else { + r.push(`obediently seeds your fertile slaves. Being used as a stud <span class="hotpink">keeps ${him} in a good frame of mind</span> and <span class="mediumaquamarine">builds ${his} trust in you.</span> `); + slave.devotion += 2; + slave.trust += 2; + if (slave.fetishKnown === 1) { + if (slave.fetish === "pregnancy") { + r.push(`${He} <span class="hotpink">openly enjoys</span> getting the honor of fathering new slaves on your behalf.`); + slave.devotion += 1; + } else if (slave.fetish === "dom") { + r.push(`${He} <span class="hotpink">openly enjoys</span> the prospect of laying claim to any womb that comes ${his} way.`); + slave.devotion += 1; + } + } + } + } + + /** + * @param {App.Entity.SlaveState} slave + * */ + function cumdumpLife(slave) { + if (slave.devotion <= 20) { + if (slave.trust >= -20) { + r.push(`is forced to serve your other slaves' sexual needs by constant punishment. Being castigated and raped <span class="gold">frightens ${him} into obedience.</span>`); + slave.trust -= 5; + if (slave.sexualQuirk === "strugglefuck queen") { + r.push(`${He} secretly likes being raped <span class="hotpink">and wants more.</span>`); + slave.devotion += 1; + } else if (slave.sexualQuirk === "gagfuck queen") { + r.push(`${He} secretly enjoys the oral abuse <span class="hotpink">and wants more.</span>`); + slave.devotion += 1; + } else if (slave.sexualQuirk === "painal queen") { + r.push(`${He} secretly gets off on assrape <span class="hotpink">and wants more.</span>`); + slave.devotion += 1; + } + } else { + r.push(`is forced to serve your other slaves' sexual needs by ${his} fear. Being used on pain of punishment <span class="hotpink">habituates ${him} to subservience</span> and <span class="gold">keeps ${him} fearful.</span>`); + slave.trust -= 2; + slave.devotion += 2; + if (slave.sexualQuirk === "strugglefuck queen") { + r.push(`${He} privately likes being abused <span class="hotpink">and accepts it.</span>`); + slave.devotion += 1; + } else if (slave.sexualQuirk === "gagfuck queen") { + r.push(`${He} privately likes being an oral toy and <span class="hotpink">and accepts it.</span>`); + slave.devotion += 1; + } else if (slave.sexualQuirk === "painal queen") { + r.push(`${He} privately likes being an anal toy <span class="hotpink">and accepts it.</span>`); + slave.devotion += 1; + } + } + } else { + r.push(`obediently serves your other slaves' sexual needs. Being used as a sexual outlet for everyone <span class="hotpink">keeps ${him} in a good frame of mind.</span>`); + slave.devotion += 2; + if (slave.sexualQuirk === "strugglefuck queen") { + r.push(`${He} <span class="hotpink">openly enjoys</span> how other slaves can take whatever they want from ${him}.`); + slave.devotion += 1; + } else if (slave.sexualQuirk === "gagfuck queen") { + r.push(`${He} <span class="hotpink">openly enjoys</span> how other slaves can order ${him} to lick, suck or blow anything at all.`); + slave.devotion += 1; + } else if (slave.sexualQuirk === "painal queen") { + r.push(`${He} <span class="hotpink">openly enjoys</span> how other slaves can shove anything up ${his} butt without asking first.`); + slave.devotion += 1; + } + } + if (hasAnyLegs(slave) && !canWalk(slave)) { + r.push(`Since ${he}'s forced to crawl around, ${he}'s especially vulnerable.`); + } + if (V.subSlaves <= 0) { + V.subSlaves = 1; + } + if ((V.dormitoryPopulation + V.roomsPopulation - V.subSlaves) > 5) { + load = (V.subSlaves / (V.dormitoryPopulation + V.roomsPopulation - V.subSlaves)); + if (load > .8) { + r.push(`Since there are enough other slaves servicing your stock alongside ${him}, ${he} sees limited action.`); + } else if (load > .5) { + r.push(`With ${his} servicing sisters, ${his} workload is reasonable and ${he} isn't overworked.`); + } else if (load > .2) { + r.push(`While ${he} may have support in servicing your stock, ${he} is <span class="red">overwhelmed by their collective need.</span>`); + slave.health.tired += 10; + if (slave.sexualFlaw === "self hating") { + r.push(`With so many other slaves taking advantage of ${his} body, ${his} life's purpose of <span class="hotpink">being nothing more than a piece of meat</span> has come true.`); + slave.devotion += 5; + } else if (slave.sexualFlaw === "attention whore") { + r.push(`With little competition for ${his} body and so many slaves eager to use ${him}, ${his} dreams of being the center of attention are <span class="hotpink">have come true.</span>`); + if (slave.weight < 10 && slave.belly < 100) { + if (canDoVaginal(slave) && slave.vagina > 0 && canDoAnal(slave) && slave.anus > 0) { + r.push(`${He} ends each day cradling ${his} cum swollen stomach, marveling at the "attention" bestowed upon ${him}.`); + } else if ((canDoVaginal(slave) && slave.vagina > 0) || (canDoAnal(slave) && slave.anus > 0)) { + r.push(`By the end of the day, ${his} stomach has a noticeable bulge to it from all the "attention" bestowed upon ${him}.`); + } + } + slave.devotion += 5; + } else if (slave.energy > 95) { + r.push(`With so many other slaves using ${his} body, ${his} <span class="hotpink">burning libido is finally sated.</span>`); + slave.devotion += 2; + } + } else { + r.push(`Since`); + if (V.subSlaves === 1) { + r.push(`${he} is the only slave`); + } else { + r.push(`there are so few other slaves`); + } + r.push(`servicing your stock, ${he} is used to the <span class="red">point of exhaustion.</span>`); + slave.health.tired += 30; + healthDamage(slave, 10); + if (V.averageDick > 5) { + if (canDoVaginal(slave) && slave.vagina > 0 && slave.vagina < 4) { + if ((slave.vagina * 40) - (V.averageDick * 5) < jsRandom(1, 100)) { + r.push(`So many huge dicks pistoning in and out of ${his} pussy <span class="lime">loosen ${him} up.</span>`); + slave.vagina++; + slave.counter.vaginal += 3; + V.vaginalTotal += 3; + } + } + if (canDoAnal(slave) && slave.anus > 0 && slave.anus < 4) { + if ((slave.anus * 40) - (V.averageDick * 5) < jsRandom(1, 100)) { + r.push(`<span class="lime">${His} asshole is loosened</span> after being pounded by so many giant cocks.`); + slave.anus++; + slave.counter.anal += 3; + V.analTotal += 3; + } + } + } + if (slave.sexualFlaw === "self hating") { + r.push(`With so many other slaves taking advantage of ${his} body, ${his} life's purpose of <span class="hotpink">being nothing more than a piece of meat</span> has come true.`); + slave.devotion += 5; + } else if (slave.sexualFlaw === "attention whore") { + r.push(`With little competition for ${his} body and so many slaves eager to use ${him}, ${his} dreams of being the center of attention are <span class="hotpink">have come true.</span>`); + if (slave.weight < 10 && slave.belly < 100) { + if (canDoVaginal(slave) && slave.vagina > 0 && canDoAnal(slave) && slave.anus > 0) { + r.push(`${He} ends each day cradling ${his} cum swollen stomach, marveling at the "attention" bestowed upon ${him}.`); + } else if ((canDoVaginal(slave) && slave.vagina > 0) || (canDoAnal(slave) && slave.anus > 0)) { + r.push(`By the end of the day, ${his} stomach has a noticeable bulge to it from all the "attention" bestowed upon ${him}.`); + } + } + slave.devotion += 5; + } else if (slave.energy > 95) { + r.push(`With so many other slaves using ${his} body, ${his} <span class="hotpink">burning libido is finally sated.</span>`); + slave.devotion += 2; + } + } + } else { + r.push(`Since you have so few slaves in need of release, ${he} sees little action.`); + } + fuckCount = Math.ceil((((V.dormitoryPopulation + V.roomsPopulation) + jsRandom(((V.dormitoryPopulation + V.roomsPopulation) * 1), (V.dormitoryPopulation + V.roomsPopulation) * 7)) / V.subSlaves) * healthPenalty(slave)); + SimpleSexAct.Slave(slave, fuckCount); + } + + /** + * @param {App.Entity.SlaveState} slave + * */ + function subLife(slave) { + ({ + // eslint-disable-next-line no-unused-vars + he2, him2, his2, hers2, himself2, girl2, He2, His2, loli2 + } = getPronouns(domSlave)); + + if (V.seeRace === 1) { + domRace = domSlave.race; + subRace = slave.race; + } else { + domRace = ""; + subRace = ""; + } + + r.push(`is serving <strong>${domName}</strong> this week.`); + if (hasAnyLegs(domSlave) && !canWalk(slave)) { + r.push(`Since ${subName} cannot stand, ${domName} has no trouble taking whatever ${he2} wants from ${him}.`); + } else if (isAmputee(domSlave)) { + r.push(`Since ${he2} has no limbs, ${domName} has to put forth extra effort taking whatever ${he2} wants from ${subName}.`); + } + + if (canPenetrate(domSlave)) { + if (slave.anus === 0 && canDoAnal(slave) && slave.vagina === 0 && canDoVaginal(slave)) { + r.push(`Of course, ${he2} respects ${subName}'s virgin holes and does not penetrate ${him}.`); + } else if (slave.anus === 0 && canDoAnal(slave)) { + r.push(`Of course, ${he2} respects ${subName}'s anal virginity and does not penetrate ${him} there.`); + } else if (slave.vagina === 0 && canDoVaginal(slave)) { + r.push(`Of course, ${he2} respects ${subName}'s virginity and does not penetrate ${his} pussy.`); + } + } + + if (domSlave.fetishKnown === 1 && domSlave.fetishStrength > 60 && domSlave.fetish === "buttslut") { + if (canPenetrate(slave) && canDoAnal(domSlave) && (domSlave.anus !== 0)) { + if (slave.devotion < -20) { + r.push(`Since ${domName} loves anal, ${subName} finds ${himself} forced to use ${his} stiff prick to please ${domName}'s insatiable ass. ${He} spends the week trying to avoid ${domName}, because ${domName} won't stop forcing ${him} to get ${his} ${subRace} dick hard so ${domName} can ride ${his2} ${domRace} butt up and down on it. <span class="hotpink">${domName} enjoys having ${his2} own personal cock for the week,</span> even if it does have to be persuaded.`); + } else if ((slave.devotion <= 50)) { + r.push(`Since ${domName} loves anal, ${subName} finds ${himself} constantly asked to use ${his} stiff prick to please ${domName}'s insatiable ass. ${He} spends the week desperately trying to keep ${himself} hard, because ${domName} constantly expects ${his} ${subRace} dick to be erect so ${domName} can ride ${his2} ${domRace} butt up and down on it. <span class="hotpink">${domName} enjoys having ${his2} own personal cock for the week.</span>`); + } else { + r.push(`${domName} loves anal and ${subName} has a stiff prick. The two of them have good fun together.`); + if (hasAnyLegs(domSlave)) { + r.push(`${domName} pulls ${his2} anal ${girl}toy into bathrooms and corners constantly`); + } else { + r.push(`${domName} has ${his2} anal ${girl}toy hold ${his2}`); + if (isAmputee(domSlave)) { + r.push(`limbless`); + } + r.push(`torso`); + } + r.push(`so ${he2} can ride that ${subRace} dick with ${his2} ${domRace} butt. <span class="hotpink">${domName} enjoys a week of constant butt loving.</span>`); + } + penetrativeUse = jsRandom(9, 12); + domSlave.counter.anal += penetrativeUse; + V.analTotal += penetrativeUse; + if (canImpreg(domSlave, slave)) { + r.push(`${knockMeUp(domSlave, 30, 1, slave.ID, 1)}`); + if (domSlave.pregKnown === 1) { + r.push(`With so many potent deposits into ${his2} fertile rear, it comes as little surprise when <span class="lime">${he2} ends up pregnant with ${subName}'s child.</span>`); + } + } + } else if (canDoAnal(domSlave)) { + if (slave.devotion < -20) { + r.push(`Since ${domName} loves anal, ${subName} finds ${himself} forced to give analingus on command. ${He} spends the week trying to avoid servicing ${domName}'s insatiable ${domRace} ass with ${his} ${subRace} mouth, but ${domName} insists. <span class="hotpink">${domName} enjoys being able to force ${subName} to service ${his2} butt.</span>`); + } else if ((slave.devotion <= 50)) { + r.push(`Since ${domName} loves anal, ${subName} finds ${himself} giving analingus on command. ${He} spends the week servicing ${domName}'s insatiable ${domRace} ass with ${his} ${subRace} mouth. <span class="hotpink">${domName} enjoys having ${his2} ass pleasured whenever ${he2} wants it.</span>`); + } else { + r.push(`Since ${domName} loves anal play, ${subName} lavishes attention on ${his2} butt. ${He} spends the week servicing ${domName}'s insatiable ${domRace} ass with ${his} ${subRace} mouth. <span class="hotpink">${domName} enjoys having an enthusiastic anal playmate.</span>`); + } + oralUse = jsRandom(9, 12); + domSlave.counter.anal += oralUse; + V.analTotal += oralUse; + } else { + if (slave.devotion < -20) { + r.push(`Since ${domName} loves ${his2} rear, ${subName} finds ${himself} forced to`); + if (!hasAnyArms(slave)) { + r.push(`massage`); + } else { + r.push(`fondle`); + } + r.push(`it on command. ${He} spends the week trying to avoid servicing ${domName}'s ${domRace} ass with ${his} ${subRace}`); + if (!hasAnyArms(slave)) { + r.push(`face,`); + } else { + r.push(`${hands},`); + } + r.push(`but ${domName} insists. <span class="hotpink">${domName} enjoys being able to force ${subName} to service ${his2} butt.</span>`); + } else if (slave.devotion <= 50) { + r.push(`Since ${domName} loves ${his} rear, ${subName} finds ${himself}`); + if (!hasAnyArms(slave)) { + r.push(`massaging`); + } else { + r.push(`fondling`); + } + r.push(`it on command. ${He} spends the week servicing ${domName}'s ${domRace} ass with ${his} ${subRace}`); + if (!hasAnyArms(slave)) { + r.push(`face.`); + } else { + r.push(`${hands}.`); + } + r.push(`<span class="hotpink">${domName} enjoys having ${his2} ass pleasured whenever ${he2} wants it.</span>`); + } else { + r.push(`Since ${domName} loves ${his2} rear played with, ${subName} lavishes attention on ${his2} butt. ${He} spends the week fondling ${domName}'s ${domRace} ass with ${his} ${subRace}`); + if (!hasAnyArms(slave)) { + r.push(`face.`); + } else { + r.push(`${hands}.`); + } + r.push(`<span class="hotpink">${domName} enjoys having a playmate so fond of ${his2} booty.</span>`); + } + } + } else if (slave.devotion >= -20 && domSlave === "submissive" && domSlave.fetishKnown === 1 && domSlave.fetishStrength > 60) { + r.push(`${domName} loves to submit, and tells ${subName} to fuck ${him2}; when ${subName} asks how, ${domName} tells ${him} to take charge.`); + if (canPenetrate(slave)) { + penetrativeUse = jsRandom(9, 12); + if (isAmputee(slave)) { + if (canDoVaginal(domSlave) && domSlave.vagina !== 0) { + r.push(`${domName} finds ${himself2} under the weight of ${subName}'s limbless body and ${his2} ${domRace} slit accommodating an eager ${subRace} cock. Afterward, ${domName} lavishes kisses on ${his2} satisfactory top for ${his} efforts. ${domName} <span class="hotpink">enjoys a week of constant submission,</span> and even though ${he}'s technically being used, ${subName} <span class="hotpink">doesn't mind</span> being expected to fuck a willing pussy.`); + domSlave.counter.vaginal += penetrativeUse; + V.vaginalTotal += penetrativeUse; + if (canImpreg(domSlave, slave)) { + r.push(`${knockMeUp(domSlave, 30, 0, slave.ID, 1)}`); + if (domSlave.pregKnown === 1) { + r.push(`With so many potent loads kissing ${his2} cervix, it comes as little surprise when <span class="lime">${he2} ends up pregnant with ${subName}'s child.</span>`); + } + } + } else if (canDoAnal(domSlave) && domSlave.anus !== 0) { + r.push(`${domName} finds ${himself2} under the weight of ${subName}'s limbless body and ${his2} ${domRace} ass accommodating an eager ${subRace} cock. Afterward, ${domName} lavishes kisses on ${his2} satisfactory top for ${his} efforts. ${domName} <span class="hotpink">enjoys a week of constant submission,</span> and even though ${he}'s technically being used, ${subName} <span class="hotpink">doesn't mind</span> being expected to fuck a willing asshole.`); + domSlave.counter.anal += penetrativeUse; + V.analTotal += penetrativeUse; + if (canImpreg(domSlave, slave)) { + r.push(`${knockMeUp(domSlave, 30, 1, slave.ID, 1)}`); + if (domSlave.pregKnown === 1) { + r.push(`With so many potent deposits into ${his2} fertile rear, it comes as little surprise when <span class="lime">${he2} ends up pregnant with ${subName}'s child.</span>`); + } + } + } else { + r.push(`${domName} finds ${his2} head under the weight of ${subName}'s limbless body and ${his2} ${domRace} face accommodating an eager ${subRace} cock. Afterward, ${domName} lavishes kisses on ${his2} satisfactory top for ${his} efforts. ${domName} <span class="hotpink">enjoys a week of constant submission,</span> and even though ${he}'s technically being used, ${subName} <span class="hotpink">doesn't mind</span> being expected to fuck a willing asshole.`); + domSlave.counter.oral += penetrativeUse; + V.oralTotal += penetrativeUse; + } + } else { + if (canDoVaginal(domSlave) && domSlave.vagina !== 0) { + r.push(`${domName} finds ${himself2} with ${his2} face pushed firmly into ${his2} bedsheets and ${his2} ${domRace} slit accommodating ${subName}'s eager ${subRace} cock. Afterward, ${domName} lavishes kisses on ${his2} satisfactory top. ${domName} <span class="hotpink">enjoys a week of constant submission,</span> and even though ${he}'s technically being used, ${subName} <span class="hotpink">doesn't mind</span> being expected to fuck a willing pussy.`); + domSlave.counter.vaginal += penetrativeUse; + V.vaginalTotal += penetrativeUse; + if (canImpreg(domSlave, slave)) { + r.push(`${knockMeUp(domSlave, 30, 0, slave.ID)}`); + if (domSlave.pregKnown === 1) { + r.push(`With so many potent loads kissing ${his2} cervix, it comes as little surprise when <span class="lime">${he2} ends up pregnant with ${subName}'s child.</span>`); + } + } + } else if (canDoAnal(domSlave) && domSlave.anus !== 0) { + r.push(`${domName} finds ${himself2} with ${his2} face pushed firmly into ${his2} bedsheets and ${his2} ${domRace} ass accommodating ${subName}'s eager ${subRace} cock. Afterward, ${domName} lavishes kisses on ${his2} satisfactory top. ${domName} <span class="hotpink">enjoys a week of constant submission,</span> and even though ${he}'s technically being used, ${subName} <span class="hotpink">doesn't mind</span> being expected to fuck a willing asshole.`); + domSlave.counter.anal += penetrativeUse; + V.analTotal += penetrativeUse; + if (canImpreg(domSlave, slave)) { + r.push(`${knockMeUp(domSlave, 30, 1, slave.ID)}`); + if (domSlave.pregKnown === 1) { + r.push(`With so many potent deposits into ${his2} fertile rear, it comes as little surprise when <span class="lime">${he2} ends up pregnant with ${subName}'s child.</span>`); + } + } + } else { + r.push(`${domName} finds ${himself2} with ${his2} face pushed firmly into ${subName}'s crotch and ${his2} ${domRace} face accommodating an eager ${subRace} cock. Afterward, ${domName} lavishes kisses on ${his2} satisfactory top. ${domName} <span class="hotpink">enjoys a week of constant submission,</span> and even though ${he}'s technically being used, ${subName} <span class="hotpink">doesn't mind</span> being expected to fuck a willing asshole.`); + domSlave.counter.oral += penetrativeUse; + V.oralTotal += penetrativeUse; + } + } + } else if (slave.clit > 2) { + if (isAmputee(slave)) { + r.push(`${domName} finds ${himself2} pinned by the weight of ${subName}'s limbless body and ${his} quickly hardening ${subRace} clit being pushed eagerly into ${his2} ${domRace} mouth. Afterward, ${domName} lavishes kisses on ${his2} satisfactory top for ${his} efforts.`); + } else { + r.push(`${domName} finds ${himself2} with ${his2} back pushed firmly into ${his2} bedsheets and ${subName}'s quickly hardening clit being pushed eagerly into ${his2} mouth. Afterward, ${domName} lavishes kisses on ${his2} satisfactory top.`); + } + r.push(`${domName} <span class="hotpink">enjoys a week of constant submission,</span> and even though ${he}'s technically being used, ${subName} <span class="hotpink">doesn't mind</span> constant oral attention.`); + penetrativeUse = jsRandom(9, 12); + domSlave.counter.oral += penetrativeUse; + V.oralTotal += penetrativeUse; + } else { + if (isAmputee(slave)) { + if (canDoVaginal(domSlave)) { + r.push(`${domName} finds ${himself2} under the weight of ${subName}'s limbless body and ${his2} ${domRace} slit molested by an eager tongue. Afterward, ${domName} lavishes kisses on ${his2} satisfactory top for ${his} efforts. ${domName} <span class="hotpink">enjoys a week of constant submission,</span> and even though ${he}'s technically being used, ${subName} <span class="hotpink">doesn't mind</span> being expected to torment a willing pussy.`); + oralUse = jsRandom(9, 12); + domSlave.counter.vaginal += oralUse; + V.vaginalTotal += oralUse; + } else if (!(domSlave.chastityPenis) && domSlave.dick > 0) { + r.push(`${domName} finds ${himself2} under the weight of ${subName}'s limbless body with the tight embrace of ${subRace} lips around ${his2} ${domRace} cock. Afterward, ${domName} lavishes kisses on ${his2} satisfactory top for ${his} efforts. ${domName} <span class="hotpink">enjoys a week of constant submission,</span> and even though ${he}'s technically being used, ${subName} <span class="hotpink">doesn't mind</span> being expected to torment a willing dick.`); + oralUse = jsRandom(9, 12); + domSlave.counter.penetrative += oralUse; + V.penetrativeTotal += oralUse; + } else { + r.push(`${domName} finds ${himself2} under the weight of ${subName}'s limbless body and`); + if (domSlave.boobs >= 300) { + r.push(`${his2} ${domRace} tits`); + } else { + r.push(`${his2} ${nippleColor(domSlave)} nipples`); + } + r.push(`under attack by an eager mouth. Afterward, ${domName} lavishes kisses on ${his2} satisfactory top for ${his} efforts. ${domName} <span class="hotpink">enjoys a week of constant submission,</span> and even though ${he}'s technically being used, ${subName} <span class="hotpink">doesn't mind</span> being expected to play with a willing chest.`); + oralUse = jsRandom(9, 12); + domSlave.counter.mammary += oralUse; + V.mammaryTotal += oralUse; + } + } else { + if (canDoVaginal(domSlave) && domSlave.vagina !== 0) { + r.push(`${domName} finds ${himself2} with ${his2} face pushed firmly into ${his2} bedsheets and ${his2} ${domRace} slit accommodating ${subName}'s thrusting ${subRace} fingers. Afterward, ${domName} lavishes kisses on ${his2} satisfactory top. ${domName} <span class="hotpink">enjoys a week of constant submission,</span> and even though ${he}'s technically being used, ${subName} <span class="hotpink">doesn't mind the fun.</span>`); + fuckCount = jsRandom(9, 12); + domSlave.counter.vaginal += fuckCount; + V.vaginalTotal += fuckCount; + } else if (canDoAnal(domSlave) && domSlave.anus !== 0) { + r.push(`${domName} finds ${himself2} with ${his2} face pushed firmly into ${his2} bedsheets and ${his2} ${domRace} ass accommodating ${subName}'s thrusting ${subRace} fingers. Afterward, ${domName} lavishes kisses on ${his2} satisfactory top. ${domName} <span class="hotpink">enjoys a week of constant submission,</span> and even though ${he}'s technically being used, ${subName} <span class="hotpink">doesn't mind the fun.</span>`); + fuckCount = jsRandom(9, 12); + domSlave.counter.anal += fuckCount; + V.analTotal += fuckCount; + } else { + r.push(`${domName} finds ${himself2} pushed firmly into ${his2} bedsheets and ${his2}`); + if (domSlave.boobs >= 300) { + r.push(`${domRace} tits`); + } else { + r.push(`${nippleColor(domSlave)} nipples`); + } + r.push(`being roughly handled by ${subName}'s ${subRace} fingers. Afterward, ${domName} lavishes kisses on ${his2} satisfactory top. ${domName} <span class="hotpink">enjoys a week of constant submission,</span> and even though ${he}'s technically being used, ${subName} <span class="hotpink">doesn't mind the fun.</span>`); + fuckCount = jsRandom(9, 12); + domSlave.counter.mammary += fuckCount; + V.mammaryTotal += fuckCount; + } + } + } + slave.devotion += 1; + } else if (slave.devotion >= -20 && domSlave.fetishKnown === 1 && domSlave.fetishStrength > 60 && domSlave.fetish === "dom" && canWalk(domSlave)) { + r.push(`${domName} loves to dominate, and the first indication ${subName} gets of what ${he}'s in for this week is when ${domName} ambushes ${him} in the dormitory, tackles ${him} from behind, and`); + if (isAmputee(slave)) { + r.push(`bursts out`); + if (canTalk(domSlave)) { + r.push(`laughing`); + } else { + r.push(`in silent laughter`); + } + r.push(`at ${his} inability to right ${himself} without limbs.`); + } else { + r.push(`hogties ${him} with sheets.`); + } + r.push(`${subName} wriggles a little but doesn't really start to attempt escape until ${domName} begins to carefully tease ${his} ${subRace}`); + if (slave.dick > 0 && !(slave.chastityPenis)) { + r.push(`dickhead,`); + } else if (slave.clit > 0) { + r.push(`clit,`); + } else if (canDoVaginal(slave)) { + r.push(`pussy,`); + } else { + r.push(`nipples,`); + } + r.push(`edging ${him} right up to the point of orgasm and making ${him} beg. It's a long but <span class="hotpink">obedience-building</span> week for ${subName}, and ${domName} certainly <span class="hotpink">enjoys ${his2} toy.</span>`); + slave.devotion += 1; + if (slave.need && slave.fetishKnown) { + if (slave.fetish === "submissive" || slave.fetish === "masochist") { + r.push(`${subName} needs this kind of treatment to be truly sexually satisfied; this week, ${his} desire for abuse is sated.`); + slave.need = 0; + } + } + } else if (domSlave.fetishKnown === 1 && domSlave.fetishStrength > 60 && domSlave.fetish === "sadist" && canWalk(domSlave)) { + r.push(`${domName} loves to inflict pain, and the first indication ${subName} gets of what ${he}'s in for this week is when ${domName} ambushes ${him} in the dormitory, tackles ${him} from behind, and hogties ${him} with sheets.`); + if (canTalk(domSlave)) { + r.push(`${domName} bends close to the immobilized ${subName}'s ear and whispers to ${him} that ${he} might as well scream.`); + } else { + r.push(`${domName} carefully uses gestures to communicate to ${him} that ${he} might as well scream.`); + } + r.push(` ${subName}'s struggles to escape become desperate at this, and more desperate still when the week's first <span class="red">beating</span> starts. Later, ${he} tries going limp and unresistant, but that just makes the annoyed ${domName} beat ${his2} pain slave all the harder until ${he2} gets a reaction again. It's a long and <span class="hotpink">will breaking</span> week for ${subName}, and ${domName} certainly <span class="hotpink">enjoys torturing ${his2} toy.</span>`); + slave.devotion += 1; + healthDamage(slave, 3); + if (slave.need && slave.fetishKnown) { + if (slave.fetish === "submissive" || slave.fetish === "masochist") { + r.push(`${subName} needs this kind of treatment to be truly sexually satisfied; this week, ${his} desire for abuse is sated.`); + slave.need = 0; + } + } + } else if (domSlave.fetishKnown === 1 && domSlave.fetishStrength > 60 && domSlave.fetish === "boobs") { + if (domSlave.nipples === "fuckable" && canPenetrate(slave)) { + r.push(`Since ${domName} loves to have ${his2} nipples fucked, ${subName} spends the week getting to use ${his} dick for a change. ${subName}'s ${subRace} body thrusting into ${domName}'s supple ${domRace} breasts is a frequent sight as ${domName} takes ${his2} pleasure. <span class="hotpink">${domName} enjoys being able to use ${subName}.</span>`); + penetrativeUse = jsRandom(9, 12); + domSlave.counter.mammary += penetrativeUse; + V.mammaryTotal += penetrativeUse; + domSlave.counter.penetrative += penetrativeUse; + V.penetrativeTotal += penetrativeUse; + } else if (domSlave.lactation > 0) { + if (slave.devotion < -20) { + r.push(`Since ${domName} loves giving milk, ${subName} finds ${himself} forced to nurse. ${He} spends the week trying to avoid guzzling down milk from ${domName}'s ${nippleColor(domSlave)} ${domRace} nipples with ${his} ${subRace} mouth, but ${domName} insists. <span class="hotpink">${domName} enjoys being able to force ${subName} to drink from ${him2}.</span>`); + } else if (slave.devotion <= 50) { + r.push(`Since ${domName} loves giving milk, ${subName} finds ${himself} constantly nursing. ${He} spends the week obediently taking milk from ${domName}'s ${nippleColor(domSlave)} ${domRace} nipples with ${his} ${subRace} mouth, to ${domName}'s motherly satisfaction. <span class="hotpink">${domName} enjoys having ${subName} to drink from ${him2} whenever ${he2} feels overfull.</span>`); + } else { + r.push(`Since ${domName} loves giving milk, ${subName} constantly nurses from ${him2}. ${He} spends the week happily taking milk from ${domName}'s ${nippleColor(domSlave)} ${domRace} nipples with ${his} hungry ${subRace} mouth, to ${domName}'s motherly delight. <span class="hotpink">${domName} loves having ${subName} to feed and fill.</span>`); + } + } else { + if (slave.devotion < -20) { + r.push(`Since ${domName} loves having ${his2} breasts attended to, ${subName} finds ${himself} forced to `); + if (!hasAnyArms(slave)) { + r.push(`nuzzle and suck.`); + } else { + r.push(`knead, massage, and even suck.`); + } + r.push(`${He} spends the week trying to avoid servicing ${domName}'s ${domRace} breasts with ${his} ${subRace}`); + if (!hasAnyArms(slave)) { + r.push(`face,`); + } else { + r.push(`${hands},`); + } + r.push(`but ${domName} insists. <span class="hotpink">${domName} enjoys being able to force ${subName} to see to ${his2} tits.</span>`); + } else if (slave.devotion <= 50) { + r.push(`Since ${domName} loves having ${his2} breasts attended to, ${subName} finds ${himself}`); + if (!hasAnyArms(slave)) { + r.push(`nuzzling and sucking.`); + } else { + r.push(`kneading, massaging, and even sucking.`); + } + r.push(`${He} spends the week obediently servicing ${domName}'s ${domRace} breasts with ${his} ${subRace}`); + if (!hasAnyArms(slave)) { + r.push(`face,`); + } else { + r.push(`${hands},`); + } + r.push(`to ${domName}'s languorous pleasure. <span class="hotpink">${domName} enjoys having ${subName} to see to ${his2} tits.</span>`); + } else { + r.push(`Since ${domName} loves having ${his2} breasts attended to, ${subName} pampers ${his2} breasts shamelessly. ${He} spends the week devotedly massaging ${domName}'s ${domRace} breasts with ${his} ${subRace}`); + if (!hasAnyArms(slave)) { + r.push(`face,`); + } else { + r.push(`${hands},`); + } + r.push(`sucking lovingly at ${his2} nipples, and caring for everything with lotions and`); + if (!hasAnyArms(slave)) { + r.push(`oils (as best ${he} can without hands).`); + } else { + r.push(`oils.`); + } + r.push(`They sleep together so that ${subName} can`); + if (!hasAnyArms(slave)) { + r.push(`snuggle into ${his2} bust`); + } else { + r.push(`hold ${his2} boobs`); + } + r.push(`as ${he} goes to sleep, which sometimes results in less sleep for both as the breast play continues long into the night. <span class="hotpink">${domName} enjoys having ${subName} to see to ${his2} tits.</span>`); + } + } + if (domSlave.lactation > 0) { + domSlave.lactationDuration = 2; + domSlave.boobs -= domSlave.boobsMilk; + domSlave.boobsMilk = 0; + } + oralUse = jsRandom(9, 12); + domSlave.counter.mammary += oralUse; + V.mammaryTotal += oralUse; + } else if (slave.balls !== 0 && ((slave.chastityPenis === 0 && slave.dick > 0) || (slave.chastityVagina === 0)) && domSlave.fetishKnown === 1 && domSlave.fetishStrength > 60 && domSlave.fetish === "cumslut") { + if (canAchieveErection(slave)) { + r.push(`Since ${domName} loves cum, and ${subName} has a dick, ${domName} has ${his2} own private semen dispenser. ${domName} sometimes gets tired of having to work hard for cum, so ${he2} spends the week`); + if (hasAnyArms(domSlave)) { + r.push(`stimulating poor ${subName}'s`); + } else { + r.push(`ordering ${subName} to stimulate ${his} own`); + } + if (slave.prostate) { + r.push(`prostate`); + } else { + r.push(`balls`); + } + r.push(`to force ${him} to climax so ${domName} can wrap ${his2} ${domRace} lips around ${subName}'s ${subRace} dickhead to suck down ${his2} cum. <span class="hotpink">${domName} enjoys having a servile dick on demand.</span>`); + } else if (slave.dick > 0 && !canAchieveErection(slave)) { + r.push(`Since ${domName} loves cum, and ${subName} has a dick, ${domName} has ${his2} own private semen dispenser, even if it's rather limp. ${domName} sometimes gets tired of having to work hard for cum, so ${he2} spends the week making ${subName} painstakingly bring ${his} flaccid dick almost to orgasm before ${domName} wraps ${his2} ${domRace} lips around ${subName}'s ${subRace} soft dickhead to suck down the cum. <span class="hotpink">${domName} enjoys having a servile dick on demand.</span>`); + } else { + r.push(`Since ${domName} loves cum, and ${subName} has balls, ${domName} has ${his2} own private semen dispenser. ${domName} sometimes gets tired of having to work hard for cum, so ${he2} spends the week`); + if (hasAnyArms(domSlave)) { + r.push(`stimulating poor ${subName}'s`); + } else { + r.push(`ordering ${subName} to stimulate ${his} own`); + } + if (slave.prostate) { + r.push(`prostate`); + } else { + r.push(`balls`); + } + r.push(`to force ${him} to climax so ${domName} can plant ${his2} ${domRace} lips overs ${subName}'s ${subRace}`); + if (slave.vagina >= 0) { + r.push(`urethra`); + } else { + r.push(`smooth crotch`); + } + r.push(`to catch ${his} cum. <span class="hotpink">${domName} enjoys having ${his2} little sperm fountain.</span>`); + } + penetrativeUse = jsRandom(9, 12); + domSlave.counter.oral += penetrativeUse; + V.oralTotal += penetrativeUse; + } else if (domSlave.fetishKnown === 1 && domSlave.fetishStrength > 60 && domSlave.fetish === "humiliation" && hasAnyLegs(slave)) { + r.push(`${domName} loves being degraded, and the first indication ${subName} gets of what ${he}'s in for this week is when ${domName}`); + if (canWalk(domSlave)) { + r.push(`escorts ${him} to the cafeteria for lunch`); + } else { + r.push(`begs to be taken to the cafeteria for lunch`); + } + r.push(`and settles ${himself2}`); + if (hasBothLegs(slave)) { + r.push(`between ${subName}'s legs,`); + } else { + r.push(`in ${subName}'s crotch,`); + } + r.push(`before asking for ${his2} portion to be plated appropriately. ${subName} struggles to eat`); + if (slave.dick > 0) { + if (slave.chastityDick) { + r.push(`with an eager tongue probing the gaps around ${his} chastity cage trying to gather every last drop of slave food.`); + } else { + r.push(`while ${his}`); + if (slave.dick === 1) { + r.push(`tiny`); + } else if (slave.dick === 2) { + r.push(`cute`); + } else if (slave.dick === 3) { + r.push(`average`); + } else if (slave.dick === 4) { + r.push(`big`); + } else if (slave.dick === 5) { + r.push(`impressive`); + } else if (slave.dick === 6) { + r.push(`huge`); + } else if (slave.dick === 7) { + r.push(`gigantic`); + } else if (slave.dick === 8) { + r.push(`titanic`); + } else if (slave.dick === 9) { + r.push(`absurd`); + } else if (slave.dick === 10) { + r.push(`inhuman`); + } else { + r.push(`immense`); + } + if (canAchieveErection(slave)) { + r.push(`erection`); + } else { + r.push(`dick`); + } + r.push(`is licked clean of any slave food clinging to it.`); + if (domSlave.skills.oral - ((slave.dick * 15) - 20) >= 0) { + r.push(`${subName} practically throws ${his} cup when ${domName} sucks the entire length of ${his} dick into ${his2} mouth and down ${his2} throat, and`); + } else { + r.push(`${subName} shudders as ${domName} wraps ${his2} lips around ${his} cockhead and`); + } + r.push(`struggles to maintain any sense of composure as ${domName} works for ${his2} dessert.`); + if (slave.ballType !== "sterile" && slave.balls > 0) { + r.push(`The stimulation inevitably sends ${him} over the edge,`); + if (slave.vasectomy) { + r.push(`forcing ${him} to buck and ram ${his} cock a little too far into ${domName}.`); + } else if (slave.balls >= 30 || slave.prostate > 2) { + r.push(`unleashing a massive spurt down ${domName}'s throat. ${domName} gags and pulls back, recieving the rest of ${subName}'s load across ${his2} face and body. ${domName} couldn't even come close to hiding what happened — just the way ${he2} likes it.`); + } else if (slave.balls >= 10) { + r.push(`filling ${domName}'s throat with such volume it sprays out ${his2} nose. ${domName} stands no chance of cleaning ${himself2} up without being seen — quite enjoyable, really.`); + } else { + r.push(`giving ${domName} a cum chaser to ${his2} meal.`); + } + } else { + r.push(`But alas, ${subName}'s dispenser has nothing to give ${domName}, so ${his2} efforts are in vain — and in a way, ${he2} prefers it that way.`); + } + } + } else if (slave.scrotum > 0) { + r.push(`while ${his}`); + if (slave.balls === 0) { + r.push(`empty ballsack is`); + } else if (slave.balls === 1) { + r.push(`tiny balls are`); + } else if (slave.balls === 2) { + r.push(`small balls are`); + } else if (slave.balls === 3) { + r.push(`balls are`); + } else if (slave.balls === 4) { + r.push(`big balls are`); + } else if (slave.balls === 5) { + r.push(`lemon-sized balls are`); + } else if (slave.balls < 9) { + r.push(`fist-sized balls are`); + } else if (slave.balls < 14) { + r.push(`softball-sized balls are`); + } else if (slave.balls < 30) { + r.push(`melon-sized balls are`); + } else { + r.push(`$his hypertrophied balls are`); + } + r.push(`licked and sucked clean of slave food.`); + if (slave.ballType !== "sterile") { + r.push(`The stimulation inevitably sends ${him} over the edge,`); + if (slave.vasectomy) { + r.push(`forcing ${him} to buck and smacking ${domName} into the underside of the table, spilling ${his} cup.`); + } else if (slave.balls >= 30 || slave.prostate > 2) { + r.push(`unleashing a veritable flood of semen across ${his} nuts. ${domName} sighs a little as ${his2} meal washes away, but sets to work on cleaning up the new mess all the same.`); + } else if (slave.balls >= 10) { + r.push(`completely refilling ${domName}'s makeshift bowl with a heavy second course — not that ${he2}'d complain.`); + } else { + r.push(`adding a mix of semen into ${domName}'s meal — which ${he2} wastes no time in lapping up.`); + } + } + } else if (canDoVaginal(slave)) { + r.push(`while ${his} pussy is being invaded by drops of slave food and the tongue pursuing them.`); + if (slave.clit > 2) { + r.push(`${subName} practically throws ${his} cup when ${domName} sucks the entire length of ${his} clit into ${his2} mouth.`); + } + } else { + r.push(`with an eager tongue roaming ${his} thighs, pubic mound, and taint trying to lap up the slave food before it slips away.`); + } + r.push(`The lewdness eminating from beneath the table is not lost on the other diners, <span class="hotpink">much to ${domName}'s enjoyment.</span>`); + } else if (domSlave.fetishKnown === 1 && domSlave.fetishStrength > 60 && domSlave.fetish === "masochist" && hasAnyLimbs(slave)) { + r.push(`${domName} loves pain, and the first indication ${subName} gets of what ${he}'s in for this week is when ${domName}`); + if (canHold(domSlave)) { + r.push(`hands ${him}`); + } else if (canTalk(domSlave)) { + r.push(`orders ${him} to pick up`); + } else { + r.push(`gestures at`); + } + r.push(`${his2} favorite crop and implores ${subName} to punish ${him2}; ${domName} has been bad and ${subName} needs to teach ${him2} a lesson. ${subName} spends a long and <span class="trust inc">empowering</span> week learning new ways to <span class="red">inflict pain</span> on someone, not that the <span class="hotpink">thoroughly bruised ${domName} will complain.</span>`); + slave.trust += 1; + healthDamage(domSlave, 3); + if (slave.need && slave.fetishKnown) { + if (slave.fetish === "submissive" || slave.fetish === "masochist") { + r.push(`${subName} needs this kind of treatment to be truly sexually satisfied; this week, ${his} desire for abuse is sated.`); + slave.need = 0; + } + } + } else if (domSlave.fetishKnown === 1 && domSlave.fetishStrength > 60 && domSlave.fetish === "pregnancy") { + if (canImpreg(slave, domSlave)) { + // wip + } else if (domslave.pregKnown === 1 || slave.belly > 10000 || slave.bellyPreg >= 1500) { + // wip + } else if (canImpreg(domSlave, slave)) { + // wip + } else { + // wip + } + } else if (domSlave.energy > 95) { + if (slave.devotion < -20) { + r.push(`Since ${domName} loves to fuck, ${subName} spends the week getting fucked. ${domName}'s ${domRace} body atop ${subName}'s resisting ${subRace} form is a frequent sight as ${domName} takes ${his2} pleasure. <span class="hotpink">${domName} enjoys being able to use ${subName}.</span>`); + } else if (slave.devotion <= 50) { + r.push(`Since ${domName} loves to fuck, ${subName} spends the week getting fucked. ${domName}'s ${domRace} body atop ${subName}'s compliant ${subRace} form is a frequent sight as ${domName} takes ${his2} pleasure. <span class="hotpink">${domName} enjoys being able to use ${subName}.</span>`); + } else { + r.push(`Since ${domName} loves to fuck, ${subName} spends the week getting fucked. ${domName}'s ${domRace} body atop ${subName}'s enthusiastic ${subRace} form is a frequent sight as the two of them share pleasure. <span class="hotpink">${domName} enjoys having an extra outlet for ${his2} sexual needs.</span>`); + } + if (canPenetrate(domSlave)) { + fuckCount = jsRandom(15, 25); + r.push(`${SimpleSexAct.Slaves(slave, domSlave, fuckCount)}`); + } else if (canPenetrate(slave) && ((canDoVaginal(domSlave) && domSlave.vagina > 0) || (canDoAnal(domSlave) && domSlave.anus > 0))) { + /* yes, that means she rides her */ + fuckCount = jsRandom(15, 25); + r.push(`${SimpleSexAct.Slaves(domSlave, slave, fuckCount)}`); + } else { + oralUse = jsRandom(15, 25); + } + } else if (domSlave.dick > 0 && canPenetrate(domSlave)) { + if (slave.devotion < -20) { + r.push(`${domName} doesn't get to use ${his2} still-functional cock as much as ${he2} would like; it often stands stiff and untended while ${he2}'s being used. Not this week: ${subName} spends the week with ${domName}'s ${domRace} dick thrusting in and out of ${his} ${subRace} body, whenever ${he2} feels like forcing it into ${subName}'s unwilling holes. <span class="hotpink">${domName} loves having someone to fuck whenever ${he2} wants.</span>`); + } else if (slave.devotion <= 50) { + r.push(`${domName} doesn't get to use ${his2} still-functional cock as much as ${he2} would like; it often stands stiff and untended while ${he2}'s being used. Not this week: ${subName} spends the week with ${domName}'s ${domRace} dick thrusting in and out of ${his} ${subRace} body, whenever ${he2} feels like putting it into ${subName}'s compliant holes. <span class="hotpink">${domName} loves having someone to stick ${his2} dick in at last.</span>`); + } else { + r.push(`${domName} doesn't get to use ${his2} still-functional cock as much as ${he2} would like; it often stands stiff and untended while ${he2}'s being used. Not this week: ${subName} spends the week with ${domName}'s ${domRace} dick thrusting in and out of ${his} ${subRace} body, whenever ${he2} feels like having an enthusiastic fuck. <span class="hotpink">${domName} loves having someone to tend to ${his2} prick at last.</span>`); + } + fuckCount = jsRandom(9, 12); + r.push(`${SimpleSexAct.Slaves(slave, domSlave, fuckCount)}`); + } else if (hasAnyArms(domSlave) && domSlave.attrXX > 85 && slave.dick === 0 && slave.vagina > -1) { // feminine check + if (slave.devotion < -20) { + r.push(`Since ${domName} loves girls, ${subName} finds ${himself} groped, fingered, and toyed with. ${He} spends the week trying to avoid ${domName}'s playful ${domRace}`); + if (hasBothArms(domSlave)) { + r.push(`hands,`); + } else { + r.push(`fingers,`); + } + r.push(`but they rove across ${his} ${subRace} body anyway. <span class="hotpink">${domName} enjoys having a nice little toy right at hand,</span> even if ${he} does have to be forced.`); + } else if (slave.devotion <= 50) { + r.push(`Since ${domName} loves girls, ${subName} finds ${himself} groped, fingered, and toyed with. ${He} spends the week accepting the attention of ${domName}'s playful ${domRace}`); + if (hasBothArms(domSlave)) { + r.push(`hands.`); + } else { + r.push(`fingers.`); + } + r.push(`They rove across ${his} ${subRace} body, eliciting embarrassed arousal. <span class="hotpink">${domName} enjoys having a nice little toy right at hand,</span> even if ${he} is a little hesitant.`); + } else { + r.push(`Since ${domName} loves girls, ${subName} finds ${himself} with a frank and open lover for the week. ${He} spends the week accepting the attention of ${domName}'s adoring ${domRace}`); + if (hasBothArms(domSlave)) { + r.push(`hands.`); + } else { + r.push(`fingers.`); + } + r.push(`They rove across ${his} ${subRace} body, knowing just where to touch and where to press. <span class="hotpink">${domName} enjoys having a compliant ${girl} friend,</span > and they spend as much time together as they can.`); + } + if (canPenetrate(domSlave)) { + fuckCount = jsRandom(9, 12); + r.push(`${SimpleSexAct.Slaves(slave, domSlave, fuckCount)}`); + } else { + oralUse = jsRandom(9, 12); + } + } else if (slave.dick > 0 && hasAnyArms(domSlave) && domSlave.attrXY > 85) { + if (canPenetrate(slave)) { + if (slave.devotion < -20) { + r.push(`Since ${domName} loves hard cocks, ${subName} finds ${him} self forced to get hard and fuck. ${He} spends the week trying to avoid ${domName}'s constant demands. <span class="hotpink">${domName} enjoys having a nice dick right at hand,</span> even if it does have to be forced to stand up for ${him2}.`); + } else if (slave.devotion <= 50) { + r.push(`Since ${domName} loves hard cocks, ${subName} finds ${himself} required to get hard and fuck constantly. ${He} spends the week doing ${his} best to satisfy ${domName}'s constant demands. <span class="hotpink">${domName} enjoys having a nice dick right at hand,</span> and won't leave it alone.`); + } else { + r.push(`Since ${domName} loves hard cocks, ${subName} finds ${himself} asked to get hard and fuck constantly. ${He} spends the week doing ${his} best to satisfy ${domName}'s constant demands. <span class="hotpink">${domName} enjoys having a nice dick right at hand,</span> and won't leave it alone.`); + } + } else if (slave.dick > 6 && slave.balls > 0) { + if (slave.devotion < -20) { + r.push(`Since ${domName} loves cocks, even big soft ones, ${subName} finds ${himself} being sucked, groped, and cruelly taunted for ${his} inability to get hard. ${He} spends the week trying to avoid ${domName}'s abuse of ${his} poor oversized penis. <span class="hotpink">${domName} enjoys having a nice dick right at hand,</span> even if it's only good for taunting and torture.`); + } else if (slave.devotion <= 50) { + r.push(`Since ${domName} loves cocks, even big soft ones, ${subName} finds ${himself} being sucked, groped, and toyed with. ${He} spends the week complying with ${domName}'s amusements. <span class="hotpink">${domName} enjoys having a nice dick right at hand,</span> even if it's only good as a body pillow.`); + } else { + r.push(`Since ${domName} loves cocks, even big soft ones, ${subName} finds ${himself} being sucked, groped, and played with until ${he} comes. ${He} spends the week enjoying with ${domName}'s little games. <span class="hotpink">${domName} enjoys having a nice dick right at hand,</span> even if it's only good as a body pillow that occasionally discharges blobs of semen.`); + } + } else { + if (slave.devotion < -20) { + r.push(`Since ${domName} loves cocks, even soft ones, ${subName} finds ${himself} being sucked, groped, and cruelly taunted for ${his} impotence. ${He} spends the week trying to avoid ${domName}'s abuse of ${his} poor useless penis. <span class="hotpink">${domName} enjoys having a nice dick right at hand,</span> even if it's only good for taunting and torture.`); + } else if ((slave.devotion <= 50)) { + r.push(`Since ${domName} loves cocks, even soft ones, ${subName} finds ${himself} being sucked, groped, and toyed with. ${He} spends the week complying with ${domName}'s amusements. <span class="hotpink">${domName} enjoys having a nice dick right at hand,</span> even if it's only good as a soft toy.`); + } else { + r.push(`Since ${domName} loves cocks, even soft ones, ${subName} finds ${himself} being sucked, groped, and played with until ${he} comes. ${He} spends the week enjoying with ${domName}'s little games. <span class="hotpink">${domName} enjoys having a nice dick right at hand,</span> even if it's only good as a soft, dripping toy.`); + } + } + fuckCount = jsRandom(9, 12); + r.push(`${SimpleSexAct.Slaves(domSlave, slave, fuckCount)}`); + } else if (isAmputee(slave)) { + r.push(`${domName} doesn't have any special desires, so ${he2} simply uses the helpless ${subName} for comfort and convenience. ${subName} finds ${his} helpless ${subRace} torso being used as a bath toy, a bedwarmer, and for sexual convenience. <span class="hotpink">${domName} enjoys the ease and companionship.</span>`); + fuckCount = jsRandom(9, 12); + r.push(`${SimpleSexAct.Slaves(slave, domSlave, fuckCount)}`); + } else { + r.push(`${domName} doesn't have any special desires ${subName} can satisfy, so ${he2} simply uses ${subName} for comfort and convenience. ${subName} washes ${his} superior's ${domRace} body thoroughly and uses ${his} own ${subRace} body to warm ${domName}'s bed at night. <span class="hotpink">${domName} enjoys the ease and companionship.</span>`); + fuckCount = jsRandom(9, 12); + r.push(`${SimpleSexAct.Slaves(slave, domSlave, fuckCount)}`); + } + domSlave.devotion += 4; + } + + /** + * @param {App.Entity.SlaveState} slave + * */ + function sexualSatiation(slave) { + /* This is here because SimpleSexAct.Slaves doesn't update analUse, etc. and that is needed to calculate cervixPump and .need clearing */ + oralUse = slave.counter.oral - oralUse; + analUse = slave.counter.anal - analUse; + vaginalUse = slave.counter.vaginal - vaginalUse; + mammaryUse = slave.counter.mammary - mammaryUse; + penetrativeUse = slave.counter.penetrative - penetrativeUse; + + if (jobType === "stud") { + slave.need -= 50; + } else if (jobType === "cumdump") { + slave.need -= ((penetrativeUse + vaginalUse + analUse) * 3); + // cumdumps don't get to be doms or sadists + switch (slave.fetish) { + case "masochist": + case "submissive": + if (analUse + vaginalUse > 5) { + if (slave.fetishKnown) { + r.push(`Being frequently pinned and fucked really satisfies ${him}.`); + } else { + r.push(`${He} seems to enjoy getting pushed down and fucked; ${he}'s got a <span class="lightcoral"> ${slave.fetish === "masochist" ? "masochistic" : "submissive"} streak</span> in ${him}.`); + slave.fetishKnown = 1; + } + slave.need = 0; + } + break; + case "cumslut": + if (oralUse > 5) { + if (slave.fetishKnown) { + r.push(`Frequently getting to suck cum out of slaves really satisfies ${him}.`); + } else { + r.push(`${He} seems to enjoy putting ${his} mouth to use; ${he}'s got a <span class="lightcoral">taste for cum.</span>`); + slave.fetishKnown = 1; + } + slave.need = 0; + } + break; + case "buttslut": + if (analUse > 5) { + if (slave.fetishKnown) { + r.push(`Frequently having ${his} butthole fucked really satisfies ${subName}.`); + } else { + r.push(`${He} seems to rather enjoy getting assfucked; <span class="lightcoral">anal gets ${him} worked up.</span>`); + slave.fetishKnown = 1; + } + slave.need = 0; + } + break; + case "pregnancy": + if (canGetPregnant(slave)) { + if (slave.mpreg === 0 && vaginalUse > 7) { + if (slave.fetishKnown) { + r.push(`Having ${his} fertile pussy see so much use really satisfies ${subName}.`); + } else { + r.push(`Frequent unprotected sex in ${his} fertile hole exposes ${him} for the <span class="lightcoral">pregnancy fetishest ${he} is.</span>`); + slave.fetishKnown = 1; + } + slave.need = 0; + } else if (slave.mpreg === 1 && analUse > 7) { + if (slave.fetishKnown) { + r.push(`Having ${his} fertile ass see so much use really satisfies ${subName}.`); + } else { + r.push(`Frequent unprotected sex in ${his} fertile hole exposes ${him} for the <span class="lightcoral">pregnancy fetishest ${he} is.</span>`); + slave.fetishKnown = 1; + } + slave.need = 0; + } + } + break; + case "humiliation": + if (slave.fetishKnown) { + r.push(`Having all the other slaves see ${him} in such a humiliating role really satisfies ${subName}.`); + } else { + r.push(`${He} seems to enjoy ${his} humiliating role; ${he} <span class="lightcoral"> gets off to being degraded.</span>`); + slave.fetishKnown = 1; + } + slave.need = 0; + break; + case "boobs": + if (mammaryUse > 5) { + if (slave.fetishKnown) { + r.push(`Having so much attention lavished on ${his} tits really satisfies ${subName}.`); + } else { + r.push(`${He} seems to enjoy all the attention ${his} breasts are getting; ${he}'s a <span class="lightcoral">breast fetishest.</span>`); + slave.fetishKnown = 1; + } + slave.need = 0; + slave.induceLactation += 2; + r.push(`${induceLactation(slave)}`); + } + break; + } + } else if (jobType === "sub") { + domSlave.need = 0; + slave.need -= ((penetrativeUse + vaginalUse + analUse) * 5); + switch (slave.fetish) { + case "masochist": + case "submissive": + if (analUse + vaginalUse > 0) { + if (slave.fetishKnown) { + r.push(`Being someone's submissive toy really satisfies ${subName}.`); + } else { + r.push(`${He} seems to enjoy being a toy; ${he}'s got a <span class="lightcoral"> ${slave.fetish === "masochist" ? "masochistic" : "submissive"} streak</span> in ${him}.`); + slave.fetishKnown = 1; + } + slave.need = 0; + } + break; + case "dom": + case "sadist": + if (penetrativeUse > 0) { + if (slave.fetishKnown) { + r.push(`Getting to be on top is precious, and it really satisfies ${subName}.`); + } else { + r.push(`${He} relishes getting to be on top; ${he}'s got a <span class="lightcoral"> ${slave.fetish === "dom" ? "dominant" : "sadistic"} side</span> to ${him}.`); + slave.fetishKnown = 1; + } + slave.need = 0; + } + break; + case "cumslut": + if (oralUse > 0) { + if (slave.fetishKnown) { + r.push(`Being someone's oral toy really satisfies ${subName}.`); + } else { + r.push(`${He} seems to thoroughly enjoy being an oral toy; ${he}'s <span class="lightcoral">an honest cumslut.</span>`); + slave.fetishKnown = 1; + } + slave.need = 0; + } + break; + case "buttslut": + if (analUse > 0) { + if (slave.fetishKnown) { + r.push(`Having ${his} butthole serve as someone's toy really satisfies ${subName}.`); + } else { + r.push(`${He} seems to thoroughly enjoy ${his} ass being reduced to someone's toy; ${he}'s <span class="lightcoral">an honest buttslut.</span>`); + slave.fetishKnown = 1; + } + slave.need = 0; + } + break; + case "pregnancy": + if (canGetPregnant(slave)) { + if (slave.mpreg === 0 && vaginalUse > 0) { + if (slave.fetishKnown) { + r.push(`Having ${his} pussy serve as someone's toy really satisfies ${subName}.`); + } else { + r.push(`Having ${his} fertile pussy unused exposes ${him} for the <span class="lightcoral">pregnancy fetishest ${he} is.</span>`); + slave.fetishKnown = 1; + } + slave.need = 0; + } else if (slave.mpreg === 1 && analUse > 0) { + if (slave.fetishKnown) { + r.push(`Having ${his} ass serve as someone's toy really satisfies ${subName}.`); + } else { + r.push(`Having ${his} fertile asspussy unused exposes ${him} for the <span class="lightcoral">pregnancy fetishest ${he} is.</span>`); + slave.fetishKnown = 1; + } + slave.need = 0; + } + } + break; + case "humiliation": + if (slave.fetishKnown) { + r.push(`Having all the other slaves see ${him} in such a humiliating role really satisfies ${subName}.`); + } else { + r.push(`${He} seems to enjoy ${his} humiliating role; ${he} <span class="lightcoral"> gets off to being degraded.</span>`); + slave.fetishKnown = 1; + } + slave.need = 0; + break; + case "boobs": + if (mammaryUse > 0) { + if (slave.fetishKnown) { + r.push(`Having ${his} tits serve as someone's toy really satisfies ${subName}.`); + } else { + r.push(`${He} seems to thoroughly enjoy ${his} breasts being reduced to someone's toys; ${he}'s <span class="lightcoral">an honest boobslut.</span>`); + slave.fetishKnown = 1; + } + slave.need = 0; + slave.induceLactation += 2; + r.push(`${induceLactation(slave)}`); + } + break; + } + } + } + + /** + * @param {App.Entity.SlaveState} slave + * */ + function physicalEffects(slave) { + if (jobType === "sub") { + if (domSlave.health.condition < 40) { + r.push(`<span class="green">${domName}'s health improves</span> with ${subName} to serve ${him2} and help with some of ${his2} harder duties.`); + // Add tiredness recovery here + improveCondition(domSlave, 10); + } + } + + if (slave.cervixImplant === 1 || slave.cervixImplant === 3) { + cervixPump += 20 * vaginalUse; + } + if (slave.cervixImplant === 2 || slave.cervixImplant === 3) { + cervixPump += 20 * analUse; + } + if (cervixPump > 0) { + r.push(`${He} notices ${his} <span class="lime">belly is a little heavier</span> after all the`); + if (slave.cervixImplant === 1) { + r.push(`vaginal`); + } else if (slave.cervixImplant === 2) { + r.push(`anal`); + } + r.push(`sex ${he} had throughout the week.`); + slave.bellyImplant += cervixPump; + } + + if (slave.lactation > 0 && mammaryUse > 0) { + slave.lactationDuration = 2; + if (slave.boobsMilk > 0) { + slave.boobs -= slave.boobsMilk; + slave.boobsMilk = 0; + } + } + } + + /** + * @param {App.Entity.SlaveState} slave + * */ + function mentalEffects(slave) { + if (jobType === "sub") { + if (slave.devotion <= 20) { + if (slave.trust >= -20) { + r.push(`${subName} <span class="gold">is further habituated to subservience</span> by ${domName}.`); + slave.trust -= 5; + if (slave.sexualQuirk === "strugglefuck queen") { + r.push(`Secretly, though, ${subName} gets off on being raped, <span class="hotpink">and wants more.</span>`); + slave.devotion += 1; + } + } + } + + if (slave.behavioralFlaw === "hates men") { + if (domSlave.dick > 0 && slave.devotion > 20) { + r.push(`Spending so much time in close proximity to a slave with a dick <span class="green">reconciles ${him} to getting fucked by them.</span>`); + slave.behavioralFlaw = "none"; + } + } else if (slave.behavioralFlaw === "hates women") { + if (domSlave.vagina !== -1 && slave.devotion > 20) { + r.push(`Spending so much time in close proximity to a slave with a pussy <span class="green">reconciles ${him} to sex with girls.</span>`); + slave.behavioralFlaw = "none"; + } + } + + if (slave.relationship === 0) { + if (slave.rivalryTarget !== domSlave.ID && slave.devotion >= 10 && domSlave.relationship === 0) { + if (jsRandom(1, 100) > 50) { + r.push(`${subName} and ${domName} enjoy spending time together and <span class="lightgreen">strike up a friendship.</span>`); + domSlave.relationship = 1; + domSlave.relationshipTarget = slave.ID; + slave.relationship = 1; + slave.relationshipTarget = domSlave.ID; + } else { + r.push(`${subName} and ${domName} find they enjoy their sexual relationship and <span class="lightgreen">become friends with benefits.</span>`); + domSlave.relationship = 3; + domSlave.relationshipTarget = slave.ID; + slave.relationship = 3; + slave.relationshipTarget = domSlave.ID; + } + } + } else if (slave.relationship > 0) { + if (slave.relationshipTarget === domSlave.ID && slave.devotion >= -20) { + r.push(`${subName} likes getting fucked by ${domName} and <span class="hotpink">appreciates</span> having it as ${his} job.`); + slave.devotion += 1; + } + if (slave.relationship < 3) { + if (slave.relationshipTarget === domSlave.ID) { + if (slave.devotion >= 10) { + r.push(`${subName} and ${domName} find that they enjoy having sex just as much as they like being friends, and become <span class="lightgreen">friends with benefits.</span>`); + domSlave.relationship = 3; + slave.relationship = 3; + } else if (slave.devotion <= 20) { + r.push(`${subName} and ${domName}'s relationship is <span class="lightsalmon">damaged</span> by ${domName} having the right to use ${subName}.`); + domSlave.relationship--; + slave.relationship--; + } + } + } else if (slave.relationship < 4) { + if (slave.relationshipTarget === domSlave.ID && slave.devotion >= 10) { + r.push(`${subName} and ${domName} don't have to be encouraged to have sex, but with extra time for it, they become <span class="lightgreen">lovers.</span>`); + domSlave.relationship++; + slave.relationship++; + } + } + } + + if (slave.rivalry === 0) { + if (slave.relationshipTarget !== domSlave.ID && slave.devotion <= 50 && domSlave.rivalry === 0 && jsRandom(1, 100) > 50) { + r.push(`${subName} resents ${domName} for using ${him} and the two <span class="lightsalmon">start to dislike each other.</span>`); + domSlave.rivalry = 1; + domSlave.rivalryTarget = slave.ID; + slave.rivalry = 1; + slave.rivalryTarget = domSlave.ID; + } + } else { + if (slave.rivalryTarget === domSlave.ID && slave.devotion <= 50) { + r.push(`${subName} resents subordinating ${him}self to ${domName} and <span class="mediumorchid">dislikes</span> having it as ${his} job.`); + slave.devotion -= 2; + } + if (slave.rivalry < 3 && slave.rivalryTarget === domSlave.ID) { + if (slave.devotion <= 50) { + r.push(`${subName} hates being used by ${his} rival ${domName} so much that their <span class="lightsalmon">feud worsens.</span>`); + domSlave.rivalry++; + slave.rivalry++; + } else if (slave.devotion > 50) { + r.push(`${subName} serves ${domName} so devotedly that they <span class="lightgreen">work out</span> some of their differences through sex.`); + domSlave.rivalry--; + slave.rivalry--; + } + } + } + } + } + + /** + * @param {App.Entity.SlaveState} slave + * */ + function slaveSkills(slave) { + // WIP + } +})(); diff --git a/src/uncategorized/fullReport.tw b/src/uncategorized/fullReport.tw index d70e4eafe05..f409b5fa69d 100644 --- a/src/uncategorized/fullReport.tw +++ b/src/uncategorized/fullReport.tw @@ -27,7 +27,7 @@ <<case "please you">> <<= App.SlaveAssignment.pleaseYou($slaves[$i])>> <<case "be a subordinate slave">> - <<include "SA serve your other slaves">> + <<= App.SlaveAssignment.serveYourOtherSlaves($slaves[$i])>> <<case "be a servant">> <<= App.SlaveAssignment.servant($slaves[$i])>> <<case "stay confined">> diff --git a/src/utility/descriptionWidgetsFlesh.tw b/src/utility/descriptionWidgetsFlesh.tw index 2b866e2daa5..af1d0b5dd29 100644 --- a/src/utility/descriptionWidgetsFlesh.tw +++ b/src/utility/descriptionWidgetsFlesh.tw @@ -2821,7 +2821,7 @@ $He's got a <</if>> <<if $activeSlave.fuckdoll == 0>> - <<if $activeSlave.mpreg == 1 && canAchieveErection($activeSlave) && $activeSlave.belly >= 10000 && $activeSlave.prostate > 0>> + <<if $activeSlave.mpreg == 1 && canAchieveErection($activeSlave) && $activeSlave.bellyPreg >= 10000 && $activeSlave.prostate > 0>> $His huge pregnancy puts pressure on $his prostate at all times, leaving $him fully erect and trailing cum. <<elseif ($activeSlave.assignment == "work in the dairy") && ($dairyStimulatorsSetting > 1) && canAchieveErection($activeSlave)>> <<if ($activeSlave.dick > 8)>> -- GitLab