From c9ef4c00722ae2c48c6e5c74dc91af1dc6a45bda Mon Sep 17 00:00:00 2001 From: Pregmodder <pregmodder@gmail.com> Date: Sun, 13 Dec 2020 18:30:09 -0500 Subject: [PATCH] 4.0.0 work --- js/003-data/slaveWearData.js | 2 +- .../backwardsCompatibility.js | 122 +++++++-- src/endWeek/nextWeek/nextWeek.js | 2 +- src/endWeek/reports/personalAttention.js | 6 +- src/endWeek/saDevotion.js | 2 +- src/endWeek/saPleaseYou.js | 2 +- src/events/intro/acquisition.js | 51 +--- src/events/intro/initNationalities.js | 2 + src/events/intro/introSummary.js | 34 +++ src/events/scheduled/murderAttempt.js | 4 +- src/facilities/fsPassage.js | 58 ++-- src/interaction/siFinancial.js | 18 +- src/js/assignJS.js | 8 +- src/js/economyJS.js | 2 +- src/js/removeSlave.js | 4 +- src/js/slaveCostJS.js | 6 +- .../specificMarkets/criminalMarkets.js | 2 +- src/npc/generate/newChildIntro.js | 2 +- src/npc/generate/newSlaveIntro.js | 248 +++++++++--------- src/npc/startingGirls/startingGirls.js | 2 +- src/pregmod/eliteTakeOverFight.tw | 2 +- src/uncategorized/costsReport.tw | 2 +- src/uncategorized/personalAttentionSelect.tw | 10 +- 23 files changed, 350 insertions(+), 241 deletions(-) diff --git a/js/003-data/slaveWearData.js b/js/003-data/slaveWearData.js index 8777cf308c6..0d1d044b570 100644 --- a/js/003-data/slaveWearData.js +++ b/js/003-data/slaveWearData.js @@ -170,7 +170,7 @@ App.Data.slaveWear = { { name: "Maid (nice)", value: "a nice maid outfit", - get requirements() { return V.boughtItem.clothing.career === 1 || V.PC.career === "servant"; } + get requirements() { return V.boughtItem.clothing.career === 1 || V.PC.career === "servant" || V.PC.career === "handmaiden" || V.PC.career === "child servant"; } }, {name: "Ballgown", value: "a ball gown", get requirements() { return V.boughtItem.clothing.dresses === 1; }}, diff --git a/src/data/backwardsCompatibility/backwardsCompatibility.js b/src/data/backwardsCompatibility/backwardsCompatibility.js index 0e5244cac2c..f34d42d3980 100644 --- a/src/data/backwardsCompatibility/backwardsCompatibility.js +++ b/src/data/backwardsCompatibility/backwardsCompatibility.js @@ -1001,30 +1001,104 @@ App.Update.globalVariables = function(node) { if (jQuery.isEmptyObject(V.trinkets)) { V.trinkets = []; - if (V.PC.career === "wealth") { - V.trinkets.push("a collection of diplomas from expensive schools"); - } else if (V.PC.career === "capitalist") { - V.trinkets.push("a framed low denomination piece of paper money from your native country"); - } else if (V.PC.career === "mercenary") { - V.trinkets.push("a battered old assault rifle"); - } else if (V.PC.career === "slaver") { - V.trinkets.push("a framed picture of a slave with her sale price scrawled across the bottom"); - } else if (V.PC.career === "engineer") { - V.trinkets.push("an artist's impression of an early arcology design"); - } else if (V.PC.career === "medicine") { - V.trinkets.push("a framed postsurgical x-ray"); - } else if (V.PC.career === "celebrity") { - V.trinkets.push("a framed copy of the first news story featuring yourself"); - } else if (V.PC.career === "arcology owner") { - V.trinkets.push("a miniature model of your first arcology"); - } else if (V.PC.career === "escort") { - V.trinkets.push("a copy of the first porno you starred in"); - } else if (V.PC.career === "servant") { - V.trinkets.push("a framed picture of your late Master"); - } else if (V.PC.career === "gang") { - V.trinkets.push("your favorite handgun, whose sight has instilled fear in many"); - } else if (V.PC.career === "BlackHat") { - V.trinkets.push("a news clipping of your first successful live hack"); + switch(V.PC.career) { + case "arcology owner": + V.trinkets.push("a miniature model of your first arcology"); + break; + case "wealth": + V.trinkets.push("a collection of diplomas from expensive schools"); + break; + case "trust fund": + V.trinkets.push("a diploma from your expensive boarding school"); + break; + case "rich kid": + V.trinkets.push("an extensive collection of pricey Old World trading cards."); + break; + case "capitalist": + case "entrepreneur": + case "business kid": + V.trinkets.push("a framed low denomination piece of paper money from your native country"); + break; + case "mercenary": + V.trinkets.push("a battered old assault rifle"); + break; + case "recruit": + V.trinkets.push("a battered old pistol"); + break; + case "child soldier": + V.trinkets.push("a combat knife"); + break; + case "slaver": + V.trinkets.push("a framed picture of a slave with her sale price scrawled across the bottom"); + break; + case "slave overseer": + V.trinkets.push("a framed picture of slave pens you used to lord over"); + break; + case "slave tender": + V.trinkets.push("a framed picture of you hosing down a slave for market"); + break; + case "engineer": + V.trinkets.push("an artist's impression of an early arcology design"); + break; + case "construction": + V.trinkets.push("the blueprints of a proto-arcology you helped construct"); + case "worksite helper": + V.trinkets.push("the hardhat you used to wear around worksites"); + break; + case "medicine": + V.trinkets.push("a framed postsurgical x-ray"); + break; + case "medical assistant": + V.trinkets.push("your personal set of surgical tools"); + break; + case "nurse": + V.trinkets.push("a framed picture of you outside the clinic you worked in"); + break; + case "celebrity": + V.trinkets.push("a framed copy of the first news story featuring yourself"); + break; + case "rising star": + V.trinkets.push("a framed poster of the first movie you starred in"); + break; + case "child star": + V.trinkets.push("a copy of the movie that gave you fame"); + break; + case "BlackHat": + V.trinkets.push("a news clipping of your first successful live hack"); + break; + case "hacker": + V.trinkets.push("an old USB stick that ruined a corporation"); + break; + case "script kiddy": + V.trinkets.push("a CD containing your first foray into scripting"); + break; + case "escort": + V.trinkets.push("a copy of the first porno you starred in"); + break; + case "prostitute": + V.trinkets.push("a nude pinup of you from the brothel you used to work in"); + break; + case "child prostitute": + V.trinkets.push("a pair of your used underwear"); + break; + case "servant": + V.trinkets.push("a framed picture of your late Master"); + break; + case "handmaiden": + V.trinkets.push("a framed picture of your late Master's family"); + break; + case "child servant": + V.trinkets.push("a framed picture of your late Master patting your head"); + break; + case "gang": + V.trinkets.push("your favorite handgun, whose sight has instilled fear in many"); + break; + case "hoodlum": + V.trinkets.push("a hood ornament stolen from a fancy Old World vehicle"); + break; + case "street urchin": + V.trinkets.push("your trusty knife, whose kept you safe many a night"); + break; } } } diff --git a/src/endWeek/nextWeek/nextWeek.js b/src/endWeek/nextWeek/nextWeek.js index 9582f714ca8..4f979c52816 100644 --- a/src/endWeek/nextWeek/nextWeek.js +++ b/src/endWeek/nextWeek/nextWeek.js @@ -99,7 +99,7 @@ App.EndWeek.nextWeek = function() { V.drugsCost = Math.trunc(10000 / V.localEcon); V.rulesCost = Math.trunc(10000 / V.localEcon); V.modCost = Math.trunc(5000 / V.localEcon); - V.surgeryCost = Math.trunc(30000 / (V.localEcon * (V.PC.career === "medicine" ? 2 : 1))); + V.surgeryCost = Math.trunc(30000 / (V.localEcon * ((V.PC.career === "medicine" || V.PC.career === "medical assistant" || V.PC.career === "nurse") ? 2 : 1))); } V.arcologies[0].prosperity = Math.clamp(V.arcologies[0].prosperity, 1, V.AProsperityCap); diff --git a/src/endWeek/reports/personalAttention.js b/src/endWeek/reports/personalAttention.js index ecd47ff39e3..a4782a775c2 100644 --- a/src/endWeek/reports/personalAttention.js +++ b/src/endWeek/reports/personalAttention.js @@ -580,7 +580,7 @@ globalThis.personalAttention = (function() { break; case "learn skills": trainingEfficiency = 10 + Math.trunc(slave.devotion / 30) + Math.floor(slave.intelligence / 32); - if (V.PC.career === "escort") { + if (V.PC.career === "escort" || V.PC.career === "prostitute" || V.PC.career === "child prostitute") { r.push(`You are well-versed in sexual techniques and how to employ them, giving you an edge in teaching ${him}.`); trainingEfficiency += 10; } @@ -730,11 +730,11 @@ globalThis.personalAttention = (function() { r.push(`Since ${he} has only basic entertainment skills, you teach ${him} more about poise and Free Cities etiquette.`); r.push(App.UI.DOM.makeElement("span", `${His} entertainment skills have improved.`, "lime")); r.push(slaveSkillIncrease('entertainment', slave, trainingEfficiency)); - } else if (slave.skill.whoring <= 60 && V.PC.career === "escort") { + } else if (slave.skill.whoring <= 60 && (V.PC.career === "escort" || V.PC.career === "prostitute" || V.PC.career === "child prostitute")) { r.push(`${He} is already a skilled whore, so you teach ${him} some of your personal tricks to squeezing every last drop from a patron.`); r.push(App.UI.DOM.makeElement("span", `${His} prostitution skills have improved.`, "lime")); r.push(slaveSkillIncrease('whoring', slave, trainingEfficiency)); - } else if (slave.skill.entertainment <= 60 && V.PC.career === "escort") { + } else if (slave.skill.entertainment <= 60 && (V.PC.career === "escort" || V.PC.career === "prostitute" || V.PC.career === "child prostitute")) { r.push(`${He} is already skilled at luring in partners, so you teach ${him} some of your sexual persuasion techniques.`); r.push(App.UI.DOM.makeElement("span", `${His} entertainment skills have improved.`, "lime")); r.push(slaveSkillIncrease('entertainment', slave, trainingEfficiency)); diff --git a/src/endWeek/saDevotion.js b/src/endWeek/saDevotion.js index abd02ed4ab3..72238362d3a 100644 --- a/src/endWeek/saDevotion.js +++ b/src/endWeek/saDevotion.js @@ -145,7 +145,7 @@ App.SlaveAssignment.devotion = (function() { * */ function playerPregnancyThoughts(slave) { - if (PC.preg >= 20 || (PC.preg >= 16 && PC.career === "escort")) { + if (PC.preg >= 20 || (PC.preg >= 16 && PC.career === "escort")) { // switch to .belly if (slave.devotion > 60) { if (PC.pregMood === 2) { r.push(`${He} is devoted to you and does ${his} best to satisfy your demanding, hormone driven libido, no matter what you want from ${him}. ${His} efforts to give ${himself} you to <span class="devotion inc">further ${his} submission</span> to you.`); diff --git a/src/endWeek/saPleaseYou.js b/src/endWeek/saPleaseYou.js index 6f8dfd270b9..8c390277e44 100644 --- a/src/endWeek/saPleaseYou.js +++ b/src/endWeek/saPleaseYou.js @@ -1782,7 +1782,7 @@ App.SlaveAssignment.pleaseYou = (function() { r.push(`${slave.slaveName} knows being part of your harem is the best romance ${he} can realistically expect, and does ${his} best to <span class="mediumaquamarine">be content</span> with it.`); slave.trust += 1; } - if (slave.fetish === "pregnancy" && (V.PC.preg >= 20 || (V.PC.preg >= 16 && V.PC.career === "escort"))) { + if (slave.fetish === "pregnancy" && (V.PC.preg >= 20 || (V.PC.preg >= 16 && V.PC.career === "escort"))) { // .belly r.push(`${slave.slaveName} <span class="hotpink">enjoys being so close to ${his} gravid ${getWrittenTitle(slave)}.</span>`); slave.devotion += 1; if (slave.fetishKnown === 0) { diff --git a/src/events/intro/acquisition.js b/src/events/intro/acquisition.js index 4cf8481e436..2bbbd65bb06 100644 --- a/src/events/intro/acquisition.js +++ b/src/events/intro/acquisition.js @@ -282,31 +282,9 @@ App.Intro.acquisition = function() { if (V.PC.slaveSurname) { V.PC.birthSurname = V.PC.slaveSurname; } - if (V.PC.title === 1) { - V.PC.muscles = 50; - } else { - V.PC.hLength = 15; - V.PC.waist = -20; - V.PC.voice = 2; - V.PC.shoulders = -1; - V.PC.hips = 1; - V.PC.muscles = 30; - } - if (V.PC.career === "escort") { - V.PC.anus = 1; - V.PC.clothes = "a slutty outfit"; - V.PC.intelligenceImplant = 15; - } else if (V.PC.career === "servant") { - V.PC.geneticQuirks.fertility = 1; - V.PC.clothes = "a nice maid outfit"; - V.PC.intelligenceImplant = 0; - } - if (V.PC.vagina === -1) { - V.PC.ovaries = 0; - } else if (V.PC.vagina > 0) { - V.PC.vaginaLube = 1; + if (V.PC.vagina > 0) { V.PC.counter.birthsTotal = 0; - if (V.PC.career === "servant") { + if (V.PC.career === "servant" || V.PC.career === "handmaiden" || V.PC.career === "child servant") { if (V.PC.pregType !== 8) { if (V.PC.actualAge >= 50) { V.PC.counter.birthsTotal = 9; @@ -314,9 +292,12 @@ App.Intro.acquisition = function() { } else if (V.PC.actualAge >= 35) { V.PC.counter.birthsTotal = 6; V.PC.counter.birthMaster = 6; - } else { + } else if (V.PC.actualAge >= 16) { V.PC.counter.birthsTotal = 3; V.PC.counter.birthMaster = 3; + } else if (V.PC.pubertyXX === 1) { + V.PC.counter.birthsTotal = 2; + V.PC.counter.birthMaster = 2; } } else { // Master kept you pregged up if (V.PC.actualAge >= 50) { @@ -325,12 +306,14 @@ App.Intro.acquisition = function() { } else if (V.PC.actualAge >= 35) { V.PC.counter.birthsTotal = 40; V.PC.counter.birthMaster = 40; - } else { + } else if (V.PC.actualAge >= 16) { V.PC.counter.birthsTotal = 16; V.PC.counter.birthMaster = 16; + } else if (V.PC.pubertyXX === 1) { + V.PC.counter.birthsTotal = 8; + V.PC.counter.birthMaster = 8; } } - V.PC.geneticQuirks.fertility = 2; for (const slave of V.slaves) { if (slave.mother === -1) { V.PC.counter.birthsTotal += 1; @@ -342,7 +325,7 @@ App.Intro.acquisition = function() { } } } - } else if (V.PC.career === "escort") { + } else if (V.PC.career === "escort" || V.PC.career === "prostitute" || V.PC.career === "child prostitute") { for (const slave of V.slaves) { if (slave.mother === -1) { V.PC.counter.birthsTotal += 1; @@ -375,12 +358,12 @@ App.Intro.acquisition = function() { } else { V.PC.geneticQuirks.hyperFertility = 2; } - if (V.PC.career === "servant") { + if (V.PC.career === "servant" || V.PC.career === "handmaiden" || V.PC.career === "child servant") { V.PC.pregSource = -3; if (V.PC.pregType !== 8) { V.PC.pregType += either(0, 0, 1); } - } else if (V.PC.career === "escort") { + } else if (V.PC.career === "escort" || V.PC.career === "prostitute" || V.PC.career === "child prostitute") { V.PC.pregSource = -5; } V.PC.pregKnown = 1; @@ -388,14 +371,6 @@ App.Intro.acquisition = function() { WombImpregnate(V.PC, V.PC.pregType, V.PC.pregSource, V.PC.preg); } } - if (V.PC.dick !== 0) { - V.PC.geneticQuirks.wellHung = 2; - } else { - V.PC.balls = 0; - V.PC.scrotum = 0; - V.PC.prostate = 0; - } - V.PC.ovaryAge = V.PC.physicalAge; } diff --git a/src/events/intro/initNationalities.js b/src/events/intro/initNationalities.js index bc6fd4ce645..6e4149d3a94 100644 --- a/src/events/intro/initNationalities.js +++ b/src/events/intro/initNationalities.js @@ -84,9 +84,11 @@ App.Intro.initNationalities = function() { break; case "medical assistant": V.trinkets.push("your personal set of surgical tools"); + V.surgeryCost = Math.trunc(V.surgeryCost / 2); break; case "nurse": V.trinkets.push("a framed picture of you outside the clinic you worked in"); + V.surgeryCost = Math.trunc(V.surgeryCost / 2); break; case "celebrity": V.trinkets.push("a framed copy of the first news story featuring yourself"); diff --git a/src/events/intro/introSummary.js b/src/events/intro/introSummary.js index 4b7adbbc0a2..3dd66bb04df 100644 --- a/src/events/intro/introSummary.js +++ b/src/events/intro/introSummary.js @@ -382,6 +382,9 @@ App.Intro.summary = function() { if (V.PC.vagina >= 1) { V.PC.vagina = 4; } + if (V.PC.vagina >= 0) { + V.PC.geneticQuirks.fertility = 2; + } V.PC.skill.trading = -100; V.PC.skill.warfare = -100; V.PC.skill.slaving = -100; @@ -389,6 +392,7 @@ App.Intro.summary = function() { V.PC.skill.medicine = -100; V.PC.skill.hacking = -100; V.PC.muscles = 0; + V.PC.geneticQuirks.fertility = 1; break; case "handmaiden": V.PC.clothes = "a nice maid outfit"; @@ -396,6 +400,9 @@ App.Intro.summary = function() { if (V.PC.vagina >= 1) { V.PC.vagina = 3; } + if (V.PC.vagina >= 0) { + V.PC.geneticQuirks.fertility = 2; + } V.PC.skill.trading = -100; V.PC.skill.warfare = -100; V.PC.skill.slaving = -100; @@ -403,6 +410,7 @@ App.Intro.summary = function() { V.PC.skill.medicine = -100; V.PC.skill.hacking = -100; V.PC.muscles = 0; + V.PC.geneticQuirks.fertility = 1; break; case "child servant": V.PC.clothes = "a nice maid outfit"; @@ -410,6 +418,9 @@ App.Intro.summary = function() { if (V.PC.vagina >= 1) { V.PC.vagina = 2; } + if (V.PC.vagina >= 0) { + V.PC.geneticQuirks.fertility = 2; + } V.PC.skill.trading = -100; V.PC.skill.warfare = -100; V.PC.skill.slaving = -100; @@ -417,6 +428,7 @@ App.Intro.summary = function() { V.PC.skill.medicine = -100; V.PC.skill.hacking = -100; V.PC.muscles = 0; + V.PC.geneticQuirks.fertility = 1; break; case "gang": if (V.PC.vagina === 1) { @@ -457,6 +469,28 @@ App.Intro.summary = function() { V.PC.muscles += 20; } } + + if (V.PC.dick !== 0) { + V.PC.geneticQuirks.wellHung = 2; + } else { + V.PC.balls = 0; + V.PC.scrotum = 0; + V.PC.prostate = 0; + } + if (V.PC.title === 0) { + V.PC.hLength = 15; + V.PC.waist = -20; + V.PC.voice = 2; + V.PC.shoulders = -1; + V.PC.hips = 1; + } + if (V.PC.vagina === -1) { + V.PC.ovaries = 0; + } else if (V.PC.vagina > 0) { + V.PC.vaginaLube = 1; + } + V.PC.ovaryAge = V.PC.physicalAge; + if (V.saveImported === 1 && V.freshPC === 0 && V.PC.rules.living !== "luxurious") { if (V.PC.rules.living === "spare") { V.PC.rules.living = "normal"; diff --git a/src/events/scheduled/murderAttempt.js b/src/events/scheduled/murderAttempt.js index 2cec793ad25..6f96ecc9ea5 100644 --- a/src/events/scheduled/murderAttempt.js +++ b/src/events/scheduled/murderAttempt.js @@ -5,7 +5,7 @@ App.Events.murderAttempt = function() { V.nextButton = " "; App.Utils.updateUserButton(); const nextPassage = "Random Nonindividual Event"; - const perceptiveCareers = ["mercenary", "gang", "escort"]; + const perceptiveCareers = ["mercenary", "gang", "hoodlum", "street urchin", "escort", "prostitute"]; // event unique const variation = jsEither(["trade", "slave", "drug", "military"]); let isSincere = Math.random() > 0.6; @@ -106,7 +106,7 @@ App.Events.murderAttempt = function() { let r = []; r.push(`${capFirstChar(V.assistant.name)} schedules a meeting a few days later to take place in your personal office, an oddity given these meetings are usually conducted in a more neutral, albeit less secure location, but ${companyName} insisted on it.`); - if (["capitalist", "mercenary", "slaver", "engineer", "escort"].includes(V.PC.career)) { + if (["capitalist", "mercenary", "recruit", "slaver", "slave overseer", "engineer", "escort"].includes(V.PC.career)) { r.push("You should prepare for anything; it's better to be prepared in case something goes awry."); } else { r.push("You can't really complain; it's easier for you and cheaper should nothing come of it."); diff --git a/src/facilities/fsPassage.js b/src/facilities/fsPassage.js index 33eeab71a89..889eb036fb9 100644 --- a/src/facilities/fsPassage.js +++ b/src/facilities/fsPassage.js @@ -387,7 +387,7 @@ App.UI.FSPassage = function() { App.UI.reload(); }; } else { - /* <span class="note"><span style="font-weight:Bold">Racial Supremacism</span>: a belief in the superiority of a chosen race.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Racial Supremacism:</span> a belief in the superiority of a chosen race.</span>*/ } } App.Events.addNode(p, r, "div"); @@ -431,7 +431,7 @@ App.UI.FSPassage = function() { App.UI.reload(); }; } else { - /* <span class="note"><span style="font-weight:Bold">Racial Subjugationism</span>: a belief in the inferiority of a subject race.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Racial Subjugationism:</span> a belief in the inferiority of a subject race.</span>*/ } } App.Events.addNode(p, r, "div"); @@ -461,7 +461,7 @@ App.UI.FSPassage = function() { ); r.push(`is a focus on mass breeding in order to repopulate the future world.`); } else { - /* <span class="note"><span style="font-weight:Bold">Repopulation Efforts</span>: societal fetishization of pregnancy.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Repopulation Efforts:</span> societal fetishization of pregnancy.</span>*/ } } } @@ -494,7 +494,7 @@ App.UI.FSPassage = function() { ); r.push(`is rebuilding society using restrictive breeding programs reserved solely for society's finest.`); } else { - /* <span class="note"><span style="font-weight:Bold">Complete Societal Reconstruction</span>: rebuilding society based off the elite.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Complete Societal Reconstruction:</span> rebuilding society based off the elite.</span>*/ } } } @@ -523,7 +523,7 @@ App.UI.FSPassage = function() { ); r.push(`is a belief that slaves should be airheaded, horny and fully dependent on their owners.`); } else { - /* <span class="note"><span style="font-weight:Bold">Intellectual Dependency</span>: a belief that slaves should be airheaded, horny and fully dependent on their owners.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Intellectual Dependency:</span> a belief that slaves should be airheaded, horny and fully dependent on their owners.</span>*/ } } } @@ -547,7 +547,7 @@ App.UI.FSPassage = function() { ); r.push(`is increased interest in smart, refined, altogether perfect slaves.`); } else { - /* <span class="note"><span style="font-weight:Bold">Slave Professionalism</span>: increased interest in smart, refined, altogether perfect slaves.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Slave Professionalism:</span> increased interest in smart, refined, altogether perfect slaves.</span>*/ } } } @@ -576,7 +576,7 @@ App.UI.FSPassage = function() { ); r.push(`is a radical redefinition of gender that identifies powerful people as male, and everyone else as female.`); } else { - /* <span class="note"><span style="font-weight:Bold">Gender radicalism</span>: a radical redefinition of gender that identifies powerful people as male, and everyone else as female.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Gender radicalism:</span> a radical redefinition of gender that identifies powerful people as male, and everyone else as female.</span>*/ } } } @@ -601,7 +601,7 @@ App.UI.FSPassage = function() { ); r.push(`gender traditionalism, including a societal preference for feminine slaves ${(V.seePreg !== 0) ? ` and support for slave pregnancy` : ``}.`); } else { - /* <span class="note"><span style="font-weight:Bold">Gender traditionalism</span>: a societal preference for feminine slaves + /* <span class="note"><span style="font-weight:Bold">Gender traditionalism:</span> a societal preference for feminine slaves if (V.seePreg !== 0) { r.push(`and support for slave pregnancy`); } @@ -633,7 +633,7 @@ App.UI.FSPassage = function() { ); r.push(`is a vision of slave improvement, including slaves' health, mental well-being, and education.`); } else { - /* <span class="note"><span style="font-weight:Bold">Paternalism</span>: a vision of slave improvement, including slaves' health, mental well-being, and education.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Paternalism:</span> a vision of slave improvement, including slaves' health, mental well-being, and education.</span>*/ } } } @@ -657,7 +657,7 @@ App.UI.FSPassage = function() { ); r.push(`is a belief that slaves are not human and should not be treated decently.`); } else { - /* <span class="note"><span style="font-weight:Bold">Degradation</span>: a belief that slaves are not human and should not be treated decently.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Degradation:</span> a belief that slaves are not human and should not be treated decently.</span>*/ } } } @@ -685,7 +685,7 @@ App.UI.FSPassage = function() { ); r.push(`is societal disapproval of implant surgery`); } else { - /* <span class="note"><span style="font-weight:Bold">Body Purism</span>: societal disapproval of implant surgery.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Body Purism:</span> societal disapproval of implant surgery.</span>*/ } } } @@ -709,7 +709,7 @@ App.UI.FSPassage = function() { ); r.push(`is societal fetishization of implant surgery.`); } else { - /* <span class="note"><span style="font-weight:Bold">Transformation Fetishism</span>: societal fetishization of implant surgery.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Transformation Fetishism:</span> societal fetishization of implant surgery.</span>*/ } } } @@ -737,7 +737,7 @@ App.UI.FSPassage = function() { ); r.push(`is increased interest in girls just past their majority.`); } else { - /* <span class="note"><span style="font-weight:Bold">Youth Preferentialism</span>: increased interest in girls just past their majority.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Youth Preferentialism:</span> increased interest in girls just past their majority.</span>*/ } } } @@ -761,7 +761,7 @@ App.UI.FSPassage = function() { ); r.push(`is increased interest in mature slaves.`); } else { - /* <span class="note"><span style="font-weight:Bold">Maturity Preferentialism</span>: increased interest in mature slaves.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Maturity Preferentialism:</span> increased interest in mature slaves.</span>*/ } } } @@ -789,7 +789,7 @@ App.UI.FSPassage = function() { ); r.push(`is increased interest in short slaves.`); } else { - /* <span class="note"><span style="font-weight:Bold">Petite Admiration</span>: increased interest in short slaves.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Petite Admiration:</span> increased interest in short slaves.</span>*/ } } } @@ -813,7 +813,7 @@ App.UI.FSPassage = function() { ); r.push(`is societal fixation on tallness.`); } else { - /* <span class="note"><span style="font-weight:Bold">Statuesque Glorification</span>: societal fixation on tallness.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Statuesque Glorification:</span> societal fixation on tallness.</span>*/ } } } @@ -841,7 +841,7 @@ App.UI.FSPassage = function() { ); r.push(`is a fashion for slaves with girlish figures.`); } else { - /* <span class="note"><span style="font-weight:Bold">Slimness Enthusiasm</span>: a fashion for slaves with girlish figures.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Slimness Enthusiasm:</span> a fashion for slaves with girlish figures.</span>*/ } } } @@ -865,7 +865,7 @@ App.UI.FSPassage = function() { ); r.push(`is societal hunger for huge assets of whatever origin.`); } else { - /* <span class="note"><span style="font-weight:Bold">Asset Expansionism</span>: societal hunger for huge assets of whatever origin.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Asset Expansionism:</span> societal hunger for huge assets of whatever origin.</span>*/ } } } @@ -892,7 +892,7 @@ App.UI.FSPassage = function() { ); r.push(`is societal acceptance of slave products like milk.`); } else { - /* <span class="note"><span style="font-weight:Bold">Slave Pastoralism</span>: societal acceptance of slave products like milk.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Slave Pastoralism:</span> societal acceptance of slave products like milk.</span>*/ } } App.Events.addNode(el, r, "p"); @@ -919,7 +919,7 @@ App.UI.FSPassage = function() { ); r.push(`is societal reverence for the idealized human form, including height, health and muscle.`); } else { - /* <span class="note"><span style="font-weight:Bold">Physical Idealism</span>: societal reverence for the idealized human form, including height, health and muscle.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Physical Idealism:</span> societal reverence for the idealized human form, including height, health and muscle.</span>*/ } } } @@ -943,7 +943,7 @@ App.UI.FSPassage = function() { ); r.push(`is societal acceptance of overindulgence and immediate gratification. Be it food, drink, sex, drugs or whatever one's desire may be.`); } else { - /* <span class="note"><span style="font-weight:Bold">HedonisticDecadence</span>: societal acceptance of over indulgence, particularly of food, drink, sex and drugs.</span>*/ + /* <span class="note"><span style="font-weight:Bold">HedonisticDecadence:</span> societal acceptance of over indulgence, particularly of food, drink, sex and drugs.</span>*/ } } } @@ -971,7 +971,7 @@ App.UI.FSPassage = function() { ); r.push(`is a new strain of religion that emphasizes the slaveholding portions of religious history.`); } else { - /* <span class="note"><span style="font-weight:Bold">Chattel Religionism</span>: a new strain of religion that emphasizes the slaveholding portions of religious history.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Chattel Religionism:</span> a new strain of religion that emphasizes the slaveholding portions of religious history.</span>*/ } } } @@ -1142,7 +1142,7 @@ App.UI.FSPassage = function() { ); r.push(`is a vision of a new Rome.`); } else { - /* <span class="note"><span style="font-weight:Bold">Roman Revivalism</span>: a vision of a new Rome.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Roman Revivalism:</span> a vision of a new Rome.</span>*/ } } } @@ -1166,7 +1166,7 @@ App.UI.FSPassage = function() { ); r.push(`is a vision of a new Imperial society, integrating high technology and old-world culture under the iron fist of your absolute rule.`); } else { - /* <span class="note"><span style="font-weight:Bold">Neo-Imperialism</span>: a vision of a new Imperial Society, integrating high technology and old-world culture under the iron fist of your absolute rule.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Neo-Imperialism:</span> a vision of a new Imperial Society, integrating high technology and old-world culture under the iron fist of your absolute rule.</span>*/ } } } @@ -1190,7 +1190,7 @@ App.UI.FSPassage = function() { ); r.push(`is a vision of a new Aztec Empire.`); } else { - /* <span class="note"><span style="font-weight:Bold">Aztec Revivalism</span>: a vision of a new Aztec Empire.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Aztec Revivalism:</span> a vision of a new Aztec Empire.</span>*/ } } } @@ -1215,7 +1215,7 @@ App.UI.FSPassage = function() { ); r.push(`is a vision of a Pharaoh's Egypt.`); } else { - /* <span class="note"><span style="font-weight:Bold">Egyptian Revivalism</span>: a vision of Pharaoh's Egypt.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Egyptian Revivalism:</span> a vision of Pharaoh's Egypt.</span>*/ } } } @@ -1239,7 +1239,7 @@ App.UI.FSPassage = function() { ); r.push(`is a vision of Edo Japan.`); } else { - /* <span class="note"><span style="font-weight:Bold">Edo Revivalism</span>: a vision of Edo Japan.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Edo Revivalism:</span> a vision of Edo Japan.</span>*/ } } } @@ -1263,7 +1263,7 @@ App.UI.FSPassage = function() { ); r.push(`is a vision of the Sultanate of old.`); } else { - /* <span class="note"><span style="font-weight:Bold">Arabian Revivalism</span>: a vision of the Sultanate of old.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Arabian Revivalism:</span> a vision of the Sultanate of old.</span>*/ } } } @@ -1287,7 +1287,7 @@ App.UI.FSPassage = function() { ); r.push(`is a vision of ancient China.`); } else { - /* <span class="note"><span style="font-weight:Bold">Chinese Revivalism</span>: a vision of ancient China.</span>*/ + /* <span class="note"><span style="font-weight:Bold">Chinese Revivalism:</span> a vision of ancient China.</span>*/ } } } diff --git a/src/interaction/siFinancial.js b/src/interaction/siFinancial.js index ab933946cde..7c0a734fa1c 100644 --- a/src/interaction/siFinancial.js +++ b/src/interaction/siFinancial.js @@ -117,9 +117,13 @@ App.UI.SlaveInteract.financial = function(slave) { r.push(App.UI.DOM.generateLinksStrip(linkArray)); App.Events.addNode(el, r, "div"); - if (V.PC.career === "escort") { + if (V.PC.career === "escort" || V.PC.career === "prostitute" || V.PC.career === "child prostitute") { r = []; - r.push(`You retain some contacts from your past life in the industry that may be willing to cut you some discounts should you return to it.`); + if (V.PC.career === "escort") { + r.push(`You retain some contacts from your past life in the industry that may be willing to cut you some discounts should you return to it.`); + } else { + r.push(`You were approached in the past to star in some adult films and they may be willing to cut you some discounts should you accept their offer.`); + } if (V.PCSlutContacts !== 2) { r.push(`You are not baring your body for all to see.`); r.push( @@ -132,7 +136,13 @@ App.UI.SlaveInteract.financial = function(slave) { ) ); } else { - r.push(`You are starring in hardcore porn once more.`); + if (V.PC.career === "escort") { + r.push(`You are starring in hardcore porn once more.`); + } else if (V.PC.actualAge < $minimumSlaveAge) { + r.push(`You are taking part in porn that may disturb people.`); + } else { + r.push(`You are starring in some hardcore porn.`); + } r.push( App.UI.DOM.link( `Stop doing porn for a discount`, @@ -144,7 +154,7 @@ App.UI.SlaveInteract.financial = function(slave) { ); } App.Events.addNode(el, r, "div"); - } + } } if (V.studioFeed === 1) { r = []; diff --git a/src/js/assignJS.js b/src/js/assignJS.js index ad3c86e7414..05184b60941 100644 --- a/src/js/assignJS.js +++ b/src/js/assignJS.js @@ -431,9 +431,9 @@ globalThis.assignJob = function(slave, job) { if (!assignmentVisible(slave) && Array.isArray(V.personalAttention)) { if (V.personalAttention.deleteWith(s => s.ID === slave.ID).length > 0) { if (V.personalAttention.length === 0) { - if (V.PC.career === "escort") { + if (V.PC.career === "escort" || V.PC.career === "prostitute" || V.PC.career === "child prostitute") { V.personalAttention = "whoring"; - } else if (V.PC.career === "servant") { + } else if (V.PC.career === "servant" || V.PC.career === "handmaiden" || V.PC.career === "child servant") { V.personalAttention = "upkeep"; } else { V.personalAttention = "business"; @@ -642,9 +642,9 @@ globalThis.removeJob = function(slave, assignment, saveRecord = false) { } } if (V.personalAttention === "HG" && attentionCheck === 1) { - if (V.PC.career === "escort") { + if (V.PC.career === "escort" || V.PC.career === "prostitute" || V.PC.career === "child prostitute") { V.personalAttention = "whoring"; - } else if (V.PC.career === "servant") { + } else if (V.PC.career === "servant" || V.PC.career === "handmaiden" || V.PC.career === "child servant") { V.personalAttention = "upkeep"; } else { V.personalAttention = "business"; diff --git a/src/js/economyJS.js b/src/js/economyJS.js index f03a1fef12e..4816d267ae7 100644 --- a/src/js/economyJS.js +++ b/src/js/economyJS.js @@ -784,7 +784,7 @@ globalThis.calculateCosts = (function() { function getPCMultiplierCosts(cost) { - if (V.PC.career === 'servant') { + if (V.PC.career === 'servant' || V.PC.career === 'handmaiden' || V.PC.career === 'child servant') { if (V.personalAttention === PersonalAttention.MAID) { if (V.PC.belly >= 5000) { cost *= 0.80; diff --git a/src/js/removeSlave.js b/src/js/removeSlave.js index bfb00233a59..57647eb3fde 100644 --- a/src/js/removeSlave.js +++ b/src/js/removeSlave.js @@ -121,9 +121,9 @@ globalThis.removeSlave = function(slave) { if (Array.isArray(V.personalAttention)) { V.personalAttention.deleteWith(s => s.ID === AS_ID); if (V.personalAttention.length === 0) { - if (V.PC.career === "escort") { + if (V.PC.career === "escort" || V.PC.career === "prostitute" || V.PC.career === "child prostitute") { V.personalAttention = "whoring"; - } else if (V.PC.career === "servant") { + } else if (V.PC.career === "servant" || V.PC.career === "handmaiden" || V.PC.career === "child servant") { V.personalAttention = "upkeep"; } else { V.personalAttention = "business"; diff --git a/src/js/slaveCostJS.js b/src/js/slaveCostJS.js index 86af6b013ca..98d54d5a1ef 100644 --- a/src/js/slaveCostJS.js +++ b/src/js/slaveCostJS.js @@ -12,6 +12,10 @@ globalThis.minimumSlaveCost = function(includeLaws=false) { } if (V.PC.career === "gang") { value -= 1000; + } else if (V.PC.career === "hoodlum") { + value -= 750; + } else if (V.PC.career === "street urchin") { + value -= 500; } if (includeLaws) { @@ -2739,7 +2743,7 @@ globalThis.slaveCostBeauty = (function() { startingSlaveMultiplier = Math.clamp(startingSlaveMultiplier, 0, 10); cost += cost * startingSlaveMultiplier; cost = 500 * Math.trunc(cost / 500); - if (V.PC.career === "slaver") { + if (V.PC.career === "slaver" || V.PC.career === "slave overseer" || V.PC.career === "slave tender") { cost /= 2; } } diff --git a/src/markets/specificMarkets/criminalMarkets.js b/src/markets/specificMarkets/criminalMarkets.js index a2b767db89c..ce1ffb66681 100644 --- a/src/markets/specificMarkets/criminalMarkets.js +++ b/src/markets/specificMarkets/criminalMarkets.js @@ -58,7 +58,7 @@ App.Markets["military prison"] = function() { const el = new DocumentFragment(); let r = []; r.push(`You board the transport to a holding facility for prisoners of war located on the outskirts of the Free City, which is reasonable due to the dangers inherent to the criminals imprisoned in such an establishment. The driver radios ahead that you and several other interested parties will be arriving shortly. Once you disembark at the edge of the grounds, you are recognized by the stationed guard and ushered into a heavily armored vehicle.`); - if (V.PC.career === "mercenary") { + if (V.PC.career === "mercenary" || V.PC.career === "recruit") { r.push(`The interior brings back memories and you completely`); } else { r.push(`Although the interior makes you feel like a prisoner, you`); diff --git a/src/npc/generate/newChildIntro.js b/src/npc/generate/newChildIntro.js index b9b76aa3dd1..d70a96b48cd 100644 --- a/src/npc/generate/newChildIntro.js +++ b/src/npc/generate/newChildIntro.js @@ -700,7 +700,7 @@ App.UI.newChildIntro = function(slave) { r.push(`${He} seems to <span class="mediumaquamarine">think your clothes are cute</span> and <span class="hotpink">wants a set of ${his} own.</span>`); slave.devotion += 1; slave.trust += 1; - } else if (V.PC.career === "gang") { + } else if (V.PC.career === "gang") { // or gang tats r.push(`${He} seems to <span class="gold">find your appearance frightening.</span>`); slave.trust -= 5; } diff --git a/src/npc/generate/newSlaveIntro.js b/src/npc/generate/newSlaveIntro.js index 0c149226885..7661cd7dd0b 100644 --- a/src/npc/generate/newSlaveIntro.js +++ b/src/npc/generate/newSlaveIntro.js @@ -13,7 +13,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = const { His, He, his, him, he, girl, hers, himself, daughter } = getPronouns(slave); - const {woman: womanP} = getPronouns(V.PC); + const {woman: womanP, girl: girlP} = getPronouns(V.PC); const hands = (hasBothArms(slave)) ? "hands" : "hand"; const el = new DocumentFragment(); @@ -22,6 +22,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = let span; let brandTarget = V.brandTarget.primary; let scarTarget = V.scarTarget.primary; + let PC = V.PC; newSlave(slave); @@ -240,12 +241,12 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = slave.origRace = slave.race; } if (slave.race !== slave.origRace) { - r.push(`A blood test reveals that ${he} was originally ${slave.origRace}, not ${slave.race} ${(V.PC.skill.medicine >= 50 || V.PC.skill.slaving >= 50) ? `, just as you suspected` : ``}.`); + r.push(`A blood test reveals that ${he} was originally ${slave.origRace}, not ${slave.race} ${(PC.skill.medicine >= 50 || PC.skill.slaving >= 50) ? `, just as you suspected` : ``}.`); } } if (slave.skin !== slave.origSkin) { if (slave.skin !== "sun tanned" && slave.skin !== "spray tanned") { - r.push(`An epidermis scan reveals that ${his} skin was originally ${slave.origSkin}, not ${slave.skin}${(V.PC.skill.medicine >= 75 || V.PC.skill.slaving >= 75) ? `, just as you suspected` : ``}.`); + r.push(`An epidermis scan reveals that ${his} skin was originally ${slave.origSkin}, not ${slave.skin}${(PC.skill.medicine >= 75 || PC.skill.slaving >= 75) ? `, just as you suspected` : ``}.`); } } @@ -266,12 +267,12 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = } if (slave.vagina > -1 && slave.dick === 0) { - if (V.PC.dick === 0 && V.PC.boobs >= 300) { + if (PC.dick === 0 && PC.boobs >= 300) { r.push(`${He} looks to you and sees a fellow woman, and is <span class="mediumaquamarine">a little less afraid</span> that you will rape and abuse ${him}.`); slave.trust += 4; } } else if (slave.career === "a Futanari Sister") { - if (V.PC.dick !== 0 && V.PC.boobs >= 300 && V.PC.vagina !== -1) { + if (PC.dick !== 0 && PC.boobs >= 300 && PC.vagina !== -1) { if (V.TFS.schoolPresent === 1) { r.push(`${He}'s heard of you, of course, as both a futanari yourself and a generous patron of the Sisters. ${He} feels <span class="mediumaquamarine">very lucky</span> that ${he}'s going to be your slave, not to mention <span class="hotpink">almost desperate</span> to have sex with you.`); slave.devotion += 10; @@ -288,28 +289,28 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = } } } else if ((slave.boobs > 400) && (slave.dick > 0)) { - if (V.PC.dick !== 0 && (V.PC.boobs >= 400) || (V.PC.vagina !== -1)) { + if (PC.dick !== 0 && (PC.boobs >= 400) || (PC.vagina !== -1)) { r.push(`${He} looks to you and sees a fellow intersex person, and is <span class="mediumaquamarine">rather hopeful</span> that ${he} will find you a sympathetic owner.`); slave.trust += 4; } } if ((slave.attrXX > 50) || (slave.energy > 95) && slave.behavioralFlaw !== "hates women" && slave.trust >= -20) { - if (V.PC.boobs >= 400) { + if (PC.boobs >= 400) { r.push(`${He} seems to think you're pretty, and is more willing to <span class="hotpink">try for your approval</span> than ${he} would otherwise be. ${He} glances at your rack when ${he} thinks you're not looking.`); slave.devotion += 4; } } if (slave.behavioralFlaw === "hates women" && slave.devotion <= 50) { - if (V.PC.dick === 0 && V.PC.boobs >= 300) { + if (PC.dick === 0 && PC.boobs >= 300) { r.push(`${He} obviously does not find you immediately attractive, and is <span class="mediumorchid">less eager to conciliate you</span> than ${he} would otherwise be.`); slave.devotion -= 5; } } if ((slave.attrXY > 50 || slave.energy > 95) && slave.behavioralFlaw !== "hates men" && slave.trust >= -20) { - if (V.PC.dick === 0 && V.PC.boobs < 300) { + if (PC.dick === 0 && PC.boobs < 300) { r.push(`${He} seems to think you're handsome, and is more willing to <span class="hotpink">try for your approval</span> than ${he} would otherwise be. ${He} glances at your crotch when ${he} thinks you're not looking.`); slave.devotion += 4; } @@ -317,17 +318,17 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = if (slave.devotion >= -20) { if (slave.actualAge > 35) { - if (V.PC.visualAge < 35) { - if ((slave.behavioralFlaw !== "hates men" && V.PC.title === 1) || (slave.behavioralFlaw !== "hates women" && V.PC.title === 0)) { + if (PC.visualAge < 35) { + if ((slave.behavioralFlaw !== "hates men" && PC.title === 1) || (slave.behavioralFlaw !== "hates women" && PC.title === 0)) { r.push(`${He} tries to conceal ${his} surprise at your age, and keeps glancing at ${his} own naked body and then back at you, obviously wondering at such a <span class="hotpink">gorgeous young ${womanP}'s</span> interest in an old slave like ${him}.`); slave.devotion += 4; } } - } else if ((slave.actualAge < 25)) { - if (V.PC.visualAge >= 50) { - if ((slave.behavioralFlaw !== "hates men" && V.PC.title === 1) || (slave.behavioralFlaw !== "hates women" && V.PC.title === 0)) { + } else if (slave.actualAge < 25) { + if (PC.visualAge >= 50) { + if ((slave.behavioralFlaw !== "hates men" && PC.title === 1) || (slave.behavioralFlaw !== "hates women" && PC.title === 0)) { r.push(`${He} keeps stealing glances at your face, probably wrestling with ${his} feelings about your age. Eventually ${he} seems to relax and accept it, with a certain <span class="hotpink">obvious thrill</span> at ${his} own willingness towards an older`); - if (V.PC.title === 1) { + if (PC.title === 1) { r.push(`man.`); } else { r.push(`lady.`); @@ -338,19 +339,19 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = } } - if (V.PC.pregKnown === 1) { - if (V.PC.career === "escort") { - if (V.PC.belly >= 1000) { + if (PC.pregKnown === 1) { + if (PC.career === "escort") { // switch to .belly + if (PC.belly >= 1000) { if (slave.fetish === "pregnancy") { if (slave.fetishKnown === 0) { r.push(`${He} keeps stealing glances at your`); - if (V.PC.belly >= 120000) { + if (PC.belly >= 120000) { r.push(`massive`); - } else if (V.PC.belly >= 60000) { + } else if (PC.belly >= 60000) { r.push(`giant`); - } else if (V.PC.belly >= 15000) { + } else if (PC.belly >= 15000) { r.push(`huge`); - } else if (V.PC.belly >= 5000) { + } else if (PC.belly >= 5000) { r.push(`big`); } r.push(`baby bump.`); @@ -361,13 +362,13 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = slave.fetishKnown = 1; } else { r.push(`${He} keeps stealing glances at your`); - if (V.PC.belly >= 120000) { + if (PC.belly >= 120000) { r.push(`massive`); - } else if (V.PC.belly >= 60000) { + } else if (PC.belly >= 60000) { r.push(`giant`); - } else if (V.PC.belly >= 15000) { + } else if (PC.belly >= 15000) { r.push(`huge`); - } else if (V.PC.belly >= 5000) { + } else if (PC.belly >= 5000) { r.push(`big`); } r.push(`baby bump.`); @@ -384,17 +385,17 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = } } } else { - if (V.PC.belly >= 1500) { + if (PC.belly >= 1500) { if (slave.fetish === "pregnancy") { if (slave.fetishKnown === 0) { r.push(`${He} keeps stealing glances at your`); - if (V.PC.belly >= 120000) { + if (PC.belly >= 120000) { r.push(`massive`); - } else if (V.PC.belly >= 60000) { + } else if (PC.belly >= 60000) { r.push(`giant`); - } else if (V.PC.belly >= 15000) { + } else if (PC.belly >= 15000) { r.push(`huge`); - } else if (V.PC.belly >= 5000) { + } else if (PC.belly >= 5000) { r.push(`big`); } r.push(`baby bump.`); @@ -405,13 +406,13 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = slave.fetishKnown = 1; } else { r.push(`${He} keeps stealing glances at your`); - if (V.PC.belly >= 120000) { + if (PC.belly >= 120000) { r.push(`massive`); - } else if (V.PC.belly >= 60000) { + } else if (PC.belly >= 60000) { r.push(`giant`); - } else if (V.PC.belly >= 15000) { + } else if (PC.belly >= 15000) { r.push(`huge`); - } else if (V.PC.belly >= 5000) { + } else if (PC.belly >= 5000) { r.push(`big`); } r.push(`baby bump.`); @@ -430,7 +431,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = } } - if (V.PC.boobs >= 1400) { + if (PC.boobs >= 1400) { if (slave.fetish === "boobs") { if (slave.fetishKnown === 0) { r.push(`${He} keeps stealing glances at your huge rack${canAchieveErection(slave) ? `, ${his} dick rapidly hardening` : ``}. You stretch ${(canSee(slave)) ? `, giving ${him} a fantastic view of your breasts,` : ``} before circling around behind ${him} and cupping ${his} chest. Between your tits against ${his} back, and how teasingly big you are pretending ${his} breasts will be, ${he} can't contain ${himself}; ${he} cums from overstimulation, completely pinning ${him} <span class="green">as a breast fetishist!</span>`); @@ -466,31 +467,38 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = } } - if (V.PC.career === "escort") { - r.push(`${He} recognizes you as a whore, leading ${him} to <span class="mediumaquamarine">fear you less;</span> however, ${his} views of you also leave ${him} less willing to <span class="mediumorchid">listen to you.</span>`); + if (PC.career === "escort" || PC.career === "prostitute" || (PC.career === "child prostitute" && PC.visualAge >= V.minimumSlaveAge)) { + r.push(`${He} recognizes you as a whore, leading ${him} to <span class="defiant inc">fear you less;</span> however, ${his} views of you also leave ${him} less willing to <span class="mediumorchid">listen to you.</span>`); slave.devotion -= 10; slave.trust += 10; - } else if ((V.PC.career === "servant")) { + } else if (PC.career === "child prostitute") { // actually underage + r.push(`${He} is <span class="devotion dec">disgusted to recognize such a young ${girlP} as a whore;</span> however, ${he} <span class="defiant inc">sees little reason to fear you.</span>`); + slave.devotion -= 20; + slave.trust += 20; + } else if (PC.career === "servant" || PC.career === "handmaiden" || PC.career === "child servant") { // rework off clothes if (canSee(slave)) { r.push(`Seeing`); } else { r.push(`Having`); } r.push(`you in your`); - if (V.PC.title === 0) { + if (PC.title === 0) { r.push(`maid's dress`); } else { r.push(`maid's outfit`); } - r.push(`<span class="mediumaquamarine">calms ${his} fears;</span> however, ${he} is unwilling to <span class="mediumorchid">listen to a servant.</span>`); + r.push(`<span class="defiant inc">calms ${his} fears;</span> however, ${he} is unwilling to <span class="devotion dec">listen to a servant.</span>`); slave.devotion -= 3; slave.trust += 10; - } else if ((V.PC.career === "gang")) { - r.push(`${He} recognizes you from various crime reports, <span class="gold">filling ${him} with fear</span> over what life under you will be like.`); + } else if (PC.career === "gang") { + r.push(`${He} recognizes you from various crime reports, <span class="fear inc">filling ${him} with fear</span> over what life under you will be like.`); + slave.trust -= 10; + } else if ((PC.career === "hoodlum" || PC.career === "street urchin") && canSee(slave)) { // switch to tat? + r.push(`${He} scoffs at first at being owned by such a colorful character, <span class="fear inc">but ${he} soon pales</span> once ${he} sees the gang signs adorning your neck.`); slave.trust -= 10; } - if (V.PC.rumor === "force") { + if (PC.rumor === "force") { if (slave.devotion <= 20) { if (slave.trust > 0) { r.push(`${He} seems to have picked up rumors about your ruthlessness, and is <span class="gold">horrified into obedience.</span>`); @@ -503,7 +511,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = slave.trust -= 15; } } - } else if (V.PC.rumor === "diligence") { + } else if (PC.rumor === "diligence") { r.push(`${He} seems to have picked up rumors about your probity, and is <span class="mediumaquamarine">less afraid of you</span> and more <span class="hotpink">willing to like you.</span>`); slave.devotion += 5; slave.trust += 5; @@ -662,7 +670,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = } else if ((slave.sexualQuirk === "perverted")) { r.push(`${He} has heard that you like little ${girl}s and <span class="mediumaquamarine">hopes</span> that matching your taste means ${he} will be treated well.`); slave.trust += 2; - } else if ((slave.sexualQuirk === "size queen") && V.PC.dick !== 0) { + } else if ((slave.sexualQuirk === "size queen") && PC.dick !== 0) { r.push(`${He} has heard that you like little ${girl}s and <span class="hotpink">bites ${his} lip</span> at the thought of how big your dick will be inside ${him}.`); slave.devotion += 2; } else if ((slave.sexualFlaw === "repressed") || (slave.sexualFlaw === "shamefast") || (slave.behavioralFlaw === "devout")) { @@ -922,9 +930,9 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = result: function(slave) { const r = []; r.push(`You place a curative injector on your desk, and describe its remarkable medical powers in detail, before mentioning its extreme cost. ${His} face rises at the first part and falls at the second. You tell ${him} that if ${he}'s a perfect sex slave, ${he}'ll get as much as ${he} needs, and that ${he} can start by sucking you off. ${He} grunts a little as ${he} hurries to get ${his} pregnant body down to ${his} knees, but`); - if (V.PC.dick > 0) { + if (PC.dick > 0) { r.push(`works your cock`); - } else if (V.PC.vagina > 0) { + } else if (PC.vagina > 0) { r.push(`explores your vagina`); } else { r.push(`licks you to orgasm`); @@ -944,9 +952,9 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = result: function(slave) { const r = []; r.push(`You loudly place an innocuous-looking drug injector on your desk, and ${him} think about it for a long moment. Then, you declare exactly what made that sound: abortifacients. After a moment of comprehension, ${his} mood instantly improves. ${He} pledges to <span class="hotpink">submit to you,</span>`); - if (V.PC.dick !== 0 && V.PC.vagina !== -1) { + if (PC.dick !== 0 && PC.vagina !== -1) { r.push(`suck your cock, take it in ${his} pussy, take it up ${his} ass, eat you out,`); - } else if (V.PC.dick !== 0) { + } else if (PC.dick !== 0) { r.push(`suck your cock, take it in ${his} pussy, take it up ${his} ass,`); } else { r.push(`eat you out, worship you with ${his} pussy, serve you with ${his} ass,`); @@ -1053,7 +1061,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = result: function(slave) { const r = []; r.push(`You rise from your desk and move in close. ${He} turns to face you but you roughly spin ${him} around. You haul ${him} up on tiptoe so you can use ${him} standing. As you get your`); - if (V.PC.dick !== 0) { + if (PC.dick !== 0) { r.push(`cock`); } else { r.push(`strap-on`); @@ -1071,13 +1079,13 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = result: function(slave) { const r = []; r.push(`You rise from your desk and move in close, wordlessly dominating ${him} without touch, tempting and overawing ${him} until ${he}'s desperate with desire, ${his} prick stiff as iron. ${He} follows you willingly into the autosurgery and even allows you to strap ${him} in, face-down, without comment. ${His} fuckhole welcomes your`); - if (V.PC.dick !== 0) { + if (PC.dick !== 0) { r.push(`cock`); } else { r.push(`strap-on`); } r.push(`and ${he} gasps with pleasure. ${He} climaxes with indecent speed, dripping ${his} cum onto the surgery floor. You keep fucking ${him}, but lean forward to whisper to ${him} that that was ${his} last hard-on. ${He}'s completely confused and says nothing, but gradually realizes what the numb feeling around ${his} ballsack means. ${He} <span class="gold">screams with horror</span> and <span class="mediumorchid">sobs disconsolately</span> as the autosurgery disengages from ${his} clipped genitals and you disengage from ${his}`); - if (V.PC.dick !== 0) { + if (PC.dick !== 0) { r.push(`cum-filled`); } else { r.push(`wilting`); @@ -1136,7 +1144,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = result: function(slave) { const r = []; r.push(`You tell ${him} that slaves working in your penthouse are all expected to please you, and ${he} nods eagerly. ${He} strips, only starting to look doubtful again when you brusquely order ${him} to hurry up. You order ${him} to get down on the ground with ${his} face up, ${his} shoulders against the floor; ${he} does, and then you order ${him} to put ${his} legs over ${his} head. ${He} looks puzzled but does, flipping ${himself} flexibly up until ${he}'s doing a shoulder stand, bent double with ${his} crotch over ${his} face. You stand over ${him} and shove`); - if (V.PC.dick !== 0) { + if (PC.dick !== 0) { r.push(`your cock`); } else { r.push(`a strap-on`); @@ -1235,9 +1243,9 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = result: function(slave) { const r = []; r.push(`You stand up, your`); - if (V.PC.dick !== 0) { + if (PC.dick !== 0) { r.push(`erection`); - if (V.PC.vagina !== -1) { + if (PC.vagina !== -1) { r.push(`and the pussy beneath it`); } } else { @@ -1266,7 +1274,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = result: function(slave) { const r = []; r.push(`You make no direct answer to ${his} nervous question about ${his} virgin butt, though you do wonder how ${he} was so selfish as to be a Free Cities party ${girl} without giving up ${his} asshole nightly. Instead, you ask ${him} about ${himself}, ensuring that ${he} learns the proper way to answer questions from ${his} ${getWrittenTitle(slave)}. ${He} answers readily, even when you turn the subject to ${his} sexual experiences, and ${he} starts to get visibly aroused. Before long, ${he} finds ${himself} sitting on your lap on the couch, making out with you while ${he} gives you a handjob. ${He} stiffens a little when you begin to play with ${his} butthole, but you take your time. Soon ${he}'s taking a finger, and then two, and before long, ${he}'s riding`); - if (V.PC.dick !== 0) { + if (PC.dick !== 0) { r.push(`your cock.`); } else { r.push(`a strap-on.`); @@ -1286,14 +1294,14 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = linkName: `Make sure ${he} enjoys ${his} first anal sex`, result: function(slave) { const r = []; - r.push(`You introduce ${him} to obedience and proper manners regarding ${his} ${getWrittenTitle(slave)} before sending ${him} off for a physical. That night, ${he}'s returned to your room, and finds you doing business on a tablet in bed. ${He} looks doubtful, but obeys when you direct ${him} to get into bed${(V.PC.dick === 0) ? `, even after ${he} realizes you're wearing a strap-on` : ``}. You turn out the light and spoon ${him} from behind, kissing ${his} neck and ears, cupping ${his} swollen breasts, and running your hands across ${his} pregnant belly with its taut ${slave.skin} skin. ${He}'s awkward at first but ${his} body responds to the tenderness. Before long ${he}'s humping ${his} pussy back and forth against`); - if (V.PC.dick !== 0) { + r.push(`You introduce ${him} to obedience and proper manners regarding ${his} ${getWrittenTitle(slave)} before sending ${him} off for a physical. That night, ${he}'s returned to your room, and finds you doing business on a tablet in bed. ${He} looks doubtful, but obeys when you direct ${him} to get into bed${(PC.dick === 0) ? `, even after ${he} realizes you're wearing a strap-on` : ``}. You turn out the light and spoon ${him} from behind, kissing ${his} neck and ears, cupping ${his} swollen breasts, and running your hands across ${his} pregnant belly with its taut ${slave.skin} skin. ${He}'s awkward at first but ${his} body responds to the tenderness. Before long ${he}'s humping ${his} pussy back and forth against`); + if (PC.dick !== 0) { r.push(`your cock.`); } else { r.push(`the strap-on.`); } r.push(`You tell ${him} no, not there, and begin to gently work`); - if (V.PC.dick !== 0) { + if (PC.dick !== 0) { r.push(`your dickhead`); } else { r.push(`its tip`); @@ -1737,8 +1745,8 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = linkName: `Show ${him} how a professional does it`, result: function(slave) { const r = []; - r.push(`Judging from ${his} earlier, amateur attempt, it's clear ${slave.slaveName} is unfamiliar with the subtle nuances of a high-quality rape. You decide to clear your schedule for the rest of the day and teach ${him} yourself${V.PC.dick === 0 ? `, with the help of your trusty strap-on, of course` : ``}. Once ${he}'s bent over across your desk and properly restrained, ${his} lesson begins with you thrusting your`); - if (V.PC.dick === 0) { + r.push(`Judging from ${his} earlier, amateur attempt, it's clear ${slave.slaveName} is unfamiliar with the subtle nuances of a high-quality rape. You decide to clear your schedule for the rest of the day and teach ${him} yourself${PC.dick === 0 ? `, with the help of your trusty strap-on, of course` : ``}. Once ${he}'s bent over across your desk and properly restrained, ${his} lesson begins with you thrusting your`); + if (PC.dick === 0) { r.push(`fake`); } r.push(`cock down ${his} throat as far as it will go. Over the course of the next several hours, you ensure that ${he} understands the fine points of nonconsensual oral${slave.vagina > -1 ? `, vaginal,` : ``} and anal intercourse as intimately as possible. When you're finally too tired to continue,you unshackle ${his} <span class="health dec">bruised and bloody body</span> and ask ${him} what ${he} learned. ${His} voice hoarse from the same brutal fucking that has gaped ${his} <span class="lime">asshole</span> ${(slave.vagina > -1) ? `and <span class="lime">pussy</span>` : ``}, ${he} hesitantly replies that ${he} has <span class="hotpink">learned a great deal about true dominance,</span> before fainting on the spot from a mixture of total exhaustion and pure terror. You've taught your student well.`); @@ -1749,7 +1757,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = slave.vagina = 2; actX(slave, "vaginal", 15); } - if (isFertile(slave) && V.PC.dick > 0) { + if (isFertile(slave) && PC.dick > 0) { knockMeUp(slave, 100, 0, -1, true); } slave.devotion += 100; @@ -1768,7 +1776,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = r.push(`finger`); } r.push(`${him} until ${his} arousal overwhelms ${his} wariness of you. Once ${he}'s finally relaxed, you climb on top of ${him}, and gently ease`); - if (V.PC.vagina > 0 && canPenetrate(slave)) { + if (PC.vagina > 0 && canPenetrate(slave)) { r.push(`your pussy onto ${his} cock. ${He} shudders and moan softly as you slide yourself up and down ${his} shaft with steadily increasing speed. You keep your eyes locked on ${hers} all the while, as ${his} expression shifts from bewilderment to acceptance to ecstasy, as ${he} soon shoots ${his} seed up into you. Afterwards, you slip ${his} softening cock out of you, climb off of ${him}, and leave the exhausted and overwhelmed slave${girl} on your desk as you attend to business elsewhere. You think ${he}'s <span class="orangered">going to like it here.</span>`); actX(slave, "penetrative"); if (canImpreg(V.PC, slave)) { @@ -1782,13 +1790,13 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = r.push(`asshole.`); } r.push(`${He} shudders and moans softly as you piston your`); - if (V.PC.dick > 0) { + if (PC.dick > 0) { r.push(`dick`); } else { r.push(`strap-on`); } r.push(`in and out of ${his} hole with steadily increasing intensity. You keep your eyes locked on ${hers} all the while, as ${his} expression shifts from bewilderment to acceptance to ecstasy, as you soon shoot your seed down into ${him}. Afterwards, you slip your`); - if (V.PC.dick > 0) { + if (PC.dick > 0) { r.push(`softening`); } else { r.push(`plastic`); @@ -1797,7 +1805,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = if (slave.vagina > -1) { r.push(VCheck.Vaginal(slave, 1)); actX(slave, "vaginal"); - if (isFertile(slave) && V.PC.dick > 0) { + if (isFertile(slave) && PC.dick > 0) { knockMeUp(slave, 100, 0, -1, true); } } else { @@ -2135,8 +2143,8 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = r.push(`an instant`); } r.push(`of horrified comprehension, ${he} flings ${himself} at your feet, crying, begging, promising. ${He} pledges to <span class="hotpink">submit to you,</span>`); - if (V.PC.dick !== 0) { - if (V.PC.vagina !== -1) { + if (PC.dick !== 0) { + if (PC.vagina !== -1) { r.push(`eat you out,`); } r.push(`suck your cock, take it in ${his} pussy, take it up ${his} ass,`); @@ -2531,7 +2539,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = r.push(`force the resistant ${desc} to lie atop your desk`); } r.push(`and gently`); - if (V.PC.dick !== 0) { + if (PC.dick !== 0) { r.push(`slide your hard cock`); } else { r.push(`push a special strap-on`); @@ -2547,7 +2555,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = } else { r.push(`without hurting ${him}.`); } - if (V.PC.dick !== 0) { + if (PC.dick !== 0) { r.push(`You empty your balls inside ${him}, thrusting in as far as you can go`); } else { r.push(`The strap-on contains a reservoir of faux ejaculate, and you give it to ${him}`); @@ -2569,7 +2577,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = r.push(`${he} climaxes, ${his} impregnation fetish displayed cutely on ${his} face.`); } r.push(`As you ${him} go, ${he} feels`); - if (V.PC.dick !== 0) { + if (PC.dick !== 0) { r.push(`your`); } else { r.push(`the fake`); @@ -2595,7 +2603,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = r.push(`${he} climaxes, ${his} impregnation fetish forcing ${him} to feel pleasure ${his} mind would prefer to reject.`); } r.push(`As you ${him} go, ${he} cries openly,`); - if (V.PC.dick !== 0) { + if (PC.dick !== 0) { r.push(`your`); } else { r.push(`the fake`); @@ -2829,13 +2837,13 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = r.push(`and secure ${his} struggling, screeching body to the couch next to your desk so that ${he}'s straddling the back of the couch with ${his} butt sticking out.`); } r.push(`${He} wriggles and protests until ${he} feels the lubricated head of`); - if (V.PC.dick !== 0) { + if (PC.dick !== 0) { r.push(`your dick`); } else { r.push(`a strap-on`); } r.push(`pushing against ${his} virgin butthole, at which point ${he} desperately tries to break free. ${He} fails, but ${he} never stops writhing and begging you to take`); - if (V.PC.dick !== 0) { + if (PC.dick !== 0) { r.push(`your cock`); } else { r.push(`the phallus`); @@ -2891,7 +2899,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = r.push(`bring the resistant slave`); } r.push(`out into the public areas below your penthouse, shove the nude ${desc} over a convenient handrail, and stick`); - if (V.PC.dick !== 0) { + if (PC.dick !== 0) { r.push(`your dick`); } else { r.push(`a strap-on`); @@ -2938,7 +2946,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = r.push(`As a humiliation fetishist, ${he} gets off on the stares, blushing cutely as ${he} takes a fuck in public.`); } r.push(`${He} follows you back inside your penthouse, leaking`); - if (V.PC.dick !== 0) { + if (PC.dick !== 0) { r.push(`your cum,`); } else { r.push(`lube,`); @@ -2964,7 +2972,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = r.push(`As a humiliation fetishist, ${he} can't stop ${himself} from getting off on being fucked in public.`); } r.push(`As you pull ${him} back towards your penthouse, ${he} leaks`); - if (V.PC.dick !== 0) { + if (PC.dick !== 0) { r.push(`your cum`); } else { r.push(`lube`); @@ -2998,9 +3006,9 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = const r = []; const num = jsRandom(1, 100); r.push(`${He} seems reasonably obedient, so you give ${him} a chance to impress. You remain seated and offer ${him} your`); - if (V.PC.dick !== 0) { + if (PC.dick !== 0) { r.push(`half-erect cock`); - if (V.PC.vagina !== -1) { + if (PC.vagina !== -1) { r.push(`and ready pussy`); } } else { @@ -3014,7 +3022,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = r.push(`into position.`); } r.push(`${He} works hard and is clearly doing ${his} absolute best to please, so you let ${him} finish you with ${his} mouth.`); - if (V.PC.dick !== 0) { + if (PC.dick !== 0) { if (num > 20) { r.push(`${He}`); if (!canSee(slave)) { @@ -3059,14 +3067,14 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = linkName: `Make sure ${he} knows pregnant women can still enjoy sex`, result(slave) { const r = []; - r.push(`You introduce ${him} to obedience and proper manners regarding ${his} ${getWrittenTitle(slave)} before sending ${him} off for a physical. That night, ${he}'s returned to your room, and finds you doing business on a tablet in bed. ${He} looks doubtful, but obeys when you direct ${him} to get into bed${V.PC.dick === 0 ? `, even after ${he} realizes you're wearing a strap-on` : ``}. You turn out the light and spoon ${him} from behind, kissing ${his} neck and ears, cupping ${his} swollen breasts, and running your hands across ${his} pregnant belly with its taut ${slave.skin} skin. ${He}'s awkward at first but ${his} body responds to the tenderness. Before long ${he}'s humping ${his} pussy back and forth against`); - if (V.PC.dick !== 0) { + r.push(`You introduce ${him} to obedience and proper manners regarding ${his} ${getWrittenTitle(slave)} before sending ${him} off for a physical. That night, ${he}'s returned to your room, and finds you doing business on a tablet in bed. ${He} looks doubtful, but obeys when you direct ${him} to get into bed${PC.dick === 0 ? `, even after ${he} realizes you're wearing a strap-on` : ``}. You turn out the light and spoon ${him} from behind, kissing ${his} neck and ears, cupping ${his} swollen breasts, and running your hands across ${his} pregnant belly with its taut ${slave.skin} skin. ${He}'s awkward at first but ${his} body responds to the tenderness. Before long ${he}'s humping ${his} pussy back and forth against`); + if (PC.dick !== 0) { r.push(`your cock.`); } else { r.push(`the strap-on.`); } r.push(`You begin to gently work`); - if (V.PC.dick !== 0) { + if (PC.dick !== 0) { r.push(`your dickhead`); } else { r.push(`its tip`); @@ -3178,9 +3186,9 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = // Written for tankBorn const r = []; r.push(`You seat the curious ${SlaveTitle(slave)} in the center of your office and order every slave available capable of getting hard to report to your office. Once everyone is assembled and erect, you order them to encircle the aroused ${girl} and shower ${him} in cum. As they begin${canAchieveErection(slave) ? ` (with ${slave.slaveName} stroking ${his} own erection too)` : ``},`); - if (V.PC.dick !== 0 && V.PC.vagina !== -1) { + if (PC.dick !== 0 && PC.vagina !== -1) { r.push(`you begin fingering yourself while jacking off alongside your slaves.`); - } else if (V.PC.dick !== 0) { + } else if (PC.dick !== 0) { r.push(`you join in the circlejerk as well.`); } else { r.push(`you sit back to finger yourself to the show.`); @@ -3259,7 +3267,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = }); lineBreak(); } - if (V.PC.vagina !== -1 && slave.dick > 0 && canAchieveErection(slave)) { + if (PC.vagina !== -1 && slave.dick > 0 && canAchieveErection(slave)) { choice({ get linkName() { return (tankBorn) ? `Dominate ${his} penis` : `Dominate ${his} penis and demonstrate ${his} place`; }, result(slave) { @@ -3299,7 +3307,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = } else if (slave.dick === 6) { r.push(`You grin sadistically at ${him} as ${his} massive dick fills both of your hands.`); } - r.push(`As ${he} begins to moan with lust, you grip down tightly and force ${him} to the floor. You straddle ${him} and lower your dripping pussy onto ${his} face${V.PC.dick !== 0 ? `, your erect cock coming to rest on ${his} forehead` : ``}. You continue stroking your toy's rod as ${he} eagerly begins eating you out. As ${his} cock begins to throb, anticipating ${his} upcoming orgasm,`); + r.push(`As ${he} begins to moan with lust, you grip down tightly and force ${him} to the floor. You straddle ${him} and lower your dripping pussy onto ${his} face${PC.dick !== 0 ? `, your erect cock coming to rest on ${his} forehead` : ``}. You continue stroking your toy's rod as ${he} eagerly begins eating you out. As ${his} cock begins to throb, anticipating ${his} upcoming orgasm,`); if ((tankBorn) && (overpowerCheck(slave, V.PC) < random(1, 100)) && (V.incubatorReproductionSetting > 0)) { r.push(`${he} shoves you onto your back and deeply penetrates you. Before you can kick ${him} off, ${he} thrusts twice and unloads ${his} pent up orgasm deep into your pussy. ${He} pulls out with a huge smile on ${his} face and a <span class="hotpink">deep love</span> for ${his} mate. You glower at ${him} as cum pools from your stretched cunt; ${he} might not be a dom now, but ${he} may certainly become one.`); slave.devotion += 5; @@ -3405,7 +3413,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = } } else { r.push(`you quickly bind the base of ${his} penis, denying ${his} release. You grind your cunt into ${his} face, telling ${him} that YOU are the one who'll be orgasming here, not ${him}. Only once you have initiated the new slave by soaking ${his} face in your cum do you release ${his} dick and lean back to avoid the coming blast. A few strokes later and your hand is coated in ${his} cum. You turn around and order the exhausted ${girl} to clean ${his} cum off your hand`); - if (V.PC.dick !== 0) { + if (PC.dick !== 0) { r.push(`and to finish off ${his} twitching dick`); } r.push(`${he} <span class="hotpink">complies meekly,</span> knowing you are the <span class="gold">dominant force</span> in ${his} life now.`); @@ -3418,7 +3426,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = }); } - if (V.PC.belly >= 3000 && hasAnyArms(slave)) { + if (PC.belly >= 3000 && hasAnyArms(slave)) { choice({ // todo tankBorn get linkName() { return (tankBorn) ? `Permit ${him} to explore your pregnancy` : `Make ${him} worship your pregnancy`; }, @@ -3465,7 +3473,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = } else { r.push(`be pushed to the ground. Standing over ${him}, staring ${him} down as ${he} peeks around your firm globe of a middle, you order ${him} to worship your pregnancy.`); if (slave.fetish === "pregnancy") { - r.push(`${He} complies eagerly. ${He} begins with sucking your popped navel before running ${his} tongue across the taut, smooth surface of your pregnancy. Once ${he} has finished with your belly, ${he} lowers ${himself} under it to begin work on your needy pussy. Before long, ${his} overzealous efforts have you quaking in pleasure, rousing your ${(V.PC.pregType === 1) ? `child` : `children`}. Once ${he} finishes you off, ${he} returns to rubbing your belly, soothing your rowdy ${(V.PC.pregType === 1) ? `child`:`children`}and <span class="hotpink">solidifying ${his} place</span> beneath you.`); + r.push(`${He} complies eagerly. ${He} begins with sucking your popped navel before running ${his} tongue across the taut, smooth surface of your pregnancy. Once ${he} has finished with your belly, ${he} lowers ${himself} under it to begin work on your needy pussy. Before long, ${his} overzealous efforts have you quaking in pleasure, rousing your ${(PC.pregType === 1) ? `child` : `children`}. Once ${he} finishes you off, ${he} returns to rubbing your belly, soothing your rowdy ${(PC.pregType === 1) ? `child`:`children`}and <span class="hotpink">solidifying ${his} place</span> beneath you.`); slave.devotion += 15; } else { r.push(`${He} shifts ${his} gaze between your middle and your face, not sure what to do. Losing patience, you toss a tube of cream at ${him}. ${He} shakily massages it onto your stretched skin, missing spots, much to your pleasure. With reason, you force ${him} onto ${his} back, turn around, and plant your needy cunt directly onto ${his} face. Struggling to breath under your weight, ${he} begins eating you out in desperation. After coaxing ${him} to massage your belly as ${he} does, you quickly climax across ${his} face and gently lift yourself off the coughing ${girl}. ${He} now <span class="hotpink">understands ${his} place in life</span> and is <span class="gold">terrified</span> about what ${he} will have to do if ${he} wants to survive.`); @@ -3478,8 +3486,8 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = }, }); - if (V.PC.preg >= 28) { - if (V.PC.pregMood === 2 && V.PC.vagina > 0 && canPenetrate(slave)) { + if (PC.preg >= 28) { + if (PC.pregMood === 2 && PC.vagina > 0 && canPenetrate(slave)) { choice({ // todo tankBorn get linkName() { return (tankBorn) ? `Teach ${him} how to satisfy a pregnant ${womanP}` : `${He} has a dick and you need it`; }, @@ -3499,7 +3507,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = r.push(`chest`); } if (tankBorn) { - if (V.PC.pregMood === 2) { + if (PC.pregMood === 2) { r.push(`knocking ${him} to the ground.`); if (canPenetrate(slave)) { r.push(`A simple stroke is all it takes to get ${him} hard, so you quickly mount and begin riding ${him}. ${He} <span class="hotpink">happily</span> runs ${his} hands across the underside of your belly as ${he} gets into the rhythm of thrusting up into you. After an unsatisfyingly short amount of time, ${he} cums deep in you.`); @@ -3517,7 +3525,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = slave.fetish = "pregnancy"; slave.fetishStrength = 20; } - } else if (tankBorn && V.PC.pregMood === 1) { + } else if (tankBorn && PC.pregMood === 1) { r.push(`until ${he} has no choice but to wrap ${his} arms around it. ${He} happily runs ${his} hands across your belly, cooing with delight at the tautness and warmth. ${He} jumps back with a gasp the first time ${he} is met with a kick from within you, but < span class="hotpink" > giggles pleasantly</span > as you help ${him} back to ${his} feet and pull ${him} into an embrace, guiding ${him} to the couch. You tweak one of your nipples, encouraging your milk to flow and enticing`); if (slave.mother === -1) { r.push(`your ${daughter} to suckle from ${his} mother.`); @@ -3547,7 +3555,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = r.push(`You knew ${he} had a pregnancy fetish and the look on ${his} face confirms it.`); } r.push(`A kick from within startles you from your thoughts; it would appear your`); - if (V.PC.pregType > 1) { + if (PC.pregType > 1) { r.push(`children agree`); } else { r.push(`child agrees`); @@ -3566,38 +3574,38 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = }, }); - } else if (V.PC.pregMood === 1 && V.PC.lactation > 0) { + } else if (PC.pregMood === 1 && PC.lactation > 0) { choice({ // todo: tankBorn linkName: `Take ${him} to your breast`, result(slave) { const r = []; r.push(`You calmly approach ${slave.slaveName}, pulling ${him} into a soothing embrace against your`); - if (V.PC.boobs >= 1400) { + if (PC.boobs >= 1400) { r.push(`enormous,`); - if (V.PC.boobsImplant > 0) { + if (PC.boobsImplant > 0) { r.push(`fake,`); } r.push(`milk laden breasts.`); - } else if (V.PC.boobs >= 1200) { + } else if (PC.boobs >= 1200) { r.push(`huge,`); - if (V.PC.boobsImplant > 0) { + if (PC.boobsImplant > 0) { r.push(`fake,`); } r.push(`milk laden breasts.`); - } else if (V.PC.boobs >= 1000) { + } else if (PC.boobs >= 1000) { r.push(`large,`); - if (V.PC.boobsImplant > 0) { + if (PC.boobsImplant > 0) { r.push(`fake,`); } r.push(`milk laden breasts.`); - } else if (V.PC.boobs >= 800) { + } else if (PC.boobs >= 800) { r.push(`big, milk laden breasts.`); - } else if (V.PC.boobs >= 650) { + } else if (PC.boobs >= 650) { r.push(`milk laden breasts.`); - } else if (V.PC.boobs >= 500) { + } else if (PC.boobs >= 500) { r.push(`small, milk laden breasts.`); - } else if (V.PC.boobs >= 300) { + } else if (PC.boobs >= 300) { r.push(`tiny, milk laden breasts.`); } else { r.push(`milk swollen chest.`); @@ -3605,7 +3613,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = r.push(`${He} tries to squirm away from the moist spot growing under ${his} cheek, but you reveal your nipple and carefully direct ${his} mouth over it.`); if (slave.fetish === "pregnancy") { r.push(`Slowly ${he} begins to suckle from your swollen breast. You gently brush ${his} head as you try to hold back your pleasure — a wasted effort, as a hand sneaks its way to your`); // TODO: handness - if (V.PC.dick !== 0) { + if (PC.dick !== 0) { r.push(`growing erection and enthusiastically begins pumping away.`); } else { r.push(`wet pussy and enthusiastically begins rubbing your clit.`); @@ -3617,7 +3625,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = } else { r.push(`You knew ${he} had a pregnancy fetish and ${his} eagerness to serve a pregnant ${womanP} proves that.`); } - r.push(`A kick from within startles you from your thoughts; as you reach to soothe your ${V.PC.pregType === 1 ? `child` : `children`}, you find your new slave <span class="mediumaquamarine">already doting on them.</span> ${He}'s already starting to <span class="hotpink">show understanding of ${his} place.</span>`); + r.push(`A kick from within startles you from your thoughts; as you reach to soothe your ${PC.pregType === 1 ? `child` : `children`}, you find your new slave <span class="mediumaquamarine">already doting on them.</span> ${He}'s already starting to <span class="hotpink">show understanding of ${his} place.</span>`); slave.devotion += 15; slave.trust += 15; } else if (slave.fetish === "boobs") { @@ -3628,7 +3636,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = } else { r.push(`You knew ${he} had a breast fetishist and ${his} eagerness to lighten a lactating ${womanP} proves that.`); } - r.push(`A kick from within startles you from your thoughts; you pat your gravid middle, reassuring your ${(V.PC.pregType === 1) ? `child`:`children`} that you'll make sure to save some milk for them. ${He}'s already starting to <span class="hotpink">show understanding of ${his} place</span> and even <span class="mediumaquamarine">beginning to build trust</span> with you.`); + r.push(`A kick from within startles you from your thoughts; you pat your gravid middle, reassuring your ${(PC.pregType === 1) ? `child`:`children`} that you'll make sure to save some milk for them. ${He}'s already starting to <span class="hotpink">show understanding of ${his} place</span> and even <span class="mediumaquamarine">beginning to build trust</span> with you.`); slave.devotion += 15; slave.trust += 15; } else { @@ -3654,7 +3662,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = slave.devotion += 5; slave.trust += 5; } - V.PC.lactationDuration = 2; + PC.lactationDuration = 2; return r.join(" "); }, @@ -3664,9 +3672,9 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = } } - if (slave.belly + V.PC.belly <= 2000) { + if (slave.belly + PC.belly <= 2000) { // got to be able to get close without bumps getting in the way - if (V.PC.boobs >= 800 && slave.boobs <= V.PC.boobs - 200 && slave.boobs >= 300) { + if (PC.boobs >= 800 && slave.boobs <= PC.boobs - 200 && slave.boobs >= 300) { choice({ // todo tankBorn get linkName() { return (tankBorn) ? `Permit ${him} to explore your expansive bust` : `Let your ample bust dominate ${his} pathetic one`; }, @@ -3681,9 +3689,9 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = r.push(`focusing on`); } r.push(`them. ${He} eagerly places ${his} hands to them and begins squeezing and massaging them, quickly becoming aroused ${himself}. ${He} pays close attention to your nipples, `); - if (V.PC.lactation > 0) { + if (PC.lactation > 0) { r.push(`squealing happily when milk begins to flow from them.`); - V.PC.lactationDuration = 2; + PC.lactationDuration = 2; } else { r.push(`grumbling unhappily when ${he} finds no milk within.`); } @@ -3811,8 +3819,8 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = }); } - if (canAchieveErection(slave) && canSee(slave) && V.PC.dick >= 4 && V.PC.dick > slave.dick && slave.trust >= -20) { - if (slave.energy > 95 || (slave.attrXX > 50 && slave.behavioralFlaw !== "hates women" && V.PC.boobs >= 400) || (slave.attrXY > 50 && slave.behavioralFlaw !== "hates men" && V.PC.boobs < 300) || (V.PC.belly >= 1500 && slave.fetish === "pregnancy") || (V.PC.boobs >= 1400 && slave.fetish === "pregnancy")) { + if (canAchieveErection(slave) && canSee(slave) && PC.dick >= 4 && PC.dick > slave.dick && slave.trust >= -20) { + if (slave.energy > 95 || (slave.attrXX > 50 && slave.behavioralFlaw !== "hates women" && PC.boobs >= 400) || (slave.attrXY > 50 && slave.behavioralFlaw !== "hates men" && PC.boobs < 300) || (PC.belly >= 1500 && slave.fetish === "pregnancy") || (PC.boobs >= 1400 && slave.fetish === "pregnancy")) { choice({ // todo tankBorn linkName: `Show ${him} what a real erection looks like`, @@ -4408,13 +4416,13 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = r.push(`asshole`); } r.push(`as an outlet for your sexual energy. You are not gentle; in fact, the point of the whole exercise is to gape ${him}. By the evening ${he}'s been fucked so hard that ${he}'s stopped jerking against the chair when you pound`); - if (V.PC.dick !== 0) { + if (PC.dick !== 0) { r.push(`your huge cock`); } else { r.push(`a huge strap-on`); } r.push(`in and out of ${him}, so you're obliged to get creative, sliding fingers in alongside`); - if (V.PC.dick !== 0) { + if (PC.dick !== 0) { r.push(`yourself`); } else { r.push(`it`); @@ -4699,7 +4707,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = } IncreasePCSkills('trading', 0.1); - if (V.PC.skill.slaving < 100 && jsRandom(V.PC.skill.slaving, 100) > 50) { + if (PC.skill.slaving < 100 && jsRandom(PC.skill.slaving, 100) > 50) { IncreasePCSkills('slaving', 0.5); } else { IncreasePCSkills('slaving', 0.1); diff --git a/src/npc/startingGirls/startingGirls.js b/src/npc/startingGirls/startingGirls.js index a8e89107b74..15c12bda60d 100644 --- a/src/npc/startingGirls/startingGirls.js +++ b/src/npc/startingGirls/startingGirls.js @@ -466,7 +466,7 @@ App.StartingGirls.applyPlayerOrigin = function(slave) { if (slave.mother === -1 && slave.father === -1) { slave.origin = "$He was conceived after some self-experimentation in hermaphrodite self-reproduction."; } else if (slave.mother === -1) { - slave.origin = "$He took root in your womb when you devided to play with the IFV tools."; + slave.origin = "$He took root in your womb when you decided to play with the IFV tools."; } else if (slave.father === -1) { slave.origin = "You provided the sperm for $his conception, but the client backed out post-birth so you offered to look after $him."; } else { diff --git a/src/pregmod/eliteTakeOverFight.tw b/src/pregmod/eliteTakeOverFight.tw index f79d64f8512..dde5002f02a 100644 --- a/src/pregmod/eliteTakeOverFight.tw +++ b/src/pregmod/eliteTakeOverFight.tw @@ -34,7 +34,7 @@ <br>You send a quick message to <<print App.SF.SFC()>> about your situation, then you pick up the revolver and quickly take aim. <<set $SpecialForcesMessageSent = 1>> <<case "enrage">> - <<if $PC.career != "wealth" && $PC.career != "engineer" && $PC.career != "medicine">> + <<if ["arcology owner", "wealth", "trust fund", "rich kid", "capitalist", "medicine", "medical assistant", "celebrity", "rising star", "BlackHat", "hacker", "escort", "prostitute", "child prostitute", "gang", "hoodlum"].includes($PC.career)>> You know exactly what to say in order to enrage them. <<set _EliteEnraged = 1>> <<elseif random(0,100) > 50>> diff --git a/src/uncategorized/costsReport.tw b/src/uncategorized/costsReport.tw index d248725996e..128816984ea 100644 --- a/src/uncategorized/costsReport.tw +++ b/src/uncategorized/costsReport.tw @@ -903,7 +903,7 @@ $researchLab.level > 0>> This brings the overall total to ''@@.yellowgreen;<<print cashFormat(_arcologyCosts+_total)>>@@'' before reductions. -<<if $PC.career == "servant">> +<<if $PC.career == "servant" || $PC.career == "handmaiden" || $PC.career == "child servant">> <br>Using your prior experience, you managed to lower your home's upkeep by @@.green;<<if $personalAttention == "upkeep">><<if $PC.belly >= 5000>>20%<<else>>25%<</if>><<else>>10%<</if>>.@@ <</if>> diff --git a/src/uncategorized/personalAttentionSelect.tw b/src/uncategorized/personalAttentionSelect.tw index 0051df89b58..146d15b0988 100644 --- a/src/uncategorized/personalAttentionSelect.tw +++ b/src/uncategorized/personalAttentionSelect.tw @@ -2,13 +2,15 @@ <<set $nextButton = "Back to Main", $nextLink = "Main">> -[[Focus on business|Main][$personalAttention = "business"]] -<<if $PC.career == "gang">> +<<if $PC.career == "gang" || $PC.career == "hoodlum" || $PC.career == "street urchin">> + [[Focus on business|Main][$personalAttention = "business"]] <br>[[Help people "pass" things around|Main][$personalAttention = "smuggling"]] -<<elseif $PC.career == "escort">> +<<elseif $PC.career == "escort" || $PC.career == "prostitute" || $PC.career == "child prostitute">> <br>[[Focus on "connecting"|Main][$personalAttention = "whoring"]] -<<elseif $PC.career == "servant">> +<<elseif $PC.career == "servant" || $PC.career == "handmaiden" || $PC.career == "child servant">> <br>[[Maintain your home|Main][$personalAttention = "upkeep"]] +<<else>> + [[Focus on business|Main][$personalAttention = "business"]] <</if>> <<if $PC.skill.warfare > 25>> <br>[[Survey your arcology's defenses in person|Main][$personalAttention = "defensive survey"]] -- GitLab