diff --git a/devNotes/VersionChangeLog-Premod+LoliMod.txt b/devNotes/VersionChangeLog-Premod+LoliMod.txt index 9d28de2862986324e9ccfc76d65cb7f7e75074b3..7abdece0982c0e665d5e1437fe7edc2fb4e5ef89 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 1d7857abdbb75635e09ca0b28b93946af55b1e0a..e9f6b01d312b451c1ff2ad9119d8e2c9f44b00fc 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 ee754659331ad6dc875fb7fec9d03b554ae5d8e4..cb5f39d48b9de1cb6a0020434e3af91956258154 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 7ee8f3bed3ef9388129a6699c12351144b94008d..ec4e8c772ec10e7252f0f345841e1dcf6b720e82 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 27a865a65ede8ca376bb23ece3b86089ef1bbb0e..049d3c07a025d4097d5072b3b63013372a65add0 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 2443056b4c2fabc9064e126fdbe6ec0579b74852..6ec794cb8ec7e72e8028f0e619a07499ebd269cf 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 1fe53a23f93593dcfcca5dc2c729bc05aa6838f9..27f9a4bd00fa5b705eff1871b073710d6ca81656 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 e4f28b253dcea64560f7eb63da7f066d4d1be38f..c5feb381bffc96af3f304fec35afa92994141c70 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 99001fb271c0587167eda36532e6d1e3df5d533e..6c66291ada2d84319bc5db871b7987efd6a503e2 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 6aa3a2ac0be689209fa6a737b6a26c5aa9166877..3d86806f35159943e507bde118110a3b0b52621f 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 929be6551276844c8487d3d36d11286f585868be..8c2cb717a752af59c7706bb6869d188be8c35e66 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 60520111b5d8f2a2ca826275002326293d6906ab..cdf1a63f73428e11e435de12c3ba6c3a3fbc887e 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> - <<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 70200a14739e20759985ecbe2fc9be7b5196f5e0..bec3fe24c95687672dbf25200550810d424a6c2f 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>