diff --git a/js/003-data/constants.js b/js/003-data/constants.js index 15b8cbfd7aa82bd7c7dee5260ef15a6530bc7e88..ebf4422548495211df5f9594e1c4a487684c99ea 100644 --- a/js/003-data/constants.js +++ b/js/003-data/constants.js @@ -1,4 +1,5 @@ globalThis.LivingRule = Object.freeze({LUXURIOUS: 'luxurious', NORMAL: 'normal', SPARE: 'spare'}); +globalThis.RestRule = Object.freeze({MANDATORY: 'mandatory', MAX: 'permissive', MID: 'restrictive', MIN: 'cruel', NONE: 'none'}); globalThis.Job = Object.freeze({ // Penthouse Assignments REST: 'rest', diff --git a/src/endWeek/clinicReport.js b/src/endWeek/clinicReport.js index d238016c83e466694c904af421fe1764ccf0a9ae..8af1f061c142b8e30a459c18906bbcfbba52d85d 100644 --- a/src/endWeek/clinicReport.js +++ b/src/endWeek/clinicReport.js @@ -24,6 +24,9 @@ App.EndWeek.clinicReport = function() { if (S.Nurse.rules.living !== "luxurious") { S.Nurse.rules.living = "luxurious"; } + if (S.Nurse.rules.rest !== "restrictive") { + S.Nurse.rules.rest = "restrictive"; + } S.Nurse.devotion += devBonus; if (S.Nurse.fetishStrength <= 95) { @@ -212,7 +215,7 @@ App.EndWeek.clinicReport = function() { } } - if (slaves.length < V.clinic) { + if (slaves.length < V.clinic && !slaveResting(S.Nurse)) { const _idlePay = jsRandom(1, 10) + ((V.clinic - slaves.length) * (jsRandom(150, 170) + (idleBonus * 10))); cashX(_idlePay, "clinic", S.Nurse); r.push(`<div class="indent">Since ${he} doesn't have enough patients to occupy all of ${his} time, ${V.clinicName} takes in citizens' slaves on a contract basis and ${he} helps them too, earning <span class="cash inc">${cashFormat(_idlePay)}.</span></div>`); diff --git a/src/endWeek/healthFunctions.js b/src/endWeek/healthFunctions.js index 5ab76fdff084364b9ad6d2e36daea4bd875eeefe..9409e11db3f0bab886a50ff7ea53afde3a60dd2c 100644 --- a/src/endWeek/healthFunctions.js +++ b/src/endWeek/healthFunctions.js @@ -403,7 +403,12 @@ globalThis.tired = function(slave) { } else if ([Job.HEADGIRL].includes(slave.assignment)) { assignment += 22; // Always busy. Could benefit from a helper... } else if (App.Data.misc.facilityHeads.includes(slave.assignment)) { // Heads are very busy, but always have luxurious conditions, so it balances out, save for the exceptions - assignment += 14; + if (slaveResting(slave)) { + assignment -= 10; + V.slaveUsedRest = 1; + } else { + assignment += 15; + } } else if ([Job.ATTENDANT, Job.CONCUBINE].includes(slave.assignment)) { // Cushy head positions assignment += 5; } else if ([Job.RECRUITER].includes(slave.assignment)) { @@ -706,7 +711,7 @@ globalThis.restEffects = function(slave, exhaustion=0) { if (slave.rules.rest === "mandatory") { return 0.86; } else if (slaveResting(slave)) { - if (slave.assignment === window.Job.HOUSE || slave.assignment === window.Job.QUARTER || window.Job.SUBORDINATE) { + if (slave.assignment === window.Job.HOUSE || slave.assignment === window.Job.QUARTER || window.Job.SUBORDINATE || window.Job.FARMER || window.Job.STEWARD) { return 0.60; } else { return 0.25; diff --git a/src/endWeek/schoolroomReport.js b/src/endWeek/schoolroomReport.js index 9aaa2aac21c9b09ba99d3e3cc6abc2ac32354534..0197ef513015cb5511b55f086c4297ea69343835 100644 --- a/src/endWeek/schoolroomReport.js +++ b/src/endWeek/schoolroomReport.js @@ -29,6 +29,9 @@ App.EndWeek.schoolroomReport = function() { if (S.Schoolteacher.rules.living !== "luxurious") { S.Schoolteacher.rules.living = "luxurious"; } + if (S.Schoolteacher.rules.rest !== "restrictive") { + S.Schoolteacher.rules.rest = "restrictive"; + } if (S.Schoolteacher.fetishStrength <= 95) { if (S.Schoolteacher.fetish !== "dom") { if (fetishChangeChance(S.Schoolteacher) > jsRandom(0, 100)) { @@ -118,7 +121,7 @@ App.EndWeek.schoolroomReport = function() { } } - if (slaves.length < V.schoolroom) { + if (slaves.length < V.schoolroom && !slaveResting(S.Schoolteacher)) { const _idlePay = jsRandom(1, 10) + ((V.schoolroom - slaves.length) * (jsRandom(150, 170) + (idleBonus * 10))); cashX(_idlePay, "school", S.Schoolteacher); r.push(`<div class="indent">Since ${he} doesn't have enough students to occupy all of ${his} time, ${V.schoolroomName} takes in citizens' slaves on a contract basis and ${he} teaches them too, earning <span class="yellowgreen">${cashFormat(_idlePay)}.</span></div>`); diff --git a/src/endWeek/servantsQuartersReport.js b/src/endWeek/servantsQuartersReport.js index c5facef9e5595a5436e317fe474ea238e1e7fedb..f35722e3122c78c1ff7b95258522b1b56e009831 100644 --- a/src/endWeek/servantsQuartersReport.js +++ b/src/endWeek/servantsQuartersReport.js @@ -45,13 +45,16 @@ App.EndWeek.servantsQuartersReport = function() { if (S.Stewardess.rules.living !== "luxurious") { S.Stewardess.rules.living = "luxurious"; } + if (S.Stewardess.rules.rest !== "restrictive") { + S.Stewardess.rules.rest = "restrictive"; + } const {He, he, His, his, him, wife} = getPronouns(S.Stewardess); r.push(`${SlaveFullName(S.Stewardess)} is serving as your Stewardess.`); if (S.Stewardess.relationship === -3 && S.Stewardess.devotion > 50) { r.push(`${He} does ${his} best to be your perfect lovely house${wife}.`); } - if (V.stewardessImpregnates === 1 && canPenetrate(S.Stewardess) && S.Stewardess.pubertyXY === 1) { + if (V.stewardessImpregnates === 1 && canPenetrate(S.Stewardess) && S.Stewardess.pubertyXY === 1 && !slaveResting(S.Stewardess)) { for (const slave of slaves) { if (canImpreg(slave, S.Stewardess)) { // FIXME: assumes vaginal pregnancy without check seX(S.Stewardess, "penetrative", slave, "vaginal", 10); @@ -110,6 +113,7 @@ App.EndWeek.servantsQuartersReport = function() { stewardessBonus += S.Stewardess.intelligence + S.Stewardess.intelligenceImplant; r.push(`${He}'s smart enough that ${he} misses very little.`); } + stewardessBonus *= restEffects(S.Stewardess); const bonusToggle = S.Stewardess.energy > 95 || (S.Stewardess.fetishKnown === 1 && S.Stewardess.fetish === "dom"); for (const slave of slaves) { const {he2, him2, his2} = getPronouns(slave).appendSuffix('2'); diff --git a/src/facilities/farmyard/reports/farmyardReport.js b/src/facilities/farmyard/reports/farmyardReport.js index 23eafbcfb12232604185ec455ef4e7a9527673ab..1e90b377303d595882f9956a1cf57c39fbf25b31 100644 --- a/src/facilities/farmyard/reports/farmyardReport.js +++ b/src/facilities/farmyard/reports/farmyardReport.js @@ -80,6 +80,8 @@ App.Facilities.Farmyard.farmyardReport = function farmyardReport() { FarmerCashBonus += 0.05; } + FarmerCashBonus *= restEffects(Farmer); + return FarmerCashBonus; } @@ -94,6 +96,7 @@ App.Facilities.Farmyard.farmyardReport = function farmyardReport() { r.push(farmerSkill(Farmer)); r.push(farmerAgeSkill(Farmer)); r.push(farmerExperience(Farmer)); + r.push(farmerTiredness(Farmer)); r.push(farmerIntelligence(Farmer)); r.push(farmerSmell(Farmer)); r.push(farmerRelationshipSlaves(Farmer)); @@ -166,6 +169,14 @@ App.Facilities.Farmyard.farmyardReport = function farmyardReport() { } } + function farmerTiredness(slave) { + const {he, his, him, He} = getPronouns(slave); + + if (slaveResting(slave.career)) { + return `To avoid exhaustion, ${he} has to take breaks to maintain ${his} strength, limiting how much ${he} can work.`; + } + } + function farmerRelationshipSlaves(Farmer) { const {he, his, He} = getPronouns(Farmer); diff --git a/src/js/assignJS.js b/src/js/assignJS.js index 6914b5dae7165565286473d39591a22c8f839f72..66543a13f8c97c830b3084bec3f617b10613e31e 100644 --- a/src/js/assignJS.js +++ b/src/js/assignJS.js @@ -300,54 +300,63 @@ globalThis.assignJob = function(slave, job) { uniqueJob("Matron"); slave.assignment = Job.MATRON; slave.rules.living = LivingRule.LUXURIOUS; + slave.rules.rest = RestRule.MID; break; case Job.DJ.toLowerCase(): uniqueJob("dj"); slave.assignment = Job.DJ; slave.rules.living = LivingRule.LUXURIOUS; + slave.rules.rest = RestRule.MID; break; case Job.MADAM.toLowerCase(): uniqueJob("Madam"); slave.assignment = Job.MADAM; slave.rules.living = LivingRule.LUXURIOUS; + slave.rules.rest = RestRule.MID; break; case Job.MILKMAID.toLowerCase(): uniqueJob("Milkmaid"); slave.assignment = Job.MILKMAID; slave.rules.living = LivingRule.LUXURIOUS; + slave.rules.rest = RestRule.MID; break; case Job.FARMER.toLowerCase(): uniqueJob("Farmer"); slave.assignment = Job.FARMER; slave.rules.living = LivingRule.LUXURIOUS; + slave.rules.rest = RestRule.MID; break; case Job.NURSE.toLowerCase(): uniqueJob("Nurse"); slave.assignment = Job.NURSE; slave.rules.living = LivingRule.LUXURIOUS; + slave.rules.rest = RestRule.MID; break; case Job.TEACHER.toLowerCase(): uniqueJob("Schoolteacher"); slave.assignment = Job.TEACHER; slave.rules.living = LivingRule.LUXURIOUS; + slave.rules.rest = RestRule.MID; break; case Job.STEWARD.toLowerCase(): uniqueJob("Stewardess"); slave.assignment = Job.STEWARD; slave.rules.living = LivingRule.LUXURIOUS; + slave.rules.rest = RestRule.MID; break; case Job.WARDEN.toLowerCase(): uniqueJob("Wardeness"); slave.assignment = Job.WARDEN; slave.rules.living = LivingRule.LUXURIOUS; + slave.rules.rest = RestRule.MID; break; case Job.RECRUITER: diff --git a/src/uncategorized/brothelReport.tw b/src/uncategorized/brothelReport.tw index c2a0c23ea064733ebc92963879205cfa72ea36a9..b258bd5a46e1274fe74b2a1d3f26d4eeb75dd88a 100644 --- a/src/uncategorized/brothelReport.tw +++ b/src/uncategorized/brothelReport.tw @@ -30,6 +30,9 @@ <<if _S.Madam.rules.living != "luxurious">> <<set _S.Madam.rules.living = "luxurious">> <</if>> + <<if _S.Madam.rules.rest != "restrictive">> + <<set _S.Madam.rules.living = "restrictive">> + <</if>> <<if _S.Madam.fetishStrength <= 95>> <<if _S.Madam.fetish != "dom">> <<if fetishChangeChance(_S.Madam) > random(0,100)>> @@ -151,7 +154,7 @@ <</if>> <</for>> - <<if (_DL+$brothelSlavesGettingHelp < 10) && $MadamNoSex != 1>> + <<if (_DL+$brothelSlavesGettingHelp < 10) && $MadamNoSex != 1 && !slaveResting(_S.Madam)>> <<setLocalPronouns _S.Madam>> <<set _oldCash = $cash>> <<if $showEWD != 0>> diff --git a/src/uncategorized/cellblockReport.tw b/src/uncategorized/cellblockReport.tw index 199ad14d42b85fd4bb7fb173fd9fbab06260a4e7..57feb429d1df09123af30ed83936ed01c44610eb 100644 --- a/src/uncategorized/cellblockReport.tw +++ b/src/uncategorized/cellblockReport.tw @@ -31,6 +31,9 @@ <<if (_S.Wardeness.rules.living != "luxurious")>> <<set _S.Wardeness.rules.living = "luxurious">> <</if>> + <<if _S.Wardeness.rules.rest != "restrictive">> + <<set _S.Wardeness.rules.living = "restrictive">> + <</if>> <<if _S.Wardeness.fetishStrength <= 95>> <<if _S.Wardeness.fetish != "sadist">> <<if fetishChangeChance(_S.Wardeness) > random(0,100)>> @@ -108,7 +111,7 @@ <<set _slave.devotion++, _slave.trust-->> <</if>> <</for>> - <<if (_DL < $cellblock)>> + <<if (_DL < $cellblock && !slaveResting(_S.Wardeness))>> <<set _seed = random(1,10)+(($cellblock-_DL)*(random(150,170)+(_idleBonus*10)))>> <<run cashX(_seed, "cellblock", _S.Wardeness)>> <br> Since $he doesn't have enough prisoners to manage to keep $him busy, $he works on citizens' slaves, earning @@.yellowgreen;<<print cashFormat(_seed)>>.@@ diff --git a/src/uncategorized/clubReport.tw b/src/uncategorized/clubReport.tw index e63e365eaa5f9bb3f3aabee9e31bfea9a1bd8afa..69eec9d13f0daa5ae35a71d09a86248453187634 100644 --- a/src/uncategorized/clubReport.tw +++ b/src/uncategorized/clubReport.tw @@ -40,6 +40,9 @@ <<if _S.DJ.rules.living != "luxurious">> <<set _S.DJ.rules.living = "luxurious">> <</if>> + <<if _S.DJ.rules.rest != "restrictive">> + <<set _S.DJ.rules.living = "restrictive">> + <</if>> /% Make sure we have registered living expenses as for any other slave %/ <<run getSlaveStatisticData(_S.DJ, $facility.club)>> <<setLocalPronouns _S.DJ>> @@ -82,7 +85,7 @@ <<else>> <<set _S.DJ.skill.DJ += random(1,Math.ceil((_S.DJ.intelligence+_S.DJ.intelligenceImplant)/15) + 8)>> <</if>> - <<if (_DL + $clubSlavesGettingHelp < 10) && $DJnoSex != 1>> + <<if (_DL + $clubSlavesGettingHelp < 10) && $DJnoSex != 1 && !slaveResting(_S.DJ)>> <<if ($legendaryEntertainerID == 0) && (_S.DJ.prestige == 0) && (_S.DJ.skill.entertainment >= 100) && (_S.DJ.devotion > 50)>> <<set $legendaryEntertainerID = _S.DJ.ID>> <</if>> diff --git a/src/uncategorized/dairyReport.tw b/src/uncategorized/dairyReport.tw index 79cd8a60eb7d7d2e9a42d4d634ecc4a8463830d1..6015cec9bd8f42c1bb0d8d3c39971f37fcca2254 100644 --- a/src/uncategorized/dairyReport.tw +++ b/src/uncategorized/dairyReport.tw @@ -26,7 +26,7 @@ <<if (_slave.bellyPreg >= 500 && $dairyPregSetting > 0)>> <<set _breeders++>> <</if>> - <<if ($milkmaidImpregnates == 1) && (canPenetrate(_S.Milkmaid)) && _S.Milkmaid.pubertyXY == 1>> + <<if ($milkmaidImpregnates == 1) && (canPenetrate(_S.Milkmaid)) && _S.Milkmaid.pubertyXY == 1 && !slaveResting(_S.Milkmaid)>> <<if (canImpreg(_slave, _S.Milkmaid))>> <<set _slave.preg = 1, _slave.pregSource = $MilkmaidID, _slave.pregKnown = 1, _slave.pregWeek = 1, _milkmaidImpregnated++>> <<if _slave.mpreg == 1>> @@ -127,6 +127,9 @@ <<if _S.Milkmaid.rules.living != "luxurious">> <<set _S.Milkmaid.rules.living = "luxurious">> <</if>> + <<if _S.Milkmaid.rules.rest != "restrictive">> + <<set _S.Milkmaid.rules.living = "restrictive">> + <</if>> <<if _S.Milkmaid.fetishStrength <= 95>> <<if _milkers >= _cummers && _milkers >= _breeders>> <<if _S.Milkmaid.fetish != "boobs">> diff --git a/src/uncategorized/saRules.tw b/src/uncategorized/saRules.tw index 0ffdd1c091e88ac316e1e9079cccfc66832dc661..f9976fbeccefea50ee87f716416029d4f85dda36 100644 --- a/src/uncategorized/saRules.tw +++ b/src/uncategorized/saRules.tw @@ -115,6 +115,11 @@ <<set $slaves[$i].devotion += 1, $slaves[$i].trust += 1>> It also helps to offset the tiring nature of $his position. + <<if $slaveUsedRest>> + $He is permitted to take short breaks throughout the week to help manage $his building exhaustion, though it does restrict $his non-essential activities. + <<unset $slaveUsedRest>> + <</if>> + <<if ($universalRulesConsent == 0)>> <<if (_release.slaves === 1)>> <<if ($slaves[$i].energy > 95)>> @@ -730,6 +735,11 @@ <<set $slaves[$i].devotion += 1, $slaves[$i].trust += 1>> It helps offset the tiring nature of $his position and gives $him a place to center $himself at the end of the day. + <<if $slaveUsedRest>> + $He is permitted to take short breaks throughout the week to help manage $his building exhaustion, though it does restrict $his non-essential activities. + <<unset $slaveUsedRest>> + <</if>> + <<if ($universalRulesConsent == 0)>> <<if (_release.slaves === 1)>> <<if ($slaves[$i].energy > 95)>> @@ -1314,6 +1324,11 @@ <<set $slaves[$i].devotion += 1, $slaves[$i].trust += 1>> Having a place to call $his own each night helps keep the stress of $his duties from catching up with $him. + <<if $slaveUsedRest>> + $He is permitted to take short breaks throughout the week to help manage $his building exhaustion, though it does restrict $his non-essential activities. + <<unset $slaveUsedRest>> + <</if>> + <<if ($universalRulesConsent == 0)>> <<if (_release.slaves === 1)>> <<if ($slaves[$i].energy > 95)>> @@ -1777,6 +1792,11 @@ <<set $slaves[$i].devotion += 1, $slaves[$i].trust += 1>> It also helps to offset the tiring nature of $his position. + <<if $slaveUsedRest>> + $He is permitted to take short breaks throughout the week to help manage $his building exhaustion, though it does restrict $his non-essential activities. + <<unset $slaveUsedRest>> + <</if>> + <<if ($slaves[$i].attrKnown == 0)>> <<if ($week-$slaves[$i].weekAcquired > 4) && $slaves[$i].energy > 20>> <<set $slaves[$i].attrKnown = 1>> @@ -3210,6 +3230,11 @@ <<set $slaves[$i].devotion += 1, $slaves[$i].trust += 1>> It also helps to offset the tiring nature of $his position. + <<if $slaveUsedRest>> + $He is permitted to take short breaks throughout the week to help manage $his building exhaustion, though it does restrict $his non-essential activities. + <<unset $slaveUsedRest>> + <</if>> + <<if ($universalRulesConsent == 0)>> <<if (_release.slaves === 1)>> <<if ($slaves[$i].energy > 95)>> @@ -3755,6 +3780,11 @@ <<set $slaves[$i].devotion += 1, $slaves[$i].trust += 1>> It also helps to offset the tiring nature of $his position. + <<if $slaveUsedRest>> + $He is permitted to take short breaks throughout the week to help manage $his building exhaustion, though it does restrict $his non-essential activities. + <<unset $slaveUsedRest>> + <</if>> + <<if ($universalRulesConsent == 0)>> <<if (_release.slaves === 1)>> <<if ($slaves[$i].energy > 95)>> @@ -4358,6 +4388,11 @@ <<set $slaves[$i].devotion += 1, $slaves[$i].trust += 1>> It also helps to offset the tiring nature of $his position. + <<if $slaveUsedRest>> + $He is permitted to take short breaks throughout the week to help manage $his building exhaustion, though it does restrict $his non-essential activities. + <<unset $slaveUsedRest>> + <</if>> + <<if ($universalRulesConsent == 0)>> <<if (_release.slaves === 1)>> <<if ($slaves[$i].energy > 95)>>