From 673b784d76f1e24ab442dee80acf900ddd13a4ad Mon Sep 17 00:00:00 2001
From: Pregmodder <pregmodder@gmail.com>
Date: Fri, 21 Dec 2018 01:46:41 -0500
Subject: [PATCH] further cloning work and fixes

---
 devNotes/VersionChangeLog-Premod+LoliMod.txt |  9 ++
 devNotes/twine JS.txt                        | 20 +++--
 src/SecExp/attackOptions.tw                  | 10 +--
 src/js/datatypeCleanupJS.tw                  |  1 +
 src/js/generateGenetics.tw                   |  7 +-
 src/js/slaveGenerationJS.tw                  |  1 +
 src/js/wombJS.tw                             | 11 +--
 src/pregmod/geneLab.tw                       |  2 +
 src/pregmod/widgets/pregmodWidgets.tw        |  3 +
 src/uncategorized/saLongTermEffects.tw       | 88 ++++++++++----------
 src/uncategorized/saRules.tw                 |  2 +-
 src/uncategorized/slaveInteract.tw           |  2 +-
 src/uncategorized/storyCaption.tw            |  6 ++
 13 files changed, 100 insertions(+), 62 deletions(-)

diff --git a/devNotes/VersionChangeLog-Premod+LoliMod.txt b/devNotes/VersionChangeLog-Premod+LoliMod.txt
index 9d28de28629..7abdece0982 100644
--- a/devNotes/VersionChangeLog-Premod+LoliMod.txt
+++ b/devNotes/VersionChangeLog-Premod+LoliMod.txt
@@ -2,6 +2,15 @@
 
 0.10.7.1-1.4.x
 
+	12/21/2018
+
+	1
+	-enabled first run of cloning in cheatmode (slave cloning has issues)
+	-fixes
+	-more economy work
+
+	12/19/2018
+
 	0
 	-dispensary broken down into pharm fabricator, organ farm, implant manufactory and gene lab
 	-lots of SF work
