diff --git a/src/endWeek/player/prPregnancy.js b/src/endWeek/player/prPregnancy.js index d64b59e3fccabaaeb7f1e69995c2805c263dbdf7..7e8ac6f35a90f60c627e2be970a17d7729b6f332 100644 --- a/src/endWeek/player/prPregnancy.js +++ b/src/endWeek/player/prPregnancy.js @@ -471,10 +471,10 @@ App.EndWeek.Player.pregnancy = function(PC = V.PC) { function impregnation() { if (PC.vagina === 0 || (PC.anus === 0 && PC.mpreg > 0)) { // You aren't putting out. - if (isVirile(PC) && PC.geneMods.aggressiveSperm === 1 && canFemImpreg(PC, PC)) { + if (PC.geneMods.aggressiveSperm === 1) { // But ejaculating with the sperm mod can result in splashback. More sex, more chances. if (random(1, 100) > (99 - (PC.energy / 2))) { - knockMeUp(PC, 0, 2, -1); // 0% chance is correct. Gene mod adds 75% in knockMeUp(). + tryKnockMeUp(PC, 0, 2, PC); // 0% chance is correct. Gene mod adds 75% in tryKnockMeUp(). } } } else if (random(1, 100) > (70 - (V.reproductionFormula * 10))) { @@ -515,29 +515,29 @@ App.EndWeek.Player.pregnancy = function(PC = V.PC) { return weight; }; - let dadHash; + let eligibleSlaves; if (V.policies.sexualOpenness === 1) { - dadHash = V.slaves.filter(s => canImpreg(V.PC, s) && App.Utils.sexAllowed(V.PC, s) && isSlaveAvailable(s) && canAchieveErection(s) && s.devotion > 20 && raceIsAcceptable); + eligibleSlaves = V.slaves.filter(s => canImpreg(V.PC, s) && App.Utils.sexAllowed(V.PC, s) && isSlaveAvailable(s) && canAchieveErection(s) && s.devotion > 20 && raceIsAcceptable); } else { - dadHash = V.slaves.filter(s => canImpreg(V.PC, s) && isSlaveAvailable(s) && s.toyHole === "dick"); + eligibleSlaves = V.slaves.filter(s => canImpreg(V.PC, s) && isSlaveAvailable(s) && s.toyHole === "dick"); } - dadHash.reduce((acc, cur) => Object.assign(acc, {[cur.ID]: score(cur)}), {}); - const chosenDadID = hashChoice(dadHash); - if (chosenDadID) { - knockMeUp(PC, 100, 2, chosenDadID); + const dadHash = eligibleSlaves.reduce((acc, cur, i) => Object.assign(acc, {[i]: score(cur)}), {}); + const chosenDadIndex = hashChoice(dadHash); + if (chosenDadIndex) { + tryKnockMeUp(PC, 100, 2, eligibleSlaves[chosenDadIndex]); } } if (canGetPregnant(PC) && !onBedRest(PC, true) && !isPCCareerInCategory("servant")) { // Sperm mod leavings around the penthouse. Gives servants more of a point too. - let slobs = V.slaves.filter(s => canFemImpreg(PC, s) && isSlaveAvailable(s) && s.geneMods.aggressiveSperm === 1 && (s.fetish === "mindbroken" || s.energy > 95 || (s.devotion < -20 && s.trust > 20) || (s.intelligence + s.intelligenceImplant < -10))); + let slobs = V.slaves.filter(s => isSlaveAvailable(s) && s.geneMods.aggressiveSperm === 1 && (s.fetish === "mindbroken" || s.energy > 95 || (s.devotion < -20 && s.trust > 20) || (s.intelligence + s.intelligenceImplant < -10))); if (slobs.length > (totalServantCapacity() / 5)) { - knockMeUp(PC, -50, 2, slobs.random()); + tryKnockMeUp(PC, -50, 2, slobs.random()); } } } function autoImpregnation() { - knockMeUp(PC, 100, 2, PC.ID); + tryKnockMeUp(PC, 100, 2, PC); if (PC.geneticQuirks.superfetation === 2 && PC.pregKnown === 1) { if (V.geneticMappingUpgrade === 0 && PC.counter.birthsTotal === 0) { r.push(`You are wracked with frequent spontaneous orgasms from your asexual reproduction modifications despite already being pregnant.`); diff --git a/src/js/pregJS.js b/src/js/pregJS.js index 8c27ea85d5ad03512ab2ec84c37ca4aff4889d6b..6b6136b3294cab58f4a7f4362de3f3ba1c1f8e88 100644 --- a/src/js/pregJS.js +++ b/src/js/pregJS.js @@ -528,9 +528,9 @@ globalThis.tryKnockMeUp = function(mother, chance, hole, father) { if (mother.ID === -1) { /* r += "<span class="lime">You have gotten pregnant.</span>"; */ } else { - const {him} = getPronouns(mother); + const {He, him} = getPronouns(mother); if (father.ID === -1) { - r += `<span class="lime">You have gotten ${him} pregnant.</span>`; + r += `<span class="lime">${He} has become pregnant.</span>`; } else { r += `<span class="lime">${father.slaveName} has gotten ${him} pregnant.</span>`; } diff --git a/src/js/sexActsJS.js b/src/js/sexActsJS.js index 61fb5d1e0c91728fb25d54728a792b838cdd37e0..bc5183d404c853220675e15c5414502aae02878b 100644 --- a/src/js/sexActsJS.js +++ b/src/js/sexActsJS.js @@ -29,36 +29,36 @@ globalThis.VCheck = (function() { let r = ''; setScopedPronouns(slave); - if (canDoAnal(slave) && slave.anus === 0) { - r += `<span class="lime">This breaks in ${slave.slaveName}'s virgin ass.</span> `; - if (slave.devotion > 50 || slave.career === "a slave since birth") { - r += `Since it's ${his} first time, you gently ease yourself into ${his} butthole and gradually increase the intensity of your thrusts. Before long ${he}'s moaning loudly as you continue working away at ${his} butthole. `; - if (slave.tankBaby === 2) { - r += `${He} thinks of losing ${his} anal virginity to ${his} ${getWrittenTitle(slave)} a <span class="hotpink">necessity.</span> ${He} expects ${his} asshole to be seeing a lot more attention now.`; - } else { - r += `${He} thinks of losing ${his} anal virginity to you as a <span class="hotpink">connection</span> with ${his} beloved ${getWrittenTitle(slave)}. `; - if ((slave.fetishKnown && slave.fetish === "buttslut") || (slave.energy > 95) || (slave.attrXX >= 85 && V.PC.dick === 0)) { - r += `${He} can't wait to be fucked in the ass by you again.`; + if (canDoAnal(slave)) { + if (slave.anus === 0) { + r += `<span class="lime">This breaks in ${slave.slaveName}'s virgin ass.</span> `; + if (slave.devotion > 50 || slave.career === "a slave since birth") { + r += `Since it's ${his} first time, you gently ease yourself into ${his} butthole and gradually increase the intensity of your thrusts. Before long ${he}'s moaning loudly as you continue working away at ${his} butthole. `; + if (slave.tankBaby === 2) { + r += `${He} thinks of losing ${his} anal virginity to ${his} ${getWrittenTitle(slave)} a <span class="hotpink">necessity.</span> ${He} expects ${his} asshole to be seeing a lot more attention now.`; } else { - r += `${He} looks forward to having ${his} asshole fucked by you again.`; + r += `${He} thinks of losing ${his} anal virginity to you as a <span class="hotpink">connection</span> with ${his} beloved ${getWrittenTitle(slave)}. `; + if ((slave.fetishKnown && slave.fetish === "buttslut") || (slave.energy > 95) || (slave.attrXX >= 85 && V.PC.dick === 0)) { + r += `${He} can't wait to be fucked in the ass by you again.`; + } else { + r += `${He} looks forward to having ${his} asshole fucked by you again.`; + } } + slave.devotion += 4; + } else if (slave.devotion > 20) { + r += `Since it's ${his} first time, you gently ease yourself into ${his} butthole and gradually increase the intensity of your thrusts. ${His} moans become louder and louder as you continue working away at ${his} butthole. ${He} accepts the pain and humiliation of anal sex as part of ${his} sexual servitude, though ${he} hopes that ${his} next time will be less painful.`; + } else if (slave.devotion >= -20) { + r += `You force yourself into ${his} butthole. ${He} sobs and cries with disgust while you continue thrusting into ${his} ass. ${He} <span class="gold">fears</span> ${his} next anal sex, remembering the pain of losing ${his} anal virginity. ${He} dreads having ${his} ass violated by you again.`; + slave.trust -= 5; + } else { + r += `You force yourself into ${his} butthole. ${He} sobs and cries with disgust while you continue thrusting into ${his} ass. ${He} <span class="mediumorchid">hates</span> and <span class="gold">fears</span> you for violating ${his} virgin butt. ${He} dreads having ${his} ass fucked by you again.`; + slave.trust -= 5; + slave.devotion -= 5; } - slave.devotion += 4; - } else if (slave.devotion > 20) { - r += `Since it's ${his} first time, you gently ease yourself into ${his} butthole and gradually increase the intensity of your thrusts. ${His} moans become louder and louder as you continue working away at ${his} butthole. ${He} accepts the pain and humiliation of anal sex as part of ${his} sexual servitude, though ${he} hopes that ${his} next time will be less painful.`; - } else if (slave.devotion >= -20) { - r += `You force yourself into ${his} butthole. ${He} sobs and cries with disgust while you continue thrusting into ${his} ass. ${He} <span class="gold">fears</span> ${his} next anal sex, remembering the pain of losing ${his} anal virginity. ${He} dreads having ${his} ass violated by you again.`; - slave.trust -= 5; - } else { - r += `You force yourself into ${his} butthole. ${He} sobs and cries with disgust while you continue thrusting into ${his} ass. ${He} <span class="mediumorchid">hates</span> and <span class="gold">fears</span> you for violating ${his} virgin butt. ${He} dreads having ${his} ass fucked by you again.`; - slave.trust -= 5; - slave.devotion -= 5; + slave.anus = 1; } - slave.anus = 1; - } - if (canDoAnal(slave)) { - if (canImpreg(slave, V.PC)) { - knockMeUp(slave, 10, 1, -1); + if (canPenetrate(V.PC)) { + tryKnockMeUp(slave, 10, 1, V.PC); } seX(slave, "anal", V.PC, "penetrative", times); } @@ -74,37 +74,37 @@ globalThis.VCheck = (function() { let r = ''; setScopedPronouns(slave); - if (canDoVaginal(slave) && slave.vagina === 0) { - r += `<span class="lime">This breaks in ${slave.slaveName}'s virgin pussy.</span> `; - if (slave.devotion > 50 || slave.career === "a slave since birth") { - r += `You ease yourself into ${his} pussy, since it's ${his} first time, then gradually speed up your thrusts while ${he} slowly learns to move ${his} hips along with you. ${He} moans loudly. `; - if (slave.tankBaby === 2) { - r += `${He} thinks of losing ${his} virginity to ${his} ${getWrittenTitle(slave)} a <span class="hotpink">necessity to be happy.</span> ${He} expects ${his} pussy to be seeing a lot more attention in the future.`; - } else { - r += `<span class="hotpink">${He} enjoys losing ${his} cherry to you,</span> and `; - if ((slave.fetishKnown && slave.fetish === "pregnancy") || (slave.energy > 95) || (slave.attrXY >= 85 && V.PC.dick > 0)) { - r += `can't wait to have ${his} pussy fucked by you again.`; + if (canDoVaginal(slave)) { + if (slave.vagina === 0) { + r += `<span class="lime">This breaks in ${slave.slaveName}'s virgin pussy.</span> `; + if (slave.devotion > 50 || slave.career === "a slave since birth") { + r += `You ease yourself into ${his} pussy, since it's ${his} first time, then gradually speed up your thrusts while ${he} slowly learns to move ${his} hips along with you. ${He} moans loudly. `; + if (slave.tankBaby === 2) { + r += `${He} thinks of losing ${his} virginity to ${his} ${getWrittenTitle(slave)} a <span class="hotpink">necessity to be happy.</span> ${He} expects ${his} pussy to be seeing a lot more attention in the future.`; } else { - r += `looks forward to having ${his} pussy fucked by you again.`; + r += `<span class="hotpink">${He} enjoys losing ${his} cherry to you,</span> and `; + if ((slave.fetishKnown && slave.fetish === "pregnancy") || (slave.energy > 95) || (slave.attrXY >= 85 && canPenetrate(V.PC))) { + r += `can't wait to have ${his} pussy fucked by you again.`; + } else { + r += `looks forward to having ${his} pussy fucked by you again.`; + } } + slave.devotion += 4; + } else if (slave.devotion > 20) { + r += `You ease yourself into ${his} pussy, since it's ${his} first time, then gradually speed up your thrusts while ${he} slowly learns to move ${his} hips along with you. ${He} accepts losing ${his} virginity to ${his} owner and ${he} looks forward to having ${his} pussy fucked by you again.`; + } else if (slave.devotion >= -20) { + r += `You force yourself into ${his} pussy. ${He} sobs and cries with disgust while you continue thrusting into ${his} fuck hole. ${He} <span class="mediumorchid">hates</span> losing ${his} virginity this way and <span class="gold">fears</span> the next time you'll conquer ${him}. ${He} dreads getting violated by you again.`; + slave.trust -= 5; + slave.devotion -= 5; + } else { + r += `You force yourself into ${his} pussy. ${He} sobs and cries with disgust while you continue working ${his} fuck hole. ${He} tries to struggle, but you only pound harder. ${He} <span class="mediumorchid">hates</span> and <span class="gold">fears</span> you for robbing ${his} of ${his} virginity. ${He} dreads getting fucked by you again.`; + slave.trust -= 10; + slave.devotion -= 15; } - slave.devotion += 4; - } else if (slave.devotion > 20) { - r += `You ease yourself into ${his} pussy, since it's ${his} first time, then gradually speed up your thrusts while ${he} slowly learns to move ${his} hips along with you. ${He} accepts losing ${his} virginity to ${his} owner and ${he} looks forward to having ${his} pussy fucked by you again.`; - } else if (slave.devotion >= -20) { - r += `You force yourself into ${his} pussy. ${He} sobs and cries with disgust while you continue thrusting into ${his} fuck hole. ${He} <span class="mediumorchid">hates</span> losing ${his} virginity this way and <span class="gold">fears</span> the next time you'll conquer ${him}. ${He} dreads getting violated by you again.`; - slave.trust -= 5; - slave.devotion -= 5; - } else { - r += `You force yourself into ${his} pussy. ${He} sobs and cries with disgust while you continue working ${his} fuck hole. ${He} tries to struggle, but you only pound harder. ${He} <span class="mediumorchid">hates</span> and <span class="gold">fears</span> you for robbing ${his} of ${his} virginity. ${He} dreads getting fucked by you again.`; - slave.trust -= 10; - slave.devotion -= 15; + slave.vagina = 1; } - slave.vagina = 1; - } - if (canDoVaginal(slave)) { - if (canImpreg(slave, V.PC)) { - knockMeUp(slave, 10, 0, -1); + if (canPenetrate(V.PC)) { + tryKnockMeUp(slave, 10, 0, V.PC); } seX(slave, "vaginal", V.PC, "penetrative", times); } @@ -185,13 +185,13 @@ globalThis.VCheck = (function() { if (canDoAnal(slave)) { seX(slave, "vaginal", V.PC, "penetrative", bothTimes); seX(slave, "anal", V.PC, "penetrative", bothTimes); - if (canImpreg(slave, V.PC)) { - knockMeUp(slave, 10, 2, -1); + if (canPenetrate(V.PC)) { + tryKnockMeUp(slave, 10, 2, V.PC); } } else { seX(slave, "vaginal", V.PC, "penetrative", bothTimes); - if (canImpreg(slave, V.PC)) { - knockMeUp(slave, 10, 0, -1); + if (canPenetrate(V.PC)) { + tryKnockMeUp(slave, 10, 0, V.PC); } } } else if (canDoAnal(slave)) { @@ -218,8 +218,8 @@ globalThis.VCheck = (function() { slave.anus = 1; } seX(slave, "anal", V.PC, "penetrative", analTimes); - if (canImpreg(slave, V.PC)) { - knockMeUp(slave, 10, 1, -1); + if (canPenetrate(V.PC)) { + tryKnockMeUp(slave, 10, 1, V.PC); } } return r; @@ -266,13 +266,13 @@ globalThis.VCheck = (function() { if (canDoAnal(partner)) { actX(partner, "vaginal", bothTimes); actX(partner, "anal", bothTimes); - if (canImpreg(partner, V.PC)) { - r += knockMeUp(partner, 10, 2, -1); + if (canPenetrate(V.PC)) { + r += tryKnockMeUp(partner, 10, 2, V.PC); } } else { actX(partner, "vaginal", bothTimes); - if (canImpreg(partner, V.PC)) { - r += knockMeUp(partner, 10, 0, -1); + if (canPenetrate(V.PC)) { + r += tryKnockMeUp(partner, 10, 0, V.PC); } } } else if (canDoAnal(partner)) { @@ -281,8 +281,8 @@ globalThis.VCheck = (function() { partner.anus = 1; } actX(partner, "anal", analTimes); - if (canImpreg(partner, V.PC)) { - r += knockMeUp(partner, 10, 1, -1); + if (canPenetrate(V.PC)) { + r += tryKnockMeUp(partner, 10, 1, V.PC); } } return r; @@ -326,48 +326,44 @@ globalThis.SimpleSexAct = (function() { for (let i = 0; i < fuckCount; i++) { playerSex = sexArray.random(); - fuckTarget = jsRandom(1, 100); + fuckTarget = random(1, 100); if (V.policies.sexualOpenness === 1 || slave.toyHole === "dick") { if (slave.nipples === "fuckable" && pPenetrates && fuckTarget > 90) { seX(slave, "mammary", V.PC, "penetrative"); } else if (sPenetrates && V.PC.vagina > 0 && fuckTarget > 66) { seX(V.PC, "vaginal", slave, "penetrative"); - if (canImpreg(V.PC, slave)) { - knockMeUp(V.PC, 10, 0, slave.ID); - } + tryKnockMeUp(V.PC, 10, 0, slave); } else if (canDoVaginal(slave) && (slave.vagina > 0 || (slave.vagina >= 0 && playerSex === "vaginal")) && fuckTarget > 33) { seX(slave, "vaginal", V.PC, playerSex); - if ((canImpreg(slave, V.PC) && playerSex === "penetrative") || (canFemImpreg(slave, V.PC) && playerSex === "vaginal")) { - knockMeUp(slave, 10, 0, -1); + if (playerSex === "penetrative" || playerSex === "vaginal") { + tryKnockMeUp(slave, 10, 0, V.PC); } - if (canFemImpreg(V.PC, slave) && playerSex === "vaginal") { - knockMeUp(V.PC, 10, 0, slave.ID); + if (playerSex === "vaginal") { + tryKnockMeUp(V.PC, 10, 0, slave); } } else if (canDoAnal(slave) && slave.anus > 0 && fuckTarget > 15) { seX(slave, "anal", V.PC, "penetrative"); - if (canImpreg(slave, V.PC)) { - knockMeUp(slave, 10, 1, -1); + if (canPenetrate(V.PC)) { + tryKnockMeUp(slave, 10, 1, V.PC); } } else if (sPenetrates && V.PC.anus > 0 && fuckTarget > 5) { seX(V.PC, "anal", slave, "penetrative"); - if (canImpreg(V.PC, slave)) { - knockMeUp(V.PC, 10, 1, slave.ID); - } + tryKnockMeUp(V.PC, 10, 1, slave); } else { seX(slave, "oral", V.PC, playerSex); } } else { if (slave.nipples === "fuckable" && pPenetrates && fuckTarget > 80) { seX(slave, "mammary", V.PC, "penetrative"); - } else if (canDoVaginal(slave) && slave.vagina > 0 && fuckTarget > 33) { + } else if (canDoVaginal(slave) && (slave.vagina > 0 || (slave.vagina >= 0 && playerSex === "vaginal")) && fuckTarget > 33) { seX(slave, "vaginal", V.PC, playerSex); - if ((canImpreg(slave, V.PC) && playerSex === "penetrative") || (canFemImpreg(slave, V.PC) && playerSex === "vaginal")) { - knockMeUp(slave, 10, 0, -1); + if (playerSex === "penetrative" || playerSex === "vaginal") { + tryKnockMeUp(slave, 10, 0, V.PC); } } else if (canDoAnal(slave) && slave.anus > 0 && fuckTarget > 10) { seX(slave, "anal", V.PC, "penetrative"); - if (canImpreg(slave, V.PC)) { - knockMeUp(slave, 10, 1, -1); + if (canPenetrate(V.PC)) { + tryKnockMeUp(slave, 10, 1, V.PC); } } else { seX(slave, "oral", V.PC, playerSex); @@ -389,7 +385,7 @@ globalThis.SimpleSexAct = (function() { let fuckTarget = 0; for (let i = 0; i < fuckCount; i++) { - fuckTarget = jsRandom(1, 100); + fuckTarget = random(1, 100); if (slave.nipples === "fuckable" && fuckTarget > 80) { actX(slave, "mammary"); } else if (canDoVaginal(slave) && slave.vagina > 0 && fuckTarget > 33) { @@ -421,26 +417,20 @@ globalThis.SimpleSexAct = (function() { let sex; /** @type {FC.SlaveActs} */ let sex2 = "penetrative"; - fuckTarget = jsRandom(1, 100); + fuckTarget = random(1, 100); if (subSlave.nipples === "fuckable" && canPenetrate(domSlave) && fuckTarget > 80) { sex = "mammary"; } else if (canDoVaginal(subSlave) && canDoVaginal(domSlave) && subSlave.dick === 0 && domSlave.dick === 0 && fuckTarget > 80) { sex = "vaginal"; sex2 = "vaginal"; - if (canFemImpreg(subSlave, domSlave)) { - knockMeUp(subSlave, 3, 0, domSlave.ID); - } + tryKnockMeUp(subSlave, 3, 0, domSlave); + tryKnockMeUp(domSlave, 3, 0, subSlave); } else if (canDoVaginal(subSlave) && subSlave.vagina > 0 && canPenetrate(domSlave) && fuckTarget > 33) { sex = "vaginal"; - if (canImpreg(subSlave, domSlave)) { - knockMeUp(subSlave, 3, 0, domSlave.ID); - } + tryKnockMeUp(subSlave, 3, 0, domSlave); } else if (canDoAnal(subSlave) && subSlave.anus > 0 && canPenetrate(domSlave) && fuckTarget > 10) { - // i think would impregnate from anal here even without .mpreg? same in original widget too sex = "anal"; - if (canImpreg(subSlave, domSlave) && subSlave.mpreg === 1) { - knockMeUp(subSlave, 3, 1, domSlave.ID); - } + tryKnockMeUp(subSlave, 3, 1, domSlave); } else { sex = "oral"; }