From 3679353cbc4e78465f168e20b097538b3715728c Mon Sep 17 00:00:00 2001 From: Pregmodder <pregmodder@gmail.com> Date: Tue, 25 Sep 2018 23:37:46 -0400 Subject: [PATCH] fixes and cleanup --- devNotes/VersionChangeLog-Premod+LoliMod.txt | 5 +- devNotes/twine JS.txt | 477 +++++++++++++++++-- src/init/setupVars.tw | 6 +- src/js/economyJS.tw | 15 +- src/utility/slaveCreationWidgets.tw | 4 +- 5 files changed, 461 insertions(+), 46 deletions(-) diff --git a/devNotes/VersionChangeLog-Premod+LoliMod.txt b/devNotes/VersionChangeLog-Premod+LoliMod.txt index 67881331415..ba02eb74f5c 100644 --- a/devNotes/VersionChangeLog-Premod+LoliMod.txt +++ b/devNotes/VersionChangeLog-Premod+LoliMod.txt @@ -4,12 +4,9 @@ 9/25/2018 - 44 - -fixes - -added more options to the RA - 43 -fixes + -added more options to the RA -added nipple fuck interaction 42 diff --git a/devNotes/twine JS.txt b/devNotes/twine JS.txt index 9cb63cb21f4..50bca093dc7 100644 --- a/devNotes/twine JS.txt +++ b/devNotes/twine JS.txt @@ -271,6 +271,14 @@ window.canImpreg = function(slave1, slave2) { return null; } else if (slave2.dick < 1) { return false; + } else if (slave2.ID === -1) { + if (slave1.eggType != "human") { + return false; + } else if (!canGetPregnant(slave1)) { /* includes chastity checks */ + return false; + } else { + return true; + } } else if (slave2.balls < 1) { return false; } else if (slave2.dickAccessory == "chastity") { @@ -281,6 +289,14 @@ window.canImpreg = function(slave1, slave2) { return false; } else if (slave2.vasectomy == 1) { return false; + } else if (slave1.ID === -1) { + if (slave2.ballType != "human") { + return false; + } else if (!isPlayerFertile(slave1)) { + return false; + } else { + return true; + } } else if (!canBreed(slave1, slave2)) { return false; /* pregmod end */ } else if (!canGetPregnant(slave1)) { /* includes chastity checks */ @@ -308,7 +324,7 @@ window.isFertile = function(slave) { return false; } else if (slave.ovaryAge >= 47) { return false; - } else if (slave.inflation != 0) { + } else if (slave.inflation > 2) { return false; } else if (slave.bellyImplant != -1) { return false; @@ -723,6 +739,7 @@ window.expandFacilityAssignments = function(facilityAssignments) { var assignmentPairs = { "serve in the club": "be the DJ", "rest in the spa": "be the Attendant", + "work as a nanny": "be the Matron", "work in the brothel": "be the Madam", "work in the dairy": "be the Milkmaid", "work as a servant": "be the Stewardess", @@ -731,7 +748,6 @@ window.expandFacilityAssignments = function(facilityAssignments) { "serve in the master suite": "be your Concubine", "learn in the schoolroom": "be the Schoolteacher", "be confined in the cellblock": "be the Wardeness", - "be a nanny": "be the Matron", }; if (!facilityAssignments || !facilityAssignments.length) @@ -1799,7 +1815,7 @@ window.Job = Object.freeze({ SERVANT: 'work as a servant', SERVER: 'be a servant', STEWARD: 'be the Stewardess', CLUB: 'serve in the club', DJ: 'be the DJ', JAIL: 'be confined in the cellblock', WARDEN: 'be the Wardeness', CLINIC: 'get treatment in the clinic', NURSE: 'be the Nurse', HGTOY: 'live with your Head Girl', SCHOOL: 'learn in the schoolroom', TEACHER: 'be the Schoolteacher', SPA: 'rest in the spa', ATTEND: 'be the Attendant', - REST: 'rest'}); + NANNY: 'work as a nanny', MATRON: 'be the Matron', REST: 'rest'}); window.PersonalAttention = Object.freeze({TRADE: 'trading', WAR: 'warfare', SLAVING: 'slaving', ENGINEERING: 'engineering', MEDICINE: 'medicine', MAID: 'upkeep', HACKING: 'hacking'}); window.getCost = function(array) { @@ -2166,7 +2182,7 @@ window.getSlaveCost = function(s) { cost += rulesCost; } break; - case Job.SPA: + case Job.SPA: case Job.NANNY: if(s.livingRules === LivingRule.LUXURIOUS) { cost += rulesCost * 1.75; } else if(s.livingRules == LivingRule.NORMAL) { @@ -2195,6 +2211,7 @@ window.getSlaveCost = function(s) { break; case Job.MADAM: case Job.DJ: case Job.NURSE: case Job.WARDEN: case Job.ATTEND: case Job.STEWARD: case Job.MILKMAID: case Job.TEACHER: + case Job.MATRON: cost += rulesCost * 2; break; default: @@ -2241,6 +2258,15 @@ window.getSlaveCost = function(s) { // TODO: Include them here anyway? } else { cost += foodCost * s.pregType * (s.pregControl === 'speed up' ? 3 : 1); + if (s.pregType >= 100) { + cost += foodCost * 5 * s.pregType * (s.pregControl === 'speed up' ? 3 : 1); + } else if (s.pregType >= 50) { + cost += foodCost * 3 * s.pregType * (s.pregControl === 'speed up' ? 3 : 1); + } else if (s.pregType >= 30) { + cost += foodCost * 2 * s.pregType * (s.pregControl === 'speed up' ? 3 : 1); + } else if (s.pregType >= 10) { + cost += foodCost * s.pregType * (s.pregControl === 'speed up' ? 3 : 1); + } } } if(s.diet === 'XX' || s.diet === 'XY' || s.diet === 'fertility') { @@ -2542,6 +2568,13 @@ window.RAFacilityRemove = function RAFacilityRemove(slave, rule) { } break; + case "work as a nanny": + if (slave.assignment === rule.setAssignment) { + r += `<br>${slave.slaveName} has been removed from ${V.nurseryName} and has been assigned to ${rule.removalAssignment}.`; + assignJob(slave, rule.removalAssignment); + } + break; + case "get treatment in the clinic": if (slave.assignment === rule.setAssignment) { r += `<br>{slave.slaveName} has been removed from ${V.clinicName} and has been assigned to ${rule.removalAssignment}.`; @@ -2637,6 +2670,7 @@ window.emptyDefaultRule = function emptyDefaultRule() { }, set: { releaseRules: "no default setting", + toyHole: "no default setting", clitSetting: "no default setting", clitSettingXY: "no default setting", clitSettingXX: "no default setting", @@ -2699,6 +2733,7 @@ window.emptyDefaultRule = function emptyDefaultRule() { diet: "no default setting", dietCum: "no default setting", dietMilk: "no default setting", + onDiet: "no default setting", muscles: "no default setting", XY: "no default setting", XX: "no default setting", @@ -2749,6 +2784,7 @@ window.emptyDefaultRule = function emptyDefaultRule() { label: "no default setting", removeLabel: "no default setting", skinColor: "no default setting", + inflationType: "no default setting", } }; return rule; @@ -3669,6 +3705,167 @@ window.ValidateFacilityDecoration = function ValidateFacilityDecoration(decorati } }; +window.FSChange = function FSChange(FS, magnitude, bonus_multiplier) { + "use strict"; + const V = State.variables; + let errorMessage = ""; + + switch (FS) { + case "Supremacist": + if (Number.isFinite(V.arcologies[0].FSSupremacist)) { + V.rep += magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSSupremacist / V.FSLockinLevel); + V.arcologies[0].FSSupremacist += 0.05 * magnitude * V.FSSingleSlaveRep * (bonus_multiplier || 1); + } + break; + case "Subjugationist": + if (Number.isFinite(V.arcologies[0].FSSubjugationist)) { + V.rep += magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSSubjugationist / V.FSLockinLevel); + V.arcologies[0].FSSubjugationist += 0.05 * magnitude * V.FSSingleSlaveRep * (bonus_multiplier || 1); + } + break; + case "GenderRadicalist": + if (Number.isFinite(V.arcologies[0].FSGenderRadicalist)) { + V.rep += magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSGenderRadicalist / V.FSLockinLevel); + V.arcologies[0].FSGenderRadicalist += 0.05 * magnitude * V.FSSingleSlaveRep * (bonus_multiplier || 1); + } + break; + case "GenderFundamentalist": + if (Number.isFinite(V.arcologies[0].FSGenderFundamentalist)) { + V.rep += magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSGenderFundamentalist / V.FSLockinLevel); + V.arcologies[0].FSGenderFundamentalist += 0.05 * magnitude * V.FSSingleSlaveRep * (bonus_multiplier || 1); + } + break; + case "Paternalist": + if (Number.isFinite(V.arcologies[0].FSPaternalist)) { + V.rep += magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSPaternalist / V.FSLockinLevel); + V.arcologies[0].FSPaternalist += 0.05 * magnitude * V.FSSingleSlaveRep * (bonus_multiplier || 1); + } + break; + case "Degradationist": + if (Number.isFinite(V.arcologies[0].FSDegradationist)) { + V.rep += magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSDegradationist / V.FSLockinLevel); + V.arcologies[0].FSDegradationist += 0.05 * magnitude * V.FSSingleSlaveRep * (bonus_multiplier || 1); + } + break; + case "AssetExpansionist": + if (Number.isFinite(V.arcologies[0].FSAssetExpansionist)) { + V.rep += magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSAssetExpansionist / V.FSLockinLevel); + V.arcologies[0].FSAssetExpansionist += 0.05 * magnitude * V.FSSingleSlaveRep * (bonus_multiplier || 1); + } + break; + case "SlimnessEnthusiast": + if (Number.isFinite(V.arcologies[0].FSSlimnessEnthusiast)) { + V.rep += magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSSlimnessEnthusiast / V.FSLockinLevel); + V.arcologies[0].FSSlimnessEnthusiast += 0.05 * magnitude * V.FSSingleSlaveRep * (bonus_multiplier || 1); + } + break; + case "TransformationFetishist": + if (Number.isFinite(V.arcologies[0].FSTransformationFetishist)) { + V.rep += magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSTransformationFetishist / V.FSLockinLevel); + V.arcologies[0].FSTransformationFetishist += 0.05 * magnitude * V.FSSingleSlaveRep * (bonus_multiplier || 1); + } + break; + case "BodyPurist": + if (Number.isFinite(V.arcologies[0].FSBodyPurist)) { + V.rep += magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSBodyPurist / V.FSLockinLevel); + V.arcologies[0].FSBodyPurist += 0.05 * magnitude * V.FSSingleSlaveRep * (bonus_multiplier || 1); + } + break; + case "MaturityPreferentialist": + if (Number.isFinite(V.arcologies[0].FSMaturityPreferentialist)) { + V.rep += magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSMaturityPreferentialist / V.FSLockinLevel); + V.arcologies[0].FSMaturityPreferentialist += 0.05 * magnitude * V.FSSingleSlaveRep * (bonus_multiplier || 1); + } + break; + case "YouthPreferentialist": + if (Number.isFinite(V.arcologies[0].FSYouthPreferentialist)) { + V.rep += magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSYouthPreferentialist / V.FSLockinLevel); + V.arcologies[0].FSYouthPreferentialist += 0.05 * magnitude * V.FSSingleSlaveRep * (bonus_multiplier || 1); + } + break; + case "Pastoralist": + if (Number.isFinite(V.arcologies[0].FSPastoralist)) { + V.rep += magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSPastoralist / V.FSLockinLevel); + V.arcologies[0].FSPastoralist += 0.05 * magnitude * V.FSSingleSlaveRep * (bonus_multiplier || 1); + } + break; + case "PhysicalIdealist": + if (Number.isFinite(V.arcologies[0].FSPhysicalIdealist)) { + V.rep += magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSPhysicalIdealist / V.FSLockinLevel); + V.arcologies[0].FSPhysicalIdealist += 0.05 * magnitude * V.FSSingleSlaveRep * (bonus_multiplier || 1); + } + break; + case "ChattelReligionist": + if (Number.isFinite(V.arcologies[0].FSChattelReligionist)) { + V.rep += magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSChattelReligionist / V.FSLockinLevel); + V.arcologies[0].FSChattelReligionist += 0.05 * magnitude * V.FSSingleSlaveRep * (bonus_multiplier || 1); + } + break; + case "RomanRevivalist": + if (Number.isFinite(V.arcologies[0].FSRomanRevivalist)) { + V.rep += magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSRomanRevivalist / V.FSLockinLevel); + V.arcologies[0].FSRomanRevivalist += 0.05 * magnitude * V.FSSingleSlaveRep * (bonus_multiplier || 1); + } + break; + case "AztecRevivalist": + if (Number.isFinite(V.activeArcology.FSAztecRevivalist)) { + V.rep += magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSAztecRevivalist / V.FSLockinLevel); + V.arcologies[0].FSAztecRevivalist += 0.05 * magnitude * V.FSSingleSlaveRep * (bonus_multiplier || 1); + } + break; + case "EgyptianRevivalist": + if (Number.isFinite(V.arcologies[0].FSEgyptianRevivalist)) { + V.rep += magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSEgyptianRevivalist / V.FSLockinLevel); + V.arcologies[0].FSEgyptianRevivalist += 0.05 * magnitude * V.FSSingleSlaveRep * (bonus_multiplier || 1); + } + break; + case "EdoRevivalist": + if (Number.isFinite(V.arcologies[0].FSEdoRevivalist)) { + V.rep += magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSEdoRevivalist / V.FSLockinLevel); + V.arcologies[0].FSEdoRevivalist += 0.05 * magnitude * V.FSSingleSlaveRep * (bonus_multiplier || 1); + } + break; + case "ArabianRevivalist": + if (Number.isFinite(V.arcologies[0].FSArabianRevivalist)) { + V.rep += magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSArabianRevivalist / V.FSLockinLevel); + V.arcologies[0].FSArabianRevivalist += 0.05 * magnitude * V.FSSingleSlaveRep * (bonus_multiplier || 1); + } + break; + case "ChineseRevivalist": + if (Number.isFinite(V.arcologies[0].FSChineseRevivalist)) { + V.rep += magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSChineseRevivalist / V.FSLockinLevel); + V.arcologies[0].FSChineseRevivalist += 0.05 * magnitude * V.FSSingleSlaveRep * (bonus_multiplier || 1); + } + break; + case "Repopulationist": + if (Number.isFinite(V.arcologies[0].FSRepopulationFocus)) { + V.rep += magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSRepopulationFocus / V.FSLockinLevel); + V.arcologies[0].FSRepopulationFocus += 0.05 * magnitude * V.FSSingleSlaveRep * (bonus_multiplier || 1); + } + break; + case "Eugenics": + if (Number.isFinite(V.arcologies[0].FSRestart)) { + V.rep += magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSRestart / V.FSLockinLevel); + V.arcologies[0].FSRestart += 0.05 * magnitude * V.FSSingleSlaveRep * (bonus_multiplier || 1); + } + break; + case "Hedonism": + if (Number.isFinite(V.arcologies[0].FSHedonisticDecadence)) { + V.rep += magnitude * V.FSSingleSlaveRep * (V.arcologies[0].FSHedonisticDecadence / V.FSLockinLevel); + V.arcologies[0].FSHedonisticDecadence += 0.05 * magnitude * V.FSSingleSlaveRep * (bonus_multiplier || 1); + } + break; + default: + errorMessage += "<span class='red'>ERROR: bad FS reference</span>"; + } + return errorMessage; +}; + +/* Currently unused, widget version routes directly through FSChange() */ +window.FSChangePorn = function FSChangePorn(FS, magnitude) { + return FSChange(FS, magnitude, State.variables.pornFameBonus); +}; + window.ordinalSuffix = function ordinalSuffix(i) { var j = i % 10, k = i % 100; @@ -6919,7 +7116,7 @@ window.inferiorRaceP = function inferiorRaceP(slave) { window.isLeaderP = function isLeaderP(slave) { const V = State.variables; - const leaders = [V.HeadGirl, V.Bodyguard, V.Recruiter, V.Concubine, V.Nurse, V.Attendant, V.Madam, V.DJ, V.Milkmaid, V.Stewardess, V.Schoolteacher, V.Wardeness]; + const leaders = [V.HeadGirl, V.Bodyguard, V.Recruiter, V.Concubine, V.Nurse, V.Attendant, V.Matron, V.Madam, V.DJ, V.Milkmaid, V.Stewardess, V.Schoolteacher, V.Wardeness]; return leaders.some(leader => leader.ID && leader.ID === slave.ID); }; @@ -7667,6 +7864,9 @@ window.PCTitle = function PCTitle() { if (V.arcadeSlaves >= 15) { titles.push("Comptroller of the Arcade"); } + if (V.nurserySlave >= 10) { + titles.push("Caretaker of the Infants"); + } let schoolsPresent = [], schoolsPerfected = [], schoolTitle = ""; if (V.TSS.schoolProsperity >= 10) { @@ -8182,6 +8382,7 @@ window.DegradingName = function DegradingName(slave) { const V = State.variables; const leadershipPosition = [ "be the Attendant", + "be the Matron", "be the Stewardess", "be the Milkmaid", "be the DJ", @@ -8519,6 +8720,9 @@ window.DegradingName = function DegradingName(slave) { case "be the Attendant": slave.slaveName = jsEither(["Bath", "Spa"]); break; + case "be the Matron": + slave.slaveName = jsEither(["Nanny", "Matron"]); + break; case "be the Stewardess": slave.slaveName = jsEither(["Servant", "Maid"]); break; @@ -8620,6 +8824,10 @@ window.SlaveSort = function SlaveSort(slaves, main=false) { } }; +window.slaveSortMinor = function slaveSortMinor(slaves) { + slaves = slaves.sort((a, b) => a.slaveName < b.slaveName ? -1 : 1); +} + window.MenialPopCap = function MenialPopCap () { const V = State.variables; let popCap = 500; @@ -8964,7 +9172,21 @@ window.assignJob = function assignJob(slave, job) { } break; + case "work as a nanny": + case "nursery": + slave.assignment = "work as a nanny"; + slave.assignmentVisible = 0; + V.nurserySlaves++; + V.NurseryiIDs.push(slave.ID); + switch (V.nurseryDecoration) { + default: + slave.livingRules = "normal"; + break; + } + break; + case "be the attendant": + case "be the matron": case "be the dj": case "be the madam": case "be the milkmaid": @@ -9074,6 +9296,8 @@ window.removeJob = function removeJob(slave, assignment) { V.Schoolteacher = 0; if (V.Attendant !== 0 && slave.ID === V.Attendant.ID) V.Attendant = 0; + if (V.Matron !== 0 && slave.ID === V.Matron.ID) + V.Matron = 0; if (V.Nurse !== 0 && slave.ID === V.Nurse.ID) V.Nurse = 0; if (V.Stewardess !== 0 && slave.ID === V.Stewardess.ID) @@ -11900,6 +12124,16 @@ window.HSM = function() { return .75; } + window.TierTwoUnlockCalc = function() { + const V = State.variables; + if (V.securityForceInfantryPower > 5) V.securityForceInfantryPower = 5; + if (V.securityForceArcologyUpgrades > 5) V.securityForceArcologyUpgrades = 5; + if (V.securityForceVehiclePower > 5) V.securityForceVehiclePower = 5; + if (V.securityForceDronePower > 5) V.securityForceDronePower = 5; + if (V.securityForceStimulantPower > 5) V.securityForceStimulantPower = 5; + if (V.securityForceAircraftPower > 5) V.securityForceAircraftPower = 5; + } + /*:: colorModeJS [script]*/ window.flipColors = function (lightColorMap){ @@ -12120,6 +12354,7 @@ window.DefaultRules = (function() { ProcessContraceptives(slave, rule); ProcessOtherDrugs(slave, rule); ProcessAssetGrowthDrugs(slave, rule); + ProcessEnema(slave, rule); ProcessDiet(slave, rule); ProcessCuratives(slave, rule); ProcessAphrodisiacs(slave, rule); @@ -12134,8 +12369,11 @@ window.DefaultRules = (function() { ProcessPunishment(slave, rule); ProcessReward(slave, rule); } + ProcessToyHole(slave, rule); ProcessDietCum(slave, rule); ProcessDietMilk(slave, rule); + if (V.arcologies[0].FSHedonisticDecadenceResearch === 1) + ProcessSolidFood(slave, rule); ProcessTeeth(slave, rule); ProcessStyle(slave, rule); ProcessPiercings(slave, rule); @@ -12211,6 +12449,15 @@ window.DefaultRules = (function() { delete rule.setAssignment; } break; + + case "work as a nanny": + if ((V.nurserySlaves < V.nursery) && !slave.fuckdoll && (slave.devotion > 20 || slave.trust > 20)) + break; + else { + RAFacilityRemove(slave, rule); // before deleting rule.setAssignment + delete rule.setAssignment; + } + break; case "work in the brothel": if ((V.brothelSlaves < V.brothel && (slave.devotion > 50 || slave.trust > 50 || slave.trust < -50 || (slave.devotion >= -50 && slave.trust < -20)) && (slave.breedingMark != 1 || V.propOutcome === 0))) @@ -12365,6 +12612,9 @@ window.DefaultRules = (function() { case "rest in the spa": r += `<br>${slave.slaveName} has been automatically assigned to rest in ${V.spaName}.`; break; + case "work as a nanny": + r += `<br>${slave.slaveName} has been automatically assigned to work in ${V.nurseryName}.`; + break; case "work in the brothel": r += `<br>${slave.slaveName} has been automatically assigned to work in ${V.brothelName}.`; break; @@ -13377,7 +13627,7 @@ window.DefaultRules = (function() { break; case "appetite suppressors": - if (!(slave.weight > -95)) + if (!(slave.weight <= -95)) flag = false; break; @@ -13404,6 +13654,46 @@ window.DefaultRules = (function() { } } + function ProcessEnema(slave, rule) { + if ((rule.inflationType !== undefined) && (rule.inflationType !== "no default setting")) { + if (slave.inflationType !== rule.inflationType) { + if ((slave.inflationType === "curative" && slave.health > 90) || (slave.inflationType === "tightener" && slave.anus <= 1 && slave.vagina <= 1)) { + r += `<br>${slave.slaveName} cannot benefit from her assigned enema and has been defaulted to none.`; + slave.inflation = 0; + slave.inflationType = "none"; + slave.inflationMethod = 0; + slave.milkSource = 0; + slave.cumSource = 0; + SetBellySize(slave); + } else if ((rule.inflationType === "curative" && slave.health > 90) || (rule.inflationType === "tightener" && slave.anus <= 1 && slave.vagina <= 1)) { + } else { + r += `<br>${slave.slaveName}'s current enema regimen has been set to ${rule.inflationType}.`; + slave.inflation = 1; + slave.inflationType = rule.inflationType; + slave.inflationMethod = 2; + slave.milkSource = 0; + slave.cumSource = 0; + SetBellySize(slave); + } + } + if (slave.inflationType !== "none" && slave.inflation > 1 && slave.health < -50) { + r += `<br>${slave.slaveName}'s current enema regimen risks death, so it has been reduced to a less threatening level.`; + slave.inflation = 1; + SetBellySize(slave); + } else if (slave.inflation > 1 && (slave.bellyPreg >= 1500 || slave.bellyImplant >= 1500)) { + r += `<br>${slave.slaveName}'s current enema is too much for her body, so it has been reduced.`; + slave.inflation = 1; + SetBellySize(slave); + } else if (slave.inflationType === "none") { + slave.inflation = 0; + slave.inflationMethod = 0; + slave.milkSource = 0; + slave.cumSource = 0; + SetBellySize(slave); + } + } + } + function ProcessDiet(slave, rule) { // Diet Setting if (rule.diet !== undefined && rule.diet !== "no default setting") { @@ -13787,6 +14077,39 @@ window.DefaultRules = (function() { } } + function ProcessToyHole(slave, rule) { + if ((rule.toyHole !== undefined) && (rule.toyHole !== "no default setting")) { + if (rule.toyHole === "pussy") { + if (slave.vagina > 0 && canDoVaginal(slave)) { + slave.toyHole = rule.toyHole ; + r += `<br>${slave.slaveName} has been instructed to use her ${rule.toyHole} to please you.`; + } else if (slave.toyHole !== "all her holes") { + slave.toyHole = "all her holes" ; + r += `<br>${slave.slaveName}'s hole preference has defaulted to all her holes.`; + } + } else if (rule.toyHole === "ass") { + if (slave.anus > 0 && canDoAnal(slave)) { + slave.toyHole = rule.toyHole ; + r += `<br>${slave.slaveName} has been instructed to use her ${rule.toyHole} to please you.`; + } else if (slave.toyHole !== "all her holes") { + slave.toyHole = "all her holes" ; + r += `<br>${slave.slaveName}'s hole preference has defaulted to all her holes.`; + } + } else if (rule.toyHole === "dick") { + if (slave.dick > 0 && canPenetrate(slave)) { + slave.toyHole = rule.toyHole ; + r += `<br>${slave.slaveName} has been instructed to use her ${rule.toyHole} to please you.`; + } else if (slave.toyHole !== "all her holes") { + slave.toyHole = "all her holes" ; + r += `<br>${slave.slaveName}'s hole preference has defaulted to all her holes.`; + } + } else if ((slave.toyHole !== rule.toyHole)) { + slave.toyHole = rule.toyHole ; + r += `<br>${slave.slaveName} has been instructed to use her ${rule.toyHole} to please you.`; + } + } + } + function ProcessDietCum(slave, rule) { if ((rule.dietCum !== undefined) && (rule.dietCum !== "no default setting")) { if (slave.dietCum != rule.dietCum) { @@ -13819,6 +14142,18 @@ window.DefaultRules = (function() { } } + function ProcessSolidFood(slave, rule) { + if ((rule.onDiet !== undefined) && (rule.onDiet !== "no default setting")) { + if ((slave.onDiet !== rule.onDiet)) { + slave.onDiet = rule.onDiet ; + if (slave.onDiet == 1) + r += `<br>${slave.slaveName} is permitted to eat the solid slave food.`; + else + r += `<br>${slave.slaveName} is not permitted to eat the solid slave food.`; + } + } + } + function ProcessTeeth(slave, rule) { if ((rule.teeth !== undefined) && (rule.teeth !== "no default setting")) { if ((rule.teeth == "universal")) { @@ -14397,6 +14732,7 @@ window.DefaultRules = (function() { } slave.pornFeed = rule.pornFeed; let yesno = slave.pornFeed ? "are now" : "are no longer"; + if (slave.pornFeed === 0) {slave.pornFameSpending = 0}; r += `<br>Highlights of ${slave.slaveName}'s sex life ${yesno} being released.`; } @@ -15212,6 +15548,7 @@ window.rulesAssistantOptions = (function() { if (V.masterSuite > 0) items.push("Master Suite"); if (V.schoolroom > 0) items.push("Schoolroom"); if (V.spa > 0) items.push("Spa"); + if (V.nursery > 0) item.push("Nursery"); if (V.clinic > 0) items.push("Clinic"); if (V.cellblock > 0) items.push("Cellblock"); items.forEach( @@ -15243,6 +15580,7 @@ window.rulesAssistantOptions = (function() { "Master Suite": "serve in the master suite", "Schoolroom": "learn in the schoolroom", "Spa": "rest in the spa", + "Nursery": "work as a nanny", "Clinic": "get treatment in the clinic", "Cellblock": "be confined in the cellblock", }[what]; @@ -15364,9 +15702,15 @@ window.rulesAssistantOptions = (function() { this.appendChild(new ShemaleHormonesList()); this.appendChild(new GeldingHormonesList()); this.appendChild(new OtherDrugsList()); + if (V.enema === 1) { + this.appendChild(new EnemaList()); + } this.appendChild(new DietList()); this.appendChild(new DietGrowthList()); this.appendChild(new DietBaseList()); + if (V.arcologies[0].FSHedonisticDecadenceResearch === 1) { + this.appendChild(new DietSolidFoodList()); + } this.appendChild(new MuscleList()); this.appendChild(new BraceList()); } @@ -15380,6 +15724,7 @@ window.rulesAssistantOptions = (function() { this.appendChild(new PunishmentList()); this.appendChild(new RewardList()); this.appendChild(new ReleaseList()); + this.appendChild(new ToyHoleList()); this.appendChild(new SmartFetishList()); this.appendChild(new SmartXYAttractionList()); this.appendChild(new SmartXXAttractionList()); @@ -16087,9 +16432,12 @@ window.rulesAssistantOptions = (function() { drugs.push(["Weight loss pills (FS)", "appetite suppressors"]); drugs.push(["breast redistributors"]); drugs.push(["butt redistributors"]); + drugs.push(["nipple atrophiers"]); drugs.push(["lip atrophiers"]); drugs.push(["penis atrophiers"]); drugs.push(["testicle atrophiers"]); + drugs.push(["clitoris atrophiers"]); + drugs.push(["labia atrophiers"]); } if (V.arcologies[0].FSAssetExpansionistResearch === 1) { drugs.push(["hyper breast injections"]); @@ -16107,6 +16455,26 @@ window.rulesAssistantOptions = (function() { } } + class EnemaList extends List { + constructor() { + const enemas = [ + ["No default setting", "no default setting"], + ["None", "none"], + ["Water", "water"] + ]; + if (V.medicalEnema === 1) { + enemas.push( + ["Aphrodisiac", "aphrodisiac"], + ["Curative", "curative"], + ["Tightener", "tightener"] + ); + } + super("Enemas", enemas); + this.setValue(current_rule.set.inflationType); + this.onchange = (value) => current_rule.set.inflationType = value; + } + } + class DietList extends List { constructor() { const diets = [ @@ -16176,6 +16544,19 @@ window.rulesAssistantOptions = (function() { } } + class DietSolidFoodList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["Permitted", 1], + ["Forbidden", 0], + ]; + super("Solid food access", pairs); + this.setValue(current_rule.set.onDiet); + this.onchange = (value) => current_rule.set.onDiet = value; + } + } + class MuscleList extends List { constructor() { const pairs = [ @@ -16265,6 +16646,23 @@ window.rulesAssistantOptions = (function() { } } + class ToyHoleList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["All her holes", "all her holes"], + ["Mouth", "mouth"], + ["Boobs", "boobs"], + ["Pussy", "pussy"], + ["Ass", "ass"], + ["Dick", "dick"] + ]; + super("Fucktoy use preference", pairs); + this.setValue(current_rule.set.toyHole); + this.onchange = (value) => current_rule.set.toyHole = value; + } + } + class SmartFetishList extends List { constructor() { const pairs = [ @@ -16500,6 +16898,7 @@ window.rulesAssistantOptions = (function() { class EarwearList extends List { constructor() { const pairs = [ + ["no default setting"], ["correct with hearing aids"], ["muffle with ear plugs"], ["deafen with ear plugs"] @@ -17572,6 +17971,7 @@ window.rulesAssistantOptions = (function() { class CosmeticSurgeryList extends List { constructor() { const items = [ + ["no default setting"], ["none", 0], ["subtle", 1], ["invasive", 2], @@ -18368,7 +18768,7 @@ window.AnalVCheck = function AnalVCheck(times) { slave.anus = 1; } if (canDoAnal(slave)) { - if (V.PC.dick === 1 && canGetPregnant(slave) && slave.eggType == "human") { + if (canImpreg(slave, V.PC)) { r += knockMeUp(slave, 10, 1, -1, 1); } if (!times) { @@ -18424,7 +18824,7 @@ window.VaginalVCheck = function VaginalVCheck(times) { } slave.vagina = 1; - if (V.PC.dick === 1 && canGetPregnant(slave) && slave.eggType == "human") { + if (canImpreg(slave, V.PC)) { r += knockMeUp(slave, 10, 0, -1, 1); } if (!times) { @@ -18534,7 +18934,7 @@ window.BothVCheck = function BothVCheck(analTimes, bothTimes) { slave.vaginalCount += bothTimes; slave.analCount += bothTimes; } - if (V.PC.dick === 1 && canGetPregnant(slave) && slave.eggType == "human") { + if (canImpreg(slave, V.PC)) { r += knockMeUp(slave, 10, 2, -1, 1); } } @@ -18547,7 +18947,7 @@ window.BothVCheck = function BothVCheck(analTimes, bothTimes) { V.vaginalTotal += bothTimes; slave.vaginalCount += bothTimes; } - if (V.PC.dick == 1 && canGetPregnant(slave) && slave.eggType == "human") { + if (canImpreg(slave, V.PC)) { r += knockMeUp(slave, 10, 0, -1, 1); } } @@ -18587,7 +18987,7 @@ window.BothVCheck = function BothVCheck(analTimes, bothTimes) { V.analTotal += analTimes; slave.analCount += analTimes; } - if (V.PC.dick === 1 && canGetPregnant(slave) && slave.eggType == "human") { + if (canImpreg(slave, V.PC)) { r += knockMeUp(slave, 10, 1, -1, 1); } } @@ -18655,7 +19055,7 @@ window.PartnerVCheck = function PartnerVCheck(analTimes, bothTimes) { partner.vaginalCount += bothTimes; partner.analCount += bothTimes; } - if (V.PC.dick === 1 && canGetPregnant(partner) && partner.eggType == "human") { + if (canImpreg(partner, V.PC)) { r += knockMeUp(partner, 10, 2, -1); } } @@ -18668,7 +19068,7 @@ window.PartnerVCheck = function PartnerVCheck(analTimes, bothTimes) { V.vaginalTotal += bothTimes; partner.vaginalCount += bothTimes; } - if (V.PC.dick === 1 && canGetPregnant(partner) && partner.eggType == "human") { + if (canImpreg(partner, V.PC)) { r += knockMeUp(partner, 10, 0, -1); } } @@ -18679,14 +19079,14 @@ window.PartnerVCheck = function PartnerVCheck(analTimes, bothTimes) { partner.anus = 1; } if (!analTimes) { - V.analTotal += analTimes; - partner.analCount += analTimes; - } - else { V.analTotal += 1; partner.analCount += 1; } - if (V.PC.dick === 1 && canGetPregnant(partner) && partner.eggType == "human") { + else { + V.analTotal += analTimes; + partner.analCount += analTimes; + } + if (canImpreg(partner, V.PC)) { r += knockMeUp(partner, 10, 1, -1); } } @@ -18715,14 +19115,14 @@ window.SimpleSexAct = function SimpleSexAct(slave, count) { else if (canDoVaginal(slave) && slave.vagina > 0 && fuckTarget > 33) { V.vaginalTotal += 1; slave.vaginalCount += 1; - if (V.PC.dick === 1 && canGetPregnant(slave) && slave.eggType == "human") { + if (canImpreg(slave, V.PC)) { r += knockMeUp(slave, 10, 0, -1, 1); } } else if (canDoAnal(slave) && slave.anus > 0 && fuckTarget > 10) { V.analTotal += 1; slave.analCount += 1; - if (V.PC.dick == 1 && canGetPregnant(slave) && slave.eggType == "human") { + if (canImpreg(slave, V.PC)) { r += knockMeUp(slave, 10, 1, -1, 1); } } @@ -18922,6 +19322,14 @@ window.SpaUIName = function() { else name = V.spaNameCaps; return `<<link "${name}""Spa">><</link>> `} +window.NurseryUIName = function() { + const V = State.variables; + var name = ""; + if (V.nurseryNameCaps === "The Nursery") + name = "Nursery" + else + name = V.nurseryNameCaps; + return `<<link "${name}""Nursery">><</link>> `} window.ClinicUIName = function() { const V = State.variables; var name = ""; @@ -20881,10 +21289,10 @@ window.SlaveSummaryUncached = (function(){ r += slave.actualAge; } if (slave.actualAge !== slave.physicalAge) { - r += `${slave.physicalAge}y-bdy`; + r += ` w${slave.physicalAge}y-bdy`; } if (slave.visualAge !== slave.physicalAge) { - r += `Lks${slave.visualAge}`; + r += ` Lks${slave.visualAge}`; } r += " "; } @@ -20954,6 +21362,10 @@ window.SlaveSummaryUncached = (function(){ r += `Rem Teeth`; } else if (slave.teeth === "pointy") { r += `Fangs`; + } else if (slave.teeth === "baby") { + r += `Baby`; + } else if (slave.teeth === "mixed") { + r += `Mixed`; } r += " "; } @@ -21268,6 +21680,10 @@ window.SlaveSummaryUncached = (function(){ r += `Removable teeth.`; } else if (slave.teeth === "pointy") { r += `Sharp fangs.`; + } else if (slave.teeth === "baby") { + r += `Baby teeth.`; + } else if (slave.teeth === "mixed") { + r += `Mixed teeth.`; } r += " "; } @@ -22654,6 +23070,7 @@ window.SlaveSummaryUncached = (function(){ r += ` & lover`; handled = 1; } + r += " "; } if (slave.daughters === 1) { let _ssj = V.slaves.findIndex(function(s) { @@ -23882,13 +24299,13 @@ sizePlacement: Image size/center. */ window.assistantArt = function assistantArt(sizePlacement) { const V = State.variables; - let fileName = "'"; + let fileName = ""; if (V.imageChoice === 0 || V.imageChoice === 1) { if (V.imageChoice === 1) { - fileName += "resources/vector/avatar/"; + fileName += "'resources/vector/avatar/"; } else /* V.imageChoice === 0*/ { - fileName += "resources/renders/assistant "; + fileName += "'resources/renders/assistant "; } switch (V.assistantAppearance) { case "monstergirl": @@ -23956,6 +24373,9 @@ window.ArtControlRendered = function ArtControlRendered(slave, sizePlacement) { let fileName = "'resources/renders/"; let r = ""; + if (slave.belly > 1500) { + fileName += "preg "; + } if (slave.vagina > -1) { if (slave.dick > 0) { if (slave.balls > 0) { @@ -23973,9 +24393,6 @@ window.ArtControlRendered = function ArtControlRendered(slave, sizePlacement) { fileName += "gelding"; } } - if (slave.belly > 1500) { - fileName = `preg ${fileName}`; - } if (slave.boobs < 400) { fileName = `${fileName} small`; } else if (slave.boobs < 800) { @@ -25495,7 +25912,7 @@ window.GetVignette = function GetVignette(slave) { const He = capFirstChar(he); const His = capFirstChar(his); - if (slave.assignment === "whore" || slave.assignment === "work in the brothel") { + if (slave.assignment === "whore" || slave.assignment === window.Job.BROTHEL || slave.assignment === window.Job.MADAM) { let seed = jsRandom(1, 10); switch (seed) { case 1: @@ -27071,7 +27488,7 @@ window.GetVignette = function GetVignette(slave) { type: "trust", effect: -1, }); - } else if (slave.assignment === "serve the public" || slave.assignment === "serve in the club") { + } else if (slave.assignment === "serve the public" || slave.assignment === window.Job.CLUB || slave.assignment === window.Job.DJ) { let seed = jsRandom(1, 10); switch (seed) { case 1: diff --git a/src/init/setupVars.tw b/src/init/setupVars.tw index 9e853a64f0b..fc2a48b0c29 100644 --- a/src/init/setupVars.tw +++ b/src/init/setupVars.tw @@ -282,7 +282,7 @@ <<set setup.youngCareers = ["a babysitter", "a ballerina", "a barista", "a bartender", "a beggar", "a blogger", "a butler", "a camgirl", "a camp counselor", "a camwhore", "a cashier", "a cheerleader", "a cocktail waitress", "a comedian", "a con artist", "a cook", "a courier", "a cowgirl", "a criminal", "a croupier", "a cum dump", "a dairy worker", "a dancer", "a delivery woman", "a drug mule", "a factory worker", "a farm laborer", "a farm laborer", "a farmer's daughter", "a florist", "a gang member", "a gang member", "a gardener", "a groomer", "a gymnast", "a handmaiden", "a house DJ", "a housesitter", "a housewife", "a law enforcement officer", "a lifeguard", "a magician's assistant", "a maid", "a mail-order bride", "a masseuse", "a meat toilet", "a mechanic", "a medical student", "a mistress", "a model", "a musician", "a noblewoman", "a nun", "a nurse", "a paramedic", "a party girl", "a personal assistant", "a personal trainer", "a pirate", "a political activist", "a porn star", "a prisoner", "a programmer", "a prostitute", "a racing driver", "a reality show star", "a receptionist", "a refugee", "a ride attendant", "a saleswoman", "a school nurse", "a secretary", "a security guard", "a service worker", "a shrine maiden", "a shut-in", "a soldier", "a street performer", "a street vendor", "a stripper", "a student", "a student", "a student", "a switchboard operator", "a teaching assistant", "a tour guide", "a trophy wife", "a truck driver", "a video game streamer", "a waitress", "a wet nurse", "a yoga instructor", "an actress", "an air hostess", "an apprentice", "an arcade attendant", "an artist", "an aspiring pop star", "an assassin", "an athlete", "an au pair", "an escort", "an exotic dancer", "an idol", "an intern", "an office worker", "homeless", "in a militia", "unemployed", "unemployed", "unemployed", "unemployed", "unemployed"]>> -<<set setup.educatedCareers = ["a ballerina", "a banker", "a bureaucrat", "a business owner", "a businessman", "a captain", "a chemist", "a chief of police", "a classical dancer", "a classical musician", "a coach", "a college scout", "a concierge", "a coroner", "a corporate executive", "a cosmetologist", "a counselor", "a criminal", "a critic", "a cult leader", "a dean", "a dentist", "a dentist", "a director", "a dispatch officer", "a doctor", "a historian", "a housekeeper", "a journalist", "a journalist", "a judge", "a lawyer", "a librarian", "a lobbyist", "a madam", "a manager", "a mechanic", "a mediator", "a medical student", "a mercenary", "a military officer", "a military recruiter", "a nanny", "a noblewoman", "a nun", "a painter", "a paramedic", "a personal assistant", "a pharmacist", "a physician", "a photographer", "a pilot", "a poet", "a police detective", "a police negotiator", "a police officer", "a political activist", "a politician", "a principal", "a prison warden", "a private detective", "a private instructor", "a procuress", "a producer", "a professional bartender", "a professor", "a programmer", "a prostitute", "a psychologist", "a refugee", "a scholar", "a scientist", "a sculptor", "a secretary", "a serial divorcee", "a shut-in", "a stockbroker", "a surgeon", "a teacher", "a teaching assistant", "a therapist", "a train conductor", "a transporter", "a veterinarian", "a wedding planner", "a writer", "a zookeeper", "an actress", "an air hostess", "an animator", "an archaeologist", "an architect", "an artist", "an assassin", "an astronaut", "an economist", "an editor", "an engineer", "an escort", "an estate agent", "an investor", "an MS pilot", "an office worker", "an orchestra conductor", "retired", "unemployed"]>> +<<set setup.educatedCareers = ["a ballerina", "a banker", "a bureaucrat", "a business owner", "a businessman", "a captain", "a chemist", "a chief of police", "a classical dancer", "a classical musician", "a coach", "a college scout", "a concierge", "a coroner", "a corporate executive", "a cosmetologist", "a counselor", "a criminal", "a critic", "a cult leader", "a dean", "a dentist", "a dentist", "a director", "a dispatch officer", "a doctor", "a historian", "a housekeeper", "a journalist", "a journalist", "a judge", "a lawyer", "a librarian", "a lobbyist", "a madam", "a manager", "a mechanic", "a mediator", "a medical student", "a mercenary", "a military officer", "a military recruiter", "a nanny", "a noblewoman", "a nun", "a painter", "a paramedic", "a personal assistant", "a pharmacist", "a physician", "a photographer", "a pilot", "a poet", "a police detective", "a police negotiator", "a police officer", "a political activist", "a politician", "a practitioner", "a principal", "a prison warden", "a private detective", "a private instructor", "a procuress", "a producer", "a professional bartender", "a professor", "a programmer", "a prostitute", "a psychologist", "a refugee", "a scholar", "a scientist", "a sculptor", "a secretary", "a serial divorcee", "a shut-in", "a stockbroker", "a surgeon", "a teacher", "a teaching assistant", "a therapist", "a train conductor", "a transporter", "a veterinarian", "a wedding planner", "a writer", "a zookeeper", "an actress", "an air hostess", "an animator", "an archaeologist", "an architect", "an artist", "an assassin", "an astronaut", "an economist", "an editor", "an engineer", "an escort", "an estate agent", "an investor", "an MS pilot", "an office worker", "an orchestra conductor", "retired", "unemployed"]>> <<set setup.uneducatedCareers = ["a baker", "a barber", "a barista", "a bartender", "a beekeeper", "a beggar", "a blacksmith", "a blogger", "a bodyguard", "a bouncer", "a bounty hunter", "a boxer", "a brewer", "a bullfighter", "a bus driver", "a butcher", "a butler", "a camgirl", "a camp counselor", "a camwhore", "a candlestick maker", "a caregiver", "a carpenter", "a cashier", "a charity worker", "a chauffeur", "a cheerleader", "a chiropractor", "a clown", "a cobbler", "a cocktail waitress", "a comedian", "a con artist", "a construction worker", "a cook", "a cowgirl", "a criminal", "a croupier", "a cum dump", "a dairy worker", "a dancer", "a delivery woman", "a driller", "a drug mule", "a factory worker", "a farm laborer", "a farmer's daughter", "a farmer", "a firefighter", "a fisherwoman", "a florist", "a fortune teller", "a gang leader", "a gang member", "a gardener", "a gravedigger", "a groomer", "a gymnast", "a handmaiden", "a hotel manager", "a house DJ", "a housewife", "a hunter", "a janitor", "a landlady", "a launderer", "a law enforcement officer", "a lifeguard", "a local news anchor", "a lumberjack", "a magician's assistant", "a maid", "a mail carrier", "a mail-order bride", "a masseuse", "a masseuse", "a meat toilet", "a medic", "a medic", "a medium", "a messenger", "a midwife", "a milkmaid", "a mime", "a miner", "a missionary", "a mistress", "a model", "a mortician", "a musician", "a nanny", "a nurse", "a paramedic", "a park ranger", "a party girl", "a peddler", "a personal trainer", "a pimp", "a pirate", "a plumber", "a political activist", "a prison guard", "a prisoner", "a procuress", "a prostitute", "a racing driver", "a radio show host", "a rancher", "a receptionist", "a referee", "a refugee", "a revolutionary", "a ride attendant", "a roadie", "a rodeo star", "a sailor", "a saleswoman", "a school nurse", "a seamstress", "a secretary", "a security guard", "a service worker", "a shepherd", "a shrine maiden", "a soldier", "a stage magician", "a street performer", "a street vendor", "a stripper", "a student", "a student athlete", "a stuntwoman", "a switchboard operator", "a tailor", "a talent scout", "a taxi driver", "a teacher", "a tour guide", "a trophy wife", "a truck driver", "a waitress", "a weathergirl", "a welder", "a wet nurse", "a whaler", "a wrestler", "a zookeeper", "an acrobat", "an actress", "an arcade attendant", "an artist", "an aspiring pop star", "an athlete", "an electrician", "an enforcer", "an enforcer", "an escort", "an exotic dancer", "an exterminator", "an innkeeper", "an office worker", "an orderly", "homeless", "in a militia", "retired", "unemployed", "unemployed", "unemployed", "unemployed", "unemployed"]>> @@ -308,9 +308,9 @@ <<set setup.attendantCareers = ["a barber", "a cosmetologist", "a counselor", "a dispatch officer", "a fortune teller", "a groomer", "a latchkey kid", "a lifeguard", "a masseuse", "a mediator", "a personal trainer", "a police negotiator", "a psychologist", "a therapist", "a yoga instructor"]>> -<<set setup.matronCareers = ["a babysitter", "a nanny", "a practitioner", "an au pair"]>> +<<set setup.matronCareers = ["a babysitter", "a nanny", "a practitioner", "a wet nurse", "an au pair"]>> -<<set setup.milkmaidCareers = ["a beekeeper", "a bullfighter", "a cowgirl", "a dairy worker", "a farmer's daughter", "a farmer", "a milkmaid", "a rancher", "a rodeo star", "a shepherd", "a veterinarian", "a wet nurse", "a zookeeper"]>> +<<set setup.milkmaidCareers = ["a beekeeper", "a bullfighter", "a cowgirl", "a dairy worker", "a farmer's daughter", "a farmer", "a milkmaid", "a rancher", "a rodeo star", "a shepherd", "a veterinarian", "a zookeeper"]>> <<set setup.stewardessCareers = ["a barista", "a bartender", "a brewer", "a bureaucrat", "a caregiver", "a charity worker", "a club treasurer", "a concierge", "a critic", "a housekeeper", "a housesitter", "a lemonade stand operator", "a personal assistant", "a professional bartender", "a secretary", "a wedding planner", "an air hostess", "an architect", "an editor", "an estate agent", "an investor", "an office worker"]>> diff --git a/src/js/economyJS.tw b/src/js/economyJS.tw index 425b7e525ce..f718a383faa 100644 --- a/src/js/economyJS.tw +++ b/src/js/economyJS.tw @@ -6,8 +6,8 @@ window.Job = Object.freeze({ BABY_FACTORY: 'labor in the production line', BROTHEL: 'work in the brothel', MADAM: 'be the Madam', ARCADE: 'be confined in the arcade', SERVANT: 'work as a servant', SERVER: 'be a servant', STEWARD: 'be the Stewardess', CLUB: 'serve in the club', DJ: 'be the DJ', JAIL: 'be confined in the cellblock', WARDEN: 'be the Wardeness', CLINIC: 'get treatment in the clinic', NURSE: 'be the Nurse', - HGTOY: 'live with your Head Girl', SCHOOL: 'learn in the schoolroom', TEACHER: 'be the Schoolteacher', SPA: 'rest in the spa', ATTEND: 'be the Attendant', NANNY: 'work as a nanny', MATRON: 'be the Matron', - REST: 'rest'}); + HGTOY: 'live with your Head Girl', SCHOOL: 'learn in the schoolroom', TEACHER: 'be the Schoolteacher', SPA: 'rest in the spa', ATTEND: 'be the Attendant', + NANNY: 'work as a nanny', MATRON: 'be the Matron', REST: 'rest'}); window.PersonalAttention = Object.freeze({TRADE: 'trading', WAR: 'warfare', SLAVING: 'slaving', ENGINEERING: 'engineering', MEDICINE: 'medicine', MAID: 'upkeep', HACKING: 'hacking'}); window.getCost = function(array) { @@ -402,7 +402,8 @@ window.getSlaveCost = function(s) { } break; case Job.MADAM: case Job.DJ: case Job.NURSE: case Job.WARDEN: - case Job.ATTEND: case Job.MATRON: case Job.STEWARD: case Job.MILKMAID: case Job.TEACHER: + case Job.ATTEND: case Job.STEWARD: case Job.MILKMAID: case Job.TEACHER: + case Job.MATRON: cost += rulesCost * 2; break; default: @@ -494,11 +495,11 @@ window.getSlaveCost = function(s) { cost += 25; } if(!canHear(s) && (s.assignment != Job.DAIRY || State.variables.dairyRestraintsSetting < 2) && (s.assignment != Job.ARCADE)) { - cost += 20; + cost += 40; } else if(s.hears <= -1 && s.earwear !== 'hearing aids') { - cost += 5; + cost += 15; } else if(s.earwear === 'muffling ear plugs') { - cost += 5; + cost += 15; } if((s.assignment !== Job.DAIRY || State.variables.dairyRestraintsSetting < 2) && (s.assignment !== Job.ARCADE)) { if(s.amp !== 0) { @@ -664,4 +665,4 @@ window.initFacilityStatistics = function(facility) { Number.prototype.toFixedHTML = function() { return commaNum(Number.prototype.toFixed.apply(this, arguments)).replace(/\.0+$/, '<span style="opacity: 0.3">$&</span>'); -} +} \ No newline at end of file diff --git a/src/utility/slaveCreationWidgets.tw b/src/utility/slaveCreationWidgets.tw index aa7098b5dff..a7a77868b15 100644 --- a/src/utility/slaveCreationWidgets.tw +++ b/src/utility/slaveCreationWidgets.tw @@ -4707,8 +4707,8 @@ <<set $activeSlave.actualAge = random(26,$retirementAge-3)>> <<set $activeSlave.physicalAge = $activeSlave.actualAge, $activeSlave.visualAge = $activeSlave.actualAge, $activeSlave.ovaryAge = $activeSlave.actualAge>> <<case "Matron">> - <<set $activeSlave.devotion = 90, $activeSlave.trust = 90, $activeSlave.health = random(80,95), $activeSlave.intelligenceImplant = 1, $activeSlave.intelligence = either(1,1,1,2,2,3), $activeSlave.sexualQuirk = "caring", $activeSlave.fetishStrength = 100, $activeSlave.eyes = 1, $activeSlave.preg = 0, $activeSlave.face = random(60,90), $activeSlave.career = either("a babysitter", "a practitioner", "a caregiver")>> - <<set $activeSlave.actualAge = random(32,$retirementAge-3)>> + <<set $activeSlave.devotion = 90, $activeSlave.trust = 90, $activeSlave.health = random(80,95), $activeSlave.intelligenceImplant = 1, $activeSlave.intelligence = either(1,1,1,2,2,3), $activeSlave.sexualQuirk = "caring", $activeSlave.eyes = 1, $activeSlave.birthsTotal = random(2,4), $activeSlave.vagina = 3, $activeSlave.face = random(60,90), $activeSlave.career = either( "a nanny", "a practitioner")>> + <<set $activeSlave.actualAge = random(24,$retirementAge-3)>> <<set $activeSlave.physicalAge = $activeSlave.actualAge, $activeSlave.visualAge = $activeSlave.actualAge, $activeSlave.ovaryAge = $activeSlave.actualAge>> <<case "Stewardess">> <<set $activeSlave.devotion = 80, $activeSlave.trust = 80, $activeSlave.health = random(80,95), $activeSlave.energy = random(70,90), $activeSlave.intelligenceImplant = 1, $activeSlave.intelligence = either(1,1,1,2,2,3), $activeSlave.fetish = "dom", $activeSlave.fetishStrength = 100, $activeSlave.career = either("a barista", "a bartender", "a caregiver", "a charity worker", "a professional bartender", "a secretary", "a wedding planner", "an air hostess", "an estate agent", "an investor", "an office worker")>> -- GitLab