From 2cc29547fad7305da75198b510086f2ff92ffc82 Mon Sep 17 00:00:00 2001
From: pregmodfan <pregmodfan@cock.li>
Date: Tue, 20 Feb 2018 23:04:39 +0200
Subject: [PATCH] boomerang slave, and some syntax sugar for new system

---
 src/js/wombJS.tw                            | 32 +++++++++++++++++++++
 src/pregmod/widgets/seBirthWidgets.tw       |  4 +--
 src/uncategorized/reBoomerang.tw            | 25 ++++++++++++++++
 src/uncategorized/slaveAssignmentsReport.tw |  2 +-
 src/uncategorized/slaveInteract.tw          |  4 +--
 src/utility/miscWidgets.tw                  |  4 +--
 6 files changed, 64 insertions(+), 7 deletions(-)

diff --git a/src/js/wombJS.tw b/src/js/wombJS.tw
index 6493fce9d2f..c48bbbc5153 100644
--- a/src/js/wombJS.tw
+++ b/src/js/wombJS.tw
@@ -191,3 +191,35 @@ window.WombGetVolume = function(actor) //most code from pregJS.tw with minor ada
     return wombSize;
 }
 
+window.WombUpdatePregVars = function(actor) {
+
+    actor.womb.sort(function (a, b){return b.age - a.age})
+    if (actor.womb.length > 0)
+    {
+        if (actor.preg > 0 && actor.womb[0].age > 0)
+        {
+            actor.preg = actor.womb[0].age;
+        }
+
+        actor.pregType = actor.womb.length;
+        
+        actor.bellyPreg = WombGetVolume(actor);
+
+    }
+
+}
+
+window.WombMinPreg = function(actor)
+{
+    actor.womb.sort(function (a, b){return b.age - a.age})
+
+    return actor.womb[actor.womb.length-1].age;
+}
+
+window.WombMaxPreg = function(actor)
+{
+    actor.womb.sort(function (a, b){return b.age - a.age})
+
+    return actor.womb[0].age;
+}
+
diff --git a/src/pregmod/widgets/seBirthWidgets.tw b/src/pregmod/widgets/seBirthWidgets.tw
index 15ebf9edcf4..9542199f5a7 100644
--- a/src/pregmod/widgets/seBirthWidgets.tw
+++ b/src/pregmod/widgets/seBirthWidgets.tw
@@ -875,7 +875,7 @@ All in all,
 		<<set WombImpregnate($slaves[$i], 1, $slaves[$i].pregSource, 1)>>
 	<</if>>
 	<<if $slaves[$i].broodmotherCountDown > 0 && $slaves[$i].womb.length > 0>> /*do we really finished?*/
-		<<set $slaves[$i].broodmotherCountDown = 38 - $slaves[$i].womb[$slaves[$i].womb.length-1].age >> /*age of most new (small) fetus used to correct guessing of remained time.*/
+		<<set $slaves[$i].broodmotherCountDown = 38 - WombMinPreg($slaves[$i]) >> /*age of most new (small) fetus used to correct guessing of remained time.*/
 		/*Really, next block can be changed so implant will can remain inside womb turned off indefinitely. With manual extraction in surgery. But for now I leave it as is.*/
 		<<if $slaves[$i].broodmotherCountDown == 0>>
 			$pronounCap also passed the implant making $object a broodmother alongside the afterbirth.
@@ -888,7 +888,7 @@ All in all,
 		<</if>>	
 	<</if>>
 <<elseif $slaves[$i].womb.length > 0>>/* Not broodmother, but still has babies, partial birth case.*/
-	<<set $slaves[$i].preg = $slaves[$i].womb[0].age>> /*now we use most advanced remained fetus as base.*/
+	<<set $slaves[$i].preg = WombMaxPreg($slaves[$i])>> /*now we use most advanced remained fetus as base.*/
 	<<set $slaves[$i].pregSource = $slaves[$i].womb[0].fatherID>> /*in such case it's good chance that there is different father also.*/
 <<else>>
 	<<set _tmp = lastPregRule($slaves[$i], $defaultRules)>>
