From eb2442a04d0539b53a1eecfadc3e6d20e652c337 Mon Sep 17 00:00:00 2001
From: humungusluver <82497-humungusluver@users.noreply.gitgud.io>
Date: Sun, 23 Feb 2025 18:57:31 -0500
Subject: [PATCH] handle rest of surgery

---
 js/medicine/surgery/addGenitals/addOvaries.js        |  6 ++++++
 .../surgery/addGenitals/asexualReproOvaries.js       |  3 +++
 js/medicine/surgery/addGenitals/freshOvaries.js      |  3 +++
 js/medicine/surgery/addGenitals/immortalOvaries.js   |  3 +++
 js/medicine/surgery/addGenitals/mpreg.js             |  3 +++
 js/medicine/surgery/genitals/mpregRemoved.js         |  3 +++
 js/medicine/surgery/genitals/preg.js                 |  3 +++
 js/medicine/surgery/genitals/pregRemove.js           |  3 +++
 src/facilities/surgery/surgeryPassageLower.js        |  2 +-
 src/js/statsChecker/statsChecker.js                  |  8 +++++---
 src/npc/surgery/surgery.js                           |  5 ++++-
 src/player/electiveSurgery.js                        | 12 ++++++++++++
 12 files changed, 49 insertions(+), 5 deletions(-)

diff --git a/js/medicine/surgery/addGenitals/addOvaries.js b/js/medicine/surgery/addGenitals/addOvaries.js
index 65ed2767854..4432b54dd5e 100644
--- a/js/medicine/surgery/addGenitals/addOvaries.js
+++ b/js/medicine/surgery/addGenitals/addOvaries.js
@@ -97,6 +97,9 @@ App.Medicine.Surgery.Procedures.OFAddOvaries = class extends App.Medicine.Surger
 				this._slave.pubertyXX = 1;
 			}
 		}
+		if (V.menstruation === 1) {
+			this._slave.fertPeak = 1;
+		}
 
 		if (this.eggType === "human") {
 			return this._assemble(new App.Medicine.Surgery.Reactions.AddOvaries());
@@ -147,6 +150,9 @@ App.Medicine.Surgery.Procedures.OFReplaceOvaries = class extends App.Medicine.Su
 				this._slave.pubertyXX = 1;
 			}
 		}
+		if (V.menstruation === 1) {
+			this._slave.fertPeak = 1;
+		}
 
 		if (this.eggType === "human") {
 			return this._assemble(new App.Medicine.Surgery.Reactions.AddOvaries());
diff --git a/js/medicine/surgery/addGenitals/asexualReproOvaries.js b/js/medicine/surgery/addGenitals/asexualReproOvaries.js
index 737aa95b212..5b2b1135037 100644
--- a/js/medicine/surgery/addGenitals/asexualReproOvaries.js
+++ b/js/medicine/surgery/addGenitals/asexualReproOvaries.js
@@ -57,6 +57,9 @@ App.Medicine.Surgery.Procedures.OFAsexualReproOvaries = class extends App.Medici
 	apply(cheat) {
 		if (this._slave.preg < -1) {
 			this._slave.preg = 0;
+			if (V.menstruation === 1) {
+				this._slave.fertPeak = 1;
+			}
 		}
 		this._slave.eggType = "human";
 		this._slave.pregData = _.cloneDeep(App.Data.misc.pregData.human);
diff --git a/js/medicine/surgery/addGenitals/freshOvaries.js b/js/medicine/surgery/addGenitals/freshOvaries.js
index ec557c0c796..8c9d34ef003 100644
--- a/js/medicine/surgery/addGenitals/freshOvaries.js
+++ b/js/medicine/surgery/addGenitals/freshOvaries.js
@@ -50,6 +50,9 @@ App.Medicine.Surgery.Procedures.OFFreshOvaries = class extends App.Medicine.Surg
 				this._slave.pubertyXX = 1;
 			}
 		}
+		if (V.menstruation === 1) {
+			this._slave.fertPeak = 1;
+		}
 		return this._assemble(new App.Medicine.Surgery.Reactions.FreshOvaries());
 	}
 };
