From f0f3fc0f0c46d38b53061b54516b7d992c8655a4 Mon Sep 17 00:00:00 2001
From: Pregmodder <pregmodder@gmail.com>
Date: Sat, 11 Feb 2023 13:51:46 -0500
Subject: [PATCH] fix + isPlayerHorny scope change

---
 CHANGELOG.md                                  |  3 +++
 src/endWeek/economics/persBusiness.js         |  4 ++--
 .../player/prLongTermPhysicalEffects.js       |  2 +-
 src/endWeek/saLongTermPhysicalEffects.js      |  2 +-
 src/js/SlaveState.js                          |  4 ++++
 src/js/statsChecker/statsChecker.js           | 20 +++++++++++++++++++
 src/js/utilsPC.js                             | 20 -------------------
 src/player/desc/pLongBoobs.js                 |  2 +-
 src/player/desc/pLongCrotch.js                |  2 +-
 src/player/personalAttentionSelect.js         |  2 +-
 10 files changed, 34 insertions(+), 27 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0fe5624e8a8..f9cefc4a4e7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
 ## Unreleased
 
 * added isVirile() function
+* added isHorny() function (check for sources of constant arousal)
+* added aggrosperm, livestock, and progenitor gene mods
+* added potency genetic quirk
 * vasectomies cut sperm release
 * fixes
 
