/** * @param {App.Entity.SlaveState} slave */ App.Interact.fAnimal = function(slave, type) { const frag = new DocumentFragment(), r = [], {he, him, his} = getPronouns(slave); let animal, fetishDesc, act; switch (type) { case "canine": animal = V.activeCanine; break; case "hooved": animal = V.activeHooved; break; case "feline": animal = V.activeFeline; break; } if (slave.assignment === Job.FUCKTOY) { if (slave.toyHole === "pussy") { act = "vaginal"; } else if (slave.toyHole === "ass") { act = "anal"; } else if (slave.toyHole === "mouth") { act = "oral"; } else { if (canDoVaginal(slave)) { act = "vaginal"; } else if (canDoAnal(slave)) { act = "anal"; } else { act = "oral"; } } } else if (canDoVaginal(slave)) { act = "vaginal"; } else if (canDoAnal(slave)) { act = "anal"; } else { act = "oral"; } const isVowel = e => /[aeiou]/.test(e), a = isVowel(animal.charAt(0).toLowerCase()) ? `an` : `a`, slaveApproves = () => slave.fetish.includes("masochist" || "humiliation") || slave.fetish === "buttslut" && act === "anal" || slave.fetish === "cumslut" && act === "oral" || slave.sexualQuirk.includes("perverted") || slave.sexualQuirk === "gagfuck queen" && act === "oral" || slave.behavioralQuirk.includes("sinful"); if (slave.fetish === "cumslut" && act === "oral") { fetishDesc = `getting to drink more cum`; } else if (slave.fetish === "humiliation") { fetishDesc = `committing such a humiliating act`; } else if (slave.fetish === "buttslut" && act === "anal") { fetishDesc = `getting to take a cock up ${his} ass`; } else if (slave.fetish === "masochist") { fetishDesc = `committing such a painful act`; } else if (slave.sexualQuirk === "perverted") { fetishDesc = `committing such a perverted act`; } else if (slave.sexualQuirk === "gagfuck queen" && act === "oral") { fetishDesc = `getting to suck more dick`; } else if (slave.behavioralQuirk === "sinful") { fetishDesc = `committing such a sinful act`; } const mainDiv = App.UI.DOM.appendNewElement("div", frag); r.push(canWalk(slave) ? `You call ${him} over and ` : `You order another slave to bring ${slave.slaveName} over. Once ${he} is situated, you`, `tell ${him} you want to watch ${him} ${act !== "oral" ? `get fucked by` : `suck off`} ${a} ${animal}.`); if (slave.fetish !== "mindbroken") { if (slave.devotion > 50) { introDevoted(); } else if (slave.devotion > 20) { introNondevoted(); } else if (slave.devotion >= -20) { introNonresistant(); } else { introResistant(); } } else { r.push(`${slave.slaveName} nods ${his} head dumbly, ${his} eyes vacant${!canSee(slave) ? ` as always` : ``}.`); } mainDiv.append(r.join(' ')); return frag; // MARK: Intro Functions function introDevoted() { if (act === "oral") { if (slaveApproves()) { r.push(`${slave.slaveName}'s face visibly brightens at the prospect of ${fetishDesc}, even if it's ${a} ${animal}'s cum.`); } else { r.push(`${slave.slaveName} visibly blanches at the thought of having to suck down ${a} ${animal}'s cum, but ${he} is so devoted to you that ${he} reluctantly agrees.`); } } else { if ((act === "vaginal" && slave.vagina > 0) || (act === "anal" && slave.anus > 0)) { if (slaveApproves()) { r.push(`${slave.slaveName}'s face visibly brightens at the thought of ${fetishDesc}, even if the dick is ${a} ${animal}'s.`); } else { r.push(`${slave.slaveName} looks visibly disturbed, but is so attentive to your will that ${he} agrees.`); } } else { if (slaveApproves()) { r.push(`${slave.slaveName}'s face visibly brightens at the thought of ${fetishDesc}, although ${he} seems a bit hesitant at the thought of giving ${his} virginity to an animal.`); } else { r.push(`${slave.slaveName} looks visibly shaken at the thought of having ${his} precious ${!canDoVaginal(slave) ? `anal ` : ``}virginity taken by an animal, but is so attentive to your will that ${he} ultimately agrees.`); } } } } function introNondevoted() { if (act === "oral") { if (slaveApproves()) { r.push(`${slave.slaveName} isn't too keen on the idea of sucking off ${a} ${animal}, but the idea of ${fetishDesc} is enough to get ${him} to comply.`); } else { r.push(`${slave.slaveName} tries in vain to conceal ${his} horror at the thought of blowing ${a} ${animal}, but quickly regains ${his} composure.`); } } else { if ((act === "vaginal" && slave.vagina > 0) || (act === "anal" && slave.anus > 0)) { if (slaveApproves()) { r.push(`${slave.slaveName} doesn't seem terribly keen on the idea of fucking ${a} ${animal}, but the thought of ${fetishDesc} seems to be enough to win ${him} over.`); } else { r.push(`${slave.slaveName} tries in vain to coneal ${his} horror at the thought of fucking ${a} ${animal}, but quickly regains ${his} composure.`); } } else { if (slaveApproves()) { r.push(`${slave.slaveName} clearly has some reservations about having ${his} ${act === "anal" ? `anal ` : ``}virginity taken by ${a} ${fetishDesc}, but the thought of ${fetishDesc} is enough to make agree to comply.`); } else { r.push(`${slave.slaveName} tries in vain to conceal ${his} horror at the thought of having ${his} precious ${act === "anal" ? `rosebud` : `pearl`} taken by a beast, but quickly regains ${his} composure.`); } } } } function introNonresistant() { if (act === "oral") { if (slaveApproves()) { r.push(`${slave.slaveName} looks disgusted at the thought of sucking off ${a} ${animal} at first, but the thought of the ${fetishDesc} that comes with it seems to spark a small flame of lust in ${him}.`); } else { r.push(`${slave.slaveName} tries in vain to conceal ${his} horror at the thought of blowing ${a} ${animal}${canWalk(slave) ? `, and only the threat of worse punishment keeps ${him} from running away as fast as ${he} can` : ``}.`); } } else { if ((act === "vaginal" && slave.vagina > 0) || (act === "anal" && slave.anus > 0)) { if (slaveApproves()) { r.push(`${slave.slaveName} looks disgusted at the thought of fucking ${a} ${animal} at first, but the thought of the ${fetishDesc} that comes with it seems to spark a small flame of lust in ${him}.`); } else { r.push(`${slave.slaveName} tries in vain to coneal ${his} horror at the thought of fucking ${a} ${animal}${canWalk(slave) ? `, and only the threat of worse punishment keeps ${him} from running away as fast as ${he} can` : ``}.`); } } else { if (slaveApproves()) { r.push(`${slave.slaveName} clearly has some reservations about having ${his} ${act === "anal" ? `anal ` : ``}virginity taken by ${a} ${fetishDesc}, but the thought of ${fetishDesc} is enough to make agree to comply.`); } else { r.push(`${slave.slaveName} tries in vain to conceal ${his} horror at the thought of having ${his} precious ${act === "anal" ? `rosebud` : `pearl`} taken by a beast${canWalk(slave) ? `, and only the threat of worse punishment keeps ${him} from running away as fast as ${he} can` : ``}.`); } } } } function introResistant() { r.push(`${slave.slaveName}'s face contorts into a mixture of ${slave.devotion < -50 ? `hatred, anger, and disgust` : `anger and disgust`}, ${canWalk(slave) ? `and only the threat of far worse punishment is enough to prevent ${him} from running out of the room.` : `but ${he} knows ${he} is powerless to stop you`}.`); } };