diff --git a/js/medicine/surgery/addGenitals/immortalOvaries.js b/js/medicine/surgery/addGenitals/immortalOvaries.js
index b62335ba319..3fbeb98b7cf 100644
--- a/js/medicine/surgery/addGenitals/immortalOvaries.js
+++ b/js/medicine/surgery/addGenitals/immortalOvaries.js
@@ -57,6 +57,9 @@ App.Medicine.Surgery.Procedures.OFImmortalOvaries = class extends App.Medicine.S
 				this._slave.pubertyXX = 1;
 			}
 		}
+		if (V.menstruation === 1) {
+			this._slave.fertPeak = 1;
+		}
 		return this._assemble(new App.Medicine.Surgery.Reactions.ImmortalOvaries());
 	}
 };
diff --git a/js/medicine/surgery/addGenitals/mpreg.js b/js/medicine/surgery/addGenitals/mpreg.js
index a70a347e259..adcb211ce1e 100644
--- a/js/medicine/surgery/addGenitals/mpreg.js
+++ b/js/medicine/surgery/addGenitals/mpreg.js
@@ -66,6 +66,9 @@ App.Medicine.Surgery.Procedures.OFAddMPreg = class extends App.Medicine.Surgery.
 				this._slave.pubertyXX = 1;
 			}
 		}
+		if (V.menstruation === 1) {
+			this._slave.fertPeak = 1;
+		}
 		return this._assemble(new App.Medicine.Surgery.Reactions.AddMPreg());
 	}
 };
diff --git a/js/medicine/surgery/genitals/mpregRemoved.js b/js/medicine/surgery/genitals/mpregRemoved.js
index 319dbf22562..d5416c61319 100644
--- a/js/medicine/surgery/genitals/mpregRemoved.js
+++ b/js/medicine/surgery/genitals/mpregRemoved.js
@@ -24,6 +24,9 @@ App.Medicine.Surgery.Procedures.RemoveMPreg = class extends App.Medicine.Surgery
 		this._slave.mpreg = 0;
 		this._slave.ovaImplant = OvaryImplantType.NONE;
 		this._slave.wombImplant = "none";
+		if (V.menstruation === 1) {
+			this._slave.fertPeak = 1;
+		}
 		return this._assemble(new App.Medicine.Surgery.Reactions.MPregRemoved());
 	}
 };
diff --git a/js/medicine/surgery/genitals/preg.js b/js/medicine/surgery/genitals/preg.js
index a1c108538d2..078a1132dd3 100644
--- a/js/medicine/surgery/genitals/preg.js
+++ b/js/medicine/surgery/genitals/preg.js
@@ -77,6 +77,9 @@ App.Medicine.Surgery.Procedures.ImplantPregGenerator = class extends App.Medicin
 		this._slave.broodmother = 1;
 		this._slave.broodmotherFetuses = 1;
 		this._slave.pregControl = "none";
+		if (V.menstruation === 1) {
+			this._slave.fertPeak = 0;
+		}
 		return this._assemble(new App.Medicine.Surgery.Reactions.Preg());
 	}
 };
diff --git a/js/medicine/surgery/genitals/pregRemove.js b/js/medicine/surgery/genitals/pregRemove.js
index 8ed5c2e3f45..ad56e6259e9 100644
--- a/js/medicine/surgery/genitals/pregRemove.js
+++ b/js/medicine/surgery/genitals/pregRemove.js
@@ -47,6 +47,9 @@ App.Medicine.Surgery.Procedures.RemovePregGenerator = class extends App.Medicine
 		this._slave.broodmotherFetuses = 0;
 		this._slave.broodmotherOnHold = 0;
 		this._slave.pregControl = "none";
+		if (V.menstruation === 1) {
+			this._slave.fertPeak = 1;
+		}
 		return this._assemble(new App.Medicine.Surgery.Reactions.PregRemove());
 	}
 };
