From a35cacdd25b8031d351330330d5aa47a9160a863 Mon Sep 17 00:00:00 2001
From: Pregmodder <pregmodder@gmail.com>
Date: Sat, 9 Mar 2019 15:50:32 -0500
Subject: [PATCH] heterochromia active

---
 devNotes/VersionChangeLog-Premod+LoliMod.txt |  5 +-
 src/js/generateGenetics.js                   | 70 ++++++++++++++++++++
 src/js/generateNewSlaveJS.js                 | 45 +++++++++++++
 3 files changed, 119 insertions(+), 1 deletion(-)

diff --git a/devNotes/VersionChangeLog-Premod+LoliMod.txt b/devNotes/VersionChangeLog-Premod+LoliMod.txt
index 9d26840b575..9974b1632d6 100644
--- a/devNotes/VersionChangeLog-Premod+LoliMod.txt
+++ b/devNotes/VersionChangeLog-Premod+LoliMod.txt
@@ -9,13 +9,16 @@ Pregmod
 	-ear shaping surgeries
 	-horn implant surgeries
 	-tail socket cybernetics port and tails
+	-taste and smell senses
 	-fertility diet no longer blocked by chastity
 	-RA can now apply contraceptives to postpartum slaves
 	-RA can now manage basic abortions
 	-added abortion tracking tattoos
 	-added bulk incubator retrieval
-	-added "albinism", "pFace" and "uFace" genetic traits
+	-added "albinism", "heterochromia", "pFace" and "uFace" genetic traits
 	-added sexy Santa outfit
+	-watersports is now toggleable
+	-added option for force surname-name on all slaves
 	-fixes
 	-various code cleaning
 
