From fbbd03241d8fed1a441e77ef71837244c9c8872a Mon Sep 17 00:00:00 2001
From: Trashman1138 <11461-Trashman1138@users.noreply.gitgud.io>
Date: Wed, 3 Jul 2019 18:55:41 -0700
Subject: [PATCH] Reversion of sex-linked traits; well hung still needs to be
 modified

---
 src/js/generateGenetics.js | 200 ++++++++++++++++++++++---------------
 1 file changed, 121 insertions(+), 79 deletions(-)

diff --git a/src/js/generateGenetics.js b/src/js/generateGenetics.js
index 4ee8d25917a..58ed075e216 100644
--- a/src/js/generateGenetics.js
+++ b/src/js/generateGenetics.js
@@ -715,110 +715,152 @@ window.generateGenetics = (function() {
 		// Normal male, carrier female:				50% of daughters carriers,	50% of sons carriers						genetotal 1
 		// Carrier male, normal female:				100% of daughters carriers, sons normal									genetotal 1
 		
-		// Do something similar to autosomal recessive, except:  roll d64 instead of d16
-		// Target for manifesting quirk is 4^(total gene level)
-		// Target for carrier is 11*4^(total gene level).  Yes, 11.  trust me.
-		// For wrong-sex children (i.e., for sons regarding female quirks), if result turns out to be a carrier, 1/3rd chance of dropping to normal.
-		// If result turns out to be manifesting, guaranteed drop to carrier.
-		// This gives 100% chance of manifesting for genetotal 3 daughters, 100% chance of carrier for sons
-		// 25% manifesting, 75% carrier for genetotal 2 daughters, 75% chance of carrier for sons.  Average of the two genetotal 2 results.
-		// 6.25% manifesting, 62.5% carrier for genetotal 1 daughters, slightly less than 50% carriers for sons.  Average for daughters slightly altered towards manifesting.
+		// Sex-linked traits (fertility-affecting, well-hung) left handled by the old method
 		
-		// Applying this same logic for sex-linked male traits is, treated realistically, nonsensical - that's not how human sex chromosomes work.
-		// But it's more interesting than the more realistic take of "there are no carriers, sons always inherit the trait and daughters never do."
-
 		// fertility
-		if (father !== 0) { 
-		    fathergenes = father.geneticQuirks.fertility; 
-		}
-		genetarget = Math.pow(4, mother.geneticQuirks.fertility + fathergenes);
-		if (genetarget >= 4) {
-			chance = jsRandom(1,64);
-			if (chance <= genetarget) { 
-			    quirks.fertility = 2; 
-			} else if (chance <= 11*genetarget) { 
-			    quirks.fertility = 1; 
-			}
-			
-			if ( sex === "XY") {
-				if ((quirks.fertility === 1) && (jsRandom(1,3) == 1)) { 
-				    quirks.fertility = 0; 
+		if (mother.geneticQuirks.fertility === 2) {
+			if (sex === "XX") {
+				quirks.fertility = 2;
+			} else {
+				quirks.fertility = 1;
+			}
+		} else if (mother.geneticQuirks.fertility === 1) {
+			chance = jsRandom(0, 1000);
+			if (father !== 0) {
+				if (father.geneticQuirks.fertility >= 1) {
+					if (sex === "XX") {
+						if (chance > 500) {
+							quirks.fertility = 2;
+						} else if (chance > 50) {
+							quirks.fertility = 1;
+						}
+					} else {
+						if (chance > 500) {
+							quirks.fertility = 1;
+						}
+					}
 				}
-				if (quirks.fertility === 2) { 
-				    quirks.fertility = 1; 
+			} else {
+				if (sex === "XX") {
+					if (chance > 950) {
+						quirks.fertility = 2;
+					} else if (chance > 200) {
+						quirks.fertility = 1;
+					}
+				} else {
+					if (chance > 500) {
+						quirks.fertility = 1;
+					}
 				}
 			}
 		}
 
 		// hyper fertility
-		if (father !== 0) { 
-		    fathergenes = father.geneticQuirks.hyperFertility; 
-		}
-		genetarget = Math.pow(4, mother.geneticQuirks.hyperFertility + fathergenes);
-		if (genetarget >= 4) {
-			chance = jsRandom(1,64);
-			if (chance <= genetarget) { 
-			    quirks.hyperFertility = 2; 
-			} else if (chance <= 11*genetarget) { 
-			    quirks.hyperFertility = 1; 
-			}
-			
-			if ( sex === "XY") {
-				if ((quirks.hyperFertility === 1) && (jsRandom(1,3) == 1)) { 
-				    quirks.hyperFertility = 0; 
+		if (mother.geneticQuirks.hyperFertility === 2) {
+			if (sex === "XX") {
+				quirks.hyperFertility = 2;
+			} else {
+				quirks.hyperFertility = 1;
+			}
+		} else if (mother.geneticQuirks.hyperFertility === 1) {
+			chance = jsRandom(0, 1000);
+			if (father !== 0) {
+				if (father.geneticQuirks.hyperFertility >= 1) {
+					if (sex === "XX") {
+						if (chance > 750) {
+							quirks.hyperFertility = 2;
+						} else if (chance > 500) {
+							quirks.hyperFertility = 1;
+						}
+					} else {
+						if (chance > 500) {
+							quirks.hyperFertility = 1;
+						}
+					}
 				}
-				if (quirks.hyperFertility === 2) { 
-				    quirks.hyperFertility = 1; 
+			} else {
+				if (sex === "XX") {
+					if (chance > 950) {
+						quirks.hyperFertility = 2;
+					} else if (chance > 700) {
+						quirks.hyperFertility = 1;
+					}
+				} else {
+					if (chance > 700) {
+						quirks.hyperFertility = 1;
+					}
 				}
 			}
 		}
 
 		// superfetation
-		if (father !== 0) { 
-		    fathergenes = father.geneticQuirks.superfetation; 
-		}
-		genetarget = Math.pow(4, mother.geneticQuirks.superfetation + fathergenes);
-		if (genetarget >= 4) {
-			chance = jsRandom(1,64);
-			if (chance <= genetarget) { 
-			    quirks.superfetation = 2; 
-			} else if (chance <= 11*genetarget) { 
-			    quirks.superfetation = 1; 
-			}
-			
-			if ( sex === "XY") {
-				if ((quirks.superfetation === 1) && (jsRandom(1,3) == 1)) { 
-				    quirks.superfetation = 0; 
+		if (mother.geneticQuirks.superfetation === 2) {
+			if (sex === "XX") {
+				quirks.superfetation = 2;
+			} else {
+				quirks.superfetation = 1;
+			}
+		} else if (mother.geneticQuirks.superfetation === 1) {
+			chance = jsRandom(0, 1000);
+			if (father !== 0) {
+				if (father.geneticQuirks.superfetation >= 1) {
+					if (sex === "XX") {
+						if (chance > 750) {
+							quirks.superfetation = 2;
+						} else if (chance > 700) {
+							quirks.superfetation = 1;
+						}
+					} else {
+						if (chance > 700) {
+							quirks.superfetation = 1;
+						}
+					}
 				}
-				if (quirks.superfetation === 2) { 
-				    quirks.superfetation = 1; 
+			} else {
+				if (sex === "XX") {
+					if (chance > 950) {
+						quirks.superfetation = 2;
+					} else if (chance > 900) {
+						quirks.superfetation = 1;
+					}
+				} else {
+					if (chance > 900) {
+						quirks.superfetation = 1;
+					}
 				}
 			}
 		}
 
 		// well hung
-		if (father !== 0) { 
-		    fathergenes = father.geneticQuirks.wellHung; 
-		}
-		genetarget = Math.pow(4, mother.geneticQuirks.wellHung + fathergenes);
-		if (genetarget >= 4) {
-			chance = jsRandom(1,64);
-			if (chance <= genetarget) { 
-			    quirks.wellHung = 2; 
-			} else if (chance <= 11*genetarget) { 
-			    quirks.wellHung = 1; 
-			}
-			
-			if ( sex === "XX") {
-				if ((quirks.wellHung === 1) && (jsRandom(1,3) == 1)) { 
-				    quirks.wellHung = 0; 
+		if (father !== 0) {
+			if (mother.geneticQuirks.wellHung + father.geneticQuirks.wellHung >= 3) {
+				if (sex === "XY") {
+					quirks.wellHung = 2;
+				} else {
+					quirks.wellHung = 1;
+				}
+			} else if (mother.geneticQuirks.wellHung + father.geneticQuirks.wellHung >= 1) {
+				chance = jsRandom(0, 1000);
+				if (chance > 750) {
+					quirks.wellHung = 1;
+				}
+			}
+		} else if (mother.geneticQuirks.wellHung === 2) {
+			chance = jsRandom(0, 1000);
+			if (sex === "XY") {
+				if (chance > 900) {
+					quirks.wellHung = 2;
+				} else if (chance > 200) {
+					quirks.wellHung = 1;
 				}
-				if (quirks.wellHung === 2) { 
-				    quirks.wellHung = 1; 
+			} else {
+				if (chance > 500) {
+					quirks.wellHung = 1;
 				}
 			}
 		}
 
+
 		// perfect face
 		if (father !== 0) { 
 		    fathergenes = father.geneticQuirks.pFace; 
-- 
GitLab