From 16938a8a94aabbbeaa3beee5905d3d7bafc0d425 Mon Sep 17 00:00:00 2001
From: Pregmodder <pregmodder@gmail.com>
Date: Sat, 15 Sep 2018 03:10:53 -0400
Subject: [PATCH] fix and RA additions

---
 src/js/DefaultRules.tw                 | 49 ++++++++++++++++++++++++++
 src/js/rulesAssistant.tw               |  2 ++
 src/js/rulesAssistantOptions.tw        | 36 ++++++++++++++++++-
 src/uncategorized/saLongTermEffects.tw |  4 +--
 src/uncategorized/slaveInteract.tw     |  2 +-
 5 files changed, 89 insertions(+), 4 deletions(-)

diff --git a/src/js/DefaultRules.tw b/src/js/DefaultRules.tw
index bbb761d9ae9..df465766130 100644
--- a/src/js/DefaultRules.tw
+++ b/src/js/DefaultRules.tw
@@ -46,8 +46,11 @@ window.DefaultRules = (function() {
 			ProcessPunishment(slave, rule);
 			ProcessReward(slave, rule);
 		}
+		ProcessToyHole(slave, rule);
 		ProcessDietCum(slave, rule);
 		ProcessDietMilk(slave, rule);
+		if (V.arcologies[0].FSHedonisticDecadenceResearch === 1)
+			ProcessSolidFood(slave, rule);
 		ProcessTeeth(slave, rule);
 		ProcessStyle(slave, rule);
 		ProcessPiercings(slave, rule);
@@ -1699,6 +1702,40 @@ window.DefaultRules = (function() {
 		}
 	}
 
+	function ProcessToyHole(slave, rule) {
+		if ((rule.toyHole !== undefined) && (rule.toyHole !== "no default setting")) {
+
+			if (rule.toyHole === "pussy") {
+				if (slave.vagina > 0 && canDoVaginal(slave)) {
+					slave.toyHole = rule.toyHole ;
+					r += `<br>${slave.slaveName} has been instructed to use her ${rule.toyHole} to please you.`;
+				} else if (slave.toyHole !== "all her holes") {
+					slave.toyHole = "all her holes" ;
+					r += `<br>${slave.slaveName}'s hole preference has defaulted to all her holes.`;
+				}
+			} else if (rule.toyHole === "ass") {
+				if (slave.anus > 0 && canDoAnal(slave)) {
+					slave.toyHole = rule.toyHole ;
+					r += `<br>${slave.slaveName} has been instructed to use her ${rule.toyHole} to please you.`;
+				} else if (slave.toyHole !== "all her holes") {
+					slave.toyHole = "all her holes" ;
+					r += `<br>${slave.slaveName}'s hole preference has defaulted to all her holes.`;
+				}
+			} else if (rule.toyHole === "dick") {
+				if (slave.dick > 0 && canPenetrate(slave)) {
+					slave.toyHole = rule.toyHole ;
+					r += `<br>${slave.slaveName} has been instructed to use her ${rule.toyHole} to please you.`;
+				} else if (slave.toyHole !== "all her holes") {
+					slave.toyHole = "all her holes" ;
+					r += `<br>${slave.slaveName}'s hole preference has defaulted to all her holes.`;
+				}
+			} else if ((slave.toyHole !== rule.toyHole)) {
+				slave.toyHole = rule.toyHole ;
+				r += `<br>${slave.slaveName} has been instructed to use her ${rule.toyHole} to please you.`;
+			}
+		}
+	}
+
 	function ProcessDietCum(slave, rule) {
 		if ((rule.dietCum !== undefined) && (rule.dietCum !== "no default setting")) {
 			if (slave.dietCum != rule.dietCum) {
@@ -1730,6 +1767,18 @@ window.DefaultRules = (function() {
 			}
 		}
 	}
+	
+	function ProcessSolidFood(slave, rule) {
+		if ((rule.onDiet !== undefined) && (rule.onDiet !== "no default setting")) {
+			if ((slave.onDiet !== rule.onDiet)) {
+				slave.onDiet = rule.onDiet ;
+				if (slave.onDiet == 1)
+					r += `<br>${slave.slaveName} is permitted to eat the solid slave food.`;
+				else
+					r += `<br>${slave.slaveName} is not permitted to eat the solid slave food.`;
+			}
+		}
+	}
 
 	function ProcessTeeth(slave, rule) {
 		if ((rule.teeth !== undefined) && (rule.teeth !== "no default setting")) {
diff --git a/src/js/rulesAssistant.tw b/src/js/rulesAssistant.tw
index 7fefeb20aed..1c74b120d59 100644
--- a/src/js/rulesAssistant.tw
+++ b/src/js/rulesAssistant.tw
@@ -186,6 +186,7 @@ window.emptyDefaultRule = function emptyDefaultRule() {
 		},
 		set: {
 			releaseRules: "no default setting",
+			toyHole: "no default setting",
 			clitSetting: "no default setting",
 			clitSettingXY: "no default setting",
 			clitSettingXX: "no default setting",
@@ -245,6 +246,7 @@ window.emptyDefaultRule = function emptyDefaultRule() {
 			diet: "no default setting",
 			dietCum: "no default setting",
 			dietMilk: "no default setting",
+			onDiet: "no default setting",
 			muscles: "no default setting",
 			XY: "no default setting",
 			XX: "no default setting",
diff --git a/src/js/rulesAssistantOptions.tw b/src/js/rulesAssistantOptions.tw
index 26dc3e5bfdd..a60abec4881 100644
--- a/src/js/rulesAssistantOptions.tw
+++ b/src/js/rulesAssistantOptions.tw
@@ -939,6 +939,9 @@ window.rulesAssistantOptions = (function() {
 			this.appendChild(new DietList());
 			this.appendChild(new DietGrowthList());
 			this.appendChild(new DietBaseList());
+			if (V.arcologies[0].FSHedonisticDecadenceResearch === 1) {
+				this.appendChild(new DietSolidFoodList());
+			}
 			this.appendChild(new MuscleList());
 			this.appendChild(new BraceList());
 		}
@@ -952,6 +955,7 @@ window.rulesAssistantOptions = (function() {
 			this.appendChild(new PunishmentList());
 			this.appendChild(new RewardList());
 			this.appendChild(new ReleaseList());
+			this.appendChild(new ToyHoleList());
 			this.appendChild(new SmartFetishList());
 			this.appendChild(new SmartXYAttractionList());
 			this.appendChild(new SmartXXAttractionList());
@@ -1736,7 +1740,7 @@ window.rulesAssistantOptions = (function() {
 				current_rule.set.dietMilk = value.milk;
 			};
 		}
-
+		
 		value2string(cum, milk) {
 			return `cum: ${cum}, milk: ${milk}`;
 		}
@@ -1748,6 +1752,19 @@ window.rulesAssistantOptions = (function() {
 
 	}
 
+	class DietSolidFoodList extends List {
+		constructor() {
+			const pairs = [
+				["No default setting", "no default setting"],
+				["Permitted", 1],
+				["Forbidden", 0],
+			];
+			super("Solid food access", pairs);
+			this.setValue(current_rule.set.onDiet);
+			this.onchange = (value) => current_rule.set.onDiet = value;
+		}
+	}
+
 	class MuscleList extends List {
 		constructor() {
 			const pairs = [
@@ -1837,6 +1854,23 @@ window.rulesAssistantOptions = (function() {
 		}
 	}
 
+	class ToyHoleList extends List {
+		constructor() {
+			const pairs = [
+				["No default setting", "no default setting"],
+				["All her holes", "all her holes"],
+				["Mouth", "mouth"],
+				["Boobs", "boobs"],
+				["Pussy", "pussy"],
+				["Ass", "ass"],
+				["Dick", "dick"]
+			];
+			super("Fucktoy use preference", pairs);
+			this.setValue(current_rule.set.toyHole);
+			this.onchange = (value) => current_rule.set.toyHole = value;
+		}
+	}
+
 	class SmartFetishList extends List {
 		constructor() {
 			const pairs = [
diff --git a/src/uncategorized/saLongTermEffects.tw b/src/uncategorized/saLongTermEffects.tw
index 64ad7df109f..a954d69ee07 100644
--- a/src/uncategorized/saLongTermEffects.tw
+++ b/src/uncategorized/saLongTermEffects.tw
@@ -6183,8 +6183,8 @@
 
 <</if>> /* CLOSES DICK CHECK */
 
-<<if $slaves[$i].balls == 0>>
-	<<if $slaves[$i].ovaries == 0>>
+<<if $slaves[$i].balls == 0 || $slaves[$i].ballType == "sterile">>
+	<<if $slaves[$i].ovaries == 0 && $slaves[$i].mpreg == 0>>
 		<<if $slaves[$i].energy > 5>>
 			<<if $slaves[$i].energy <= 95>>
 				<<if ($slaves[$i].dick == 0)>>
diff --git a/src/uncategorized/slaveInteract.tw b/src/uncategorized/slaveInteract.tw
index 6ba816e235c..f4010e02639 100644
--- a/src/uncategorized/slaveInteract.tw
+++ b/src/uncategorized/slaveInteract.tw
@@ -406,7 +406,7 @@
 			<<= $defaultRules.filter(x => ruleApplied($activeSlave, x)).map(x => `<li>Rule "${x.name}" applied</li>`).join(" ") >>
 		</ul>
 	<</if>>
-	<<link "//Apply rules//">>
+	| <<link "//Apply rules//">>
 		<<silently>>
 		<<run DefaultRules($activeSlave)>>
 		<</silently>>
-- 
GitLab