From dd832905ea0095aee6c63f26c32b6830b371c770 Mon Sep 17 00:00:00 2001
From: DCoded <dcoded@live.com>
Date: Mon, 31 Aug 2020 01:07:56 -0400
Subject: [PATCH] Added text for consummationDevoted(), added virginityCheck()
 and virginityEffects()

---
 src/npc/interaction/fAnimal.js | 140 ++++++++++++++++++++++++++++++++-
 1 file changed, 136 insertions(+), 4 deletions(-)

diff --git a/src/npc/interaction/fAnimal.js b/src/npc/interaction/fAnimal.js
index 2370c78a16a..ec858e07095 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, him, his} = getPronouns(slave),
+		{He, he, him, his, girl} = getPronouns(slave),
 
 		acts = {
 			VAGINAL: "vaginal",
@@ -205,11 +205,45 @@ App.Interact.fAnimal = function(slave, type) {
 			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 visbly gags as the unfamiliar texture of ${a} ${animal}'s cock fills it.`);
+				r.push(`The slave visibly gags as the unfamiliar texture of ${a} ${animal}'s cock fills it.`);
 			}
 		} else {
-			r.push(`You have ${slave.clothes !== "no clothing" ? `take off ${his} clothes and ` : ``} get on the floor, ass in the air, before calling in the ${animal}. 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. Another slave lines its cock up with ${slave.slaveName}'s ${act === vaginal ? `pussy` : `ass`}, then with a thrust, the ${animal} begins to fuck ${him}.`);
-			// TODO: finish writing this
+			r.push(`You have ${slave.clothes !== "no clothing" ? `take off ${his} clothes and ` : ``} get on the floor, ass in the air, before calling in the ${animal}. 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.`);
+
+			switch (animal) {
+				case V.activeCanine:
+					consummationDevotedCanine();
+					break;
+				case V.activeHooved:
+					consummationDevotedHooved();
+					break;
+				case V.activeFeline:
+					consummationDevotedFeline();
+					break;
+				default:
+					throw new Error(`Unexpected animal type '${type}' in consummationDevoted()`);
+			}
+
+			virginityCheck(act);
+			virginityEffects(act);
+		}
+
+		function consummationDevotedCanine() {
+			if (canWalk(slave)) {
+				r.push(`The canine clambers up to mount ${slave.slaveName}, eliciting a squeal from the ${girl} as its claws dig into ${his} flesh.`);
+			} else {
+				r.push(`The canine takes a few curious sniffs, then lines up its large cock with ${slave.slaveName}'s ${act === vaginal ? `pussy` : `asshole`}.`);
+			}
+
+			r.push(`It takes a few tries, but the ${animal} finally manages to sink its cock into ${his} ${slaveApproves && act === vaginal ? `wet ` : ``}${act === vaginal ? `cunt` : `asshole`} and begin to hammer away in the way that only canines can.`);
+		}
+
+		function consummationDevotedHooved() {
+			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.`);
+		}
+
+		function consummationDevotedFeline() {
+			r.push(`${slave.slaveName} gives a squeal of pain as the barbed cock makes its way into ${his} ${act === vaginal ? `pussy` : `asshole`}.`);
 		}
 	}
 
@@ -222,4 +256,102 @@ App.Interact.fAnimal = function(slave, type) {
 			// TODO: finish writing this
 		}
 	}
+
+
+
+	// MARK: Virginity Check Functions
+
+	function virginityCheck(type) {
+		switch (type) {
+			case vaginal:
+				if (act === vaginal && slave.vagina === 0) {
+					r.push(`The slave gives a loud ${slave.devotion > 20 ? `moan` : `groan`} as ${his} virginity is taken from ${him}${slave.devotion < -20 ? ` by force` : ``}.`);
+				}
+				return;
+			case anal:
+				if (act === anal && slave.anus === 0) {
+					r.push(`The slave gives a loud ${slave.devotion > 20 ? `moan` : `groan`} as ${his} anal virginity is taken from ${him}${slave.devotion < -20 ? ` by force` : ``}.`);
+				}
+				return;
+			default:
+				throw new Error(`Unexpected type value '${type}' in virginityCheck()`);
+		}
+	}
+
+	function virginityEffects(type) {
+		switch (type) {
+			case vaginal:
+				if (slave.devotion >= -20) {
+					if (slaveApproves) {
+						r.push(`Losing ${his} virginity in such a painful manner has increased ${his} devotion to you.`);
+
+						slave.devotion += 10;
+					} else {
+						if (slave.devotion > 50) {
+							r.push(`Since ${he} is well broken, losing ${his} virginity in such a manner has increased ${his} submission to you.`);
+
+							slave.devotion += 5;
+						} else if (slave.devotion >= -20) {
+							r.push(`Losing ${his} virginity in such a manner has increased ${his} submission to you, though ${he} is fearful that you'll decide to only use ${him} to sate your animals' lust.`);
+
+							slave.devotion += 5;
+							slave.trust -= 5;
+						} else {
+							r.push(`${He} is clearly unhappy in the manner in which ${his} virginity has been taken, and ${he} fears you'll decide to only use ${him} to sate your animals' lust.`);
+
+							slave.devotion -= 10;
+							slave.trust -= 10;
+						}
+					}
+				} else {
+					r.push(`Having ${his} pearl of great price taken by a mere beast has reinforced the hatred ${he} holds towards you, and ${he} is terrified you'll only use ${him} as a plaything for your animals.`);
+
+					slave.devotion -= 10;
+					slave.trust -= 10;
+				}
+
+				r.push(`Having ${his} cherry popped in such a manner was extremely painful and slightly damaged ${his} health.`);
+
+				healthDamage(slave, 5);
+
+				return;
+			case anal:
+				if (slave.devotion >= -20) {
+					if (slaveApproves) {
+						r.push(`Losing ${his} anal virginity in such a painful manner has increased ${his} devotion to you.`);
+
+						slave.devotion += 10;
+					} else {
+						if (slave.devotion > 50) {
+							r.push(`Since ${he} is well broken, losing ${his} anal virginity in such a manner has increased ${his} submission to you.`);
+
+							slave.devotion += 5;
+						} else if (slave.devotion >= -20) {
+							r.push(`Losing ${his} anal virginity in such a manner has increased ${his} submission to you, though ${he} is fearful that you'll decide to only use ${him} to sate your animals' lust.`);
+
+							slave.devotion += 5;
+							slave.trust -= 5;
+						} else {
+							r.push(`${He} is clearly unhappy in the manner in which ${his} anal virginity has been taken, and ${he} fears you'll decide to only use ${him} to sate your animals' lust.`);
+
+							slave.devotion -= 10;
+							slave.trust -= 10;
+						}
+					}
+				} else {
+					r.push(`Having ${his} pearl of great price taken by a mere beast has reinforced the hatred ${he} holds towards you, and ${he} is terrified you'll only use ${him} as a plaything for your animals.`);
+
+					slave.devotion -= 10;
+					slave.trust -= 10;
+				}
+
+				r.push(`Having ${his} rosebud broken in in such a manner was extremely painful and slightly damaged ${his} health.`);
+
+				healthDamage(slave, 5);
+
+				return;
+			default:
+				throw new Error(`Unexpected type value '${type}' in virginityEffects()`);
+		}
+	}
 };
-- 
GitLab