diff --git a/src/endWeek/economics/persBusiness.js b/src/endWeek/economics/persBusiness.js
index d0abc67dccc..f7ec3e84077 100644
--- a/src/endWeek/economics/persBusiness.js
+++ b/src/endWeek/economics/persBusiness.js
@@ -14,7 +14,7 @@ App.EndWeek.personalBusiness = function() {
 	let upgradeCount;
 	let dataGain;
 	let hindranceMod = isHinderedDegree(V.PC);
-	const nymphoMod = isPlayerHorny(V.PC) ? .75 : 1;
+	const nymphoMod = isHorny(V.PC) ? .75 : 1;
 	const {girlP} = getPronouns(V.PC).appendSuffix("P");
 	if (V.useTabs === 0) {
 		App.UI.DOM.appendNewElement("h2", el, `Personal Business`);
@@ -677,7 +677,7 @@ App.EndWeek.personalBusiness = function() {
 		let soldVirginity = false;
 		let clients = random(2, 4);
 		// This could probably be replaced by .need?
-		if (isPlayerHorny(V.PC)) {
+		if (isHorny(V.PC)) {
 			clients *= 3;
 		} else {
 			clients += (Math.round(V.PC.energy / 20) - 1);
diff --git a/src/endWeek/player/prLongTermPhysicalEffects.js b/src/endWeek/player/prLongTermPhysicalEffects.js
index b4b994b53ab..85635ff42bf 100644
--- a/src/endWeek/player/prLongTermPhysicalEffects.js
+++ b/src/endWeek/player/prLongTermPhysicalEffects.js
@@ -930,7 +930,7 @@ App.EndWeek.Player.longTermPhysicalEffects = function(PC = V.PC) {
 	}
 
 	function bellyEffects() {
-		if (PC.pregAdaptation > 40 && (PC.belly < 5000 && PC.preg < 1 && PC.pregWeek === 0) && PC.geneticQuirks.uterineHypersensitivity !== 2 && PC.geneMods.livestock !== 1 && PC.geneMods.geneMods.progenitor !== 1) {
+		if (PC.pregAdaptation > 40 && (PC.belly < 5000 && PC.preg < 1 && PC.pregWeek === 0) && PC.geneticQuirks.uterineHypersensitivity !== 2 && PC.geneMods.livestock !== 1 && PC.geneMods.progenitor !== 1) {
 			if (PC.pregAdaptation > 1001) { // TODO: Compact, or expand useless branches below
 				PC.pregAdaptation--;
 			} else if (PC.pregAdaptation >= 751 && PC.pregAdaptation < 1000) {
diff --git a/src/endWeek/saLongTermPhysicalEffects.js b/src/endWeek/saLongTermPhysicalEffects.js
index 56da9882819..bd824d82c78 100644
--- a/src/endWeek/saLongTermPhysicalEffects.js
+++ b/src/endWeek/saLongTermPhysicalEffects.js
@@ -534,7 +534,7 @@ App.SlaveAssignment.longTermPhysicalEffects = function saLongTermPhysicalEffects
 			const pa = V.personalAttention.slaves.find((s) => s.ID === slave.ID); // This can probably be improved.
 			if (pa.objective === "spar") {
 				if (canWalk(V.PC) && canWalk(slave) && hasAnyArms(V.PC) && hasAnyArms(slave) && canSee(slave) && slave.fetish !== "mindbroken") {
-					if (isPlayerHorny(V.PC)) {
+					if (isHorny(V.PC)) {
 						if (slave.energy > 95 || slave.aphrodisiacs > 0 || slave.inflationType === "aphrodisiac") {
 							slave.need = 0;
 						}
diff --git a/src/js/SlaveState.js b/src/js/SlaveState.js
index d34bd27eee8..cb7b4bbd0a9 100644
--- a/src/js/SlaveState.js
+++ b/src/js/SlaveState.js
@@ -1401,6 +1401,10 @@ App.Entity.SlaveState = class SlaveState {
 		 * See Pregnancy Control section for more.
 		 */
 		this.pregType = 0;
+		/**
+		 * For function compatibility.
+		 */
+		this.pregMood = 0;
 		/**
 		 * How adapted a slave's body is to being pregnant. 1 pregAdaption supports 1000cc of pregnancy. A normal singleton pregnancy is about 15 pregAdaption.
 		 */
diff --git a/src/js/statsChecker/statsChecker.js b/src/js/statsChecker/statsChecker.js
index 2279b4449ee..00fb514fe54 100644
--- a/src/js/statsChecker/statsChecker.js
+++ b/src/js/statsChecker/statsChecker.js
@@ -1175,3 +1175,23 @@ globalThis.milkFlavor = function(slave) {
 globalThis.canBeDeflowered = function(slave) {
 	return (slave.vagina === 0 && canDoVaginal(slave)) || (slave.anus === 0 && canDoAnal(slave));
 };
+
+/**
+ * A consolidated function for checking if an actor is currently aroused.
+ * @param {App.Entity.HumanState} actor
+ * @returns {boolean}
+ */
+globalThis.isHorny = function(actor) {
+	return ((actor.prostate > 0 && actor.preg > 0 && actor.preg > actor.pregData.normalBirth * .75) ||
+		(actor.preg > 0 && actor.preg > actor.pregData.normalBirth * .66 && actor.pregMood === 2) ||
+		(actor.geneticQuirks.uterineHypersensitivity === 2 &&
+			(actor.bellyPreg >= 10000) ||
+			(actor.belly > (actor.pregAdaptation * 1000)) ||
+			(actor.wombImplant === "restraint" && actor.belly >= 400000)
+		) ||
+		// (actor.need > 0) ||
+		(actor.energy > 95) ||
+		(actor.aphrodisiacs > 0) ||
+		(actor.inflationType === "aphrodisiac") ||
+		(actor.drugs === "priapism agents"));
+};
diff --git a/src/js/utilsPC.js b/src/js/utilsPC.js
index f7612fea45d..abde58fc22d 100644
--- a/src/js/utilsPC.js
+++ b/src/js/utilsPC.js
@@ -942,26 +942,6 @@ globalThis.canEatFood = function(actor) {
 	return true;
 };
 
-/**
- * A consolidated function for checking if the player is currently aroused.
- * @param {App.Entity.PlayerState} actor
- * @returns {boolean}
- */
-globalThis.isPlayerHorny = function(actor) {
-	return ((actor.prostate > 0 && actor.preg > 0 && actor.preg > actor.pregData.normalBirth * .75) ||
-		(actor.preg > 0 && actor.preg > actor.pregData.normalBirth * .66 && actor.pregMood === 2) ||
-		(actor.geneticQuirks.uterineHypersensitivity === 2 &&
-			(actor.bellyPreg >= 10000) ||
-			(actor.belly > (actor.pregAdaptation * 1000)) ||
-			(actor.wombImplant === "restraint" && actor.belly >= 400000)
-		) ||
-		// (actor.need > 0) ||
-		(actor.energy > 95) ||
-		(actor.aphrodisiacs > 0) ||
-		(actor.inflationType === "aphrodisiac") ||
-		(actor.drugs === "priapism agents"));
-};
-
 /**
  * Param takes "classic" PC careers, and then function checks data to see if PC has that classic career or a 4.0 equivalent.
  * @param {"wealth"|"escort"|"servant"|"gang"|"BlackHat"|"capitalist"|"mercenary"|"engineer"|"medicine"|"slaver"|"celebrity"|"arcology owner"} category
diff --git a/src/player/desc/pLongBoobs.js b/src/player/desc/pLongBoobs.js
index a15309f5834..753223aa33d 100644
--- a/src/player/desc/pLongBoobs.js
+++ b/src/player/desc/pLongBoobs.js
@@ -183,7 +183,7 @@ App.Desc.Player.boobs = function(PC = V.PC) {
 	function nipples() {
 		const r = [];
 
-		if (isPlayerHorny(PC)) {
+		if (isHorny(PC)) {
 			switch (PC.nipples) {
 				case "tiny":
 					r.push(`You have stiff little nubs ${areolae()}.`);
diff --git a/src/player/desc/pLongCrotch.js b/src/player/desc/pLongCrotch.js
index ddea77aad0a..64e17f6304d 100644
--- a/src/player/desc/pLongCrotch.js
+++ b/src/player/desc/pLongCrotch.js
@@ -3,7 +3,7 @@ App.Desc.Player.crotch = function(PC = V.PC) {
 	const {girlP} = getPronouns(PC).appendSuffix('P');
 	const legs = hasBothLegs(PC) ? "legs" : "leg";
 	const hands = hasBothArms(PC) ? "hands" : "hand";
-	const isAroused = isPlayerHorny(PC);
+	const isAroused = isHorny(PC);
 	const virile = isVirile(PC);
 	const cumTotal = (cumAmount(PC) / 70) || 0;
 	const foreskinRatio = (PC.foreskin - PC.dick);
diff --git a/src/player/personalAttentionSelect.js b/src/player/personalAttentionSelect.js
index b62082d7ab4..57e5b4694cc 100644
--- a/src/player/personalAttentionSelect.js
+++ b/src/player/personalAttentionSelect.js
@@ -579,7 +579,7 @@ App.UI.Player.personalAttention = function() {
 
 				// HORNY
 				/*
-				if (isPlayerHorny(V.PC)) {
+				if (isHorny(V.PC)) {
 					links.push(attentionLink(i, `Fuck ${him} senseless`, "ravish"));
 				}
 				*/
-- 
GitLab