diff --git a/.eslintrc.json b/.eslintrc.json index 855b0eb39b32ed39a291da16228754d639a9dc47..4a506e88c68c19e97743473cbf3c5f57f15ec0ec 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -30,7 +30,9 @@ "rules": { "semi": ["error", "always"], "semi-spacing": "warn", - "semi-style": "warn", + "semi-style": "warn", + "block-spacing": ["warn", "always"], + "curly": ["warn", "all"], "eqeqeq": "error", "no-fallthrough": "error", "space-before-function-paren": ["error", "never"], diff --git a/src/SpecialForce/SpecialForce.js b/src/SpecialForce/SpecialForce.js index d98610db201e8d43d8bcd1314ffaf0f62e2bb516..adc8b6d524fda8f0ae9c96ed92460a64ef01ea97 100644 --- a/src/SpecialForce/SpecialForce.js +++ b/src/SpecialForce/SpecialForce.js @@ -1,5 +1,5 @@ // V=SugarCube.State.variables, T=SugarCube.State.temporary; -App.SF.Init = function(input = '') { +App.SF.Init = function() { const V = State.variables; if (V.SF.Depravity === undefined) { Object.assign(V.SF, @@ -16,7 +16,8 @@ App.SF.Init = function(input = '') { MercCon:{ History:0, CanAttend:-2, Income:0, Revenue:0, Menials:0, TotalMenials:0, Mercs:0, TotalMercs:0 - } + }, + FS:{Tension:-1} }); //V.arcologies[0].SFRaid = 1; V.arcologies[0].SFRaidTarget = -1; } @@ -463,10 +464,12 @@ App.SF.fsIntegration = function(input = 'Menu', textDisplay = 100, text = `\n`) for (let i = 0; i < FS_OPTIONS.length; i++) { switch (FS_OPTIONS[i]) { case 'Repopulation': - if (textDisplay === -1 && V.SF.FS[FS_OPTIONS[i]].gift > 0) text += `\nTo ease The Colonel's hostility towards Repopulationism, you have gifted her with a very large and unusually shaped armored Command Vehicle; it is designed to fully support the Colonel herself and all of her Command & Communications needs in the field. Given its one-occupant design, it comes well supported with its global-uplink communications array, onboard super computer, shock and blast resistant interior foam padding, adjustable body harness, extended life support & CBRN protection suites, advanced waste removal systems, and its in-built pregnancy-support systems. Should she ever decide to take to the battlefield whilst hyper pregnant herself, there is no vehicle in the world she would prefer over this one. Despite not yet being hyper-pregnant, she is impressed by how roomy, comfortable, and capable her new Command Vehicle is, despite its large profile. You see her using it quite a bit too, despite her body still being much smaller than the unit was designed for.\n`; + const hyperPreg0 = V.seeHyperPreg > 0 ? 'hyper-':''; + const hyperPreg1 = V.seeHyperPreg > 0 ? 'hyper':''; + if (textDisplay === -1 && V.SF.FS[FS_OPTIONS[i]].gift > 0) text += `\nTo ease The Colonel's hostility towards Repopulationism, you have gifted her with a very large and unusually shaped armored Command Vehicle; it is designed to fully support the Colonel herself and all of her Command & Communications needs in the field. Given its one-occupant design, it comes well supported with its global-uplink communications array, onboard super computer, shock and blast resistant interior foam padding, adjustable body harness, extended life support & CBRN protection suites, advanced waste removal systems, and its in-built pregnancy-support systems. Should she ever decide to take to the battlefield whilst ${hyperPreg1} pregnant herself, there is no vehicle in the world she would prefer over this one. Despite not yet being ${hyperPreg0}pregnant, she is impressed by how roomy, comfortable, and capable her new Command Vehicle is, despite its large profile. You see her using it quite a bit too, despite her body still being much smaller than the unit was designed for.\n`; if (textDisplay === 5 && V.SF.FS[FS_OPTIONS[i]].lv >= textDisplay) text += `\nThe troops enjoy their Repopulationist food, which tastes better than the old food, while being completely unaware that they increase semen production and promote ovulation.\n`; - if (textDisplay === 10 && V.SF.FS[FS_OPTIONS[i]].lv >= textDisplay) text += `\nMagazines and porn featuring hyper pregnant women are widely dispersed among troops to increase their interest in reproduction; many of sex scenes they view now feature heavily pregnant women.\n`; - if (textDisplay === 15 && V.SF.FS[FS_OPTIONS[i]].lv >= textDisplay) text += `\nThere are now some hyper pregnant slaves present. Many of the new recruits are morbidly curious about these beings, and the female recruits ask them many questions whenever they have time.\n`; + if (textDisplay === 10 && V.SF.FS[FS_OPTIONS[i]].lv >= textDisplay) text += `\nMagazines and porn featuring ${hyperPreg1} pregnant women are widely dispersed among troops to increase their interest in reproduction; many of sex scenes they view now feature heavily pregnant women.\n`; + if (textDisplay === 15 && V.SF.FS[FS_OPTIONS[i]].lv >= textDisplay) text += `\nThere are now some ${hyperPreg1} pregnant slaves present. Many of the new recruits are morbidly curious about these beings, and the female recruits ask them many questions whenever they have time.\n`; if (textDisplay === 20 && V.SF.FS[FS_OPTIONS[i]].lv >= textDisplay) text += `\nAn hour after reception, all captives with pussies are promptly strapped down to an inspection chair and In-Vitro Fertilized by the doctors, before being dragged off the nearby maternity clinic. Your Firebase's soldiers bid for the privilege of having their sperm used for the fertilization of new captives, and childbirth is a requisite for pussy-slaves to qualify for basic training.\n`; if (textDisplay === 25 && V.SF.FS[FS_OPTIONS[i]].lv >= textDisplay) text += `\nThere are many double-decker baby carriages found both lined up on the outskirts of the common area and on the sides of several tables, and a good amount of them have small babies in them, awaiting their father or mother's attention. Someday soon, all of the carriages will be full.\n`; if (textDisplay === 30 && V.SF.FS[FS_OPTIONS[i]].lv >= textDisplay) text += `\nOff the side of the barracks lies an empty backroom that has since been repurposed into a proper nursery staffed by caring slaves. Conventional incubators for the newborns of the grunts have been installed, and there is even an advanced incubator installed in the corner to age officers' slave children very rapidly.\n`; @@ -481,8 +484,8 @@ App.SF.fsIntegration = function(input = 'Menu', textDisplay = 100, text = `\n`) if (textDisplay === 75 && V.SF.FS[FS_OPTIONS[i]].lv >= textDisplay) text += `\nWithin the numerous transport aircraft of the hangar, a unique change can be found; since greater human quantity is a focus and priority of the Firebase, more seating has been carefully welded into the interiors of every passenger section, leading to tighter fits, but bigger troop payloads once the transport aircraft touch down. While it currently is uncomfortable for the troops, once the great many claimed and registered children of the current generation of Firebase troops grow up and seek to follow in their parent's footsteps, these abundant seating arrangements will be downright necessary to transport sufficient amounts of these hordes of hopefuls to and from future battles without leaving too many behind.\n`; if (textDisplay === 80 && V.SF.FS[FS_OPTIONS[i]].lv >= textDisplay) text += `\nNear the barracks, the residents of the Firebase are grateful to have the aid of the All-In-One Parenthood Infirmary. This impressively large and well-equipped facility is staffed with professionals from all over the arcology, and these certified midwives and midmen carry out all the services needed to help this place function as a refuge for personnel during all stages of parenthood; it contains rooms for a fertility clinic, a delivery clinic, a post-natal workshop, and even a high-capacity daycare center.\n`; if (textDisplay === 85 && V.SF.FS[FS_OPTIONS[i]].lv >= textDisplay) text += `\nThe outside entrance of the Firebase features a modest outdoor playground, complete with jungle gyms, see saws, sandboxes, a few kiddie pools and many other children's amusements. The playground is surrounded by tall barbed wire fences however, and in the center is an imposing guard tower that serves as a useful vantage point for the squad of snipers and spotter assigned to there to keep watch.\n`; - if (textDisplay === 90 && V.SF.FS[FS_OPTIONS[i]].lv >= textDisplay) text += `\nBy now, most of the men of the Firebase are fathers, and the vast majority of the slaves present are visibly pregnant. An envied few are enjoying their hyperpregnancies too, as those slaves are given reduced duties and more rest and food out of necessity. WOrth noting is the surprisingly high number of pregnant soldiers and staff members absent from their units; a nice portion of them are enjoying their maternity leave benefits as they wait out their pregnancies or post-natal recoveries in either the Firebase's facilities or the perceived comfort and privacy of your arcology above. Progeny of varying ages can be seen just about anywhere in the Firebase; either in rows of cozy bedding or baby carriages (for the abundance of claimed and properly registered children), or in the stacks of baby cages that once again await transport to the slave orphanages (for the multitude of newborn bastards).\n`; - if (textDisplay === 100 && V.SF.FS[FS_OPTIONS[i]].lv >= textDisplay) text += `\nRepopulation: The Colonel has spent considerable savings creating and incubating a slave that looks exactly like a younger version of her (but with that steel collar she's wearing, she'll never fool anyone). The Slave has since been repeatedly fertilized with The Colonel's DNA, since The Colonel has no desire to get pregnant herself. The Slave is on many fertility pills, and is currently kept in a special secluded part of the Firebase to study childrearing skills and wait out her hyper-pregnancy, after which she will train and heal up to recover. Of course, next year The Slave will be fertilized again, to add another batch to the pile...\n`; + if (textDisplay === 90 && V.SF.FS[FS_OPTIONS[i]].lv >= textDisplay) text += `\nBy now, most of the men of the Firebase are fathers, and the vast majority of the slaves present are visibly pregnant. An envied few are enjoying their ${hyperPreg1}pregnancies too, as those slaves are given reduced duties and more rest and food out of necessity. Worth noting is the surprisingly high number of pregnant soldiers and staff members absent from their units; a nice portion of them are enjoying their maternity leave benefits as they wait out their pregnancies or post-natal recoveries in either the Firebase's facilities or the perceived comfort and privacy of your arcology above. Progeny of varying ages can be seen just about anywhere in the Firebase; either in rows of cozy bedding or baby carriages (for the abundance of claimed and properly registered children), or in the stacks of baby cages that once again await transport to the slave orphanages (for the multitude of newborn bastards).\n`; + if (textDisplay === 100 && V.SF.FS[FS_OPTIONS[i]].lv >= textDisplay) text += `\nRepopulation: The Colonel has spent considerable savings creating and incubating a slave that looks exactly like a younger version of her (but with that steel collar she's wearing, she'll never fool anyone). The Slave has since been repeatedly fertilized with The Colonel's DNA, since The Colonel has no desire to get pregnant herself. The Slave is on many fertility pills, and is currently kept in a special secluded part of the Firebase to study childrearing skills and wait out her ${hyperPreg0}pregnancy, after which she will train and heal up to recover. Of course, next year The Slave will be fertilized again, to add another batch to the pile...\n`; break; case 'Eugenics': if (textDisplay === -1 && V.SF.FS[FS_OPTIONS[i]].gift > 0) text += `\nTo ease The Colonel's hostility towards Eugenics, you have gifted her with a very rare and prestigious personal vehicle to demonstrate the pedigree of the Elite; you have given The Colonel a custom-built designer Super Car, designed to allow her to drive flawlessly both on-road and off-road in finest aesthetic style, whilst boasting excellent speeds all the same. It also has absurd durability and reliability, able to survive and continue driving even after sustaining direct RPG fire. It boasts a rare lightweight composite material chassis, onboard voice-activated AI personal assistant, advanced ballistics-retardant windows, Kevlar-lined run-flat tires, mine-resistant undercarriage, integrated long-term life support and CBRN protection systems, and even a passenger's seat to bring a friend along. She is floored by how exotic and capable her magnificent new car is. You see her using it quite a bit too, for both joyrides and casual errands around the Free City.\n`; diff --git a/src/js/economyJS.js b/src/js/economyJS.js index 970863e4f81ca2df95beb098beba9f53a34ea804..51eb187d5a8e45004a0d8547bb07439178be29ef 100644 --- a/src/js/economyJS.js +++ b/src/js/economyJS.js @@ -252,15 +252,13 @@ window.getMasterSuiteCosts = function() { window.getNurseryCosts = function() { const facilityCost = State.variables.facilityCost; const nursery = State.variables.nursery; - const costs = (nursery * facilityCost); - return costs; + return (nursery * facilityCost); }; window.getFarmyardCosts = function() { const facilityCost = State.variables.facilityCost; const farmyard = State.variables.farmyard; - const costs = (farmyard * facilityCost); - return costs; + return (farmyard * facilityCost); }; window.getSecurityExpansionCost = function() { @@ -321,15 +319,11 @@ window.getSecurityExpansionCost = function() { // general arcology costs window.getLifestyleCosts = function() { - let costs = 0; - const localEcon = State.variables.localEcon; - costs += (State.variables.girls * (250 + (50000 / localEcon))); - return costs; + return (State.variables.girls * (250 + (50000 / State.variables.localEcon))); }; window.getFSCosts = function() { - let costs = 0; - costs += State.variables.FSSpending; + let costs = State.variables.FSSpending; if (State.variables.arcologies[0].FSRepopulationFocusLaw === 1 && State.variables.PC.pregKnown === 1) { costs -= 500; } @@ -337,26 +331,16 @@ window.getFSCosts = function() { }; window.getCitizenOrphanageCosts = function() { - let costs = 0; - costs += State.variables.citizenOrphanageTotal * 100; - return costs; + return State.variables.citizenOrphanageTotal * 100; }; window.getPrivateOrphanageCosts = function() { - let costs = 0; - costs += State.variables.privateOrphanageTotal * 500; - if (State.variables.breederOrphanageTotal > 0) { - costs += 50; - } - return costs; + const costs = State.variables.privateOrphanageTotal * 500; + return costs + (State.variables.breederOrphanageTotal > 0) ? 50 : 0; }; window.getPeacekeeperCosts = function() { - let costs = 0; - if (State.variables.peacekeepers !== 0 && State.variables.peacekeepers.undermining !== 0) { - costs += State.variables.peacekeepers.undermining; - } - return costs; + return (State.variables.peacekeepers !== 0 && State.variables.peacekeepers.undermining !== 0) ? State.variables.peacekeepers.undermining : 0; }; window.getMercenariesCosts = function() { @@ -375,20 +359,12 @@ window.getMercenariesCosts = function() { }; window.getMenialRetirementCosts = function() { - let costs = 0; - if (State.variables.citizenRetirementMenials === 1) { - costs += State.variables.menials * 2; - } - return costs; + return (State.variables.citizenRetirementMenials === 1) ? State.variables.menials * 2 : 0; }; // policy and other expenses window.getRecruiterCosts = function() { - let costs = 0; - if (State.variables.Recruiter !== 0) { - costs += 250; - } - return costs; + return (State.variables.Recruiter !== 0) ? 250 : 0; }; window.getSchoolCosts = function() { @@ -446,7 +422,7 @@ window.getSchoolCosts = function() { window.getPolicyCosts = function() { let costs = 0; - let policyCost = State.variables.policyCost; + const policyCost = State.variables.policyCost; if (State.variables.alwaysSubsidizeGrowth === 1) { costs += policyCost; } @@ -477,24 +453,17 @@ window.getProstheticsCosts = function() { // player expenses window.getPCTrainingCosts = function() { + const PA = Object.values(PersonalAttention); + const currentPA = State.variables.personalAttention; let costs = 0; if (State.variables.PC.actualAge >= State.variables.IsInPrimePC && State.variables.PC.actualAge < State.variables.IsPastPrimePC) { - if (State.variables.personalAttention === PersonalAttention.TRADE) { - costs += 10000 * State.variables.AgeEffectOnTrainerPricingPC; - } else if (State.variables.personalAttention === PersonalAttention.WAR) { - costs += 10000 * State.variables.AgeEffectOnTrainerPricingPC; - } else if (State.variables.personalAttention === PersonalAttention.SLAVING) { - costs += 10000 * State.variables.AgeEffectOnTrainerPricingPC; - } else if (State.variables.personalAttention === PersonalAttention.ENGINEERING) { - costs += 10000 * State.variables.AgeEffectOnTrainerPricingPC; - } else if (State.variables.personalAttention === PersonalAttention.MEDICINE) { - costs += 10000 * State.variables.AgeEffectOnTrainerPricingPC; - } else if (State.variables.personalAttention === PersonalAttention.HACKING) { + if (PA.includes(currentPA) && currentPA !== PersonalAttention.MAID) { costs += 10000 * State.variables.AgeEffectOnTrainerPricingPC; } } return costs; }; + window.getPCCosts = function() { let costs = 0; if (State.variables.PC.preg === -1) { @@ -562,16 +531,12 @@ window.getWeatherCosts = function() { window.getSlaveMinorCosts = function(slave) { let costs = 0; - let rulesCost = State.variables.rulesCost; + const rulesCost = State.variables.rulesCost; if (slave.assignment === Job.SERVANT || slave.assignment === Job.SERVER) { if (slave.trust < -20) { costs -= rulesCost * 4; } else if (slave.devotion < -20) { - if (slave.trust >= 20) { - costs -= rulesCost / 2; - } else { - costs -= rulesCost * 2; - } + costs -= (slave.trust >= 20) ? rulesCost / 2 : rulesCost * 2; } else if (slave.devotion <= 20) { costs -= rulesCost * 3; } else if (slave.devotion <= 50) { @@ -641,11 +606,7 @@ window.getSlaveCost = function(s) { } break; case Job.BROTHEL: - if (s.livingRules === LivingRule.NORMAL) { - cost += rulesCost * 1.5; - } else { - cost += rulesCost; - } + cost += (s.livingRules === LivingRule.NORMAL) ? rulesCost * 1.5 : rulesCost; break; case Job.SCHOOL: case Job.CLUB: @@ -674,19 +635,11 @@ window.getSlaveCost = function(s) { if (s.livingRules === LivingRule.NORMAL) { cost += rulesCost * 1.5; } else { - if (State.variables.servantsQuartersDecoration === 'Degradationist') { - cost += rulesCost * 0.90; - } else { - cost += rulesCost; - } + cost += (State.variables.servantsQuartersDecoration === 'Degradationist') ? rulesCost * 0.90 : rulesCost; } break; case Job.JAIL: - if (s.livingRules === LivingRule.NORMAL) { - cost += rulesCost * 1.25; - } else { - cost += rulesCost * 0.90; - } + cost += (s.livingRules === LivingRule.NORMAL) ? rulesCost * 1.25 : rulesCost * 0.90; break; case Job.MADAM: case Job.DJ: @@ -805,11 +758,7 @@ window.getSlaveCost = function(s) { } if ((s.assignment !== Job.DAIRY || State.variables.dairyRestraintsSetting < 2) && (s.assignment !== Job.ARCADE)) { if (s.amp !== 0) { - if (s.amp === 1) { - cost += rulesCost; - } else { - cost += rulesCost / 2; - } + cost += (s.amp === 1) ? rulesCost : rulesCost / 2; } else if (!canWalk(s)) { cost += rulesCost; } @@ -957,7 +906,7 @@ window.menialSlaveCost = function(q) { window.NPCSexSupply = function(LC) { const V = State.variables; - let NPCSexSupply = {lowerClass: V.NPCSexSupply.lowerClass}; + const NPCSexSupply = {lowerClass: V.NPCSexSupply.lowerClass}; // Lower class calculations LC += V.sexSubsidiesLC / 10 - V.sexSupplyBarriersLC / 20; @@ -975,7 +924,7 @@ window.NPCSexSupply = function(LC) { // The function for calculating and storing a slave's sexual interaction with citizens/'the outside' window.slaveJobValues = function() { const V = State.variables; - let slaveJobValues = {arcade: 0, club: 0, clubSP: 0}, clubSpots = 0, toTheClubTotal = 0, DJRepBonus = 0; + const slaveJobValues = {arcade: 0, club: 0, clubSP: 0}; let clubSpots = 0; const toTheClubTotal = 0; let DJRepBonus = 0; V.slavesGettingHelp = 0; // This section is for specific slaves or non-unique slaves adding their values to the whole @@ -1065,7 +1014,7 @@ window.slaveJobValues = function() { // Glory hole slaves adding to 'arcade' V.JobIDArray["work a glory hole"].forEach(ID => { - let s = V.slaves[V.slaveIndices[ID]]; + const s = V.slaves[V.slaveIndices[ID]]; s.sexAmount = Math.trunc((jsRandom(160, 200) + (20 * (4 - s.anus)) + (10 * (4 - s.vagina)) + Math.trunc(s.health / 5)) * 0.8); slaveJobValues.arcade += s.sexAmount; }); @@ -1092,8 +1041,8 @@ window.slaveJobValues = function() { }); function SJVClub(s) { - let toTheClub = 0, - beautyMultiplier = 1; + let toTheClub = 0; + let beautyMultiplier = 1; s.minorInjury = 0; // The beauty multiplier diff --git a/src/js/slaveSummaryWidgets.js b/src/js/slaveSummaryWidgets.js index c814cbf87125235b3cc8762703143370e6a44e1b..a3bdfd05a94e6bb90ae8b9eb548029bffbb1c10f 100644 --- a/src/js/slaveSummaryWidgets.js +++ b/src/js/slaveSummaryWidgets.js @@ -5003,105 +5003,114 @@ App.UI.PassageSlaveFilers = { "HG Select": s => ((s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 50 && s.assignment !== "be your Head Girl" && canWalk(s) && canHear(s) && canSee(s) && canTalk(s)) && ((State.variables.SlaveSummaryFiler !== "experienced") || (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.headGirlSuite.manager.slaveHasExperience(s)))), - "Head Girl Suite": s => (s.assignmentVisible === 1 && s.fuckdoll <= 0 && ( - (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "be your Head Girl" && s.indentureRestrictions <= 0 && (s.breedingMark !== 1 || State.variables.propOutcome === 0)) || - (State.variables.SlaveSummaryFiler !== "assignable" && s.assignment === "live with your Head Girl"))), + "Head Girl Suite": s => ( + (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "be your Head Girl" && s.indentureRestrictions <= 0 && (s.breedingMark !== 1 || State.variables.propOutcome === 0) && s.assignmentVisible === 1 && s.fuckdoll <= 0) || + (State.variables.SlaveSummaryFiler !== "assignable" && s.assignment === "live with your Head Girl")), "Subordinate Targeting": s => (s.devotion >= -20 && s.fuckdoll === 0 && State.variables.activeSlave.ID !== s.ID && (State.variables.activeSlave.amp !== 1 || s.amp !== 1)), - "Spa": s => ((s.assignmentVisible === 1 && s.fuckdoll <= 0 && ( - (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "rest in the spa") || + "Spa": s => ( + (s.fuckdoll <= 0 && s.assignment !== "rest in the spa" && ( + (s.assignmentVisible === 1 && State.variables.SlaveSummaryFiler === "assignable") || + (s.assignmentVisible === 0 && State.variables.SlaveSummaryFiler === "transferable")) + ) || (State.variables.SlaveSummaryFiler === "occupying" && s.assignment === "rest in the spa") || - (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Attendant.ID))) || - (s.assignmentVisible === 0 && s.fuckdoll <= 0 && ( - (State.variables.SlaveSummaryFiler === "transferable" && s.assignment !== "rest in the spa")))), + (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Attendant.ID)), "Attendant Select": s => ((s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 50 && canWalk(s) && canHear(s)) && ((State.variables.SlaveSummaryFiler !== "experienced") || (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.spa.manager.slaveHasExperience(s)))), - "Nursery": s => (s.assignmentVisible === 1 && s.fuckdoll <= 0 && (s.devotion > 20 || s.trust > 20) && ( - (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "work as a nanny") || + "Nursery": s => ( + (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "work as a nanny" && s.assignmentVisible === 1 && s.fuckdoll <= 0 && (s.devotion > 20 || s.trust > 20)) || (State.variables.SlaveSummaryFiler === "occupying" && s.assignment === "work as a nanny") || - (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Matron.ID))), + (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Matron.ID)), "Matron Select": s => ((s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 50 && canWalk(s) && canHear(s)) && ((State.variables.SlaveSummaryFiler !== "experienced") || (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.nursery.manager.slaveHasExperience(s)))), - "Brothel": s => (s.assignmentVisible === 1 && s.fuckdoll <= 0 && ( - (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "work in the brothel") || + "Brothel": s => ( + (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "work in the brothel" && s.assignmentVisible === 1 && s.fuckdoll <= 0) || (State.variables.SlaveSummaryFiler === "occupying" && s.assignment === "work in the brothel") || - (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Madam.ID))), + (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Madam.ID)), "Madam Select": s => ((s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 50 && s.intelligence + s.intelligenceImplant >= -50 && canWalk(s) && canSee(s) && canHear(s) && (s.breedingMark !== 1 || State.variables.propOutcome === 0)) && ((State.variables.SlaveSummaryFiler !== "experienced") || (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.brothel.manager.slaveHasExperience(s)))), - "Club": s => (s.assignmentVisible === 1 && s.fuckdoll <= 0 && ( - (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "serve in the club") || + "Club": s => ( + (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "serve in the club" && s.assignmentVisible === 1 && s.fuckdoll <= 0) || (State.variables.SlaveSummaryFiler === "occupying" && s.assignment === "serve in the club") || - (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.DJ.ID))), + (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.DJ.ID)), "DJ Select": s => ((s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 50 && s.intelligence + s.intelligenceImplant >= -50 && canTalk(s) && canHear(s) && canWalk(s) && (s.breedingMark !== 1 || State.variables.propOutcome === 0)) && ((State.variables.SlaveSummaryFiler !== "experienced") || (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.club.manager.slaveHasExperience(s)))), - "Clinic": s => ((s.assignmentVisible === 1 && s.fuckdoll <= 0 && ( - (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "get treatment in the clinic") || + "Clinic": s => ( + (s.fuckdoll <= 0 && s.assignment !== "get treatment in the clinic" && ( + (s.assignmentVisible === 1 && State.variables.SlaveSummaryFiler === "assignable") || + (s.assignmentVisible === 0 && State.variables.SlaveSummaryFiler === "transferable")) + ) || (State.variables.SlaveSummaryFiler === "occupying" && s.assignment === "get treatment in the clinic") || - (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Nurse.ID))) || - (s.assignmentVisible === 0 && s.fuckdoll <= 0 && ( - (State.variables.SlaveSummaryFiler === "transferable" && s.assignment !== "get treatment in the clinic")))), + (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Nurse.ID)), "Nurse Select": s => ((s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 50 && canWalk(s) && canSee(s)) && ((State.variables.SlaveSummaryFiler !== "experienced") || (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.clinic.manager.slaveHasExperience(s)))), - "Schoolroom": s => ((s.assignmentVisible === 1 && s.fuckdoll <= 0 && ( - (State.variables.SlaveSummaryFiler === "assignable" && s.fetish !== "mindbroken" && s.assignment !== "learn in the schoolroom") || + "Schoolroom": s => ( + ((s.fuckdoll <= 0 && s.fetish !== "mindbroken" && s.assignment !== "learn in the schoolroom") && + (s.assignmentVisible === 1 && State.variables.SlaveSummaryFiler === "assignable") || + (s.assignmentVisible === 0 && State.variables.SlaveSummaryFiler === "transferable") + ) || (State.variables.SlaveSummaryFiler === "occupying" && s.assignment === "learn in the schoolroom") || - (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Schoolteacher.ID))) || - (s.assignmentVisible === 0 && s.fuckdoll <= 0 && ( - (State.variables.SlaveSummaryFiler === "transferable" && s.assignment !== "learn in the schoolroom")))), + (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Schoolteacher.ID)), "Schoolteacher Select": s => ((s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 50 && canTalk(s) && canHear(s) && canSee(s)) && ((State.variables.SlaveSummaryFiler !== "experienced") || (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.schoolroom.manager.slaveHasExperience(s)))), - "Dairy": s => (s.assignmentVisible === 1 && s.fuckdoll <= 0 && ( - (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "work in the dairy") || + "Dairy": s => ( + (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "work in the dairy" && s.assignmentVisible === 1 && s.fuckdoll <= 0) || (State.variables.SlaveSummaryFiler === "occupying" && s.assignment === "work in the dairy") || - (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Milkmaid.ID))), + (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Milkmaid.ID)), "Milkmaid Select": s => ((s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 20 && canWalk(s) && canSee(s) && canHear(s)) && ((State.variables.SlaveSummaryFiler !== "experienced") || (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.dairy.manager.slaveHasExperience(s)))), - "Farmyard": s => (s.assignmentVisible === 1 && s.fuckdoll <= 0 && ( - (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "work as a farmhand") || + "Farmyard": s => ( + (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "work as a farmhand" && s.assignmentVisible === 1 && s.fuckdoll <= 0) || (State.variables.SlaveSummaryFiler === "occupying" && s.assignment === "work as a farmhand") || - (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Farmer.ID))), + (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Farmer.ID)), "Farmer Select": s => ((s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 50 && canWalk(s) && canSee(s) && canHear(s)) && ((State.variables.SlaveSummaryFiler !== "experienced") || (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.farm.manager.slaveHasExperience(s)))), - "Servants' Quarters": s => (s.assignmentVisible === 1 && s.fuckdoll <= 0 && ( - (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "work as a servant") || + "Servants' Quarters": s => ( + (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "work as a servant" && s.assignmentVisible === 1 && s.fuckdoll <= 0) || (State.variables.SlaveSummaryFiler === "occupying" && s.assignment === "work as a servant") || - (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Stewardess.ID))), + (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Stewardess.ID)), "Stewardess Select": s => ((s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 50 && s.intelligence + s.intelligenceImplant >= -50 && canWalk(s) && canSee(s) && canHear(s)) && ((State.variables.SlaveSummaryFiler !== "experienced") || (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.servantsQuarters.manager.slaveHasExperience(s)))), - "Master Suite": s => (s.assignmentVisible === 1 && s.fuckdoll <= 0 && ( - (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "serve in the master suite") || + "Master Suite": s => ( + (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "serve in the master suite" && s.assignmentVisible === 1 && s.fuckdoll <= 0) || (State.variables.SlaveSummaryFiler === "occupying" && s.assignment === "serve in the master suite") || - (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Concubine.ID))), + (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Concubine.ID)), "Concubine Select": s => ((s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 50 && s.amp !== 1) && ((State.variables.SlaveSummaryFiler !== "experienced") || (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.masterSuite.manager.slaveHasExperience(s)))), - "Cellblock": s => (s.assignmentVisible === 1 && s.fuckdoll <= 0 && s.fetish !== "mindbroken" && ( - (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "be confined in the cellblock") || + "Cellblock": s => ( + (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "be confined in the cellblock" && s.assignmentVisible === 1 && s.fuckdoll <= 0 && s.fetish !== "mindbroken") || (State.variables.SlaveSummaryFiler === "occupying" && s.assignment === "be confined in the cellblock") || - (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Wardeness.ID))), + (State.variables.SlaveSummaryFiler === "leading" && s.ID === State.variables.Wardeness.ID)), "Wardeness Select": s => ((s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 50 && canWalk(s) && canSee(s) && canHear(s)) && ((State.variables.SlaveSummaryFiler !== "experienced") || (State.variables.SlaveSummaryFiler === "experienced" && App.Entity.facilities.cellblock.manager.slaveHasExperience(s)))), - "Arcade": s => (s.assignmentVisible === 1 && (State.variables.arcade >= State.variables.arcadeSlaves || State.variables.arcadeUpgradeFuckdolls === 1) && ( - (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "be confined in the arcade") || - (State.variables.SlaveSummaryFiler !== "assignable" && s.assignment === "be confined in the arcade"))), - "Pit": s => (s.assignmentVisible === 1 && s.fuckdoll === 0 && ( - (State.variables.SlaveSummaryFiler === "assignable" && !State.variables.fighterIDs.includes(s.ID) && canWalk(s) && (s.assignment !== "guard you") && (s.assignment !== "work in the dairy" || State.variables.dairyRestraintsSetting < 2)) || - (State.variables.SlaveSummaryFiler !== "assignable" && State.variables.fighterIDs.includes(s.ID)))), - "Coursing Association": s => (s.assignmentVisible === 1 && s.fuckdoll === 0 && ( - (State.variables.SlaveSummaryFiler === "assignable" && canWalk(s) && State.variables.Lurcher.ID !== s.ID) || - (State.variables.SlaveSummaryFiler !== "assignable" && State.variables.Lurcher.ID === s.ID))), - "New Game Plus": s => ((State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "be imported") || (State.variables.SlaveSummaryFiler !== "assignable" && s.assignment === "be imported")), - "Rules Slave Select": s => ((State.variables.SlaveSummaryFiler === "assignable" && !ruleSlaveSelected(s, State.variables.currentRule)) || (State.variables.SlaveSummaryFiler !== "assignable" && ruleSlaveSelected(s, State.variables.currentRule))), - "Rules Slave Exclude": s => ((State.variables.SlaveSummaryFiler === "assignable" && !ruleSlaveExcluded(s, State.variables.currentRule)) || (State.variables.SlaveSummaryFiler !== "assignable" && ruleSlaveExcluded(s, State.variables.currentRule))), + "Arcade": s => ( + (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "be confined in the arcade" && s.assignmentVisible === 1 && (State.variables.arcade >= State.variables.arcadeSlaves || State.variables.arcadeUpgradeFuckdolls === 1)) || + (State.variables.SlaveSummaryFiler === "occupying" && s.assignment === "be confined in the arcade")), + "Pit": s => ( + (State.variables.SlaveSummaryFiler === "assignable" && !State.variables.fighterIDs.includes(s.ID) && canWalk(s) && (s.assignment !== "guard you") && (s.assignment !== "work in the dairy" || State.variables.dairyRestraintsSetting < 2) && (s.assignmentVisible === 1 && s.fuckdoll === 0) || + (State.variables.SlaveSummaryFiler === "occupying" && State.variables.fighterIDs.includes(s.ID)))), + "Coursing Association": s => ( + (State.variables.SlaveSummaryFiler === "assignable" && canWalk(s) && State.variables.Lurcher.ID !== s.ID && (s.assignmentVisible === 1 && s.fuckdoll === 0) || + (State.variables.SlaveSummaryFiler === "occupying" && State.variables.Lurcher.ID === s.ID))), + "New Game Plus": s => ( + (State.variables.SlaveSummaryFiler === "assignable" && s.assignment !== "be imported") || + (State.variables.SlaveSummaryFiler === "occupying" && s.assignment === "be imported")), + "Rules Slave Select": s => ( + (State.variables.SlaveSummaryFiler === "assignable" && !ruleSlaveSelected(s, State.variables.currentRule)) || + (State.variables.SlaveSummaryFiler === "occupying" && ruleSlaveSelected(s, State.variables.currentRule))), + "Rules Slave Exclude": s => ( + (State.variables.SlaveSummaryFiler === "assignable" && !ruleSlaveExcluded(s, State.variables.currentRule)) || + (State.variables.SlaveSummaryFiler === "occupying" && ruleSlaveExcluded(s, State.variables.currentRule))), "Matchmaking": s => (s.devotion >= 100 && s.relationship === State.variables.activeSlave.relationship && s.ID !== State.variables.activeSlave.ID), "Dinner Party Preparations": s => (s.assignmentVisible === 1 && s.fuckdoll === 0), };