diff --git a/src/endWeek/saChoosesOwnClothes.js b/src/endWeek/saChoosesOwnClothes.js index 169954d1deb64cc6713f7cd8d660202718c1ecf1..6107a7d7e63d1f592c07e0a7dffddd3b7bcdae28 100644 --- a/src/endWeek/saChoosesOwnClothes.js +++ b/src/endWeek/saChoosesOwnClothes.js @@ -618,8 +618,10 @@ App.SlaveAssignment.choosesOwnClothes = function saChoosesOwnClothes(slave) { wardrobeFS.push({text: `and wears spats and a tank top to look younger and more energetic.`, clothes: "spats and a tank top"}); } if (V.arcologies[0].FSPhysicalIdealist > 0) { - wardrobeFS.push({text: `and coats ${himself} in body oil to show off how ${he}'s part of your physical idealism.`, clothes: "body oil"}); - wardrobeFS.push({text: `and goes totally nude to show off how ${he}'s part of your physical idealism.`, clothes: "no clothing"}); + if (slave.sexualFlaw !== "shamefast") { + wardrobeFS.push({text: `and coats ${himself} in body oil to show off how ${he}'s part of your physical idealism.`, clothes: "body oil"}); + wardrobeFS.push({text: `and goes totally nude to show off how ${he}'s part of your physical idealism.`, clothes: "no clothing"}); + } wardrobeFS.push({text: `and slips into a leotard for ${his} next workout.`, clothes: "a leotard"}); wardrobeFS.push({text: `and slips into some spats for ${his} next workout.`, clothes: "spats and a tank top"}); } else if (V.arcologies[0].FSHedonisticDecadence > 0) { @@ -642,15 +644,19 @@ App.SlaveAssignment.choosesOwnClothes = function saChoosesOwnClothes(slave) { } if (V.arcologies[0].FSBodyPurist > 0) { wardrobeFS.push({text: `and wears a leotard to show off the purity of ${his} body.`, clothes: "a leotard"}); - wardrobeFS.push({text: `but decides ${his} body is too nice to hide with clothing.`, clothes: "no clothing"}); - if (isItemAccessible.entry("body oil") === true) { - wardrobeFS.push({text: `and coats ${his} pure body in oil to make it stand out.`, clothes: "body oil"}); + if (slave.sexualFlaw !== "shamefast") { + wardrobeFS.push({text: `but decides ${his} body is too nice to hide with clothing.`, clothes: "no clothing"}); + if (isItemAccessible.entry("body oil") === true) { + wardrobeFS.push({text: `and coats ${his} pure body in oil to make it stand out.`, clothes: "body oil"}); + } } } else if (V.arcologies[0].FSTransformationFetishist > 0) { wardrobeFS.push({text: `and decides squeezing into a latex suit will only complement ${his} unnatural appearance.`, clothes: "restrictive latex"}); - wardrobeFS.push({text: `and decides to go nude, ensuring everyone sees ${his} assets.`, clothes: "no clothing"}); - if (isItemAccessible.entry("body oil") === true) { - wardrobeFS.push({text: `and coats ${his} assets in body oil to give them some extra shine.`, clothes: "body oil"}); + if (slave.sexualFlaw !== "shamefast") { + wardrobeFS.push({text: `and decides to go nude, ensuring everyone sees ${his} assets.`, clothes: "no clothing"}); + if (isItemAccessible.entry("body oil") === true) { + wardrobeFS.push({text: `and coats ${his} assets in body oil to give them some extra shine.`, clothes: "body oil"}); + } } } if (V.arcologies[0].FSAssetExpansionist > 0) { @@ -701,7 +707,7 @@ App.SlaveAssignment.choosesOwnClothes = function saChoosesOwnClothes(slave) { } } if (V.arcologies[0].FSChattelReligionist > 0) { - if (V.arcologies[0].FSChattelReligionistLaw2 === 1) { + if (V.arcologies[0].FSChattelReligionistLaw2 === 1 && slave.sexualFlaw !== "shamefast") { wardrobeFS.push({text: `but chooses to stay nude to promote Holy Nudism.`, clothes: "no clothing"}); if (isItemAccessible.entry("body oil") === true) { wardrobeFS.push({text: `and coats ${his} body in oil to highlight what God has given ${him}.`, clothes: "body oil"}); diff --git a/src/endWeek/saChoosesOwnJob.js b/src/endWeek/saChoosesOwnJob.js index 5c08029c433a542726925fa79861848b096a455f..ae1fdab11dfc9f0764c6e7f91d0ff74f9babff42 100644 --- a/src/endWeek/saChoosesOwnJob.js +++ b/src/endWeek/saChoosesOwnJob.js @@ -2,7 +2,6 @@ * This function is the old "first pass", which actually picks the job. * The slaves' reasoning is saved in saVars for later use. * @param {App.Entity.SlaveState} slave - * @returns {string} */ App.SlaveAssignment.choosesOwnJob = function saChoosesOwnJob(slave) { /** @type {string[]} */ @@ -156,8 +155,8 @@ App.SlaveAssignment.choosesOwnJob = function saChoosesOwnJob(slave) { choice.push(`is obedient but not devoted, so ${he} <span class="job change">decides to work as a servant</span> since it's the least sexually demanding job available.`); choice.push(assignJob(slave, "be a servant")); } - } else if (V.universalRulesAssignsSelfFacility === 1 && slave.devotion > 50 && canWalk(slave) && canSee(slave) && V.nursery > nurseryL && (V.cribs.findIndex((c) => (c.mother === slave.ID || c.father === slave.ID)))) { - if (V.cribs.findIndex((c) => (c.mother === slave.ID || c.father === slave.ID))) { + } else if (V.universalRulesAssignsSelfFacility === 1 && slave.devotion > 50 && canWalk(slave) && canSee(slave) && V.nursery > nurseryL && (V.cribs.find((c) => (c.mother === slave.ID || c.father === slave.ID)))) { + if (V.cribs.find((c) => (c.mother === slave.ID || c.father === slave.ID))) { choice.push(`wants to look after ${his} child, so ${he} <span class="job change">decides to work in ${V.nurseryName}.</span>`); choice.push(assignJob(slave, "work as a nanny")); } else { // motherly sexualQuirk diff --git a/src/endWeek/saClothes.js b/src/endWeek/saClothes.js index 5269ecd65078d6b51489a23ea20fb1c74c028afe..dd3f6677b956d0327e228368269276630a0f8be2 100644 --- a/src/endWeek/saClothes.js +++ b/src/endWeek/saClothes.js @@ -315,6 +315,19 @@ App.SlaveAssignment.clothes = function saClothes(slave) { slave.trust += 1; } break; + case "body oil": + if (slave.sexualFlaw === "shamefast") { + r.push(`${He} is <span class="mediumorchid">mortified</span> that ${he} has nothing but oil to cover up ${his} body, and is incapable of taking pleasure in getting all oiled up.`); + slave.devotion -= 3; + } else if (slave.devotion < -20) { + r.push(`${He} is <span class="mediumorchid">inappropriately pleased</span> by the sensual process of oiling up ${his} body.`); + slave.devotion -= 3; + } else { + r.push(`${His} <span class="mediumaquamarine">confidence</span> and <span class="hotpink">devotion</span> are reinforced by the sensual process of oiling up ${his} body every morning.`); + slave.devotion += 1; + slave.trust += 1; + } + break; default: if (slave.devotion <= 20) { if (App.Data.clothes.get(slave.clothes).exposure === 0) { diff --git a/src/events/intro/pcAppearance.js b/src/events/intro/pcAppearance.js index 531cd4e961fc6ab51d09859a97a92ef93ba99338..24a0d9491e23802bb2450ddc3a1380283c717032 100644 --- a/src/events/intro/pcAppearance.js +++ b/src/events/intro/pcAppearance.js @@ -318,10 +318,7 @@ App.UI.Player.appearance = function(options, summary = false) { options.addOption("Your clit is", "clit", V.PC) .addValueList([["Normal", 0], ["Large", 1], ["Huge", 2]]); options.addOption("It is", "foreskin", V.PC) - .addValueList([ - ["Exposed by a circumcision", 0] - ["Covered by a hood", 1], - ]) + .addValueList([["Exposed by a circumcision", 0],["Covered by a hood", 1]]); } if (V.PC.physicalAge <= 18) { options.addOption("You are", "vagina", V.PC) diff --git a/src/events/recFS/recfsYouthPreferentialist.js b/src/events/recFS/recfsYouthPreferentialist.js index 7b22a5752ff95eb136489c0799d587b5169dab4c..edbc2a43132299bfabf538de63c4431f45096dfe 100644 --- a/src/events/recFS/recfsYouthPreferentialist.js +++ b/src/events/recFS/recfsYouthPreferentialist.js @@ -21,12 +21,7 @@ App.Events.recFSYouthPreferentialist = class recFSYouthPreferentialist extends A setHealth(slave, jsRandom(-40, 30), undefined, undefined, 0, 70); slave.devotion = random(10, 15); slave.trust = random(-55, -75); - /* - slave.anus = random(2,3); - slave.weight = random(-80,-20); - slave.boobs -= 50*random(1,2); - slave.butt -= random(0,1); - */ + slave.birthWeek = 0; // turns {age} this week slave.behavioralFlaw = either("anorexic", "devout", "gluttonous", "hates men", "hates women", "odd"); slave.sexualFlaw = either("apathetic", "hates anal", "hates oral", "repressed", "shamefast"); diff --git a/src/events/scheduled/sePCBirthday.desc.js b/src/events/scheduled/sePCBirthday.desc.js index 3a5c9624c13660f76ad938974899f4ac46f174b7..a609c995ac881fae83656c3baf03d36616bbae31 100644 --- a/src/events/scheduled/sePCBirthday.desc.js +++ b/src/events/scheduled/sePCBirthday.desc.js @@ -188,7 +188,7 @@ App.Events.pcBirthday.Desc = (function(bday) { When you look back down at your screen, you find a trio of beautiful, curvaceous slaves, fumbling over each other in a hedonistic pile. "...Maybe," you hear ${data.assistPN.her} clarify. </p> - ${this.renderChoice_Business_AssistantVideo()} + ${this.renderChoice_Business_AssistantVideo(data)} <p> You look over at ${V.assistant.name} again. "Happy birthday, ${properTitle()}. I spent all week rendering it. Now let's make some money!" </p>`; @@ -212,8 +212,9 @@ App.Events.pcBirthday.Desc = (function(bday) { }, /** * Helper function for a mini-scene. + * @param {App.Events.pcBirthday.EventData} data */ - renderChoice_Business_AssistantVideo: function() { + renderChoice_Business_AssistantVideo: function(data) { let slaveDescSing = "woman"; let slaveDescPlural = "women"; diff --git a/src/events/scheduled/sePCBirthday.js b/src/events/scheduled/sePCBirthday.js index 98d37d7e3c051ca0caddc11f2ae84d660ca7da61..51274ce8de135086247e1e56dad6a5943cc94778 100644 --- a/src/events/scheduled/sePCBirthday.js +++ b/src/events/scheduled/sePCBirthday.js @@ -30,6 +30,7 @@ App.Events.SEpcBirthday = class SEpcBirthday extends App.Events.BaseEvent { * @property {?App.Events.pcBirthday.PlannerData} planner The possible party planner and their role; may be `null` if none is found. See `determinePlanner()`. * The scene doesn't *have* to use the planner, even if one is found. * @property {App.Utils.Pronouns} assistPN Pronouns for the player's assistant. + * @property {App.Utils.Pronouns} marketPN Pronouns for the market assistant. * @property {string} attire Records the dress type chosen by the player in some branches. */ diff --git a/src/facilities/incubator/inspectTankSettings.js b/src/facilities/incubator/inspectTankSettings.js index d18fb381a9f8eca633c1e63f18a0fc057dc7efb0..8dc3c1492679e5502daacc308b3cf4a694b20879 100644 --- a/src/facilities/incubator/inspectTankSettings.js +++ b/src/facilities/incubator/inspectTankSettings.js @@ -1,7 +1,4 @@ App.UI.inspectTankSettings = function(isFetus, isPCMother = false) { - - // V.nextLink = "Incubator"; - // V.storedLink = "Incubator"; let tankSetting; let child; let fetus; @@ -41,7 +38,7 @@ App.UI.inspectTankSettings = function(isFetus, isPCMother = false) { /* Age */ if (isFetus) { - let target = Math.round(tankSetting.targetAge); //This is fine because it will only be displayed when growTime has not been depeleted + let target = Math.round(tankSetting.targetAge); // This is fine because it will only be displayed when growTime has not been depleted let r = []; r.push("Target age for release:"); r.push( @@ -84,7 +81,7 @@ App.UI.inspectTankSettings = function(isFetus, isPCMother = false) { () => { target = V.potencyAge; tankSetting.targetAge = target; - jQuery(container).empty().append(content()); + jQuery(container).empty().append(content()); } ) ); @@ -94,7 +91,7 @@ App.UI.inspectTankSettings = function(isFetus, isPCMother = false) { () => { target = 18; tankSetting.targetAge = target; - jQuery(container).empty().append(content()); + jQuery(container).empty().append(content()); } ) ); @@ -106,7 +103,7 @@ App.UI.inspectTankSettings = function(isFetus, isPCMother = false) { if (isFetus) { section.append(`Target age for release: ${tankSetting.targetAge}`); } else { - section.append(`Target age for release: ${child.physicalAge}`); //This is already set, apparently + section.append(`Target age for release: ${child.physicalAge}`); // This is already set, apparently } section.append(App.UI.DOM.makeElement("div", `Cannot be changed on tanks in use`)); node.append(section); @@ -284,10 +281,9 @@ App.UI.inspectTankSettings = function(isFetus, isPCMother = false) { if (isFetus) { section.append(" ", App.UI.DOM.generateLinksStrip(linkArray)); } + } - } - - if ( V.incubator.upgrade.reproduction === 1 && V.incubator.upgrade.pregAdaptation === 1 && !isFetus) { + if (V.incubator.upgrade.reproduction === 1 && V.incubator.upgrade.pregAdaptation === 1 && !isFetus) { section.append(App.UI.DOM.makeElement("div", `Due to the high complexity and steep risks of the procedure, these settings cannot be changed on tanks in use.`)); } node.append(section); @@ -414,4 +410,4 @@ App.UI.inspectTankSettings = function(isFetus, isPCMother = false) { } ); } -} \ No newline at end of file +}; diff --git a/src/js/economyJS.js b/src/js/economyJS.js index 4f366fbe24667e6e2d84759a3566a44352fdca8e..f1d7677bc16c7c6d5e472a7c5377d480c83c34da 100644 --- a/src/js/economyJS.js +++ b/src/js/economyJS.js @@ -2483,7 +2483,10 @@ globalThis.getSlaveStatisticData = function(s, facility) { rep: 0, food: 0, cost: getSlaveCost(s), - customers: 0 // brothel, club, ... + customers: 0, // brothel, club, ... + milk: 0, + cum: 0, + fluid: 0, // diary }; } @@ -2504,7 +2507,10 @@ globalThis.getSlaveStatisticData = function(s, facility) { rep: 0, food: 0, cost: getSlaveCost(s), - customers: 0 /* brothel, club, ... */ + customers: 0, /* brothel, club, ... */ + milk: 0, + cum: 0, + fluid: 0, // diary }; facility.income.set(s.ID, data); return data; diff --git a/src/npc/interaction/fDick.js b/src/npc/interaction/fDick.js index 0b2e6e17e9923573f472278714cfe9972bc81154..ca1feda9145223c2f9b1b0af151862146b9e5b3d 100644 --- a/src/npc/interaction/fDick.js +++ b/src/npc/interaction/fDick.js @@ -12,7 +12,7 @@ App.Interact.fDick = function(slave) { // TODO: .pregMood and more amp variants - seX(slave, "penetrative", V.PC); + seX(slave, "penetrative", V.PC, V.PC.vagina !== -1 ? "vaginal" : "anal"); const cunt = V.PC.vagina !== -1 ? "cunt" : "rectal"; // TODO: probably ought to be able to *choose* vaginal or anal sex if they're both valid const belly = bellyAdjective(slave);