diff --git a/src/endWeek/reports/personalAttention.js b/src/endWeek/reports/personalAttention.js index c890b32abd12a6deb02cb57c976a2868820fb198..09e18f9ed1e86adbc6bfc9edc7aec4fc145718a4 100644 --- a/src/endWeek/reports/personalAttention.js +++ b/src/endWeek/reports/personalAttention.js @@ -1,378 +1,1128 @@ -/** - * - * @param {App.Entity.SlaveState} slave - * @returns {Node} - */ -globalThis.induceFlawAbuseEffects = function(slave) { - const el = new DocumentFragment(); - const {He, His, him, his} = getPronouns(slave); - slave.devotion -= 5; - slave.trust -= 5; - el.append(`${He}'s `); - if (slave.devotion > 20) { - App.UI.DOM.appendNewElement("span", el, `desperately confused`, "mediumorchid"); - el.append(` by this treatment, since the effect would be ruined if you explained it to ${him}, and ${his} `); - App.UI.DOM.appendNewElement("span", el, `trust in you is reduced. `, "gold"); - } else if (slave.devotion >= -20) { - App.UI.DOM.appendNewElement("span", el, `confused, depressed`, "mediumorchid"); - el.append(` and `); - App.UI.DOM.appendNewElement("span", el, `frightened`, "gold"); - el.append(` by this treatment, since the effect would be ruined if you explained it to ${him}. `); - } else { - App.UI.DOM.appendNewElement("span", el, `angry`, "mediumorchid"); - el.append(` and `); - App.UI.DOM.appendNewElement("span", el, `afraid`, "gold"); - el.append(` that you would treat ${him} like this. `); +globalThis.personalAttention = (function() { + /** @type {{ID: number, trainingRegimen: string}} */ + let pa; + + /** + * @param {App.Entity.SlaveState} slave + * @returns {DocumentFragment} + */ + function induceFlawAbuseEffects(slave) { + const el = new DocumentFragment(); + const {He, His, him, his} = getPronouns(slave); + slave.devotion -= 5; + slave.trust -= 5; + el.append(`${He}'s `); + if (slave.devotion > 20) { + App.UI.DOM.appendNewElement("span", el, `desperately confused`, "mediumorchid"); + el.append(` by this treatment, since the effect would be ruined if you explained it to ${him}, and ${his} `); + App.UI.DOM.appendNewElement("span", el, `trust in you is reduced. `, "gold"); + } else if (slave.devotion >= -20) { + App.UI.DOM.appendNewElement("span", el, `confused, depressed`, "mediumorchid"); + el.append(` and `); + App.UI.DOM.appendNewElement("span", el, `frightened`, "gold"); + el.append(` by this treatment, since the effect would be ruined if you explained it to ${him}. `); + } else { + App.UI.DOM.appendNewElement("span", el, `angry`, "mediumorchid"); + el.append(` and `); + App.UI.DOM.appendNewElement("span", el, `afraid`, "gold"); + el.append(` that you would treat ${him} like this. `); + } + if (slave.energy > 10) { + slave.energy -= 2; + el.append(`${His} `); + App.UI.DOM.appendNewElement("span", el, `appetite for sex is also reduced. `, "red"); + } + return el; } - if (slave.energy > 10) { - slave.energy -= 2; - el.append(`${His} `); - App.UI.DOM.appendNewElement("span", el, `appetite for sex is also reduced. `, "red"); + + /** + * @param {App.Entity.SlaveState} slave + * @returns {DocumentFragment} + */ + function induceFlawLenityEffects(slave) { + const el = new DocumentFragment(); + if (slave.devotion <= 20) { + const {He, him} = getPronouns(slave); + slave.trust += 5; + el.append(`${He} doesn't understand what you intend by this strange treatment, but it does make ${him} `); + App.UI.DOM.appendNewElement("span", el, `inappropriately trusting. `, "mediumaquamarine"); + } + return el; } - return el; -}; -/** - * - * @param {App.Entity.SlaveState} slave - * @returns {Node} - */ -globalThis.induceFlawLenityEffects = function(slave) { - const el = new DocumentFragment(); - if (slave.devotion <= 20) { - const {He, him} = getPronouns(slave); - slave.trust += 5; - el.append(`${He} doesn't understand what you intend by this strange treatment, but it does make ${him} `); - App.UI.DOM.appendNewElement("span", el, `inappropriately trusting. `, "mediumaquamarine"); + + /** + * @param {App.Entity.SlaveState} slave + * @returns {HTMLParagraphElement} + */ + function basicTrainingDefaulter(slave) { + const el = document.createElement("p"); + el.classList.add("indent"); + const {He, His, his, he} = getPronouns(slave); + if (slave.devotion > 20 && slave.behavioralFlaw !== "none" && slave.behavioralQuirk === "none") { + el.append(`Since ${he}'s obedient, `); + App.UI.DOM.appendNewElement("span", el, `${his} training assignment has defaulted to softening ${his} behavioral flaw. `, "yellow"); + pa.trainingRegimen = "soften her behavioral flaw"; + } else if ((slave.devotion > 20) && (slave.sexualQuirk === "none") && !["abusive", "anal addict", "attention whore", "breast growth", "breeder", "cum addict", "malicious", "neglectful", "none", "self hating"].includes(slave.sexualFlaw)) { + el.append(`Since ${he}'s obedient, `); + App.UI.DOM.appendNewElement("span", el, `${his} training assignment has defaulted to softening ${his} sexual flaw. `, "yellow"); + pa.trainingRegimen = "soften her sexual flaw"; + } else if (slave.devotion > 20 && slave.behavioralFlaw !== "none" && slave.behavioralQuirk !== "none") { + el.append(`Since ${he}'s obedient and already has a behavioral quirk, `); + App.UI.DOM.appendNewElement("span", el, `${his} training assignment has defaulted to removing ${his} behavioral flaw. `, "yellow"); + pa.trainingRegimen = "fix her behavioral flaw"; + } else if ((slave.devotion > 20) && !["abusive", "anal addict", "attention whore", "breast growth", "breeder", "cum addict", "malicious", "neglectful", "none", "self hating"].includes(slave.sexualFlaw)) { + el.append(`Since ${he}'s obedient and already has a sexual quirk, `); + App.UI.DOM.appendNewElement("span", el, `${his} training assignment has defaulted to removing ${his} sexual flaw. `, "yellow"); + pa.trainingRegimen = "fix her sexual flaw"; + } else if (slave.devotion <= 20 && slave.trust >= -20) { + App.UI.DOM.appendNewElement("span", el, `${His} training assignment has defaulted to breaking ${his} will. `, "yellow"); + pa.trainingRegimen = "break her will"; + } else { + el.append(`${He} is now fully broken; `); + App.UI.DOM.appendNewElement("span", el, `${his} training assignment has defaulted to fostering devotion. `, "yellow"); + pa.trainingRegimen = "build her devotion"; + } + slave.training = 0; + return el; } - return el; -}; -/** - * - * @param {App.Entity.SlaveState} slave - * @returns {Node} - */ -globalThis.basicTrainingDefaulter = function(slave) { - const el = document.createElement("p"); - el.classList.add("indent"); - const {He, His, his, he} = getPronouns(slave); - const pti = V.personalAttention.findIndex(function(s) { return s.ID === slave.ID; }); - const pa = V.personalAttention[pti]; - if (slave.devotion > 20 && slave.behavioralFlaw !== "none" && slave.behavioralQuirk === "none") { - el.append(`Since ${he}'s obedient, `); - App.UI.DOM.appendNewElement("span", el, `${his} training assignment has defaulted to softening ${his} behavioral flaw. `, "yellow"); - pa.trainingRegimen = "soften her behavioral flaw"; - } else if ((slave.devotion > 20) && (slave.sexualQuirk === "none") && !["abusive", "anal addict", "attention whore", "breast growth", "breeder", "cum addict", "malicious", "neglectful", "none", "self hating"].includes(slave.sexualFlaw)) { - el.append(`Since ${he}'s obedient, `); - App.UI.DOM.appendNewElement("span", el, `${his} training assignment has defaulted to softening ${his} sexual flaw. `, "yellow"); - pa.trainingRegimen = "soften her sexual flaw"; - } else if (slave.devotion > 20 && slave.behavioralFlaw !== "none" && slave.behavioralQuirk !== "none") { - el.append(`Since ${he}'s obedient and already has a behavioral quirk, `); - App.UI.DOM.appendNewElement("span", el, `${his} training assignment has defaulted to removing ${his} behavioral flaw. `, "yellow"); - pa.trainingRegimen = "fix her behavioral flaw"; - } else if ((slave.devotion > 20) && !["abusive", "anal addict", "attention whore", "breast growth", "breeder", "cum addict", "malicious", "neglectful", "none", "self hating"].includes(slave.sexualFlaw)) { - el.append(`Since ${he}'s obedient and already has a sexual quirk, `); - App.UI.DOM.appendNewElement("span", el, `${his} training assignment has defaulted to removing ${his} sexual flaw. `, "yellow"); - pa.trainingRegimen = "fix her sexual flaw"; - } else if (slave.devotion <= 20 && slave.trust >= -20) { - App.UI.DOM.appendNewElement("span", el, `${His} training assignment has defaulted to breaking ${his} will. `, "yellow"); - pa.trainingRegimen = "break her will"; - } else { - el.append(`${He} is now fully broken; `); - App.UI.DOM.appendNewElement("span", el, `${his} training assignment has defaulted to fostering devotion. `, "yellow"); - pa.trainingRegimen = "build her devotion"; - } - slave.training = 0; - return el; -}; -/** - * - * @param {App.Entity.SlaveState} slave - * @returns {Node} - */ -globalThis.personalAttention = function(slave) { - const el = document.createElement("p"); - el.classList.add("indent"); - const ptwi = V.personalAttention.findIndex(function(s) { return s.ID === slave.ID; }); - const { - He, His, - he, his, him, himself, wife, girl, hers - } = getPronouns(slave); - const {womenP} = getPronouns(V.PC).appendSuffix("P"); - let r = []; - let coloredText; - let trainingEfficiency; - let vaginalTrainingEfficiency; - let analTrainingEfficiency; - let seed; - if (V.personalAttention[ptwi].trainingRegimen === "look after her") { - r.push(App.UI.DOM.makeElement("span", `You care for`, "bold")); - } else { - r.push(App.UI.DOM.makeElement("span", `You train`, "bold")); - } - r.push(App.UI.DOM.makeElement("span", slave.slaveName, "slave-name")); - r.push(`when ${he} isn't otherwise occupied.`); - slave.training = Math.clamp(slave.training, 0, 100); - const currentSlaveValue = slave.training < 100 ? 0.2 : 0.5; - slave.training += 80 - (slave.intelligence + slave.intelligenceImplant) / 5 + ((slave.devotion + slave.trust) / 10); - if ((V.PC.skill.slaving >= 100) && V.personalAttention.length === 1) { - // negate bonus when splitting focus among slaves - slave.training += 20; - } - switch (V.personalAttention[ptwi].trainingRegimen) { - case "build her devotion": - slave.devotion += 6; - if ((slave.fetishKnown === 1) && (slave.fetishStrength > 60) && (slave.fetish === "submissive")) { - r.push(`Since ${slave.slaveName} is a submissive, you`); - r.push(App.UI.DOM.makeElement("span", `build ${his} devotion to you`, "hotpink")); - r.push(`by indulging ${his} need to be dominated. Already smiling to ${himself}, ${he} changes into bondage gear that`); - if (canSee(slave)) { - r.push(`blinds ${him},`); + + /** + * @param {App.Entity.SlaveState} slave + * @returns {Node} + */ + function personalAttention(slave) { + const el = document.createElement("p"); + el.classList.add("indent"); + if (!Array.isArray(V.personalAttention)) { + throw `Personal attention requested for slave ${SlaveFullName(slave)} but is set to "${V.personalAttention}"`; + } + pa = V.personalAttention.find((s) => s.ID === slave.ID); + const { + He, His, + he, his, him, himself, wife, girl, hers + } = getPronouns(slave); + const {womenP} = getPronouns(V.PC).appendSuffix("P"); + let r = []; + let coloredText; + let trainingEfficiency; + let vaginalTrainingEfficiency; + let analTrainingEfficiency; + let seed; + if (pa.trainingRegimen === "look after her") { + r.push(App.UI.DOM.makeElement("span", `You care for`, "bold")); + } else { + r.push(App.UI.DOM.makeElement("span", `You train`, "bold")); + } + r.push(App.UI.DOM.makeElement("span", slave.slaveName, "slave-name")); + r.push(`when ${he} isn't otherwise occupied.`); + slave.training = Math.clamp(slave.training, 0, 100); + const currentSlaveValue = slave.training < 100 ? 0.2 : 0.5; + slave.training += 80 - (slave.intelligence + slave.intelligenceImplant) / 5 + ((slave.devotion + slave.trust) / 10); + if ((V.PC.skill.slaving >= 100) && V.personalAttention.length === 1) { + // negate bonus when splitting focus among slaves + slave.training += 20; + } + switch (pa.trainingRegimen) { + case "build her devotion": + slave.devotion += 6; + if ((slave.fetishKnown === 1) && (slave.fetishStrength > 60) && (slave.fetish === "submissive")) { + r.push(`Since ${slave.slaveName} is a submissive, you`); + r.push(App.UI.DOM.makeElement("span", `build ${his} devotion to you`, "hotpink")); + r.push(`by indulging ${his} need to be dominated. Already smiling to ${himself}, ${he} changes into bondage gear that`); + if (canSee(slave)) { + r.push(`blinds ${him},`); + } else { + r.push(`covers ${his} face,`); + } + if (hasAnyArms(slave)) { + r.push(`forces ${his} ${(hasBothArms(slave))?`arms`:`arm`} behind ${his} back,`); + } + if (slave.vagina <= 0 && slave.anus <= 0) { + r.push(`and`); + } + r.push(`forces ${him} to present ${his} breasts`); + if (slave.vagina > 0 || slave.anus > 0) { + r.push(`uncomfortably, and forces a painfully large dildo up ${his}`); + if (slave.vagina > 0) { + r.push(`vagina${(slave.anus > 0)?` and anus`:``}.`); + } else if (slave.anus > 0) { + r.push(`anus.`); + } + } else { + r.push(`uncomfortably.`); + } + r.push(`Thus attired, ${he} is forced to serve you in whatever petty ways occur to you. ${He} holds your tablet for you on ${his} upthrust ass as you work, holds a thin beverage glass for you in ${his} upturned mouth when you eat, and lies still so you can use ${his} tits as a pillow whenever you recline. ${He} loves it.`); + } else if ((slave.fetishKnown === 1) && (slave.fetishStrength > 60) && (slave.fetish === "cumslut") && (V.PC.dick !== 0)) { + r.push(`Since ${slave.slaveName} has an unusual taste for oral sex and cum, you`); + r.push(App.UI.DOM.makeElement("span", `build ${his} devotion to you`, "hotpink")); + r.push(`by indulging ${him}. You allow ${him} to spend ${his} free time following you around. ${He} is permitted to act as your private cum receptacle. If you use another slave, you usually pull out and give ${his} smiling face a facial. When you come inside another slave instead, ${slave.slaveName} is allowed to get your cum anyway, regardless of whether that requires the other slave to spit it into ${his} mouth or ${slave.slaveName} to suck it out of the other slave's vagina or rectum. Either way, ${he} rubs ${his} stomach happily after ${he}'s swallowed it down.`); + seX(slave, "oral", V.PC, "penetrative", 20); + } else if ((slave.fetishKnown === 1) && (slave.fetishStrength > 60) && (slave.fetish === "boobs")) { + r.push(`Since ${slave.slaveName} has an unusual taste for having ${his} tits fondled, you`); + r.push(App.UI.DOM.makeElement("span", `build ${his} devotion to you`, "hotpink")); + r.push(`by indulging ${him}. You keep ${him} near you as a sort of living stress ball. Whenever you have a free hand, whether you're conducting business or buttfucking another slave, you reach over and play with ${him}. ${He} sometimes masturbates while you massage ${his} breasts and`); + if (slave.nipples === "fuckable") { + r.push(`finger`); + } else { + r.push(`pinch`); + } + r.push(`${his} nipples, but often ${he} doesn't even need to.`); + seX(slave, "mammary", V.PC, "penetrative", 10); + } else if ((slave.fetishKnown === 1) && (slave.fetishStrength > 60) && (slave.fetish === "pregnancy")) { + r.push(`Since ${slave.slaveName} has an unusual taste for big pregnant bellies, you`); + r.push(App.UI.DOM.makeElement("span", `build ${his} devotion to you`, "hotpink")); + r.push(`by indulging ${him}. You`); + if (isItemAccessible.entry("a small empathy belly", "bellyAccessory") && slave.belly < 1500 && slave.weight < 130) { + r.push(`strap an enormous sympathy belly onto ${him} and`); + } else if (slave.belly < 1500) { + r.push(`strap a pillow around ${his} middle, give ${him} an oversized shirt and`); + } + r.push(`keep ${him} near you as a sort of living stress ball. Whenever you have a free hand, whether you're conducting business or buttfucking another slave, you reach over and rub ${his} dome of a belly for luck. Occasionally you pay more attention to ${him}, making sure to fondle ${his} rounded middle as you feel up ${his} motherly body. ${He} sometimes masturbates when you aren't groping ${him}, enjoying ${his} gravid figure, but often ${he} doesn't even need to.`); + } else if ((slave.fetishKnown === 1) && (slave.fetishStrength > 60) && (slave.fetish === "humiliation") && ((canDoVaginal(slave) && slave.vagina > 0) || (canDoAnal(slave) && slave.anus > 0))) { + r.push(`Since ${slave.slaveName} has an unusual sexuality, you`); + r.push(App.UI.DOM.makeElement("span", `build ${his} devotion to you`, "hotpink")); + r.push(`by indulging ${his} perversions. Since ${he}'s an absolute slut for humiliation, you let ${him} whore around inside the special camera room whenever possible. When you're going out and feel like putting on a show, you bring ${him} on a leash and fuck ${him} in public. ${He} comes harder than ever when you push ${his} naked body up against the wall of a crowded public arcology elevator and molest ${him}.`); + seX(slave, "oral", V.PC, "penetrative", 4); + r.push(`${VCheck.Both(slave, 4, 2)}`); + } else if ((slave.fetishKnown === 1) && (slave.fetishStrength > 60) && (slave.fetish === "humiliation")) { + r.push(`Since ${slave.slaveName} has an unusual sexuality, you`); + r.push(App.UI.DOM.makeElement("span", `build ${his} devotion to you`, "hotpink")); + r.push(`by indulging ${his} perversions. Since ${he}'s an absolute slut for humiliation, you let ${him} whore around inside the special camera room whenever possible. When you're going out and feel like putting on a show, you`); + if (hasBothLegs(slave)) { + r.push(`bring ${him} on a leash and have ${him} service you in public. ${He} comes harder than ever when you push ${him} down on ${his} knees in a crowded public arcology elevator and facefuck ${him} while ${he}`); + } else { + r.push(`carry ${him} out and have ${him} service you in public. ${He} comes harder than ever when you push ${his} face to your`); + if (V.PC.dick !== 0) { + r.push(`dick`); + } else { + r.push(`pussy`); + } + r.push(`in a crowded public arcology elevator and facefuck ${him} while ${he}`); + } + if (hasAnyArms(slave)) { + r.push(`masturbates fervently.`); + } else { + r.push(`tries ${his} hardest to masturbate.`); + } + seX(slave, "oral", V.PC, "penetrative", 8); + } else if ((slave.anus === 3) && (slave.vagina === 3) && slave.geneMods.rapidCellGrowth !== 1) { + r.push(`${slave.slaveName} is a stretched-out, well-traveled slut. Some like their holes loose, but most prefer cunts and butts that don't make sloppy noises when fucked. So, you spend some quality care time with ${him}, carefully massaging ${his} abused holes with oils and lotions. ${He} comes, of course, but ${his} pussy and asshole do benefit from the treatment. You allow ${him} to service you with ${his} mouth to avoid spoiling your work right away. Afterward, ${he}`); + if (hasAnyArms(slave)) { + r.push(App.UI.DOM.makeElement("span", `hugs you and gives you a kiss.`, "hotpink")); + } else { + r.push(App.UI.DOM.makeElement("span", `gives you a kiss and tries to hug you,`, "hotpink")); + r.push(`but without arms, all ${he} manages is a sort of nuzzle.`); + } + slave.vagina--; + slave.anus--; + seX(slave, "oral", V.PC, "penetrative", 5); + } else if (slave.vagina === 0) { + r.push(`${slave.slaveName}'s accustomed to the slave life, so the experience is almost novel for ${him} and ${he} is`); + r.push(App.UI.DOM.makeElement("span", `touched by the affection.`, "hotpink")); + r.push(`${He} isn't used to being kissed, teased and massaged. ${He}'s almost disappointed when it becomes clear that you don't mean to take ${his} virginity. You gently stimulate ${his}`); + if (slave.dick) { + r.push(`dick`); + } else if (slave.clit) { + r.push(`clit`); + } else { + r.push(`nipples`); + } + r.push(`while ${he} sucks you off, bringing ${him} to a moaning climax as you cum in ${his} mouth.`); + seX(slave, "oral", V.PC, "penetrative", 5); + } else if ((slave.anus === 0) && (slave.vagina < 0)) { + r.push(`You haven't decided to take ${slave.slaveName}'s anus yet, so you let ${him} suck you off and play with ${himself} while ${he} does. You stroke ${his} hair, play with ${his} tits, and generally pamper ${him} while ${he} orally services you. ${He}'s accustomed to the slave life, so the experience of affection is novel for ${him} and ${he} is`); + r.push(App.UI.DOM.makeElement("span", `touched by the affection.`, "hotpink")); + r.push(`${He} isn't used to being kissed, teased and massaged. ${He}'s almost disappointed when it becomes clear that you don't mean to take ${his} virgin hole.`); + seX(slave, "oral", V.PC, "penetrative", 5); + } else if ((slave.anus === 0) && (slave.vagina > 0) && canDoVaginal(slave)) { + r.push(`You fuck ${slave.slaveName}, of course, but you do it slowly and lovingly, and keep well clear of ${his} still-virgin asshole in the process. ${He}'s accustomed to the slave life, so the experience is almost novel for ${him} and ${he} is affectingly`); + r.push(App.UI.DOM.makeElement("span", `touched by the affection.`, "hotpink")); + r.push(`${He} isn't used to being kissed, teased and massaged before ${he} takes cock. Slaves are usually used without regard to their orgasm, so ${he}'s also surprised and gratified when you make meticulous efforts to delay your own orgasm so it can coincide with ${his} own. ${He}'s a puddle on the sheets under your hands.`); + seX(slave, "oral", V.PC, "penetrative", 4); + r.push(`${VCheck.Vaginal(slave, 4)}`); + } else if (slave.anus === 0) { + r.push(`${slave.slaveName}'s accustomed to the slave life, so the experience is almost novel for ${him} and ${he} is`); + r.push(App.UI.DOM.makeElement("span", `touched by the affection.`, "hotpink")); + r.push(`${He} isn't used to being kissed, teased and massaged. ${He}'s almost disappointed when it becomes clear that you don't mean to take ${his} anal virginity. You gently stimulate ${his}`); + if (slave.dick) { + r.push(`dick`); + } else if (slave.clit) { + r.push(`clit`); + } else { + r.push(`nipples`); + } + r.push(`while ${he} sucks you off, bringing ${him} to a moaning climax as you cum in ${his} mouth.`); + seX(slave, "oral", V.PC, "penetrative", 5); } else { - r.push(`covers ${his} face,`); + r.push(`You fuck ${slave.slaveName}, of course, but you do it slowly and lovingly. ${He}'s accustomed to the slave life, so the experience is almost novel for ${him} and ${he} is affectingly`); + r.push(App.UI.DOM.makeElement("span", `touched by the affection.`, "hotpink")); + r.push(`${He} isn't used to being kissed, teased and massaged before ${he} takes cock. Slaves are usually used without regard to their orgasm, so ${he}'s also surprised and gratified when you make meticulous efforts to delay your own orgasm so it can coincide with ${his} own. ${He}'s a puddle on the sheets under your hands.`); + seX(slave, "oral", V.PC, "penetrative", 4); + if (slave.vagina === 0) { + r.push(`${VCheck.Vaginal(slave, 4)}`); + } else { + r.push(`${VCheck.Both(slave, 4, 2)}`); + } } - if (hasAnyArms(slave)) { - r.push(`forces ${his} ${(hasBothArms(slave))?`arms`:`arm`} behind ${his} back,`); + if (V.PC.skill.slaving >= 100) { + r.push(`Your`); + r.push(App.UI.DOM.makeElement("span", `slave training experience`, "springgreen")); + r.push(`allows you to`); + r.push(App.UI.DOM.makeElement("span", `bend ${him} to your will`, "hotpink")); + r.push(`more quickly without provoking resistance.`); + slave.devotion += 1; + } + if (slave.trust > 10) { + r.push(`Spending time with you`); + r.push(App.UI.DOM.makeElement("span", `builds ${his} trust in ${his} ${getWrittenTitle(slave)}.`, "mediumaquamarine")); + slave.trust += 4; + } else { + r.push(`Spending time with you`); + r.push(App.UI.DOM.makeElement("span", `reduces ${his} fear towards you.`, "mediumaquamarine")); + slave.trust += 6; } - if (slave.vagina <= 0 && slave.anus <= 0) { - r.push(`and`); + r.push(IncreasePCSkills('slaving', 0.2)); + slave.training = 0; + break; + case "look after her": + if (slave.relationship === -3 && slave.fetish === "mindbroken") { + r.push(`Since ${slave.slaveName} is your ${wife} and not all there, you keep ${him} under a watchful eye to make sure no harm comes to the broken ${girl}. ${He} almost seems in better spirits under your care, not that it will matter in an hour or two.`); + if (slave.kindness) { + slave.kindness++; + } else { + slave.kindness = 1; + } } - r.push(`forces ${him} to present ${his} breasts`); - if (slave.vagina > 0 || slave.anus > 0) { - r.push(`uncomfortably, and forces a painfully large dildo up ${his}`); - if (slave.vagina > 0) { - r.push(`vagina${(slave.anus > 0)?` and anus`:``}.`); - } else if (slave.anus > 0) { - r.push(`anus.`); + if (slave.health.condition < 100) { + r.push(`Your close and expert attention improves ${his} health in a way drug treatment or mere medical intervention cannot.`); + r.push(App.UI.DOM.makeElement("span", `${His} health has improved.`, "green")); + improveCondition(slave, 10); + } + if (slave.health.tired > 10) { + r.push(`You watch over ${him} as ${he} sleeps, assuring`); + r.push(App.UI.DOM.makeElement("span", `a proper night's rest.`, "green")); + slave.health.tired = Math.clamp(slave.health.tired - 10, 0, 1000); + } + if (((slave.anus >= 3) || (slave.vagina >= 3)) && slave.geneMods.rapidCellGrowth !== 1) { + r.push(`${slave.slaveName} is a veteran sex slave and has seen hard use. Tightening up a slave is difficult, but with close supervision and attention it can be done. You and your other slaves carefully apply injections, creams, and massage, and ${his} other work is carefully managed to reduce wear and tear.`); + if ((slave.anus >= 3) && (random(1, 100) > 50)) { + r.push(App.UI.DOM.makeElement("span", `${His} anus has recovered and is now merely loose.`, "orange")); + slave.anus--; + } else if ((slave.anus >= 3)) { + r.push(`${His} distended anus does not improve this week.`); } + if ((slave.vagina >= 3) && (random(1, 100) > 50)) { + r.push(App.UI.DOM.makeElement("span", `${His} pussy has tightened.`, "orange")); + slave.vagina--; + } else if ((slave.vagina >= 3)) { + r.push(`${His} loose pussy does not recover this week.`); + } + } + r.push(IncreasePCSkills('slaving', 0.1)); + slave.training = 0; + break; + case "soften her behavioral flaw": + if (slave.behavioralFlaw === "none") { + r.push(`${slave.slaveName} got over ${his} behavioral flaw without you;`); + coloredText = []; + coloredText.push(`${his} training assignment has defaulted to`); + if (["abusive", "anal addict", "attention whore", "breast growth", "breeder", "cum addict", "malicious", "neglectful", "none", "self hating"].includes(slave.sexualFlaw)) { + if ((slave.devotion <= 20) && (slave.trust >= -20)) { + coloredText.push(`breaking ${his} will.`); + pa.trainingRegimen = "break her will"; + } else { + coloredText.push(`fostering devotion.`); + pa.trainingRegimen = "build her devotion"; + } + } else { + coloredText.push(`softening ${his} sexual flaw.`); + pa.trainingRegimen = "soften her sexual flaw"; + } + r.push(App.UI.DOM.makeElement("span", coloredText.join(" "), "yellow")); } else { - r.push(`uncomfortably.`); - } - r.push(`Thus attired, ${he} is forced to serve you in whatever petty ways occur to you. ${He} holds your tablet for you on ${his} upthrust ass as you work, holds a thin beverage glass for you in ${his} upturned mouth when you eat, and lies still so you can use ${his} tits as a pillow whenever you recline. ${He} loves it.`); - } else if ((slave.fetishKnown === 1) && (slave.fetishStrength > 60) && (slave.fetish === "cumslut") && (V.PC.dick !== 0)) { - r.push(`Since ${slave.slaveName} has an unusual taste for oral sex and cum, you`); - r.push(App.UI.DOM.makeElement("span", `build ${his} devotion to you`, "hotpink")); - r.push(`by indulging ${him}. You allow ${him} to spend ${his} free time following you around. ${He} is permitted to act as your private cum receptacle. If you use another slave, you usually pull out and give ${his} smiling face a facial. When you come inside another slave instead, ${slave.slaveName} is allowed to get your cum anyway, regardless of whether that requires the other slave to spit it into ${his} mouth or ${slave.slaveName} to suck it out of the other slave's vagina or rectum. Either way, ${he} rubs ${his} stomach happily after ${he}'s swallowed it down.`); - seX(slave, "oral", V.PC, "penetrative", 20); - } else if ((slave.fetishKnown === 1) && (slave.fetishStrength > 60) && (slave.fetish === "boobs")) { - r.push(`Since ${slave.slaveName} has an unusual taste for having ${his} tits fondled, you`); - r.push(App.UI.DOM.makeElement("span", `build ${his} devotion to you`, "hotpink")); - r.push(`by indulging ${him}. You keep ${him} near you as a sort of living stress ball. Whenever you have a free hand, whether you're conducting business or buttfucking another slave, you reach over and play with ${him}. ${He} sometimes masturbates while you massage ${his} breasts and`); - if (slave.nipples === "fuckable") { - r.push(`finger`); - } else { - r.push(`pinch`); - } - r.push(`${his} nipples, but often ${he} doesn't even need to.`); - seX(slave, "mammary", V.PC, "penetrative", 10); - } else if ((slave.fetishKnown === 1) && (slave.fetishStrength > 60) && (slave.fetish === "pregnancy")) { - r.push(`Since ${slave.slaveName} has an unusual taste for big pregnant bellies, you`); - r.push(App.UI.DOM.makeElement("span", `build ${his} devotion to you`, "hotpink")); - r.push(`by indulging ${him}. You`); - if (isItemAccessible.entry("a small empathy belly", "bellyAccessory") && slave.belly < 1500 && slave.weight < 130) { - r.push(`strap an enormous sympathy belly onto ${him} and`); - } else if (slave.belly < 1500) { - r.push(`strap a pillow around ${his} middle, give ${him} an oversized shirt and`); - } - r.push(`keep ${him} near you as a sort of living stress ball. Whenever you have a free hand, whether you're conducting business or buttfucking another slave, you reach over and rub ${his} dome of a belly for luck. Occasionally you pay more attention to ${him}, making sure to fondle ${his} rounded middle as you feel up ${his} motherly body. ${He} sometimes masturbates when you aren't groping ${him}, enjoying ${his} gravid figure, but often ${he} doesn't even need to.`); - } else if ((slave.fetishKnown === 1) && (slave.fetishStrength > 60) && (slave.fetish === "humiliation") && ((canDoVaginal(slave) && slave.vagina > 0) || (canDoAnal(slave) && slave.anus > 0))) { - r.push(`Since ${slave.slaveName} has an unusual sexuality, you`); - r.push(App.UI.DOM.makeElement("span", `build ${his} devotion to you`, "hotpink")); - r.push(`by indulging ${his} perversions. Since ${he}'s an absolute slut for humiliation, you let ${him} whore around inside the special camera room whenever possible. When you're going out and feel like putting on a show, you bring ${him} on a leash and fuck ${him} in public. ${He} comes harder than ever when you push ${his} naked body up against the wall of a crowded public arcology elevator and molest ${him}.`); - seX(slave, "oral", V.PC, "penetrative", 4); - r.push(`${VCheck.Both(slave, 4, 2)}`); - } else if ((slave.fetishKnown === 1) && (slave.fetishStrength > 60) && (slave.fetish === "humiliation")) { - r.push(`Since ${slave.slaveName} has an unusual sexuality, you`); - r.push(App.UI.DOM.makeElement("span", `build ${his} devotion to you`, "hotpink")); - r.push(`by indulging ${his} perversions. Since ${he}'s an absolute slut for humiliation, you let ${him} whore around inside the special camera room whenever possible. When you're going out and feel like putting on a show, you`); - if (hasBothLegs(slave)) { - r.push(`bring ${him} on a leash and have ${him} service you in public. ${He} comes harder than ever when you push ${him} down on ${his} knees in a crowded public arcology elevator and facefuck ${him} while ${he}`); - } else { - r.push(`carry ${him} out and have ${him} service you in public. ${He} comes harder than ever when you push ${his} face to your`); - if (V.PC.dick !== 0) { - r.push(`dick`); + if (slave.behavioralFlaw === "arrogant") { + r.push(`${slave.slaveName} thinks ${he}'s better than everyone else. ${He} has some basis for a high opinion of ${himself}; otherwise you wouldn't be bothering with ${him}. You do your best to maintain ${his} belief that ${he} has something special to offer while training ${him} to offer it to you without objection.`); + } else if ((slave.behavioralFlaw === "bitchy")) { + r.push(`${slave.slaveName} always has a cutting remark ready. Some of them are actually pretty good, and you'd prefer to keep ${his} cutting wit intact. You strike a careful balance with ${him}, punishing the wrong remark at the wrong time, but rewarding appropriately biting comments.`); + } else if ((slave.behavioralFlaw === "odd")) { + r.push(`${slave.slaveName} is odd. ${He}'s usually annoying, but on occasion ${his} oddities can produce great comic relief. You strike a careful balance with ${him}, punishing ${him} when ${he} irritates you, but allowing and even rewarding harmless little idiosyncrasies.`); + } else if ((slave.behavioralFlaw === "hates men")) { + r.push(`${slave.slaveName} does not like men. ${He} desperately needs social contact, though, so you encourage ${him} to rely on women to address ${his} emotional needs. This is easy, since`); + if (V.PC.vagina !== -1) { + r.push(`you've got a pussy yourself.`); + } else { + r.push(`there are several readily available.`); + } + } else if ((slave.behavioralFlaw === "hates women")) { + r.push(`${slave.slaveName} does not like girls. ${He} desperately needs social contact, though, so you encourage ${him} to rely on men to address ${his} emotional needs. This is easy, since`); + if (V.PC.dick === 0) { + r.push(`there are several readily available.`); + } else { + r.push(`you've got a cock yourself.`); + } + } else if ((slave.behavioralFlaw === "anorexic")) { + r.push(`${slave.slaveName} suffers from anorexia. You work with ${him} patiently, applying the very best in modern therapy for this troubling condition. It's usually a product of poor self esteem, and you do your best to build ${hers} up without diminishing ${his} submission to you.`); + } else if ((slave.behavioralFlaw === "gluttonous")) { + r.push(`${slave.slaveName}'s diet is already closely controlled, but the impulse to overeat is strong in ${him} and like most gluttons ${he} manages to be quite cunning. You take a hard line with ${him}, and do your best to replace ${his} addiction to the endorphin release of eating with an addiction to the endorphin release of exercise.`); + } else if ((slave.behavioralFlaw === "liberated")) { + r.push(`${slave.slaveName} can express a decent argument for why it's wrong to use ${him} as a sex slave. With a combination of rote training, discussion, and reinforcement, you do your best to turn this into a sincere belief in the moral rightness of slavery.`); + } else if ((slave.behavioralFlaw === "devout")) { + r.push(`${slave.slaveName} remains devoted to an old world faith that serves ${him} as a reservoir of mental resilience. Like all such beliefs, ${hers} has certain sexual elements; you amuse yourself by forcing ${him} to break them, and rewarding ${him} generously when ${he} does.`); + } + if (slave.training < 100) { + r.push(`You make progress, but ${he}'s the same at the end of the week.`); } else { - r.push(`pussy`); + slave.training = 0; + r.push(`By the end of the week,`); + r.push(App.UI.DOM.makeElement("span", `you resolve ${his} flaw into something special.`, "green")); + r.push(App.UI.DOM.makeElement("span", `${His} obedience has increased.`, "hotpink")); + SoftenBehavioralFlaw(slave); + slave.devotion += 4; + } + if (slave.fetishKnown !== 1) { + if (slave.fetish === "submissive") { + r.push(`${He} really takes to your close attention;`); + r.push(App.UI.DOM.makeElement("span", `${he}'s a natural submissive!`, "pink")); + (slave.fetishKnown = 1); + } else if ((slave.fetish === "cumslut")) { + r.push(`While you're giving ${him} personal attention, you discover by chance that`); + r.push(App.UI.DOM.makeElement("span", `${he} has an oral fixation!`, "pink")); + (slave.fetishKnown = 1); + } else if ((slave.fetish === "masochist")) { + r.push(`While you're giving ${him} personal correction, you discover by chance that`); + r.push(App.UI.DOM.makeElement("span", `${he} likes pain!`, "pink")); + (slave.fetishKnown = 1); + } else if ((slave.fetish === "humiliation")) { + r.push(`While you're giving ${him} personal attention in public, you discover by chance that`); + r.push(App.UI.DOM.makeElement("span", `${he} likes humiliation!`, "pink")); + (slave.fetishKnown = 1); + } + } + if (slave.behavioralFlaw === "none") { + r.push(`With ${his} behavioral flaw softened,`); + coloredText = []; + r.push(`${his} training assignment has defaulted to`); + if (slave.sexualFlaw === "none") { + if ((slave.devotion <= 20) && (slave.trust >= -20)) { + coloredText.push(`breaking ${his} will.`); + pa.trainingRegimen = "break her will"; + } else { + coloredText.push(`fostering devotion.`); + pa.trainingRegimen = "build her devotion"; + } + } else { + coloredText.push(`softening ${his} sexual flaw.`); + pa.trainingRegimen = "soften her sexual flaw"; + } + r.push(App.UI.DOM.makeElement("span", coloredText.join(" "), "yellow")); } - r.push(`in a crowded public arcology elevator and facefuck ${him} while ${he}`); } - if (hasAnyArms(slave)) { - r.push(`masturbates fervently.`); + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "soften her sexual flaw": + if (slave.sexualFlaw === "none") { + r.push(`${slave.slaveName} got over ${his} sexual flaw without you,`); + coloredText = []; + coloredText.push(`${his} training assignment has defaulted to`); + if (slave.behavioralFlaw === "none") { + if ((slave.devotion <= 20) && (slave.trust >= -20)) { + coloredText.push(`breaking ${his} will.`); + pa.trainingRegimen = "break her will"; + } else { + coloredText.push(`fostering devotion.`); + pa.trainingRegimen = "build her devotion"; + } + } else { + coloredText.push(`softening ${his} behavioral flaw.`); + pa.trainingRegimen = "soften her behavioral flaw"; + } + r.push(App.UI.DOM.makeElement("span", coloredText.join(" "), "yellow")); } else { - r.push(`tries ${his} hardest to masturbate.`); + r.push(`${slave.slaveName}`); + switch (slave.sexualFlaw) { + case "hates oral": + r.push(`has a powerful gag reflex. Though it would be simpler to train ${him} out of it, you do your best to train ${him} to safely take a rough facefuck without losing the fun aspects of forcing a slave to swallow a phallus, like the struggles, the gagging, and the tears.`); + seX(slave, "oral", V.PC, "penetrative", 10); + break; + case "hates anal": + r.push(`does not like it up the butt. Though it would be simpler to train ${him} out of it, you do your best to train ${him} to safely take a rough buttfuck without losing the fun aspects of anal rape, like the struggles, the whining, and the tears.`); + if (canDoAnal(slave)) { + r.push(`${VCheck.Anal(slave, 10)}`); + } else { + r.push(`The inability to actually penetrate ${his} ass hinders your efforts, however.`); + slave.training -= 20; + // more difficult training + } + break; + case "hates penetration": + if ((slave.vagina > -1) && canDoVaginal(slave)) { + r.push(`does not like sex. Though it would be simpler to train ${him} out of it, you do your best to train ${him} to safely take a hard pounding without losing the fun aspects of forced sex, like the struggles, the whining, and the tears.`); + r.push(`${VCheck.Vaginal(slave, 10)}`); + } else if (canDoAnal(slave)) { + r.push(`does not like it up the butt. Though it would be simpler to train ${him} out of it, you do your best to train ${him} to safely take a rough buttfuck without losing the fun aspects of anal rape, like the struggles, the whining, and the tears.`); + r.push(`${VCheck.Anal(slave, 10)}`); + } else { + r.push(`does not dicks in ${his} mouth. Though it would be simpler to train ${him} out of it, you do your best to train ${him} to safely take a rough facefuck without losing the fun aspects of forcing a slave to swallow a phallus, like the struggles, the gagging, and the tears.`); + seX(slave, "oral", V.PC, "penetrative", 10); + } + break; + case "apathetic": + r.push(`doesn't put out much effort when having sex. You do your best to redirect this apathy into caring for ${his} partners; since ${he} obviously doesn't think much of ${himself}, ${he} can spare the effort.`); + seX(slave, "oral", V.PC, "penetrative", 10); + break; + case "crude": + r.push(`does not pay enough attention to standards when having sex, leading to crude comments and unsexy noises. To remedy this, you have ${him} give you oral regularly: a sacrifice, but you make sacrifices for your slaves' improvement. Oral sex can be difficult to make elegant, but you work with ${him} to make it as pretty as possible, even when you require ${him} to apply ${his} mouth to some of the less common erogenous zones. You do your best to retain ${his} sexual openness while making ${him} more sexually presentable.`); + seX(slave, "oral", V.PC, "penetrative", 10); + break; + case "judgemental": + r.push(`has a bad habit of being sexually judgemental, belittling anyone who doesn't live up to ${his} pretensions of standards. You do your best to train ${him} to perform regardless of ${his} partners' endowments, aiming for a delicate balance that will allow ${him} to get off with anyone while permitting ${him} to retain and even build on ${his} appetite for big dicks. You permit ${him} to achieve release only when ${he}'s done well with`); + if (V.PC.dick !== 0) { + r.push(`your thick cock`); + } else { + r.push(`a fat dildo`); + } + if (slave.vagina > 0 && canDoVaginal(slave)) { + r.push(`lodged up ${his} cunt.`); + r.push(`${VCheck.Vaginal(slave, 10)}`); + } else if (slave.anus > 0 && canDoAnal(slave)) { + r.push(`lodged up ${his} butt.`); + r.push(`${VCheck.Anal(slave, 10)}`); + } else { + r.push(`down ${his} throat.`); + seX(slave, "oral", V.PC, "penetrative", 10); + } + break; + case "shamefast": + r.push(`is shamefast. You do your best to train ${him} out of this, but carefully retain the essential core of embarrassment, aiming for a slave that can use ${his} body to titillate the viewer and then offer an authentic blush at ${himself}.`); + seX(slave, "oral", V.PC, "penetrative", 10); + break; + case "idealistic": + r.push(`still sees sex in a naïve light, hoping to be romanced, teased to arousal, and asked permission. Training ${him} directly out of this would shatter the poor ${girl}'s world, so you work with ${him} carefully, doing your best to keep sex special for ${him}.`); + break; + case "repressed": + r.push(`is repressed. You strike a delicate balance with ${him}, doing your best to train ${him} to fuck as a sex slave should, but trying to retain the rush of doing the forbidden that makes ${him} flush, shiver, and moan.`); + seX(slave, "oral", V.PC, "penetrative", 10); + break; + case "abusive": + case "anal addict": + case "attention whore": + case "breast growth": + case "breeder": + case "cum addict": + case "malicious": + case "neglectful": + case "self hating": + r.push(`has a paraphilia. Typical methods will have no effect on this kind of flaw.`); + slave.training = 0; + coloredText = []; + coloredText.push(`${His} training assignment has defaulted to`); + if ((slave.devotion <= 20) && (slave.trust >= -20)) { + coloredText.push(`breaking ${his} will.`); + pa.trainingRegimen = "break her will"; + } else { + coloredText.push(`fostering devotion.`); + pa.trainingRegimen = "build her devotion"; + } + r.push(App.UI.DOM.makeElement("span", coloredText.join(" "), "yellow")); + break; + default: + r.push(`has something. You should probably report this as nobody knows what is currently happening. ${His} flaw was supposed to be ${slave.sexualFlaw}.`); + } + if (slave.training < 100) { + r.push(`You make progress, but ${he}'s the same at the end of the week.`); + } else { + slave.training = 0; + r.push(`By the end of the week,`); + r.push(App.UI.DOM.makeElement("span", `you resolve ${his} flaw into something special.`, "green")); + r.push(App.UI.DOM.makeElement("span", `${His} obedience has increased.`, "hotpink")); + SoftenSexualFlaw(slave); + slave.devotion += 4; + } + if (slave.fetishKnown !== 1) { + if (slave.fetish === "submissive") { + r.push(`${He} really takes to your close attention;`); + r.push(App.UI.DOM.makeElement("span", `${he}'s a natural submissive!`, "pink")); + (slave.fetishKnown = 1); + } else if ((slave.fetish === "cumslut")) { + r.push(`While you're giving ${him} personal attention, you discover by chance that`); + r.push(App.UI.DOM.makeElement("span", `${he} has an oral fixation!`, "pink")); + (slave.fetishKnown = 1); + } else if ((slave.fetish === "masochist")) { + r.push(`While you're giving ${him} personal correction, you discover by chance that`); + r.push(App.UI.DOM.makeElement("span", `${he} likes pain!`, "pink")); + (slave.fetishKnown = 1); + } else if ((slave.fetish === "humiliation")) { + r.push(`While you're giving ${him} personal attention in public, you discover by chance that`); + r.push(App.UI.DOM.makeElement("span", `${he} likes humiliation!`, "pink")); + (slave.fetishKnown = 1); + } + } + if (slave.sexualFlaw === "none") { + r.push(`With ${his} sexual flaw softened,`); + coloredText = []; + r.push(`${his} training assignment has defaulted to`); + if (slave.behavioralFlaw === "none") { + if ((slave.devotion <= 20) && (slave.trust >= -20)) { + coloredText.push(`breaking ${his} will.`); + pa.trainingRegimen = "break her will"; + } else { + coloredText.push(`fostering devotion.`); + pa.trainingRegimen = "build her devotion"; + } + } else { + coloredText.push(`softening ${his} behavioral flaw.`); + pa.trainingRegimen = "soften her behavioral flaw"; + } + r.push(App.UI.DOM.makeElement("span", coloredText.join(" "), "yellow")); + } } - seX(slave, "oral", V.PC, "penetrative", 8); - } else if ((slave.anus === 3) && (slave.vagina === 3) && slave.geneMods.rapidCellGrowth !== 1) { - r.push(`${slave.slaveName} is a stretched-out, well-traveled slut. Some like their holes loose, but most prefer cunts and butts that don't make sloppy noises when fucked. So, you spend some quality care time with ${him}, carefully massaging ${his} abused holes with oils and lotions. ${He} comes, of course, but ${his} pussy and asshole do benefit from the treatment. You allow ${him} to service you with ${his} mouth to avoid spoiling your work right away. Afterward, ${he}`); - if (hasAnyArms(slave)) { - r.push(App.UI.DOM.makeElement("span", `hugs you and gives you a kiss.`, "hotpink")); - } else { - r.push(App.UI.DOM.makeElement("span", `gives you a kiss and tries to hug you,`, "hotpink")); - r.push(`but without arms, all ${he} manages is a sort of nuzzle.`); - } - slave.vagina--; - slave.anus--; - seX(slave, "oral", V.PC, "penetrative", 5); - } else if (slave.vagina === 0) { - r.push(`${slave.slaveName}'s accustomed to the slave life, so the experience is almost novel for ${him} and ${he} is`); - r.push(App.UI.DOM.makeElement("span", `touched by the affection.`, "hotpink")); - r.push(`${He} isn't used to being kissed, teased and massaged. ${He}'s almost disappointed when it becomes clear that you don't mean to take ${his} virginity. You gently stimulate ${his}`); - if (slave.dick) { - r.push(`dick`); - } else if (slave.clit) { - r.push(`clit`); - } else { - r.push(`nipples`); - } - r.push(`while ${he} sucks you off, bringing ${him} to a moaning climax as you cum in ${his} mouth.`); - seX(slave, "oral", V.PC, "penetrative", 5); - } else if ((slave.anus === 0) && (slave.vagina < 0)) { - r.push(`You haven't decided to take ${slave.slaveName}'s anus yet, so you let ${him} suck you off and play with ${himself} while ${he} does. You stroke ${his} hair, play with ${his} tits, and generally pamper ${him} while ${he} orally services you. ${He}'s accustomed to the slave life, so the experience of affection is novel for ${him} and ${he} is`); - r.push(App.UI.DOM.makeElement("span", `touched by the affection.`, "hotpink")); - r.push(`${He} isn't used to being kissed, teased and massaged. ${He}'s almost disappointed when it becomes clear that you don't mean to take ${his} virgin hole.`); - seX(slave, "oral", V.PC, "penetrative", 5); - } else if ((slave.anus === 0) && (slave.vagina > 0) && canDoVaginal(slave)) { - r.push(`You fuck ${slave.slaveName}, of course, but you do it slowly and lovingly, and keep well clear of ${his} still-virgin asshole in the process. ${He}'s accustomed to the slave life, so the experience is almost novel for ${him} and ${he} is affectingly`); - r.push(App.UI.DOM.makeElement("span", `touched by the affection.`, "hotpink")); - r.push(`${He} isn't used to being kissed, teased and massaged before ${he} takes cock. Slaves are usually used without regard to their orgasm, so ${he}'s also surprised and gratified when you make meticulous efforts to delay your own orgasm so it can coincide with ${his} own. ${He}'s a puddle on the sheets under your hands.`); - seX(slave, "oral", V.PC, "penetrative", 4); - r.push(`${VCheck.Vaginal(slave, 4)}`); - } else if (slave.anus === 0) { - r.push(`${slave.slaveName}'s accustomed to the slave life, so the experience is almost novel for ${him} and ${he} is`); - r.push(App.UI.DOM.makeElement("span", `touched by the affection.`, "hotpink")); - r.push(`${He} isn't used to being kissed, teased and massaged. ${He}'s almost disappointed when it becomes clear that you don't mean to take ${his} anal virginity. You gently stimulate ${his}`); - if (slave.dick) { - r.push(`dick`); - } else if (slave.clit) { - r.push(`clit`); - } else { - r.push(`nipples`); - } - r.push(`while ${he} sucks you off, bringing ${him} to a moaning climax as you cum in ${his} mouth.`); - seX(slave, "oral", V.PC, "penetrative", 5); - } else { - r.push(`You fuck ${slave.slaveName}, of course, but you do it slowly and lovingly. ${He}'s accustomed to the slave life, so the experience is almost novel for ${him} and ${he} is affectingly`); - r.push(App.UI.DOM.makeElement("span", `touched by the affection.`, "hotpink")); - r.push(`${He} isn't used to being kissed, teased and massaged before ${he} takes cock. Slaves are usually used without regard to their orgasm, so ${he}'s also surprised and gratified when you make meticulous efforts to delay your own orgasm so it can coincide with ${his} own. ${He}'s a puddle on the sheets under your hands.`); - seX(slave, "oral", V.PC, "penetrative", 4); - if (slave.vagina === 0) { - r.push(`${VCheck.Vaginal(slave, 4)}`); + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "learn skills": + trainingEfficiency = 10 + Math.trunc(slave.devotion / 30) + Math.floor(slave.intelligence / 32); + if (V.PC.career === "escort") { + r.push(`You are well-versed in sexual techniques and how to employ them, giving you an edge in teaching ${him}.`); + trainingEfficiency += 10; + } + if (slave.vagina >= 0) { + if (!canDoVaginal(slave) && slave.vagina === 0) { + vaginalTrainingEfficiency = Math.trunc(trainingEfficiency / 4); + } else if (slave.vagina === 0 || !canDoVaginal(slave)) { + vaginalTrainingEfficiency = Math.trunc(trainingEfficiency / 2); + } + } + if (!canDoAnal(slave) && slave.anus === 0) { + analTrainingEfficiency = Math.trunc(trainingEfficiency / 4); + } else if (slave.anus === 0 || !canDoAnal(slave)) { + analTrainingEfficiency = Math.trunc(trainingEfficiency / 2); + } + if (slave.devotion > 50) { + r.push(`${He}'s devoted to you, making sexual training much easier.`); + } else if (slave.devotion > 20) { + r.push(`${He}'s accepted ${his} place as a sex slave, making sexual training easier.`); + } else if (slave.devotion < -20) { + r.push(`${He}'s unhappy being a sex slave, making sexual training harder.`); + } + if (slave.intelligence + slave.intelligenceImplant > 15) { + r.push(`${His} intelligence allows ${him} to absorb ${his} lessons quickly.`); + } else if (slave.intelligence + slave.intelligenceImplant < -15) { + r.push(`${His} stupidity makes ${him} absorb ${his} lessons slowly.`); + } + if (slave.skill.oral <= 10) { + r.push(`Since ${he}'s orally unskilled, you start with ${his} mouth. ${He}`); + if (V.PC.dick !== 0) { + r.push(`sucks your dick,`); + } else { + r.push(`eats you out,`); + } + r.push(`of course, but ${his} training is more creative than just that. You give ${him}`); + if (canTaste(slave)) { + r.push(`delicious`); + } else { + r.push(`sugary`); + } + r.push(`hard candies to suck and feed ${him} phallic fruits and vegetables that ${he} must deepthroat before ${he} can eat. As ${his} skill improves, ${he} wears a gag with an inward-facing dildo, which is swapped out for a bigger size every so often. You only let ${him} orgasm when ${he}'s sucking, and before long ${he}'s associating giving someone oral pleasure with experiencing pleasure ${himself}.`); + r.push(App.UI.DOM.makeElement("span", `${His} oral skills have improved.`, "lime")); + r.push(slaveSkillIncrease('oral', slave, trainingEfficiency)); + } else if (slave.skill.vaginal <= 10 && slave.vagina > 0 && canDoVaginal(slave)) { + r.push(`Since ${he}'s vaginally unskilled, and not a virgin, you start with ${his} pussy.`); + r.push(App.UI.DOM.makeElement("span", `${His} vaginal skills have improved.`, "lime")); + r.push(slaveSkillIncrease('vaginal', slave, trainingEfficiency)); + } else if (slave.skill.anal <= 10 && slave.anus > 0 && canDoAnal(slave)) { + r.push(`Since ${he}'s anally unskilled, and not an anal virgin, you start with ${his} ass.`); + r.push(App.UI.DOM.makeElement("span", `${His} anal skills have improved.`, "lime")); + r.push(slaveSkillIncrease('anal', slave, trainingEfficiency)); + } else if (slave.skill.oral <= 30) { + r.push(`Since ${he}'s sexually experienced, you work with ${him} on the finer points of oral sex.`); + r.push(App.UI.DOM.makeElement("span", `${His} oral skills have improved.`, "lime")); + r.push(slaveSkillIncrease('oral', slave, trainingEfficiency)); + } else if ((slave.skill.vaginal <= 30) && (slave.vagina > 0) && canDoVaginal(slave)) { + r.push(`Since ${he}'s sexually experienced, you work with ${him} on the finer points of penetrative sex. ${He} can already fuck pretty well, but ${his} muscular control could be improved. ${He} works ${his} Kegel muscles all week, using fingers, dildos, and your`); + if (V.PC.dick === 0) { + r.push(`strap-on`); + } else { + r.push(`cock`); + } + r.push(`as training tools. ${He} becomes expert enough that ${he} is able to make you cum without any thrusting at all by you or any riding by ${him}; ${he} just flexes ${his} muscles enough to`); + if (V.PC.dick === 0) { + r.push(`grind the fake phallus back against your cunt.`); + } else { + r.push(`stimulate you.`); + } + r.push(App.UI.DOM.makeElement("span", `${His} vaginal skills have improved.`, "lime")); + r.push(slaveSkillIncrease('vaginal', slave, trainingEfficiency)); + } else if ((slave.skill.anal <= 30) && (slave.anus > 0) && canDoAnal(slave)) { + r.push(`Since ${he}'s anally experienced, you work with ${him} on the finer points of penetrative sex. ${He} can already take it up ${his} ass, but ${his} muscular control could be improved. ${He} works ${his} Kegel muscles and anal sphincter all week, using fingers, dildos, and your`); + if (V.PC.dick === 0) { + r.push(`strap-on`); + } else { + r.push(`cock`); + } + r.push(`as training tools. ${He} becomes expert enough that ${he} is able to make you cum without any thrusting at all by you or any riding by ${him}; ${he} just flexes ${his} muscles enough to`); + if (V.PC.dick === 0) { + r.push(`squeeze the fake phallus.`); + } else { + r.push(`stimulate you.`); + } + r.push(App.UI.DOM.makeElement("span", `${His} anal skills have improved.`, "lime")); + r.push(slaveSkillIncrease('anal', slave, trainingEfficiency)); + } else if (slave.skill.vaginal <= 10 && slave.vagina >= 0) { + r.push(`Since ${he}'s vaginally unskilled,`); + if (slave.vagina === 0 && !canDoVaginal(slave)) { + r.push(`in chastity, and a virgin,`); + } else if ((slave.vagina === 0)) { + r.push(`and a virgin,`); + } else { + r.push(`and in chastity,`); + } + r.push(`you explain the basics of sex to ${him}.`); + r.push(App.UI.DOM.makeElement("span", `${His} vaginal skills have improved.`, "lime")); + r.push(slaveSkillIncrease('vaginal', slave, vaginalTrainingEfficiency)); + } else if (slave.skill.anal <= 10) { + r.push(`Since ${he}'s anally unskilled,`); + if (slave.anus === 0 && !canDoAnal(slave)) { + r.push(`an anal virgin, and in chastity,`); + } else if ((slave.anus === 0)) { + r.push(`and an anal virgin,`); + } else { + r.push(`and in anal chastity,`); + } + r.push(`you explain the basics of anal sex to ${him}.`); + r.push(App.UI.DOM.makeElement("span", `${His} anal skills have improved.`, "lime")); + r.push(slaveSkillIncrease('anal', slave, analTrainingEfficiency)); + } else if (slave.skill.oral < 100) { + r.push(`${He} is already a skilled oral whore, but ${his} skills can be polished further. You train ${him} in the basics of`); + if (V.seePee === 1) { + r.push(`urine play,`); + } + r.push(`massage, pet play, needle play, and many other niche skills. You also expand ${his} oral endurance, enabling ${him} to deepthroat for extended periods.`); + r.push(App.UI.DOM.makeElement("span", `${His} oral skills have improved.`, "lime")); + r.push(slaveSkillIncrease('oral', slave, trainingEfficiency)); + } else if ((slave.skill.vaginal < 100) && (slave.vagina > 0) && canDoVaginal(slave)) { + r.push(`${He} is already a skilled pussy slut, but ${his} skills can be polished further. You train ${him} in the basics of`); + if (V.seePee === 1) { + r.push(`urine play,`); + } + r.push(`massage, pet play, needle play, and many other niche skills. You also work with ${him} to develop a personal regimen of vaginal muscle exercises. This will enable ${him} to squeeze and massage dicks with ${his} practiced vaginal walls.`); + r.push(App.UI.DOM.makeElement("span", `${His} vaginal skills have improved.`, "lime")); + r.push(slaveSkillIncrease('vaginal', slave, trainingEfficiency)); + } else if ((slave.skill.anal < 100) && (slave.anus > 0) && canDoAnal(slave)) { + r.push(`${He} is already a skilled anal bitch, but ${his} skills can be polished further. You train ${him} in the basics of`); + if (V.seePee === 1) { + r.push(`urine play,`); + } + r.push(`massage, pet play, needle play, and many other niche skills. You also expand ${his} knowledge of sexual positions. ${He} learns to balance ${himself} on tiptoe for the challenge of standing anal sex without support.`); + r.push(App.UI.DOM.makeElement("span", `${His} sexual skills have improved.`, "lime")); + r.push(slaveSkillIncrease('anal', slave, trainingEfficiency)); + } else if (slave.skill.whoring <= 10) { + r.push(`Since ${he}'s dangerously naïve about selling sex, you teach ${him} the basics of self protection and business.`); + r.push(App.UI.DOM.makeElement("span", `${His} prostitution skills have improved.`, "lime")); + r.push(slaveSkillIncrease('whoring', slave, trainingEfficiency)); + } else if (slave.skill.entertainment <= 10) { + r.push(`Since ${he}'s rough and unskilled at entertainment, you teach ${him} the basics of polite conversation, music, and dance.`); + r.push(App.UI.DOM.makeElement("span", `${His} entertainment skills have improved.`, "lime")); + r.push(slaveSkillIncrease('entertainment', slave, trainingEfficiency)); + } else if (slave.skill.whoring <= 30) { + r.push(`Since ${he} has only basic entertainment skills, you teach ${him} to steer clients to more lucrative sex acts.`); + r.push(App.UI.DOM.makeElement("span", `${His} prostitution skills have improved.`, "lime")); + r.push(slaveSkillIncrease('whoring', slave, trainingEfficiency)); + } else if (slave.skill.entertainment <= 30) { + r.push(`Since ${he} has only basic entertainment skills, you teach ${him} more about poise and Free Cities etiquette.`); + r.push(App.UI.DOM.makeElement("span", `${His} entertainment skills have improved.`, "lime")); + r.push(slaveSkillIncrease('entertainment', slave, trainingEfficiency)); + } else if (slave.skill.whoring <= 60 && V.PC.career === "escort") { + r.push(`${He} is already a skilled whore, so you teach ${him} some of your personal tricks to squeezing every last drop from a patron.`); + r.push(App.UI.DOM.makeElement("span", `${His} prostitution skills have improved.`, "lime")); + r.push(slaveSkillIncrease('whoring', slave, trainingEfficiency)); + } else if (slave.skill.entertainment <= 60 && V.PC.career === "escort") { + r.push(`${He} is already skilled at luring in partners, so you teach ${him} some of your sexual persuasion techniques.`); + r.push(App.UI.DOM.makeElement("span", `${His} entertainment skills have improved.`, "lime")); + r.push(slaveSkillIncrease('entertainment', slave, trainingEfficiency)); + } else if (slave.skill.vaginal <= 30 && slave.vagina >= 0) { + r.push(`Since ${he} has only rudimentary vaginal skills,`); + if (slave.vagina === 0 && !canDoVaginal(slave)) { + r.push(`is in chastity, and a virgin on top of that,`); + } else if ((slave.vagina === 0)) { + r.push(`and still a virgin,`); + } else { + r.push(`and is in chastity,`); + } + r.push(`you spend time teaching ${him} sexual positions and how to someday use ${his} pussy to its potential. You have ${him} work ${his} Kegel muscles all week to prepare ${him} for the future.`); + r.push(App.UI.DOM.makeElement("span", `${His} vaginal skills have improved,`, "lime")); + r.push(`but it's a slow process without practical experience.`); + r.push(slaveSkillIncrease('vaginal', slave, vaginalTrainingEfficiency)); + } else if (slave.skill.anal <= 30) { + r.push(`Since ${he} has only rudimentary anal skills,`); + if (slave.anus === 0 && !canDoAnal(slave)) { + r.push(`is an anal virgin, and is in chastity to top it off,`); + } else if ((slave.anus === 0)) { + r.push(`and is an anal virgin,`); + } else { + r.push(`and is in anal chastity,`); + } + r.push(`you spend time teaching ${him} sexual positions and how to someday use ${his} asshole to its potential. You have ${him} work ${his} Kegel muscles and anal sphincter all week to prepare ${him} for the future.`); + r.push(App.UI.DOM.makeElement("span", `${His} anal skills have improved,`, "lime")); + r.push(`but it's a slow process without practical experience.`); + r.push(slaveSkillIncrease('anal', slave, analTrainingEfficiency)); + } else if (slave.skill.vaginal < 100 && slave.vagina >= 0) { + r.push(`${He} already a skilled pussy slut,`); + if (slave.vagina === 0 && !canDoVaginal(slave)) { + r.push(`despite ${his} chastity and virginity,`); + } else if ((slave.vagina === 0)) { + r.push(`despite still being a virgin,`); + } else { + r.push(`despite ${his} chastity,`); + } + r.push(`but lacks practical experience. You train ${him} in the basics of`); + if (V.seePee === 1) { + r.push(`urine play,`); + } + r.push(`massage, pet play, needle play, and many other niche skills. You also work with ${him} to develop a personal regimen of vaginal muscle exercises. This will enable ${him} to squeeze and massage dicks with ${his} practiced vaginal walls. You spend time expanding ${his} knowledge of sexual positions.`); + r.push(App.UI.DOM.makeElement("span", `${His} vaginal skills have improved,`, "lime")); + r.push(`but it's a slow process without proper training.`); + r.push(slaveSkillIncrease('vaginal', slave, vaginalTrainingEfficiency)); + } else if (slave.skill.anal < 100) { + r.push(`${He} already a skilled anal bitch,`); + if (slave.anus === 0 && !canDoAnal(slave)) { + r.push(`despite ${his} anus chastity and virginity,`); + } else if ((slave.anus === 0)) { + r.push(`despite still being an anal virgin,`); + } else { + r.push(`despite ${his} anal chastity,`); + } + r.push(`but lacks practical experience. You train ${him} in the basics of`); + if (V.seePee === 1) { + r.push(`urine play,`); + } + r.push(`massage, pet play, needle play, and many other niche skills. You also expand ${his} knowledge of sexual positions. ${He} learns to balance ${himself} on tiptoe for the challenge of standing anal sex without support.`); + r.push(App.UI.DOM.makeElement("span", `${His} anal skills have improved,`, "lime")); + r.push(`but it's a slow process without proper training.`); + r.push(slaveSkillIncrease('anal', slave, analTrainingEfficiency)); } else { - r.push(`${VCheck.Both(slave, 4, 2)}`); + r.push(`${He}'s learned everything you can teach, and is now a masterful`); + if (slave.skill.vaginal >= 100) { + r.push(`slut;`); + } else if ((slave.vagina === 0)) { + r.push(`virgin slut;`); + } else if (slave.dick === 0 && slave.scrotum === 0 && slave.vagina === -1) { + r.push(`null slave;`); + } else if ((slave.dick > 0) && (slave.balls === 0)) { + r.push(`gelded bitch;`); + } else if (slave.dick > 0 && slave.boobs > 300 && slave.vagina === -1) { + r.push(`shemale slut;`); + } else if ((slave.chastityVagina)) { + r.push(`slut, notwithstanding ${his} chastity belt;`); + } else { + r.push(`slave;`); + } + r.push(App.UI.DOM.makeElement("span", `${his} assignment has defaulted to fostering devotion.`, "yellow")); + pa.trainingRegimen = "build her devotion"; } - } - if (V.PC.skill.slaving >= 100) { - r.push(`Your`); - r.push(App.UI.DOM.makeElement("span", `slave training experience`, "springgreen")); - r.push(`allows you to`); - r.push(App.UI.DOM.makeElement("span", `bend ${him} to your will`, "hotpink")); - r.push(`more quickly without provoking resistance.`); - slave.devotion += 1; - } - if (slave.trust > 10) { - r.push(`Spending time with you`); - r.push(App.UI.DOM.makeElement("span", `builds ${his} trust in ${his} ${getWrittenTitle(slave)}.`, "mediumaquamarine")); - slave.trust += 4; - } else { - r.push(`Spending time with you`); - r.push(App.UI.DOM.makeElement("span", `reduces ${his} fear towards you.`, "mediumaquamarine")); - slave.trust += 6; - } - r.push(IncreasePCSkills('slaving', 0.2)); - slave.training = 0; - break; - case "look after her": - if (slave.relationship === -3 && slave.fetish === "mindbroken") { - r.push(`Since ${slave.slaveName} is your ${wife} and not all there, you keep ${him} under a watchful eye to make sure no harm comes to the broken ${girl}. ${He} almost seems in better spirits under your care, not that it will matter in an hour or two.`); - if (slave.kindness) { - slave.kindness++; + r.push(IncreasePCSkills('slaving', 0.01)); + slave.training = 0; + break; + case "break her will": + slave.devotion -= 4; + if (slave.trust > 20) { + slave.trust -= 15; } else { - slave.kindness = 1; - } - } - if (slave.health.condition < 100) { - r.push(`Your close and expert attention improves ${his} health in a way drug treatment or mere medical intervention cannot.`); - r.push(App.UI.DOM.makeElement("span", `${His} health has improved.`, "green")); - improveCondition(slave, 10); - } - if (slave.health.tired > 10) { - r.push(`You watch over ${him} as ${he} sleeps, assuring`); - r.push(App.UI.DOM.makeElement("span", `a proper night's rest.`, "green")); - slave.health.tired = Math.clamp(slave.health.tired - 10, 0, 1000); - } - if (((slave.anus >= 3) || (slave.vagina >= 3)) && slave.geneMods.rapidCellGrowth !== 1) { - r.push(`${slave.slaveName} is a veteran sex slave and has seen hard use. Tightening up a slave is difficult, but with close supervision and attention it can be done. You and your other slaves carefully apply injections, creams, and massage, and ${his} other work is carefully managed to reduce wear and tear.`); - if ((slave.anus >= 3) && (random(1, 100) > 50)) { - r.push(App.UI.DOM.makeElement("span", `${His} anus has recovered and is now merely loose.`, "orange")); - slave.anus--; - } else if ((slave.anus >= 3)) { - r.push(`${His} distended anus does not improve this week.`); + slave.trust -= 10; } - if ((slave.vagina >= 3) && (random(1, 100) > 50)) { - r.push(App.UI.DOM.makeElement("span", `${His} pussy has tightened.`, "orange")); - slave.vagina--; - } else if ((slave.vagina >= 3)) { - r.push(`${His} loose pussy does not recover this week.`); - } - } - r.push(IncreasePCSkills('slaving', 0.1)); - slave.training = 0; - break; - case "soften her behavioral flaw": - if (slave.behavioralFlaw === "none") { - r.push(`${slave.slaveName} got over ${his} behavioral flaw without you;`); - coloredText = []; - coloredText.push(`${his} training assignment has defaulted to`); - if (["abusive", "anal addict", "attention whore", "breast growth", "breeder", "cum addict", "malicious", "neglectful", "none", "self hating"].includes(slave.sexualFlaw)) { - if ((slave.devotion <= 20) && (slave.trust >= -20)) { - coloredText.push(`breaking ${his} will.`); - V.personalAttention[ptwi].trainingRegimen = "break her will"; + if (slave.devotion < -80) { + r.push(`You bind ${him} securely to a special chair in your`); + if (!canDoAnal(slave) || (slave.vagina > -1 && !canDoVaginal(slave))) { + r.push(`office with ${his} holes exposed and vulnerable.`); + } else { + r.push(`office.`); + } + r.push(`Yours is a busy week, with a lot of business interviews, so whenever the interviewee has pleased you, you offer him or her the use of the poor slave's body on the way out. The chair is specially designed so that the seat, back and armrests can rotate vertically relative to the ground, so ${his} body can be spun to make any of ${his} available holes convenient. Fortunately, it also has a pan beneath it to stop the generous stream of ejaculate and lubricant that drips from ${him} from besmirching the floor. ${He} can't help but`); + r.push(App.UI.DOM.makeElement("span", `become used to the abuse`, "gold")); + r.push(`despite ${his}`); + r.push(App.UI.DOM.makeElement("span", `resentment.`, "mediumorchid")); + r.push(`${VCheck.Both(slave, 10, 5)}`); + } else if ((slave.devotion < -60) && (slave.anus !== 0)) { + r.push(`${slave.slaveName} is really wild and stern measures must be taken. So, ${he} is`); + if (!canDoAnal(slave) || (slave.vagina > -1 && !canDoVaginal(slave))) { + r.push(`stripped of ${his} protective chastity and`); + } + r.push(`forced, struggling and screaming, into a latex suit that completely blinds, deafens, and immobilizes ${him}. So attired, the only places where ${he} can feel any sensations at all other than endless latex darkness are ${his}`); + if ((slave.dick !== 0) && (slave.vagina !== -1)) { + r.push(`pussy, and cock`); + } else if ((slave.dick !== 0)) { + r.push(`cock`); } else { - coloredText.push(`fostering devotion.`); - V.personalAttention[ptwi].trainingRegimen = "build her devotion"; + r.push(`pussy`); + } + r.push(`and backdoor. For ${him}, time becomes a featureless, torturous boredom broken only by occasional rape. Eventually, ${he} becomes so`); + r.push(App.UI.DOM.makeElement("span", `desperate`, "mediumorchid")); + r.push(`for something, anything, to break the monotony that ${he} begins to look forward to the next time a phallus will`); + r.push(App.UI.DOM.makeElement("span", `force`, "gold")); + r.push(`its way into ${him}.`); + r.push(`${VCheck.Both(slave, 6, 3)}`); + } else if ((slave.devotion < -50) && (slave.hStyle !== "shaved") && (random(1, 100) > 90)) { + r.push(`${slave.slaveName} needs to be taken down a peg. Fortunately, you know just the thing. You bring ${him} into a bathroom, place a chair in the tub, and tie ${him} securely to the chair. ${He} isn't too perturbed — ${he} probably expects a facefuck under running water or something like that — but ${he} begins to cry when ${he}`); + if (canHear(slave)) { + r.push(`hears you switch on`); + } else if (canSee(slave)) { + r.push(`sees you pull out`); + } else { + r.push(`feels the cool touch of`); + } + r.push(`an electric shaver. ${He} luxuriates in ${his} hair, flaunting it every chance ${he} gets; it's something of value in a bleak slave world and ${he} sobs as you shave it off ${him}. Afterward, ${he} sniffles and`); + r.push(App.UI.DOM.makeElement("span", `looks at you in fear`, "gold")); + r.push(`and`); + r.push(App.UI.DOM.makeElement("span", `unhappiness`, "mediumorchid")); + r.push(`when you rub ${his} newly bald scalp. Of course, there's always the body modification studio if you ever feel like ${he}'s earned ${his} hair back.`); + slave.hStyle = "shaved"; + slave.hLength = 0; + } else if (canDoAnal(slave) && (random(1, 100) < 10)) { + r.push(`Sometimes, there's no need to be clever. The first indication ${he} gets that you've decided to train ${him} this week is when ${he} wakes suddenly in the middle of the night to the burning sensation of a`); + if (V.PC.dick !== 0) { + r.push(`cock`); + } else { + r.push(`strap-on`); + } + r.push(`being shoved up ${his} ass. Not knowing what is happening, ${he} struggles, but since ${he} was already lying in ${his} bed you just lie on top of ${him} and press ${his} wriggling body into the sheets as you assrape ${him}. For the rest of the week, ${he} finds ${himself} grabbed and fucked. ${He} can't help but`); + r.push(App.UI.DOM.makeElement("span", `become used to the abuse`, "gold")); + r.push(`despite ${his}`); + r.push(App.UI.DOM.makeElement("span", `resentment.`, "mediumorchid")); + r.push(`${VCheck.Anal(slave, 6)}`); + } else if (canDoVaginal(slave) && (random(1, 100) < 10)) { + r.push(`Sometimes, there's no need to be clever. The first indication ${he} gets that you've decided to train ${him} this week is when ${he} wakes suddenly in the middle of the night to the filling sensation of a`); + if (V.PC.dick !== 0) { + r.push(`cock`); + } else { + r.push(`strap-on`); + } + r.push(`being shoved up into ${his} pussy. Not knowing what is happening, ${he} struggles, but since ${he} was already lying in ${his} bed you just lie on top of ${him} and press ${his} wriggling body into the sheets as you rape ${him}. For the rest of the week, ${he} finds ${himself} grabbed and fucked. ${He} can't help but`); + r.push(App.UI.DOM.makeElement("span", `become used to the abuse`, "gold")); + r.push(`despite ${his}`); + r.push(App.UI.DOM.makeElement("span", `resentment.`, "mediumorchid")); + r.push(`${VCheck.Vaginal(slave, 6)}`); + } else { + r.push(`${slave.slaveName} violently resists you whenever ${he} can. This cannot be permitted, so after a particularly severe bout of physical resistance, you decide to employ an old method of breaking a mind without damaging a body. You secure ${him} to a board and gently wash ${his} face with a wet cloth. ${He} spits in defiance, only to be surprised when you lower the board so that ${his} feet are higher than ${his} head. You tie the cloth around ${his} face. A thin stream of water onto the cloth produces all the feeling and none of the reality of a slow death by drowning. Waterboarding isn't much use for extracting information, but it works well for`); + r.push(App.UI.DOM.makeElement("span", `slavebreaking.`, "gold")); + } + if (V.PC.skill.slaving >= 100) { + r.push(`Your`); + r.push(App.UI.DOM.makeElement("span", `slavebreaking experience`, "springgreen")); + r.push(`allows you to apply`); + r.push(App.UI.DOM.makeElement("span", `exquisitely calibrated`, "gold")); + r.push(`mental pressure.`); + slave.trust -= 2; + } + if ((slave.trust < -20) && (slave.fetishKnown === 0)) { + r.push(`${He} is now fully broken;`); + r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to exploring ${his} sexuality.`, "yellow")); + pa.trainingRegimen = "explore her sexuality"; + r.push(IncreasePCSkills('slaving', 0.5)); + } else if ((slave.trust < -20)) { + r.push(`${He} is now fully broken;`); + r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to fostering devotion.`, "yellow")); + pa.trainingRegimen = "build her devotion"; + r.push(IncreasePCSkills('slaving', 0.5)); + } else if ((slave.devotion > 20) && (slave.fetishKnown === 0)) { + r.push(`${He} is now obedient and attentive;`); + r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to exploring ${his} sexuality.`, "yellow")); + pa.trainingRegimen = "explore her sexuality"; + r.push(IncreasePCSkills('slaving', 0.5)); + } else if ((slave.devotion > 20)) { + r.push(`${He} is now obedient and attentive;`); + r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to fostering devotion.`, "yellow")); + pa.trainingRegimen = "build her devotion"; + r.push(IncreasePCSkills('slaving', 0.5)); + } + r.push(IncreasePCSkills('slaving', 0.2)); + slave.training = 0; + break; + case "harshly break her will": + slave.devotion -= 5; + slave.trust -= 10; + healthDamage(slave, 1); + if (slave.fetish === "mindbroken") { + slave.minorInjury = either("black eye", "bruise", "split lip"); + r.push(`${slave.slaveName}'s mind is broken. ${He} is a boring slave to torture, though ${his} body will still occasionally react to intense pain. No matter what you try, nothing really reaches ${his} destroyed soul. The agonies do`); + r.push(App.UI.DOM.makeElement("span", `affect ${his} health, leaving ${him} with a ${slave.minorInjury}.`, "red")); + } else if ((slave.devotion < -90)) { + slave.minorInjury = either("black eye", "bruise", "split lip"); + r.push(`Old traditions should not be forgotten. The scourge is the oldest slavebreaking tool known to man, and to slave${girl}s who do not properly obey ${womenP}. For the whole week, whenever ${slave.slaveName} disobeys you or whenever the whim strikes, you bind ${him} securely and flog ${him} without mercy. You use a soft leather appliance and apply medical care afterward, so there will be no permanent scarring, but`); + r.push(App.UI.DOM.makeElement("span", `${his} health is affected and the beatings leave ${him} with a ${slave.minorInjury}.`, "red")); + r.push(`${He} is subjected to`); + r.push(App.UI.DOM.makeElement("span", `immense mental pressure`, "mediumorchid")); + r.push(App.UI.DOM.makeElement("span", `in favor of obedience.`, "gold")); + } else if ((slave.devotion < -50) && canDoAnal(slave)) { + slave.minorInjury = either("black eye", "bruise", "split lip"); + r.push(`${slave.slaveName} is willing to physically defend ${himself} against sexual abuse. Training ${him} out of this rebelliousness is a nice sexual change of pace. For the entire week, whenever ${he} commits some minor sin, you fight ${him} into a state of physical submission and then sodomize ${him}. This usually requires an extended beating to render ${him} quiescent, followed by holding ${him} down so that ${his} struggles do not dislodge your`); + if (V.PC.dick !== 0) { + r.push(`cock`); + } else { + r.push(`strap-on`); + } + r.push(`from ${his} delightfully spasming butthole. ${He} is subjected to`); + r.push(App.UI.DOM.makeElement("span", `immense mental pressure`, "mediumorchid")); + r.push(App.UI.DOM.makeElement("span", `in favor of obedience,`, "gold")); + r.push(`but the extreme stress`); + r.push(App.UI.DOM.makeElement("span", `affects ${his} health, leaving ${him} with a ${slave.minorInjury}.`, "red")); + r.push(`${VCheck.Anal(slave, 6)}`); + } else if ((slave.scrotum > 0)) { + slave.minorInjury = either("black eye", "bruise", "split lip"); + r.push(`${slave.slaveName} has indefensible, obvious targets for harsh breaking. Whenever ${he} falls short in the smallest way, you bind ${him} in such a way that ${his}`); + if (slave.dick) { + r.push(`cock and`); + } + r.push(`balls are dangling defenseless, and ${he} cannot move to avoid blows. You then indulge your inventiveness, applying clips, weights, and simple beatings to ${his}`); + if (slave.dick) { + r.push(`member and`); } + r.push(`sack, while beating the rest of ${him} thoroughly. ${He} is subjected to`); + r.push(App.UI.DOM.makeElement("span", `immense mental pressure`, "mediumorchid")); + r.push(App.UI.DOM.makeElement("span", `in favor of obedience,`, "gold")); + r.push(`but the beatings`); + r.push(App.UI.DOM.makeElement("span", `affect ${his} health, leaving ${him} with a ${slave.minorInjury}.`, "red")); + } else if ((slave.dick > 0)) { + slave.minorInjury = either("black eye", "bruise", "split lip"); + r.push(`${slave.slaveName} has an indefensible, obvious target for harsh breaking. Whenever ${he} falls short in the smallest way, you bind ${him} in such a way that ${his} cock is dangling defenseless, and ${he} cannot move to avoid blows. You then indulge your inventiveness, applying clips, weights, and simple beatings to ${his} member, while beating the rest of ${him} thoroughly. ${He} is subjected to`); + r.push(App.UI.DOM.makeElement("span", `immense mental pressure`, "mediumorchid")); + r.push(App.UI.DOM.makeElement("span", `in favor of obedience,`, "gold")); + r.push(`but the beatings`); + r.push(App.UI.DOM.makeElement("span", `affect ${his} health, leaving ${him} with a ${slave.minorInjury}.`, "red")); + } else if ((slave.clit > 0)) { + slave.minorInjury = either("black eye", "bruise", "split lip"); + r.push(`${slave.slaveName} has an indefensible, obvious target for harsh breaking. Whenever ${he} falls short in the smallest way, you bind ${him} in such a way that ${his} unusually large clit is visible and defenseless, and ${he} cannot move to avoid blows. You then indulge your inventiveness, applying clips, weights, and simple slaps to ${his} womanhood, while beating the rest of ${him} thoroughly. ${He} is subjected to`); + r.push(App.UI.DOM.makeElement("span", `immense mental pressure`, "mediumorchid")); + r.push(App.UI.DOM.makeElement("span", `in favor of obedience,`, "gold")); + r.push(`but the beatings`); + r.push(App.UI.DOM.makeElement("span", `affect ${his} health, leaving ${him} with a ${slave.minorInjury}.`, "red")); + } else if ((slave.nipples === "huge")) { + slave.minorInjury = either("black eye", "bruise", "split lip"); + r.push(`${slave.slaveName}'s nipples beg for punishment. Whenever ${he} falls short in the smallest way, you bind ${him} in such a way that breasts dangle, ${his} nipples are free and at your mercy, and ${he} can only move enough to cause ${his} boobs to sway erotically when ${he} flinches with pain. You then indulge your inventiveness, applying clips, weights, and simple abuse to ${his} nipples, while beating the rest of ${him} thoroughly. ${He} is subjected to`); + r.push(App.UI.DOM.makeElement("span", `immense mental pressure`, "mediumorchid")); + r.push(App.UI.DOM.makeElement("span", `in favor of obedience,`, "gold")); + r.push(`but the beatings`); + r.push(App.UI.DOM.makeElement("span", `affect ${his} health, leaving ${him} with a ${slave.minorInjury}.`, "red")); + } else if ((slave.anus > 0) && canDoAnal(slave)) { + r.push(`You bind ${slave.slaveName} with the head of an uncomfortably large dildo just inside ${his} anus. The setup offers ${him} a choice: ${he} can either stand and have only tip up ${his} butt, or ${he} can take ${his} weight off ${his} legs, and take a massive phallus up the ass. You keep ${him} like this for hours on end. At the start ${he} tries to stand all the time. Then, ${he} tries to rest on it for short periods, but realizes that this up and down motion really just leads to ${him} assraping ${himself}. Finally, ${he} becomes so`); + r.push(App.UI.DOM.makeElement("span", `tired and apathetic`, "red")); + r.push(`that ${he} accepts having a dildo up the ass, and sits down. ${He} is subjected to`); + r.push(App.UI.DOM.makeElement("span", `immense mental pressure`, "mediumorchid")); + r.push(App.UI.DOM.makeElement("span", `in favor of obedience,`, "gold")); + r.push(`but the extreme stress`); + r.push(App.UI.DOM.makeElement("span", `affects ${his} health.`, "red")); + slave.health.tired = Math.clamp(slave.health.tired + 20, 0, 1000); } else { - coloredText.push(`softening ${his} sexual flaw.`); - V.personalAttention[ptwi].trainingRegimen = "soften her sexual flaw"; + slave.minorInjury = either("black eye", "bruise", "split lip"); + r.push(`The first time you force ${slave.slaveName} to please you this week, ${he} could be forgiven for thinking sexual abuse is to be ${his} sentence. By the end of the week ${he} remembers only fearing rape as a pleasant dream. This change is due to your program of roughly using ${him} whenever ${he} shows any sign of sleeping. You reward ${him} with a short doze now and then, but ${he} is slowly reduced to a nearly insensible state of`); + r.push(App.UI.DOM.makeElement("span", `agonizing fatigue.`, "red")); + r.push(`${He} is subjected to`); + r.push(App.UI.DOM.makeElement("span", `immense mental pressure`, "mediumorchid")); + r.push(App.UI.DOM.makeElement("span", `in favor of obedience,`, "gold")); + r.push(`but the extreme stress and rough treatment`); + r.push(App.UI.DOM.makeElement("span", `affect ${his} health and leave ${him} with a ${slave.minorInjury}.`, "red")); + if (slave.health.tired < 120) { + slave.health.tired = 120; + } } - r.push(App.UI.makeElement("span", coloredText.join(" "), "yellow")); - } else { + if (slave.fetish !== "mindbroken") { + seed = random(1, 100); + if (seed > 90) { + r.push(`This abuse has shattered ${his} already-fragile self;`); + r.push(App.UI.DOM.makeElement("span", `${his} mind has been broken.`, "red")); + slave.fetish = "mindbroken"; + slave.sexualFlaw = "none"; + slave.behavioralFlaw = "none"; + } else if ((seed > 80) && (slave.behavioralFlaw !== "hates men") && (slave.behavioralFlaw !== "hates women")) { + r.push(`This abuse has associated`); + if (V.PC.dick !== 0) { + r.push(`cocks and masculinity with pain in ${his} mind;`); + r.push(App.UI.DOM.makeElement("span", `${he} now instinctively hates men.`, "red")); + slave.behavioralFlaw = "hates men"; + } else { + r.push(`pussies and femininity with pain in ${his} mind;`); + r.push(App.UI.DOM.makeElement("span", `${he} now instinctively hates women.`, "red")); + slave.behavioralFlaw = "hates women"; + } + } else if ((seed > 70) && (slave.sexualFlaw !== "odd")) { + r.push(`This abuse has changed ${him} a bit;`); + r.push(App.UI.DOM.makeElement("span", `${he} has begun to act strangely.`, "red")); + slave.behavioralFlaw = "odd"; + } + } + r.push(`A week of agony`); + if (slave.trust > 20) { + r.push(App.UI.DOM.makeElement("span", `reduces ${his} trust`, "gold")); + r.push(`in you.`); + slave.trust -= 10; + } else { + r.push(App.UI.DOM.makeElement("span", `encourages ${his} fear`, "gold")); + r.push(`of you.`); + slave.trust -= 10; + } + if (V.PC.skill.slaving >= 100) { + r.push(`Your`); + r.push(App.UI.DOM.makeElement("span", `slave-breaking experience`, "springgreen")); + r.push(`allows you to apply`); + r.push(App.UI.DOM.makeElement("span", `exquisite agony`, "gold")); + r.push(`without any increase in damage.`); + slave.trust -= 5; + } + if (slave.trust < -20) { + r.push(`${He} is now fully broken;`); + r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to fostering devotion.`, "yellow")); + pa.trainingRegimen = "build her devotion"; + r.push(IncreasePCSkills('slaving', 1)); + } else if ((slave.devotion > 20)) { + r.push(`${He} is now obedient and attentive;`); + r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to fostering devotion.`, "yellow")); + pa.trainingRegimen = "build her devotion"; + r.push(IncreasePCSkills('slaving', 1)); + } + r.push(IncreasePCSkills('slaving', 0.4)); + slave.training = 0; + break; + case "fix her behavioral flaw": if (slave.behavioralFlaw === "arrogant") { - r.push(`${slave.slaveName} thinks ${he}'s better than everyone else. ${He} has some basis for a high opinion of ${himself}; otherwise you wouldn't be bothering with ${him}. You do your best to maintain ${his} belief that ${he} has something special to offer while training ${him} to offer it to you without objection.`); + r.push(`${slave.slaveName} seems to think ${he}'s better than everyone else. Naturally, as ${his} owner you have the means to correct this sad misapprehension. As you train ${him} during the week, you ensure that ${he} submits to anyone and everyone. ${He} is rarely permitted to enjoy sex under your tutelage, but is instead required to use ${his} mouth and hands to get others off. ${He} cleans, washes, and serves.`); + seX(slave, "oral", V.PC, "penetrative", 10); } else if ((slave.behavioralFlaw === "bitchy")) { - r.push(`${slave.slaveName} always has a cutting remark ready. Some of them are actually pretty good, and you'd prefer to keep ${his} cutting wit intact. You strike a careful balance with ${him}, punishing the wrong remark at the wrong time, but rewarding appropriately biting comments.`); + r.push(`${slave.slaveName} always has a cutting remark ready. The more obedient ${he}'s feeling, the more ${he} directs them at people other than ${his} ${getWrittenTitle(slave)}, but it's still a serious problem. When you train ${him} this week, you keep a sharp ear on ${him}. Whenever ${he} bitches out, you require ${him} to promptly offer the target of ${his} pissiness the use of ${his} mouth. ${He}'ll either shut ${his} mouth or have it roughly filled.`); + seX(slave, "oral", V.PC, "penetrative", 10); } else if ((slave.behavioralFlaw === "odd")) { - r.push(`${slave.slaveName} is odd. ${He}'s usually annoying, but on occasion ${his} oddities can produce great comic relief. You strike a careful balance with ${him}, punishing ${him} when ${he} irritates you, but allowing and even rewarding harmless little idiosyncrasies.`); + r.push(`${slave.slaveName} is odd. ${He} behaves strangely, speaking randomly at times and doing things for no apparent reason. In earlier times this might have been considered 'adorable' or 'unique,' but in a slave it's just annoying. You punish ${him} severely whenever ${he} fails to do or say the right thing for the right reasons.`); } else if ((slave.behavioralFlaw === "hates men")) { - r.push(`${slave.slaveName} does not like men. ${He} desperately needs social contact, though, so you encourage ${him} to rely on women to address ${his} emotional needs. This is easy, since`); - if (V.PC.vagina !== -1) { - r.push(`you've got a pussy yourself.`); + r.push(`${slave.slaveName} does not like spending time around men. This is of course a huge obstacle to ${him} performing ${his} duties well. Breaking ${him} of this is an unusually difficult task,`); + if (V.PC.dick !== 0) { + r.push(`so you approach it subtly. You simply require ${him} to spend as much time as possible around you, eating, sleeping, and going about normal business. ${He} already understood what you were to your slaves, sexually; ${he} now is accustomed to who you are when your cock isn't pounding a nice hole.`); } else { - r.push(`there are several readily available.`); + r.push(`all the more so since you cannot use yourself as a teaching tool. Fortunately, there are any number of men coming and going as you do business, and it's trivial to force ${him} to rely on them for social contact.`); } + seX(slave, "oral", V.PC, "penetrative", 10); } else if ((slave.behavioralFlaw === "hates women")) { - r.push(`${slave.slaveName} does not like girls. ${He} desperately needs social contact, though, so you encourage ${him} to rely on men to address ${his} emotional needs. This is easy, since`); - if (V.PC.dick === 0) { - r.push(`there are several readily available.`); + r.push(`${slave.slaveName} does not like spending time around girls. This is of course a huge obstacle to ${him} performing ${his} duties well. Breaking ${him} of this is an unusually difficult task,`); + if (V.PC.dick !== 0) { + r.push(`all the more so since you cannot use your penis-equipped self as a teaching tool. Fortunately, there are any number of girls around, and it's trivial to force ${him} to rely on them for social contact.`); } else { - r.push(`you've got a cock yourself.`); + r.push(`so you approach it subtly. You simply require ${him} to spend as much time as possible around you, eating, sleeping, and going about normal business. ${He} already understood what you were to your slaves, sexually; ${he} now is accustomed to who you are when you're not fucking.`); } + seX(slave, "oral", V.PC, "penetrative", 10); } else if ((slave.behavioralFlaw === "anorexic")) { - r.push(`${slave.slaveName} suffers from anorexia. You work with ${him} patiently, applying the very best in modern therapy for this troubling condition. It's usually a product of poor self esteem, and you do your best to build ${hers} up without diminishing ${his} submission to you.`); + r.push(`${slave.slaveName} has an unreasonable, psychologically based belief that ${he} is too fat. This is a serious enough condition in the clinical sense that the usual routine of punishment will not affect it. Instead, you apply a regime of positive reinforcement: ${he} is given attention and approval for ${his} curves when they grow.`); } else if ((slave.behavioralFlaw === "gluttonous")) { - r.push(`${slave.slaveName}'s diet is already closely controlled, but the impulse to overeat is strong in ${him} and like most gluttons ${he} manages to be quite cunning. You take a hard line with ${him}, and do your best to replace ${his} addiction to the endorphin release of eating with an addiction to the endorphin release of exercise.`); + r.push(`${slave.slaveName}'s diet is already closely controlled, but the impulse to overeat is strong in ${him} and like most gluttons ${he} manages to be quite cunning. You watch ${him} closely and administer harsh punishment to associate overeating with pain in ${his} mind.`); } else if ((slave.behavioralFlaw === "liberated")) { - r.push(`${slave.slaveName} can express a decent argument for why it's wrong to use ${him} as a sex slave. With a combination of rote training, discussion, and reinforcement, you do your best to turn this into a sincere belief in the moral rightness of slavery.`); + r.push(`${slave.slaveName} has not yet accepted that ${his} world has changed. You could wait for the weight of circumstances to bear it home to ${him}, but you accelerated the process by giving ${him} as many trivial orders as possible. ${He} is required to receive orders to perform the most humiliatingly obvious of tasks.`); } else if ((slave.behavioralFlaw === "devout")) { - r.push(`${slave.slaveName} remains devoted to an old world faith that serves ${him} as a reservoir of mental resilience. Like all such beliefs, ${hers} has certain sexual elements; you amuse yourself by forcing ${him} to break them, and rewarding ${him} generously when ${he} does.`); + r.push(`${slave.slaveName} remains devoted to an old world faith that serves ${him} as a reservoir of mental resilience. You carefully select pressure points to break ${him} of this by forcing ${him} to violate ${his} faith's purity codes, constantly. ${He} is forced to eat, dress, and fuck in ways that convince ${him} that ${he} must either condemn ${himself} as an irredeemable sinner, or abandon ${his} beliefs.`); } + slave.training += 40; + // fixing is easier than softening if (slave.training < 100) { r.push(`You make progress, but ${he}'s the same at the end of the week.`); } else { slave.training = 0; r.push(`By the end of the week,`); - r.push(App.UI.DOM.makeElement("span", `you resolve ${his} flaw into something special.`, "green")); + r.push(App.UI.DOM.makeElement("span", `you break ${him} of ${his} bad habits.`, "green")); r.push(App.UI.DOM.makeElement("span", `${His} obedience has increased.`, "hotpink")); - SoftenBehavioralFlaw(slave); + slave.behavioralFlaw = "none"; slave.devotion += 4; } if (slave.fetishKnown !== 1) { @@ -381,157 +1131,240 @@ globalThis.personalAttention = function(slave) { r.push(App.UI.DOM.makeElement("span", `${he}'s a natural submissive!`, "pink")); (slave.fetishKnown = 1); } else if ((slave.fetish === "cumslut")) { - r.push(`While you're giving ${him} personal attention, you discover by chance that`); + r.push(`While you're giving ${his} personal attention, you discover by chance that`); r.push(App.UI.DOM.makeElement("span", `${he} has an oral fixation!`, "pink")); (slave.fetishKnown = 1); } else if ((slave.fetish === "masochist")) { - r.push(`While you're giving ${him} personal correction, you discover by chance that`); + r.push(`While you're giving ${his} personal correction, you discover by chance that`); r.push(App.UI.DOM.makeElement("span", `${he} likes pain!`, "pink")); (slave.fetishKnown = 1); } else if ((slave.fetish === "humiliation")) { - r.push(`While you're giving ${him} personal attention in public, you discover by chance that`); + r.push(`While you're giving ${his} personal attention in public, you discover by chance that`); r.push(App.UI.DOM.makeElement("span", `${he} likes humiliation!`, "pink")); (slave.fetishKnown = 1); } } if (slave.behavioralFlaw === "none") { - r.push(`With ${his} behavioral flaw softened,`); - coloredText = []; - r.push(`${his} training assignment has defaulted to`); + r.push(`With ${his} behavioral flaw trained out,`); if (slave.sexualFlaw === "none") { if ((slave.devotion <= 20) && (slave.trust >= -20)) { - coloredText.push(`breaking ${his} will.`); - V.personalAttention[ptwi].trainingRegimen = "break her will"; + r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to breaking ${his} will.`, "yellow")); + pa.trainingRegimen = "break her will"; } else { - coloredText.push(`fostering devotion.`); - V.personalAttention[ptwi].trainingRegimen = "build her devotion"; + r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to fostering devotion.`, "yellow")); + pa.trainingRegimen = "build her devotion"; } } else { - coloredText.push(`softening ${his} sexual flaw.`); - V.personalAttention[ptwi].trainingRegimen = "soften her sexual flaw"; - } - r.push(App.UI.makeElement("span", coloredText.join(" "), "yellow")); - } - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "soften her sexual flaw": - if (slave.sexualFlaw === "none") { - r.push(`${slave.slaveName} got over ${his} sexual flaw without you,`); - coloredText = []; - coloredText.push(`${his} training assignment has defaulted to`); - if (slave.behavioralFlaw === "none") { - if ((slave.devotion <= 20) && (slave.trust >= -20)) { - coloredText.push(`breaking ${his} will.`); - V.personalAttention[ptwi].trainingRegimen = "break her will"; - } else { - coloredText.push(`fostering devotion.`); - V.personalAttention[ptwi].trainingRegimen = "build her devotion"; + r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to addressing ${his} sexual flaw.`, "yellow")); + pa.trainingRegimen = "fix her sexual flaw"; } - } else { - coloredText.push(`softening ${his} behavioral flaw.`); - V.personalAttention[ptwi].trainingRegimen = "soften her behavioral flaw"; } - r.push(App.UI.makeElement("span", coloredText.join(" "), "yellow")); - } else { - r.push(`${slave.slaveName}`); + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "fix her sexual flaw": switch (slave.sexualFlaw) { case "hates oral": - r.push(`has a powerful gag reflex. Though it would be simpler to train ${him} out of it, you do your best to train ${him} to safely take a rough facefuck without losing the fun aspects of forcing a slave to swallow a phallus, like the struggles, the gagging, and the tears.`); + r.push(`${slave.slaveName} has a powerful gag reflex. As a result, it's pretty unpleasant to receive oral sex from ${him}, no matter how hard ${he} tries. You apply various inventive techniques for addressing this, all of which involve requiring ${him} to repeatedly deepthroat some object or other.`); seX(slave, "oral", V.PC, "penetrative", 10); break; case "hates anal": - r.push(`does not like it up the butt. Though it would be simpler to train ${him} out of it, you do your best to train ${him} to safely take a rough buttfuck without losing the fun aspects of anal rape, like the struggles, the whining, and the tears.`); if (canDoAnal(slave)) { + r.push(`${slave.slaveName} does not like it up the butt. ${He} views ${his} rectum as a dirty place that should not be involved in sex. Naturally, this is an unacceptable view for a Free Cities sex slave to hold. The best way to address this foolishness is by long practice, so you take every opportunity to stick things up ${his} behind, and when you bore of that, you require ${him} to assfuck ${himself} with a dildo instead.`); r.push(`${VCheck.Anal(slave, 10)}`); } else { - r.push(`The inability to actually penetrate ${his} ass hinders your efforts, however.`); + r.push(`${slave.slaveName} does not like it up the butt. ${He} views ${his} rectum as a dirty place that should not be involved in sex. Naturally, this is an unacceptable view for a Free Cities sex slave to hold. The best way to address this foolishness is by long practice, so you take every opportunity to toy with ${his} rear. The inability to actually penetrate ${his} ass hinders your efforts, however.`); slave.training -= 20; // more difficult training } break; case "hates penetration": - if ((slave.vagina > -1) && canDoVaginal(slave)) { - r.push(`does not like sex. Though it would be simpler to train ${him} out of it, you do your best to train ${him} to safely take a hard pounding without losing the fun aspects of forced sex, like the struggles, the whining, and the tears.`); - r.push(`${VCheck.Vaginal(slave, 10)}`); + if (slave.vagina > -1) { + r.push(`${slave.slaveName} does not like sex. In earlier times, it was accepted and understood that some, particularly some women, had a low sex drive. No Free Cities sex slave is allowed to engage in such foolishness. It's a hard flaw to fix, and for now you substitute obedience for honest enjoyment, and just get ${him} used to strong stimulation without putting anything in ${him}.`); } else if (canDoAnal(slave)) { - r.push(`does not like it up the butt. Though it would be simpler to train ${him} out of it, you do your best to train ${him} to safely take a rough buttfuck without losing the fun aspects of anal rape, like the struggles, the whining, and the tears.`); + r.push(`${slave.slaveName} does not like it up the butt. ${He} views ${his} rectum as a dirty place that should not be involved in sex. Naturally, this is an unacceptable view for a Free Cities slut to hold. The best way to address this foolishness is by long practice, so you take every opportunity to stick things up ${his} behind, and when you bore of that, you require ${him} to assfuck ${himself} instead.`); r.push(`${VCheck.Anal(slave, 10)}`); } else { - r.push(`does not dicks in ${his} mouth. Though it would be simpler to train ${him} out of it, you do your best to train ${him} to safely take a rough facefuck without losing the fun aspects of forcing a slave to swallow a phallus, like the struggles, the gagging, and the tears.`); - seX(slave, "oral", V.PC, "penetrative", 10); + r.push(`${slave.slaveName} does not like it up the butt. ${He} views ${his} rectum as a dirty place that should not be involved in sex. Naturally, this is an unacceptable view for a Free Cities slut to hold. It's a hard flaw to fix when you can't introduce ${his} anus to things, but for now you substitute obedience for honest enjoyment, and just get ${him} used to strong stimulation without putting anything in ${him}.`); } break; case "apathetic": - r.push(`doesn't put out much effort when having sex. You do your best to redirect this apathy into caring for ${his} partners; since ${he} obviously doesn't think much of ${himself}, ${he} can spare the effort.`); + r.push(`You are well practiced at forcing slaves to get you off or suffer punishment. To address ${slave.slaveName}'s sexual apathy, you adapt the method by requiring ${him} to work ${his} mouth under your desk while you do business. ${He} does all the work, start to finish, and ${he} does it well if ${he} wants to avoid pain.`); seX(slave, "oral", V.PC, "penetrative", 10); break; case "crude": - r.push(`does not pay enough attention to standards when having sex, leading to crude comments and unsexy noises. To remedy this, you have ${him} give you oral regularly: a sacrifice, but you make sacrifices for your slaves' improvement. Oral sex can be difficult to make elegant, but you work with ${him} to make it as pretty as possible, even when you require ${him} to apply ${his} mouth to some of the less common erogenous zones. You do your best to retain ${his} sexual openness while making ${him} more sexually presentable.`); + r.push(`${slave.slaveName} does not pay enough attention to standards when having sex, leading to crude comments and unsexy noises. To remedy this, you have ${him} give you oral regularly: a sacrifice, but you make sacrifices for your slaves' improvement. Oral sex can be difficult to make elegant, but you work with ${him} to make it as pretty as possible, and spank ${him} cruelly when ${he} fails.`); seX(slave, "oral", V.PC, "penetrative", 10); break; case "judgemental": - r.push(`has a bad habit of being sexually judgemental, belittling anyone who doesn't live up to ${his} pretensions of standards. You do your best to train ${him} to perform regardless of ${his} partners' endowments, aiming for a delicate balance that will allow ${him} to get off with anyone while permitting ${him} to retain and even build on ${his} appetite for big dicks. You permit ${him} to achieve release only when ${he}'s done well with`); + r.push(`${slave.slaveName} has a bad habit of being sexually judgemental, belittling anyone who doesn't live up to ${his} pretensions of standards. To ${his} regret, ${he} frequently implies that ${he} prefers partners with big dicks: regret, because whenever ${he}'s caught doing this, you have ${him} brought to you and`); if (V.PC.dick !== 0) { - r.push(`your thick cock`); + r.push(`apply your big dick`); } else { - r.push(`a fat dildo`); + r.push(`apply a big dildo`); } - if (slave.vagina > 0 && canDoVaginal(slave)) { - r.push(`lodged up ${his} cunt.`); - r.push(`${VCheck.Vaginal(slave, 10)}`); - } else if (slave.anus > 0 && canDoAnal(slave)) { - r.push(`lodged up ${his} butt.`); + if ((slave.anus > 0) && canDoAnal(slave)) { + r.push(`to ${his} anus without mercy.`); r.push(`${VCheck.Anal(slave, 10)}`); } else { - r.push(`down ${his} throat.`); + r.push(`to ${his} gagging throat.`); seX(slave, "oral", V.PC, "penetrative", 10); } break; case "shamefast": - r.push(`is shamefast. You do your best to train ${him} out of this, but carefully retain the essential core of embarrassment, aiming for a slave that can use ${his} body to titillate the viewer and then offer an authentic blush at ${himself}.`); + r.push(`Fortunately, shamefastness is a simple problem to break. Whenever you feel the inclination, you strip ${slave.slaveName} naked, drag ${him} out into whatever public space catches your fancy, and force ${him} to`); + if (V.PC.dick !== 0) { + r.push(`suck your dick.`); + } else { + r.push(`eat you out.`); + } + r.push(`To make sure ${he}'s really working over ${his} shame despite having ${his} face buried against you, you force ${him} to spread ${his} buttocks to show off ${his} asshole while ${he}`); + if (V.PC.dick !== 0) { + r.push(`sucks.`); + } else { + r.push(`licks you.`); + } seX(slave, "oral", V.PC, "penetrative", 10); break; case "idealistic": - r.push(`still sees sex in a naïve light, hoping to be romanced, teased to arousal, and asked permission. Training ${him} directly out of this would shatter the poor ${girl}'s world, so you work with ${him} carefully, doing your best to keep sex special for ${him}.`); + r.push(`${slave.slaveName} still sees sex in a naïve light, hoping to be romanced, teased to arousal, and asked permission. This might be an annoyingly ignorant outlook if it wasn't so amusing to break. By the tenth time you slap ${his} ${slave.skin} face at the slightest hesitation to`); + if (V.PC.dick !== 0) { + r.push(`suck your cock,`); + } else { + r.push(`eat your pussy,`); + } + r.push(`${his} illusions are guttering low.`); + seX(slave, "oral", V.PC, "penetrative", 10); break; case "repressed": - r.push(`is repressed. You strike a delicate balance with ${him}, doing your best to train ${him} to fuck as a sex slave should, but trying to retain the rush of doing the forbidden that makes ${him} flush, shiver, and moan.`); + r.push(`${slave.slaveName}'s innocence and hesitations about sex are unlikely to survive much longer, but you decide to hurry the process along by making ${him}`); + if (V.PC.dick !== 0) { + r.push(`eat dick`); + } else { + r.push(`eat your pussy`); + } + r.push(`while masturbating. ${He}'s repressed enough that masturbation is still a partial punishment for ${him}, but ${he} usually gets ${himself} off anyway, shaking with release and sobbing with crushed illusions.`); seX(slave, "oral", V.PC, "penetrative", 10); break; - case "abusive": + case "cum addict": + r.push(`${slave.slaveName} is utterly addicted to cum. You keep ${him} in your office whenever you can, and subject ${him} to a strict sexual diet of`); + if (canDoVaginal(slave)) { + r.push(`sex,`); + } else if (canDoAnal(slave)) { + r.push(`buttsex,`); + } else { + r.push(`breast play,`); + } + r.push(`no oral allowed, no matter how much ${he} begs to be permitted to`); + if (V.PC.dick !== 0) { + r.push(`suck you off.`); + } else { + r.push(`eat you out.`); + } + if (canDoVaginal(slave)) { + VCheck.Vaginal(slave, 10); + } else if (canDoAnal(slave)) { + VCheck.Anal(slave, 10); + } + break; case "anal addict": + r.push(`${slave.slaveName} is utterly addicted to buttsex. You keep ${him} in your office whenever you can, and subject ${him} to a strict sexual diet of`); + if (canDoVaginal(slave)) { + r.push(`vanilla sex,`); + } else { + r.push(`oral and manual intercourse,`); + } + r.push(`no anal allowed, no matter how much ${he} begs you to stick something, anything, up ${his} ass.`); + if ((slave.vagina > -1) && canDoVaginal(slave)) { + VCheck.Vaginal(slave, 10); + } else { + seX(slave, "oral", V.PC, "penetrative", 10); + } + break; case "attention whore": + r.push(`${slave.slaveName} is an obnoxious attention whore. You keep ${him} in your office and make love to ${him} whenever you can, but only whenever you're alone in the office. You even instruct ${V.assistant.name} not to bother you while the slave is receiving ${his} therapy.`); + if (canDoVaginal(slave)) { + VCheck.Vaginal(slave, 10); + } else if (canDoAnal(slave)) { + VCheck.Anal(slave, 10); + } + break; case "breast growth": - case "breeder": - case "cum addict": + r.push(`${slave.slaveName} is completely devoted to ${his} own tits. You keep ${him} in your office whenever you can,`); + if (canDoVaginal(slave)) { + r.push(`fucking ${him}`); + } else if (canDoAnal(slave)) { + r.push(`fucking ${his} ass`); + } else { + r.push(`fucking ${his} face`); + } + r.push(`in positions that offer ${his} boobs no stimulation at all. When you're not broadening ${his} sexual horizons, ${he}'s restrained to keep ${him} from touching ${his} own nipples, despite piteous begging.`); + if (canDoVaginal(slave)) { + VCheck.Vaginal(slave, 10); + } else if (canDoAnal(slave)) { + VCheck.Anal(slave, 10); + } + break; + case "abusive": case "malicious": - case "neglectful": + r.push(`${slave.slaveName} seems to have forgotten that ${he}'s your bitch, so you remind ${him}. You keep ${him} in your office whenever ${he}'s not otherwise occupied, and hold ${him} down and fuck ${him} whenever you feel like it. It's been a long time since ${he} was on the bottom this regularly.`); + if (canDoVaginal(slave)) { + VCheck.Vaginal(slave, 10); + } else if (canDoAnal(slave)) { + VCheck.Anal(slave, 10); + } + break; case "self hating": - r.push(`has a paraphilia. Typical methods will have no effect on this kind of flaw.`); - slave.training = 0; - coloredText = []; - coloredText.push(`${His} training assignment has defaulted to`); - if ((slave.devotion <= 20) && (slave.trust >= -20)) { - coloredText.push(`breaking ${his} will.`); - V.personalAttention[ptwi].trainingRegimen = "break her will"; + r.push(`${slave.slaveName} hates ${himself} much more than is normal for a well trained sex slave, to the point where ${he} actively seeks out unhealthy and destructive assignments. You build up ${his} sexual self esteem with a steady diet of`); + if (canDoVaginal(slave)) { + r.push(`missionary lovemaking,`); + } else if (canDoAnal(slave)) { + r.push(`gentle anal loving,`); } else { - coloredText.push(`fostering devotion.`); - V.personalAttention[ptwi].trainingRegimen = "build her devotion"; + r.push(`gentle oral sex,`); + } + r.push(`and make sure to praise ${him} and keep ${his} spirits up as much as you can.`); + if (canDoVaginal(slave)) { + VCheck.Vaginal(slave, 10); + } else if (canDoAnal(slave)) { + VCheck.Anal(slave, 10); + } + break; + case "neglectful": + r.push(`${slave.slaveName} has given up on ${his} own sexual pleasure to an extent, focusing only on getting others off. You keep ${him} in your office and play with ${him} regularly, making a game of getting ${him} off as often as possible. You're careful to use other slaves for your own pleasure.`); + if (canDoVaginal(slave)) { + VCheck.Vaginal(slave, 10); + } else if (canDoAnal(slave)) { + VCheck.Anal(slave, 10); } - r.push(App.UI.makeElement("span", coloredText.join(" "), "yellow")); break; - default: - r.push(`has something. You should probably report this as nobody knows what is currently happening. ${His} flaw was supposed to be ${slave.sexualFlaw}.`); + case "breeder": + r.push(`${slave.slaveName} has become so sexually obsessed with pregnancy that impregnation holds less interest for ${him} than being pregnant.`); + if (slave.pregKnown === 1) { + r.push(`Since ${he}'s pregnant, getting ${him} out of this perversion is more difficult than just fucking ${him}.`); + } else if (!canDoAnal(slave)) { + r.push(`Fortunately, all slaves have a convenient hole in which they can be fucked without even the slightest danger of pregnancy.`); + r.push(`Since ${his} ass is off-limits, you address the situation by fucking ${his} throat, and making sure ${he} enjoys it, too.`); + seX(slave, "oral", V.PC, "penetrative", 10); + } else if (slave.mpreg === 1) { + r.push(`Fortunately, all slaves have a convenient hole in which they can be fucked without even the slightest danger of pregnancy, which, in ${his} case, is not ${his} fertile ass.`); + r.push(`So, you address the situation by fucking ${his} throat, and making sure ${he} enjoys it, too.`); + seX(slave, "oral", V.PC, "penetrative", 10); + } else { + r.push(`Fortunately, all slaves have a convenient hole in which they can be fucked without even the slightest danger of pregnancy.`); + r.push(`So, you address the situation by fucking ${him} up the ass, and making sure ${he} gets off to it, too.`); + r.push(`${VCheck.Anal(slave, 10)}`); + } } + slave.training += 40; + // fixing is easier than softening if (slave.training < 100) { r.push(`You make progress, but ${he}'s the same at the end of the week.`); } else { slave.training = 0; r.push(`By the end of the week,`); - r.push(App.UI.DOM.makeElement("span", `you resolve ${his} flaw into something special.`, "green")); + r.push(App.UI.DOM.makeElement("span", `you break ${him} of ${his} bad habits.`, "green")); r.push(App.UI.DOM.makeElement("span", `${His} obedience has increased.`, "hotpink")); - SoftenSexualFlaw(slave); + slave.sexualFlaw = "none"; slave.devotion += 4; } if (slave.fetishKnown !== 1) { @@ -554,1515 +1387,689 @@ globalThis.personalAttention = function(slave) { } } if (slave.sexualFlaw === "none") { - r.push(`With ${his} sexual flaw softened,`); + r.push(`With ${his} sexual flaw trained out,`); coloredText = []; - r.push(`${his} training assignment has defaulted to`); + coloredText.push(`${his} training assignment has defaulted to`); if (slave.behavioralFlaw === "none") { if ((slave.devotion <= 20) && (slave.trust >= -20)) { coloredText.push(`breaking ${his} will.`); - V.personalAttention[ptwi].trainingRegimen = "break her will"; + pa.trainingRegimen = "break her will"; } else { coloredText.push(`fostering devotion.`); - V.personalAttention[ptwi].trainingRegimen = "build her devotion"; + pa.trainingRegimen = "build her devotion"; } } else { - coloredText.push(`softening ${his} behavioral flaw.`); - V.personalAttention[ptwi].trainingRegimen = "soften her behavioral flaw"; - } - r.push(App.UI.makeElement("span", coloredText.join(" "), "yellow")); - } - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "learn skills": - trainingEfficiency = 10 + Math.trunc(slave.devotion / 30) + Math.floor(slave.intelligence / 32); - if (V.PC.career === "escort") { - r.push(`You are well-versed in sexual techniques and how to employ them, giving you an edge in teaching ${him}.`); - trainingEfficiency += 10; - } - if (slave.vagina >= 0) { - if (!canDoVaginal(slave) && slave.vagina === 0) { - vaginalTrainingEfficiency = Math.trunc(trainingEfficiency / 4); - } else if (slave.vagina === 0 || !canDoVaginal(slave)) { - vaginalTrainingEfficiency = Math.trunc(trainingEfficiency / 2); - } - } - if (!canDoAnal(slave) && slave.anus === 0) { - analTrainingEfficiency = Math.trunc(trainingEfficiency / 4); - } else if (slave.anus === 0 || !canDoAnal(slave)) { - analTrainingEfficiency = Math.trunc(trainingEfficiency / 2); - } - if (slave.devotion > 50) { - r.push(`${He}'s devoted to you, making sexual training much easier.`); - } else if (slave.devotion > 20) { - r.push(`${He}'s accepted ${his} place as a sex slave, making sexual training easier.`); - } else if (slave.devotion < -20) { - r.push(`${He}'s unhappy being a sex slave, making sexual training harder.`); - } - if (slave.intelligence + slave.intelligenceImplant > 15) { - r.push(`${His} intelligence allows ${him} to absorb ${his} lessons quickly.`); - } else if (slave.intelligence + slave.intelligenceImplant < -15) { - r.push(`${His} stupidity makes ${him} absorb ${his} lessons slowly.`); - } - if (slave.skill.oral <= 10) { - r.push(`Since ${he}'s orally unskilled, you start with ${his} mouth. ${He}`); - if (V.PC.dick !== 0) { - r.push(`sucks your dick,`); + coloredText.push(`addressing ${his} behavioral flaw.`); + pa.trainingRegimen = "fix her behavioral flaw"; + } + r.push(App.UI.DOM.makeElement("span", coloredText.join(" "), "yellow")); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "explore her sexuality": + slave.attrKnown = 1; + r.push(`You set about investigating ${his} sexuality.`); + if ((slave.devotion < -20) && (slave.trust >= -20)) { + r.push(`${He}'s so resistant that you have to fill ${him} with psychoactive drugs and restrain ${him} painfully in order to learn anything. This abuse`); + r.push(App.UI.DOM.makeElement("span", `increases ${his} hatred.`, "mediumorchid")); + slave.devotion -= 5; + } else if (slave.devotion <= 20) { + r.push(`You anticipate that ${he} won't be sufficiently compliant with some of the extreme practices you mean to investigate, so you give ${him} a hearty dose of aphrodisiacs and place ${him} in bondage gear. ${He} isn't happy, but soon ${he}'s too horny to care.`); + } else { + r.push(`${He}'s obedient enough that there is no trouble with any of the sexual kinks you subject ${him} to. Some ${he} likes more than others, but when ${he}'s not enjoying ${himself}, ${he} grits ${his} teeth and concentrates on obeying you.`); + } + r.push(`You start off by making ${him} view a medley of pornography while ${V.assistant.name} monitors ${him} for arousal. It seems ${he} is`); + if (slave.attrXY <= 5) { + r.push(App.UI.DOM.makeElement("span", `disgusted by men`, "red")); + } else if (slave.attrXY <= 15) { + r.push(App.UI.DOM.makeElement("span", `turned off by men`, "red")); + } else if (slave.attrXY <= 35) { + r.push(App.UI.DOM.makeElement("span", `not attracted to men`, "red")); + } else if (slave.attrXY <= 65) { + r.push(`indifferent to men,`); + } else if (slave.attrXY <= 85) { + r.push(App.UI.DOM.makeElement("span", `attracted to men`, "green")); + } else if (slave.attrXY <= 95) { + r.push(App.UI.DOM.makeElement("span", `aroused by men`, "green")); } else { - r.push(`eats you out,`); + r.push(App.UI.DOM.makeElement("span", `passionate about men`, "green")); } - r.push(`of course, but ${his} training is more creative than just that. You give ${him}`); - if (canTaste(slave)) { - r.push(`delicious`); + r.push(`and`); + if (slave.attrXX <= 5) { + r.push(App.UI.DOM.makeElement("span", `disgusted by women.`, "red")); + } else if (slave.attrXX <= 15) { + r.push(App.UI.DOM.makeElement("span", `turned off by women.`, "red")); + } else if (slave.attrXX <= 35) { + r.push(App.UI.DOM.makeElement("span", `not attracted to women.`, "red")); + } else if (slave.attrXX <= 65) { + r.push(`indifferent to women.`); + } else if (slave.attrXX <= 85) { + r.push(App.UI.DOM.makeElement("span", `attracted to women.`, "green")); + } else if (slave.attrXX <= 95) { + r.push(App.UI.DOM.makeElement("span", `aroused by women.`, "green")); } else { - r.push(`sugary`); - } - r.push(`hard candies to suck and feed ${him} phallic fruits and vegetables that ${he} must deepthroat before ${he} can eat. As ${his} skill improves, ${he} wears a gag with an inward-facing dildo, which is swapped out for a bigger size every so often. You only let ${him} orgasm when ${he}'s sucking, and before long ${he}'s associating giving someone oral pleasure with experiencing pleasure ${himself}.`); - r.push(App.UI.DOM.makeElement("span", `${His} oral skills have improved.`, "lime")); - r.push(slaveSkillIncrease('oral', slave, trainingEfficiency)); - } else if (slave.skill.vaginal <= 10 && slave.vagina > 0 && canDoVaginal(slave)) { - r.push(`Since ${he}'s vaginally unskilled, and not a virgin, you start with ${his} pussy.`); - r.push(App.UI.DOM.makeElement("span", `${His} vaginal skills have improved.`, "lime")); - r.push(slaveSkillIncrease('vaginal', slave, trainingEfficiency)); - } else if (slave.skill.anal <= 10 && slave.anus > 0 && canDoAnal(slave)) { - r.push(`Since ${he}'s anally unskilled, and not an anal virgin, you start with ${his} ass.`); - r.push(App.UI.DOM.makeElement("span", `${His} anal skills have improved.`, "lime")); - r.push(slaveSkillIncrease('anal', slave, trainingEfficiency)); - } else if (slave.skill.oral <= 30) { - r.push(`Since ${he}'s sexually experienced, you work with ${him} on the finer points of oral sex.`); - r.push(App.UI.DOM.makeElement("span", `${His} oral skills have improved.`, "lime")); - r.push(slaveSkillIncrease('oral', slave, trainingEfficiency)); - } else if ((slave.skill.vaginal <= 30) && (slave.vagina > 0) && canDoVaginal(slave)) { - r.push(`Since ${he}'s sexually experienced, you work with ${him} on the finer points of penetrative sex. ${He} can already fuck pretty well, but ${his} muscular control could be improved. ${He} works ${his} Kegel muscles all week, using fingers, dildos, and your`); - if (V.PC.dick === 0) { - r.push(`strap-on`); + r.push(App.UI.DOM.makeElement("span", `passionate about women.`, "green")); + } + if (slave.fetishKnown !== 1) { + slave.fetishKnown = 1; + App.Events.addParagraph(el, r); + r = []; + r.push(`You then give ${him} a good exploratory fondle. You play with ${his} nipples and each of ${his} holes and gauge ${his} reaction.`); + if (slave.fetish === "boobs") { + r.push(`You've barely touched ${his} nipples before ${he} moans. After some experimentation, it becomes clear that ${his} nipples might as well be a pair of slightly less sensitive`); + if (slave.nipples === "fuckable") { + r.push(`pussies.`); + } else { + r.push(`clits.`); + } + r.push(`Finding ${his} mammary fixation with you has`); + r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, "hotpink")); + slave.devotion += 4; + } else if (slave.fetish === "buttslut") { + if (slave.vagina >= 0) { + r.push(`When you move from fingering ${his} pussy to ${his} asshole,`); + } else { + r.push(`When you move from fondling ${his} mouth to ${his} asshole,`); + } + r.push(`you've barely touched ${his} butt before ${he} comes explosively. After some experimentation, it becomes clear that ${his} g-spot might as well be located up ${his} ass. Finding ${his} anal fixation with you has`); + r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, "hotpink")); + slave.devotion += 4; + } else if (slave.energy > 95) { + r.push(`${He} shows no real reaction when you move your fingers from hole to hole, because ${he} seems to react with arousal to fingers in any of them.`); + } else { + r.push(`Nothing unusual happens.`); + } + App.Events.addParagraph(el, r); + r = []; + r.push(`Next, you demand extreme submission from ${him}. You make ${him} change into bondage gear that blinds ${him}, restricts ${his} movement, forces ${him} to present ${his} breasts uncomfortably, and holds vibrators against ${him}. Thus attired, ${he} is forced to serve you in whatever petty ways occur to you.`); + if (slave.fetish === "submissive") { + r.push(`During the first hour of this treatment, ${he} cums hard against the vibrators. ${He}'s a natural submissive! Discovering this about ${himself} under your hands has`); + r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, "hotpink")); + slave.devotion += 4; + } else if (slave.energy > 95) { + r.push(`${He} complies, showing the same enthusiasm for this as for other sex.`); + } else { + r.push(`${He} complies, but ${he}'s not a natural submissive.`); + } + App.Events.addParagraph(el, r); + r = []; + r.push(`Before you let ${him} out of the extreme bondage, you rain a series of light blows across ${his} nipples and buttocks.`); + if (slave.fetish === "masochist") { + r.push(`${He} almost orgasms at the stinging pain. ${He}'s a masochist! This discovery has`); + r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, "hotpink")); + slave.devotion += 4; + } else if (slave.energy > 95) { + r.push(`${He} enjoys the pain play, but ${he} seems to enjoy everything you try.`); + } else { + r.push(`${He} struggles and tries to avoid the blows.`); + } + App.Events.addParagraph(el, r); + r = []; + r.push(`The next day, ${he} continues to accompany you. Whenever cum is involved in your day's affairs in any way, you require ${him} to clean it up with ${his} mouth.`); + if (slave.fetish === "cumslut") { + r.push(`${He} enjoys this treatment. ${He}'s a cumslut! Discovering this about ${himself} under your hands has`); + r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, "hotpink")); + slave.devotion += 4; + } else if (slave.energy > 95) { + r.push(`${He} enjoys using ${his} mouth, but no more than other kinds of sexual activity.`); + } else { + r.push(`If ${he} had any special regard for cum, you'd know it, and ${he} doesn't.`); + } + const {himU, hisU, girlU} = getNonlocalPronouns(0).appendSuffix('U'); + App.Events.addParagraph(el, r); + r = []; + r.push(`You carefully watch ${his} reaction as you let ${him} spend a short time relaxing with a pregnant slave.`); + if (slave.fetish === "pregnancy") { + r.push(`${He}'s fascinated. ${He} fetishizes fertility! Discovering this with you has`); + r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, "hotpink")); + slave.devotion += 4; + } else if (slave.energy > 95) { + r.push(`${He} spends most of the rest ogling the pregnant slave's boobs.`); + } else { + r.push(`${He} simply enjoys the rest.`); + } + App.Events.addParagraph(el, r); + r = []; + r.push(`You restrain the pregnant slave and administer a brief beating across ${hisU} bare buttocks, ensuring that you cause enough pain to produce a few tears, a bit of begging, and some struggling.`); + if (slave.fetish === "sadist") { + r.push(`${He}'s almost painfully aroused. ${He}'s titillated by the idea of causing pain! Discovering this about ${himself} under your direction has`); + r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, "hotpink")); + slave.devotion += 4; + } else if (slave.energy > 95) { + r.push(`${He} enjoys watching the poor pregnant slave wriggle, but ${he}'s watching ${hisU} butt rather than the beating.`); + } else { + r.push(`${He}'s a bit disturbed by the`); + if (canSee(slave)) { + r.push(`sight`); + } else if (canHear(slave)) { + r.push(`sound`); + } else { + r.push(`idea`); + } + r.push(`of you punishing the pregnant ${girlU}.`); + } + App.Events.addParagraph(el, r); + r = []; + r.push(`Before letting the poor pregnant slave go, you require ${slave.slaveName} to add a blindfold to the restraints.`); + if (slave.fetish === "dom") { + r.push(`${He} seems to really enjoy blindfolding the poor ${girlU}, reassuring ${himU} as ${he} does. ${He}'s a natural sexual top! Discovering this about ${himself} under your direction has`); + r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, "hotpink")); + slave.devotion += 4; + } else if (slave.energy > 95) { + r.push(`${He} enjoys getting closer to the slave, mostly so ${he} can give ${hisU} pregnant pussy a thorough grope.`); + } else { + r.push(`${He} just follows orders.`); + } + App.Events.addParagraph(el, r); + r = []; + r.push(`Lastly, you place ${him} in a special room in your penthouse filled with live video equipment. They get to see ${him} groped, deepthroated, facialed, teased, and tortured.`); + if (slave.fetish === "humiliation") { + r.push(`The more viewers ${he} gets, the harder ${he} comes. ${He}'s a slut for humiliation! Discovering this about ${himself} under your hands has`); + r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, "hotpink")); + slave.devotion += 4; + } else if (slave.energy > 95) { + r.push(`${He} enjoys showing off sexually, but focuses on the sex first. ${He} got off on everything, and is clearly a nympho. Discovering this about ${himself} under your hands has`); + r.push(App.UI.DOM.makeElement("span", `greatly increased ${his} devotion to you.`, "hotpink")); + slave.devotion += 9; + } else { + r.push(`${He} gets through it, but ${he} doesn't seem to enjoy`); + if (canSee(slave)) { + r.push(`seeing ${his} audience on the screen.`); + } else if (canHear(slave)) { + r.push(`hearing ${his} jeering audience on the screen.`); + } else { + r.push(`the feeling of being watched.`); + } + } } else { - r.push(`cock`); + App.Events.addParagraph(el, r); + r = []; + r.push(`You already know that ${he}`); + switch (slave.fetish) { + case "buttslut": + case "cumslut": + case "dom": + case "masochist": + case "sadist": + case "submissive": + r.push(`is a`); + r.push(App.UI.DOM.makeElement("span", `${slave.fetish},`, "coral")); + break; + case "mindbroken": + r.push(`is`); + r.push(App.UI.DOM.makeElement("span", `mindbroken,`, "red")); + break; + case "boobs": + case "humiliation": + case "pregnancy": + r.push(`loves`); + r.push(App.UI.DOM.makeElement("span", `${slave.fetish},`, "coral")); + break; + default: + r.push(`lacks a fetish,`); + } + r.push(`so your investigation is complete.`); } - r.push(`as training tools. ${He} becomes expert enough that ${he} is able to make you cum without any thrusting at all by you or any riding by ${him}; ${he} just flexes ${his} muscles enough to`); - if (V.PC.dick === 0) { - r.push(`grind the fake phallus back against your cunt.`); + r.push(basicTrainingDefaulter(slave)); + r.push(IncreasePCSkills('slaving', 0.1)); + break; + case "induce arrogance": + r.push(`Since you've decided to incite ${him} to arrogance, you praise ${him} effusively, and give orders that others are to do so as well. Other slaves are punished for things ${he}'s allowed to get away with.`); + r.push(induceFlawLenityEffects(slave)); + if (slave.training < 100) { + r.push(`${He} isn't seriously affected; you'll have to be more subtle next week.`); } else { - r.push(`stimulate you.`); - } - r.push(App.UI.DOM.makeElement("span", `${His} vaginal skills have improved.`, "lime")); - r.push(slaveSkillIncrease('vaginal', slave, trainingEfficiency)); - } else if ((slave.skill.anal <= 30) && (slave.anus > 0) && canDoAnal(slave)) { - r.push(`Since ${he}'s anally experienced, you work with ${him} on the finer points of penetrative sex. ${He} can already take it up ${his} ass, but ${his} muscular control could be improved. ${He} works ${his} Kegel muscles and anal sphincter all week, using fingers, dildos, and your`); - if (V.PC.dick === 0) { - r.push(`strap-on`); + slave.training = 0; + r.push(`${He} begins to think ${himself} special, and is now`); + r.push(App.UI.DOM.makeElement("span", `arrogant.`, "red")); + slave.behavioralFlaw = "arrogant"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "induce bitchiness": + r.push(`Since you've decided to induce ${him} to bitchiness, you keep ${him} in your office and induce ${him} to criticize other slaves, rewarding ${him} when ${he}'s especially catty.`); + r.push(induceFlawLenityEffects(slave)); + if (slave.training < 100) { + r.push(`${He} goes along, but remains cautious and will need more practice.`); } else { - r.push(`cock`); + r.push(`${He} starts making`); + r.push(App.UI.DOM.makeElement("span", `bitchy`, "red")); + r.push(`remarks without being prompted.`); + slave.behavioralFlaw = "bitchy"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "induce odd behavior": + r.push(`Since you've decided to abuse ${him} into odd behavior, you target ${him} for a campaign of surprise sex. You constantly ambush ${him}, shove ${him} onto the ground, and fuck ${him}. Sometimes ${he} wakes up from bad dreams to find you penetrating ${him}.`); + r.push(induceFlawAbuseEffects(slave)); + if (canDoVaginal(slave)) { + VCheck.Vaginal(slave, 10); + } else if (canDoAnal(slave)) { + VCheck.Anal(slave, 10); + } else { + seX(slave, "oral", V.PC, "penetrative", 10); } - r.push(`as training tools. ${He} becomes expert enough that ${he} is able to make you cum without any thrusting at all by you or any riding by ${him}; ${he} just flexes ${his} muscles enough to`); - if (V.PC.dick === 0) { - r.push(`squeeze the fake phallus.`); + if (slave.training < 100) { + r.push(`${He} does ${his} best to tolerate the abuse.`); } else { - r.push(`stimulate you.`); - } - r.push(App.UI.DOM.makeElement("span", `${His} anal skills have improved.`, "lime")); - r.push(slaveSkillIncrease('anal', slave, trainingEfficiency)); - } else if (slave.skill.vaginal <= 10 && slave.vagina >= 0) { - r.push(`Since ${he}'s vaginally unskilled,`); - if (slave.vagina === 0 && !canDoVaginal(slave)) { - r.push(`in chastity, and a virgin,`); - } else if ((slave.vagina === 0)) { - r.push(`and a virgin,`); + r.push(`${He} starts`); + r.push(App.UI.DOM.makeElement("span", `behaving oddly,`, "red")); + r.push(`jumping at noises and mumbling to ${himself}.`); + slave.behavioralFlaw = "odd"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "induce hatred of men": + r.push(`In order to make ${him} hate men, you sometimes simply`); + if (V.PC.dick !== 0) { + r.push(`stick your dick in ${him} without asking,`); } else { - r.push(`and in chastity,`); - } - r.push(`you explain the basics of sex to ${him}.`); - r.push(App.UI.DOM.makeElement("span", `${His} vaginal skills have improved.`, "lime")); - r.push(slaveSkillIncrease('vaginal', slave, vaginalTrainingEfficiency)); - } else if (slave.skill.anal <= 10) { - r.push(`Since ${he}'s anally unskilled,`); - if (slave.anus === 0 && !canDoAnal(slave)) { - r.push(`an anal virgin, and in chastity,`); - } else if ((slave.anus === 0)) { - r.push(`and an anal virgin,`); + r.push(`stuff a strap-on inside ${him} without asking,`); + } + r.push(`and sometimes force shockingly juvenile pranks on ${him}. ${He} is regularly smacked in the face with floppy dildos.`); + r.push(induceFlawAbuseEffects(slave)); + if (canDoVaginal(slave)) { + VCheck.Vaginal(slave, 10); + } else if (canDoAnal(slave)) { + VCheck.Anal(slave, 10); } else { - r.push(`and in anal chastity,`); - } - r.push(`you explain the basics of anal sex to ${him}.`); - r.push(App.UI.DOM.makeElement("span", `${His} anal skills have improved.`, "lime")); - r.push(slaveSkillIncrease('anal', slave, analTrainingEfficiency)); - } else if (slave.skill.oral < 100) { - r.push(`${He} is already a skilled oral whore, but ${his} skills can be polished further. You train ${him} in the basics of`); - if (V.seePee === 1) { - r.push(`urine play,`); - } - r.push(`massage, pet play, needle play, and many other niche skills. You also expand ${his} oral endurance, enabling ${him} to deepthroat for extended periods.`); - r.push(App.UI.DOM.makeElement("span", `${His} oral skills have improved.`, "lime")); - r.push(slaveSkillIncrease('oral', slave, trainingEfficiency)); - } else if ((slave.skill.vaginal < 100) && (slave.vagina > 0) && canDoVaginal(slave)) { - r.push(`${He} is already a skilled pussy slut, but ${his} skills can be polished further. You train ${him} in the basics of`); - if (V.seePee === 1) { - r.push(`urine play,`); - } - r.push(`massage, pet play, needle play, and many other niche skills. You also work with ${him} to develop a personal regimen of vaginal muscle exercises. This will enable ${him} to squeeze and massage dicks with ${his} practiced vaginal walls.`); - r.push(App.UI.DOM.makeElement("span", `${His} vaginal skills have improved.`, "lime")); - r.push(slaveSkillIncrease('vaginal', slave, trainingEfficiency)); - } else if ((slave.skill.anal < 100) && (slave.anus > 0) && canDoAnal(slave)) { - r.push(`${He} is already a skilled anal bitch, but ${his} skills can be polished further. You train ${him} in the basics of`); - if (V.seePee === 1) { - r.push(`urine play,`); - } - r.push(`massage, pet play, needle play, and many other niche skills. You also expand ${his} knowledge of sexual positions. ${He} learns to balance ${himself} on tiptoe for the challenge of standing anal sex without support.`); - r.push(App.UI.DOM.makeElement("span", `${His} sexual skills have improved.`, "lime")); - r.push(slaveSkillIncrease('anal', slave, trainingEfficiency)); - } else if (slave.skill.whoring <= 10) { - r.push(`Since ${he}'s dangerously naïve about selling sex, you teach ${him} the basics of self protection and business.`); - r.push(App.UI.DOM.makeElement("span", `${His} prostitution skills have improved.`, "lime")); - r.push(slaveSkillIncrease('whoring', slave, trainingEfficiency)); - } else if (slave.skill.entertainment <= 10) { - r.push(`Since ${he}'s rough and unskilled at entertainment, you teach ${him} the basics of polite conversation, music, and dance.`); - r.push(App.UI.DOM.makeElement("span", `${His} entertainment skills have improved.`, "lime")); - r.push(slaveSkillIncrease('entertainment', slave, trainingEfficiency)); - } else if (slave.skill.whoring <= 30) { - r.push(`Since ${he} has only basic entertainment skills, you teach ${him} to steer clients to more lucrative sex acts.`); - r.push(App.UI.DOM.makeElement("span", `${His} prostitution skills have improved.`, "lime")); - r.push(slaveSkillIncrease('whoring', slave, trainingEfficiency)); - } else if (slave.skill.entertainment <= 30) { - r.push(`Since ${he} has only basic entertainment skills, you teach ${him} more about poise and Free Cities etiquette.`); - r.push(App.UI.DOM.makeElement("span", `${His} entertainment skills have improved.`, "lime")); - r.push(slaveSkillIncrease('entertainment', slave, trainingEfficiency)); - } else if (slave.skill.whoring <= 60 && V.PC.career === "escort") { - r.push(`${He} is already a skilled whore, so you teach ${him} some of your personal tricks to squeezing every last drop from a patron.`); - r.push(App.UI.DOM.makeElement("span", `${His} prostitution skills have improved.`, "lime")); - r.push(slaveSkillIncrease('whoring', slave, trainingEfficiency)); - } else if (slave.skill.entertainment <= 60 && V.PC.career === "escort") { - r.push(`${He} is already skilled at luring in partners, so you teach ${him} some of your sexual persuasion techniques.`); - r.push(App.UI.DOM.makeElement("span", `${His} entertainment skills have improved.`, "lime")); - r.push(slaveSkillIncrease('entertainment', slave, trainingEfficiency)); - } else if (slave.skill.vaginal <= 30 && slave.vagina >= 0) { - r.push(`Since ${he} has only rudimentary vaginal skills,`); - if (slave.vagina === 0 && !canDoVaginal(slave)) { - r.push(`is in chastity, and a virgin on top of that,`); - } else if ((slave.vagina === 0)) { - r.push(`and still a virgin,`); + seX(slave, "oral", V.PC, "penetrative", 10); + } + if (slave.training < 100) { + r.push(`${He} focuses more on you than on the masculine aspects of this. You'll need to be more subtle next week.`); + } else { + r.push(`You notice ${him} starting to`); + r.push(App.UI.DOM.makeElement("span", `shoot hateful glances`, "red")); + r.push(`at any men ${he} sees.`); + slave.behavioralFlaw = "hates men"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "induce hatred of women": + r.push(`In order to make ${him} hate women, you keep ${him} in your office when ${he}'s not otherwise occupied, and`); + if (V.PC.vagina === -1) { + r.push(`make ${him} eat other slaves out`); + } else { + r.push(`sit on ${his} face`); + } + r.push(`until ${he}'s thoroughly sick of pussy.`); + r.push(induceFlawAbuseEffects(slave)); + if (slave.training < 100) { + r.push(`${He} focuses more on you than on the feminine aspects of this. You'll need to be more subtle next week.`); } else { - r.push(`and is in chastity,`); - } - r.push(`you spend time teaching ${him} sexual positions and how to someday use ${his} pussy to its potential. You have ${him} work ${his} Kegel muscles all week to prepare ${him} for the future.`); - r.push(App.UI.DOM.makeElement("span", `${His} vaginal skills have improved,`, "lime")); - r.push(`but it's a slow process without practical experience.`); - r.push(slaveSkillIncrease('vaginal', slave, vaginalTrainingEfficiency)); - } else if (slave.skill.anal <= 30) { - r.push(`Since ${he} has only rudimentary anal skills,`); - if (slave.anus === 0 && !canDoAnal(slave)) { - r.push(`is an anal virgin, and is in chastity to top it off,`); - } else if ((slave.anus === 0)) { - r.push(`and is an anal virgin,`); + r.push(`You notice ${him} starting to`); + r.push(App.UI.DOM.makeElement("span", `shoot hateful glances`, "red")); + r.push(`at any vaginas ${he} sees.`); + slave.behavioralFlaw = "hates women"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "induce gluttony": + r.push(`Inducing gluttony is harder than inducing anorexia; you force ${him} to orgasm when ${he}'s eating, and praise ${him} effusively when ${he} gains weight. You also provide ${him} with ample rations for stress eating.`); + slave.training -= 20; + // more difficult training + if (slave.training < 100) { + r.push(`${He} eats when ordered, but isn't deeply affected. ${He}'ll need more practice being a pig.`); } else { - r.push(`and is in anal chastity,`); - } - r.push(`you spend time teaching ${him} sexual positions and how to someday use ${his} asshole to its potential. You have ${him} work ${his} Kegel muscles and anal sphincter all week to prepare ${him} for the future.`); - r.push(App.UI.DOM.makeElement("span", `${His} anal skills have improved,`, "lime")); - r.push(`but it's a slow process without practical experience.`); - r.push(slaveSkillIncrease('anal', slave, analTrainingEfficiency)); - } else if (slave.skill.vaginal < 100 && slave.vagina >= 0) { - r.push(`${He} already a skilled pussy slut,`); - if (slave.vagina === 0 && !canDoVaginal(slave)) { - r.push(`despite ${his} chastity and virginity,`); - } else if ((slave.vagina === 0)) { - r.push(`despite still being a virgin,`); + r.push(`You notice ${him} starting to`); + r.push(App.UI.DOM.makeElement("span", `enjoy eating`, "red")); + r.push(`for its own sake, even when ${he}'s not hungry.`); + slave.behavioralFlaw = "gluttonous"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "induce anorexia": + r.push(`You criticize ${him} cruelly whenever ${he} eats, and praise thinner slaves to ${his} face at every opportunity.`); + r.push(induceFlawAbuseEffects(slave)); + if (slave.training < 100) { + r.push(`${He} continues consuming ${his} rations when ordered, and will need further training.`); } else { - r.push(`despite ${his} chastity,`); - } - r.push(`but lacks practical experience. You train ${him} in the basics of`); - if (V.seePee === 1) { - r.push(`urine play,`); - } - r.push(`massage, pet play, needle play, and many other niche skills. You also work with ${him} to develop a personal regimen of vaginal muscle exercises. This will enable ${him} to squeeze and massage dicks with ${his} practiced vaginal walls. You spend time expanding ${his} knowledge of sexual positions.`); - r.push(App.UI.DOM.makeElement("span", `${His} vaginal skills have improved,`, "lime")); - r.push(`but it's a slow process without proper training.`); - r.push(slaveSkillIncrease('vaginal', slave, vaginalTrainingEfficiency)); - } else if (slave.skill.anal < 100) { - r.push(`${He} already a skilled anal bitch,`); - if (slave.anus === 0 && !canDoAnal(slave)) { - r.push(`despite ${his} anus chastity and virginity,`); - } else if ((slave.anus === 0)) { - r.push(`despite still being an anal virgin,`); + r.push(`${He} begins to`); + r.push(App.UI.DOM.makeElement("span", `eat only when repeatedly ordered to.`, "red")); + slave.behavioralFlaw = "anorexic"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "induce religious devotion": + r.push(`You direct a campaign of abuse and threats at ${him}, and surreptitiously ensure that a little religious text from ${his} home country finds its way into a hiding place in ${his} living area.`); + r.push(induceFlawAbuseEffects(slave)); + if (slave.training < 100) { + r.push(`${He} keeps ${his} head down and shows no sign of religious introspection, at least this week.`); } else { - r.push(`despite ${his} anal chastity,`); - } - r.push(`but lacks practical experience. You train ${him} in the basics of`); - if (V.seePee === 1) { - r.push(`urine play,`); - } - r.push(`massage, pet play, needle play, and many other niche skills. You also expand ${his} knowledge of sexual positions. ${He} learns to balance ${himself} on tiptoe for the challenge of standing anal sex without support.`); - r.push(App.UI.DOM.makeElement("span", `${His} anal skills have improved,`, "lime")); - r.push(`but it's a slow process without proper training.`); - r.push(slaveSkillIncrease('anal', slave, analTrainingEfficiency)); - } else { - r.push(`${He}'s learned everything you can teach, and is now a masterful`); - if (slave.skill.vaginal >= 100) { - r.push(`slut;`); - } else if ((slave.vagina === 0)) { - r.push(`virgin slut;`); - } else if (slave.dick === 0 && slave.scrotum === 0 && slave.vagina === -1) { - r.push(`null slave;`); - } else if ((slave.dick > 0) && (slave.balls === 0)) { - r.push(`gelded bitch;`); - } else if (slave.dick > 0 && slave.boobs > 300 && slave.vagina === -1) { - r.push(`shemale slut;`); - } else if ((slave.chastityVagina)) { - r.push(`slut, notwithstanding ${his} chastity belt;`); + r.push(`${He} begins to read it when ${he} thinks ${he}'s alone, and`); + r.push(App.UI.DOM.makeElement("span", `talks to God`, "red")); + r.push(`when ${he} thinks only He is listening.`); + slave.behavioralFlaw = "devout"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "induce liberation": + r.push(`You direct a campaign of abuse and threats at ${him}, making sure to threaten ${him} with the absolute worst of slavery in your arcology. You also arrange for ${him} to witness other citizen's slaves in situations that aren't much fun.`); + r.push(induceFlawAbuseEffects(slave)); + if (slave.training < 100) { + r.push(`${He} does ${his} best to endure the abuse, unknowingly condemning ${himself} to more.`); } else { - r.push(`slave;`); - } - r.push(App.UI.DOM.makeElement("span", `${his} assignment has defaulted to fostering devotion.`, "yellow")); - V.personalAttention[ptwi].trainingRegimen = "build her devotion"; - } - r.push(IncreasePCSkills('slaving', 0.01)); - slave.training = 0; - break; - case "break her will": - slave.devotion -= 4; - if (slave.trust > 20) { - slave.trust -= 15; - } else { - slave.trust -= 10; - } - if (slave.devotion < -80) { - r.push(`You bind ${him} securely to a special chair in your`); - if (!canDoAnal(slave) || (slave.vagina > -1 && !canDoVaginal(slave))) { - r.push(`office with ${his} holes exposed and vulnerable.`); + r.push(`A deep`); + r.push(App.UI.DOM.makeElement("span", `anger about slavery`, "red")); + r.push(`builds within ${him}.`); + slave.behavioralFlaw = "liberated"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "induce hatred of oral": + r.push(`Since you've decided to force ${him} to dislike oral sex, you're forced to use a complicated and refined slave breaking technique: constantly raping ${his} face.`); + r.push(induceFlawAbuseEffects(slave)); + seX(slave, "oral", V.PC, "penetrative", 10); + if (slave.training < 100) { + r.push(`${He} does ${his} best to comply with the oral abuse, unknowingly condemning ${himself} to more.`); } else { - r.push(`office.`); - } - r.push(`Yours is a busy week, with a lot of business interviews, so whenever the interviewee has pleased you, you offer him or her the use of the poor slave's body on the way out. The chair is specially designed so that the seat, back and armrests can rotate vertically relative to the ground, so ${his} body can be spun to make any of ${his} available holes convenient. Fortunately, it also has a pan beneath it to stop the generous stream of ejaculate and lubricant that drips from ${him} from besmirching the floor. ${He} can't help but`); - r.push(App.UI.DOM.makeElement("span", `become used to the abuse`, "gold")); - r.push(`despite ${his}`); - r.push(App.UI.DOM.makeElement("span", `resentment.`, "mediumorchid")); - r.push(`${VCheck.Both(slave, 10, 5)}`); - } else if ((slave.devotion < -60) && (slave.anus !== 0)) { - r.push(`${slave.slaveName} is really wild and stern measures must be taken. So, ${he} is`); - if (!canDoAnal(slave) || (slave.vagina > -1 && !canDoVaginal(slave))) { - r.push(`stripped of ${his} protective chastity and`); - } - r.push(`forced, struggling and screaming, into a latex suit that completely blinds, deafens, and immobilizes ${him}. So attired, the only places where ${he} can feel any sensations at all other than endless latex darkness are ${his}`); - if ((slave.dick !== 0) && (slave.vagina !== -1)) { - r.push(`pussy, and cock`); - } else if ((slave.dick !== 0)) { - r.push(`cock`); + r.push(`After gagging enough, ${he} finally starts to`); + r.push(App.UI.DOM.makeElement("span", `hate oral.`, "red")); + slave.sexualFlaw = "hates oral"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "induce hatred of anal": + r.push(`Since you've decided to force ${him} to dislike anal sex, you're forced to use a complicated and refined slave breaking technique: constantly raping ${his} ass.`); + if (!canDoAnal(slave)) { + r.push(`Every time you catch ${him} with ${his} chastity off, you're there to penetrate ${his} rectum.`); + } + r.push(induceFlawAbuseEffects(slave)); + r.push(`${VCheck.Anal(slave, 10)}`); + if (slave.training < 100) { + r.push(`${He} does ${his} best to comply with your abuse of ${his} butthole, unknowingly condemning ${himself} to more assrape.`); } else { - r.push(`pussy`); - } - r.push(`and backdoor. For ${him}, time becomes a featureless, torturous boredom broken only by occasional rape. Eventually, ${he} becomes so`); - r.push(App.UI.DOM.makeElement("span", `desperate`, "mediumorchid")); - r.push(`for something, anything, to break the monotony that ${he} begins to look forward to the next time a phallus will`); - r.push(App.UI.DOM.makeElement("span", `force`, "gold")); - r.push(`its way into ${him}.`); - r.push(`${VCheck.Both(slave, 6, 3)}`); - } else if ((slave.devotion < -50) && (slave.hStyle !== "shaved") && (random(1, 100) > 90)) { - r.push(`${slave.slaveName} needs to be taken down a peg. Fortunately, you know just the thing. You bring ${him} into a bathroom, place a chair in the tub, and tie ${him} securely to the chair. ${He} isn't too perturbed — ${he} probably expects a facefuck under running water or something like that — but ${he} begins to cry when ${he}`); - if (canHear(slave)) { - r.push(`hears you switch on`); - } else if (canSee(slave)) { - r.push(`sees you pull out`); + r.push(`After feeling ${his} poor sphincter grow sorer and sorer, ${he} starts to`); + r.push(App.UI.DOM.makeElement("span", `hate anal.`, "red")); + slave.sexualFlaw = "hates anal"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "induce hatred of penetration": + r.push(`Since you've decided to force ${him} to dislike penetration, you're forced to use a complicated and refined slave breaking technique: constantly raping ${him}.`); + r.push(induceFlawAbuseEffects(slave)); + if (canDoVaginal(slave)) { + VCheck.Vaginal(slave, 10); + } else if (canDoAnal(slave)) { + VCheck.Anal(slave, 10); } else { - r.push(`feels the cool touch of`); + seX(slave, "oral", V.PC, "penetrative", 10); } - r.push(`an electric shaver. ${He} luxuriates in ${his} hair, flaunting it every chance ${he} gets; it's something of value in a bleak slave world and ${he} sobs as you shave it off ${him}. Afterward, ${he} sniffles and`); - r.push(App.UI.DOM.makeElement("span", `looks at you in fear`, "gold")); - r.push(`and`); - r.push(App.UI.DOM.makeElement("span", `unhappiness`, "mediumorchid")); - r.push(`when you rub ${his} newly bald scalp. Of course, there's always the body modification studio if you ever feel like ${he}'s earned ${his} hair back.`); - slave.hStyle = "shaved"; - slave.hLength = 0; - } else if (canDoAnal(slave) && (random(1, 100) < 10)) { - r.push(`Sometimes, there's no need to be clever. The first indication ${he} gets that you've decided to train ${him} this week is when ${he} wakes suddenly in the middle of the night to the burning sensation of a`); - if (V.PC.dick !== 0) { - r.push(`cock`); + if (slave.training < 100) { + r.push(`${He} does ${his} best to comply with your abuse, unknowingly condemning ${himself} to more of it.`); } else { - r.push(`strap-on`); - } - r.push(`being shoved up ${his} ass. Not knowing what is happening, ${he} struggles, but since ${he} was already lying in ${his} bed you just lie on top of ${him} and press ${his} wriggling body into the sheets as you assrape ${him}. For the rest of the week, ${he} finds ${himself} grabbed and fucked. ${He} can't help but`); - r.push(App.UI.DOM.makeElement("span", `become used to the abuse`, "gold")); - r.push(`despite ${his}`); - r.push(App.UI.DOM.makeElement("span", `resentment.`, "mediumorchid")); - r.push(`${VCheck.Anal(slave, 6)}`); - } else if (canDoVaginal(slave) && (random(1, 100) < 10)) { - r.push(`Sometimes, there's no need to be clever. The first indication ${he} gets that you've decided to train ${him} this week is when ${he} wakes suddenly in the middle of the night to the filling sensation of a`); - if (V.PC.dick !== 0) { - r.push(`cock`); + r.push(`After feeling ${his} poor holes grow sorer and sorer, ${he} starts to`); + r.push(App.UI.DOM.makeElement("span", `hate getting fucked.`, "red")); + slave.sexualFlaw = "hates penetration"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "induce shame": + r.push(`Since you've decided to force shame on ${him}, you keep ${him} in your office whenever ${he}'s not otherwise occupied, and heap derision on ${him} at every opportunity, even inviting visitors to join you in chats about how unattractive and worthless ${he} is.`); + r.push(induceFlawAbuseEffects(slave)); + if (slave.training < 100) { + r.push(`${He} does ${his} best to keep ${his} chin up, unknowingly condemning ${himself} to more of this abuse.`); } else { - r.push(`strap-on`); - } - r.push(`being shoved up into ${his} pussy. Not knowing what is happening, ${he} struggles, but since ${he} was already lying in ${his} bed you just lie on top of ${him} and press ${his} wriggling body into the sheets as you rape ${him}. For the rest of the week, ${he} finds ${himself} grabbed and fucked. ${He} can't help but`); - r.push(App.UI.DOM.makeElement("span", `become used to the abuse`, "gold")); - r.push(`despite ${his}`); - r.push(App.UI.DOM.makeElement("span", `resentment.`, "mediumorchid")); - r.push(`${VCheck.Vaginal(slave, 6)}`); - } else { - r.push(`${slave.slaveName} violently resists you whenever ${he} can. This cannot be permitted, so after a particularly severe bout of physical resistance, you decide to employ an old method of breaking a mind without damaging a body. You secure ${him} to a board and gently wash ${his} face with a wet cloth. ${He} spits in defiance, only to be surprised when you lower the board so that ${his} feet are higher than ${his} head. You tie the cloth around ${his} face. A thin stream of water onto the cloth produces all the feeling and none of the reality of a slow death by drowning. Waterboarding isn't much use for extracting information, but it works well for`); - r.push(App.UI.DOM.makeElement("span", `slavebreaking.`, "gold")); - } - if (V.PC.skill.slaving >= 100) { - r.push(`Your`); - r.push(App.UI.DOM.makeElement("span", `slavebreaking experience`, "springgreen")); - r.push(`allows you to apply`); - r.push(App.UI.DOM.makeElement("span", `exquisitely calibrated`, "gold")); - r.push(`mental pressure.`); - slave.trust -= 2; - } - if ((slave.trust < -20) && (slave.fetishKnown === 0)) { - r.push(`${He} is now fully broken;`); - r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to exploring ${his} sexuality.`, "yellow")); - V.personalAttention[ptwi].trainingRegimen = "explore her sexuality"; - r.push(IncreasePCSkills('slaving', 0.5)); - } else if ((slave.trust < -20)) { - r.push(`${He} is now fully broken;`); - r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to fostering devotion.`, "yellow")); - V.personalAttention[ptwi].trainingRegimen = "build her devotion"; - r.push(IncreasePCSkills('slaving', 0.5)); - } else if ((slave.devotion > 20) && (slave.fetishKnown === 0)) { - r.push(`${He} is now obedient and attentive;`); - r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to exploring ${his} sexuality.`, "yellow")); - V.personalAttention[ptwi].trainingRegimen = "explore her sexuality"; - r.push(IncreasePCSkills('slaving', 0.5)); - } else if ((slave.devotion > 20)) { - r.push(`${He} is now obedient and attentive;`); - r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to fostering devotion.`, "yellow")); - V.personalAttention[ptwi].trainingRegimen = "build her devotion"; - r.push(IncreasePCSkills('slaving', 0.5)); - } - r.push(IncreasePCSkills('slaving', 0.2)); - slave.training = 0; - break; - case "harshly break her will": - slave.devotion -= 5; - slave.trust -= 10; - healthDamage(slave, 1); - if (slave.fetish === "mindbroken") { - slave.minorInjury = either("black eye", "bruise", "split lip"); - r.push(`${slave.slaveName}'s mind is broken. ${He} is a boring slave to torture, though ${his} body will still occasionally react to intense pain. No matter what you try, nothing really reaches ${his} destroyed soul. The agonies do`); - r.push(App.UI.DOM.makeElement("span", `affect ${his} health, leaving ${him} with a ${slave.minorInjury}.`, "red")); - } else if ((slave.devotion < -90)) { - slave.minorInjury = either("black eye", "bruise", "split lip"); - r.push(`Old traditions should not be forgotten. The scourge is the oldest slavebreaking tool known to man, and to slave${girl}s who do not properly obey ${womenP}. For the whole week, whenever ${slave.slaveName} disobeys you or whenever the whim strikes, you bind ${him} securely and flog ${him} without mercy. You use a soft leather appliance and apply medical care afterward, so there will be no permanent scarring, but`); - r.push(App.UI.DOM.makeElement("span", `${his} health is affected and the beatings leave ${him} with a ${slave.minorInjury}.`, "red")); - r.push(`${He} is subjected to`); - r.push(App.UI.DOM.makeElement("span", `immense mental pressure`, "mediumorchid")); - r.push(App.UI.DOM.makeElement("span", `in favor of obedience.`, "gold")); - } else if ((slave.devotion < -50) && canDoAnal(slave)) { - slave.minorInjury = either("black eye", "bruise", "split lip"); - r.push(`${slave.slaveName} is willing to physically defend ${himself} against sexual abuse. Training ${him} out of this rebelliousness is a nice sexual change of pace. For the entire week, whenever ${he} commits some minor sin, you fight ${him} into a state of physical submission and then sodomize ${him}. This usually requires an extended beating to render ${him} quiescent, followed by holding ${him} down so that ${his} struggles do not dislodge your`); - if (V.PC.dick !== 0) { - r.push(`cock`); + r.push(`${He} wants nothing more than to hide in corner and cry, and is now`); + r.push(App.UI.DOM.makeElement("span", `shamefast.`, "red")); + slave.sexualFlaw = "shamefast"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "induce sexual idealism": + r.push(`Since you've decided to induce ${him} to sexual idealism, you keep ${him} in your office, and when the two of you are all alone, gossip with ${him} about other slaves and even citizens. You do your best to encourage ${him} to believe absurdities.`); + r.push(induceFlawLenityEffects(slave)); + if (slave.training < 100) { + r.push(`${He} doesn't know what to make of this; you'll have to keep at it.`); } else { - r.push(`strap-on`); - } - r.push(`from ${his} delightfully spasming butthole. ${He} is subjected to`); - r.push(App.UI.DOM.makeElement("span", `immense mental pressure`, "mediumorchid")); - r.push(App.UI.DOM.makeElement("span", `in favor of obedience,`, "gold")); - r.push(`but the extreme stress`); - r.push(App.UI.DOM.makeElement("span", `affects ${his} health, leaving ${him} with a ${slave.minorInjury}.`, "red")); - r.push(`${VCheck.Anal(slave, 6)}`); - } else if ((slave.scrotum > 0)) { - slave.minorInjury = either("black eye", "bruise", "split lip"); - r.push(`${slave.slaveName} has indefensible, obvious targets for harsh breaking. Whenever ${he} falls short in the smallest way, you bind ${him} in such a way that ${his}`); - if (slave.dick) { - r.push(`cock and`); - } - r.push(`balls are dangling defenseless, and ${he} cannot move to avoid blows. You then indulge your inventiveness, applying clips, weights, and simple beatings to ${his}`); - if (slave.dick) { - r.push(`member and`); - } - r.push(`sack, while beating the rest of ${him} thoroughly. ${He} is subjected to`); - r.push(App.UI.DOM.makeElement("span", `immense mental pressure`, "mediumorchid")); - r.push(App.UI.DOM.makeElement("span", `in favor of obedience,`, "gold")); - r.push(`but the beatings`); - r.push(App.UI.DOM.makeElement("span", `affect ${his} health, leaving ${him} with a ${slave.minorInjury}.`, "red")); - } else if ((slave.dick > 0)) { - slave.minorInjury = either("black eye", "bruise", "split lip"); - r.push(`${slave.slaveName} has an indefensible, obvious target for harsh breaking. Whenever ${he} falls short in the smallest way, you bind ${him} in such a way that ${his} cock is dangling defenseless, and ${he} cannot move to avoid blows. You then indulge your inventiveness, applying clips, weights, and simple beatings to ${his} member, while beating the rest of ${him} thoroughly. ${He} is subjected to`); - r.push(App.UI.DOM.makeElement("span", `immense mental pressure`, "mediumorchid")); - r.push(App.UI.DOM.makeElement("span", `in favor of obedience,`, "gold")); - r.push(`but the beatings`); - r.push(App.UI.DOM.makeElement("span", `affect ${his} health, leaving ${him} with a ${slave.minorInjury}.`, "red")); - } else if ((slave.clit > 0)) { - slave.minorInjury = either("black eye", "bruise", "split lip"); - r.push(`${slave.slaveName} has an indefensible, obvious target for harsh breaking. Whenever ${he} falls short in the smallest way, you bind ${him} in such a way that ${his} unusually large clit is visible and defenseless, and ${he} cannot move to avoid blows. You then indulge your inventiveness, applying clips, weights, and simple slaps to ${his} womanhood, while beating the rest of ${him} thoroughly. ${He} is subjected to`); - r.push(App.UI.DOM.makeElement("span", `immense mental pressure`, "mediumorchid")); - r.push(App.UI.DOM.makeElement("span", `in favor of obedience,`, "gold")); - r.push(`but the beatings`); - r.push(App.UI.DOM.makeElement("span", `affect ${his} health, leaving ${him} with a ${slave.minorInjury}.`, "red")); - } else if ((slave.nipples === "huge")) { - slave.minorInjury = either("black eye", "bruise", "split lip"); - r.push(`${slave.slaveName}'s nipples beg for punishment. Whenever ${he} falls short in the smallest way, you bind ${him} in such a way that breasts dangle, ${his} nipples are free and at your mercy, and ${he} can only move enough to cause ${his} boobs to sway erotically when ${he} flinches with pain. You then indulge your inventiveness, applying clips, weights, and simple abuse to ${his} nipples, while beating the rest of ${him} thoroughly. ${He} is subjected to`); - r.push(App.UI.DOM.makeElement("span", `immense mental pressure`, "mediumorchid")); - r.push(App.UI.DOM.makeElement("span", `in favor of obedience,`, "gold")); - r.push(`but the beatings`); - r.push(App.UI.DOM.makeElement("span", `affect ${his} health, leaving ${him} with a ${slave.minorInjury}.`, "red")); - } else if ((slave.anus > 0) && canDoAnal(slave)) { - r.push(`You bind ${slave.slaveName} with the head of an uncomfortably large dildo just inside ${his} anus. The setup offers ${him} a choice: ${he} can either stand and have only tip up ${his} butt, or ${he} can take ${his} weight off ${his} legs, and take a massive phallus up the ass. You keep ${him} like this for hours on end. At the start ${he} tries to stand all the time. Then, ${he} tries to rest on it for short periods, but realizes that this up and down motion really just leads to ${him} assraping ${himself}. Finally, ${he} becomes so`); - r.push(App.UI.DOM.makeElement("span", `tired and apathetic`, "red")); - r.push(`that ${he} accepts having a dildo up the ass, and sits down. ${He} is subjected to`); - r.push(App.UI.DOM.makeElement("span", `immense mental pressure`, "mediumorchid")); - r.push(App.UI.DOM.makeElement("span", `in favor of obedience,`, "gold")); - r.push(`but the extreme stress`); - r.push(App.UI.DOM.makeElement("span", `affects ${his} health.`, "red")); - slave.health.tired = Math.clamp(slave.health.tired + 20, 0, 1000); - } else { - slave.minorInjury = either("black eye", "bruise", "split lip"); - r.push(`The first time you force ${slave.slaveName} to please you this week, ${he} could be forgiven for thinking sexual abuse is to be ${his} sentence. By the end of the week ${he} remembers only fearing rape as a pleasant dream. This change is due to your program of roughly using ${him} whenever ${he} shows any sign of sleeping. You reward ${him} with a short doze now and then, but ${he} is slowly reduced to a nearly insensible state of`); - r.push(App.UI.DOM.makeElement("span", `agonizing fatigue.`, "red")); - r.push(`${He} is subjected to`); - r.push(App.UI.DOM.makeElement("span", `immense mental pressure`, "mediumorchid")); - r.push(App.UI.DOM.makeElement("span", `in favor of obedience,`, "gold")); - r.push(`but the extreme stress and rough treatment`); - r.push(App.UI.DOM.makeElement("span", `affect ${his} health and leave ${him} with a ${slave.minorInjury}.`, "red")); - if (slave.health.tired < 120) { - slave.health.tired = 120; - } - } - if (slave.fetish !== "mindbroken") { - seed = random(1, 100); - if (seed > 90) { - r.push(`This abuse has shattered ${his} already-fragile self;`); - r.push(App.UI.DOM.makeElement("span", `${his} mind has been broken.`, "red")); - slave.fetish = "mindbroken"; - slave.sexualFlaw = "none"; - slave.behavioralFlaw = "none"; - } else if ((seed > 80) && (slave.behavioralFlaw !== "hates men") && (slave.behavioralFlaw !== "hates women")) { - r.push(`This abuse has associated`); - if (V.PC.dick !== 0) { - r.push(`cocks and masculinity with pain in ${his} mind;`); - r.push(App.UI.DOM.makeElement("span", `${he} now instinctively hates men.`, "red")); - slave.behavioralFlaw = "hates men"; - } else { - r.push(`pussies and femininity with pain in ${his} mind;`); - r.push(App.UI.DOM.makeElement("span", `${he} now instinctively hates women.`, "red")); - slave.behavioralFlaw = "hates women"; - } - } else if ((seed > 70) && (slave.sexualFlaw !== "odd")) { - r.push(`This abuse has changed ${him} a bit;`); - r.push(App.UI.DOM.makeElement("span", `${he} has begun to act strangely.`, "red")); - slave.behavioralFlaw = "odd"; + r.push(`${He} follows along, and is now`); + r.push(App.UI.DOM.makeElement("span", `sexually idealistic.`, "red")); + slave.sexualFlaw = "idealistic"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "induce sexual repression": + r.push(`Since you've decided to force sexual repression on ${him}, you keep ${him} in your office whenever ${he}'s not otherwise occupied. You use the monitoring systems to reveal ${his} sexual arousal whenever it appears, and castigate and punish ${him} for it.`); + r.push(induceFlawAbuseEffects(slave)); + if (slave.training < 100) { + r.push(`${He} does ${his} best to keep ${his} chin up, unknowingly condemning ${himself} to more of this abuse.`); + } else { + r.push(`${He} desperately tries to avoid even thinking about subjects that get ${him} punished, and is now`); + r.push(App.UI.DOM.makeElement("span", `sexually repressed.`, "red")); + slave.sexualFlaw = "repressed"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "induce sexual apathy": + r.push(`Since you've decided to force sexual apathy on ${him}, you keep ${him} in your office whenever ${he}'s not otherwise occupied. You use ${him} regularly, and punish ${him} whenever ${he} shows any sign of enjoyment.`); + r.push(induceFlawAbuseEffects(slave)); + if (canDoVaginal(slave)) { + VCheck.Vaginal(slave, 10); + } else if (canDoAnal(slave)) { + VCheck.Anal(slave, 10); + } else { + seX(slave, "oral", V.PC, "penetrative", 10); } - } - r.push(`A week of agony`); - if (slave.trust > 20) { - r.push(App.UI.DOM.makeElement("span", `reduces ${his} trust`, "gold")); - r.push(`in you.`); - slave.trust -= 10; - } else { - r.push(App.UI.DOM.makeElement("span", `encourages ${his} fear`, "gold")); - r.push(`of you.`); - slave.trust -= 10; - } - if (V.PC.skill.slaving >= 100) { - r.push(`Your`); - r.push(App.UI.DOM.makeElement("span", `slave-breaking experience`, "springgreen")); - r.push(`allows you to apply`); - r.push(App.UI.DOM.makeElement("span", `exquisite agony`, "gold")); - r.push(`without any increase in damage.`); - slave.trust -= 5; - } - if (slave.trust < -20) { - r.push(`${He} is now fully broken;`); - r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to fostering devotion.`, "yellow")); - V.personalAttention[ptwi].trainingRegimen = "build her devotion"; - r.push(IncreasePCSkills('slaving', 1)); - } else if ((slave.devotion > 20)) { - r.push(`${He} is now obedient and attentive;`); - r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to fostering devotion.`, "yellow")); - V.personalAttention[ptwi].trainingRegimen = "build her devotion"; - r.push(IncreasePCSkills('slaving', 1)); - } - r.push(IncreasePCSkills('slaving', 0.4)); - slave.training = 0; - break; - case "fix her behavioral flaw": - if (slave.behavioralFlaw === "arrogant") { - r.push(`${slave.slaveName} seems to think ${he}'s better than everyone else. Naturally, as ${his} owner you have the means to correct this sad misapprehension. As you train ${him} during the week, you ensure that ${he} submits to anyone and everyone. ${He} is rarely permitted to enjoy sex under your tutelage, but is instead required to use ${his} mouth and hands to get others off. ${He} cleans, washes, and serves.`); - seX(slave, "oral", V.PC, "penetrative", 10); - } else if ((slave.behavioralFlaw === "bitchy")) { - r.push(`${slave.slaveName} always has a cutting remark ready. The more obedient ${he}'s feeling, the more ${he} directs them at people other than ${his} ${getWrittenTitle(slave)}, but it's still a serious problem. When you train ${him} this week, you keep a sharp ear on ${him}. Whenever ${he} bitches out, you require ${him} to promptly offer the target of ${his} pissiness the use of ${his} mouth. ${He}'ll either shut ${his} mouth or have it roughly filled.`); - seX(slave, "oral", V.PC, "penetrative", 10); - } else if ((slave.behavioralFlaw === "odd")) { - r.push(`${slave.slaveName} is odd. ${He} behaves strangely, speaking randomly at times and doing things for no apparent reason. In earlier times this might have been considered 'adorable' or 'unique,' but in a slave it's just annoying. You punish ${him} severely whenever ${he} fails to do or say the right thing for the right reasons.`); - } else if ((slave.behavioralFlaw === "hates men")) { - r.push(`${slave.slaveName} does not like spending time around men. This is of course a huge obstacle to ${him} performing ${his} duties well. Breaking ${him} of this is an unusually difficult task,`); + if (slave.training < 100) { + r.push(`${He} continues to experience arousal when fucked, and will need more of this treatment.`); + } else { + r.push(`${He} desperately tries to avoid arousal, and is now`); + r.push(App.UI.DOM.makeElement("span", `sexually apathetic.`, "red")); + slave.sexualFlaw = "apathetic"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "induce crudity": + r.push(`Since you've decided to force sexual crudeness on ${him}, you keep ${him} in your office whenever ${he}'s not otherwise occupied, and degrade ${him} cruelly. You relax the normal cleanliness rules, and require ${him} to leave ${his} used holes as they are until ${he}'s too disgusting to fuck.`); + if (canDoVaginal(slave)) { + VCheck.Vaginal(slave, 10); + } else if (canDoAnal(slave)) { + VCheck.Anal(slave, 10); + } else { + seX(slave, "oral", V.PC, "penetrative", 10); + } + r.push(induceFlawAbuseEffects(slave)); + if (slave.training < 100) { + r.push(`${He} does ${his} best to tolerate the unclean feelings, condemning ${himself} to more of this.`); + } else { + r.push(`${He} slowly stops caring, and is now`); + r.push(App.UI.DOM.makeElement("span", `sexually crude.`, "red")); + slave.sexualFlaw = "crude"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "induce judgement": + r.push(`Since you've decided to make ${him} sexually judgemental, you keep ${him} in your office and fuck ${him},`); if (V.PC.dick !== 0) { - r.push(`so you approach it subtly. You simply require ${him} to spend as much time as possible around you, eating, sleeping, and going about normal business. ${He} already understood what you were to your slaves, sexually; ${he} now is accustomed to who you are when your cock isn't pounding a nice hole.`); + r.push(`praising ${him} whenever ${he} takes your big dick well.`); } else { - r.push(`all the more so since you cannot use yourself as a teaching tool. Fortunately, there are any number of men coming and going as you do business, and it's trivial to force ${him} to rely on them for social contact.`); + r.push(`using a huge strap-on on ${him} and praising ${him} when ${he} takes it like a good ${girl}.`); } - seX(slave, "oral", V.PC, "penetrative", 10); - } else if ((slave.behavioralFlaw === "hates women")) { - r.push(`${slave.slaveName} does not like spending time around girls. This is of course a huge obstacle to ${him} performing ${his} duties well. Breaking ${him} of this is an unusually difficult task,`); + r.push(induceFlawLenityEffects(slave)); + if (slave.training < 100) { + r.push(`${He} writes this off as bravado, and will need more training.`); + } else { + r.push(`${He} starts to consider ${himself} reserved for special sexual treatment, and is now`); + r.push(App.UI.DOM.makeElement("span", `sexually judgemental.`, "red")); + slave.sexualFlaw = "judgemental"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "induce cum addiction": + r.push(`The cumslut is quite pleased when you order ${him} to stay in your office whenever ${he} can for use as one of your personal oral toys. You carefully limit ${his} orgasms to when`); if (V.PC.dick !== 0) { - r.push(`all the more so since you cannot use your penis-equipped self as a teaching tool. Fortunately, there are any number of girls around, and it's trivial to force ${him} to rely on them for social contact.`); + r.push(`you're blowing your load down ${his} throat,`); } else { - r.push(`so you approach it subtly. You simply require ${him} to spend as much time as possible around you, eating, sleeping, and going about normal business. ${He} already understood what you were to your slaves, sexually; ${he} now is accustomed to who you are when you're not fucking.`); + r.push(`${he}'s swallowing your pussyjuice,`); } + r.push(`and make ${his} oral adventures predictably regular.`); seX(slave, "oral", V.PC, "penetrative", 10); - } else if ((slave.behavioralFlaw === "anorexic")) { - r.push(`${slave.slaveName} has an unreasonable, psychologically based belief that ${he} is too fat. This is a serious enough condition in the clinical sense that the usual routine of punishment will not affect it. Instead, you apply a regime of positive reinforcement: ${he} is given attention and approval for ${his} curves when they grow.`); - } else if ((slave.behavioralFlaw === "gluttonous")) { - r.push(`${slave.slaveName}'s diet is already closely controlled, but the impulse to overeat is strong in ${him} and like most gluttons ${he} manages to be quite cunning. You watch ${him} closely and administer harsh punishment to associate overeating with pain in ${his} mind.`); - } else if ((slave.behavioralFlaw === "liberated")) { - r.push(`${slave.slaveName} has not yet accepted that ${his} world has changed. You could wait for the weight of circumstances to bear it home to ${him}, but you accelerated the process by giving ${him} as many trivial orders as possible. ${He} is required to receive orders to perform the most humiliatingly obvious of tasks.`); - } else if ((slave.behavioralFlaw === "devout")) { - r.push(`${slave.slaveName} remains devoted to an old world faith that serves ${him} as a reservoir of mental resilience. You carefully select pressure points to break ${him} of this by forcing ${him} to violate ${his} faith's purity codes, constantly. ${He} is forced to eat, dress, and fuck in ways that convince ${him} that ${he} must either condemn ${himself} as an irredeemable sinner, or abandon ${his} beliefs.`); - } - slave.training += 40; - // fixing is easier than softening - if (slave.training < 100) { - r.push(`You make progress, but ${he}'s the same at the end of the week.`); - } else { - slave.training = 0; - r.push(`By the end of the week,`); - r.push(App.UI.DOM.makeElement("span", `you break ${him} of ${his} bad habits.`, "green")); - r.push(App.UI.DOM.makeElement("span", `${His} obedience has increased.`, "hotpink")); - slave.behavioralFlaw = "none"; - slave.devotion += 4; - } - if (slave.fetishKnown !== 1) { - if (slave.fetish === "submissive") { - r.push(`${He} really takes to your close attention;`); - r.push(App.UI.DOM.makeElement("span", `${he}'s a natural submissive!`, "pink")); - (slave.fetishKnown = 1); - } else if ((slave.fetish === "cumslut")) { - r.push(`While you're giving ${his} personal attention, you discover by chance that`); - r.push(App.UI.DOM.makeElement("span", `${he} has an oral fixation!`, "pink")); - (slave.fetishKnown = 1); - } else if ((slave.fetish === "masochist")) { - r.push(`While you're giving ${his} personal correction, you discover by chance that`); - r.push(App.UI.DOM.makeElement("span", `${he} likes pain!`, "pink")); - (slave.fetishKnown = 1); - } else if ((slave.fetish === "humiliation")) { - r.push(`While you're giving ${his} personal attention in public, you discover by chance that`); - r.push(App.UI.DOM.makeElement("span", `${he} likes humiliation!`, "pink")); - (slave.fetishKnown = 1); - } - } - if (slave.behavioralFlaw === "none") { - r.push(`With ${his} behavioral flaw trained out,`); - if (slave.sexualFlaw === "none") { - if ((slave.devotion <= 20) && (slave.trust >= -20)) { - r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to breaking ${his} will.`, "yellow")); - V.personalAttention[ptwi].trainingRegimen = "break her will"; - } else { - r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to fostering devotion.`, "yellow")); - V.personalAttention[ptwi].trainingRegimen = "build her devotion"; - } + if (slave.training < 100) { + r.push(`${He} enjoys giving you lots of oral, but will need more training to develop psychological addiction to it.`); + } else { + r.push(`${He} begins to develop a psychological`); + r.push(App.UI.DOM.makeElement("span", `addiction to cum.`, "yellow")); + slave.sexualFlaw = "cum addict"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "induce anal addiction": + r.push(`The buttslut is quite pleased when you order ${him} to stay in your office`); + if (!canDoAnal(slave)) { + r.push(`and remove ${his} chastity`); + } + r.push(`whenever ${he} can for use as one of your personal anal toys. You make ${his} anal orgasms predictably regular, doing your best to inculcate reliance on them.`); + r.push(`${VCheck.Anal(slave, 10)}`); + if (slave.training < 100) { + r.push(`${He} enjoys all the anal attention, but will need more training to develop psychological addiction to buttsex.`); + } else { + r.push(`${He} begins to develop a psychological`); + r.push(App.UI.DOM.makeElement("span", `addiction to anal sex.`, "yellow")); + slave.sexualFlaw = "anal addict"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "induce attention whoring": + r.push(`The humiliation slut is quite pleased when you order ${him} to stay in your office whenever ${he} can, and fucking ${him} whenever other slaves are present. You do your best to focus ${his} attention on how the others react to the spectacle.`); + if (canDoVaginal(slave)) { + VCheck.Vaginal(slave, 10); + } else if (canDoAnal(slave)) { + VCheck.Anal(slave, 10); } else { - r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to addressing ${his} sexual flaw.`, "yellow")); - V.personalAttention[ptwi].trainingRegimen = "fix her sexual flaw"; - } - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "fix her sexual flaw": - switch (slave.sexualFlaw) { - case "hates oral": - r.push(`${slave.slaveName} has a powerful gag reflex. As a result, it's pretty unpleasant to receive oral sex from ${him}, no matter how hard ${he} tries. You apply various inventive techniques for addressing this, all of which involve requiring ${him} to repeatedly deepthroat some object or other.`); - seX(slave, "oral", V.PC, "penetrative", 10); - break; - case "hates anal": - if (canDoAnal(slave)) { - r.push(`${slave.slaveName} does not like it up the butt. ${He} views ${his} rectum as a dirty place that should not be involved in sex. Naturally, this is an unacceptable view for a Free Cities sex slave to hold. The best way to address this foolishness is by long practice, so you take every opportunity to stick things up ${his} behind, and when you bore of that, you require ${him} to assfuck ${himself} with a dildo instead.`); - r.push(`${VCheck.Anal(slave, 10)}`); - } else { - r.push(`${slave.slaveName} does not like it up the butt. ${He} views ${his} rectum as a dirty place that should not be involved in sex. Naturally, this is an unacceptable view for a Free Cities sex slave to hold. The best way to address this foolishness is by long practice, so you take every opportunity to toy with ${his} rear. The inability to actually penetrate ${his} ass hinders your efforts, however.`); - slave.training -= 20; - // more difficult training - } - break; - case "hates penetration": - if (slave.vagina > -1) { - r.push(`${slave.slaveName} does not like sex. In earlier times, it was accepted and understood that some, particularly some women, had a low sex drive. No Free Cities sex slave is allowed to engage in such foolishness. It's a hard flaw to fix, and for now you substitute obedience for honest enjoyment, and just get ${him} used to strong stimulation without putting anything in ${him}.`); - } else if (canDoAnal(slave)) { - r.push(`${slave.slaveName} does not like it up the butt. ${He} views ${his} rectum as a dirty place that should not be involved in sex. Naturally, this is an unacceptable view for a Free Cities slut to hold. The best way to address this foolishness is by long practice, so you take every opportunity to stick things up ${his} behind, and when you bore of that, you require ${him} to assfuck ${himself} instead.`); - r.push(`${VCheck.Anal(slave, 10)}`); - } else { - r.push(`${slave.slaveName} does not like it up the butt. ${He} views ${his} rectum as a dirty place that should not be involved in sex. Naturally, this is an unacceptable view for a Free Cities slut to hold. It's a hard flaw to fix when you can't introduce ${his} anus to things, but for now you substitute obedience for honest enjoyment, and just get ${him} used to strong stimulation without putting anything in ${him}.`); - } - break; - case "apathetic": - r.push(`You are well practiced at forcing slaves to get you off or suffer punishment. To address ${slave.slaveName}'s sexual apathy, you adapt the method by requiring ${him} to work ${his} mouth under your desk while you do business. ${He} does all the work, start to finish, and ${he} does it well if ${he} wants to avoid pain.`); - seX(slave, "oral", V.PC, "penetrative", 10); - break; - case "crude": - r.push(`${slave.slaveName} does not pay enough attention to standards when having sex, leading to crude comments and unsexy noises. To remedy this, you have ${him} give you oral regularly: a sacrifice, but you make sacrifices for your slaves' improvement. Oral sex can be difficult to make elegant, but you work with ${him} to make it as pretty as possible, and spank ${him} cruelly when ${he} fails.`); - seX(slave, "oral", V.PC, "penetrative", 10); - break; - case "judgemental": - r.push(`${slave.slaveName} has a bad habit of being sexually judgemental, belittling anyone who doesn't live up to ${his} pretensions of standards. To ${his} regret, ${he} frequently implies that ${he} prefers partners with big dicks: regret, because whenever ${he}'s caught doing this, you have ${him} brought to you and`); - if (V.PC.dick !== 0) { - r.push(`apply your big dick`); - } else { - r.push(`apply a big dildo`); - } - if ((slave.anus > 0) && canDoAnal(slave)) { - r.push(`to ${his} anus without mercy.`); - r.push(`${VCheck.Anal(slave, 10)}`); - } else { - r.push(`to ${his} gagging throat.`); - seX(slave, "oral", V.PC, "penetrative", 10); - } - break; - case "shamefast": - r.push(`Fortunately, shamefastness is a simple problem to break. Whenever you feel the inclination, you strip ${slave.slaveName} naked, drag ${him} out into whatever public space catches your fancy, and force ${him} to`); - if (V.PC.dick !== 0) { - r.push(`suck your dick.`); - } else { - r.push(`eat you out.`); - } - r.push(`To make sure ${he}'s really working over ${his} shame despite having ${his} face buried against you, you force ${him} to spread ${his} buttocks to show off ${his} asshole while ${he}`); - if (V.PC.dick !== 0) { - r.push(`sucks.`); - } else { - r.push(`licks you.`); - } - seX(slave, "oral", V.PC, "penetrative", 10); - break; - case "idealistic": - r.push(`${slave.slaveName} still sees sex in a naïve light, hoping to be romanced, teased to arousal, and asked permission. This might be an annoyingly ignorant outlook if it wasn't so amusing to break. By the tenth time you slap ${his} ${slave.skin} face at the slightest hesitation to`); - if (V.PC.dick !== 0) { - r.push(`suck your cock,`); - } else { - r.push(`eat your pussy,`); - } - r.push(`${his} illusions are guttering low.`); - seX(slave, "oral", V.PC, "penetrative", 10); - break; - case "repressed": - r.push(`${slave.slaveName}'s innocence and hesitations about sex are unlikely to survive much longer, but you decide to hurry the process along by making ${him}`); - if (V.PC.dick !== 0) { - r.push(`eat dick`); - } else { - r.push(`eat your pussy`); - } - r.push(`while masturbating. ${He}'s repressed enough that masturbation is still a partial punishment for ${him}, but ${he} usually gets ${himself} off anyway, shaking with release and sobbing with crushed illusions.`); seX(slave, "oral", V.PC, "penetrative", 10); - break; - case "cum addict": - r.push(`${slave.slaveName} is utterly addicted to cum. You keep ${him} in your office whenever you can, and subject ${him} to a strict sexual diet of`); - if (canDoVaginal(slave)) { - r.push(`sex,`); - } else if (canDoAnal(slave)) { - r.push(`buttsex,`); - } else { - r.push(`breast play,`); - } - r.push(`no oral allowed, no matter how much ${he} begs to be permitted to`); - if (V.PC.dick !== 0) { - r.push(`suck you off.`); - } else { - r.push(`eat you out.`); - } - if (canDoVaginal(slave)) { - VCheck.Vaginal(slave, 10); - } else if (canDoAnal(slave)) { - VCheck.Anal(slave, 10); - } - break; - case "anal addict": - r.push(`${slave.slaveName} is utterly addicted to buttsex. You keep ${him} in your office whenever you can, and subject ${him} to a strict sexual diet of`); - if (canDoVaginal(slave)) { - r.push(`vanilla sex,`); - } else { - r.push(`oral and manual intercourse,`); - } - r.push(`no anal allowed, no matter how much ${he} begs you to stick something, anything, up ${his} ass.`); - if ((slave.vagina > -1) && canDoVaginal(slave)) { - VCheck.Vaginal(slave, 10); - } else { - seX(slave, "oral", V.PC, "penetrative", 10); - } - break; - case "attention whore": - r.push(`${slave.slaveName} is an obnoxious attention whore. You keep ${him} in your office and make love to ${him} whenever you can, but only whenever you're alone in the office. You even instruct ${V.assistant.name} not to bother you while the slave is receiving ${his} therapy.`); - if (canDoVaginal(slave)) { - VCheck.Vaginal(slave, 10); - } else if (canDoAnal(slave)) { - VCheck.Anal(slave, 10); - } - break; - case "breast growth": - r.push(`${slave.slaveName} is completely devoted to ${his} own tits. You keep ${him} in your office whenever you can,`); - if (canDoVaginal(slave)) { - r.push(`fucking ${him}`); - } else if (canDoAnal(slave)) { - r.push(`fucking ${his} ass`); - } else { - r.push(`fucking ${his} face`); - } - r.push(`in positions that offer ${his} boobs no stimulation at all. When you're not broadening ${his} sexual horizons, ${he}'s restrained to keep ${him} from touching ${his} own nipples, despite piteous begging.`); - if (canDoVaginal(slave)) { - VCheck.Vaginal(slave, 10); - } else if (canDoAnal(slave)) { - VCheck.Anal(slave, 10); - } - break; - case "abusive": - case "malicious": - r.push(`${slave.slaveName} seems to have forgotten that ${he}'s your bitch, so you remind ${him}. You keep ${him} in your office whenever ${he}'s not otherwise occupied, and hold ${him} down and fuck ${him} whenever you feel like it. It's been a long time since ${he} was on the bottom this regularly.`); - if (canDoVaginal(slave)) { - VCheck.Vaginal(slave, 10); - } else if (canDoAnal(slave)) { - VCheck.Anal(slave, 10); - } - break; - case "self hating": - r.push(`${slave.slaveName} hates ${himself} much more than is normal for a well trained sex slave, to the point where ${he} actively seeks out unhealthy and destructive assignments. You build up ${his} sexual self esteem with a steady diet of`); - if (canDoVaginal(slave)) { - r.push(`missionary lovemaking,`); - } else if (canDoAnal(slave)) { - r.push(`gentle anal loving,`); - } else { - r.push(`gentle oral sex,`); - } - r.push(`and make sure to praise ${him} and keep ${his} spirits up as much as you can.`); - if (canDoVaginal(slave)) { - VCheck.Vaginal(slave, 10); - } else if (canDoAnal(slave)) { - VCheck.Anal(slave, 10); - } - break; - case "neglectful": - r.push(`${slave.slaveName} has given up on ${his} own sexual pleasure to an extent, focusing only on getting others off. You keep ${him} in your office and play with ${him} regularly, making a game of getting ${him} off as often as possible. You're careful to use other slaves for your own pleasure.`); - if (canDoVaginal(slave)) { - VCheck.Vaginal(slave, 10); - } else if (canDoAnal(slave)) { - VCheck.Anal(slave, 10); - } - break; - case "breeder": - r.push(`${slave.slaveName} has become so sexually obsessed with pregnancy that impregnation holds less interest for ${him} than being pregnant.`); - if (slave.pregKnown === 1) { - r.push(`Since ${he}'s pregnant, getting ${him} out of this perversion is more difficult than just fucking ${him}.`); - } else if (!canDoAnal(slave)) { - r.push(`Fortunately, all slaves have a convenient hole in which they can be fucked without even the slightest danger of pregnancy.`); - r.push(`Since ${his} ass is off-limits, you address the situation by fucking ${his} throat, and making sure ${he} enjoys it, too.`); - seX(slave, "oral", V.PC, "penetrative", 10); - } else if (slave.mpreg === 1) { - r.push(`Fortunately, all slaves have a convenient hole in which they can be fucked without even the slightest danger of pregnancy, which, in ${his} case, is not ${his} fertile ass.`); - r.push(`So, you address the situation by fucking ${his} throat, and making sure ${he} enjoys it, too.`); - seX(slave, "oral", V.PC, "penetrative", 10); - } else { - r.push(`Fortunately, all slaves have a convenient hole in which they can be fucked without even the slightest danger of pregnancy.`); - r.push(`So, you address the situation by fucking ${him} up the ass, and making sure ${he} gets off to it, too.`); - r.push(`${VCheck.Anal(slave, 10)}`); - } - } - slave.training += 40; - // fixing is easier than softening - if (slave.training < 100) { - r.push(`You make progress, but ${he}'s the same at the end of the week.`); - } else { - slave.training = 0; - r.push(`By the end of the week,`); - r.push(App.UI.DOM.makeElement("span", `you break ${him} of ${his} bad habits.`, "green")); - r.push(App.UI.DOM.makeElement("span", `${His} obedience has increased.`, "hotpink")); - slave.sexualFlaw = "none"; - slave.devotion += 4; - } - if (slave.fetishKnown !== 1) { - if (slave.fetish === "submissive") { - r.push(`${He} really takes to your close attention;`); - r.push(App.UI.DOM.makeElement("span", `${he}'s a natural submissive!`, "pink")); - (slave.fetishKnown = 1); - } else if ((slave.fetish === "cumslut")) { - r.push(`While you're giving ${him} personal attention, you discover by chance that`); - r.push(App.UI.DOM.makeElement("span", `${he} has an oral fixation!`, "pink")); - (slave.fetishKnown = 1); - } else if ((slave.fetish === "masochist")) { - r.push(`While you're giving ${him} personal correction, you discover by chance that`); - r.push(App.UI.DOM.makeElement("span", `${he} likes pain!`, "pink")); - (slave.fetishKnown = 1); - } else if ((slave.fetish === "humiliation")) { - r.push(`While you're giving ${him} personal attention in public, you discover by chance that`); - r.push(App.UI.DOM.makeElement("span", `${he} likes humiliation!`, "pink")); - (slave.fetishKnown = 1); - } - } - if (slave.sexualFlaw === "none") { - r.push(`With ${his} sexual flaw trained out,`); - coloredText = []; - coloredText.push(`${his} training assignment has defaulted to`); - if (slave.behavioralFlaw === "none") { - if ((slave.devotion <= 20) && (slave.trust >= -20)) { - coloredText.push(`breaking ${his} will.`); - V.personalAttention[ptwi].trainingRegimen = "break her will"; - } else { - coloredText.push(`fostering devotion.`); - V.personalAttention[ptwi].trainingRegimen = "build her devotion"; - } + } + if (slave.training < 100) { + r.push(`${He} enjoys all the humiliation, but will need more training to become a true attention whore.`); } else { - coloredText.push(`addressing ${his} behavioral flaw.`); - V.personalAttention[ptwi].trainingRegimen = "fix her behavioral flaw"; - } - r.push(App.UI.makeElement("span", coloredText.join(" "), "yellow")); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "explore her sexuality": - slave.attrKnown = 1; - r.push(`You set about investigating ${his} sexuality.`); - if ((slave.devotion < -20) && (slave.trust >= -20)) { - r.push(`${He}'s so resistant that you have to fill ${him} with psychoactive drugs and restrain ${him} painfully in order to learn anything. This abuse`); - r.push(App.UI.DOM.makeElement("span", `increases ${his} hatred.`, "mediumorchid")); - slave.devotion -= 5; - } else if (slave.devotion <= 20) { - r.push(`You anticipate that ${he} won't be sufficiently compliant with some of the extreme practices you mean to investigate, so you give ${him} a hearty dose of aphrodisiacs and place ${him} in bondage gear. ${He} isn't happy, but soon ${he}'s too horny to care.`); - } else { - r.push(`${He}'s obedient enough that there is no trouble with any of the sexual kinks you subject ${him} to. Some ${he} likes more than others, but when ${he}'s not enjoying ${himself}, ${he} grits ${his} teeth and concentrates on obeying you.`); - } - r.push(`You start off by making ${him} view a medley of pornography while ${V.assistant.name} monitors ${him} for arousal. It seems ${he} is`); - if (slave.attrXY <= 5) { - r.push(App.UI.DOM.makeElement("span", `disgusted by men`, "red")); - } else if (slave.attrXY <= 15) { - r.push(App.UI.DOM.makeElement("span", `turned off by men`, "red")); - } else if (slave.attrXY <= 35) { - r.push(App.UI.DOM.makeElement("span", `not attracted to men`, "red")); - } else if (slave.attrXY <= 65) { - r.push(`indifferent to men,`); - } else if (slave.attrXY <= 85) { - r.push(App.UI.DOM.makeElement("span", `attracted to men`, "green")); - } else if (slave.attrXY <= 95) { - r.push(App.UI.DOM.makeElement("span", `aroused by men`, "green")); - } else { - r.push(App.UI.DOM.makeElement("span", `passionate about men`, "green")); - } - r.push(`and`); - if (slave.attrXX <= 5) { - r.push(App.UI.DOM.makeElement("span", `disgusted by women.`, "red")); - } else if (slave.attrXX <= 15) { - r.push(App.UI.DOM.makeElement("span", `turned off by women.`, "red")); - } else if (slave.attrXX <= 35) { - r.push(App.UI.DOM.makeElement("span", `not attracted to women.`, "red")); - } else if (slave.attrXX <= 65) { - r.push(`indifferent to women.`); - } else if (slave.attrXX <= 85) { - r.push(App.UI.DOM.makeElement("span", `attracted to women.`, "green")); - } else if (slave.attrXX <= 95) { - r.push(App.UI.DOM.makeElement("span", `aroused by women.`, "green")); - } else { - r.push(App.UI.DOM.makeElement("span", `passionate about women.`, "green")); - } - if (slave.fetishKnown !== 1) { - slave.fetishKnown = 1; - App.Events.addParagraph(el, r); - r = []; - r.push(`You then give ${him} a good exploratory fondle. You play with ${his} nipples and each of ${his} holes and gauge ${his} reaction.`); - if (slave.fetish === "boobs") { - r.push(`You've barely touched ${his} nipples before ${he} moans. After some experimentation, it becomes clear that ${his} nipples might as well be a pair of slightly less sensitive`); - if (slave.nipples === "fuckable") { - r.push(`pussies.`); - } else { - r.push(`clits.`); - } - r.push(`Finding ${his} mammary fixation with you has`); - r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, "hotpink")); - slave.devotion += 4; - } else if (slave.fetish === "buttslut") { - if (slave.vagina >= 0) { - r.push(`When you move from fingering ${his} pussy to ${his} asshole,`); - } else { - r.push(`When you move from fondling ${his} mouth to ${his} asshole,`); - } - r.push(`you've barely touched ${his} butt before ${he} comes explosively. After some experimentation, it becomes clear that ${his} g-spot might as well be located up ${his} ass. Finding ${his} anal fixation with you has`); - r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, "hotpink")); - slave.devotion += 4; - } else if (slave.energy > 95) { - r.push(`${He} shows no real reaction when you move your fingers from hole to hole, because ${he} seems to react with arousal to fingers in any of them.`); + r.push(`${He} becomes a`); + r.push(App.UI.DOM.makeElement("span", `true attention whore,`, "yellow")); + r.push(`caring more about the spectators than the sex.`); + slave.sexualFlaw = "attention whore"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "induce breast growth obsession": + r.push(`You inspect ${his} breasts multiple times a day, and praise ${him} effusively when they grow at all. You treat it as though it were something ${he} could control personally.`); + if (slave.training < 100) { + r.push(`${He} enjoys your attention to ${his} favorite part of ${himself}, but doesn't truly internalize your focus on their growth.`); } else { - r.push(`Nothing unusual happens.`); - } - App.Events.addParagraph(el, r); - r = []; - r.push(`Next, you demand extreme submission from ${him}. You make ${him} change into bondage gear that blinds ${him}, restricts ${his} movement, forces ${him} to present ${his} breasts uncomfortably, and holds vibrators against ${him}. Thus attired, ${he} is forced to serve you in whatever petty ways occur to you.`); - if (slave.fetish === "submissive") { - r.push(`During the first hour of this treatment, ${he} cums hard against the vibrators. ${He}'s a natural submissive! Discovering this about ${himself} under your hands has`); - r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, "hotpink")); - slave.devotion += 4; - } else if (slave.energy > 95) { - r.push(`${He} complies, showing the same enthusiasm for this as for other sex.`); + r.push(`${He} begins to believe you despite ${himself}, and becomes`); + r.push(App.UI.DOM.makeElement("span", `obsessed with breast growth.`, "yellow")); + slave.sexualFlaw = "breast growth"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "induce abusiveness": + r.push(`The dom is gratified when you order ${him} to stay in your office whenever ${he} can to fuck any slave you feel like throwing ${his} way. You do your best to limit ${his} menu items to reluctant or even rebellious slaves, and praise ${him} when ${he} forces ${himself} on them.`); + seX(slave, "penetrative", "slaves", "", 10); + if (slave.training < 100) { + r.push(`${He} has fun, but ${he} continues to enjoy getting off more than getting to use bitches. ${He}'ll need more practice.`); } else { - r.push(`${He} complies, but ${he}'s not a natural submissive.`); - } - App.Events.addParagraph(el, r); - r = []; - r.push(`Before you let ${him} out of the extreme bondage, you rain a series of light blows across ${his} nipples and buttocks.`); - if (slave.fetish === "masochist") { - r.push(`${He} almost orgasms at the stinging pain. ${He}'s a masochist! This discovery has`); - r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, "hotpink")); - slave.devotion += 4; - } else if (slave.energy > 95) { - r.push(`${He} enjoys the pain play, but ${he} seems to enjoy everything you try.`); + r.push(`${He} becomes`); + r.push(App.UI.DOM.makeElement("span", `sexually abusive,`, "yellow")); + r.push(`looking over each slave that comes into your office in the hope they'll resist.`); + slave.sexualFlaw = "abusive"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "induce maliciousness": + r.push(`The sadist is gratified when you order ${him} to stay in your office whenever ${he} can to have ${his} way with any slave you feel like throwing ${his} way. You do your best to limit ${his} menu items to rebellious slaves, and praise ${him} when ${his} sadism makes ${him} an effective punishment tool.`); + seX(slave, "penetrative", "slaves", "", 10); + if (slave.training < 100) { + r.push(`${He} enjoys ${himself}, but still betrays occasional concern when slaves are really broken by what ${he} does to them. ${He}'ll need more practice.`); } else { - r.push(`${He} struggles and tries to avoid the blows.`); - } - App.Events.addParagraph(el, r); - r = []; - r.push(`The next day, ${he} continues to accompany you. Whenever cum is involved in your day's affairs in any way, you require ${him} to clean it up with ${his} mouth.`); - if (slave.fetish === "cumslut") { - r.push(`${He} enjoys this treatment. ${He}'s a cumslut! Discovering this about ${himself} under your hands has`); - r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, "hotpink")); - slave.devotion += 4; - } else if (slave.energy > 95) { - r.push(`${He} enjoys using ${his} mouth, but no more than other kinds of sexual activity.`); + r.push(`${He} becomes`); + r.push(App.UI.DOM.makeElement("span", `sexually malicious,`, "yellow")); + r.push(`going so far as to lick tears off ${his} victims' faces.`); + slave.sexualFlaw = "malicious"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "induce self hatred": + r.push(`You order the masochist to stay in your office whenever ${he}'s not working or resting. You fuck ${him} cruelly, going beyond the pain ${he} enjoys into harsh degradation. And every time you use ${him}, you make sure to tell ${him} how useless ${he} is.`); + if (canDoVaginal(slave)) { + VCheck.Vaginal(slave, 10); + } else if (canDoAnal(slave)) { + VCheck.Anal(slave, 10); } else { - r.push(`If ${he} had any special regard for cum, you'd know it, and ${he} doesn't.`); - } - const {himU, hisU, girlU} = getNonlocalPronouns(0).appendSuffix('U'); - App.Events.addParagraph(el, r); - r = []; - r.push(`You carefully watch ${his} reaction as you let ${him} spend a short time relaxing with a pregnant slave.`); - if (slave.fetish === "pregnancy") { - r.push(`${He}'s fascinated. ${He} fetishizes fertility! Discovering this with you has`); - r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, "hotpink")); - slave.devotion += 4; - } else if (slave.energy > 95) { - r.push(`${He} spends most of the rest ogling the pregnant slave's boobs.`); + seX(slave, "oral", V.PC, "penetrative", 10); + } + if (slave.training < 100) { + r.push(`${He} gets off on the pain, but ${his} sense of self isn't seriously affected this week.`); } else { - r.push(`${He} simply enjoys the rest.`); - } - App.Events.addParagraph(el, r); - r = []; - r.push(`You restrain the pregnant slave and administer a brief beating across ${hisU} bare buttocks, ensuring that you cause enough pain to produce a few tears, a bit of begging, and some struggling.`); - if (slave.fetish === "sadist") { - r.push(`${He}'s almost painfully aroused. ${He}'s titillated by the idea of causing pain! Discovering this about ${himself} under your direction has`); - r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, "hotpink")); - slave.devotion += 4; - } else if (slave.energy > 95) { - r.push(`${He} enjoys watching the poor pregnant slave wriggle, but ${he}'s watching ${hisU} butt rather than the beating.`); + r.push(`${He} becomes`); + r.push(App.UI.DOM.makeElement("span", `sexually self hating,`, "yellow")); + r.push(`and tearfully begs to you do worse to ${him}, no matter how bad it gets.`); + slave.sexualFlaw = "self hating"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "induce sexual self neglect": + r.push(`You order the sub to stay in your office whenever ${he}'s not working or resting, and use ${his} body for your pleasure. The instant you climax, you go back to your work or to another slave, treating ${him} like a piece of used tissue.`); + if (canDoVaginal(slave)) { + VCheck.Vaginal(slave, 10); + } else if (canDoAnal(slave)) { + VCheck.Anal(slave, 10); } else { - r.push(`${He}'s a bit disturbed by the`); - if (canSee(slave)) { - r.push(`sight`); - } else if (canHear(slave)) { - r.push(`sound`); - } else { - r.push(`idea`); - } - r.push(`of you punishing the pregnant ${girlU}.`); + seX(slave, "oral", V.PC, "penetrative", 10); } - App.Events.addParagraph(el, r); - r = []; - r.push(`Before letting the poor pregnant slave go, you require ${slave.slaveName} to add a blindfold to the restraints.`); - if (slave.fetish === "dom") { - r.push(`${He} seems to really enjoy blindfolding the poor ${girlU}, reassuring ${himU} as ${he} does. ${He}'s a natural sexual top! Discovering this about ${himself} under your direction has`); - r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, "hotpink")); - slave.devotion += 4; - } else if (slave.energy > 95) { - r.push(`${He} enjoys getting closer to the slave, mostly so ${he} can give ${hisU} pregnant pussy a thorough grope.`); + if (slave.training < 100) { + r.push(`${He} accepts ${his} utterly submissive role, but ${his} sense of self isn't seriously affected this week.`); } else { - r.push(`${He} just follows orders.`); - } - App.Events.addParagraph(el, r); - r = []; - r.push(`Lastly, you place ${him} in a special room in your penthouse filled with live video equipment. They get to see ${him} groped, deepthroated, facialed, teased, and tortured.`); - if (slave.fetish === "humiliation") { - r.push(`The more viewers ${he} gets, the harder ${he} comes. ${He}'s a slut for humiliation! Discovering this about ${himself} under your hands has`); - r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, "hotpink")); - slave.devotion += 4; - } else if (slave.energy > 95) { - r.push(`${He} enjoys showing off sexually, but focuses on the sex first. ${He} got off on everything, and is clearly a nympho. Discovering this about ${himself} under your hands has`); - r.push(App.UI.DOM.makeElement("span", `greatly increased ${his} devotion to you.`, "hotpink")); - slave.devotion += 9; + r.push(`${He} becomes`); + r.push(App.UI.DOM.makeElement("span", `sexually self neglectful,`, "yellow")); + r.push(`and loses all expectation that those who use ${him} will address ${his} pleasure at all.`); + slave.sexualFlaw = "neglectful"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + break; + case "induce breeding obsession": + r.push(`You order the pregnant slut to stay in your office whenever ${he}'s not working or resting.`); + if (slave.pregKnown === 0) { + r.push(`Since ${he}'s not pregnant, you keep ${him} rigged up with an enormous sympathy belly when ${he}'s there.`); + } + r.push(`Rather than fucking ${him}, you praise ${his} pregnancy effusively, and only allow ${him} to get off when you're doing so.`); + if (slave.training < 100) { + r.push(`${He} enjoys ${himself}, but mostly because of the pleasure. ${He}'ll need more training.`); } else { - r.push(`${He} gets through it, but ${he} doesn't seem to enjoy`); - if (canSee(slave)) { - r.push(`seeing ${his} audience on the screen.`); - } else if (canHear(slave)) { - r.push(`hearing ${his} jeering audience on the screen.`); - } else { - r.push(`the feeling of being watched.`); - } - } - } else { - App.Events.addParagraph(el, r); - r = []; - r.push(`You already know that ${he}`); - switch (slave.fetish) { - case "buttslut": - case "cumslut": - case "dom": - case "masochist": - case "sadist": - case "submissive": - r.push(`is a`); - r.push(App.UI.DOM.makeElement("span", `${slave.fetish},`, "coral")); - break; - case "mindbroken": - r.push(`is`); - r.push(App.UI.DOM.makeElement("span", `mindbroken,`, "red")); - break; - case "boobs": - case "humiliation": - case "pregnancy": - r.push(`loves`); - r.push(App.UI.DOM.makeElement("span", `${slave.fetish},`, "coral")); - break; - default: - r.push(`lacks a fetish,`); - } - r.push(`so your investigation is complete.`); - } - r.push(basicTrainingDefaulter(slave)); - r.push(IncreasePCSkills('slaving', 0.1)); - break; - case "induce arrogance": - r.push(`Since you've decided to incite ${him} to arrogance, you praise ${him} effusively, and give orders that others are to do so as well. Other slaves are punished for things ${he}'s allowed to get away with.`); - r.push(induceFlawLenityEffects(slave)); - if (slave.training < 100) { - r.push(`${He} isn't seriously affected; you'll have to be more subtle next week.`); - } else { - slave.training = 0; - r.push(`${He} begins to think ${himself} special, and is now`); - r.push(App.UI.DOM.makeElement("span", `arrogant.`, "red")); - slave.behavioralFlaw = "arrogant"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "induce bitchiness": - r.push(`Since you've decided to induce ${him} to bitchiness, you keep ${him} in your office and induce ${him} to criticize other slaves, rewarding ${him} when ${he}'s especially catty.`); - r.push(induceFlawLenityEffects(slave)); - if (slave.training < 100) { - r.push(`${He} goes along, but remains cautious and will need more practice.`); - } else { - r.push(`${He} starts making`); - r.push(App.UI.DOM.makeElement("span", `bitchy`, "red")); - r.push(`remarks without being prompted.`); - slave.behavioralFlaw = "bitchy"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "induce odd behavior": - r.push(`Since you've decided to abuse ${him} into odd behavior, you target ${him} for a campaign of surprise sex. You constantly ambush ${him}, shove ${him} onto the ground, and fuck ${him}. Sometimes ${he} wakes up from bad dreams to find you penetrating ${him}.`); - r.push(induceFlawAbuseEffects(slave)); - if (canDoVaginal(slave)) { - VCheck.Vaginal(slave, 10); - } else if (canDoAnal(slave)) { - VCheck.Anal(slave, 10); - } else { - seX(slave, "oral", V.PC, "penetrative", 10); - } - if (slave.training < 100) { - r.push(`${He} does ${his} best to tolerate the abuse.`); - } else { - r.push(`${He} starts`); - r.push(App.UI.DOM.makeElement("span", `behaving oddly,`, "red")); - r.push(`jumping at noises and mumbling to ${himself}.`); - slave.behavioralFlaw = "odd"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "induce hatred of men": - r.push(`In order to make ${him} hate men, you sometimes simply`); - if (V.PC.dick !== 0) { - r.push(`stick your dick in ${him} without asking,`); - } else { - r.push(`stuff a strap-on inside ${him} without asking,`); - } - r.push(`and sometimes force shockingly juvenile pranks on ${him}. ${He} is regularly smacked in the face with floppy dildos.`); - r.push(induceFlawAbuseEffects(slave)); - if (canDoVaginal(slave)) { - VCheck.Vaginal(slave, 10); - } else if (canDoAnal(slave)) { - VCheck.Anal(slave, 10); - } else { - seX(slave, "oral", V.PC, "penetrative", 10); - } - if (slave.training < 100) { - r.push(`${He} focuses more on you than on the masculine aspects of this. You'll need to be more subtle next week.`); - } else { - r.push(`You notice ${him} starting to`); - r.push(App.UI.DOM.makeElement("span", `shoot hateful glances`, "red")); - r.push(`at any men ${he} sees.`); - slave.behavioralFlaw = "hates men"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "induce hatred of women": - r.push(`In order to make ${him} hate women, you keep ${him} in your office when ${he}'s not otherwise occupied, and`); - if (V.PC.vagina === -1) { - r.push(`make ${him} eat other slaves out`); - } else { - r.push(`sit on ${his} face`); - } - r.push(`until ${he}'s thoroughly sick of pussy.`); - r.push(induceFlawAbuseEffects(slave)); - if (slave.training < 100) { - r.push(`${He} focuses more on you than on the feminine aspects of this. You'll need to be more subtle next week.`); - } else { - r.push(`You notice ${him} starting to`); - r.push(App.UI.DOM.makeElement("span", `shoot hateful glances`, "red")); - r.push(`at any vaginas ${he} sees.`); - slave.behavioralFlaw = "hates women"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "induce gluttony": - r.push(`Inducing gluttony is harder than inducing anorexia; you force ${him} to orgasm when ${he}'s eating, and praise ${him} effusively when ${he} gains weight. You also provide ${him} with ample rations for stress eating.`); - slave.training -= 20; - // more difficult training - if (slave.training < 100) { - r.push(`${He} eats when ordered, but isn't deeply affected. ${He}'ll need more practice being a pig.`); - } else { - r.push(`You notice ${him} starting to`); - r.push(App.UI.DOM.makeElement("span", `enjoy eating`, "red")); - r.push(`for its own sake, even when ${he}'s not hungry.`); - slave.behavioralFlaw = "gluttonous"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "induce anorexia": - r.push(`You criticize ${him} cruelly whenever ${he} eats, and praise thinner slaves to ${his} face at every opportunity.`); - r.push(induceFlawAbuseEffects(slave)); - if (slave.training < 100) { - r.push(`${He} continues consuming ${his} rations when ordered, and will need further training.`); - } else { - r.push(`${He} begins to`); - r.push(App.UI.DOM.makeElement("span", `eat only when repeatedly ordered to.`, "red")); - slave.behavioralFlaw = "anorexic"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "induce religious devotion": - r.push(`You direct a campaign of abuse and threats at ${him}, and surreptitiously ensure that a little religious text from ${his} home country finds its way into a hiding place in ${his} living area.`); - r.push(induceFlawAbuseEffects(slave)); - if (slave.training < 100) { - r.push(`${He} keeps ${his} head down and shows no sign of religious introspection, at least this week.`); - } else { - r.push(`${He} begins to read it when ${he} thinks ${he}'s alone, and`); - r.push(App.UI.DOM.makeElement("span", `talks to God`, "red")); - r.push(`when ${he} thinks only He is listening.`); - slave.behavioralFlaw = "devout"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "induce liberation": - r.push(`You direct a campaign of abuse and threats at ${him}, making sure to threaten ${him} with the absolute worst of slavery in your arcology. You also arrange for ${him} to witness other citizen's slaves in situations that aren't much fun.`); - r.push(induceFlawAbuseEffects(slave)); - if (slave.training < 100) { - r.push(`${He} does ${his} best to endure the abuse, unknowingly condemning ${himself} to more.`); - } else { - r.push(`A deep`); - r.push(App.UI.DOM.makeElement("span", `anger about slavery`, "red")); - r.push(`builds within ${him}.`); - slave.behavioralFlaw = "liberated"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "induce hatred of oral": - r.push(`Since you've decided to force ${him} to dislike oral sex, you're forced to use a complicated and refined slave breaking technique: constantly raping ${his} face.`); - r.push(induceFlawAbuseEffects(slave)); - seX(slave, "oral", V.PC, "penetrative", 10); - if (slave.training < 100) { - r.push(`${He} does ${his} best to comply with the oral abuse, unknowingly condemning ${himself} to more.`); - } else { - r.push(`After gagging enough, ${he} finally starts to`); - r.push(App.UI.DOM.makeElement("span", `hate oral.`, "red")); - slave.sexualFlaw = "hates oral"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "induce hatred of anal": - r.push(`Since you've decided to force ${him} to dislike anal sex, you're forced to use a complicated and refined slave breaking technique: constantly raping ${his} ass.`); - if (!canDoAnal(slave)) { - r.push(`Every time you catch ${him} with ${his} chastity off, you're there to penetrate ${his} rectum.`); - } - r.push(induceFlawAbuseEffects(slave)); - r.push(`${VCheck.Anal(slave, 10)}`); - if (slave.training < 100) { - r.push(`${He} does ${his} best to comply with your abuse of ${his} butthole, unknowingly condemning ${himself} to more assrape.`); - } else { - r.push(`After feeling ${his} poor sphincter grow sorer and sorer, ${he} starts to`); - r.push(App.UI.DOM.makeElement("span", `hate anal.`, "red")); - slave.sexualFlaw = "hates anal"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "induce hatred of penetration": - r.push(`Since you've decided to force ${him} to dislike penetration, you're forced to use a complicated and refined slave breaking technique: constantly raping ${him}.`); - r.push(induceFlawAbuseEffects(slave)); - if (canDoVaginal(slave)) { - VCheck.Vaginal(slave, 10); - } else if (canDoAnal(slave)) { - VCheck.Anal(slave, 10); - } else { - seX(slave, "oral", V.PC, "penetrative", 10); - } - if (slave.training < 100) { - r.push(`${He} does ${his} best to comply with your abuse, unknowingly condemning ${himself} to more of it.`); - } else { - r.push(`After feeling ${his} poor holes grow sorer and sorer, ${he} starts to`); - r.push(App.UI.DOM.makeElement("span", `hate getting fucked.`, "red")); - slave.sexualFlaw = "hates penetration"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "induce shame": - r.push(`Since you've decided to force shame on ${him}, you keep ${him} in your office whenever ${he}'s not otherwise occupied, and heap derision on ${him} at every opportunity, even inviting visitors to join you in chats about how unattractive and worthless ${he} is.`); - r.push(induceFlawAbuseEffects(slave)); - if (slave.training < 100) { - r.push(`${He} does ${his} best to keep ${his} chin up, unknowingly condemning ${himself} to more of this abuse.`); - } else { - r.push(`${He} wants nothing more than to hide in corner and cry, and is now`); - r.push(App.UI.DOM.makeElement("span", `shamefast.`, "red")); - slave.sexualFlaw = "shamefast"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "induce sexual idealism": - r.push(`Since you've decided to induce ${him} to sexual idealism, you keep ${him} in your office, and when the two of you are all alone, gossip with ${him} about other slaves and even citizens. You do your best to encourage ${him} to believe absurdities.`); - r.push(induceFlawLenityEffects(slave)); - if (slave.training < 100) { - r.push(`${He} doesn't know what to make of this; you'll have to keep at it.`); - } else { - r.push(`${He} follows along, and is now`); - r.push(App.UI.DOM.makeElement("span", `sexually idealistic.`, "red")); - slave.sexualFlaw = "idealistic"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "induce sexual repression": - r.push(`Since you've decided to force sexual repression on ${him}, you keep ${him} in your office whenever ${he}'s not otherwise occupied. You use the monitoring systems to reveal ${his} sexual arousal whenever it appears, and castigate and punish ${him} for it.`); - r.push(induceFlawAbuseEffects(slave)); - if (slave.training < 100) { - r.push(`${He} does ${his} best to keep ${his} chin up, unknowingly condemning ${himself} to more of this abuse.`); - } else { - r.push(`${He} desperately tries to avoid even thinking about subjects that get ${him} punished, and is now`); - r.push(App.UI.DOM.makeElement("span", `sexually repressed.`, "red")); - slave.sexualFlaw = "repressed"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "induce sexual apathy": - r.push(`Since you've decided to force sexual apathy on ${him}, you keep ${him} in your office whenever ${he}'s not otherwise occupied. You use ${him} regularly, and punish ${him} whenever ${he} shows any sign of enjoyment.`); - r.push(induceFlawAbuseEffects(slave)); - if (canDoVaginal(slave)) { - VCheck.Vaginal(slave, 10); - } else if (canDoAnal(slave)) { - VCheck.Anal(slave, 10); - } else { - seX(slave, "oral", V.PC, "penetrative", 10); - } - if (slave.training < 100) { - r.push(`${He} continues to experience arousal when fucked, and will need more of this treatment.`); - } else { - r.push(`${He} desperately tries to avoid arousal, and is now`); - r.push(App.UI.DOM.makeElement("span", `sexually apathetic.`, "red")); - slave.sexualFlaw = "apathetic"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "induce crudity": - r.push(`Since you've decided to force sexual crudeness on ${him}, you keep ${him} in your office whenever ${he}'s not otherwise occupied, and degrade ${him} cruelly. You relax the normal cleanliness rules, and require ${him} to leave ${his} used holes as they are until ${he}'s too disgusting to fuck.`); - if (canDoVaginal(slave)) { - VCheck.Vaginal(slave, 10); - } else if (canDoAnal(slave)) { - VCheck.Anal(slave, 10); - } else { - seX(slave, "oral", V.PC, "penetrative", 10); - } - r.push(induceFlawAbuseEffects(slave)); - if (slave.training < 100) { - r.push(`${He} does ${his} best to tolerate the unclean feelings, condemning ${himself} to more of this.`); - } else { - r.push(`${He} slowly stops caring, and is now`); - r.push(App.UI.DOM.makeElement("span", `sexually crude.`, "red")); - slave.sexualFlaw = "crude"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "induce judgement": - r.push(`Since you've decided to make ${him} sexually judgemental, you keep ${him} in your office and fuck ${him},`); - if (V.PC.dick !== 0) { - r.push(`praising ${him} whenever ${he} takes your big dick well.`); - } else { - r.push(`using a huge strap-on on ${him} and praising ${him} when ${he} takes it like a good ${girl}.`); - } - r.push(induceFlawLenityEffects(slave)); - if (slave.training < 100) { - r.push(`${He} writes this off as bravado, and will need more training.`); - } else { - r.push(`${He} starts to consider ${himself} reserved for special sexual treatment, and is now`); - r.push(App.UI.DOM.makeElement("span", `sexually judgemental.`, "red")); - slave.sexualFlaw = "judgemental"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "induce cum addiction": - r.push(`The cumslut is quite pleased when you order ${him} to stay in your office whenever ${he} can for use as one of your personal oral toys. You carefully limit ${his} orgasms to when`); - if (V.PC.dick !== 0) { - r.push(`you're blowing your load down ${his} throat,`); - } else { - r.push(`${he}'s swallowing your pussyjuice,`); - } - r.push(`and make ${his} oral adventures predictably regular.`); - seX(slave, "oral", V.PC, "penetrative", 10); - if (slave.training < 100) { - r.push(`${He} enjoys giving you lots of oral, but will need more training to develop psychological addiction to it.`); - } else { - r.push(`${He} begins to develop a psychological`); - r.push(App.UI.DOM.makeElement("span", `addiction to cum.`, "yellow")); - slave.sexualFlaw = "cum addict"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "induce anal addiction": - r.push(`The buttslut is quite pleased when you order ${him} to stay in your office`); - if (!canDoAnal(slave)) { - r.push(`and remove ${his} chastity`); - } - r.push(`whenever ${he} can for use as one of your personal anal toys. You make ${his} anal orgasms predictably regular, doing your best to inculcate reliance on them.`); - r.push(`${VCheck.Anal(slave, 10)}`); - if (slave.training < 100) { - r.push(`${He} enjoys all the anal attention, but will need more training to develop psychological addiction to buttsex.`); - } else { - r.push(`${He} begins to develop a psychological`); - r.push(App.UI.DOM.makeElement("span", `addiction to anal sex.`, "yellow")); - slave.sexualFlaw = "anal addict"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "induce attention whoring": - r.push(`The humiliation slut is quite pleased when you order ${him} to stay in your office whenever ${he} can, and fucking ${him} whenever other slaves are present. You do your best to focus ${his} attention on how the others react to the spectacle.`); - if (canDoVaginal(slave)) { - VCheck.Vaginal(slave, 10); - } else if (canDoAnal(slave)) { - VCheck.Anal(slave, 10); - } else { - seX(slave, "oral", V.PC, "penetrative", 10); - } - if (slave.training < 100) { - r.push(`${He} enjoys all the humiliation, but will need more training to become a true attention whore.`); - } else { - r.push(`${He} becomes a`); - r.push(App.UI.DOM.makeElement("span", `true attention whore,`, "yellow")); - r.push(`caring more about the spectators than the sex.`); - slave.sexualFlaw = "attention whore"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "induce breast growth obsession": - r.push(`You inspect ${his} breasts multiple times a day, and praise ${him} effusively when they grow at all. You treat it as though it were something ${he} could control personally.`); - if (slave.training < 100) { - r.push(`${He} enjoys your attention to ${his} favorite part of ${himself}, but doesn't truly internalize your focus on their growth.`); - } else { - r.push(`${He} begins to believe you despite ${himself}, and becomes`); - r.push(App.UI.DOM.makeElement("span", `obsessed with breast growth.`, "yellow")); - slave.sexualFlaw = "breast growth"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "induce abusiveness": - r.push(`The dom is gratified when you order ${him} to stay in your office whenever ${he} can to fuck any slave you feel like throwing ${his} way. You do your best to limit ${his} menu items to reluctant or even rebellious slaves, and praise ${him} when ${he} forces ${himself} on them.`); - seX(slave, "penetrative", "slaves", "", 10); - if (slave.training < 100) { - r.push(`${He} has fun, but ${he} continues to enjoy getting off more than getting to use bitches. ${He}'ll need more practice.`); - } else { - r.push(`${He} becomes`); - r.push(App.UI.DOM.makeElement("span", `sexually abusive,`, "yellow")); - r.push(`looking over each slave that comes into your office in the hope they'll resist.`); - slave.sexualFlaw = "abusive"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "induce maliciousness": - r.push(`The sadist is gratified when you order ${him} to stay in your office whenever ${he} can to have ${his} way with any slave you feel like throwing ${his} way. You do your best to limit ${his} menu items to rebellious slaves, and praise ${him} when ${his} sadism makes ${him} an effective punishment tool.`); - seX(slave, "penetrative", "slaves", "", 10); - if (slave.training < 100) { - r.push(`${He} enjoys ${himself}, but still betrays occasional concern when slaves are really broken by what ${he} does to them. ${He}'ll need more practice.`); - } else { - r.push(`${He} becomes`); - r.push(App.UI.DOM.makeElement("span", `sexually malicious,`, "yellow")); - r.push(`going so far as to lick tears off ${his} victims' faces.`); - slave.sexualFlaw = "malicious"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "induce self hatred": - r.push(`You order the masochist to stay in your office whenever ${he}'s not working or resting. You fuck ${him} cruelly, going beyond the pain ${he} enjoys into harsh degradation. And every time you use ${him}, you make sure to tell ${him} how useless ${he} is.`); - if (canDoVaginal(slave)) { - VCheck.Vaginal(slave, 10); - } else if (canDoAnal(slave)) { - VCheck.Anal(slave, 10); - } else { - seX(slave, "oral", V.PC, "penetrative", 10); - } - if (slave.training < 100) { - r.push(`${He} gets off on the pain, but ${his} sense of self isn't seriously affected this week.`); - } else { - r.push(`${He} becomes`); - r.push(App.UI.DOM.makeElement("span", `sexually self hating,`, "yellow")); - r.push(`and tearfully begs to you do worse to ${him}, no matter how bad it gets.`); - slave.sexualFlaw = "self hating"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "induce sexual self neglect": - r.push(`You order the sub to stay in your office whenever ${he}'s not working or resting, and use ${his} body for your pleasure. The instant you climax, you go back to your work or to another slave, treating ${him} like a piece of used tissue.`); - if (canDoVaginal(slave)) { - VCheck.Vaginal(slave, 10); - } else if (canDoAnal(slave)) { - VCheck.Anal(slave, 10); - } else { - seX(slave, "oral", V.PC, "penetrative", 10); - } - if (slave.training < 100) { - r.push(`${He} accepts ${his} utterly submissive role, but ${his} sense of self isn't seriously affected this week.`); - } else { - r.push(`${He} becomes`); - r.push(App.UI.DOM.makeElement("span", `sexually self neglectful,`, "yellow")); - r.push(`and loses all expectation that those who use ${him} will address ${his} pleasure at all.`); - slave.sexualFlaw = "neglectful"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); - break; - case "induce breeding obsession": - r.push(`You order the pregnant slut to stay in your office whenever ${he}'s not working or resting.`); - if (slave.pregKnown === 0) { - r.push(`Since ${he}'s not pregnant, you keep ${him} rigged up with an enormous sympathy belly when ${he}'s there.`); - } - r.push(`Rather than fucking ${him}, you praise ${his} pregnancy effusively, and only allow ${him} to get off when you're doing so.`); - if (slave.training < 100) { - r.push(`${He} enjoys ${himself}, but mostly because of the pleasure. ${He}'ll need more training.`); - } else { - r.push(`${He} develops an`); - r.push(App.UI.DOM.makeElement("span", `obsession with breeding,`, "yellow")); - r.push(`and begins to stroke ${his} belly in a disturbingly masturbatory way.`); - slave.sexualFlaw = "breeder"; - r.push(basicTrainingDefaulter(slave)); - } - r.push(IncreasePCSkills('slaving', currentSlaveValue)); + r.push(`${He} develops an`); + r.push(App.UI.DOM.makeElement("span", `obsession with breeding,`, "yellow")); + r.push(`and begins to stroke ${his} belly in a disturbingly masturbatory way.`); + slave.sexualFlaw = "breeder"; + r.push(basicTrainingDefaulter(slave)); + } + r.push(IncreasePCSkills('slaving', currentSlaveValue)); + } + V.PC.skill.slaving = Math.clamp(V.PC.skill.slaving, -100, 100); + App.Events.addParagraph(el, r); + return el; } - V.PC.skill.slaving = Math.clamp(V.PC.skill.slaving, -100, 100); - App.Events.addParagraph(el, r); - return el; -}; + + return personalAttention; +})();