diff --git a/src/uncategorized/reBoomerang.tw b/src/uncategorized/reBoomerang.tw
index 1e0c26c04c2..7aa00e58a68 100644
--- a/src/uncategorized/reBoomerang.tw
+++ b/src/uncategorized/reBoomerang.tw
@@ -16,6 +16,24 @@ brings up the relevant feeds. There's a naked body crumpled pathetically against
 
 <<set $activeSlave.collar = "none", $activeSlave.choosesOwnClothes = 0, $activeSlave.clothes = "no clothing", $activeSlave.buttplug = "none", $activeSlave.vaginalAccessory = "none", $activeSlave.dickAccessory = "none">>
 <<set $activeSlave.health = random(-40,-25)>>
+
+/* ------------------ pregnancy setup start here----------------- */
+
+<<set WombProgress($activeSlave, _pregWeeks)>> /* In all cases should be done */
+<<set WombUpdatePregVars($activeSlave)>>
+<<if $activeSlave.broodmother > 0>> /* Broomother implant is assumed as removed.*/
+	<<set $activeSlave.preg = -1, $activeSlave.birthsTotal += WombBirthReady($activeSlave, 37), $activeSlave.pregType = 0, $activeSlave.pregSource = 0, $activeSlave.pregWeek = 0, $activeSlave.pregKnown = 0, $activeSlave.broodmother == 0, $activeSlave.broodmotherFetuses = 0>>
+	<<set WombFlush($activeSlave)>>
+<<elseif WombBirthReady($activeSlave, 40) > 0 >> /* normal birth case, partial birthers not supported*/
+	<<set $activeSlave.preg = -1, $activeSlave.birthsTotal += WombBirthReady($activeSlave, 40), $activeSlave.pregType = 0, $activeSlave.pregSource = 0, $activeSlave.pregWeek = 0, $activeSlave.pregKnown = 0>>
+	<<set WombFlush($activeSlave)>>
+<<else>>/* still pregnant slave */
+	<<set $activeSlave.preg = WombMaxPreg($activeSlave)>> /*most ready fetus is a base*/
+	<<set $activeSlave.pregWeek = WombMaxPreg($activeSlave)>> /*most ready fetus is a base*/
+<</if>> 
+<<SetBellySize $activeSlave>> /*In any case it's useful to do.*/
+
+/* old code, commented out.
 <<if $activeSlave.broodmother > 0>>
 	<<set $activeSlave.preg = -1, $activeSlave.birthsTotal += $activeSlave.pregType, $activeSlave.pregType = 0, $activeSlave.pregSource = 0, $activeSlave.pregWeek = 0, $activeSlave.pregKnown = 0, $activeSlave.broodmother == 0>>
 	<<SetBellySize $activeSlave>>
@@ -28,6 +46,13 @@ brings up the relevant feeds. There's a naked body crumpled pathetically against
 	<</if>>
 	<<SetBellySize $activeSlave>>
 <</if>>
+*/
+
+/* ------------------ pregnancy setup end here----------------- 
+	As no broodmother cases in code below, it's no need to setup every case of impregnantion through new system. Backup mechanic will do it for normal pregnancies.
+*/
+
+
 <<if ($activeSlave.hStyle != "shaved" && $activeSlave.bald != 1)>>
 	<<if ($activeSlave.hLength < 150)>>
 		<<set $activeSlave.hLength += _weeks>>
diff --git a/src/uncategorized/slaveAssignmentsReport.tw b/src/uncategorized/slaveAssignmentsReport.tw
index 731bdda04ee..671c71182f2 100644
--- a/src/uncategorized/slaveAssignmentsReport.tw
+++ b/src/uncategorized/slaveAssignmentsReport.tw
@@ -336,7 +336,7 @@
 		<</if>>
 		<<if $slaves[$i].ovaryAge >= 47>>
 			<<set $slaves[$i].broodmotherOnHold = 1 >>