diff --git a/devNotes/twine JS.txt b/devNotes/twine JS.txt
index 1d7857abdbb..e9f6b01d312 100644
--- a/devNotes/twine JS.txt	
+++ b/devNotes/twine JS.txt	
@@ -10089,7 +10089,7 @@ window.generateGenetics = (function() {
 
 	function generateGenetics(actor1, actor2, x) {
 		V = State.variables;
-		genes = {gender: "XX", name: "blank", surname: 0, mother: 0, motherName: "none", father: 0, fatherName: "none", nationality: "Stateless", race: "white", intelligence: 0, face: 0, faceShape: "cute", eyeColor: "brown", hColor: "black", skin: "white", markings: "none", behavioralFlaw: "none", sexualFlaw: "none", pubicHSyle: "bushy", underArmHStyle: "bushy", geneticQuirks: 0};
+		genes = {gender: "XX", name: "blank", surname: 0, mother: 0, motherName: "none", father: 0, fatherName: "none", nationality: "Stateless", race: "white", intelligence: 0, face: 0, faceShape: "cute", eyeColor: "brown", hColor: "black", skin: "white", markings: "none", behavioralFlaw: "none", sexualFlaw: "none", pubicHSyle: "bushy", underArmHStyle: "bushy", clone: 0, cloneID: 0, geneticQuirks: 0};
 		if (actor1.ID > 0) {
 			mother = V.genePool.find(function(s) { return s.ID == actor1.ID; });
 			if (mother === undefined) {
@@ -11031,6 +11031,11 @@ window.generateChild = function(mother, ova, destination) {
 			}
 		}
 
+		if (genes.clone !== undefined) {
+			child.clone = genes.clone;
+			child.cloneID = genes.cloneID;
+		}
+
 		child.mother = genes.mother;
 		child.father = genes.father;
 		child.nationality = genes.nationality;
@@ -11311,16 +11316,17 @@ window.WombImpregnateClone = function(actor, fCount, mother, motherOriginal, age
 		//gene corrections
 		tf.genetics.gender = mother.genes;
 		tf.genetics.mother = mother.mother;
-		if (mother.ID == -1) {
-			tf.genetics.motherName = mother.name;
-		} else {
-			tf.genetics.motherName = mother.slaveName;
-		}
 		tf.genetics.father = mother.father;
 		if (mother.ID == -1) {
+			tf.genetics.motherName = mother.name;
 			tf.genetics.fatherName = mother.name;
+			tf.genetics.clone = PlayerName(mother);
+			tf.genetics.cloneID = -1;
 		} else {
+			tf.genetics.motherName = mother.slaveName;
 			tf.genetics.fatherName = mother.slaveName;
+			tf.genetics.clone = SlaveFullName(mother);
+			tf.genetics.cloneID = mother.ID;
 		}
 		tf.genetics.intelligence = motherOriginal.intelligence;
 		tf.genetics.face = motherOriginal.face;
@@ -33564,6 +33570,7 @@ window.BaseSlave = function BaseSlave() {
 		skillE: 0,
 		skillW: 0,
 		tankBaby: 0,
+		clone: 0,
 		geneMods: {NCS: 0, rapidCellGrowth: 0},
 		NCSyouthening: 0,
 		override_Race: 0,
@@ -36888,6 +36895,7 @@ window.slaveRelationDatatypeCleanup = function slaveRelationDatatypeCleanup(slav
 	slave.relationshipTarget = Math.max(+slave.relationshipTarget, 0) || 0;
 	slave.rivalryTarget = Math.max(+slave.rivalryTarget, 0) || 0;
 	slave.rivalry = Math.clamp(+slave.rivalry, 0, 3) || 0;
+	slave.cloneID = +slave.clone || 0;
 };
 
 window.slaveSkillsDatatypeCleanup = function slaveSkillsDatatypeCleanup(slave) {
diff --git a/src/SecExp/attackOptions.tw b/src/SecExp/attackOptions.tw
index ee754659331..cb5f39d48b9 100644
--- a/src/SecExp/attackOptions.tw
+++ b/src/SecExp/attackOptions.tw
@@ -167,17 +167,17 @@ It seems your troops and your adversary will fight
 <<else>>
 	Your recon capabilities are almost non-existent. The information collected will be wild guesses at best:
 <</if>>
-approximately <strong><<print $estimatedMen>> men</strong> are coming, they seems to be
+approximately <strong><<print $estimatedMen>> men</strong> are coming, they seem to be
 <<if $expectedEquip <= 0>>
 	<strong>poorly armed</strong>. Old rusty small arms are the norm with just a few barely working civilian vehicles.
 <<elseif $expectedEquip == 1>>
-	<strong>lightly armed</strong>. Mostly small arms with some repurposed civilian vehicles and a few scattered machine guns. There's no sign of heavy vehicles, artillery or aircraft.
+	<strong>lightly armed</strong>, mostly wth small arms and some repurposed civilian vehicles with scattered machine gun support. There's no sign of heavy vehicles, artillery or aircraft.
 <<elseif $expectedEquip == 2>>
-	<strong>decently armed</strong>. Good quality small arms, machine guns and a few mortars. There seems to be some heavy military vehicles coming as well.
+	<strong>decently armed</strong> with good quality small arms, machine guns and a few mortars. There appear to be some heavy military vehicles coming as well.
 <<elseif $expectedEquip == 3>>
-	<strong>well armed</strong>. High quality small arms, snipers, demolitions teams, heavy duty machine guns and mortars. Heavy military vehicles are numerous and a few artillery pieces are accompanying the detachment.
+	<strong>well armed</strong> with high quality small arms, snipers, demolitions teams, heavy duty machine guns and mortars. Heavy military vehicles are numerous and a few artillery pieces are accompanying the detachment.
 <<elseif $expectedEquip >= 4>>
-	<strong>extremely well armed</strong>. Excellent small arms and specialized teams with heavy duty infantry support weapons. Heavy presence of armored military vehicles, artillery pieces and even some attack helicopters.
+	<strong>extremely well armed</strong> with excellent small arms and specialized teams with heavy duty infantry support weapons. Heavy presence of armored military vehicles, artillery pieces and even some attack helicopters.
 <</if>>
 
 <hr>
diff --git a/src/js/datatypeCleanupJS.tw b/src/js/datatypeCleanupJS.tw
index 7ee8f3bed3e..ec4e8c772ec 100644
--- a/src/js/datatypeCleanupJS.tw
+++ b/src/js/datatypeCleanupJS.tw
@@ -453,6 +453,7 @@ window.slaveRelationDatatypeCleanup = function slaveRelationDatatypeCleanup(slav
 	slave.relationshipTarget = Math.max(+slave.relationshipTarget, 0) || 0;
 	slave.rivalryTarget = Math.max(+slave.rivalryTarget, 0) || 0;
 	slave.rivalry = Math.clamp(+slave.rivalry, 0, 3) || 0;
+	slave.cloneID = +slave.clone || 0;
 };
 
 window.slaveSkillsDatatypeCleanup = function slaveSkillsDatatypeCleanup(slave) {
diff --git a/src/js/generateGenetics.tw b/src/js/generateGenetics.tw
index 27a865a65ed..049d3c07a02 100644
--- a/src/js/generateGenetics.tw
+++ b/src/js/generateGenetics.tw
@@ -12,7 +12,7 @@ window.generateGenetics = (function() {
 
 	function generateGenetics(actor1, actor2, x) {
 		V = State.variables;
-		genes = {gender: "XX", name: "blank", surname: 0, mother: 0, motherName: "none", father: 0, fatherName: "none", nationality: "Stateless", race: "white", intelligence: 0, face: 0, faceShape: "cute", eyeColor: "brown", hColor: "black", skin: "white", markings: "none", behavioralFlaw: "none", sexualFlaw: "none", pubicHSyle: "bushy", underArmHStyle: "bushy", geneticQuirks: 0};
+		genes = {gender: "XX", name: "blank", surname: 0, mother: 0, motherName: "none", father: 0, fatherName: "none", nationality: "Stateless", race: "white", intelligence: 0, face: 0, faceShape: "cute", eyeColor: "brown", hColor: "black", skin: "white", markings: "none", behavioralFlaw: "none", sexualFlaw: "none", pubicHSyle: "bushy", underArmHStyle: "bushy", clone: 0, cloneID: 0, geneticQuirks: 0};
 		if (actor1.ID > 0) {
 			mother = V.genePool.find(function(s) { return s.ID == actor1.ID; });
 			if (mother === undefined) {
@@ -954,6 +954,11 @@ window.generateChild = function(mother, ova, destination) {
 			}
 		}
 
+		if (genes.clone !== undefined) {
+			child.clone = genes.clone;
+			child.cloneID = genes.cloneID;
+		}
+
 		child.mother = genes.mother;
 		child.father = genes.father;
 		child.nationality = genes.nationality;
diff --git a/src/js/slaveGenerationJS.tw b/src/js/slaveGenerationJS.tw
index 2443056b4c2..6ec794cb8ec 100644
--- a/src/js/slaveGenerationJS.tw
+++ b/src/js/slaveGenerationJS.tw
@@ -1737,6 +1737,7 @@ window.BaseSlave = function BaseSlave() {
 		skillE: 0,
 		skillW: 0,
 		tankBaby: 0,
+		clone: 0,
 		geneMods: {NCS: 0, rapidCellGrowth: 0},
 		NCSyouthening: 0,
 		override_Race: 0,
diff --git a/src/js/wombJS.tw b/src/js/wombJS.tw
index 1fe53a23f93..27f9a4bd00f 100644
--- a/src/js/wombJS.tw
+++ b/src/js/wombJS.tw
@@ -148,16 +148,17 @@ window.WombImpregnateClone = function(actor, fCount, mother, motherOriginal, age
 		//gene corrections
 		tf.genetics.gender = mother.genes;
 		tf.genetics.mother = mother.mother;
-		if (mother.ID == -1) {
-			tf.genetics.motherName = mother.name;
-		} else {
-			tf.genetics.motherName = mother.slaveName;
-		}
 		tf.genetics.father = mother.father;
 		if (mother.ID == -1) {
+			tf.genetics.motherName = mother.name;
 			tf.genetics.fatherName = mother.name;
+			tf.genetics.clone = PlayerName(mother);
+			tf.genetics.cloneID = -1;
 		} else {
+			tf.genetics.motherName = mother.slaveName;
 			tf.genetics.fatherName = mother.slaveName;
+			tf.genetics.clone = SlaveFullName(mother);
+			tf.genetics.cloneID = mother.ID;
 		}
 		tf.genetics.intelligence = motherOriginal.intelligence;
 		tf.genetics.face = motherOriginal.face;
diff --git a/src/pregmod/geneLab.tw b/src/pregmod/geneLab.tw
index e4f28b253dc..c5feb381bff 100644
--- a/src/pregmod/geneLab.tw
+++ b/src/pregmod/geneLab.tw
@@ -13,6 +13,7 @@ The Gene Lab
 Genetic Harvesting
 <hr>
 
+<<if $cheatMode == 1>>
 <<if ($cloningSystem != 1) && ($rep <= 18000*_PCSkillCheck)>>
 	//You lack the reputation needed to access methods for human cloning//
 	<br>
@@ -29,4 +30,5 @@ Genetic Harvesting
 <<elseif ($cloningSystem > 0)>>
 	The gene lab is capable of implanting a slave's genetic sequence into a blank embryo to produce a basic clone.
 	<br>
+<</if>>
 <</if>>
\ No newline at end of file
diff --git a/src/pregmod/widgets/pregmodWidgets.tw b/src/pregmod/widgets/pregmodWidgets.tw
index 99001fb271c..6c66291ada2 100644
--- a/src/pregmod/widgets/pregmodWidgets.tw
+++ b/src/pregmod/widgets/pregmodWidgets.tw
@@ -130,6 +130,9 @@
 		<</if>>
 	<</for>>
 <</if>>
+<<if ndef $args[0].clone>>
+	<<set $args[0].clone = 0>>
+<</if>>
 
 <</widget>>
 
diff --git a/src/uncategorized/saLongTermEffects.tw b/src/uncategorized/saLongTermEffects.tw
index 6aa3a2ac0be..3d86806f351 100644
--- a/src/uncategorized/saLongTermEffects.tw
+++ b/src/uncategorized/saLongTermEffects.tw
@@ -3543,50 +3543,52 @@
 					<</if>>
 
 				<<default>> /* random impregnation chance on other assignments - consider relationships first */
-					<<if (_conceptionSeed > 80) && (($slaves[$i].vaginalCount > 0) || ($slaves[$i].analCount > 0 && $slaves[$i].mpreg > 0))>> /* TODO: compare to previous week totals? */
-						<<if $slaves[$i].relationshipTarget > 0>>
-							<<set _tempLover = getSlave($slaves[$i].relationshipTarget)>>
-							<<if ndef _tempLover>>@@.red;Error, relationshipTarget not found.@@<</if>>
-					<<elseif $slaves[$i].rivalryTarget > 0>>
-						<<set _tempRival = getSlave($slaves[$i].rivalryTarget)>>
-						<<if ndef _tempRival>>@@.red;Error, rivalryTarget not found.@@<</if>>
-					<<elseif $slaves[$i].subTarget > 0>>
-						<<set _tempSub = getSlave($slaves[$i].subTarget)>>
-						<<if ndef _tempSub>>@@.red;Error, subTarget not found.@@<</if>>
-					<</if>>
-					<<if (($slaves[$i].relationship == -3) || ($slaves[$i].relationship == -2)) && canImpreg($slaves[$i], $PC)>>
-						<<set $slaves[$i].pregSource = -1>>
-					<<elseif ($slaves[$i].relationship > 2) && canImpreg($slaves[$i], _tempLover)>> /* erection not needed for impregnation via consensual sex play (FWB or better) */
-						<<set $slaves[$i].pregSource = _tempLover.ID>>
-					<<elseif ($slaves[$i].subTarget != 0) && ($slaves[$i].assignment == "be a subordinate slave") && canAchieveErection(_tempSub) && canImpreg($slaves[$i], _tempSub)>> /* subordinate must have erection to impregnate target */
-						<<set $slaves[$i].pregSource = _tempSub.ID>>
-					<<elseif (random(1,100) > 95) && ($slaves[$i].rivalry > 2) && canAchieveErection(_tempRival) && canImpreg($slaves[$i], _tempRival)>> /* 5% chance to be raped and knocked up by bitter rival - erection needed */
-						Driven by the bitter rivalry between them, _tempRival.slaveName successfully overpowers $slaves[$i].slaveName and rapes $him, cumming deep in $his fertile <<if $slaves[$i].mpreg == 1>>asshole<<else>>pussy<</if>> whenever $he chooses. By the end of the week, $slaves[$i].slaveName is vowing revenge as $he regains confidence.
-						<<set $slaves[$i].pregSource = _tempRival.ID>>
-					<<elseif (random(1,100) > 60) && canImpreg($slaves[$i], $PC)>> /* still 40% chance of impregnation by PC */
-						<<set $slaves[$i].pregSource = -1>>
-					<<elseif (random(1,100) > 95) && ($slaves[$i].eggType == "human") && $slaves[$i].devotion <= 20>> /* 5% chance of impregnation by random citizen - TODO: make this optional for players who want random fathers from among their own slaves only */
-						<<set $slaves[$i].pregSource = -2>>
-					<<else>>
-						/* pick a random starting point in the slave array and iterate (wrapping around) until finding eligible father or coming back to starting point */
-						<<if $slaves.length == 1>>
-							<<if canImpreg($slaves[$i], $slaves[$i]) && _conceptionSeed > 95 && ($slaves[$i].releaseRules == "permissive" || $slaves[$i].releaseRules == "masturbation")>>
-								<<set $slaves[$i].pregSource = $slaves[$i].ID>>
-							<</if>>
-						<<elseif $slaves[$i].releaseRules == "permissive" || ($slaves[$i].devotion <= 20 && $slaves[$i].trust > 50) || $universalRulesConsent == 0>>
-							<<set _sourceSeed = random(0,$slaves.length-1)>><<set _tried = 0>>
-							<<for _m = _sourceSeed + 1; _m != _sourceSeed; _m++>>
-								<<if _m == $slaves.length>><<set _m = 0, _tried = 1>><</if>> /* wrap around */
-								<<if _m == _sourceSeed+1 && _tried == 1>><<break>><</if>> /* give up after a full loop */
-								<<if canImpreg($slaves[$i], $slaves[_m])>>
-									/* self-impregnation check */
-									<<if ($slaves[_m].ID == $slaves[$i].ID) && (_conceptionSeed <= 95)>>
-										<<continue>> /* 95% chance not to self-impregnate */
-									<</if>>
-									<<set $slaves[$i].pregSource = $slaves[_m].ID>> /* passed the checks above, so this is an eligible father */
-									<<break>>
+					<<if ["masturbation", "chastity"].includes($slaves[$i].releaseRules) && $slaves[$i].devotion <= 50>>
+						<<if (_conceptionSeed > 80) && (($slaves[$i].vaginalCount > 0) || ($slaves[$i].analCount > 0 && $slaves[$i].mpreg > 0))>> /* TODO: compare to previous week totals? */
+							<<if $slaves[$i].relationshipTarget > 0>>
+								<<set _tempLover = getSlave($slaves[$i].relationshipTarget)>>
+								<<if ndef _tempLover>>@@.red;Error, relationshipTarget not found.@@<</if>>
+						<<elseif $slaves[$i].rivalryTarget > 0>>
+							<<set _tempRival = getSlave($slaves[$i].rivalryTarget)>>
+							<<if ndef _tempRival>>@@.red;Error, rivalryTarget not found.@@<</if>>
+						<<elseif $slaves[$i].subTarget > 0>>
+							<<set _tempSub = getSlave($slaves[$i].subTarget)>>
+							<<if ndef _tempSub>>@@.red;Error, subTarget not found.@@<</if>>
+						<</if>>
+						<<if (($slaves[$i].relationship == -3) || ($slaves[$i].relationship == -2)) && canImpreg($slaves[$i], $PC)>>
+							<<set $slaves[$i].pregSource = -1>>
+						<<elseif ($slaves[$i].relationship > 2) && canImpreg($slaves[$i], _tempLover)>> /* erection not needed for impregnation via consensual sex play (FWB or better) */
+							<<set $slaves[$i].pregSource = _tempLover.ID>>
+						<<elseif ($slaves[$i].subTarget != 0) && ($slaves[$i].assignment == "be a subordinate slave") && canAchieveErection(_tempSub) && canImpreg($slaves[$i], _tempSub)>> /* subordinate must have erection to impregnate target */
+							<<set $slaves[$i].pregSource = _tempSub.ID>>
+						<<elseif (random(1,100) > 95) && ($slaves[$i].rivalry > 2) && canAchieveErection(_tempRival) && canImpreg($slaves[$i], _tempRival)>> /* 5% chance to be raped and knocked up by bitter rival - erection needed */
+							Driven by the bitter rivalry between them, _tempRival.slaveName successfully overpowers $slaves[$i].slaveName and rapes $him, cumming deep in $his fertile <<if $slaves[$i].mpreg == 1>>asshole<<else>>pussy<</if>> whenever $he chooses. By the end of the week, $slaves[$i].slaveName is vowing revenge as $he regains confidence.
+							<<set $slaves[$i].pregSource = _tempRival.ID>>
+						<<elseif (random(1,100) > 60) && canImpreg($slaves[$i], $PC) && !["masturbation", "chastity"].includes($slaves[$i].releaseRules)>> /* still 40% chance of impregnation by PC */
+							<<set $slaves[$i].pregSource = -1>>
+						<<elseif (random(1,100) > 95) && ($slaves[$i].eggType == "human") && $slaves[$i].devotion <= 20>> /* 5% chance of impregnation by random citizen - TODO: make this optional for players who want random fathers from among their own slaves only */
+							<<set $slaves[$i].pregSource = -2>>
+						<<else>>
+							/* pick a random starting point in the slave array and iterate (wrapping around) until finding eligible father or coming back to starting point */
+							<<if $slaves.length == 1>>
+								<<if canImpreg($slaves[$i], $slaves[$i]) && _conceptionSeed > 95 && ($slaves[$i].releaseRules == "permissive" || $slaves[$i].releaseRules == "masturbation")>>
+									<<set $slaves[$i].pregSource = $slaves[$i].ID>>
 								<</if>>
-							<</for>>
+							<<elseif $slaves[$i].releaseRules == "permissive" || ($slaves[$i].devotion <= 20 && $slaves[$i].trust > 50) || $universalRulesConsent == 0>>
+								<<set _sourceSeed = random(0,$slaves.length-1)>><<set _tried = 0>>
+								<<for _m = _sourceSeed + 1; _m != _sourceSeed; _m++>>
+									<<if _m == $slaves.length>><<set _m = 0, _tried = 1>><</if>> /* wrap around */
+									<<if _m == _sourceSeed+1 && _tried == 1>><<break>><</if>> /* give up after a full loop */
+									<<if canImpreg($slaves[$i], $slaves[_m])>>
+										/* self-impregnation check */
+										<<if ($slaves[_m].ID == $slaves[$i].ID) && (_conceptionSeed <= 95)>>
+											<<continue>> /* 95% chance not to self-impregnate */
+										<</if>>
+										<<set $slaves[$i].pregSource = $slaves[_m].ID>> /* passed the checks above, so this is an eligible father */
+										<<break>>
+									<</if>>
+								<</for>>
+							<</if>>
 						<</if>>
 					<</if>>
 					<<if $slaves[$i].pregSource != 0>>
diff --git a/src/uncategorized/saRules.tw b/src/uncategorized/saRules.tw
index 929be655127..8c2cb717a75 100644
--- a/src/uncategorized/saRules.tw
+++ b/src/uncategorized/saRules.tw
@@ -3055,7 +3055,7 @@
 			<<if ($slaves[$i].attrKnown == 0)>>
 				<<if ($week-$slaves[$i].weekAcquired > 4) && $slaves[$i].energy > 20>>
 					<<set $slaves[$i].attrKnown = 1>>
-					<<if $assistantName == "your personal assistant">>Your personal assistant<<else>>$assistantName<</if>> has been monitoring $him as $he services customers, analyzing $his sexuality. It seems $he is
+					<<if $assistantName == "your personal assistant">>Your personal assistant<<else>>$assistantName<</if>> has been monitoring $him as $he studies, analyzing what topics $he tends to keep returning to. It seems $he is
 					<<saRulesAttractionDiscovery>>
 				<</if>>
 			<</if>>
diff --git a/src/uncategorized/slaveInteract.tw b/src/uncategorized/slaveInteract.tw
index 60520111b5d..cdf1a63f734 100644
--- a/src/uncategorized/slaveInteract.tw
+++ b/src/uncategorized/slaveInteract.tw
@@ -1466,7 +1466,7 @@ Aphrodisiacs: <span id="aphrodisiacs"><strong><<if $activeSlave.aphrodisiacs > 1
 
 <<if $cloningSystem == 1>>
 	<br>&nbsp;&nbsp;&nbsp;&nbsp;
-	<<link "Clone $him" "Cloning Workaround">><<set $returnTo = "main", $donatrix = $activeSlave>><</link>>
+	<<link "Clone $him" "Cloning Workaround">><<set $returnTo = "Main", $donatrix = $activeSlave>><</link>>
 <</if>>
 <<if $propOutcome == 1 && $arcologies[0].FSRestart != "unset">>
 	<<if $activeSlave.breedingMark == 0 && $activeSlave.fuckdoll == 0 && $activeSlave.eggType == "human" && isFertile($activeSlave)>>
diff --git a/src/uncategorized/storyCaption.tw b/src/uncategorized/storyCaption.tw
index 70200a14739..bec3fe24c95 100644
--- a/src/uncategorized/storyCaption.tw
+++ b/src/uncategorized/storyCaption.tw
@@ -610,6 +610,9 @@
 	<br>
 	<br><<link [[Wardrobe]]>><</link>>
 	<br><<if $dispensary>>[[Pharmaceutical Fabricator|Dispensary]]<</if>>
+	<br><<if $ImplantProductionUpgrade>>[[Implant Manufactory|Implant Manufactory]]<</if>>
+	<br><<if $organFarmUpgrade>>[[Organ Farm|Organ Farm]]<</if>>
+	<br><<if $geneticMappingUpgrade>>[[Gene Lab|Gene Lab]]<</if>>
 	<br><<if $rep >= 10000>>[[Black Market|The Black Market]]<</if>>
 	<br><br><br><br><br>
 <<elseif _Pass == "Manage Economy">>
@@ -658,6 +661,9 @@
 	<br>
 	<br><<link [[Wardrobe]]>><</link>>
 	<br><<if $dispensary>>[[Pharmaceutical Fabricator|Dispensary]]<</if>>
+	<br><<if $ImplantProductionUpgrade>>[[Implant Manufactory|Implant Manufactory]]<</if>>
+	<br><<if $organFarmUpgrade>>[[Organ Farm|Organ Farm]]<</if>>
+	<br><<if $geneticMappingUpgrade>>[[Gene Lab|Gene Lab]]<</if>>
 	<br><<if $rep >= 10000>>[[Black Market|The Black Market]]<</if>>
 	<br><br><br><br><br>
 
-- 
GitLab