diff --git a/src/npc/interaction/fAnimal.js b/src/npc/interaction/fAnimal.js index 44d06174846debad9b5eebf96422fe992982fefa..7886eec678c229624aea413d28ed7443d783b41c 100644 --- a/src/npc/interaction/fAnimal.js +++ b/src/npc/interaction/fAnimal.js @@ -6,7 +6,7 @@ App.Interact.fAnimal = function(slave, type) { frag = new DocumentFragment(), r = [], - {He, he, him, his, girl} = getPronouns(slave), + {He, he, him, His, his, girl} = getPronouns(slave), acts = { VAGINAL: "vaginal", @@ -139,6 +139,11 @@ App.Interact.fAnimal = function(slave, type) { } completion(); + sexEffects(); + + if (V.postSexCleanUp) { + cleanUp(); + } mainDiv.append(r.join(' ')); @@ -625,6 +630,120 @@ App.Interact.fAnimal = function(slave, type) { + // Post-sex Functions + + function sexEffects() { + if (random(1, 100) > 100 + slave.devotion) { + switch (act) { + case oral: + if (slave.energy < 95 && slave.sexualFlaw !== "hates oral") { + r.push(`Having ${a} ${animal} fuck ${his} throat by force has given ${him} a hatred of oral sex.`); + } + slave.sexualFlaw = "hates oral"; + return; + case vaginal: + if (slave.energy < 95 && slave.sexualFlaw !== "hates penetration") { + r.push(`Having ${a} ${animal} fuck ${him} by force has given ${him} a hatred of penetration.`); + } + slave.sexualFlaw = "hates penetration"; + return; + case anal: + if (slave.energy < 95 && slave.sexualFlaw !== "hates anal") { + r.push(`Having ${a} ${animal} fuck ${his} asshole by force has given ${him} a hatred of anal penetration.`); + } + slave.sexualFlaw = "hates anal"; + return; + default: + throw new Error(`Unexpected act type '${act}' in sexEffects()`); + } + } + } + + function cleanUp() { + if (act !== oral) { + if (act === vaginal) { + if (slave.vagina === 3) { + r.push(`${capFirstChar(animal.name)} cum drips out out of ${his} fucked-out hole.`); + } else if (slave.vagina === 2) { + r.push(`${capFirstChar(animal.name)} cum drips out out of ${his} stretched vagina.`); + } else if (slave.vagina === 1) { + r.push(`${His} still-tight pussy keeps the ${animal.name}'s cum inside ${him}.`); + } else { + r.push(`${capFirstChar(animal.name)} cum slides right out of ${his} gaping hole.`); + } + } else { + if (slave.anus === 1) { + r.push(`${His} still-tight asshole keeps the ${animal.name}'s cum inside ${him}.`); + } else if (slave.anus === 2) { + r.push(`${capFirstChar(animal.name)} cum drips out of ${his} loosened anus.`); + } else { + r.push(`${capFirstChar(animal.name)} cum slides right out of ${his} fucked-out asshole.`); + } + } + } + + if (canWalk(slave)) { + if (slave.vagina > 0) { + r.push(`${He} uses a quick douche to clean ${his} ${slave.vagina < 2 ? `tight` : slave.vagina > 3 ? `loose` : ``} pussy,`); + } else { + r.push(`${He} uses an enema to clean ${his} ${slave.anus < 2 ? `tight` : slave.anus < 3 ? `used` : `gaping`} butthole,`); + } + + switch (slave.assignment) { + case Job.BROTHEL: + r.push(`just like ${he} does between each customer.`); + return; + case Job.CLUB: + r.push(`just like ${he} does in the club.`); + return; + case Job.DAIRY: + r.push(`to avoid besmirching the nice clean dairy.`); + return; + case Job.FARMYARD: + r.push(`to avoid tainting the food in ${V.farmyardName}.`); + return; + case Job.QUARTER: + r.push(`mostly to keep everything ${he} has to clean from getting any dirtier.`); + return; + case Job.WHORE: + r.push(`before returning to offering it for sale.`); + return; + case Job.PUBLIC: + r.push(`before returning to offering it for free.`); + return; + case Job.REST: + r.push(`before crawling back into bed.`); + return; + case Job.MILKED: + r.push(`${slave.lactation > 0 ? `before going to get ${his} uncomfortably milk-filled tits drained` : `and then rests until ${his} balls are ready to be drained again`}.`); + return; + case Job.HOUSE: + r.push(`since ${his} chores didn't perform themselves while you used ${his} fuckhole.`); + return; + case Job.FUCKTOY: + r.push(`before returning to await your next use of ${his} fuckhole, as though nothing had happened.`); + return; + case Job.SUBORDINATE: + r.push(`though it's only a matter of time before another slave decides to play with ${his} fuckhole.`); + return; + case Job.HEADGIRL: + r.push(`worried that ${his} charges got up to trouble while ${he} enjoyed ${his} ${WrittenMaster(slave)}'s use.`); + return; + case Job.BODYGUARD: + r.push(`so ${he} can be fresh and ready for more sexual use even as ${he} guards your person.`); + return; + case Job.TEACHER: + r.push(`before ${he} returns to teaching ${his} classes.`); + return; + default: + r.push(`before ${he} returns to ${slave.assignment}.`); + return; + } + } + } + + + // MARK: Virginity Check Functions function virginityCheck(type) {