diff --git a/src/js/generateGenetics.js b/src/js/generateGenetics.js
index 0c25df36532..59e57265daa 100644
--- a/src/js/generateGenetics.js
+++ b/src/js/generateGenetics.js
@@ -69,6 +69,9 @@ window.generateGenetics = (function() {
 		genes.face = setFace(father, mother, activeMother, actor2, genes.geneticQuirks);
 		genes.faceShape = setFaceShape(father, mother);
 		genes.eyeColor = setEyeColor(father, mother, actor2);
+		if (genes.geneticQuirks.heterochromia === 2) {
+			genes.geneticQuirks.heterochromia = setHeterochromaticEyeColor(father, mother, actor2);
+		}
 		genes.hColor = setHColor(father, mother, actor2);
 		genes.underArmHStyle = setUnderArmHStyle(father, mother);
 		genes.pubicHStyle = setPubicHStyle(father, mother);
@@ -277,6 +280,42 @@ window.generateGenetics = (function() {
 		return eyeColor;
 	}
 
+	function setHeterochromaticEyeColor(father, mother, actor2) {
+		let hEyeColor;
+		let eyeColorArray = [];
+		if (father !== 0) {
+			eyeColorArray.push(mother.origEye);
+			eyeColorArray.push(father.origEye);
+			if (father.geneticQuirks.heterochromia !== 0 && father.geneticQuirks.heterochromia !== 1) {
+				eyeColorArray.push(father.geneticQuirks.heterochromia);
+			}
+		} else if (actor2 === -2 || actor2 === 0 || actor2 === -5) {
+			eyeColorArray.push(mother.origEye);
+			eyeColorArray.push("brown");
+			eyeColorArray.push("brown");
+			eyeColorArray.push("blue");
+			eyeColorArray.push("green");
+			eyeColorArray.push("green");
+			eyeColorArray.push("hazel");
+		} else {
+			eyeColorArray.push(mother.origEye);
+		}
+		if (mother.geneticQuirks.heterochromia !== 0 && mother.geneticQuirks.heterochromia !== 1) {
+			eyeColorArray.push(mother.geneticQuirks.heterochromia);
+		}
+		//just in case something wrong gets through
+		switch (hEyeColor) {
+			case "blind blue":
+				hEyeColor = "deep blue";
+				break;
+			case "milky white":
+			case "implant":
+				hEyeColor = jsEither(["blue", "green", "brown", "hazel", "light blue", "light green", "dark green", "dark blue"]);
+				break;
+		}
+		return jsEither(hEyeColor);
+	}
+
 	// hColor
 	function setHColor(father, mother, actor2) {
 		let hairColor;
@@ -681,6 +720,37 @@ window.generateGenetics = (function() {
 				}
 			}
 		}
+		
+		//heterochromia
+		if (father !== 0) {
+			if (mother.geneticQuirks.heterochromia === 2 && father.geneticQuirks.heterochromia === 2) {
+				if (jsRandom(1, 4) === 1) {
+					quirks.heterochromia = 2;
+				} else {
+					quirks.heterochromia = 1;
+				}
+			} else if (mother.geneticQuirks.heterochromia === 1 + father.geneticQuirks.heterochromia >= 3) {
+				chance = jsRandom(1, 4);
+				if (chance === 1) {
+					quirks.heterochromia = 2;
+				} else if (chance !== 4) {
+					quirks.heterochromia = 1;
+				}
+			} else if (mother.geneticQuirks.heterochromia === 1 && father.geneticQuirks.heterochromia === 1) {
+				if (jsRandom(1, 4) === 1) {
+					quirks.heterochromia = 2;
+				}
+			}
+		} else if (mother.geneticQuirks.heterochromia >= 1) {
+			if (jsRandom(0, 40000) >= 39500) {
+				chance = jsRandom(1, 4);
+				if (chance === 1) {
+					quirks.heterochromia = 2;
+				} else if (chance !== 4) {
+					quirks.heterochromia = 1;
+				}
+			}
+		}
 
 		return clone(quirks);
 	}
diff --git a/src/js/generateNewSlaveJS.js b/src/js/generateNewSlaveJS.js
index 27f992102a6..f51d123a66b 100644
--- a/src/js/generateNewSlaveJS.js
+++ b/src/js/generateNewSlaveJS.js
@@ -1092,6 +1092,12 @@ window.GenerateNewSlave = (function(){
 		} else if (chance >= 19500) {
 			slave.geneticQuirks.albinism = 1;
 		}
+		chance = jsRandom(1,20000);
+		if (chance == 10001) {
+			slave.geneticQuirks.heterochromia = 2;
+		} else if (chance >= 19750) {
+			slave.geneticQuirks.heterochromia = 1;
+		}
 	}
 
 	function generateXYGeneticQuirks() {
@@ -1114,6 +1120,12 @@ window.GenerateNewSlave = (function(){
 		} else if (chance >= 19500) {
 			slave.geneticQuirks.albinism = 1;
 		}
+		chance = jsRandom(1,20000);
+		if (chance == 10001) {
+			slave.geneticQuirks.heterochromia = 2;
+		} else if (chance >= 19750) {
+			slave.geneticQuirks.heterochromia = 1;
+		}
 	}
 
 	function generateAge() {
@@ -1240,28 +1252,46 @@ window.GenerateNewSlave = (function(){
 				slave.skin = jsEither(["black", "brown", "dark brown"]);
 				slave.hColor = jsEither(["black", "black", "black", "brown"]);
 				slave.hStyle = jsEither(["crinkled", "neat"]);
+				if (slave.geneticQuirks.heterochromia == 2) {
+					slave.geneticQuirks.heterochromia = "brown";
+				}
 				break;
 			case "white":
 				slave.lips = jsRandom(5,25);
 				if (slave.nationality === "German") {
 					slave.skin = jsEither(["fair", "light", "pale"]);
 					slave.eyeColor = jsEither(["blue", "blue", "blue", "brown", "green"]);
+					if (slave.geneticQuirks.heterochromia == 2) {
+						slave.geneticQuirks.heterochromia = jsEither(["blue", "blue", "blue", "brown", "green"]);
+					}
 					slave.hColor = jsEither(["black", "blonde", "blonde", "blonde", "brown", "red"]);
 				} else if (slave.nationality === "Icelandic") {
 					slave.skin = jsEither(["fair", "light", "pale", "pale"]);
 					slave.eyeColor = jsEither(["blue", "blue", "blue", "brown", "green"]);
+					if (slave.geneticQuirks.heterochromia == 2) {
+						slave.geneticQuirks.heterochromia = jsEither(["blue", "blue", "blue", "brown", "green"]);
+					}
 					slave.hColor = jsEither(["black", "blonde", "blonde", "blonde", "brown", "red"]);
 				} else if (slave.nationality === "Irish") {
 					slave.skin = jsEither(["fair", "light", "pale", "pale"]);
 					slave.eyeColor = jsEither(["blue", "brown", "green", "green", "green"]);
+					if (slave.geneticQuirks.heterochromia == 2) {
+						slave.geneticQuirks.heterochromia = jsEither(["blue", "brown", "green", "green", "green"]);
+					}
 					slave.hColor = jsEither(["black", "blonde", "brown", "red", "red", "red"]);
 				} else if (slave.nationality === "Scottish") {
 					slave.skin = jsEither(["fair", "fair", "light", "pale"]);
 					slave.eyeColor = jsEither(["blue", "brown", "brown", "green", "green", "green"]);
+					if (slave.geneticQuirks.heterochromia == 2) {
+						slave.geneticQuirks.heterochromia = jsEither(["blue", "brown", "brown", "green", "green", "green"]);
+					}
 					slave.hColor = jsEither(["black", "black", "blonde", "red", "red", "red", "brown"]);
 				} else {
 					slave.skin = jsEither(["fair", "light", "pale"]);
 					slave.eyeColor = jsEither(["blue", "brown", "green"]);
+					if (slave.geneticQuirks.heterochromia == 2) {
+						slave.geneticQuirks.heterochromia = jsEither(["blue", "brown", "green"]);
+					}
 					slave.hColor = jsEither(["black", "blonde", "brown", "red"]);
 				}
 				slave.hStyle = "neat";
@@ -1270,6 +1300,9 @@ window.GenerateNewSlave = (function(){
 				slave.lips = jsRandom(5,25);
 				slave.skin = jsEither(["brown", "dark brown", "dark olive", "light olive", "tanned"]);
 				slave.hColor = jsEither(["black", "brown"]);
+				if (slave.geneticQuirks.heterochromia == 2) {
+					slave.geneticQuirks.heterochromia = jsEither(["blue", "brown", "green"]);
+				}
 				slave.hStyle = "neat";
 				break;
 			case "indo-aryan":
@@ -1280,12 +1313,18 @@ window.GenerateNewSlave = (function(){
 				slave.skin = jsEither(["dark", "light"]);
 				slave.hColor = "black";
 				slave.hStyle = "neat";
+				if (slave.geneticQuirks.heterochromia == 2) {
+					slave.geneticQuirks.heterochromia = "brown";
+				}
 				break;
 			case "asian":
 				slave.lips = jsRandom(5,25);
 				slave.skin = jsEither(["dark olive", "light olive", "light"]);
 				slave.hColor = "black";
 				slave.hStyle = "neat";
+				if (slave.geneticQuirks.heterochromia == 2) {
+					slave.geneticQuirks.heterochromia = jsEither(["blue", "brown", "green"]);
+				}
 				break;
 			case "middle eastern":
 			case "semitic":
@@ -1294,12 +1333,18 @@ window.GenerateNewSlave = (function(){
 				slave.skin = jsEither(["fair", "light olive", "light", "tanned"]);
 				slave.hColor = "black";
 				slave.hStyle = "neat";
+				if (slave.geneticQuirks.heterochromia == 2) {
+					slave.geneticQuirks.heterochromia = jsEither(["blue", "brown", "green"]);
+				}
 				break;
 			default:
 				slave.lips = jsRandom(5,25);
 				slave.skin = jsEither(["dark", "light", "pale"]);
 				slave.hColor = jsEither(["black", "black", "black", "black", "blonde", "brown", "brown", "red"]);
 				slave.hStyle = "neat";
+				if (slave.geneticQuirks.heterochromia == 2) {
+					slave.geneticQuirks.heterochromia = jsEither(["blue", "brown", "green"]);
+				}
 		}
 		if (slave.skin === "pale" || slave.skin === "fair") {
 			if (jsRandom(1,4) === 1) {
-- 
GitLab