From b8971d0e0bbdaaabbeaee48541549ae32009e2e5 Mon Sep 17 00:00:00 2001
From: DCoded <dcoded@live.com>
Date: Tue, 1 Sep 2020 11:53:56 -0400
Subject: [PATCH] Bugfixes and text changes

---
 src/npc/interaction/fAnimal.js | 57 +++++++++++++++++-----------------
 1 file changed, 28 insertions(+), 29 deletions(-)

diff --git a/src/npc/interaction/fAnimal.js b/src/npc/interaction/fAnimal.js
index e60f7b6cd76..da6c79ca5b9 100644
--- a/src/npc/interaction/fAnimal.js
+++ b/src/npc/interaction/fAnimal.js
@@ -16,7 +16,9 @@ App.Interact.fAnimal = function(slave, type) {
 
 		vaginal = acts.VAGINAL,
 		anal = acts.ANAL,
-		oral = acts.ORAL;
+		oral = acts.ORAL,
+
+		approvingFetishes = ["masochist", "humiliation", "perverted", "sinful"];
 
 	let
 		animal,
@@ -62,12 +64,15 @@ App.Interact.fAnimal = function(slave, type) {
 	const
 		isVowel = e => /[aeiou]/.test(e),
 		a = isVowel(animal.charAt(0).toLowerCase()) ? `an` : `a`,
-		slaveApproves = () => slave.fetish.includes("masochist" || "humiliation") ||
+		slaveApproves = () => approvingFetishes.some(
+			e => {
+				e.includes(slave.fetish) ||
+				e.includes(slave.sexualQuirk) ||
+				e.includes(slave.behavioralQuirk);
+			}) ||
 			slave.fetish === "buttslut" && act === anal ||
 			slave.fetish === "cumslut" && act === oral ||
-			slave.sexualQuirk.includes("perverted") ||
-			slave.sexualQuirk === "gagfuck queen" && act === oral ||
-			slave.behavioralQuirk.includes("sinful");
+			slave.sexualQuirk === "gagfuck queen" && act === oral;
 
 	if (slave.fetish === "cumslut" && act === oral) {
 		fetishDesc = `getting to drink more cum`;
@@ -123,20 +128,20 @@ App.Interact.fAnimal = function(slave, type) {
 
 	function introDevoted() {
 		if (act === oral) {
-			if (slaveApproves()) {
+			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()) {
+				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()) {
+				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.`);
@@ -147,20 +152,20 @@ App.Interact.fAnimal = function(slave, type) {
 
 	function introNondevoted() {
 		if (act === oral) {
-			if (slaveApproves()) {
+			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()) {
+				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()) {
+				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.`);
@@ -171,20 +176,20 @@ App.Interact.fAnimal = function(slave, type) {
 
 	function introNonresistant() {
 		if (act === oral) {
-			if (slaveApproves()) {
+			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()) {
+				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()) {
+				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` : ``}.`);
@@ -230,11 +235,10 @@ App.Interact.fAnimal = function(slave, type) {
 
 		function consummationDevotedCanine(type) {
 			if (type === oral) {
-				// TODO: write more
 				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.`);
+					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 {
-					r.push(`The slave visibly gags as the unfamiliar texture of ${a} ${animal}'s cock fills it, then gives a groan as the beast thrusts, stretching ${his} throat to the limit.`);
+					r.push(`The slave visibly gags as the unfamiliar texture of ${a} ${animal}'s cock fills it, then gives a groan as the beast thrusts, filling ${his} throat.`);
 				}
 			} else {
 				if (canWalk(slave)) {
@@ -249,11 +253,10 @@ App.Interact.fAnimal = function(slave, type) {
 
 		function consummationDevotedHooved(type) {
 			if (type === oral) {
-				// TODO: write more
 				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 {
-					r.push(`The slave visibly gags as the unfamiliar texture of ${a} ${animal}'s cock fills it, then gives a groan as the beast thrusts, stretching ${his} throat to the limit.`);
+					r.push(`The slave visibly gags as the unfamiliar texture of ${a} ${animal}'s cock fills it, then gives a groan as the beast thrusts, stretching ${his} poor throat to the limit.`);
 				}
 			} else {
 				r.push(`${slave.slaveName} gives a long, drawn-out moan as the huge phallus fills ${his} ${act === vaginal ? `pussy` : `asshole`} nearly to its breaking point.`);
@@ -262,11 +265,10 @@ App.Interact.fAnimal = function(slave, type) {
 
 		function consummationDevotedFeline(type) {
 			if (type === oral) {
-				// TODO: write more
 				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.`);
+					r.push(`The slave seems to quickly get over the fact that dick currently in ${his} mouth belongs to ${a} ${animal} as ${his} more carnal desires kick in.`);
 				} else {
-					r.push(`The slave visibly gags as the unfamiliar texture of ${a} ${animal}'s cock fills it, then gives a groan as the beast thrusts, stretching ${his} throat to the limit.`);
+					r.push(`The slave visibly gags as the unfamiliar texture of ${a} ${animal}'s cock fills it, then gives a groan as the beast thrusts, the barbs on its cock rubbing the inside of ${his} mouth raw.`);
 				}
 			} else {
 				r.push(`${slave.slaveName} gives a squeal of pain as the barbed cock makes its way into ${his} ${act === vaginal ? `pussy` : `asshole`}.`);
@@ -301,9 +303,8 @@ App.Interact.fAnimal = function(slave, type) {
 
 		function consummationNondevotedCanine(type) {
 			if (type === oral) {
-				// TODO: write more
 				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 isn't human soon enough, once ${his} carnal desires kick in.`);
+					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} ${animal} soon enough, once ${his} carnal desires kick in.`);
 				} else {
 					r.push(`The slave visibly gags as the unfamiliar texture of ${a} ${animal}'s cock fills it, and you get the feeling ${he} is beginning to reevaluate just how much ${he} wants to avoid punishment.`);
 				}
@@ -320,9 +321,8 @@ App.Interact.fAnimal = function(slave, type) {
 
 		function consummationNondevotedHooved(type) {
 			if (type === oral) {
-				// TODO: write more
 				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 isn't human soon enough, once ${his} carnal desires kick in.`);
+					r.push(`Though the slave still seems to have some reservations about sucking off ${a} ${animal}, ${he} seems to forget that the cock in ${his} mouth isn't human soon enough, once ${his} carnal desires kick in.`);
 				} else {
 					r.push(`The slave visibly gags as the unfamiliar texture of ${a} ${animal}'s cock fills it, and you get the feeling ${he} is beginning to reevaluate just how much ${he} wants to avoid punishment.`);
 				}
@@ -333,11 +333,10 @@ App.Interact.fAnimal = function(slave, type) {
 
 		function consummationNondevotedFeline(type) {
 			if (type === oral) {
-				// TODO: write more
 				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 isn't human soon enough, once ${his} carnal desires kick in.`);
+					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 {
-					r.push(`The slave visibly gags as the unfamiliar texture of ${a} ${animal}'s cock fills it, and you get the feeling ${he} is beginning to reevaluate just how much ${he} wants to avoid punishment.`);
+					r.push(`The slave visibly gags as the unfamiliar texture of ${a} ${animal}'s barbed dick fills it, and you get the feeling ${he} is beginning to reevaluate just how much ${he} wants to avoid punishment.`);
 				}
 			} else {
 				r.push(`${slave.slaveName} gives a squeal of pain as the barbed cock makes its way into ${his} ${act === vaginal ? `pussy` : `asshole`}.`);
-- 
GitLab