diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js index 0a3cbb9e094c031bf45ea4aae64ee9a9640170ee..16aa0642711d0d91a09d3da4fdb20b8e44cc5c41 100644 --- a/js/003-data/gameVariableData.js +++ b/js/003-data/gameVariableData.js @@ -64,6 +64,7 @@ App.Data.defaultGameStateVariables = { FSNamePref: 0, HGFormality: 1, HGSeverity: 0, + HGPiercings: 1, abbreviateSidebar: 1, adamPrinciple: 0, allowFamilyTitles: 0, @@ -363,7 +364,6 @@ App.Data.resetOnNGPlus = { eliteAuctioned: 0, slavesSacrificedThisWeek: 0, - HGtraining: "", mercenariesTitle: "", hormones: 0, FSReminder: 0, diff --git a/src/endWeek/reports/penthouseReport.js b/src/endWeek/reports/penthouseReport.js new file mode 100644 index 0000000000000000000000000000000000000000..776b0e6cf67bd4a21d324de2cb12a13826c923ff --- /dev/null +++ b/src/endWeek/reports/penthouseReport.js @@ -0,0 +1,684 @@ +App.EndWeek.penthouseReport = function() { + const el = document.createElement("p"); + let r; + + const HGSuiteSlaves = App.Utils.jobForAssignment(Job.HEADGIRLSUITE).employees(); + const HGTrainSlavesIDs = slavesToTrain(); + + for (const slave of V.slaves) { + if (assignmentVisible(slave)) { + r = []; + const slaveEntry = App.UI.DOM.appendNewElement("div", el, '', "slave-report"); + if (V.seeImages && V.seeReportImages) { + App.UI.DOM.appendNewElement("div", slaveEntry, App.Art.SlaveArtElement(slave, 0, 0), ["imageRef", "tinyImg"]); + } + slaveEntry.append(App.EndWeek.favoriteIcon(slave), " "); + r.push(fullReport(slave)); + App.Events.addNode(el, r, "p"); + + if (slave.ID === V.HeadGirlID && HGSuiteSlaves.length > 0) { + /* We found the Head Girl, now let's find her slave */ + const hgSlave = getSlave(HGSuiteSlaves[0].ID); + const {He2, he2} = getPronouns(hgSlave).appendSuffix("2"); + r = []; + if (hgSlave.assignment !== "live with your Head Girl") { + r.push(`<span class="red">${hgSlave.slaveName} had been assigned to live with your Head Girl, but this week ${he2} was assigned to ${hgSlave.assignment}. ${He2} has been released to your penthouse for reassignment.</span>`); + removeJob(hgSlave, "live with your Head Girl"); + } else { + r.push(App.UI.DOM.makeElement("span", SlaveFullName(hgSlave), "slave-name")); + if (hgSlave.choosesOwnAssignment === 2) { + r.push(App.SlaveAssignment.choosesOwnJob(hgSlave)); + r.push(He2); + } + r.push(App.SlaveAssignment.liveWithHG(hgSlave)); + } + App.Events.addNode(el, r, "p"); + } + } + } + + /* count open spots in facilities after all assignments have been decided for the week */ + V.brothelSpots = App.Entity.facilities.brothel.freeSpace; + V.clubSpots = App.Entity.facilities.club.freeSpace; + V.dairySpots = App.Entity.facilities.dairy.freeSpace; + V.servantsQuartersSpots = App.Entity.facilities.servantsQuarters.freeSpace; + + return el; + + /** + * @param {App.Entity.SlaveState} slave + */ + function fullReport(slave) { + const el = new DocumentFragment(); + const { + He, His, + he, him + } = getPronouns(slave); + let r = []; + let milkResults; + let milkResult; + + r.push(App.UI.DOM.makeElement("span", SlaveFullName(slave), "slave-name")); + if (slave.choosesOwnAssignment === 2) { + r.push(App.SlaveAssignment.choosesOwnJob(slave)); + r.push(He); + } + + switch (slave.assignment) { + case "rest": + r.push(App.SlaveAssignment.rest(slave)); + break; + case "whore": + r.push(App.SlaveAssignment.whore(slave)); + break; + case "serve the public": + r.push(App.SlaveAssignment.serveThePublic(slave)); + break; + case "work a glory hole": + r.push(App.SlaveAssignment.workAGloryHole(slave)); + break; + case "get milked": + milkResults = App.SlaveAssignment.getMilked(slave); + r.push(milkResults.text); + break; + case "take classes": + r.push(App.SlaveAssignment.takeClasses(slave)); + break; + case "please you": + r.push(App.SlaveAssignment.pleaseYou(slave)); + break; + case "be a subordinate slave": + r.push(App.SlaveAssignment.serveYourOtherSlaves(slave)); + break; + case "be a servant": + r.push(App.SlaveAssignment.servant(slave)); + break; + case "stay confined": + r.push(App.SlaveAssignment.stayConfined(slave)); + break; + case "guard you": + r.push(App.SlaveAssignment.guardYou(slave)); + break; + case "be your Head Girl": + r.push(App.SlaveAssignment.beYourHeadGirl(slave)); + break; + case "recruit girls": + r.push(App.SlaveAssignment.recruitGirls(slave)); + break; + default: + removeJob(slave, slave.assignment); + r.push(App.SlaveAssignment.rest(slave)); + } + + if (V.servantMilkers === 1 && slave.lactation > 0 && slave.assignment !== "get milked") { + r.push(`${His} assignment`); + if (App.Data.misc.servantMilkersJobs.includes(slave.assignment)) { + r.push(`is not strenuous, so ${he}`); + if (slave.devotion > 20) { + if (slave.fetish === "boobs") { + r.push(`eagerly`); + } + r.push(`uses`); + } else if (slave.devotion >= -20) { + r.push(`is required to use`); + } else { + r.push(`is forced to use`); + } + r.push(`the penthouse milkers frequently,`); + milkResult = App.SlaveAssignment.getMilked(slave, 0.5); + } else { + r.push(`keeps ${him} busy, but ${he}`); + if (slave.devotion > 20) { + if (slave.fetish === "boobs") { + r.push(`eagerly`); + } + r.push(`uses`); + } else if (slave.devotion >= -20) { + r.push(`is required to use`); + } else { + r.push(`is forced to use`); + } + r.push(`the penthouse milkers whenever ${he} can,`); + milkResult = App.SlaveAssignment.getMilked(slave, 0.25); + } + r.push(`and ${he} gives ${milkResult.milk} liters of milk over the week, which is sold for <span class="yellowgreen">${cashFormat(milkResult.milkSale)}.</span>`); + } + + App.Events.addNode(el, r, "div"); + r = []; + if (slave.minorInjury !== 0) { + r.push(`${His} ${slave.minorInjury} will heal by the end of the week.`); + } + + if (V.showEWD !== 0) { + r.push(App.SlaveAssignment.standardSlaveReport(slave, false)); + } else { + // discard return values silently + App.SlaveAssignment.standardSlaveReport(slave, true); + } + + if (V.PC.health.shortDamage < 30 && Array.isArray(V.personalAttention) && V.personalAttention.findIndex(function(s) { return s.ID === slave.ID; }) !== -1) { + r.push(personalAttention(slave)); + } + + if (HGTrainSlavesIDs.length > 0) { + const trainee = HGTrainSlavesIDs.find(trainee => slave.ID === trainee.ID); + if (trainee) { + r.push(HGApplication(slave, trainee.training)); + } + } + + r.push(App.SlaveAssignment.devotion(slave)); + App.Events.addNode(el, r); + return el; + } + + /** + * @param {App.Entity.SlaveState} slave + * @param {string} headGirlsTraining + */ + function HGApplication(slave, headGirlsTraining) { + const el = document.createElement("span"); + const { + He, His, + he, his, him, himself, girl + } = getPronouns(S.HeadGirl); + const {he2, his2, him2, himself2, girl2} = getPronouns(slave).appendSuffix("2"); + let r = []; + + slave.training = Math.clamp(slave.training, 0, 150); + let effectiveness = S.HeadGirl.actualAge + ((S.HeadGirl.intelligence + S.HeadGirl.intelligenceImplant) / 3) - (S.HeadGirl.accent * 5) + (V.HGSeverity * 10) + ((slave.intelligence + slave.intelligenceImplant) / 4) - (slave.accent * 5); + if (V.AgePenalty === 0) { + effectiveness += Math.max(0, (30 - S.HeadGirl.actualAge)); + } + if (S.HeadGirl.sexualFlaw === "abusive" && V.HGSeverity >= 0) { + effectiveness += 10; + } + if (headGirlsTraining !== "health") { + slave.health.tired += 25; + } + + r.push(`<span style="font-weight: bold">Your Head Girl</span> <span class='slave-name'>${S.HeadGirl.slaveName}</span> notices that <span class='slave-name'>${slave.slaveName}</span>`); + switch (headGirlsTraining) { + case "health": + r.push(`is unwell.`); + break; + case "obedience": + r.push(`is disobedient.`); + break; + case "paraphilia": + r.push(`has a paraphilia.`); + break; + case "flaw": + r.push(`has an unpleasant flaw worth fixing.`); + break; + case "soften": + r.push(`has an unpleasant flaw that ${he} can try to soften into a unique quirk.`); + break; + case "oral skill": + r.push(`isn't as orally skilled as ${he} is.`); + break; + case "anal skill": + r.push(`isn't as skilled at taking anal as ${he} is.`); + break; + case "fuck skill": + r.push(`isn't as skilled at vaginal intercourse as ${he} is.`); + break; + case "whore skill": + r.push(`isn't as skilled at the fine art of sex for money as ${he} is.`); + break; + case "entertain skill": + r.push(`isn't as skilled at entertainment as ${he} is.`); + } + + if (headGirlsTraining === "health") { + r.push(`${He} helps ${slave.slaveName} however ${he} can. The tender care has <span class="green">improved ${slave.slaveName}'s health.</span>`); + improveCondition(slave, 10); + slave.health.tired = Math.clamp(slave.health.tired - 10, 0, 1000); + slave.training = 0; + } else { + if (S.HeadGirl.career === "an arcology owner") { + r.push(`${He} was once an arcology owner ${himself}, making ${him} truly peerless as a Head Girl.`); + effectiveness += 50; + } else if (setup.HGCareers.includes(S.HeadGirl.career)) { + r.push(`${He} was used to giving commands and being obeyed in ${his} life before ${he} was a slave, experience ${he} can call on now.`); + effectiveness += 5; + } else if (S.HeadGirl.skill.headGirl >= V.masteredXP) { + r.push(`${He} is used to giving commands and being obeyed through experience, rendering ${him} more effective.`); + effectiveness += 5; + } + + if (S.HeadGirl.actualAge > 30) { + r.push(`${His} age and experience help ${him} as ${he} works with ${slave.slaveName}.`); + } else if (S.HeadGirl.actualAge < 25 && V.AgePenalty > 0) { + r.push(`${His} youth and inexperience impede ${him} as ${he} works with ${slave.slaveName}.`); + } + + if (S.HeadGirl.accent >= 3) { + r.push(`${He} does ${his} best to give orders in ${V.language}, but has to resort to a lot of unseemly gesticulation and shouting, making ${him} much less effective.`); + } else if (S.HeadGirl.accent === 2) { + r.push(`${His} heavy ${aNational(S.HeadGirl.nationality)} accent impedes ${his} clarity in ${V.language}, making ${him} somewhat less effective.`); + } + + if (headGirlsTraining === "obedience" || headGirlsTraining === "flaw" || headGirlsTraining === "soften") { + if (S.HeadGirl.intelligence + S.HeadGirl.intelligenceImplant > 50) { + if (slave.intelligence + slave.intelligenceImplant > 50) { + r.push(`${He} needs ${his} wits about ${him} to mold ${slave.slaveName}, who's quite intelligent ${himself2}.`); + } else if (slave.intelligence + slave.intelligenceImplant >= -50) { + r.push(`${His} intelligence helps ${him} mold ${slave.slaveName}.`); + } else { + r.push(`Molding ${slave.slaveName} is very easy, especially for a smart Head Girl like ${him}.`); + } + } + } else { + if (S.HeadGirl.intelligence + S.HeadGirl.intelligenceImplant > 50) { + if (slave.intelligence + slave.intelligenceImplant > 50) { + r.push(`Both slaves are quite intelligent, making ${his} job much easier.`); + } else if (slave.intelligence + slave.intelligenceImplant >= -50) { + r.push(`${He}'s quite intelligent and can teach ${slave.slaveName} well.`); + } else { + r.push(`${He} needs all ${his} considerable intelligence to get through to the idiot ${he} has to teach.`); + } + } + } + + if (V.HGSeverity > 0) { + r.push(`Your directives encourage ${him} to rape any slave that fails in the slightest way, a task ${he} approaches`); + if (S.HeadGirl.sexualFlaw === "abusive") { + r.push(`eagerly, since ${he} prefers to take ${his} pleasure without consent.`); + } else if (S.HeadGirl.fetish === "sadist") { + r.push(`with sadistic enthusiasm.`); + } else if (S.HeadGirl.fetish === "dom") { + r.push(`with confidence.`); + } else if (S.HeadGirl.energy > 95) { + r.push(`as a convenient way to`); + if (S.HeadGirl.balls > 0) { + r.push(`drain ${his} perpetually overfilled balls into a series of spasming holes.`); + } else { + r.push(`sate ${his} excess sexual appetite.`); + } + } else { + r.push(`dutifully.`); + } + if (slave.vagina === 0) { + r.push(`In ${slave.slaveName}'s case, ${he}'s careful to limit ${his2} sexual abuse to things that won't take the ${girl2}'s virginity. The slave`); + } else if (slave.anus === 0) { + r.push(`${He}'s careful to molest ${slave.slaveName} in ways that don't involve penetrating ${his2} virgin ass. The slave`); + } else { + r.push(`${slave.slaveName}`); + } + if (slave.devotion > 50) { + r.push(`accepts the abuse, believing ${he2} deserves to be raped.`); + } else if (slave.devotion >= -20) { + r.push(`is <span class="gold">frightened</span> by the unceasing abuse.`); + slave.trust -= 1; + } else { + r.push(`<span class="mediumorchid">hates</span> and <span class="gold">fears</span> the constant abuse.`); + slave.trust -= 1; + slave.devotion -= 1; + } + r.push(`${S.HeadGirl.slaveName} makes sure ${his} victim hates it, every time, and ${slave.slaveName} can't help but do ${his2} very best to avoid this treatment.`); + } else if (V.HGSeverity === 0) { + r.push(`You allow ${him} to use ${his} own judgment when punishing failures,`); + if (S.HeadGirl.sexualFlaw === "abusive") { + r.push(`and ${he} usually decides in favor of forcing misbehaving slaves to get ${him} off.`); + } else if (S.HeadGirl.fetish === "sadist") { + r.push(`permission the sadist uses for ${his} own gratification.`); + } else if (S.HeadGirl.fetish === "dom") { + r.push(`which the dominant ${girl} uses confidently.`); + } else if (S.HeadGirl.energy > 95) { + r.push(`which ${he} uses to`); + if (S.HeadGirl.balls > 0) { + r.push(`force ${his} subordinates to keep ${his} balls drained.`); + } else { + r.push(`extract the constant sexual favors ${his} libido demands.`); + } + } else { + r.push(`and ${he} does ${his} best to be fair.`); + } + r.push(`${slave.slaveName}`); + if (slave.devotion > 50) { + r.push(`is <span class="mediumaquamarine">grateful</span> that ${he2} is punished justly when ${he2} makes mistakes.`); + slave.trust += 1; + } else if (slave.devotion >= -20) { + r.push(`does ${his2} best to learn quickly and avoid punishment.`); + } else { + r.push(`is <span class="gold">scared</span> by ${his2} inability to get away with the smallest disobedience.`); + slave.trust -= 1; + } + } else { + r.push(`You require ${him} to use respect when punishing; ${he} does ${his} best to motivate, but is unable to use real fear as a tool. ${slave.slaveName} understands this, and <span class="mediumaquamarine">trusts</span> that if ${he2} fails, the consequences won't be too awful.`); + slave.trust += 1; + } + + if (headGirlsTraining === "obedience") { + slave.training = 0; + effectiveness -= (slave.intelligence + slave.intelligenceImplant) / 3; + if (effectiveness <= 0) { + r.push(`${slave.slaveName} is smart enough to complicate things; ${he2} manages to outwit ${him} this week and makes no progress.`); + } else { + slave.devotion += Math.ceil(effectiveness / 4); + if (slave.devotion < -50) { + r.push(`${He} helps watch and restrain the rebellious ${slave.slaveName}, helping wear ${him2} down, <span class="gold">breaking ${slave.slaveName}'s rebelliousness.</span>`); + } else if (slave.devotion < -20) { + r.push(`${He} keeps ${slave.slaveName} constantly aware of ${his2} slavery, <span class="gold">breaking ${slave.slaveName}'s resistance.</span>`); + } else { + r.push(`${He} acts as another pair of eyes watching ${slave.slaveName} and metes out punishments, <span class="gold">improving ${slave.slaveName}'s servitude.</span>`); + } + } + } else if (headGirlsTraining === "paraphilia") { + effectiveness -= (slave.intelligence + slave.intelligenceImplant) / 3; + slave.training += effectiveness; + r.push(`${S.HeadGirl.slaveName} does ${his} best to get ${slave.slaveName} past it with punishments and rewards,`); + if (slave.training > 100) { + r.push(`and <span class="green">resolves ${slave.slaveName}'s paraphilia.</span>`); + slave.training = 0; + slave.sexualFlaw = "none"; + } else { + r.push(`and makes partial progress.`); + } + } else if (headGirlsTraining === "flaw") { + effectiveness -= (slave.intelligence + slave.intelligenceImplant) / 3; + slave.training += effectiveness; + r.push(`${S.HeadGirl.slaveName} punishes ${slave.slaveName} whenever ${he} catches ${him2} indulging in ${his2} bad habits,`); + if (slave.training > 100) { + r.push(`and <span class="green">fixes ${slave.slaveName}'s flaw.</span>`); + slave.training = 0; + if (slave.behavioralFlaw !== "none") { + slave.behavioralFlaw = "none"; + } else if (slave.sexualFlaw !== "none") { + slave.sexualFlaw = "none"; + } + } else { + r.push(`and makes partial progress.`); + } + } else if (headGirlsTraining === "soften") { + effectiveness -= (slave.intelligence + slave.intelligenceImplant) / 3; + slave.training += effectiveness; + r.push(`${He} punishes ${slave.slaveName} whenever ${he} sees ${him2} breaking the rules yet does ${his} best to retain what makes the slave special,`); + if (slave.training > 150) { + slave.training = 0; + r.push(`and successfully <span class="green">softens ${slave.slaveName}'s flaw.</span>`); + if (slave.behavioralFlaw !== "none") { + SoftenBehavioralFlaw(slave); + } else if (slave.sexualFlaw !== "none") { + SoftenSexualFlaw(slave); + } + } else { + r.push(`and makes partial progress.`); + } + } else if (headGirlsTraining === "oral skill") { + slave.training = 0; + if (S.HeadGirl.fetish === "cumslut" && S.HeadGirl.fetishStrength > 60) { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to suck cocks, cunts, and assholes. ${His} enthusiasm for oral sex is infectious. ${slave.slaveName}'s <span class="green">oral skills have improved.</span>`); + slaveSkillIncrease('oral', slave, random(5, 10)); + } else if ((S.HeadGirl.dick > 0) && canPenetrate(S.HeadGirl)) { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to suck cocks, cunts, and assholes. Your Head Girl uses ${his} penis as an effective teaching tool. ${slave.slaveName}'s <span class="green">oral skills have improved.</span>`); + slaveSkillIncrease('oral', slave, random(5, 10)); + } else if ((S.HeadGirl.clit > 2)) { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to suck cocks, cunts, and assholes. Your Head Girl uses ${his} pseudophallus-sized clit as an effective teaching tool. ${slave.slaveName}'s <span class="green">oral skills have improved.</span>`); + slaveSkillIncrease('oral', slave, random(5, 10)); + } else { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to suck cocks, cunts, and assholes. ${slave.slaveName}'s <span class="green">oral skills have improved.</span>`); + } + slaveSkillIncrease('oral', slave, Math.ceil(effectiveness / 10)); + } else if (headGirlsTraining === "anal skill") { + slave.training = 0; + if (S.HeadGirl.fetish === "buttslut" && S.HeadGirl.fetishStrength > 60) { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to take it up the ass. Your Head Girl's enthusiasm for backdoor loving is infectious. ${slave.slaveName}'s <span class="green">anal skills have improved.</span>`); + slaveSkillIncrease('anal', slave, random(5, 10)); + } else if ((S.HeadGirl.dick > 0) && canPenetrate(S.HeadGirl)) { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to take a dick up the butt. Your Head Girl uses ${his} penis as an effective teaching tool. ${slave.slaveName}'s <span class="green">anal skills have improved.</span>`); + slaveSkillIncrease('anal', slave, random(5, 10)); + } else if ((S.HeadGirl.clit > 2)) { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to take a phallus up the butt. Your Head Girl uses ${his} pseudophallus-sized clit as an effective teaching tool. ${slave.slaveName}'s <span class="green">anal skills have improved.</span>`); + slaveSkillIncrease('anal', slave, random(5, 10)); + } else { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to take a dick up the butt. ${slave.slaveName}'s <span class="green">anal skills have improved.</span>`); + } + slaveSkillIncrease('anal', slave, Math.ceil(effectiveness / 10)); + } else if (headGirlsTraining === "fuck skill") { + slave.training = 0; + if (S.HeadGirl.energy > 95) { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to take a dick. Your Head Girl's enthusiasm for sex is infectious. ${slave.slaveName}'s <span class="green">vanilla sex skills have improved.</span>`); + slaveSkillIncrease('vaginal', slave, random(5, 10)); + } else if ((S.HeadGirl.dick > 0) && canPenetrate(S.HeadGirl)) { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to take a dick. Your Head Girl uses ${his} penis as an effective teaching tool. ${slave.slaveName}'s <span class="green">vanilla sex skills have improved.</span>`); + slaveSkillIncrease('vaginal', slave, random(5, 10)); + } else if ((S.HeadGirl.clit > 2)) { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to take a phallus. Your Head Girl uses ${his} pseudophallus-sized clit as an effective teaching tool. ${slave.slaveName}'s <span class="green">vanilla sex skills have improved.</span>`); + slaveSkillIncrease('vaginal', slave, random(5, 10)); + } else { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to take a dick. ${slave.slaveName}'s <span class="green">vanilla sex skills have improved.</span>`); + } + slaveSkillIncrease('vaginal', slave, Math.ceil(effectiveness / 10)); + } else if (headGirlsTraining === "whore skill") { + slave.training = 0; + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to prostitute ${himself2}. ${slave.slaveName}'s <span class="green">whoring skills have improved.</span>`); + slaveSkillIncrease('whoring', slave, Math.ceil(effectiveness / 10)); + } else if (headGirlsTraining === "entertain skill") { + slave.training = 0; + if (S.HeadGirl.fetish === "humiliation" && S.HeadGirl.fetishStrength > 60) { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to entertain. Your Head Girl's enthusiasm for public display is infectious. ${slave.slaveName}'s <span class="green">entertainment skills have improved.</span>`); + slaveSkillIncrease('entertainment', slave, random(5, 10)); + } else { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to entertain. ${slave.slaveName}'s <span class="green">entertainment skills have improved.</span>`); + } + slaveSkillIncrease('entertainment', slave, Math.ceil(effectiveness / 10)); + } + } + + if (slave.devotion >= -20) { + if (slave.attrKnown === 0) { + slave.attrKnown = 1; + r.push(`${S.HeadGirl.slaveName} also investigates the slave's basic sexual orientation, finding that ${he2} is`); + if (slave.attrXY <= 40) { + r.push(`<span class="red">disgusted by men</span>`); + } else if ((slave.attrXY <= 60)) { + r.push(`indifferent to men`); + } else if ((slave.attrXY <= 80)) { + r.push(`<span class="green">attracted to men</span>`); + } else { + r.push(`<span class="green">intensely attracted to men</span>`); + } + r.push(`and`); + if (slave.attrXX <= 40) { + r.push(`<span class="red">disgusted by women.</span>`); + } else if ((slave.attrXX <= 60)) { + r.push(`indifferent to women.`); + } else if ((slave.attrXX <= 80)) { + r.push(`<span class="green">attracted to women.</span>`); + } else { + r.push(`<span class="green">intensely attracted to women.</span>`); + } + } + } + + if (V.HGPiercings) { + if (slave.devotion >= -20 && slave.genes === "XY" && slave.attrXY <= 35 && V.arcologies[0].FSBodyPurist === "unset" && (V.arcologies[0].FSPaternalist === "unset" || SlaveStatsChecker.modScore(slave).total < 13)) { + piercingCheck(); + } + } + + App.Events.addNode(el, r, "div", "indent"); + return el; + + function piercingCheck() { + let piercingForbidden = 0; + if (slave.earPiercing === 0 && slave.earShape !== "none") { + if (V.arcologies[0].FSDegradationist !== "unset") { + slave.earPiercing = 2; + } else { + slave.earPiercing = 1; + } + RulesDeconfliction(slave); + if (slave.earPiercing !== V.slaveAfterRA.earPiercing) { + piercingForbidden = 1; + slave.earPiercing = 0; + } else { + if (V.arcologies[0].FSDegradationist !== "unset") { + r.push(`${S.HeadGirl.slaveName} knows that ${slave.slaveName} needs to adjust to life as a slave${girl2}, so ${he} has the slave's ears pierced. This will be a constant reminder that ${he2} is simply a sexual object here.`); + } else { + r.push(`${S.HeadGirl.slaveName} knows that ${slave.slaveName} needs help adjusting to life as a slave${girl2}, so ${he} has the slave's ears pierced. A little feminine touch can make a big difference.`); + } + cashX(forceNeg(V.modCost), "slaveMod", slave); + return; + } + } + if (slave.nosePiercing === 0) { + if (V.arcologies[0].FSDegradationist !== "unset") { + slave.nosePiercing = 2; + } else { + slave.nosePiercing = 1; + } + RulesDeconfliction(slave); + if (slave.nosePiercing !== V.slaveAfterRA.nosePiercing) { + piercingForbidden = 1; + slave.nosePiercing = 0; + } else { + if (V.arcologies[0].FSDegradationist !== "unset") { + r.push(`${S.HeadGirl.slaveName} knows that ${slave.slaveName} needs to adjust to life as a slave${girl2}, so ${he} gives the slave nasal studs and a large septum ring. It should push ${slave.slaveName} to see ${himself2} as a sexual object for others to use.`); + } else { + r.push(`${S.HeadGirl.slaveName} knows that ${slave.slaveName} needs help adjusting to life as a slave${girl2}, so ${he} gives the slave a cute little nose piercing. It should help ${slave.slaveName} see ${himself2} as a bit more feminine.`); + } + cashX(forceNeg(V.modCost), "slaveMod", slave); + return; + } + } + if (slave.eyebrowPiercing === 0) { + if (V.arcologies[0].FSDegradationist !== "unset") { + slave.eyebrowPiercing = 2; + } else { + slave.eyebrowPiercing = 1; + } + RulesDeconfliction(slave); + if (slave.eyebrowPiercing !== V.slaveAfterRA.eyebrowPiercing) { + piercingForbidden = 1; + slave.eyebrowPiercing = 0; + } else { + if (V.arcologies[0].FSDegradationist !== "unset") { + r.push(`${S.HeadGirl.slaveName} knows that ${slave.slaveName} needs to adjust to life as a slave${girl2}, so ${he} gives the slave multiple eyebrow piercings. A slutty touch for a slave${girl2} should help ${him2} feel a little hungrier for cock.`); + } else { + r.push(`${S.HeadGirl.slaveName} knows that ${slave.slaveName} needs help adjusting to life as a slave${girl2}, so ${he} gives the slave a cute little eyebrow piercing. A slutty touch for a slave${girl2} should help ${him2} feel a little hungrier for cock.`); + } + cashX(forceNeg(V.modCost), "slaveMod", slave); + return; + } + } + if (slave.lipsPiercing === 0) { + if (V.arcologies[0].FSDegradationist !== "unset") { + slave.lipsPiercing = 2; + } else { + slave.lipsPiercing = 1; + } + RulesDeconfliction(slave); + if (slave.lipsPiercing !== V.slaveAfterRA.lipsPiercing) { + piercingForbidden = 1; + slave.lipsPiercing = 0; + } else { + if (V.arcologies[0].FSDegradationist !== "unset") { + r.push(`${S.HeadGirl.slaveName} knows that ${slave.slaveName} needs to adjust to life as a slave${girl2}, so ${he} has the slave's lower lip pierced. ${his2} mouth is for pleasing penises now, so it'll help ${him2} if it looks like it.`); + } else { + r.push(`${S.HeadGirl.slaveName} knows that ${slave.slaveName} needs help adjusting to life as a slave${girl2}, so ${he} has the slave's lower lip pierced. ${his2} mouth is for pleasing penises now, so it'll help ${him2} if it looks like it.`); + } + cashX(forceNeg(V.modCost), "slaveMod", slave); + return; + } + } + if (slave.navelPiercing === 0) { + if (V.arcologies[0].FSDegradationist !== "unset") { + slave.navelPiercing = 2; + } else { + slave.navelPiercing = 1; + } + RulesDeconfliction(slave); + if (slave.navelPiercing !== V.slaveAfterRA.navelPiercing) { + piercingForbidden = 1; + slave.navelPiercing = 0; + } else { + if (V.arcologies[0].FSDegradationist !== "unset") { + r.push(`${S.HeadGirl.slaveName} knows that ${slave.slaveName} needs help adjusting to life as a slave${girl2}, so ${he} has the slave's navel pierced with a big ring. Whatever ${he2} thinks in ${his2} mind, S.HeadGirl.slaveName makes clear to ${him2} that ${his2} body belongs to you.`); + } else { + r.push(`${S.HeadGirl.slaveName} knows that ${slave.slaveName} needs help adjusting to life as a slave${girl2}, so ${he} has the slave's navel pierced. The prettier ${his2} lower half looks, the less reluctant ${he2} should feel to take it up the butt.`); + } + cashX(forceNeg(V.modCost), "slaveMod", slave); + return; + } + } + if (piercingForbidden) { + if (V.arcologies[0].FSDegradationist !== "unset") { + r.push(`${S.HeadGirl.slaveName} thinks some piercings might push ${slave.slaveName} to adjust to life as a slave${girl2}, but ${he} also knows you have rules applied to this slave that forbid it.`); + } else { + r.push(`${S.HeadGirl.slaveName} thinks some cute piercings might help ${slave.slaveName} adjust to life as a slave${girl2}, but ${he} also knows you have rules applied to this slave that forbid it.`); + } + } + } + } + + function slavesToTrain() { + if (S.HeadGirl) { + /** @type {FC.HeadGirlTrainee[][]} */ + const HGPossibleSlaves = [[], [], [], [], [], []]; + for (const slave of V.slaves) { + if (!assignmentVisible(slave) || slave.fuckdoll === 1 || slave.ID === V.BodyguardID || slave.ID === V.HeadGirlID || slave.fetish === "mindbroken") { + continue; + } else if (Array.isArray(V.personalAttention) && V.personalAttention.some(p => p.ID === slave.ID)) { + continue; + } + + if (V.headGirlTrainsHealth && slave.health.condition < -20) { + HGPossibleSlaves[0].push({ID: slave.ID, training: "health"}); + continue; + } + + if (slave.health.tired < 50) { + const hasParaphilia = (App.Data.misc.paraphiliaList.includes(slave.sexualFlaw)); + if (V.headGirlTrainsParaphilias && hasParaphilia) { + HGPossibleSlaves[1].push({ID: slave.ID, training: "paraphilia"}); + continue; + } + + if (V.headGirlTrainsFlaws || V.headGirlSoftensFlaws) { + if (slave.behavioralFlaw !== "none" || (slave.sexualFlaw !== "none" && !hasParaphilia)) { + if (V.headGirlSoftensFlaws) { + if (slave.devotion > 20) { + if ((slave.behavioralFlaw !== "none" && slave.behavioralQuirk === "none") || (slave.sexualFlaw !== "none" && slave.sexualQuirk === "none" && !hasParaphilia)) { + HGPossibleSlaves[3].push({ID: slave.ID, training: "soften"}); + } else { + HGPossibleSlaves[3].push({ID: slave.ID, training: "flaw"}); + } + continue; + } + } else if (V.headGirlTrainsFlaws) { + HGPossibleSlaves[2].push({ID: slave.ID, training: "flaw"}); + continue; + } + } + } + + if (V.headGirlTrainsObedience && slave.devotion <= 20 && slave.trust >= -20) { + HGPossibleSlaves[4].push({ID: slave.ID, training: "obedience"}); + continue; + } + + if (V.headGirlTrainsSkills) { + if (slave.skill.oral < S.HeadGirl.skill.oral) { + HGPossibleSlaves[5].push({ID: slave.ID, training: "oral skill"}); + } else if ((slave.skill.vaginal < S.HeadGirl.skill.vaginal) && (slave.vagina > 0) && (canDoVaginal(slave))) { + HGPossibleSlaves[5].push({ID: slave.ID, training: "fuck skill"}); + } else if ((slave.skill.anal < S.HeadGirl.skill.anal) && (slave.anus > 0) && (canDoAnal(slave))) { + HGPossibleSlaves[5].push({ID: slave.ID, training: "anal skill"}); + } else if (slave.skill.whoring < S.HeadGirl.skill.whoring) { + HGPossibleSlaves[5].push({ID: slave.ID, training: "whore skill"}); + } else if ((slave.skill.entertainment < S.HeadGirl.skill.entertainment) && !isAmputee(slave)) { + HGPossibleSlaves[5].push({ID: slave.ID, training: "entertain skill"}); + } + } + } + } + return HGPossibleSlaves.flatten().slice(0, App.EndWeek.saVars.HGEnergy); + } else { + return []; + } + } +}; diff --git a/src/endWeek/reports/personalAttention.js b/src/endWeek/reports/personalAttention.js index a6c7598774368d342005cb7bb2d028b1f20ff7b0..384c10e3778c0f1246a9bb137fc3e38f300d8c8d 100644 --- a/src/endWeek/reports/personalAttention.js +++ b/src/endWeek/reports/personalAttention.js @@ -88,7 +88,7 @@ globalThis.personalAttention = (function() { /** * @param {App.Entity.SlaveState} slave - * @returns {Node} + * @returns {HTMLElement} */ function personalAttention(slave) { const el = document.createElement("p"); diff --git a/src/endWeek/reportsTW/penthouseReport.tw b/src/endWeek/reportsTW/penthouseReport.tw new file mode 100644 index 0000000000000000000000000000000000000000..76857d1b84df48b6af0145a9a63d34104bf78731 --- /dev/null +++ b/src/endWeek/reportsTW/penthouseReport.tw @@ -0,0 +1,3 @@ +:: Penthouse Report [nobr] + +<<includeDOM App.EndWeek.penthouseReport()>> diff --git a/src/endWeek/slaveAssignmentReport.js b/src/endWeek/slaveAssignmentReport.js index 6e2c5ba860109411a735b2d8b68d9feb4e9a7e2f..ae7220bd60721c1f53d29463e153c8e261b7436c 100644 --- a/src/endWeek/slaveAssignmentReport.js +++ b/src/endWeek/slaveAssignmentReport.js @@ -232,71 +232,6 @@ App.EndWeek.slaveAssignmentReport = function() { } } - if (S.HeadGirl) { - /** @type {FC.HeadGirlTrainee[][]} */ - const HGPossibleSlaves = [[], [], [], [], [], []]; - for (const slave of V.slaves) { - if (!assignmentVisible(slave) || slave.fuckdoll === 1 || slave.ID === V.BodyguardID || slave.ID === V.HeadGirlID || slave.fetish === "mindbroken") { - continue; - } else if (Array.isArray(V.personalAttention) && V.personalAttention.some(p => p.ID === slave.ID)) { - continue; - } - - if (V.headGirlTrainsHealth && slave.health.condition < -20) { - HGPossibleSlaves[0].push({ID: slave.ID, training: "health"}); - continue; - } - - if (slave.health.tired < 50) { - const hasParaphilia = (["abusive", "anal addict", "attention whore", "breast growth", "breeder", "cum addict", "malicious", "neglectful", "self hating"].includes(slave.sexualFlaw)); - if (V.headGirlTrainsParaphilias && hasParaphilia) { - HGPossibleSlaves[1].push({ID: slave.ID, training: "paraphilia"}); - continue; - } - - if (V.headGirlTrainsFlaws || V.headGirlSoftensFlaws) { - if (slave.behavioralFlaw !== "none" || (slave.sexualFlaw !== "none" && !hasParaphilia)) { - if (V.headGirlSoftensFlaws) { - if (slave.devotion > 20) { - if ((slave.behavioralFlaw !== "none" && slave.behavioralQuirk === "none") || (slave.sexualFlaw !== "none" && slave.sexualQuirk === "none" && !hasParaphilia)) { - HGPossibleSlaves[3].push({ID: slave.ID, training: "soften"}); - } else { - HGPossibleSlaves[3].push({ID: slave.ID, training: "flaw"}); - } - continue; - } - } else if (V.headGirlTrainsFlaws) { - HGPossibleSlaves[2].push({ID: slave.ID, training: "flaw"}); - continue; - } - } - } - - if (V.headGirlTrainsObedience && slave.devotion <= 20 && slave.trust >= -20) { - HGPossibleSlaves[4].push({ID: slave.ID, training: "obedience"}); - continue; - } - - if (V.headGirlTrainsSkills) { - if (slave.skill.oral < S.HeadGirl.skill.oral) { - HGPossibleSlaves[5].push({ID: slave.ID, training: "oral skill"}); - } else if ((slave.skill.vaginal < S.HeadGirl.skill.vaginal) && (slave.vagina > 0) && (canDoVaginal(slave))) { - HGPossibleSlaves[5].push({ID: slave.ID, training: "fuck skill"}); - } else if ((slave.skill.anal < S.HeadGirl.skill.anal) && (slave.anus > 0) && (canDoAnal(slave))) { - HGPossibleSlaves[5].push({ID: slave.ID, training: "anal skill"}); - } else if (slave.skill.whoring < S.HeadGirl.skill.whoring) { - HGPossibleSlaves[5].push({ID: slave.ID, training: "whore skill"}); - } else if ((slave.skill.entertainment < S.HeadGirl.skill.entertainment) && !isAmputee(slave)) { - HGPossibleSlaves[5].push({ID: slave.ID, training: "entertain skill"}); - } - } - } - } - V.HGTrainSlavesIDs = HGPossibleSlaves.flatten().slice(0, App.EndWeek.saVars.HGEnergy); - } else { - V.HGTrainSlavesIDs = []; - } - /** * Accordion * @version 0.7RC diff --git a/src/uncategorized/fullReport.tw b/src/uncategorized/fullReport.tw deleted file mode 100644 index 95d64be55e6178b8149b4e3c8b328f271593c277..0000000000000000000000000000000000000000 --- a/src/uncategorized/fullReport.tw +++ /dev/null @@ -1,94 +0,0 @@ -:: Full Report [nobr] - -/* 000-250-006 */ -<<if $seeImages && $seeReportImages>> - <div class="imageRef medImg"> - <<= SlaveArt($slaves[$i], 2, 0)>> - </div> -<</if>> -/* 000-250-006 */ - -<<setLocalPronouns $slaves[$i]>> - -<<switch $slaves[$i].assignment>> -<<case "rest">> - <<= App.SlaveAssignment.rest($slaves[$i])>> -<<case "whore">> - <<= App.SlaveAssignment.whore($slaves[$i])>> -<<case "serve the public">> - <<= App.SlaveAssignment.serveThePublic($slaves[$i])>> -<<case "work a glory hole">> - <<= App.SlaveAssignment.workAGloryHole($slaves[$i])>> -<<case "get milked">> - <<set _milkResults = App.SlaveAssignment.getMilked($slaves[$i])>> - <<= _milkResults.text>> -<<case "take classes">> - <<= App.SlaveAssignment.takeClasses($slaves[$i])>> -<<case "please you">> - <<= App.SlaveAssignment.pleaseYou($slaves[$i])>> -<<case "be a subordinate slave">> - <<= App.SlaveAssignment.serveYourOtherSlaves($slaves[$i])>> -<<case "be a servant">> - <<= App.SlaveAssignment.servant($slaves[$i])>> -<<case "stay confined">> - <<= App.SlaveAssignment.stayConfined($slaves[$i])>> -<<case "guard you">> - <<= App.SlaveAssignment.guardYou($slaves[$i])>> -<<case "be your Head Girl">> - <<= App.SlaveAssignment.beYourHeadGirl($slaves[$i])>> -<<case "recruit girls">> - <<= App.SlaveAssignment.recruitGirls($slaves[$i])>> -<<default>> - <<= removeJob($slaves[$i], $slaves[$i].assignment)>> - <<= App.SlaveAssignment.rest($slaves[$i])>> -<</switch>> - -<<if $servantMilkers == 1 && $slaves[$i].lactation > 0 && $slaves[$i].assignment != "get milked">> - $His assignment - <<if setup.servantMilkersJobs.includes($slaves[$i].assignment)>> - is not strenuous, so $he <<if $slaves[$i].devotion > 20>><<if $slaves[$i].fetish == "boobs">>eagerly <</if>>uses<<elseif $slaves[$i].devotion >= -20>>is required to use<<else>>is forced to use<</if>> the penthouse milkers frequently, - <<set _milkResult = App.SlaveAssignment.getMilked($slaves[$i], 0.5)>> - <<else>> - keeps $him busy, but $he <<if $slaves[$i].devotion > 20>><<if $slaves[$i].fetish == "boobs">>eagerly <</if>>uses<<elseif $slaves[$i].devotion >= -20>>is required to use<<else>>is forced to use<</if>> the penthouse milkers whenever $he can, - <<set _milkResult = App.SlaveAssignment.getMilked($slaves[$i], 0.25)>> - <</if>> - and $he gives <<= _milkResult.milk>> liters of milk over the week, which is sold for @@.yellowgreen;<<print cashFormat(_milkResult.milkSale)>>.@@ -<</if>> - -<br> -<<if $slaves[$i].minorInjury != 0>> - $His $slaves[$i].minorInjury will heal by the end of the week. -<</if>> - -<<if $showEWD == 0>> - <<includeDOM App.SlaveAssignment.rules($slaves[$i])>> - <<run App.SlaveAssignment.choosesOwnClothes($slaves[$i])>> - <<run App.SlaveAssignment.diet($slaves[$i])>> - <<run App.SlaveAssignment.longTermEffects($slaves[$i])>> - <<run App.SlaveAssignment.drugs($slaves[$i])>> - <<run App.SlaveAssignment.relationships($slaves[$i])>> - <<run App.SlaveAssignment.rivalries($slaves[$i])>> -<<else>> - <<includeDOM App.SlaveAssignment.rules($slaves[$i])>> - <<= App.SlaveAssignment.choosesOwnClothes($slaves[$i])>> - <<= App.SlaveAssignment.diet($slaves[$i])>> - <<includeDOM App.SlaveAssignment.longTermEffects($slaves[$i])>> - <<= App.SlaveAssignment.drugs($slaves[$i])>> - <<= App.SlaveAssignment.relationships($slaves[$i])>> - <<= App.SlaveAssignment.rivalries($slaves[$i])>> - <br> -<</if>> - -<<if $PC.health.shortDamage < 30 && Array.isArray($personalAttention) && $personalAttention.findIndex(function(s) { return s.ID == $slaves[$i].ID; }) != -1>> - <<includeDOM personalAttention($slaves[$i])>> -<</if>> - -<<for _hgtsidx = 0; _hgtsidx < $HGTrainSlavesIDs.length; _hgtsidx++>> - <<if $slaves[$i].ID == $HGTrainSlavesIDs[_hgtsidx].ID>> - <<set $activeSlave = $slaves[$i], $HGtraining = $HGTrainSlavesIDs[_hgtsidx].training>> - <<include "HG Application">> - <br> - <</if>> -<</for>> - - <<= App.SlaveAssignment.devotion($slaves[$i])>> diff --git a/src/uncategorized/hgApplication.tw b/src/uncategorized/hgApplication.tw deleted file mode 100644 index c5b39589583edfcd96b9386303845d1742b8b0b8..0000000000000000000000000000000000000000 --- a/src/uncategorized/hgApplication.tw +++ /dev/null @@ -1,441 +0,0 @@ -:: HG Application [nobr] - -<<setLocalPronouns _S.HeadGirl>> -<<setLocalPronouns $activeSlave 2>> - -<<if ndef $HGSeverity>> - <<set $HGSeverity = 0>> -<</if>> - -<<set $activeSlave.training = Math.clamp($activeSlave.training, 0, 150)>> -<<set _effectiveness = _S.HeadGirl.actualAge+((_S.HeadGirl.intelligence+_S.HeadGirl.intelligenceImplant)/3)-(_S.HeadGirl.accent*5)+($HGSeverity*10)+(($activeSlave.intelligence+$activeSlave.intelligenceImplant)/4)-($activeSlave.accent*5)>> -<<if $AgePenalty == 0>> - <<set _effectiveness += Math.max(0,(30-_S.HeadGirl.actualAge))>> -<</if>> -<<if _S.HeadGirl.sexualFlaw == "abusive" && $HGSeverity >= 0>> - <<set _effectiveness += 10>> -<</if>> -<<if $HGtraining != "health">> - <<set $activeSlave.health.tired += 25>> -<</if>> - - <span style="font-weight: bold">Your Head Girl</span> <span class='slave-name'>_S.HeadGirl.slaveName</span> notices that <span class='slave-name'>$activeSlave.slaveName</span> -<<switch $HGtraining>> -<<case "health">> - is unwell. -<<case "obedience">> - is disobedient. -<<case "paraphilia">> - has a paraphilia. -<<case "flaw">> - has an unpleasant flaw worth fixing. -<<case "soften">> - has an unpleasant flaw that $he can try to soften into a unique quirk. -<<case "oral skill">> - isn't as orally skilled as $he is. -<<case "anal skill">> - isn't as skilled at taking anal as $he is. -<<case "fuck skill">> - isn't as skilled at vaginal intercourse as $he is. -<<case "whore skill">> - isn't as skilled at the fine art of sex for money as $he is. -<<case "entertain skill">> - isn't as skilled at entertainment as $he is. -<</switch>> - -<<if $HGtraining == "health">> - -$He helps $activeSlave.slaveName however $he can. The tender care has @@.green;improved $activeSlave.slaveName's health.@@ -<<run improveCondition($activeSlave, 10)>> -<<set $activeSlave.health.tired = Math.clamp($activeSlave.health.tired-10, 0, 1000)>> -<<set $activeSlave.training = 0>> - -<<else>> - -<<if _S.HeadGirl.career == "an arcology owner">> - $He was once an arcology owner $himself, making $him truly peerless as a Head Girl. - <<set _effectiveness += 50>> -<<elseif setup.HGCareers.includes(_S.HeadGirl.career)>> - $He was used to giving commands and being obeyed in $his life before $he was a slave, experience $he can call on now. - <<set _effectiveness += 5>> -<<elseif _S.HeadGirl.skill.headGirl >= $masteredXP>> - $He is used to giving commands and being obeyed through experience, rendering $him more effective. - <<set _effectiveness += 5>> -<</if>> - -<<if _S.HeadGirl.actualAge > 30>> - $His age and experience help $him as $he works with $activeSlave.slaveName. -<<elseif _S.HeadGirl.actualAge < 25 && $AgePenalty > 0>> - $His youth and inexperience impede $him as $he works with $activeSlave.slaveName. -<</if>> - -<<if _S.HeadGirl.accent >= 3>> - $He does $his best to give orders in $language, but has to resort to a lot of unseemly gesticulation and shouting, making $him much less effective. -<<elseif _S.HeadGirl.accent == 2>> - $His heavy <<print aNational(_S.HeadGirl.nationality)>> accent impedes $his clarity in $language, making $him somewhat less effective. -<</if>> - -<<if ($HGtraining == "obedience") || ($HGtraining == "flaw") || ($HGtraining == "soften")>> - <<if _S.HeadGirl.intelligence+_S.HeadGirl.intelligenceImplant > 50>> - <<if $activeSlave.intelligence+$activeSlave.intelligenceImplant > 50>> - $He needs $his wits about $him to mold $activeSlave.slaveName, who's quite intelligent _himself2. - <<elseif $activeSlave.intelligence+$activeSlave.intelligenceImplant >= -50>> - $His intelligence helps $him mold $activeSlave.slaveName. - <<else>> - Molding $activeSlave.slaveName is very easy, especially for a smart Head Girl like $him. - <</if>> - <</if>> -<<else>> - <<if _S.HeadGirl.intelligence+_S.HeadGirl.intelligenceImplant > 50>> - <<if $activeSlave.intelligence+$activeSlave.intelligenceImplant > 50>> - Both slaves are quite intelligent, making $his job much easier. - <<elseif $activeSlave.intelligence+$activeSlave.intelligenceImplant >= -50>> - $He's quite intelligent and can teach $activeSlave.slaveName well. - <<else>> - $He needs all $his considerable intelligence to get through to the idiot $he has to teach. - <</if>> - <</if>> -<</if>> - -<<if $HGSeverity > 0>> - Your directives encourage $him to rape any slave that fails in the slightest way, a task $he approaches - <<if _S.HeadGirl.sexualFlaw == "abusive">> - eagerly, since $he prefers to take $his pleasure without consent. - <<elseif _S.HeadGirl.fetish == "sadist">> - with sadistic enthusiasm. - <<elseif _S.HeadGirl.fetish == "dom">> - with confidence. - <<elseif _S.HeadGirl.energy > 95>> - as a convenient way to - <<if (_S.HeadGirl.balls > 0)>> - drain $his perpetually overfilled balls into a series of spasming holes. - <<else>> - sate $his excess sexual appetite. - <</if>> - <<else>> - dutifully. - <</if>> - <<if $activeSlave.vagina == 0>> - In $activeSlave.slaveName's case, $he's careful to limit _his2 sexual abuse to things that won't take the _girl2's virginity. The slave - <<elseif $activeSlave.anus == 0>> - $He's careful to molest $activeSlave.slaveName in ways that don't involve penetrating _his2 virgin ass. The slave - <<else>> - $activeSlave.slaveName - <</if>> - <<if $activeSlave.devotion > 50>> - accepts the abuse, believing _he2 deserves to be raped. - <<elseif $activeSlave.devotion >= -20>> - is @@.gold;frightened@@ by the unceasing abuse. - <<set $activeSlave.trust -= 1>> - <<else>> - @@.mediumorchid;hates@@ and @@.gold;fears@@ the constant abuse. - <<set $activeSlave.trust -= 1>> - <<set $activeSlave.devotion -= 1>> - <</if>> - _S.HeadGirl.slaveName makes sure $his victim hates it, every time, and $activeSlave.slaveName can't help but do _his2 very best to avoid this treatment. -<<elseif $HGSeverity == 0>> - You allow $him to use $his own judgment when punishing failures, - <<if _S.HeadGirl.sexualFlaw == "abusive">> - and $he usually decides in favor of forcing misbehaving slaves to get $him off. - <<elseif _S.HeadGirl.fetish == "sadist">> - permission the sadist uses for $his own gratification. - <<elseif _S.HeadGirl.fetish == "dom">> - which the dominant $girl uses confidently. - <<elseif _S.HeadGirl.energy > 95>> - which $he uses to - <<if (_S.HeadGirl.balls > 0)>> - force $his subordinates to keep $his balls drained. - <<else>> - extract the constant sexual favors $his libido demands. - <</if>> - <<else>> - and $he does $his best to be fair. - <</if>> - $activeSlave.slaveName - <<if $activeSlave.devotion > 50>> - is @@.mediumaquamarine;grateful@@ that _he2 is punished justly when _he2 makes mistakes. - <<set $activeSlave.trust += 1>> - <<elseif $activeSlave.devotion >= -20>> - does _his2 best to learn quickly and avoid punishment. - <<else>> - is @@.gold;scared@@ by _his2 inability to get away with the smallest disobedience. - <<set $activeSlave.trust -= 1>> - <</if>> -<<else>> - You require $him to use respect when punishing; $he does $his best to motivate, but is unable to use real fear as a tool. $activeSlave.slaveName understands this, and @@.mediumaquamarine;trusts@@ that if _he2 fails, the consequences won't be too awful. - <<set $activeSlave.trust += 1>> -<</if>> - -<<if $HGtraining == "obedience">> - -<<set $activeSlave.training = 0>> -<<set _effectiveness -= ($activeSlave.intelligence+$activeSlave.intelligenceImplant)/3>> -<<if _effectiveness <= 0>> - $activeSlave.slaveName is smart enough to complicate things; _he2 manages to outwit $him this week and makes no progress. -<<else>> - <<set $activeSlave.devotion += Math.ceil(_effectiveness/4)>> - <<if $activeSlave.devotion < -50>> - $He helps watch and restrain the rebellious $activeSlave.slaveName, helping wear _him2 down, @@.gold;breaking $activeSlave.slaveName's rebelliousness.@@ - <<elseif $activeSlave.devotion < -20>> - $He keeps $activeSlave.slaveName constantly aware of _his2 slavery, @@.gold;breaking $activeSlave.slaveName's resistance.@@ - <<else>> - $He acts as another pair of eyes watching $activeSlave.slaveName and metes out punishments, @@.gold;improving $activeSlave.slaveName's servitude.@@ - <</if>> -<</if>> - -<<elseif $HGtraining == "paraphilia">> - -<<set _effectiveness -= ($activeSlave.intelligence+$activeSlave.intelligenceImplant)/3>> -<<set $activeSlave.training += _effectiveness>> -_S.HeadGirl.slaveName does $his best to get $activeSlave.slaveName past it with punishments and rewards, -<<if $activeSlave.training > 100>> - and @@.green;resolves $activeSlave.slaveName's paraphilia.@@ - <<set $activeSlave.training = 0>> - <<set $activeSlave.sexualFlaw = "none">> -<<else>> - and makes partial progress. -<</if>> - -<<elseif $HGtraining == "flaw">> - -<<set _effectiveness -= ($activeSlave.intelligence+$activeSlave.intelligenceImplant)/3>> -<<set $activeSlave.training += _effectiveness>> -_S.HeadGirl.slaveName punishes $activeSlave.slaveName whenever $he catches _him2 indulging in _his2 bad habits, -<<if $activeSlave.training > 100>> - and @@.green;fixes $activeSlave.slaveName's flaw.@@ - <<set $activeSlave.training = 0>> - <<if $activeSlave.behavioralFlaw != "none">> - <<set $activeSlave.behavioralFlaw = "none">> - <<elseif $activeSlave.sexualFlaw != "none">> - <<set $activeSlave.sexualFlaw = "none">> - <</if>> -<<else>> - and makes partial progress. -<</if>> - -<<elseif $HGtraining == "soften">> - -<<set _effectiveness -= ($activeSlave.intelligence+$activeSlave.intelligenceImplant)/3>> -<<set $activeSlave.training += _effectiveness>> -$He punishes $activeSlave.slaveName whenever $he sees _him2 breaking the rules yet does $his best to retain what makes the slave special, -<<if $activeSlave.training > 150>> - <<set $activeSlave.training = 0>> - and successfully @@.green;softens $activeSlave.slaveName's flaw.@@ - <<if $activeSlave.behavioralFlaw != "none">> - <<run SoftenBehavioralFlaw($activeSlave)>> - <<elseif $activeSlave.sexualFlaw != "none">> - <<run SoftenSexualFlaw($activeSlave)>> - <</if>> -<<else>> - and makes partial progress. -<</if>> - -<<elseif $HGtraining == "oral skill">> - -<<set $activeSlave.training = 0>> -<<if (_S.HeadGirl.fetish == "cumslut") && (_S.HeadGirl.fetishStrength > 60)>> - In spare moments $he teaches $activeSlave.slaveName how to suck cocks, cunts, and assholes. $His enthusiasm for oral sex is infectious. $activeSlave.slaveName's @@.green;oral skills have improved.@@ - <<= slaveSkillIncrease('oral', $activeSlave, random(5,10))>> -<<elseif (_S.HeadGirl.dick > 0) && canPenetrate(_S.HeadGirl)>> - In spare moments $he teaches $activeSlave.slaveName how to suck cocks, cunts, and assholes. Your Head Girl uses $his penis as an effective teaching tool. $activeSlave.slaveName's @@.green;oral skills have improved.@@ - <<= slaveSkillIncrease('oral', $activeSlave, random(5,10))>> -<<elseif (_S.HeadGirl.clit > 2)>> - In spare moments $he teaches $activeSlave.slaveName how to suck cocks, cunts, and assholes. Your Head Girl uses $his pseudophallus-sized clit as an effective teaching tool. $activeSlave.slaveName's @@.green;oral skills have improved.@@ - <<= slaveSkillIncrease('oral', $activeSlave, random(5,10))>> -<<else>> - In spare moments $he teaches $activeSlave.slaveName how to suck cocks, cunts, and assholes. $activeSlave.slaveName's @@.green;oral skills have improved.@@ -<</if>> -<<= slaveSkillIncrease('oral', $activeSlave, Math.ceil(_effectiveness/10))>> - -<<elseif $HGtraining == "anal skill">> - -<<set $activeSlave.training = 0>> -<<if (_S.HeadGirl.fetish == "buttslut") && (_S.HeadGirl.fetishStrength > 60)>> - In spare moments $he teaches $activeSlave.slaveName how to take it up the ass. Your Head Girl's enthusiasm for backdoor loving is infectious. $activeSlave.slaveName's @@.green;anal skills have improved.@@ - <<= slaveSkillIncrease('anal', $activeSlave, random(5,10))>> -<<elseif (_S.HeadGirl.dick > 0) && canPenetrate(_S.HeadGirl)>> - In spare moments $he teaches $activeSlave.slaveName how to take a dick up the butt. Your Head Girl uses $his penis as an effective teaching tool. $activeSlave.slaveName's @@.green;anal skills have improved.@@ - <<= slaveSkillIncrease('anal', $activeSlave, random(5,10))>> -<<elseif (_S.HeadGirl.clit > 2)>> - In spare moments $he teaches $activeSlave.slaveName how to take a phallus up the butt. Your Head Girl uses $his pseudophallus-sized clit as an effective teaching tool. $activeSlave.slaveName's @@.green;anal skills have improved.@@ - <<= slaveSkillIncrease('anal', $activeSlave, random(5,10))>> -<<else>> - In spare moments $he teaches $activeSlave.slaveName how to take a dick up the butt. $activeSlave.slaveName's @@.green;anal skills have improved.@@ -<</if>> -<<= slaveSkillIncrease('anal', $activeSlave, Math.ceil(_effectiveness/10))>> - -<<elseif $HGtraining == "fuck skill">> - -<<set $activeSlave.training = 0>> -<<if (_S.HeadGirl.energy > 95)>> - In spare moments $he teaches $activeSlave.slaveName how to take a dick. Your Head Girl's enthusiasm for sex is infectious. $activeSlave.slaveName's @@.green;vanilla sex skills have improved.@@ - <<= slaveSkillIncrease('vaginal', $activeSlave, random(5,10))>> -<<elseif (_S.HeadGirl.dick > 0) && canPenetrate(_S.HeadGirl)>> - In spare moments $he teaches $activeSlave.slaveName how to take a dick. Your Head Girl uses $his penis as an effective teaching tool. $activeSlave.slaveName's @@.green;vanilla sex skills have improved.@@ - <<= slaveSkillIncrease('vaginal', $activeSlave, random(5,10))>> -<<elseif (_S.HeadGirl.clit > 2)>> - In spare moments $he teaches $activeSlave.slaveName how to take a phallus. Your Head Girl uses $his pseudophallus-sized clit as an effective teaching tool. $activeSlave.slaveName's @@.green;vanilla sex skills have improved.@@ - <<= slaveSkillIncrease('vaginal', $activeSlave, random(5,10))>> -<<else>> - In spare moments $he teaches $activeSlave.slaveName how to take a dick. $activeSlave.slaveName's @@.green;vanilla sex skills have improved.@@ -<</if>> -<<= slaveSkillIncrease('vaginal', $activeSlave, Math.ceil(_effectiveness/10))>> - -<<elseif $HGtraining == "whore skill">> - -<<set $activeSlave.training = 0>> -In spare moments $he teaches $activeSlave.slaveName how to prostitute _himself2. $activeSlave.slaveName's @@.green;whoring skills have improved.@@ -<<= slaveSkillIncrease('whoring', $activeSlave, Math.ceil(_effectiveness/10))>> - -<<elseif $HGtraining == "entertain skill">> - -<<set $activeSlave.training = 0>> -<<if (_S.HeadGirl.fetish == "humiliation") && (_S.HeadGirl.fetishStrength > 60)>> - In spare moments $he teaches $activeSlave.slaveName how to entertain. Your Head Girl's enthusiasm for public display is infectious. $activeSlave.slaveName's @@.green;entertainment skills have improved.@@ - <<= slaveSkillIncrease('entertainment', $activeSlave, random(5,10))>> -<<else>> - In spare moments $he teaches $activeSlave.slaveName how to entertain. $activeSlave.slaveName's @@.green;entertainment skills have improved.@@ -<</if>> -<<= slaveSkillIncrease('entertainment', $activeSlave, Math.ceil(_effectiveness/10))>> - -<</if>> -<</if>> - -<<if ($activeSlave.devotion >= -20)>> -<<if ($activeSlave.attrKnown == 0)>> - <<set $activeSlave.attrKnown = 1>> - _S.HeadGirl.slaveName also investigates the slave's basic sexual orientation, finding that _he2 is - <<if ($activeSlave.attrXY <= 40)>> - @@.red;disgusted by men@@ - <<elseif ($activeSlave.attrXY <= 60)>> - indifferent to men - <<elseif ($activeSlave.attrXY <= 80)>> - @@.green;attracted to men@@ - <<else>> - @@.green;intensely attracted to men@@ - <</if>> - and - <<if ($activeSlave.attrXX <= 40)>> - @@.red;disgusted by women.@@ - <<elseif ($activeSlave.attrXX <= 60)>> - indifferent to women. - <<elseif ($activeSlave.attrXX <= 80)>> - @@.green;attracted to women.@@ - <<else>> - @@.green;intensely attracted to women.@@ - <</if>> -<</if>> -<</if>> - -<<if $HGPiercings>> - <<if $activeSlave.devotion >= -20 && $activeSlave.genes == "XY" && $activeSlave.attrXY <= 35 && $arcologies[0].FSBodyPurist == "unset" && ($arcologies[0].FSPaternalist == "unset" || ($arcologies[0].FSPaternalist != "unset" && SlaveStatsChecker.modScore($activeSlave).total < 13))>> - <<set _piercingForbidden = 0>> - <<for _i = 0; _i < 1; _i++>> - <<if $activeSlave.earPiercing == 0 && $activeSlave.earShape !== "none">> - <<if $arcologies[0].FSDegradationist != "unset">> - <<set $activeSlave.earPiercing = 2>> - <<else>> - <<set $activeSlave.earPiercing = 1>> - <</if>> - <<run RulesDeconfliction($activeSlave)>> - <<if $activeSlave.earPiercing != $slaveAfterRA.earPiercing>> - <<set _piercingForbidden = 1, $activeSlave.earPiercing = 0>> - <<else>> - <<if $arcologies[0].FSDegradationist != "unset">> - _S.HeadGirl.slaveName knows that $activeSlave.slaveName needs to adjust to life as a slave _girl2, so $he has the slave's ears pierced. This will be a constant reminder that _he2 is simply a sexual object here. - <<else>> - _S.HeadGirl.slaveName knows that $activeSlave.slaveName needs help adjusting to life as a slave _girl2, so $he has the slave's ears pierced. A little feminine touch can make a big difference. - <</if>> - <<run cashX(forceNeg($modCost), "slaveMod", $activeSlave)>> - <<break>> - <</if>> - <</if>> - <<if $activeSlave.nosePiercing == 0>> - <<if $arcologies[0].FSDegradationist != "unset">> - <<set $activeSlave.nosePiercing = 2>> - <<else>> - <<set $activeSlave.nosePiercing = 1>> - <</if>> - <<run RulesDeconfliction($activeSlave)>> - <<if $activeSlave.nosePiercing != $slaveAfterRA.nosePiercing>> - <<set _piercingForbidden = 1, $activeSlave.nosePiercing = 0>> - <<else>> - <<if $arcologies[0].FSDegradationist != "unset">> - _S.HeadGirl.slaveName knows that $activeSlave.slaveName needs to adjust to life as a slave _girl2, so $he gives the slave nasal studs and a large septum ring. It should push $activeSlave.slaveName to see _himself2 as a sexual object for others to use. - <<else>> - _S.HeadGirl.slaveName knows that $activeSlave.slaveName needs help adjusting to life as a slave _girl2, so $he gives the slave a cute little nose piercing. It should help $activeSlave.slaveName see _himself2 as a bit more feminine. - <</if>> - <<run cashX(forceNeg($modCost), "slaveMod", $activeSlave)>> - <<break>> - <</if>> - <</if>> - <<if $activeSlave.eyebrowPiercing == 0>> - <<if $arcologies[0].FSDegradationist != "unset">> - <<set $activeSlave.eyebrowPiercing = 2>> - <<else>> - <<set $activeSlave.eyebrowPiercing = 1>> - <</if>> - <<run RulesDeconfliction($activeSlave)>> - <<if $activeSlave.eyebrowPiercing != $slaveAfterRA.eyebrowPiercing>> - <<set _piercingForbidden = 1, $activeSlave.eyebrowPiercing = 0>> - <<else>> - <<if $arcologies[0].FSDegradationist != "unset">> - _S.HeadGirl.slaveName knows that $activeSlave.slaveName needs to adjust to life as a slave _girl2, so $he gives the slave multiple eyebrow piercings. A slutty touch for a slave _girl2 should help _him2 feel a little hungrier for cock. - <<else>> - _S.HeadGirl.slaveName knows that $activeSlave.slaveName needs help adjusting to life as a slave _girl2, so $he gives the slave a cute little eyebrow piercing. A slutty touch for a slave _girl2 should help _him2 feel a little hungrier for cock. - <</if>> - <<run cashX(forceNeg($modCost), "slaveMod", $activeSlave)>> - <<break>> - <</if>> - <</if>> - <<if $activeSlave.lipsPiercing == 0>> - <<if $arcologies[0].FSDegradationist != "unset">> - <<set $activeSlave.lipsPiercing = 2>> - <<else>> - <<set $activeSlave.lipsPiercing = 1>> - <</if>> - <<run RulesDeconfliction($activeSlave)>> - <<if $activeSlave.lipsPiercing != $slaveAfterRA.lipsPiercing>> - <<set _piercingForbidden = 1, $activeSlave.lipsPiercing = 0>> - <<else>> - <<if $arcologies[0].FSDegradationist != "unset">> - _S.HeadGirl.slaveName knows that $activeSlave.slaveName needs to adjust to life as a slave _girl2, so $he has the slave's lower lip pierced. _His2 mouth is for pleasing penises now, so it'll help _him2 if it looks like it. - <<else>> - _S.HeadGirl.slaveName knows that $activeSlave.slaveName needs help adjusting to life as a slave _girl2, so $he has the slave's lower lip pierced. _His2 mouth is for pleasing penises now, so it'll help _him2 if it looks like it. - <</if>> - <<run cashX(forceNeg($modCost), "slaveMod", $activeSlave)>> - <<break>> - <</if>> - <</if>> - <<if $activeSlave.navelPiercing == 0>> - <<if $arcologies[0].FSDegradationist != "unset">> - <<set $activeSlave.navelPiercing = 2>> - <<else>> - <<set $activeSlave.navelPiercing = 1>> - <</if>> - <<run RulesDeconfliction($activeSlave)>> - <<if $activeSlave.navelPiercing != $slaveAfterRA.navelPiercing>> - <<set _piercingForbidden = 1, $activeSlave.navelPiercing = 0>> - <<else>> - <<if $arcologies[0].FSDegradationist != "unset">> - _S.HeadGirl.slaveName knows that $activeSlave.slaveName needs help adjusting to life as a slave _girl2, so $he has the slave's navel pierced with a big ring. Whatever _he2 thinks in _his2 mind, _S.HeadGirl.slaveName makes clear to _him2 that _his2 body belongs to you. - <<else>> - _S.HeadGirl.slaveName knows that $activeSlave.slaveName needs help adjusting to life as a slave _girl2, so $he has the slave's navel pierced. The prettier _his2 lower half looks, the less reluctant _he2 should feel to take it up the butt. - <</if>> - <<run cashX(forceNeg($modCost), "slaveMod", $activeSlave)>> - <<break>> - <</if>> - <</if>> - <<break>> - <</for>> - <<if _piercingForbidden>> - <<if $arcologies[0].FSDegradationist != "unset">> - _S.HeadGirl.slaveName thinks some piercings might push $activeSlave.slaveName to adjust to life as a slave _girl2, but $he also knows you have rules applied to this slave that forbid it. - <<else>> - _S.HeadGirl.slaveName thinks some cute piercings might help $activeSlave.slaveName adjust to life as a slave _girl2, but $he also knows you have rules applied to this slave that forbid it. - <</if>> - <</if>> - <</if>> -<</if>> - -<<set $slaves[$slaveIndices[$activeSlave.ID]] = $activeSlave>> /* save changes */ diff --git a/src/uncategorized/penthouseReport.tw b/src/uncategorized/penthouseReport.tw deleted file mode 100644 index 8119bfbbce3a0627c94ccc60c6b6057dd1b48e86..0000000000000000000000000000000000000000 --- a/src/uncategorized/penthouseReport.tw +++ /dev/null @@ -1,44 +0,0 @@ -:: Penthouse Report [nobr] - -<<set _SL = $slaves.length>> - -<<set _HGSuitSlaves = App.Utils.jobForAssignment(Job.HEADGIRLSUITE).employees()>> - -<<for $i = 0; $i < _SL; $i++>> - <<if assignmentVisible($slaves[$i])>> - <div> - <<includeDOM App.EndWeek.favoriteIcon($slaves[$i])>> - <span class='slave-name'><<= SlaveFullName($slaves[$i])>></span> - <<if $slaves[$i].choosesOwnAssignment == 2>> - <<= App.SlaveAssignment.choosesOwnJob($slaves[$i])>> - $He - <</if>> - <<include "Full Report">> - <br><br> - - <<if ($slaves[$i].ID == $HeadGirlID) && (_HGSuitSlaves.length > 0)>> - /% We found the Head Girl, now let's find her slave %/ - <<set _iTemp = $i>> - <<set _ID = _HGSuitSlaves[0].ID, $i = $slaveIndices[_ID]>> - - <<if $slaves[$i].assignment != "live with your Head Girl">> - <br>@@.red;$slaves[$i].slaveName had been assigned to live with your Head Girl, but this week $he was assigned to $slaves[$i].assignment. $He has been released to your penthouse for reassignment.@@ - <<= removeJob($slaves[$i], "live with your Head Girl")>> - <<else>> - <span class='slave-name'><<= SlaveFullName($slaves[$i])>></span> - <<if $slaves[$i].choosesOwnAssignment == 2>> - <<= App.SlaveAssignment.choosesOwnJob($slaves[$i])>> - $He - <</if>> - <<includeDOM App.SlaveAssignment.liveWithHG($slaves[$i])>> - <br><br> - <</if>> - - <<set $i = _iTemp>> - <</if>> - <br style="clear: both;"></div> - <</if>> -<</for>> - -/* count open spots in facilities after all assignments have been decided for the week */ -<<set $brothelSpots = App.Entity.facilities.brothel.freeSpace, $clubSpots = App.Entity.facilities.club.freeSpace, $dairySpots = App.Entity.facilities.dairy.freeSpace, $servantsQuartersSpots = App.Entity.facilities.servantsQuarters.freeSpace>>