diff --git a/src/npc/interaction/fAnimal.js b/src/npc/interaction/fAnimal.js index d56550acdb62f5c6634dd54498e340cc30fe5bee..e835c9e40aa0b1784e43d4d6732aed37cb4a3209 100644 --- a/src/npc/interaction/fAnimal.js +++ b/src/npc/interaction/fAnimal.js @@ -15,10 +15,6 @@ App.Interact.fAnimal = function(slave, type) { ORAL: "oral", }; - const vaginal = Acts.VAGINAL; - const anal = Acts.ANAL; - const oral = Acts.ORAL; - const approvingFetishes = ["masochist", "humiliation", "perverted", "sinful"]; // not strictly fetishes, but approvingFetishesAndBehavioralQuirksAndSexualQuirks doesn't have the same ring to it const animal = V.active[type]; @@ -30,49 +26,49 @@ App.Interact.fAnimal = function(slave, type) { let hole; let orifice; - const anAnimal = animal.articleAn ? `an ${animal.name}` : `a ${animal.name}`; + const anAnimal = `${animal.articleAn} ${animal.name}`; if (slave.assignment === Job.FUCKTOY || slave.assignment === Job.MASTERSUITE) { if (slave.toyHole === "pussy") { - act = vaginal; + act = Acts.VAGINAL; } else if (slave.toyHole === "ass") { - act = anal; + act = Acts.ANAL; } else if (slave.toyHole === "mouth") { - act = oral; + act = Acts.ORAL; } else { if (canDoVaginal(slave)) { - act = vaginal; + act = Acts.VAGINAL; } else if (canDoAnal(slave)) { - act = anal; + act = Acts.ANAL; } else { - act = oral; + act = Acts.ORAL; } } } else if (canDoVaginal(slave)) { - act = vaginal; + act = Acts.VAGINAL; } else if (canDoAnal(slave)) { - act = anal; + act = Acts.ANAL; } else { - act = oral; + act = Acts.ORAL; } const slaveApproves = () => approvingFetishes.includes(slave.fetish) || approvingFetishes.includes(slave.sexualQuirk) || approvingFetishes.includes(slave.behavioralQuirk) || - slave.fetish === "buttslut" && act === anal || - slave.fetish === "cumslut" && act === oral || - slave.sexualQuirk === "gagfuck queen" && act === oral; + slave.fetish === "buttslut" && act === Acts.ANAL || + slave.fetish === "cumslut" && act === Acts.ORAL || + slave.sexualQuirk === "gagfuck queen" && act === Acts.ORAL; switch (act) { - case oral: + case Acts.ORAL: orifice = () => either("mouth", "throat"); break; - case vaginal: + case Acts.VAGINAL: orifice = () => either("pussy", "cunt"); hole = 0; break; - case anal: + case Acts.ANAL: orifice = () => either("asshole", "rectum"); hole = 1; break; @@ -80,17 +76,17 @@ App.Interact.fAnimal = function(slave, type) { throw new Error(`Unexpected act type '${act}' in fAnimal()`); } - if (slave.fetish === "cumslut" && act === oral) { + if (slave.fetish === "cumslut" && act === Acts.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) { + } else if (slave.fetish === "buttslut" && act === Acts.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) { + } else if (slave.sexualQuirk === "gagfuck queen" && act === Acts.ORAL) { fetishDesc = `getting to suck more dick`; } else if (slave.behavioralQuirk === "sinful") { fetishDesc = `committing such a sinful act`; @@ -121,9 +117,9 @@ App.Interact.fAnimal = function(slave, type) { r.push(`You order another slave to bring ${slave.slaveName} over. Once ${he} is situated, you`); } - r.push(`tell ${him} you want to watch ${him} ${act === oral ? + r.push(`tell ${him} you want to watch ${him} ${act === Acts.ORAL ? `suck off` : - act === vaginal ? + act === Acts.VAGINAL ? `get fucked by` : `get fucked in the ass by`} ${anAnimal}. `); @@ -152,14 +148,14 @@ App.Interact.fAnimal = function(slave, type) { function introDevoted() { const mainSpan = document.createElement("span"); - if (act === oral) { + if (act === Acts.ORAL) { if (slaveApproves()) { mainSpan.append(`${slave.slaveName}'s face visibly brightens at the prospect of ${fetishDesc}, even if it's an animal${slave.fetish === "cumslut" ? `'s cum` : ` that ${he} has to suck off`}. `); } else { mainSpan.append(`${slave.slaveName} visibly blanches at the thought of having to suck down an 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 ((act === Acts.VAGINAL && slave.vagina > 0) || (act === Acts.ANAL && slave.anus > 0)) { if (slaveApproves()) { mainSpan.append(`${slave.slaveName}'s face visibly brightens at the thought of ${fetishDesc}, even if the dick is an animal's. `); } else { @@ -180,14 +176,14 @@ App.Interact.fAnimal = function(slave, type) { function introNondevoted() { const mainSpan = document.createElement("span"); - if (act === oral) { + if (act === Acts.ORAL) { if (slaveApproves()) { mainSpan.append(`${slave.slaveName} isn't too keen on the idea of sucking off an animal, but the idea of ${fetishDesc} is enough to get ${him} to comply. `); } else { mainSpan.append(`${slave.slaveName} tries in vain to conceal ${his} horror at the thought of blowing an animal, but quickly regains ${his} composure. `); } } else { - if ((act === vaginal && slave.vagina > 0) || (act === anal && slave.anus > 0)) { + if ((act === Acts.VAGINAL && slave.vagina > 0) || (act === Acts.ANAL && slave.anus > 0)) { if (slaveApproves()) { mainSpan.append(`${slave.slaveName} doesn't seem terribly keen on the idea of fucking an animal, but the thought of ${fetishDesc} seems to be enough to win ${him} over. `); } else { @@ -195,9 +191,9 @@ App.Interact.fAnimal = function(slave, type) { } } else { if (slaveApproves()) { - mainSpan.append(`${slave.slaveName} clearly has some reservations about having ${his} ${act === anal ? `anal ` : ``}virginity taken by ${anAnimal}, but the thought of ${fetishDesc} is enough to make agree to comply. `); + mainSpan.append(`${slave.slaveName} clearly has some reservations about having ${his} ${act === Acts.ANAL ? `anal ` : ``}virginity taken by ${anAnimal}, but the thought of ${fetishDesc} is enough to make agree to comply. `); } else { - mainSpan.append(`${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. `); + mainSpan.append(`${slave.slaveName} tries in vain to conceal ${his} horror at the thought of having ${his} precious ${act === Acts.ANAL ? `rosebud` : `pearl`} taken by a beast, but quickly regains ${his} composure. `); } } } @@ -208,14 +204,14 @@ App.Interact.fAnimal = function(slave, type) { function introNonresistant() { const mainSpan = document.createElement("span"); - if (act === oral) { + if (act === Acts.ORAL) { if (slaveApproves()) { mainSpan.append(`${slave.slaveName} looks disgusted at the thought of sucking off an animal at first, but the thought of the ${fetishDesc} that comes with it seems to spark a small flame of lust in ${him}. `); } else { mainSpan.append(`${slave.slaveName} tries in vain to conceal ${his} horror at the thought of blowing an 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 ((act === Acts.VAGINAL && slave.vagina > 0) || (act === Acts.ANAL && slave.anus > 0)) { if (slaveApproves()) { mainSpan.append(`${slave.slaveName} looks disgusted at the thought of fucking an animal at first, but the thought of the ${fetishDesc} that comes with it seems to spark a small flame of lust in ${him}. `); } else { @@ -223,9 +219,9 @@ App.Interact.fAnimal = function(slave, type) { } } else { if (slaveApproves()) { - mainSpan.append(`${slave.slaveName} clearly has some reservations about having ${his} ${act === anal ? `anal ` : ``}virginity taken by ${anAnimal}, but the thought of ${fetishDesc} is enough to make agree to comply. `); + mainSpan.append(`${slave.slaveName} clearly has some reservations about having ${his} ${act === Acts.ANAL ? `anal ` : ``}virginity taken by ${anAnimal}, but the thought of ${fetishDesc} is enough to make agree to comply. `); } else { - mainSpan.append(`${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` : ``}. `); + mainSpan.append(`${slave.slaveName} tries in vain to conceal ${his} horror at the thought of having ${his} precious ${act === Acts.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` : ``}. `); } } } @@ -264,7 +260,7 @@ App.Interact.fAnimal = function(slave, type) { mainSpan = document.createElement("span"), r = []; - if (act === oral) { + if (act === Acts.ORAL) { r.push(`You have ${him} kneel on the floor before calling in the ${animal.name}. The beast slowly saunters up to the slave where ${he} waits, showing little concern when the slave reaches out and begins masturbating it to begin the process of getting the animal hard. Once the ${animal.name} is hard enough, ${slave.slaveName} takes its cock and begins to give it a few tentative licks before finally putting it in ${his} mouth. `); } else { r.push(`You have ${him} ${slave.clothes !== "no clothing" ? `take off ${his} clothes and ` : ``}get on the floor, ass in the air, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few short moments for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `); @@ -284,12 +280,12 @@ App.Interact.fAnimal = function(slave, type) { throw new Error(`Unexpected animal type '${animal}' in consummationDevoted()`); } - if (act !== oral) { + if (act !== Acts.ORAL) { mainSpan.append(virginityCheck(act)); } function consummationDevotedCanine(type) { - if (type === oral) { + if (type === Acts.ORAL) { if (slaveApproves()) { r.push(`The slave seems to quickly get over the fact that the dick currently in ${his} mouth belongs to a canine as ${his} more carnal desires kick in. `); } else { @@ -302,12 +298,12 @@ App.Interact.fAnimal = function(slave, type) { r.push(`The canine takes a few curious sniffs, then lines up its large cock with ${slave.slaveName}'s ${orifice()}. `); } - r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === vaginal ? `wet ` : ``}${orifice()} and begin to hammer away in the way that only canines can. `); + r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === Acts.VAGINAL ? `wet ` : ``}${orifice()} and begin to hammer away in the way that only canines can. `); } } function consummationDevotedHooved(type) { - if (type === oral) { + if (type === Acts.ORAL) { if (slaveApproves()) { r.push(`The slave seems to quickly get over the fact that dick currently in ${his} mouth is not a human one as ${his} more carnal desires kick in. `); } else { @@ -319,7 +315,7 @@ App.Interact.fAnimal = function(slave, type) { } function consummationDevotedFeline(type) { - if (type === oral) { + if (type === Acts.ORAL) { if (slaveApproves()) { r.push(`The slave seems to quickly get over the fact that dick currently in ${his} mouth belongs to ${anAnimal} as ${his} more carnal desires kick in. `); } else { @@ -340,7 +336,7 @@ App.Interact.fAnimal = function(slave, type) { mainSpan = document.createElement("span"), r = []; - if (act === oral) { + if (act === Acts.ORAL) { r.push(`You tell ${him} to kneel on the floor before calling in the ${animal.name}. The beast slowly saunters up to the slave where ${he} waits, showing little concern when the slave hesitantly reaches out and begins masturbating it to begin the process of getting the animal hard. Once the ${animal.name} is hard enough, ${slave.slaveName} takes its cock, and, after taking a moment to steel ${his} resolve, begins to give it a few reluctant licks before putting it in ${his} mouth. `); } else { r.push(`You tell ${him} to ${slave.clothes !== "no clothing" ? `take off ${his} clothes and ` : ``}get on the floor, ass in the air, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few seconds for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `); @@ -360,12 +356,12 @@ App.Interact.fAnimal = function(slave, type) { throw new Error(`Unexpected animal type '${animal}' in consummationDevoted()`); } - if (act !== oral) { + if (act !== Acts.ORAL) { mainSpan.append(virginityCheck(act)); } function consummationNondevotedCanine(type) { - if (type === oral) { + if (type === Acts.ORAL) { if (slaveApproves()) { r.push(`Though the slave still seems to have some reservations about sucking off an animal, ${he} seems to forget that the cock in ${his} mouth belongs to ${anAnimal} soon enough, once ${his} carnal desires kick in. `); } else { @@ -378,12 +374,12 @@ App.Interact.fAnimal = function(slave, type) { r.push(`The canine takes a few curious sniffs, then lines up its large cock with ${slave.slaveName}'s ${orifice()}. `); } - r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === vaginal ? `wet ` : ``}${orifice()} and begin to hammer away in the way that only canines can. `); + r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === Acts.VAGINAL ? `wet ` : ``}${orifice()} and begin to hammer away in the way that only canines can. `); } } function consummationNondevotedHooved(type) { - if (type === oral) { + if (type === Acts.ORAL) { if (slaveApproves()) { r.push(`Though the slave still seems to have some reservations about sucking off ${anAnimal}, ${he} seems to forget that the cock in ${his} mouth isn't human soon enough, once ${his} carnal desires kick in. `); } else { @@ -395,7 +391,7 @@ App.Interact.fAnimal = function(slave, type) { } function consummationNondevotedFeline(type) { - if (type === oral) { + if (type === Acts.ORAL) { if (slaveApproves()) { r.push(`Though the slave still seems to have some reservations about sucking off an animal, ${he} seems to forget that the cock in ${his} mouth belongs to a feline soon enough, once ${his} carnal desires kick in. `); } else { @@ -416,7 +412,7 @@ App.Interact.fAnimal = function(slave, type) { mainSpan = document.createElement("span"), r = []; - if (act === oral) { + if (act === Acts.ORAL) { r.push(`You force ${him} to kneel on the floor before calling in the ${animal.name}. The beast slowly saunters up to the slave where ${he} waits, showing little concern when the slave reluctantly reaches out and begins masturbating it to begin the process of getting the animal hard. Once the ${animal.name} is hard enough, ${slave.slaveName} takes its cock and begins to give it a few tentative licks before finally putting it in ${his} mouth. `); } else { r.push(`You force ${him} to ${slave.clothes !== "no clothing" ? `take off ${his} clothes and ` : ``}get on the floor, ass in the air, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few short moments for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `); @@ -436,12 +432,12 @@ App.Interact.fAnimal = function(slave, type) { throw new Error(`Unexpected animal type '${animal}' in consummationNonresistant()`); } - if (act !== oral) { + if (act !== Acts.ORAL) { mainSpan.append(virginityCheck(act)); } function consummationNonresistantCanine(type) { - if (type === oral) { + if (type === Acts.ORAL) { if (slaveApproves()) { r.push(`Though the slave still seems to have some reservations about sucking off an animal, ${he} seems to forget that the cock in ${his} mouth belongs to ${anAnimal} soon enough, once ${his} carnal desires kick in. `); } else { @@ -454,12 +450,12 @@ App.Interact.fAnimal = function(slave, type) { r.push(`The canine takes a few curious sniffs, then lines up its large cock with ${slave.slaveName}'s ${orifice()}. `); } - r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === vaginal ? `wet ` : ``}${orifice()} and begin to hammer away in the way that only canines can. `); + r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === Acts.VAGINAL ? `wet ` : ``}${orifice()} and begin to hammer away in the way that only canines can. `); } } function consummationNonresistantHooved(type) { - if (type === oral) { + if (type === Acts.ORAL) { if (slaveApproves()) { r.push(`Though the slave still seems to have some reservations about sucking off ${anAnimal}, ${he} seems to forget that the cock in ${his} mouth isn't human soon enough, once ${his} carnal desires kick in. `); } else { @@ -471,7 +467,7 @@ App.Interact.fAnimal = function(slave, type) { } function consummationNonresistantFeline(type) { - if (type === oral) { + if (type === Acts.ORAL) { if (slaveApproves()) { r.push(`Though the slave still seems to have some reservations about sucking off an animal, ${he} seems to forget that the cock in ${his} mouth belongs to a feline soon enough, once ${his} carnal desires kick in. `); } else { @@ -492,7 +488,7 @@ App.Interact.fAnimal = function(slave, type) { mainSpan = document.createElement("span"), r = []; - if (act === oral) { + if (act === Acts.ORAL) { r.push(`You have to physically force ${him} to kneel on the floor before calling in the ${animal.name}. The beast slowly saunters up to the slave where ${he} is restrained, showing little concern when another slave reaches out and begins masturbating it to begin the process of getting the animal hard. Once the ${animal.name} is hard enough, the slave takes its cock and lines it up with ${slave.slaveName}'s mouth. The animal needs no prompting, and thrusts itself into ${his} ring-gagged mouth. `); } else { r.push(`You have to physically force ${him} to ${slave.clothes !== "no clothing" ? `take off ${his} clothes and ` : ``} get on the floor, ass in the air and restraints around ${his} wrists and ankles, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few short moments for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `); @@ -512,12 +508,12 @@ App.Interact.fAnimal = function(slave, type) { throw new Error(`Unexpected animal type '${animal}' in consummationResistant()`); } - if (act !== oral) { + if (act !== Acts.ORAL) { mainSpan.append(virginityCheck(act)); } function consummationResistantCanine(type) { - if (type === oral) { + if (type === Acts.ORAL) { if (slaveApproves()) { r.push(`The slave glares daggers at you as ${he} takes the full length of the canine's cock in ${his} mouth, but ${slave.dick ? canAchieveErection(slave) ? @@ -537,12 +533,12 @@ App.Interact.fAnimal = function(slave, type) { r.push(`The canine takes a few curious sniffs, then lines up its large cock with ${slave.slaveName}'s ${orifice()}. `); } - r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === vaginal ? `wet ` : ``}${orifice()} and begin to hammer away in the way that only canines can. `); + r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === Acts.VAGINAL ? `wet ` : ``}${orifice()} and begin to hammer away in the way that only canines can. `); } } function consummationResistantHooved(type) { - if (type === oral) { + if (type === Acts.ORAL) { if (slaveApproves()) { r.push(`The slave glares daggers at you as ${he} takes the full length of the ${animal.name}'s cock in ${his} mouth, but ${slave.dick ? canAchieveErection(slave) ? @@ -561,7 +557,7 @@ App.Interact.fAnimal = function(slave, type) { } function consummationResistantFeline(type) { - if (type === oral) { + if (type === Acts.ORAL) { if (slaveApproves()) { r.push(`The slave glares daggers at you as ${he} takes the full length of the feline's cock in ${his} mouth, but ${slave.dick ? canAchieveErection(slave) ? @@ -608,28 +604,28 @@ App.Interact.fAnimal = function(slave, type) { throw new Error(`Unexpected animal type '${animal}' in completion()`); } - if (act !== oral && canGetPregnant(slave) && canBreed(slave, animal)) { + if (act !== Acts.ORAL && canGetPregnant(slave) && canBreed(slave, animal)) { knockMeUp(slave, 5, hole, -8); } function completionCanine() { - if (act === oral) { + if (act === Acts.ORAL) { r.push(`The ${animal.species === "dog" ? `hound` : animal.name} wastes no time in beginning to hammer away at ${his} ${orifice()}, causing ${slave.slaveName} to moan uncontrollably as its thick, veiny member probes the depths of ${his} ${orifice()}. A few short minutes later, ${he} gives a loud groan ${slaveApproves() ? `and shakes in orgasm ` : ``}as the ${animal.name}'s knot begins to swell and its dick begins to erupt a thick stream of jizz down ${his} abused throat. Soon enough, the ${animal.name} finally finishes cumming and its knot is sufficiently small enough to slip out of ${slave.slaveName}'s mouth, causing ${him} to immediately begin coughing and retching uncontrollably. Having finished its business, the ${animal.name} runs off, presumably in search of food. `); } else { - r.push(`The ${animal.species === "dog" ? `hound` : animal.name} wastes no time in beginning to hammer away at ${his} ${orifice()}, causing ${slave.slaveName} to moan uncontrollably as its thick, veiny member probes the depths of ${his} ${orifice()}. A few short minutes later, ${he} gives a loud groan ${slaveApproves() ? `and shakes in orgasm ` : ``}as the ${animal.name}'s knot begins to swell and its dick begins to erupt a thick stream of jizz into ${his} ${orifice()}. Soon enough, the ${animal.name} finally finishes cumming and its knot is sufficiently small enough to slip out of ${slave.slaveName}'s ${act === vaginal && slave.vagina < 3 || act === anal && slave.anus < 2 ? + r.push(`The ${animal.species === "dog" ? `hound` : animal.name} wastes no time in beginning to hammer away at ${his} ${orifice()}, causing ${slave.slaveName} to moan uncontrollably as its thick, veiny member probes the depths of ${his} ${orifice()}. A few short minutes later, ${he} gives a loud groan ${slaveApproves() ? `and shakes in orgasm ` : ``}as the ${animal.name}'s knot begins to swell and its dick begins to erupt a thick stream of jizz into ${his} ${orifice()}. Soon enough, the ${animal.name} finally finishes cumming and its knot is sufficiently small enough to slip out of ${slave.slaveName}'s ${act === Acts.VAGINAL && slave.vagina < 3 || act === Acts.ANAL && slave.anus < 2 ? `now-gaping ${orifice()}` : orifice()}, causing a thick stream of cum to slide out of it. Having finished its business, the ${animal.name} runs off, presumably in search of food. `); } switch (act) { - case oral: + case Acts.ORAL: slave.counter.oral++; break; - case vaginal: + case Acts.VAGINAL: slave.counter.vaginal++; slave.vagina = slave.vagina < 3 ? 3 : slave.vagina; break; - case anal: + case Acts.ANAL: slave.counter.anal++; slave.anus = slave.anus < 2 ? 2 : slave.anus; break; @@ -639,21 +635,21 @@ App.Interact.fAnimal = function(slave, type) { } function completionHooved() { - if (act === oral) { + if (act === Acts.ORAL) { r.push(`The ${animal.species === "horse" ? `stallion` : animal.name} begins to thrust faster and faster, causing ${him} to moan and groan past the huge ${animal.species} cock stretching ${his} poor throat to its limits. Before too long, the ${animal.name}'s movements begin to slow, and you can see its large testicles contract as its begins to erupt and pour its thick semen down ${his} throat and into ${his} stomach, filling it to the brim. After what seems like an impossibly long time, the ${animal.name}'s dick finally begins to soften and pull out, causing ${slave.slaveName} to begin coughing and retching uncontrollably. You have another slave lead the ${animal.name} away, with a fresh apple as a treat for its good performance. `); } else { - r.push(`The ${animal.species === "horse" ? `stallion` : animal.name} begins to thrust faster and faster, causing ${him} to moan and groan as the huge ${animal.species} cock ${act === vaginal ? `batters ${his} cervix` : `fills ${him} completely`}. Before too long, the ${animal.name}'s movements begin to slow, and you can see its large testicles contract as its begins to erupt and fill ${his} ${orifice()} with its thick baby batter. After what seems like an impossibly long time, the ${animal.name}'s dick finally begins to soften and pull out, leaving ${slave.slaveName} panting and covered in sweat. You have another slave lead the ${animal.name} away, with a fresh apple as a treat for its good performance. `); + r.push(`The ${animal.species === "horse" ? `stallion` : animal.name} begins to thrust faster and faster, causing ${him} to moan and groan as the huge ${animal.species} cock ${act === Acts.VAGINAL ? `batters ${his} cervix` : `fills ${him} completely`}. Before too long, the ${animal.name}'s movements begin to slow, and you can see its large testicles contract as its begins to erupt and fill ${his} ${orifice()} with its thick baby batter. After what seems like an impossibly long time, the ${animal.name}'s dick finally begins to soften and pull out, leaving ${slave.slaveName} panting and covered in sweat. You have another slave lead the ${animal.name} away, with a fresh apple as a treat for its good performance. `); } switch (act) { - case oral: + case Acts.ORAL: slave.counter.oral++; break; - case vaginal: + case Acts.VAGINAL: slave.counter.vaginal++; slave.vagina = slave.vagina < 4 ? 4 : slave.vagina; break; - case anal: + case Acts.ANAL: slave.counter.anal++; slave.anus = slave.anus < 3 ? 3 : slave.anus; break; @@ -663,7 +659,7 @@ App.Interact.fAnimal = function(slave, type) { } function completionFeline() { - if (act === oral) { + if (act === Acts.ORAL) { r.push(`The ${animal.name} begins to move, thrusting faster and faster. The ${girl} underneath it can't stop a groan of pain from escaping ${his} lips as the ${animal.species}'s barbed dick rubs the inside of ${his} mouth and throat raw. After a few minutes of painful coupling, the ${animal.species}'s thrusts finally slow, then stop completely as its ${animal.species !== "cat" ? `large` : ``} cock erupts down ${slave.slaveName}'s throat. With a ${animal.species !== "cat" ? `deep bellow` : `loud meow`}, he finally dismounts, gives you a long look, then stalks off. `); } else { r.push(`The ${animal.name} begins to move, thrusting faster and faster. The ${girl} underneath it can't stop a groan of pain from escaping ${his} lips as the ${animal.species}'s barbed dick rubs the inside of ${his} ${orifice()} raw. After a few minutes of painful coupling, the ${animal.species}'s thrusts finally slow, then stop completely as its ${animal.species !== "cat" ? `large` : ``} cock erupts, filling ${slave.slaveName} with its sperm. With a ${animal.species !== "cat" ? `deep bellow` : `loud meow`}, he finally dismounts, gives you a long look, then stalks off. `); @@ -672,14 +668,14 @@ App.Interact.fAnimal = function(slave, type) { healthDamage(slave, 1); switch (act) { - case oral: + case Acts.ORAL: slave.counter.oral++; return; - case vaginal: + case Acts.VAGINAL: slave.counter.vaginal++; slave.vagina = slave.vagina < 2 ? 2 : slave.vagina; return; - case anal: + case Acts.ANAL: slave.counter.anal++; slave.anus = slave.anus < 1 ? 1 : slave.anus; return; @@ -702,21 +698,21 @@ App.Interact.fAnimal = function(slave, type) { if (jsRandom(1, 100) > 100 + slave.devotion) { switch (act) { - case oral: + case Acts.ORAL: if (slave.energy < 95 && slave.sexualFlaw !== "hates oral") { mainSpan.append(`Having ${anAnimal} fuck ${his} throat by force has given ${him} a hatred of oral sex. `); } slave.sexualFlaw = "hates oral"; break; - case vaginal: + case Acts.VAGINAL: if (slave.energy < 95 && slave.sexualFlaw !== "hates penetration") { mainSpan.append(`Having ${anAnimal} fuck ${him} by force has given ${him} a hatred of penetration. `); } slave.sexualFlaw = "hates penetration"; break; - case anal: + case Acts.ANAL: if (slave.energy < 95 && slave.sexualFlaw !== "hates anal") { mainSpan.append(`Having ${anAnimal} fuck ${his} asshole by force has given ${him} a hatred of anal penetration. `); } @@ -736,8 +732,8 @@ App.Interact.fAnimal = function(slave, type) { mainSpan = document.createElement("span"), r = []; - if (act !== oral) { - if (act === vaginal) { + if (act !== Acts.ORAL) { + if (act === Acts.VAGINAL) { if (slave.vagina === 3) { r.push(`${capFirstChar(animal.name)} cum drips out of ${his} fucked-out hole. `); } else if (slave.vagina === 2) { @@ -832,8 +828,8 @@ App.Interact.fAnimal = function(slave, type) { virginityLossSpan = App.UI.DOM.makeElement("span", '', ["virginity", "loss"]); switch (type) { - case vaginal: - if (act === vaginal && slave.vagina === 0) { + case Acts.VAGINAL: + if (act === Acts.VAGINAL && slave.vagina === 0) { virginityLossSpan.append(`${his} virginity is taken from ${him}${slave.devotion < -20 ? ` by force` : ``}. `); mainSpan.append(`The slave gives a loud ${slave.devotion > 20 ? `moan` : `groan`} as `, virginityLossSpan, ` `); @@ -842,8 +838,8 @@ App.Interact.fAnimal = function(slave, type) { } return mainSpan; - case anal: - if (act === anal && slave.anus === 0) { + case Acts.ANAL: + if (act === Acts.ANAL && slave.anus === 0) { mainSpan.append(`The slave gives a loud ${slave.devotion > 20 ? `moan` : `groan`} as ${his} anal virginity is taken from ${him}${slave.devotion < -20 ? ` by force` : ``}. `); mainSpan.append(virginityEffects(type)); @@ -863,7 +859,7 @@ App.Interact.fAnimal = function(slave, type) { healthSpan = App.UI.DOM.makeElement("span", '', ["health", "dec"]); switch (type) { - case vaginal: + case Acts.VAGINAL: if (slave.devotion >= -20) { if (slaveApproves()) { devotionSpan.classList.add("devotion", "inc"); @@ -926,7 +922,7 @@ App.Interact.fAnimal = function(slave, type) { healthDamage(slave, 5); return mainSpan; - case anal: + case Acts.ANAL: if (slave.devotion >= -20) { if (slaveApproves()) { devotionSpan.classList.add("devotion", "inc");