diff --git a/src/facilities/surgery/surgeryPassageLower.js b/src/facilities/surgery/surgeryPassageLower.js
index 1ff5e3e4cb8..4926fe32a8f 100644
--- a/src/facilities/surgery/surgeryPassageLower.js
+++ b/src/facilities/surgery/surgeryPassageLower.js
@@ -387,7 +387,7 @@ App.UI.surgeryPassageLower = function(slave, refresh, cheat = false) {
 						App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]);
 					} else if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && FutureSocieties.isActive('FSRestart')) {
 						App.UI.DOM.appendNewElement("div", el, `${He} is protected from extreme surgery`, ["choices", "note"]);
-					} else if (isFertile(slave) && slave.ovaryAge <= 46) {
+					} else if (isFertile(slave, true) && slave.ovaryAge <= 46) {
 						r.push(`${He} could be made into a broodmother.`);
 						linkArray.push(App.Medicine.Surgery.makeLink(
 							new App.Medicine.Surgery.Procedures.ImplantPregGenerator(slave),
diff --git a/src/js/statsChecker/statsChecker.js b/src/js/statsChecker/statsChecker.js
index 78f31773730..f72785b623f 100644
--- a/src/js/statsChecker/statsChecker.js
+++ b/src/js/statsChecker/statsChecker.js
@@ -600,11 +600,13 @@ globalThis.canGetPregnant = function(slave) {
 	return false;
 };
 
-/** contraceptives (.preg === -1) do not negate this function
+/**
+ * contraceptives (.preg === -1) do not negate this function
  * @param {FC.HumanState} slave
+ * @param {boolean} ignoreCycle ignoreCycle=true will not take into account menstruation
  * @returns {boolean}
  */
-globalThis.isFertile = function(slave) {
+globalThis.isFertile = function(slave, ignoreCycle=false) {
 	if (!slave) {
 		return null;
 	}
@@ -636,7 +638,7 @@ globalThis.isFertile = function(slave) {
 			}
 		}
 		// Menstruation route.
-		if (V.menstruation === 1 && slave.fertPeak > 0 ) {
+		if (!ignoreCycle && V.menstruation === 1 && slave.fertPeak > 0 ) {
 			return false;
 		}
 		return true;
diff --git a/src/npc/surgery/surgery.js b/src/npc/surgery/surgery.js
index 5f6e3966780..29ea21f03c3 100644
--- a/src/npc/surgery/surgery.js
+++ b/src/npc/surgery/surgery.js
@@ -561,7 +561,10 @@ globalThis.surgeryAmp = function(slave, part, cheat = false) {
 			}
 			if (slave.drugs === "clitoris enhancement" || slave.drugs === "intensive clitoris enhancement") {
 				slave.drugs = "no drugs";
-			}			
+			}
+			if (V.menstruation === 1) {
+				this._slave.fertPeak = 1;
+			}
 			surgeryDamage(slave, 20, cheat);
 			break;
 		case "voicebox":
diff --git a/src/player/electiveSurgery.js b/src/player/electiveSurgery.js
index 731891d40db..5e9627d4ea0 100644
--- a/src/player/electiveSurgery.js
+++ b/src/player/electiveSurgery.js
@@ -3174,6 +3174,9 @@ App.UI.electiveSurgery = function() {
 			V.PC.preg = 0;
 			V.PC.ovaImplant = 0;
 			V.PC.wombImplant = "none";
+			if (V.menstruation === 1) {
+				this._slave.fertPeak = 1;
+			}
 			cashX(forceNeg(50000), "PCmedical");
 		})));
 		return el;
@@ -3190,6 +3193,9 @@ App.UI.electiveSurgery = function() {
 		el.append(App.UI.DOM.makeElement("div", surgeryLink("Fix your fertility concerns", "replaceOvaries", () => {
 			healthDamage(V.PC, 10);
 			V.PC.preg = 0;
+			if (V.menstruation === 1) {
+				this._slave.fertPeak = 1;
+			}
 			cashX(forceNeg(applyDiscount(500)), "PCmedical");
 		})));
 		return el;
@@ -3213,6 +3219,9 @@ App.UI.electiveSurgery = function() {
 				V.PC.eggType = "human";
 				V.PC.ovaImplant = 0;
 				V.PC.wombImplant = "none";
+				if (V.menstruation === 1) {
+					this._slave.fertPeak = 1;
+				}
 				cashX(forceNeg(50000), "PCmedical");
 			})));
 		}
@@ -3233,6 +3242,9 @@ App.UI.electiveSurgery = function() {
 			V.PC.ovaries = 1;
 			V.PC.preg = 0;
 			V.PC.eggType = "human";
+			if (V.menstruation === 1) {
+				V.PC.fertPeak = 1;
+			}
 			cashX(forceNeg(50000), "PCmedical");
 		}));
 		el.append(App.UI.DOM.makeElement("div", App.UI.DOM.generateLinksStrip(linkArray)));
-- 
GitLab