-			<<set $slaves[$i].broodmotherCountDown = 38-$slaves[$i].womb[$slaves[$i].womb.length-1].age>>
+			<<set $slaves[$i].broodmotherCountDown = 38 - WombMinPreg($slaves[$i])>>
 		<</if>>
 	<</if>>
 	<<set WombProgress($slaves[$i], _pregSpeed)>>
diff --git a/src/uncategorized/slaveInteract.tw b/src/uncategorized/slaveInteract.tw
index 4d5ee8af13f..a92531eaaa7 100644
--- a/src/uncategorized/slaveInteract.tw
+++ b/src/uncategorized/slaveInteract.tw
@@ -1060,7 +1060,7 @@ Contraception: <span id="fertility"><strong><<if $activeSlave.preg == -1>><<prin
 			| [[Give her a cesarean section|csec]]
 		<<elseif ($activeSlave.broodmother > 0)>>
 			<<if $activeSlave.broodmotherOnHold != 1>>
-				[[Turn off implant|Slave Interact][$activeSlave.broodmotherOnHold = 1, $activeSlave.broodmotherCountDown = 38-$activeSlave.womb[$activeSlave.womb.length-1].age]] 
+				[[Turn off implant|Slave Interact][$activeSlave.broodmotherOnHold = 1, $activeSlave.broodmotherCountDown = 38-WombMinPreg($activeSlave)]] 
 			<</if>>
 			<<if ($activeSlave.preg > 37)>>
 				| [[Induce mass childbirth|BirthStorm]]  
@@ -1104,7 +1104,7 @@ __Contraception__: <span id="fertility"><strong><<if $activeSlave.preg == -1>><<
 			| [[Give it a cesarean section|csec]]
 		<<elseif ($activeSlave.broodmother > 0)>>
 			<<if $activeSlave.broodmotherOnHold != 1>>
-				[[Turn off implant|Slave Interact][$activeSlave.broodmotherOnHold = 1, $activeSlave.broodmotherCountDown = 38-$activeSlave.womb[$activeSlave.womb.length-1].age]] 
+				[[Turn off implant|Slave Interact][$activeSlave.broodmotherOnHold = 1, $activeSlave.broodmotherCountDown = 38-WombMinPreg($activeSlave)]] 
 			<</if>>
 			<<if ($activeSlave.preg > 37)>>
 				| [[Induce mass childbirth|BirthStorm]]  
diff --git a/src/utility/miscWidgets.tw b/src/utility/miscWidgets.tw
index 29ae0d1fea7..c0b6db37348 100644
--- a/src/utility/miscWidgets.tw
+++ b/src/utility/miscWidgets.tw
@@ -679,7 +679,7 @@
 			| [[Give her a cesarean section|csec]]
 		<<elseif ($activeSlave.broodmother > 0)>>
 			<<if $activeSlave.broodmotherOnHold != 1>>
-				[[Turn off implant|Slave Interact][$activeSlave.broodmotherOnHold = 1, $activeSlave.broodmotherCountDown = 38-$activeSlave.womb[$activeSlave.womb.length-1].age]] 
+				[[Turn off implant|Slave Interact][$activeSlave.broodmotherOnHold = 1, $activeSlave.broodmotherCountDown = 38-WombMinPreg($activeSlave)]] 
 			<</if>>
 			<<if ($activeSlave.preg > 37)>>
 				| [[Induce mass childbirth|BirthStorm]]  
@@ -723,7 +723,7 @@
 			| [[Give it a cesarean section|csec]]
 		<<elseif ($activeSlave.broodmother > 0)>>
 			<<if $activeSlave.broodmotherOnHold != 1>>
-				[[Turn off implant|Slave Interact][$activeSlave.broodmotherOnHold = 1, $activeSlave.broodmotherCountDown = 38-$activeSlave.womb[$activeSlave.womb.length-1].age]] 
+				[[Turn off implant|Slave Interact][$activeSlave.broodmotherOnHold = 1, $activeSlave.broodmotherCountDown = 38-WombMinPreg($activeSlave)]] 
 			<</if>>
 			<<if ($activeSlave.preg > 37)>>
 				| [[Induce mass childbirth|BirthStorm]]  
-- 
GitLab