diff --git a/js/medicine/surgery/genitials/anus.js b/js/medicine/surgery/genitials/anus.js new file mode 100644 index 0000000000000000000000000000000000000000..ab7745dfe088ae63d8927f8f76eacfc0b33b247b --- /dev/null +++ b/js/medicine/surgery/genitials/anus.js @@ -0,0 +1,93 @@ +App.Medicine.Surgery.Reactions.Anus = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, his, him} = getPronouns(slave); + const r = []; + + if (slave.fetish === Fetish.MINDBROKEN) { + r.push(`${He} leaves the surgery with a terribly sore rear end and little desire to mess with it. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + } else { + if (this._strongKnownFetish(slave, "buttslut")) { + r.push(`${He} leaves the surgery with a terribly sore rear end. ${He} is <span class="devotion inc">filled with joy</span> at the prospect of having a tight butt all over again, so much so that ${he} now <span class="trust inc">trusts</span> your plans for ${his} body. If ${he} had much in the way of anal skills, <span class="stat drop">they've likely suffered.</span> As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.trust += 4; + reaction.devotion += 10; + } else if (slave.devotion > 50) { + r.push(`${He} leaves the surgery with a terribly sore rear end. ${He}'s a bit anxious at the prospect of the pain having to get back to a loose asshole the hard way, but ${he}'s <span class="devotion inc">happy</span> that you think ${him} worth the effort of surgical improvement. If ${he} had much in the way of anal skills, <span class="stat drop">they've likely suffered.</span> As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.devotion += 4; + } else if (slave.devotion >= -20) { + r.push(`${He} leaves the surgery with a terribly sore rear end. ${He} knows ${he}'ll have to endure the pain of being fucked in a tight asshole again soon enough, but trepidation is nothing new for ${him}. If ${he} had much in the way of anal skills, <span class="stat drop">they've likely suffered.</span> As with all surgery <span class="health dec">${his} health has been slightly affected.</span> ${He} is <span class="trust dec">sensibly fearful</span> of your total power over ${his} body.`); + reaction.trust -= 5; + } else { + r.push(`${He} leaves the surgery with a terribly sore rear end. ${He}'s <span class="devotion dec">horrified</span> at surgical alteration of ${his} rear end, and knows that this means that ${he}'ll have to take the pain of sodomy in a tight ass all over again. If ${he} had much in the way of anal skills, <span class="stat drop">they've likely suffered.</span> As with all surgery <span class="health dec">${his} health has been slightly affected.</span> ${He} is <span class="trust dec">terribly afraid</span> of your total power over ${his} most intimate parts.`); + reaction.trust -= 10; + reaction.devotion -= 5; + } + if (slave.skill.anal > 10) { + slave.skill.anal -= 10; + } + } + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.RepairAnus = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Repair asshole"; + } + + get description() { + const {his} = getPronouns(this.originalSlave); + return `This will reduce ${his} anal skills`; + } + + get healthCost() { + return 10; + } + + apply(cheat) { + this._slave.anus = 3; + return this._assemble(new App.Medicine.Surgery.Reactions.Anus()); + } +}; + +App.Medicine.Surgery.Procedures.TightenAnus = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Tighten asshole"; + } + + get description() { + const {his} = getPronouns(this.originalSlave); + return `This will reduce ${his} anal skills`; + } + + get healthCost() { + return 10; + } + + apply(cheat) { + this._slave.anus = 1; + return this._assemble(new App.Medicine.Surgery.Reactions.Anus()); + } +}; + +App.Medicine.Surgery.Procedures.RestoreAnalVirginity = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Restore anal virginity"; + } + + get description() { + const {his} = getPronouns(this.originalSlave); + return `This will reduce ${his} anal skills`; + } + + get healthCost() { + return 10; + } + + apply(cheat) { + this._slave.anus = 0; + return this._assemble(new App.Medicine.Surgery.Reactions.Anus()); + } +}; diff --git a/js/medicine/surgery/genitials/chemCastrate.js b/js/medicine/surgery/genitials/chemCastrate.js new file mode 100644 index 0000000000000000000000000000000000000000..b98f8e5e08b3a3e3296b574a48b5f59d11bdbd13 --- /dev/null +++ b/js/medicine/surgery/genitials/chemCastrate.js @@ -0,0 +1,27 @@ +App.Medicine.Surgery.Reactions.ChemCastrate = class extends App.Medicine.Surgery.SimpleReaction { + get invasive() { + return false; + } + + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, his} = getPronouns(slave); + const r = []; + + r.push(`${He} knows something has been done to ${his} testicles, but ${he} can't feel anything off about them. Since the surgery was nothing more than a simple injection, ${he} has been spared any pain.`); + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.ChemCastrate = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Chemically castrate"; + } + + apply(cheat) { + this._slave.ballType = "sterile"; + return this._assemble(new App.Medicine.Surgery.Reactions.ChemCastrate()); + } +}; diff --git a/js/medicine/surgery/genitials/chop.js b/js/medicine/surgery/genitials/chop.js new file mode 100644 index 0000000000000000000000000000000000000000..bed9a07093a4f0b0b46aaed51b19ef82bcf85097 --- /dev/null +++ b/js/medicine/surgery/genitials/chop.js @@ -0,0 +1,92 @@ +App.Medicine.Surgery.Reactions.Chop = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, His, his, him, himself} = getPronouns(slave); + const r = []; + + if (slave.fetish === Fetish.MINDBROKEN) { + r.push(`Surprisingly, ${he} already realized while exiting that ${his} genitalia was completely reshaped. The reasons why are lost to ${him}, though.`); + } else if (slave.vagina === -1) { + r.push(`Of course, ${he} already realized while exiting that something very dear to ${him} has been taken away.`); + if (slave.devotion > 50 && slave.sexualFlaw === "self hating") { + r.push(`Strong emotions play out on ${his} face as ${he} experiences a watershed in ${his} life of sexual slavery, perhaps the most radical one ${he}'ll ever experience. ${He} loves you with all ${his} being, and truly hates ${himself}. ${He} finds ${himself} in an emotional place where ${he}'s willing to accept having had you cut ${his} dick off. ${He} knows ${he}'s a worthless piece of trash, and realizes that if you feel like trimming useless bits off ${him}, that's your prerogative. In moments, ${he}'s confirmed in <span class="devotion inc">total, final, fanatical submission to your will.</span> It's almost frightening.`); + reaction.devotion += 50; + } else if (slave.devotion > 20 && slave.fetishKnown === 1 && slave.fetishStrength > 95 && slave.fetish === "buttslut") { + r.push(`${He}'s such a complete buttslut, though, that ${he} finds ${he} doesn't really care. ${He} never really paid much attention to ${his} own dick; for ${him}, sex is about the phalli that get rammed up ${his} ass. And you didn't take that from ${him}. If anything, ${he}'s <span class="trust inc">reassured</span> by the implicit promise that ${he}'ll never be anything but a butthole slut, and of course is forced even further into <span class="devotion inc">submission to your will.</span>`); + reaction.devotion += 8; + reaction.trust += 8; + } else if (slave.devotion > 20 && slave.fetishKnown === 1 && slave.fetishStrength > 95 && slave.fetish === "cumslut") { + r.push(`${He}'s such an oral slut, though, that ${he} finds ${he} doesn't really care. ${He} never really paid much attention to ${his} dick; for ${him}, sex is about what ${he} gets to suck. As far as ${he}'s concerned, you've simply confirmed that ${his} most important hole is the one in ${his} face. If anything, ${he}'s <span class="trust inc">reassured</span> by the implicit promise that ${he}'ll never be anything more than a nice inviting facepussy, and of course, ${he}'s forced even further into <span class="devotion inc">submission to your will.</span>`); + reaction.devotion += 8; + reaction.trust += 8; + } else if (slave.devotion > 20 && slave.fetishKnown === 1 && slave.fetishStrength > 95 && slave.fetish === Fetish.SUBMISSIVE) { + r.push(`${He}'s such a total submissive, though, that ${he} accepts even this. Having ${his} cock removed, reducing ${him} to a sexually helpless place where ${he} can only receive pleasure by being penetrated, is perhaps the final step in sexual slavery, and ${he}'s a little awed by it. If anything, ${he}'s <span class="trust inc">reassured</span> by the implicit promise that ${his} body exists for the sexual gratification of others, and of course, ${he}'s forced even further into <span class="devotion inc">submission to your will.</span>`); + reaction.devotion += 8; + reaction.trust += 8; + } else if (slave.devotion > 95) { + r.push(`Doubt, fear, and even nausea play across ${his} face, but ${he}'s so worshipful of you that ${he} masters them all, accepting that this is your will. There's surprisingly little mental effect on ${him}. The horror of having ${his} dick cut off is so strong that it breaks through to ${him}, and the only way ${he} can find to deal with it is to think about it as little as possible. ${He} falls back on worshipful duty.`); + } else if (slave.devotion > 50) { + r.push(`${He}'s devoted to you, but doubt and fear play across ${his} face as ${he} comes to terms with what's happened. ${He} does not see how having ${his} dick removed will improve ${his} sexual slavery. ${He} does not rage or scream, but ${he} does cry, <span class="devotion dec">sadly wondering</span> whether ${he}'s valuable to you at all, or if ${he}'s just a surgical plaything to be degraded. ${He}'s <span class="trust dec">very frightened</span> that you'll cut off more of ${his} remaining parts.`); + reaction.trust -= 10; + reaction.devotion -= 10; + } else if (slave.devotion > 20) { + r.push(`${He}'s properly broken to slavery, but this is much too far. Having ${his} dick cut off cuts straight through ${his} conditioning, and tears roll down ${his} face as the horrible permanence of what's happened to ${him} really sinks in. <span class="devotion dec">Open anger</span> begins to become apparent through ${his} tears; ${he} thought that ${his} obedience merited better than this, and ${he}'s <span class="trust dec">extremely terrified</span> to find that despite being a decent slave, ${he} remains a surgical playground.`); + reaction.trust -= 20; + reaction.devotion -= 20; + } else { + r.push(`${He}'s horrified almost beyond the ability of ${his} mind to comprehend. ${His} face takes on a blank look as ${he} goes into shock. There's no screaming and no tears, not yet; it will take ${his} time to process what's happened to ${him}. Without a doubt, ${he}'ll be absolutely filled by <span class="devotion dec">rage</span> and <span class="trust dec">terror.</span>`); + reaction.trust -= 40; + reaction.devotion -= 40; + } + } else { + r.push(`Of course, ${he} already realized while exiting that ${his} genitalia has been radically simplified. As a herm slave ${he} knew this day might come,`); + if (slave.devotion > 50) { + r.push(`and ${his} face is a strange mix of hope, happiness, satisfaction, and the tiniest tinge of soul-crushing sadness as ${he}`); + if (canSee(slave)) { + r.push(`views`); + } else { + r.push(`feels`); + } + r.push(`the vagina that is all that remains of ${his} once-unique hermaphroditic genitalia. <span class="devotion inc">${He} has become more submissive due to your radical reshaping of ${his} body.</span>`); + reaction.devotion += 4; + } else if (slave.devotion > 20) { + r.push(`and ${his} face is a strange mix of fear, hope, and resignation as ${he}`); + if (canSee(slave)) { + r.push(`views`); + } else { + r.push(`feels`); + } + r.push(`the vagina that is all that remains of ${his} once-unique hermaphroditic genitalia. Eventually ${his} shoulders slump and ${he} tries to carry on. <span class="devotion dec">${He} will struggle with feelings of confusion and loss.</span> ${He} is <span class="trust dec">terribly afraid</span> of your total power over ${his} body.`); + reaction.trust -= 10; + reaction.devotion -= 5; + } else { + r.push(`but expectations and the reality are two different things. ${He}'s beside ${himself}, weeping gently.`); + if (hasAnyArms(slave)) { + r.push(`${He} absently moves a hand to where ${his} penis would have been and snatches it away with a sob.`); + } + r.push(`<span class="devotion dec">The surgical invasion has filled ${him} with horror and anger.</span> ${He} is <span class="trust dec">cripplingly afraid</span> of your total power over ${his} body.`); + reaction.trust -= 20; + reaction.devotion -= 20; + } + } + r.push(`Naturally, <span class="health dec">${his} health has been greatly affected</span> by such serious surgery.`); + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.ChopPenis = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Remove penis"; + } + + get invasive() { + return true; + } + + apply(cheat) { + surgeryAmp(this._slave, "dick"); + return this._assemble(new App.Medicine.Surgery.Reactions.Chop()); + } +}; diff --git a/js/medicine/surgery/genitials/circumcision.js b/js/medicine/surgery/genitials/circumcision.js new file mode 100644 index 0000000000000000000000000000000000000000..4bbab1b0e549acaff3f9ac823f8aec82c632649e --- /dev/null +++ b/js/medicine/surgery/genitials/circumcision.js @@ -0,0 +1,102 @@ +App.Medicine.Surgery.Reactions.Circumcision = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, his, himself} = getPronouns(slave); + const r = []; + + if (slave.dick > 0) { + if (slave.fetish === Fetish.MINDBROKEN) { + r.push(`${He} exits the surgery gingerly, since ${he} can feel that something was done to ${his} dick. Since it is still there, ${he} doesn't understand what changed. Circumcision of an adult is not a trivial procedure, so <span class="health dec">${his} health has been slightly affected.</span>`); + } else if (slave.devotion > 50) { + r.push(`${He} exits the surgery gingerly, since ${he} can feel that something was done to ${his} dick. ${He} examines it carefully`); + if (canSee(slave)) { + r.push(`in the mirror.`); + } else { + r.push(`by feeling alone.`); + } + r.push(`Realizing that ${he}'s been circumcised, <span class="devotion inc">${he}'s very happy you'd take an interest in ${his} penis,</span> and looks forward to having a slightly easier time keeping ${himself} clean through ${his} life as a sex slave. Circumcision of an adult is not a trivial procedure, so <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.devotion += 4; + } else if (slave.devotion > 20) { + r.push(`${He} exits the surgery gingerly, since ${he} can feel that something was done to ${his} dick. ${He} examines it carefully`); + if (canSee(slave)) { + r.push(`in the mirror.`); + } else { + r.push(`by feeling alone.`); + } + r.push(`Realizing that ${he}'s been circumcised, ${he}'s flooded with relief. ${He}'s so elated that ${he} hasn't been severely damaged that ${he} doesn't mind your taking surgical control of ${his} member. Circumcision of an adult is not a trivial procedure, so <span class="health dec">${his} health has been slightly affected.</span>`); + } else { + r.push(`${He} exits the surgery gingerly, since ${he} can feel that something was done to ${his} dick. ${He} examines it carefully`); + if (canSee(slave)) { + r.push(`in the mirror.`); + } else { + r.push(`by feeling alone.`); + } + r.push(`Realizing that ${he}'s been circumcised, ${he}'s flooded with relief, since ${he} was afraid that you'd done something far more terrible. Once ${he} has time to think about it, though, ${he}'s somewhat <span class="devotion dec">resentful,</span> since ${he} naturally feels a certain proprietary interest in ${his} own penis. Circumcision of an adult is not a trivial procedure, so <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.devotion -= 5; + } + } else { + if (slave.fetish === Fetish.MINDBROKEN) { + r.push(`${He} exits the surgery gingerly, since ${he} can feel that something was done to ${his} crotch. Since everything is still there, ${he} doesn't understand what changed. <span class="health dec">${his} health has been slightly affected.</span>`); + } else if (slave.devotion > 50) { + r.push(`${He} exits the surgery gingerly, since ${he} can feel that ${his} crotch was operated on. ${He} examines it carefully`); + if (canSee(slave)) { + r.push(`in the mirror.`); + } else { + r.push(`by feeling alone.`); + } + r.push(`Realizing that ${he}'s been circumcised, <span class="devotion inc">${he}'s very happy you'd take an interest in ${his} sex,</span> and looks forward to having a slightly easier time keeping ${himself} clean through ${his} life as a sex slave. <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.devotion += 4; + } else if (slave.devotion > 20) { + r.push(`${He} exits the surgery gingerly, since ${he} can feel that ${his} crotch was operated on. ${He} examines it carefully`); + if (canSee(slave)) { + r.push(`in the mirror.`); + } else { + r.push(`by feeling alone.`); + } + r.push(`Realizing that ${he}'s been circumcised, ${he}'s flooded with relief. ${He}'s so elated that ${he} hasn't been severely damaged that ${he} doesn't mind minor surgical alteration. <span class="health dec">${his} health has been slightly affected.</span>`); + } else { + r.push(`${He} exits the surgery gingerly, since ${he} can feel that ${his} crotch was operated on. ${He} examines it carefully`); + if (canSee(slave)) { + r.push(`in the mirror.`); + } else { + r.push(`by feeling alone.`); + } + r.push(`Realizing that ${he}'s been circumcised, ${he}'s flooded with relief, since ${he} was afraid that you'd done something far more terrible. Once ${he} has time to think about it, though, ${he}'s somewhat <span class="devotion dec">resentful,</span> since ${he} naturally feels a certain proprietary interest in ${his} sex. <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.devotion -= 5; + } + } + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.RemoveClitHood = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Remove clitoral hood"; + } + + get healthCost() { + return 10; + } + + apply(cheat) { + this._slave.foreskin = 0; + return this._assemble(new App.Medicine.Surgery.Reactions.Circumcision()); + } +}; + +App.Medicine.Surgery.Procedures.RemoveForeskin = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Remove foreskin"; + } + + get healthCost() { + return 10; + } + + apply(cheat) { + this._slave.foreskin = 0; + return this._assemble(new App.Medicine.Surgery.Reactions.Circumcision()); + } +}; diff --git a/js/medicine/surgery/genitials/clitoralEnlargement.js b/js/medicine/surgery/genitials/clitoralEnlargement.js new file mode 100644 index 0000000000000000000000000000000000000000..34b243dc72f326336bc52fb7bbdb20dbffe3641b --- /dev/null +++ b/js/medicine/surgery/genitials/clitoralEnlargement.js @@ -0,0 +1,47 @@ +App.Medicine.Surgery.Reactions.ClitoralEnlargement = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, His, his} = getPronouns(slave); + const r = []; + + if (slave.fetish === Fetish.MINDBROKEN) { + r.push(`${He} leaves the surgery with a terribly sore pussy and little desire to mess with it. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + } else if (slave.energy > 95) { + r.push(`${He} leaves the surgery with a terribly sore pussy. ${He} is <span class="devotion inc">filled with joy</span> at the thought that ${his} pussy will now be more appealing to ${his} ${getWrittenTitle(slave)}; ${his} sensitivity has been increased, <span class="libido inc">raising ${his} sex drive slightly.</span> As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.trust += 4; + reaction.devotion += 10; + slave.energy += 1; + } else if (slave.devotion > 50) { + r.push(`${He} leaves the surgery with a terribly sore pussy. ${He}'s <span class="devotion inc">happy</span> that you think ${his} pussy worth the effort of surgical improvement; ${his} sensitivity has been increased, <span class="libido inc">raising ${his} sex drive slightly.</span> As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.devotion += 4; + slave.energy += 1; + } else if (slave.devotion >= -20) { + r.push(`${He} leaves the surgery with a terribly sore pussy. ${He}'s somewhat revolted by the surgery, but as far as ${he}'s concerned, the short recovery period will mean a time during which ${he} can be sure no one will use ${his} pussy. ${His} sensitivity has been increased, <span class="libido inc">raising ${his} sex drive slightly.</span> As with all surgery <span class="health dec">${his} health has been slightly affected.</span> ${He} is <span class="trust dec">sensibly fearful</span> of your total power over ${his} body.`); + reaction.trust -= 5; + slave.energy += 1; + } else { + r.push(`${He} leaves the surgery with a terribly sore pussy. ${He}'s <span class="devotion dec">horrified</span> at surgical alteration of ${his} womanhood; this is probably more of an invasion than ${he} could readily imagine before today. ${His} sensitivity has been increased, <span class="libido inc">raising ${his} sex drive slightly.</span> As with all surgery <span class="health dec">${his} health has been slightly affected.</span> ${He} is <span class="trust dec">terribly afraid</span> of your total power over ${his} most intimate parts.`); + reaction.trust -= 10; + reaction.devotion -= 5; + slave.energy += 1; + } + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.ClitoralEnlargement = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Increase clit"; + } + + get healthCost() { + return 10; + } + + apply(cheat) { + this._slave.clit += 1; + return this._assemble(new App.Medicine.Surgery.Reactions.ClitoralEnlargement()); + } +}; diff --git a/js/medicine/surgery/genitials/clitoralReduction.js b/js/medicine/surgery/genitials/clitoralReduction.js new file mode 100644 index 0000000000000000000000000000000000000000..4ea9136b810f5cebe5f5fcb0628e4d66ee5a3266 --- /dev/null +++ b/js/medicine/surgery/genitials/clitoralReduction.js @@ -0,0 +1,47 @@ +App.Medicine.Surgery.Reactions.ClitoralReduction = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, his} = getPronouns(slave); + const r = []; + + if (slave.fetish === Fetish.MINDBROKEN) { + r.push(`${He} leaves the surgery with a terribly sore pussy and little desire to mess with it. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + } else if (slave.energy > 95) { + r.push(`${He} leaves the surgery with a terribly sore pussy. ${He} is <span class="devotion inc">filled with joy</span> at the thought that ${his} pussy will now be more appealing to ${his} ${getWrittenTitle(slave)}; ${his} sensitivity has been reduced, <span class="libido dec">reducing ${his} sex drive slightly.</span> As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.trust += 4; + reaction.devotion += 10; + slave.energy -= 5; + } else if (slave.devotion > 50) { + r.push(`${He} leaves the surgery with a terribly sore pussy. ${He}'s <span class="devotion inc">happy</span> that you think ${his} pussy worth the effort of surgical improvement, although ${his} sensitivity has been reduced, <span class="libido dec">reducing ${his} sex drive slightly.</span> As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.devotion += 4; + slave.energy -= 5; + } else if (slave.devotion >= -20) { + r.push(`${He} leaves the surgery with a terribly sore pussy. ${He}'s somewhat revolted by the surgery, but as far as ${he}'s concerned, the short recovery period will mean a time during which ${he} can be sure no one will use ${his} pussy. The reduced sensitivity has <span class="libido dec">noticeably reduced ${his} sex drive.</span> As with all surgery <span class="health dec">${his} health has been slightly affected.</span> ${He} is <span class="trust dec">sensibly fearful</span> of your total power over ${his} body.`); + reaction.trust -= 5; + slave.energy -= 10; + } else { + r.push(`${He} leaves the surgery with a terribly sore pussy. ${He}'s <span class="devotion dec">horrified</span> at surgical alteration of ${his} womanhood; this is probably more of an invasion than ${he} could readily imagine before today and <span class="libido dec">${his} sex drive takes a heavy hit.</span> As with all surgery <span class="health dec">${his} health has been slightly affected.</span> ${He} is <span class="trust dec">terribly afraid</span> of your total power over ${his} most intimate parts.`); + reaction.trust -= 10; + reaction.devotion -= 5; + slave.energy -= 20; + } + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.ClitoralReduction = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Apply clitoral reduction"; + } + + get healthCost() { + return 10; + } + + apply(cheat) { + this._slave.clit = 0; + return this._assemble(new App.Medicine.Surgery.Reactions.ClitoralReduction()); + } +}; diff --git a/js/medicine/surgery/genitials/ejaculation.js b/js/medicine/surgery/genitials/ejaculation.js new file mode 100644 index 0000000000000000000000000000000000000000..eca2ad0be1e271864654f300eed5333b80189291 --- /dev/null +++ b/js/medicine/surgery/genitials/ejaculation.js @@ -0,0 +1,46 @@ +App.Medicine.Surgery.Reactions.Ejaculation = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, His, his, him, himself} = getPronouns(slave); + const r = []; + + r.push(`${His} groin is a little sore, and ${he} examines it closely, finding it slightly swollen. Near the end of ${his} close inspection of ${his} own private parts, though, ${he} happens to stimulate ${himself}, unintentionally, and just a little. That's enough. ${He} begins to leak excessive precum, as usual, but a distinct pressure begins building in ${his} loins. ${He} groans as the swelling rises before bucking and orgasming uncontrollably, coating ${himself} and the bed in a layer of fluid.`); + if (this._hasEmotion(slave)) { + if (slave.devotion > 50) { + r.push(`<span class="devotion inc">${He}'s delighted.</span> ${He}'s such a good sex slave that the lewdness of extra large ejaculations is exciting to ${him}. That, and the extra length of ${his} climax wasn't bad either.`); + reaction.devotion += 4; + } else if (slave.devotion >= -20) { + r.push(`${He} obviously doesn't know what to think at first. Just brushing ${his} private parts resulted in a huge mess, a somewhat exciting prospect, but ${he}'s realizing that this is going to be rather inconvenient, if not moist. Still, having such a lewd change made to ${his} body affects ${his} feelings towards you; ${he} is <span class="trust dec">sensibly fearful</span> of your total power over ${him}.`); + reaction.trust -= 5; + } else { + r.push(`${He} feared the worst when ${he} realized that something had been done to ${him} down there, and ${he}'s initially relieved to find that ${he}'s intact and apparently functional. But ${he}'s been invaded in an extremely personal way, and <span class="devotion dec">resents having you tamper with ${his} private parts.</span> Furthermore, ${he} is <span class="trust dec">sensibly fearful</span> of your total power over ${him}.`); + reaction.trust -= 5; + reaction.devotion -= 5; + } + } + r.push(`As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.EjaculationBooster = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Implant prostate with an ejaculation boosting implant"; + } + + get description() { + const {his} = getPronouns(this.originalSlave); + return `This will thin ${his} ejaculate but greatly increase its quantity`; + } + + get healthCost() { + return 20; + } + + apply(cheat) { + this._slave.prostate = 3; + return this._assemble(new App.Medicine.Surgery.Reactions.Ejaculation()); + } +}; diff --git a/js/medicine/surgery/genitials/endEjaculation.js b/js/medicine/surgery/genitials/endEjaculation.js new file mode 100644 index 0000000000000000000000000000000000000000..f55dfde316ff2fbbcf3f20e6970b1ede888d1fdd --- /dev/null +++ b/js/medicine/surgery/genitials/endEjaculation.js @@ -0,0 +1,27 @@ +App.Medicine.Surgery.Reactions.EndEjaculation = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, His, his} = getPronouns(slave); + const r = []; + + r.push(`${His} groin is a little sore, and ${he} examines it closely, but ${he} can't find much difference other than the swelling in ${his} crotch has gone down. ${He}'ll realize later when ${his} next ejaculation is rather underwhelming from what ${he} has become accustomed to. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.RemoveEjaculationBooster = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Remove ejaculation implant"; + } + + get healthCost() { + return 10; + } + + apply(cheat) { + this._slave.prostate = 2; + return this._assemble(new App.Medicine.Surgery.Reactions.EndEjaculation()); + } +}; diff --git a/js/medicine/surgery/genitials/endPrecum.js b/js/medicine/surgery/genitials/endPrecum.js new file mode 100644 index 0000000000000000000000000000000000000000..4016753b727ebd4b8f683790347b377a94e04a8e --- /dev/null +++ b/js/medicine/surgery/genitials/endPrecum.js @@ -0,0 +1,27 @@ +App.Medicine.Surgery.Reactions.EndPrecum = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {he, His, his, him} = getPronouns(slave); + const r = []; + + r.push(`${His} groin is a little sore, and ${he} examines it closely, but ${he} can't find much difference. ${His} generous production of precum won't tail off for some time, until the slow-release drugs are completely flushed from ${his} system. Even then, the only real change for ${him} will be a little less inconvenience. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.EndPrecum = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Remove drug implant"; + } + + get healthCost() { + return 10; + } + + apply(cheat) { + this._slave.prostate = 1; + return this._assemble(new App.Medicine.Surgery.Reactions.EndPrecum()); + } +}; diff --git a/js/medicine/surgery/genitials/fertility.js b/js/medicine/surgery/genitials/fertility.js new file mode 100644 index 0000000000000000000000000000000000000000..6be9bebc6aa49ce1da1225048c8a61fbafc941be --- /dev/null +++ b/js/medicine/surgery/genitials/fertility.js @@ -0,0 +1,43 @@ +App.Medicine.Surgery.Reactions.Fertility = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, his, him} = getPronouns(slave); + const r = []; + + if (slave.fetish === Fetish.MINDBROKEN) { + r.push(`${He} leaves the surgery with nothing but a nonspecific ache in ${his} lower abdomen, but lacks the mental faculties to realize that ${he} now has a chance to get pregnant. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + } else if (this._strongKnownFetish(slave, "pregnancy") || slave.origin === "$He sold $himself to you in the hope of someday bearing children.") { + r.push(`${He} leaves the surgery with nothing but a nonspecific ache in ${his} lower abdomen, but ${he} knows enough about surgery and sex slaves to know that it means ${he} now has a chance to get pregnant. ${He} is <span class="devotion inc">filled with joy</span> whenever ${he} thinks about the fact that feeling a life growing within ${him} is now, at last, a possibility. ${He}'s so pleased that ${he} now <span class="trust inc">trusts</span> your plans for ${his} body. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.trust += 4; + reaction.devotion += 5; + } else if (slave.devotion > 50) { + r.push(`${He} leaves the surgery with nothing but a nonspecific ache in ${his} lower abdomen, but ${he} knows enough about surgery and sex slaves to know that it means ${he} now has a chance to get pregnant. ${He}'s <span class="devotion inc">grateful</span> that you think ${him} worthy of breeding, and even a little nervous about how ${he}'ll perform as a breeder. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.devotion += 4; + } else if (slave.devotion >= -20) { + r.push(`${He} leaves the surgery with nothing but a nonspecific ache in ${his} lower abdomen, but ${he} knows enough about surgery and sex slaves to know that it means ${he} may now be impregnated. ${He} understands the realities of ${his} life as a slave, and that being bred was a possibility, so it isn't much of a shock. As with all surgery <span class="health dec">${his} health has been slightly affected.</span> ${He} is <span class="trust dec">sensibly fearful</span> of your total power over ${his} body.`); + reaction.trust -= 5; + } else { + r.push(`${He} leaves the surgery with nothing but a nonspecific ache in ${his} lower abdomen, but ${he} knows enough about surgery and sex slaves to know that it means ${he} may now be impregnated. ${He} does not understand the realities of ${his} life as a slave at a core level, so ${he}'s <span class="devotion dec">terrified and angry</span> at the potential that ${he}'ll be bred. As with all surgery <span class="health dec">${his} health has been slightly affected.</span> ${He} is <span class="trust dec">sensibly fearful</span> of your total power over ${his} body.`); + reaction.trust -= 5; + reaction.devotion -= 5; + } + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.RestoreFertility = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Restore fertility"; + } + + get healthCost() { + return 10; + } + + apply(cheat) { + this._slave.preg = 0; + return this._assemble(new App.Medicine.Surgery.Reactions.Fertility()); + } +}; diff --git a/js/medicine/surgery/genitials/foreskinTuck.js b/js/medicine/surgery/genitials/foreskinTuck.js new file mode 100644 index 0000000000000000000000000000000000000000..509079c505d6e77d23b471e963c7a3b9b3323151 --- /dev/null +++ b/js/medicine/surgery/genitials/foreskinTuck.js @@ -0,0 +1,65 @@ +App.Medicine.Surgery.Reactions.ForeskinTuck = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, his, himself} = getPronouns(slave); + const r = []; + + if (slave.fetish === Fetish.MINDBROKEN) { + r.push(`${He} exits the surgery gingerly, since ${he} can feel that something was done to ${his} dick. Since it is still there, ${he} doesn't understand what changed. <span class="health dec">${his} health has been slightly affected.</span>`); + } else if (slave.devotion > 50) { + r.push(`${He} exits the surgery gingerly, since ${he} can feel that something was done to ${his} dick. ${He} examines it carefully`); + if (canSee(slave)) { + r.push(`in the mirror.`); + } else { + r.push(`by feeling alone.`); + } + r.push(`Realizing that ${his} foreskin fits comfortably, <span class="devotion inc">${he}'s very happy you'd take an interest in ${his} penis,</span> and looks forward to having a slightly easier time keeping ${himself} clean through ${his} life as a sex slave.`); + if (canAchieveErection(slave)) { + r.push(`${He} also can't wait`); + if (canSee(slave)) { + r.push(`for the show during`); + } else { + r.push(`to feel`); + } + r.push(`${his} next erection.`); + } + r.push(`<span class="health dec">${his} health has been slightly affected.</span>`); + reaction.devotion += 4; + } else if (slave.devotion > 20) { + r.push(`${He} exits the surgery gingerly, since ${he} can feel that something was done to ${his} dick. ${He} examines it carefully`); + if (canSee(slave)) { + r.push(`in the mirror.`); + } else { + r.push(`by feeling alone.`); + } + r.push(`Realizing that ${his} foreskin fits comfortably, ${he}'s flooded with relief. ${He}'s so elated that ${he} hasn't been severely damaged that ${he} doesn't mind your taking surgical control of ${his} member. <span class="health dec">${his} health has been slightly affected.</span>`); + } else { + r.push(`${He} exits the surgery gingerly, since ${he} can feel that something was done to ${his} dick. ${He} examines it carefully`); + if (canSee(slave)) { + r.push(`in the mirror.`); + } else { + r.push(`by feeling alone.`); + } + r.push(`Realizing that ${his} foreskin fits comfortably, ${he}'s flooded with relief, since ${he} was afraid that you'd done something far more terrible. Once ${he} has time to think about it, though, ${he}'s somewhat <span class="devotion dec">resentful,</span> since ${he} naturally feels a certain proprietary interest in ${his} own penis. <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.devotion -= 5; + } + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.ForeskinTuck = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Remove excess foreskin"; + } + + get healthCost() { + return 5; + } + + apply(cheat) { + this._slave.foreskin = this._slave.dick; + return this._assemble(new App.Medicine.Surgery.Reactions.ForeskinTuck()); + } +}; diff --git a/js/medicine/surgery/genitials/geld.js b/js/medicine/surgery/genitials/geld.js new file mode 100644 index 0000000000000000000000000000000000000000..8b63437ce536398055b3cfd4a21c0a2722ecf1b8 --- /dev/null +++ b/js/medicine/surgery/genitials/geld.js @@ -0,0 +1,57 @@ +App.Medicine.Surgery.Reactions.Geld = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, His, his, him} = getPronouns(slave); + const r = []; + + if (slave.fetish === Fetish.MINDBROKEN) { + r.push(`Surprisingly, ${he} already realized while exiting that ${his} scrotum was gone. The reasons why are lost to ${him}, though. Since the surgery was invasive, <span class="health dec">${his} health has been greatly affected.</span>`); + } else if (slave.devotion > 50) { + r.push(`Of course, ${he} already realized while exiting that ${his} scrotum was gone. ${He} was already accepting of ${his} role as an effectively female slave, a receptacle for cock, and ${he} now understands that you no longer think it will ever again be necessary for ${him} to cum. <span class="devotion inc">${He} has become more submissive due to your radical reshaping of ${his} body.</span> Since the surgery was invasive, <span class="health dec">${his} health has been greatly affected.</span>`); + reaction.devotion += 4; + } else if (slave.devotion > 20) { + r.push(`Of course, ${he} already realized while exiting that ${his} scrotum was gone. ${He} was already struggling to accept ${his} role as a female slave, a receptacle for cock, and ${he} now understands it better. ${He} has not yet accepted that ${he} will never again fuck, though, that ${his} future is nothing but getting fucked. <span class="devotion dec">${He} will struggle with feelings of confusion and loss.</span> Since the surgery was invasive, <span class="health dec">${his} health has been greatly affected.</span> ${He} is <span class="trust dec">terribly afraid</span> of your total power over ${his} body.`); + reaction.trust -= 10; + reaction.devotion -= 5; + } else { + r.push(`Of course, ${he} already realized while exiting that ${his} scrotum was gone. ${He} cannot accept that it is no longer ${his} role to fuck holes, but rather to provide a hole for others to fuck.`); + if (hasAnyArms(slave)) { + r.push(`${He} absently moves a hand to where ${his} balls would have been and snatches it away with a sob.`); + } + r.push(`<span class="devotion dec">The surgical invasion has filled ${him} with horror and anger.</span> Since the surgery was invasive, <span class="health dec">${his} health has been greatly affected.</span> ${He} is <span class="trust dec">cripplingly afraid</span> of your total power over ${his} body.`); + reaction.trust -= 20; + reaction.devotion -= 20; + } + if ((slave.assignment === Job.MILKED || slave.assignment === Job.DAIRY) && slave.lactation === 0) { + r.push(`<span class="job change">${His} assignment has defaulted to rest.</span>`); + reaction.shortReaction.push(`<span class="job change">${His} assignment has defaulted to rest.</span>`); + removeJob(slave, slave.assignment); + } + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.Geld = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Geld"; + } + + get healthCost() { + return 40; + } + + apply(cheat) { + this._slave.balls = 0; + this._slave.ballType = "human"; + this._slave.scrotum = 0; + this._slave.vasectomy = 0; + if (this._slave.drugs === "testicle enhancement" || + this._slave.drugs === "hyper testicle enhancement" || + this._slave.drugs === "testicle atrophiers") { + this._slave.drugs = "no drugs"; + } + return this._assemble(new App.Medicine.Surgery.Reactions.Geld()); + } +}; diff --git a/js/medicine/surgery/genitials/herm.js b/js/medicine/surgery/genitials/herm.js new file mode 100644 index 0000000000000000000000000000000000000000..5adb128d36f752db6e2033629cc03b08ccd45c12 --- /dev/null +++ b/js/medicine/surgery/genitials/herm.js @@ -0,0 +1,41 @@ +App.Medicine.Surgery.Reactions.Herm = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, His, his, him, himself} = getPronouns(slave); + const {he: heP} = getPronouns(V.PC); + const r = []; + + if (slave.fetish === Fetish.MINDBROKEN) { + r.push(`Surprisingly, ${he} already realized while exiting that ${his} genitalia has been heavily augmented. The reasons why are lost to ${him}, though. Since the surgery was invasive, <span class="health dec">${his} health has been greatly affected.</span>`); + } else if (slave.devotion > 50) { + r.push(`${He} already realized while exiting that ${his} genitalia has been heavily augmented. ${He}'s almost beside ${himself} with joy: ${he} now has three holes for ${his} beloved ${getWrittenTitle(slave)} to fuck, and ${heP} even allowed ${him} to retain ${his} dick! <span class="devotion inc">${He} has become more submissive due to your radical reshaping of ${his} body.</span> Since the surgery was invasive, <span class="health dec">${his} health has been greatly affected.</span>`); + reaction.devotion += 10; + } else if (slave.devotion > 20) { + r.push(`${He} already realized while exiting that ${his} genitalia has been heavily augmented. ${His} efforts to cope with this radical development are palpable. ${He} retains ${his} penis, to ${his} considerable surprise; and ${he} also has a pussy. ${He} hardly knows what to think or who to be. <span class="devotion inc">${He} has become more submissive due to your radical reshaping of ${his} body.</span> Since the surgery was invasive, <span class="health dec">${his} health has been greatly affected.</span>`); + reaction.devotion += 4; + } else { + r.push(`${He} already realized while exiting that ${his} genitalia has been heavily augmented. <span class="devotion dec">The surgical invasion has filled ${him} with horror and anger.</span> ${He} is not as angry as ${he} might otherwise have been, since you left ${him} ${his} dick, but ${he} has a hole where there was none before. ${He} views it with hatred and revulsion. Since the surgery was invasive, <span class="health dec">${his} health has been greatly affected.</span> ${He} is <span class="trust dec">terribly afraid</span> of your total power over ${his} body.`); + reaction.trust -= 10; + reaction.devotion -= 10; + } + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.Herm = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Create surgical hermaphrodite"; + } + + get healthCost() { + return 40; + } + + apply(cheat) { + this._slave.vagina = 0; + this._slave.skill.vaginal = 0; + return this._assemble(new App.Medicine.Surgery.Reactions.Herm()); + } +}; diff --git a/js/medicine/surgery/genitials/insemination.js b/js/medicine/surgery/genitials/insemination.js new file mode 100644 index 0000000000000000000000000000000000000000..311eeb6691b63017ce3fd0fdfd3bc021749a60a3 --- /dev/null +++ b/js/medicine/surgery/genitials/insemination.js @@ -0,0 +1,104 @@ +App.Medicine.Surgery.Reactions.Insemination = class extends App.Medicine.Surgery.SimpleReaction { + /** + * @param {FC.HumanState} seedSource + */ + constructor(seedSource) { + super(); + this.seedSource = seedSource; + } + + get invasive() { + return false; + } + + get permanentChanges() { + return false; + } + + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, his, him} = getPronouns(slave); + const r = []; + + if (slave.fetish === Fetish.MINDBROKEN) { + r.push(`${He} leaves the surgery with a certain warmth in ${his} lower abdomen, ${he} knows that ${he} has been impregnated.`); + } else if (this._strongKnownFetish(slave, "pregnancy")) { + if (canSee(slave)) { + r.push(`Since the surgery required only a local anesthetic, ${he} remained fully aware throughout the procedure. From the selection of the sperm, to its introduction to ${his} waiting ${(slave.pregType > 1) ? `eggs` : `egg`}, ${he} was eagerly watching.`); + } else { + r.push(`${He} leaves the surgery with a certain warmth in ${his} lower abdomen, ${he} knows that ${he} has been impregnated.`); + } + r.push(`${He} is <span class="devotion inc">filled with joy</span> over the life settling into ${his} womb and can't wait to see the result. ${He}'s so pleased that ${he} now <span class="trust inc">trusts</span> your plans for ${his} body.`); + reaction.trust += 4; + reaction.devotion += 10; + } else if (slave.devotion > 50) { + if (canSee(slave)) { + r.push(`Since the surgery required only a local anesthetic, ${he} remained fully aware throughout the procedure. From the selection of the sperm, to its delivery into ${his} womb, ${he} was watching with rapt attention.`); + } else { + r.push(`${He} leaves the surgery with a certain warmth in ${his} lower abdomen, ${he} knows that ${he} has been impregnated.`); + } + r.push(`${He}'s <span class="devotion inc">grateful</span> that you think ${him} worthy of carrying`); + if (this.seedSource === V.PC) { + r.push(`your`); + } else { + r.push(`${this.seedSource.slaveName}'s`); + } + r.push(`${(slave.pregType > 1) ? `children` : `child`}, and a little nervous about how ${he}'ll perform as a mother.`); + reaction.devotion += 4; + } else if (slave.devotion >= -20) { + if (canSee(slave)) { + r.push(`Since the surgery required only a local anesthetic, ${he} remained fully aware throughout the procedure. From the selection of the sperm, to its delivery into ${his} womb and ${his} subsequent impregnation, ${he} couldn't look away.`); + } else { + r.push(`${He} leaves the surgery with a certain warmth in ${his} lower abdomen, ${he} knows that ${he} has been impregnated.`); + } + r.push(`${He} understands the realities of ${his} life as a slave, so it isn't much of a shock. ${He} is <span class="trust dec">sensibly fearful</span> of your total power over ${his} body.`); + reaction.trust -= 10; + } else { + if (canSee(slave)) { + r.push(`Since the surgery required only a local anesthetic, ${he} remained fully aware throughout the procedure. The moment ${he} realized what was happening, ${he} shut ${his} eyes tight, only opening them again as ${he} feels the slight tingle of the injector exiting ${his} lower abdomen.`); + } else { + r.push(`${He} leaves the surgery with a certain warmth in ${his} lower abdomen, ${he} knows that ${he} has been impregnated.`); + } + r.push(`${He} does not understand the realities of ${his} life as a slave at a core level, so ${he}'s <span class="devotion dec">terrified and angry</span> that you have forced ${him} to become a mother, even more so as ${he} realizes ${he} doesn't know who the father is. ${He} is <span class="trust dec">sensibly fearful</span> of your total power over ${his} body and the future of the life ${he} now harbors within ${him}.`); + reaction.trust -= 15; + reaction.devotion -= 15; + } + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.Insemination = class extends App.Medicine.Surgery.Procedure { + /** + * @param {App.Entity.SlaveState} slave + * @param {string} name + * @param {FC.HumanState} seedSource + */ + constructor(slave, name, seedSource) { + super(slave); + this._name = name; + this.seedSource = seedSource; + } + + get name() { + return this._name; + } + + apply(cheat) { + this._slave.preg = 1; + this._slave.pregType = setPregType(this._slave); + this._slave.pregWeek = 1; + this._slave.pregKnown = 1; + this._slave.pregSource = this.seedSource.ID; + WombImpregnate(this._slave, this._slave.pregType, this._slave.pregSource, 1); + return this._assemble(new App.Medicine.Surgery.Reactions.Insemination(this.seedSource)); + } +}; + +App.Medicine.Surgery.Procedures.InseminationFromStored = class extends App.Medicine.Surgery.Procedures.Insemination { + apply(cheat) { + V.PC.counter.storedCum--; + return super.apply(cheat); + } +}; diff --git a/js/medicine/surgery/genitials/labiaplasty.js b/js/medicine/surgery/genitials/labiaplasty.js new file mode 100644 index 0000000000000000000000000000000000000000..74908f66473d259c8f41e97f4f3d9743a520e8ee --- /dev/null +++ b/js/medicine/surgery/genitials/labiaplasty.js @@ -0,0 +1,58 @@ +App.Medicine.Surgery.Reactions.Labiaplasty = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, his} = getPronouns(slave); + const r = []; + + if (slave.fetish === Fetish.MINDBROKEN) { + r.push(`${He} leaves the surgery with a terribly sore pussy and little desire to mess with it. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + } else if (slave.energy > 95) { + r.push(`${He} leaves the surgery with a terribly sore pussy. ${He} is <span class="devotion inc">filled with joy</span> at the thought that ${his} pussy will now be more appealing to ${his} ${getWrittenTitle(slave)}; ${he}'s already anticipating recovering enough to feel your cockhead pressing past ${his} new lips, so much so that ${he} now <span class="trust inc">trusts</span> your plans for ${his} body. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.trust += 4; + reaction.devotion += 10; + } else if (slave.devotion > 50) { + r.push(`${He} leaves the surgery with a terribly sore pussy. ${He}'s <span class="devotion inc">happy</span> that you think ${his} pussy worth the effort of surgical improvement, and a little excited at the idea that ${he} now has what you consider good-looking pussylips. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.devotion += 4; + } else if (slave.devotion >= -20) { + r.push(`${He} leaves the surgery with a terribly sore pussy. ${He}'s somewhat revolted by the surgery, but as far as ${he}'s concerned, the short recovery period will mean a time during which ${he} can be sure no one will use ${his} pussy. As with all surgery <span class="health dec">${his} health has been slightly affected.</span> ${He} is <span class="trust dec">sensibly fearful</span> of your total power over ${his} body.`); + reaction.trust -= 5; + } else { + r.push(`${He} leaves the surgery with a terribly sore pussy. ${He}'s <span class="devotion dec">horrified</span> at surgical alteration of ${his} womanhood; this is probably more of an invasion than ${he} could readily imagine before today. As with all surgery <span class="health dec">${his} health has been slightly affected.</span> ${He} is <span class="trust dec">terribly afraid</span> of your total power over ${his} most intimate parts.`); + reaction.trust -= 10; + reaction.devotion -= 5; + } + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.Labiaplasty = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Apply labiaplasty"; + } + + get healthCost() { + return 10; + } + + apply(cheat) { + this._slave.labia = 0; + return this._assemble(new App.Medicine.Surgery.Reactions.Labiaplasty()); + } +}; + +App.Medicine.Surgery.Procedures.IncreaseLabia = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Increase labia"; + } + + get healthCost() { + return 10; + } + + apply(cheat) { + this._slave.labia +=1; + return this._assemble(new App.Medicine.Surgery.Reactions.Labiaplasty()); + } +}; diff --git a/js/medicine/surgery/genitials/maleToFemale.js b/js/medicine/surgery/genitials/maleToFemale.js new file mode 100644 index 0000000000000000000000000000000000000000..3bf4129aabba6d328b43c4fc550b4014155111c6 --- /dev/null +++ b/js/medicine/surgery/genitials/maleToFemale.js @@ -0,0 +1,68 @@ +App.Medicine.Surgery.Reactions.MaletoFemale = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, His, his, him, himself} = getPronouns(slave); + const r = []; + + if (slave.fetish === Fetish.MINDBROKEN) { + r.push(`Surprisingly, ${he} already realized while exiting that ${his} genitalia was completely reshaped. The reasons why are lost to ${him}, though. Since the surgery was invasive, <span class="health dec">${his} health has been greatly affected.</span>`); + } else if (slave.devotion > 50) { + r.push(`Of course, ${he} already realized while exiting that ${his} genitalia was completely reshaped. As a shemale slave ${he} knew this day might come, and ${his} face is a strange mix of hope, happiness, satisfaction, and the tiniest tinge of soul-crushing sadness as ${he}`); + if (canSee(slave)) { + r.push(`views`); + } else { + r.push(`feels`); + } + r.push(`the vagina that has replaced ${his} penis. <span class="devotion inc">${He} has become more submissive due to your radical reshaping of ${his} body.</span> Since the surgery was invasive, <span class="health dec">${his} health has been greatly affected.</span>`); + reaction.devotion += 4; + } else if (slave.devotion > 20) { + r.push(`Of course, ${he} already realized while exiting that ${his} genitalia was completely reshaped. As a shemale slave ${he} knew this day might come, and ${his} face is a strange mix of fear, hope, and resignation as ${he}`); + if (canSee(slave)) { + r.push(`views`); + } else { + r.push(`feels`); + } + r.push(`the vagina that has replaced ${his} penis. Eventually ${his} shoulders slump and ${he} tries to carry on. <span class="devotion dec">${He} will struggle with feelings of confusion and loss.</span> Since the surgery was invasive, <span class="health dec">${his} health has been greatly affected.</span> ${He} is <span class="trust dec">terribly afraid</span> of your total power over ${his} body.`); + reaction.trust -= 10; + reaction.devotion -= 5; + } else { + r.push(`Of course, ${he} already realized while exiting that ${his} genitalia was completely reshaped. As a shemale slave ${he} knew this day might come, but expectations and the reality are two different things. ${He}'s beside ${himself}, weeping gently. ${He} absently moves a hand to where ${his} penis would have been and snatches it away with a sob. <span class="devotion dec">The surgical invasion has filled ${him} with horror and anger.</span> Since the surgery was invasive, <span class="health dec">${his} health has been greatly affected.</span> ${He} is <span class="trust dec">cripplingly afraid</span> of your total power over ${his} body.`); + reaction.trust -= 20; + reaction.devotion -= 20; + } + if ((slave.assignment === Job.MILKED || slave.assignment === Job.DAIRY) && slave.lactation === 0) { + r.push(`<span class="job change">${His} assignment has defaulted to rest.</span>`); + reaction.shortReaction.push(`<span class="job change">${His} assignment has defaulted to rest.</span>`); + removeJob(slave, slave.assignment); + } + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.MaletoFemale = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Convert genitalia to female"; + } + + get healthCost() { + return 40; + } + + apply(cheat) { + surgeryAmp(this._slave, "dick"); + this._slave.scrotum = 0; + this._slave.balls = 0; + this._slave.ballType = "human"; + this._slave.vasectomy = 0; + this._slave.vagina = 0; + this._slave.preg = -2; + if (this._slave.drugs === "testicle enhancement" || + this._slave.drugs === "hyper testicle enhancement" || + this._slave.drugs === "testicle atrophiers") { + this._slave.drugs = "no drugs"; + } + return this._assemble(new App.Medicine.Surgery.Reactions.MaletoFemale()); + } +}; diff --git a/js/medicine/surgery/genitials/mpregRemoved.js b/js/medicine/surgery/genitials/mpregRemoved.js new file mode 100644 index 0000000000000000000000000000000000000000..19ae2650acbae8215e221a28d6b7154652e06b6d --- /dev/null +++ b/js/medicine/surgery/genitials/mpregRemoved.js @@ -0,0 +1,29 @@ +App.Medicine.Surgery.Reactions.MPregRemoved = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, his} = getPronouns(slave); + const r = []; + + r.push(`${He} notices quickly that ${his} stomach is slightly flatter than before. ${He} ponders this change for a moment, unsure of what to think of this occurrence. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.RemoveMPreg = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Remove anal reproductive organs"; + } + + get healthCost() { + return 30; + } + + apply(cheat) { + this._slave.mpreg = 0; + this._slave.ovaImplant = 0; + this._slave.wombImplant = "none"; + return this._assemble(new App.Medicine.Surgery.Reactions.MPregRemoved()); + } +}; diff --git a/js/medicine/surgery/genitials/noneToFemale.js b/js/medicine/surgery/genitials/noneToFemale.js new file mode 100644 index 0000000000000000000000000000000000000000..1ab3bd9e144d95abcc8660bdbc65b0d91cfecaa2 --- /dev/null +++ b/js/medicine/surgery/genitials/noneToFemale.js @@ -0,0 +1,65 @@ +App.Medicine.Surgery.Reactions.NoneToFemale = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, his, him, himself, hers} = getPronouns(slave); + const r = []; + + if (slave.fetish === Fetish.MINDBROKEN) { + r.push(`Surprisingly, ${he} already realized while exiting that ${his} genitalia was completely reshaped. The reasons why are lost to ${him}, though. Since the surgery was invasive, <span class="health dec">${his} health has been greatly affected.</span>`); + } else if (slave.devotion > 50) { + r.push(`Of course, ${he} already realized while exiting that ${his} genitalia was completely reshaped. ${He} can only be happy that ${he}`); + if (slave.genes === "XX") { + r.push(`once again has a vagina and now has a means of release again.`); + } else { + r.push(`now has a hole other than ${his} anus to pleasure ${himself} with.`); + } + r.push(`<span class="devotion inc">${He} has become more submissive due to your radical reshaping of ${his} body.</span> Since the surgery was invasive, <span class="health dec">${his} health has been greatly affected.</span>`); + reaction.devotion += 4; + } else if (slave.devotion > 20) { + r.push(`Of course, ${he} already realized while exiting that ${his} genitalia was completely reshaped. ${He} didn't expect`); + if (slave.genes === "XX") { + r.push(`to ever have a pussy again,`); + } else { + r.push(`to be given a hole other than ${his} anus,`); + } + r.push(`and ${his} face is a strange mix of fear, hope, and resignation as ${he}`); + if (canSee(slave)) { + r.push(`views`); + } else { + r.push(`feels`); + } + r.push(`the vagina that now adorns ${his} formerly featureless crotch. Eventually ${his} shoulders slump and ${he} tries to carry on knowing that this is just another hole for your amusement, not ${hers}. <span class="devotion dec">${He} will struggle with feelings of confusion over just what your plans for ${him} are.</span> Since the surgery was invasive, <span class="health dec">${his} health has been greatly affected.</span> ${He} is <span class="trust dec">terribly afraid</span> of your total power over ${his} body.`); + reaction.trust -= 10; + reaction.devotion -= 5; + } else { + r.push(`Of course, ${he} already realized while exiting that ${his} genitalia was completely reshaped. ${He} didn't expect`); + if (slave.genes === "XX") { + r.push(`to ever have a pussy again,`); + } else { + r.push(`to be given a hole other than ${his} anus,`); + } + r.push(`but expectations and the reality are two different things. ${He}'s beside ${himself}, weeping gently. ${He} absently moves a hand to where there used to be nothing and snatches it away with a sob, knowing this was done for yourself, not ${him}. <span class="devotion dec">The surgical invasion has filled ${him} with horror and anger.</span> Since the surgery was invasive, <span class="health dec">${his} health has been greatly affected.</span> ${He} is <span class="trust dec">cripplingly afraid</span> of your total power over ${his} body.`); + reaction.trust -= 20; + reaction.devotion -= 20; + } + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.NoneToFemale = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Create a vagina"; + } + + get healthCost() { + return 40; + } + + apply(cheat) { + this._slave.vagina = 0; + this._slave.skill.vaginal = 0; + return this._assemble(new App.Medicine.Surgery.Reactions.NoneToFemale()); + } +}; diff --git a/js/medicine/surgery/genitials/ovaImplantChanged.js b/js/medicine/surgery/genitials/ovaImplantChanged.js new file mode 100644 index 0000000000000000000000000000000000000000..68ce685b0e7538639b9638e542cd98d1d6f800ce --- /dev/null +++ b/js/medicine/surgery/genitials/ovaImplantChanged.js @@ -0,0 +1,69 @@ +App.Medicine.Surgery.Reactions.OvaImplantChanged = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, his, him} = getPronouns(slave); + const r = []; + + r.push(`It's not immediately apparent to ${him} what kind of surgery ${he} received, since all ${he}'s left with is a terrible nonspecific ache in ${his} lower abdomen.`); + if (slave.devotion > 50) { + r.push(`${He}'s <span class="devotion inc">grateful</span> that you think ${him} worthy of surgically modifying. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.devotion += 4; + } else if (slave.devotion >= -20) { + r.push(`${He} understands the realities of ${his} life as a slave, but didn't expect to undergo a mysterious procedure like this. As with all surgery <span class="health dec">${his} health has been slightly affected.</span> ${He} is <span class="trust dec">sensibly fearful</span> of your total power over ${his} body.`); + reaction.trust -= 5; + } else { + r.push(`${He} does not understand the realities of ${his} life as a slave at a core level, so ${he}'s <span class="devotion dec">terrified and angry</span> at what you could have possibly done to ${him}. As with all surgery <span class="health dec">${his} health has been slightly affected.</span> ${He} is <span class="trust dec">sensibly fearful</span> of your total power over ${his} body.`); + reaction.trust -= 5; + reaction.devotion -= 5; + } + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.RemoveOvaImplant = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Remove implants"; + } + + get healthCost() { + return 10; + } + + apply(cheat) { + this._slave.ovaImplant = 0; + return this._assemble(new App.Medicine.Surgery.Reactions.OvaImplantChanged()); + } +}; + +App.Medicine.Surgery.Procedures.InstallOvaImplant = class extends App.Medicine.Surgery.Procedure { + /** + * @param {App.Entity.SlaveState} slave + * @param {FC.OvaryImplantType} type + */ + constructor(slave, type) { + super(slave); + this.type = type; + } + + get name() { + switch (this.type) { + case "fertility": + return "Install fertility implants"; + case "sympathy": + return "Install sympathetic ovulation implants"; + default: + throw new Error("Invalid OvaryImplantType: " + this.type); + } + } + + get healthCost() { + return 10; + } + + apply(cheat) { + this._slave.ovaImplant = this.type; + return this._assemble(new App.Medicine.Surgery.Reactions.OvaImplantChanged()); + } +}; diff --git a/js/medicine/surgery/genitials/precum.js b/js/medicine/surgery/genitials/precum.js new file mode 100644 index 0000000000000000000000000000000000000000..d66c7d24fb25246ae04f3a36a4a0a9a3d729317a --- /dev/null +++ b/js/medicine/surgery/genitials/precum.js @@ -0,0 +1,48 @@ +App.Medicine.Surgery.Reactions.Precum = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, His, his, him, himself} = getPronouns(slave); + const r = []; + + r.push(`${His} groin is a little sore, and ${he} examines it closely, but ${he} can't find much difference. Near the end of ${his} close inspection of ${his} own private parts, though, ${he} happens to stimulate ${himself}, unintentionally, and just a little. That's enough. ${He} begins to leak precum, and it doesn't stop until ${his} confusion snuffs out the slight arousal that got it started.`); + if (this._hasEmotion(slave)) { + if (slave.devotion > 50) { + r.push(`<span class="devotion inc">${He}'s delighted.</span> ${He}'s such a good sex slave that the lewdness of making extra fluid when ${he}'s ready to fuck is exciting to ${him}. That, and extra lubrication is always welcome.`); + if (slave.dick > 2) { + r.push(`One of the first things ${he} tries is guiding ${his} flaccid dick back to apply some to ${his} asspussy. It works, to ${his} naughty satisfaction.`); + } + reaction.devotion += 4; + } else if (slave.devotion >= -20) { + r.push(`${He} obviously doesn't know what to think at first. ${He} does ${his} best not to make a mess, and is mostly successful, but ${he}'s realizing that this is going to be somewhat inconvenient. Still, having such a lewd change made to ${his} body affects ${his} feelings towards you; ${he} is <span class="trust dec">sensibly fearful</span> of your total power over ${him}.`); + reaction.trust -= 5; + } else { + r.push(`${He} feared the worst when ${he} realized that something had been done to ${him} down there, and ${he}'s initially relieved to find that ${he}'s intact and apparently functional. But ${he}'s been invaded in an extremely personal way, and <span class="devotion dec">resents having you tamper with ${his} private parts.</span> Furthermore, ${he} is <span class="trust dec">sensibly fearful</span> of your total power over ${him}.`); + reaction.trust -= 5; + reaction.devotion -= 5; + } + } + r.push(`As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.Precum = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Implant slow-release productivity drugs"; + } + + get description() { + return "This may cause some leaking"; + } + + get healthCost() { + return 10; + } + + apply(cheat) { + this._slave.prostate = 2; + return this._assemble(new App.Medicine.Surgery.Reactions.Precum()); + } +}; diff --git a/js/medicine/surgery/genitials/preg.js b/js/medicine/surgery/genitials/preg.js new file mode 100644 index 0000000000000000000000000000000000000000..efbb4f4eac0dce200235df06cc80f044dd5e78ba --- /dev/null +++ b/js/medicine/surgery/genitials/preg.js @@ -0,0 +1,82 @@ +App.Medicine.Surgery.Reactions.Preg = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, his, him} = getPronouns(slave); + let r = []; + + r.push(`${He} leaves the surgery with a certain warmth in ${his} lower abdomen, ${he} knows that ${he} has been impregnated.`); + if (slave.fetish === Fetish.MINDBROKEN) { + r.push(`As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + } else if (this._strongKnownFetish(slave, "pregnancy")) { + r.push(`${He} is <span class="devotion inc"> filled with joy</span> about being swollen with life and gleefully rubs ${his} soon to be huge belly. ${He}'s so pleased that ${he} now <span class="trust inc">trusts</span> your plans for ${his} body. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.trust += 4; + reaction.devotion += 10; + } else if (slave.devotion > 50) { + r.push(`${He}'s <span class="devotion inc">grateful</span> that you think ${his} offspring are valuable, and a little nervous about how ${he}'ll perform as a breeder. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.devotion += 4; + } else if (slave.devotion >= -20) { + r.push(`${He} understands the realities of ${his} life as a slave, so it isn't much of a shock. As with all surgery <span class="health dec">${his} health has been slightly affected.</span> ${He} is <span class="trust dec">sensibly fearful</span> of your total power over ${his} body and how big ${he} will get.`); + reaction.trust -= 10; + } else { + r.push(`${He} does not understand the realities of ${his} life as a slave at a core level, so ${he}'s <span class="devotion dec">terrified and angry</span> that you have forced ${him} to be a broodmother. As with all surgery <span class="health dec">${his} health has been slightly affected.</span> ${He} is <span class="trust dec">sensibly fearful</span> of your total power over ${his} body and ${his} rapidly filling womb.`); + reaction.trust -= 15; + reaction.devotion -= 15; + } + if (V.PC.dick !== 0) { + reaction.longReaction.push(r); + r = []; + const seed = App.UI.DOM.makeElement("span", `The implant is highly receptive to fresh sperm right now; it would be trivial to seed it with yours and force ${him} to bear hundreds of your children.`); + r.push(seed); + App.UI.DOM.appendNewElement("div", seed, App.UI.DOM.link( + `Seed ${his} pregnancy implant with your genetic material`, + () => { + const r = []; + r.push(`You simply take ${him} on the spot, using ${him} to your liking and shooting a load deep into ${his} receptive pussy. The implant rewards ${him} upon successful fertilization, so ${his} moans of pleasure as you pull out of ${him} inform you ${he}'ll soon`); + if (slave.broodmother === 2) { + r.push(`be greatly swollen`); + } else { + r.push(`grow heavy`); + } + r.push(`with <span class="pregnant">your brood.</span>`); + slave.pregSource = -1; + WombImpregnate(slave, 1, -1, 1); + /* to ensure player paternity we need actual fetus here */ + r.push(VCheck.Vaginal(slave, 1)); + + const div = document.createElement("div"); + App.Events.addNode(div, r); + App.UI.DOM.replace(seed, div); + } + )); + } + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.ImplantPregGenerator = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Implant a pregnancy generator"; + } + + get description() { + const {his} = getPronouns(this.originalSlave); + return `This will have severe effects on ${his} health and mind`; + } + + get healthCost() { + return 10; + } + + apply(cheat) { + this._slave.preg = 1; + this._slave.pregWeek = 1; + this._slave.pregKnown = 1; + this._slave.pregType = 1; + this._slave.broodmother = 1; + this._slave.broodmotherFetuses = 1; + this._slave.pregControl = "none"; + return this._assemble(new App.Medicine.Surgery.Reactions.Preg()); + } +}; diff --git a/js/medicine/surgery/genitials/preg1hack.js b/js/medicine/surgery/genitials/preg1hack.js new file mode 100644 index 0000000000000000000000000000000000000000..aa51225f92cbbae5b9f054b543e15c172c404b52 --- /dev/null +++ b/js/medicine/surgery/genitials/preg1hack.js @@ -0,0 +1,53 @@ +App.Medicine.Surgery.Reactions.Preg1Hack = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, his, him} = getPronouns(slave); + const r = []; + + r.push(`The hacking process is brief, being little more than inserting the actuator into ${his} vagina, and leaves ${him} with <span class="health dec">nothing more than minor health effects</span> from the altered implant functions. ${He} leaves the surgery without any specific feeling, but ${he} knows that something has been done to ${his} implant.`); + + // My testing shows that 2 or 3 is relatively safe for generic adult slave with effective curatives or clinic, 4 - high risk of bursting. So there is a catch with it. + slave.broodmotherFetuses = [2, 2, 2, 2, 3, 3, 4].random(); + + if (slave.fetish === Fetish.MINDBROKEN) { + /* nothing*/ + } else if (this._strongKnownFetish(slave, "pregnancy")) { + r.push(`${He} is <span class="devotion inc">filled with joy</span> about being even more swollen with life and gleefully rubs ${his} soon-to-be-larger belly. ${He}'s so pleased that ${he} now <span class="trust inc">trusts</span> your plans for ${his} body. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.trust += 4; + reaction.devotion += 10; + } else if (slave.devotion > 50) { + r.push(`${He}'s <span class="devotion inc">grateful</span> that you think ${his} offspring are valuable, but is a little afraid about how ${his} body will catch up with ${his} hacked implant.`); + reaction.devotion += 2; + reaction.trust -= 2; + } else if (slave.devotion >= -20) { + r.push(`${He} understands the realities of ${his} life as a slave, so even this isn't much of a shock. ${He} is <span class="trust dec">sensibly fearful</span> of your total power over ${his} body and how big ${he} will get.`); + reaction.trust -= 10; + } else { + r.push(`${He} does not understand the realities of ${his} life as a slave at a core level, so ${he}'s <span class="devotion dec">terrified and angry</span> that you not only have forced ${him} to be a broodmother but also messed with the implant, with no thought for ${his} safety. ${He} is <span class="trust dec">sensibly fearful</span> of your total power over ${his} body and ${his} even more rapidly filling womb.`); + reaction.trust -= 15; + reaction.devotion -= 15; + } + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.HackPregGenerator = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Hack the pregnancy generator"; + } + + get description() { + return `This will trick the generator ova release logic, forcing it to release more than one ova each week. This is an untested override and can cause severe health problems.`; + } + + get healthCost() { + return 1; // Yes, 1 + } + + apply(cheat) { + this._slave.pregControl = "none"; + return this._assemble(new App.Medicine.Surgery.Reactions.Preg1Hack()); + } +}; diff --git a/js/medicine/surgery/genitials/pregRemove.js b/js/medicine/surgery/genitials/pregRemove.js new file mode 100644 index 0000000000000000000000000000000000000000..54ed79a884cc99137b9f94fd3858fc0551e770cf --- /dev/null +++ b/js/medicine/surgery/genitials/pregRemove.js @@ -0,0 +1,52 @@ +App.Medicine.Surgery.Reactions.PregRemove = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, his, him} = getPronouns(slave); + const r = []; + + r.push(`${He} leaves the surgery with a certain soreness and minor pain in ${his} lower abdomen, ${he} knows that ${his} days as broodmother are finished.`); + if (slave.fetish === Fetish.MINDBROKEN) { + r.push(`As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + } else if (this._strongKnownFetish(slave, "pregnancy")) { + r.push(`${He} is <span class="trust dec">filled with despair</span> about missing being swollen with life and rubs ${his} flat belly with <span class="devotion dec">sorrow.</span> Only one fact slightly soothes ${him} and allows ${him} to remain sane — at least ${he} will not become infertile and still can get pregnant naturally. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.trust -= 10; + reaction.devotion -= 30; + } else if (slave.devotion > 50) { + r.push(`${He}'s <span class="devotion inc">grateful</span> that you allowed ${his} body to be free of constant pregnancy stress, and a little nervous about if you will appreciate ${him} enough without such dedication. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.devotion += 4; + } else if (slave.devotion >= -20) { + r.push(`${He} understands the realities of ${his} life as a slave, so it isn't much of a shock. As with all surgery <span class="health dec">${his} health has been slightly affected.</span> ${He} is <span class="trust dec">sensibly fearful</span> of your total power over ${his} body.`); + reaction.trust -= 10; + } else { + r.push(`${He} does not understand the realities of ${his} life as a slave at a core level, so ${he}'s <span class="devotion dec">terrified and angry</span> that you can change ${his} body so radically just at your will. As with all surgery <span class="health dec">${his} health has been slightly affected.</span> ${He} is <span class="trust dec">sensibly fearful</span> of your total power over ${his} body and ${his} now empty womb.`); + reaction.trust -= 15; + reaction.devotion -= 15; + } + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.RemovePregGenerator = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Remove the pregnancy generator"; + } + + get healthCost() { + return 10; + } + + apply(cheat) { + this._slave.preg = 0; + this._slave.pregWeek = -1; + this._slave.pregSource = 0; + this._slave.pregKnown = 0; + this._slave.pregType = 0; + this._slave.broodmother = 0; + this._slave.broodmotherFetuses = 0; + this._slave.broodmotherOnHold = 0; + this._slave.pregControl = "none"; + return this._assemble(new App.Medicine.Surgery.Reactions.PregRemove()); + } +}; diff --git a/js/medicine/surgery/genitials/prostate.js b/js/medicine/surgery/genitials/prostate.js new file mode 100644 index 0000000000000000000000000000000000000000..0e3a308733e53e30aa5a70ab81201f6ea72c9911 --- /dev/null +++ b/js/medicine/surgery/genitials/prostate.js @@ -0,0 +1,55 @@ +App.Medicine.Surgery.Reactions.Prostate = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, his, him, himself} = getPronouns(slave); + const r = []; + + r.push(`It's not immediately apparent to ${him} what kind of surgery ${he} received, since all ${he}'s left with is a terrible nonspecific ache in ${his} lower parts. Since the surgery was invasive, <span class="health dec">${his} health has been greatly affected.</span>`); + if (this._hasEmotion(slave)) { + if (slave.devotion > 50) { + if (slave.anus === 0) { + r.push(`Since ${he}'s still an anal virgin, ${he} doesn't have any immediate way to discover what's been taken from ${him}. Thus, ${he} carries on, accepting what you did to ${him} out of simple ignorance.`); + } else if (this._strongKnownFetish(slave, "buttslut")) { + r.push(`${He} realizes that ${his} prostate's gone the first time ${he} takes it up the butt, though. The incorrigible buttslut is crushed, but ${he}'s devoted to you, so ${he} resolves to carry on regardless. If anything, ${he} does ${his} best to push ${himself} to <span class="fetish loss">consider other kinks,</span> now that a hard anal pounding isn't as fun for ${him} as it once was.`); + slave.fetishStrength -= 40; + } else { + r.push(`${He} realizes that ${his} prostate's gone the first time ${he} takes it up the butt, though. <span class="devotion inc">Awed by your permeating control over ${him},</span> even down to ${his} internal organs, ${he} accepts that you've decided to make buttsex less fun for ${him}.`); + reaction.devotion += 4; + } + } else if (slave.devotion > 20) { + if (slave.anus === 0) { + r.push(`Since ${he}'s still an anal virgin, ${he} doesn't have any immediate way to discover what's been taken from ${him}. Not knowing what you did, <span class="trust dec">${he}'s afraid,</span> realizing that you can toy with ${his} internal makeup at a whim.`); + reaction.trust -= 5; + } else if (this._strongKnownFetish(slave, "buttslut")) { + r.push(`${He} realizes that ${his} prostate's gone the first time ${he} takes it up the butt, though. The buttslut is crushed, and <span class="devotion dec">infuriated,</span> because in effect you've taken ${his} favorite pastime away from ${him}. For now, ${he} defiantly does ${his} best to keep orgasming to anal, but it remains to be seen whether ${he} can maintain ${his} enthusiasm.`); + reaction.devotion -= 10; + } else { + r.push(`${He} realizes that ${his} prostate's gone the first time ${he} takes it up the butt, though. ${He} wasn't attached to it in a particular way, but it was part of ${his} body, and now it's gone. <span class="trust dec">It frightens ${him}</span> to be reduced in this way, and ${he} wonders what it means that you apparently want ${him} to enjoy being assfucked less.`); + reaction.trust -= 5; + } + } else { + r.push(`${He} doesn't have to know exactly what you did, though, to be <span class="trust dec">mortified</span> and <span class="devotion dec">infuriated</span> by your messing around inside ${his} body. ${He} hasn't yet learned to accept that you control ${him} completely, down to the arrangement and even presence of ${his} internal organs.`); + reaction.trust -= 10; + reaction.devotion -= 10; + } + } + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.RemoveProstate = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Remove prostate"; + } + + get healthCost() { + return 40; + } + + apply(cheat) { + this._slave.prostate = 0; + return this._assemble(new App.Medicine.Surgery.Reactions.Prostate()); + } +}; diff --git a/js/medicine/surgery/genitials/relocate.js b/js/medicine/surgery/genitials/relocate.js new file mode 100644 index 0000000000000000000000000000000000000000..b3eef71a37a41b8dcba466e55c5ed22d1a8ac8a4 --- /dev/null +++ b/js/medicine/surgery/genitials/relocate.js @@ -0,0 +1,56 @@ +App.Medicine.Surgery.Reactions.Relocate = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, his, him} = getPronouns(slave); + const r = []; + + if (slave.fetish === Fetish.MINDBROKEN) { + r.push(`When ${he} begins surgical recovery, ${his} groin hurts quite a lot, and ${he} can't quite tell what's going on down there. Since the surgery was invasive, <span class="health dec">${his} health has been seriously affected.</span>`); + } else if (slave.devotion > 50) { + r.push(`When ${he} begins surgical recovery, ${his} groin hurts quite a lot, and ${he} can't quite tell what's going on down there. However, ${he} was able to follow enough of the surgery to understand that ${he} still has ${his} balls, even if they're no longer visible. ${He}'s eager to`); + if (canSee(slave)) { + r.push(`see, and when ${he}'s recovered enough, ${he}'s pleased by the sight`); + } else { + r.push(`feel, and when ${he}'s recovered enough, ${he}'s pleased by the sensation`); + } + r.push(`of the smooth skin`); + if (slave.dick > 0) { + r.push(`beneath ${his} still-functional cock.`); + } else { + r.push(`where ${his} testicles used to be.`); + } + r.push(`<span class="devotion inc">${He} has become more submissive due to your reshaping of ${his} body.</span> Since the surgery was invasive, <span class="health dec">${his} health has been seriously affected.</span>`); + reaction.devotion += 4; + } else if (slave.devotion > 20) { + r.push(`When ${he} begins surgical recovery, ${his} groin hurts quite a lot, and ${he} can't quite tell what's going on down there. However, ${he} was able to follow enough of the surgery to understand that ${he} still has ${his} balls, even if they're no longer visible. ${He}'s relieved ${he} hasn't been gelded, but ${he}'s still quite horrified. <span class="devotion dec">${He} blames you for changing ${him} so radically.</span> Since the surgery was invasive, <span class="health dec">${his} health has been seriously affected.</span> ${He} is <span class="trust dec">terribly afraid</span> of your total power over ${his} body.`); + reaction.trust -= 5; + reaction.devotion -= 5; + } else { + r.push(`When ${he} begins surgical recovery, ${his} groin hurts quite a lot, and ${he} can't quite tell what's going on down there. ${He} spends a long time in terror, wondering whether ${he}'s been gelded, but ${he} eventually realizes that ${his} balls have merely been relocated. <span class="devotion dec">The surgical invasion has filled ${him} with horror and anger.</span> Since the surgery was invasive, <span class="health dec">${his} health has been seriously affected.</span> ${He} is <span class="trust dec">very afraid</span> of your total power over ${his} body.`); + reaction.trust -= 20; + reaction.devotion -= 20; + } + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.RelocateBalls = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Move them inside abdomen and remove scrotum"; + } + + get description() { + return `This will have a negative impact on cum production`; + } + + get healthCost() { + return 20; + } + + apply(cheat) { + this._slave.scrotum = 0; + return this._assemble(new App.Medicine.Surgery.Reactions.Relocate()); + } +}; diff --git a/js/medicine/surgery/genitials/scrotalTuck.js b/js/medicine/surgery/genitials/scrotalTuck.js new file mode 100644 index 0000000000000000000000000000000000000000..652845ba7b4205b56876d4508dbb1c1578b8aeb0 --- /dev/null +++ b/js/medicine/surgery/genitials/scrotalTuck.js @@ -0,0 +1,55 @@ +App.Medicine.Surgery.Reactions.ScrotalTuck = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, his} = getPronouns(slave); + const r = []; + + if (slave.fetish === Fetish.MINDBROKEN) { + r.push(`When ${he} begins surgical recovery, ${his} groin hurts quite a lot, and ${he} can't quite tell what's going on down there. Since the surgery was invasive, <span class="health dec">${his} health has been seriously affected.</span>`); + } else if (slave.devotion > 50) { + r.push(`${He} exits the surgery gingerly, since ${he} can feel that something was done to ${his} testicles. ${He} examines them carefully`); + if (canSee(slave)) { + r.push(`in the mirror.`); + } else { + r.push(`by feeling alone.`); + } + r.push(`Realizing that ${his} balls fit ${his} scrotum perfectly, <span class="devotion inc">${he}'s very happy you'd take an interest in ${his} balls,</span> and looks forward to discovering how it moves during sex. <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.devotion += 4; + } else if (slave.devotion > 20) { + r.push(`${He} exits the surgery gingerly, since ${he} can feel that something was done to ${his} testicles. ${He} examines them carefully`); + if (canSee(slave)) { + r.push(`in the mirror.`); + } else { + r.push(`by feeling alone.`); + } + r.push(`Realizing that ${his} balls fit ${his} scrotum perfectly, ${he}'s flooded with relief. ${He}'s so elated that ${he} hasn't been severely damaged that ${he} doesn't mind your taking surgical control of ${his} genitals. <span class="health dec">${his} health has been slightly affected.</span>`); + } else { + r.push(`${He} exits the surgery gingerly, since ${he} can feel that something was done to ${his} testicles. ${He} examines them carefully`); + if (canSee(slave)) { + r.push(`in the mirror.`); + } else { + r.push(`by feeling alone.`); + } + r.push(`Realizing that ${his} balls fit ${his} scrotum perfectly, ${he}'s flooded with relief, since ${he} was afraid that you'd done something far more terrible. Once ${he} has time to think about it, though, ${he}'s somewhat <span class="devotion dec">resentful,</span> since ${he} naturally feels a certain proprietary interest in ${his} own genitals. <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.devotion -= 5; + } + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.ScrotalTuck = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Remove excess scrotal skin"; + } + + get healthCost() { + return 5; + } + + apply(cheat) { + this._slave.scrotum = this._slave.balls; + return this._assemble(new App.Medicine.Surgery.Reactions.ScrotalTuck()); + } +}; diff --git a/js/medicine/surgery/genitials/sterilize.js b/js/medicine/surgery/genitials/sterilize.js new file mode 100644 index 0000000000000000000000000000000000000000..1c7f4984b2ecb401f249d7bdbac4624c1a2c4c23 --- /dev/null +++ b/js/medicine/surgery/genitials/sterilize.js @@ -0,0 +1,63 @@ +App.Medicine.Surgery.Reactions.Sterilize = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, his, him} = getPronouns(slave); + const r = []; + + if (slave.fetish === Fetish.MINDBROKEN) { + r.push(`${He} leaves the surgery with nothing but a nonspecific ache in ${his} lower abdomen, but lacks the mental faculties to know that ${he}'ll never have a child now. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + } else if (this._strongKnownFetish(slave, "pregnancy")) { + r.push(`${He} leaves the surgery with nothing but a nonspecific ache in ${his} lower abdomen, but ${he} knows enough about surgery and sex slaves to know that it means ${he}'ll never have a child. ${He} is <span class="devotion dec">filled with grief</span> whenever ${he} thinks about the fact that feeling a life growing within ${him} is now, finally and forever, beyond ${him}. As with all surgery <span class="health dec">${his} health has been slightly affected.</span> ${He} is <span class="trust dec">terribly afraid</span> of your total power over ${his} body.`); + reaction.trust -= 10; + reaction.devotion -= 20; + } else if (slave.energy > 95) { + r.push(`${He} leaves the surgery with nothing but a nonspecific ache in ${his} lower abdomen, but ${he} knows enough about surgery and sex slaves to know that it means ${he}'ll never have to worry about a pussyfuck getting ${him} pregnant again. As far as ${he}'s concerned, easier, less worrisome vaginal intercourse is a <span class="devotion inc">good thing;</span> one less thing to keep in mind when a guy blows his load inside ${him}. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.devotion += 4; + } else if (slave.devotion > 50) { + r.push(`${He} leaves the surgery with nothing but a nonspecific ache in ${his} lower abdomen, but ${he} knows enough about surgery and sex slaves to know that it means ${he}'ll never have to worry about a pregnancy, ever again. ${He} has many rules and duties to worry about as a slave, so ${he}'s <span class="devotion inc">grateful</span> that ${he} has one less thing to worry about as ${he} serves you. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.devotion += 4; + } else if (slave.devotion >= -20) { + r.push(`${He} leaves the surgery with nothing but a nonspecific ache in ${his} lower abdomen, but ${he} knows enough about surgery and sex slaves to know that it means ${he}'ll never get pregnant. ${He} understands the realities of ${his} life as a slave, and that a traditional life with a child was never going to happen for ${him} anyway, so it isn't much of a shock. As with all surgery <span class="health dec">${his} health has been slightly affected.</span> ${He} is <span class="trust dec">sensibly fearful</span> of your total power over ${his} body.`); + reaction.trust -= 5; + } else { + r.push(`${He} leaves the surgery with nothing but a nonspecific ache in ${his} lower abdomen, but ${he} knows enough about surgery and sex slaves to know that it means ${he}'ll never get pregnant. ${He} does not understand the realities of ${his} life as a slave at a core level, so despite the fact that ${he} was never going to have a family, fertile or not, ${he}'s <span class="devotion dec">resentful</span> of the surgical invasion. As with all surgery <span class="health dec">${his} health has been slightly affected.</span> ${He} is <span class="trust dec">sensibly fearful</span> of your total power over ${his} body.`); + reaction.trust -= 5; + reaction.devotion -= 5; + } + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.Sterilize = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Sterilize"; + } + + get healthCost() { + return 10; + } + + apply(cheat) { + this._slave.preg = -2; + return this._assemble(new App.Medicine.Surgery.Reactions.Sterilize()); + } +}; + +App.Medicine.Surgery.Procedures.Oophorectomy = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Oophorectomy"; + } + + get healthCost() { + return 10; + } + + apply(cheat) { + this._slave.ovaries = 0; + this._slave.ovaImplant = 0; + this._slave.wombImplant = "none"; + return this._assemble(new App.Medicine.Surgery.Reactions.Sterilize()); + } +}; diff --git a/js/medicine/surgery/genitials/vagina.js b/js/medicine/surgery/genitials/vagina.js new file mode 100644 index 0000000000000000000000000000000000000000..facb07fdf72b18f5b18554f83a717d7de8f54eb2 --- /dev/null +++ b/js/medicine/surgery/genitials/vagina.js @@ -0,0 +1,93 @@ +App.Medicine.Surgery.Reactions.Vagina = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, his, him} = getPronouns(slave); + const r = []; + + if (slave.fetish === Fetish.MINDBROKEN) { + r.push(`${He} leaves the surgery with a terribly sore pussy and little desire to mess with it. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + } else { + if (slave.energy > 95) { + r.push(`${He} leaves the surgery with a terribly sore pussy. ${He} is <span class="devotion inc">filled with joy</span> at the prospect of having a tight cunt again, so much so that ${he} now <span class="trust inc">trusts</span> your plans for ${his} body. If ${he} had much in the way of vanilla sex skills, <span class="stat drop">they've likely suffered.</span> As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.trust += 4; + reaction.devotion += 10; + } else if (slave.devotion > 50) { + r.push(`${He} leaves the surgery with a terribly sore pussy. ${He}'s <span class="devotion inc">happy</span> that you think ${him} worth the effort of surgical improvement, and a little excited to feel like ${he}'s a girl again. If ${he} had much in the way of vanilla sex skills, <span class="stat drop">they've likely suffered.</span> As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.devotion += 4; + } else if (slave.devotion >= -20) { + r.push(`${He} leaves the surgery with a terribly sore pussy. ${He}'s somewhat revolted by the surgery, but as far as ${he}'s concerned, the short recovery period will mean a time during which ${he} can be sure no one will use ${his} pussy. If ${he} had much in the way of vanilla sex skills, <span class="stat drop">they've likely suffered.</span> As with all surgery <span class="health dec">${his} health has been slightly affected.</span> ${He} is <span class="trust dec">sensibly fearful</span> of your total power over ${his} body.`); + reaction.trust -= 5; + } else { + r.push(`${He} leaves the surgery with a terribly sore pussy. ${He}'s <span class="devotion dec">horrified</span> at surgical alteration of ${his} womanhood; this is probably more of an invasion than ${he} could readily imagine before today. If ${he} had much in the way of vanilla sex skills, <span class="stat drop">they've likely suffered.</span> As with all surgery <span class="health dec">${his} health has been slightly affected.</span> ${He} is <span class="trust dec">terribly afraid</span> of your total power over ${his} most intimate parts.`); + reaction.trust -= 10; + reaction.devotion -= 5; + } + if (slave.skill.vaginal > 10) { + slave.skill.vaginal -= 10; + } + } + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.RepairVagina = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Repair pussy"; + } + + get description() { + const {his} = getPronouns(this.originalSlave); + return `This will reduce ${his} vaginal skills`; + } + + get healthCost() { + return 10; + } + + apply(cheat) { + this._slave.vagina = 3; + return this._assemble(new App.Medicine.Surgery.Reactions.Vagina()); + } +}; + +App.Medicine.Surgery.Procedures.TightenVagina = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Tighten pussy"; + } + + get description() { + const {his} = getPronouns(this.originalSlave); + return `This will reduce ${his} vaginal skills`; + } + + get healthCost() { + return 10; + } + + apply(cheat) { + this._slave.vagina = 1; + return this._assemble(new App.Medicine.Surgery.Reactions.Vagina()); + } +}; + +App.Medicine.Surgery.Procedures.RestoreVirginity = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Restore virginity"; + } + + get description() { + const {his} = getPronouns(this.originalSlave); + return `This will reduce ${his} vaginal skills`; + } + + get healthCost() { + return 10; + } + + apply(cheat) { + this._slave.vagina = 0; + return this._assemble(new App.Medicine.Surgery.Reactions.Vagina()); + } +}; diff --git a/js/medicine/surgery/genitials/vaginalRemoval.js b/js/medicine/surgery/genitials/vaginalRemoval.js new file mode 100644 index 0000000000000000000000000000000000000000..81305924440556a97aefd3f15b3d90f0baf37b11 --- /dev/null +++ b/js/medicine/surgery/genitials/vaginalRemoval.js @@ -0,0 +1,97 @@ +App.Medicine.Surgery.Reactions.VaginaRemoval = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, His, his, him, himself} = getPronouns(slave); + const r = []; + + if (slave.fetish === Fetish.MINDBROKEN) { + r.push(`Surprisingly, ${he} already realized while exiting that ${his} genitalia was completely reshaped. The reasons why are lost to ${him}, though.`); + } else if (slave.dick === 0) { + r.push(`Of course, ${he} already realized while exiting that something very dear to ${him} has been taken away.`); + if (slave.devotion > 50 && slave.sexualFlaw === "self hating") { + r.push(`Strong emotions play out on ${his} face as ${he} experiences a watershed in ${his} life of sexual slavery, perhaps the most radical one ${he}'ll ever experience. ${He} loves you with all ${his} being, and truly hates ${himself}. ${He} finds ${himself} in an emotional place where ${he}'s willing to accept having ${his} womanhood torn out. ${He} knows ${he}'s a worthless piece of trash, and realizes that if you feel like removing the parts of ${his} body that can feel sexual pleasure, that's your prerogative. In moments, ${he}'s confirmed in <span class="devotion inc">total, final, fanatical submission to your will.</span> It's almost frightening.`); + reaction.devotion += 50; + } else if (slave.devotion > 20 && slave.fetishKnown === 1 && slave.fetishStrength > 95 && slave.fetish === "buttslut") { + r.push(`${He}'s such a complete buttslut, though, that ${he} finds ${he} doesn't really care. ${He} never really paid much attention to ${his} front hole; it got wet when ${he} got buttfucked, but that was mostly useful to provide a little lube for phalli that fucked it before switching to ${his} ass. If anything, ${he}'s <span class="trust inc">reassured</span> by the implication that ${his} asshole is all that matters about ${him}, and of course is forced even further into <span class="devotion inc">submission to your will.</span>`); + reaction.devotion += 8; + reaction.trust += 8; + } else if (slave.devotion > 20 && slave.fetishKnown === 1 && slave.fetishStrength > 95 && slave.fetish === "cumslut") { + r.push(`${He}'s such an oral slut, though, that ${he} finds ${he} doesn't really care. ${He} viewed ${his} pussy as a nice place for stimulation while ${he} licked, blew, and sucked; if ${he} has to learn to get off from throat stimulation ${he} will. As far as ${he}'s concerned, you've simply confirmed that ${his} most important hole is the one in ${his} face. If anything, ${he}'s <span class="trust inc">reassured</span> by the implication that ${his} real pussy has always been the one in the middle of ${his} face, and of course, ${he}'s forced even further into <span class="devotion inc">submission to your will.</span>`); + reaction.devotion += 8; + reaction.trust += 8; + } else if (slave.devotion > 20 && slave.fetishKnown === 1 && slave.fetishStrength > 95 && slave.fetish === Fetish.SUBMISSIVE) { + r.push(`${He}'s such a total submissive, though, that ${he} accepts even this. Having ${his} womanhood torn out, greatly curtailing ${his} physical ability to enjoy sex, is perhaps the final step in sexual slavery, and ${he}'s a little awed by it. If anything, ${he}'s <span class="trust inc">reassured</span> by the implicit promise that ${his} body exists for the degrading sexual gratification of others, and of course, ${he}'s forced even further into <span class="devotion inc">submission to your will.</span>`); + reaction.devotion += 8; + reaction.trust += 8; + } else if (slave.devotion > 95) { + r.push(`Doubt, fear, and even nausea play across ${his} face, but ${he}'s so worshipful of you that ${he} masters them all, accepting that this is your will. There's surprisingly little mental effect on ${him}. The horror of having ${his} womanhood torn out is so strong that it breaks through to ${him}, and the only way ${he} can find to deal with it is to think about it as little as possible. ${He} falls back on worshipful duty.`); + } else if (slave.devotion > 50) { + r.push(`${He}'s devoted to you, but doubt and fear play across ${his} face as ${he} comes to terms with what's happened. ${He} does not see how having ${his} womanhood torn out will improve ${his} sexual slavery. ${He} does not rage or scream, but ${he} does cry, <span class="devotion dec">sadly wondering</span> whether ${he}'s valuable to you at all, or if ${he}'s just a surgical plaything to be degraded. ${He}'s <span class="trust dec">very frightened</span> that you'll cut up more of ${him}.`); + reaction.trust -= 10; + reaction.devotion -= 10; + } else if (slave.devotion > 20) { + r.push(`${He}'s properly broken to slavery, but this is much too far. Having ${his} womanhood torn out cuts straight through ${his} conditioning, and tears roll down ${his} face as the horrible permanence of what's happened to ${him} really sinks in. <span class="devotion dec">Open anger</span> begins to become apparent through ${his} tears; ${he} thought that ${his} obedience merited better than this, and ${he}'s <span class="trust dec">extremely terrified</span> to find that despite being a decent slave, ${he} remains a surgical playground.`); + reaction.trust -= 20; + reaction.devotion -= 20; + } else { + r.push(`${He}'s horrified almost beyond the ability of ${his} mind to comprehend. ${His} face takes on a blank look as ${he} goes into shock. There's no screaming and no tears, not yet; it will take ${him} time to process what's happened to ${him}. Without a doubt, ${he}'ll be absolutely filled by <span class="devotion dec">rage</span> and <span class="trust dec">terror.</span>`); + reaction.trust -= 40; + reaction.devotion -= 40; + } + } else { + r.push(`Of course, ${he} already realized while exiting that ${his} genitalia has been radically simplified. As a herm slave ${he} knew this day might come,`); + if (slave.devotion > 50) { + r.push(`and ${his} face is a strange mix of hope, happiness, satisfaction, and the tiniest tinge of soul-crushing sadness as ${he}`); + if (canSee(slave)) { + r.push(`views`); + } else { + r.push(`feels`); + } + r.push(`the cock that is all that remains of ${his} once-unique hermaphroditic genitalia. <span class="devotion inc">${He} has become more submissive due to your radical reshaping of ${his} body.</span> Since the surgery was invasive, <span class="health dec">${his} health has been greatly affected.</span>`); + reaction.devotion += 4; + } else if (slave.devotion > 20) { + r.push(`and ${his} face is a strange mix of fear, hope, and resignation as ${he}`); + if (canSee(slave)) { + r.push(`views`); + } else { + r.push(`feels`); + } + r.push(`the cock that is all that remains of ${his} once-unique hermaphroditic genitalia. Eventually ${his} shoulders slump and ${he} tries to carry on. <span class="devotion dec">${He} will struggle with feelings of confusion and loss.</span> Since the surgery was invasive, <span class="health dec">${his} health has been greatly affected.</span> ${He} is <span class="trust dec">terribly afraid</span> of your total power over ${his} body.`); + reaction.trust -= 10; + reaction.devotion -= 5; + } else { + r.push(`but expectations and the reality are two different things. ${He}'s beside ${himself}, weeping gently.`); + if (hasAnyArms(slave)) { + r.push(`${He} absently moves a hand to where ${his} pussy would have been and snatches it away with a sob.`); + } + r.push(`<span class="devotion dec">The surgical invasion has filled ${him} with horror and anger.</span> ${He} is <span class="trust dec">cripplingly afraid</span> of your total power over ${his} body.`); + reaction.trust -= 20; + reaction.devotion -= 20; + } + } + r.push(`Naturally, <span class="health dec">${his} health has been greatly affected</span> by such serious surgery.`); + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.VaginaRemoval = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Remove pussy"; + } + + get description() { + const {his} = getPronouns(this.originalSlave); + return (this.originalSlave.ovaries === 1) ? `This will remove ${his} ovaries as well` : ""; + } + + get invasive() { + return true; + } + + apply(cheat) { + surgeryAmp(this._slave, "vagina"); + return this._assemble(new App.Medicine.Surgery.Reactions.VaginaRemoval()); + } +}; diff --git a/js/medicine/surgery/genitials/vasectomy.js b/js/medicine/surgery/genitials/vasectomy.js new file mode 100644 index 0000000000000000000000000000000000000000..469a68f9049592d38a4edb06c0a98f323cc1c311 --- /dev/null +++ b/js/medicine/surgery/genitials/vasectomy.js @@ -0,0 +1,61 @@ +App.Medicine.Surgery.Reactions.Vasectomy = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, His, his} = getPronouns(slave); + const r = []; + + r.push(`${His} groin is a little sore, and ${he} examines it closely, but ${he} can't find much difference. ${He} likely won't realize what happened${(slave.ballType === "sterile") ? ` given that ${he} couldn't get girls pregnant in the first place` : `, but may piece things together when ${he} realizes the girls ${he} fucks never get pregnant`}. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Reactions.VasectomyUndo = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, he, His, his} = getPronouns(slave); + const r = []; + + r.push(`${His} groin is a little sore, and ${he} examines it closely, but ${he} can't find much difference. ${He} likely won't ever realize what happened`); + if (slave.ballType === "sterile") { + r.push(`since ${his} balls don't work in the first place.`); + } else { + r.push(`until ${he} gets a girl pregnant.`); + } + r.push(`As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.Vasectomy = class extends App.Medicine.Surgery.Procedure { + get name() { + return `Clamp vas deferens ${this.originalSlave.ballType === "sterile" ? "" : "to cull potency"}`; + } + + get healthCost() { + return 10; + } + + apply(cheat) { + this._slave.vasectomy = 1; + return this._assemble(new App.Medicine.Surgery.Reactions.Vasectomy()); + } +}; + +App.Medicine.Surgery.Procedures.VasectomyUndo = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Reverse vasectomy"; + } + + get healthCost() { + return 10; + } + + apply(cheat) { + this._slave.vasectomy = 0; + return this._assemble(new App.Medicine.Surgery.Reactions.VasectomyUndo()); + } +}; diff --git a/src/npc/interaction/slaveOnSlaveFeeding/fSlaveFeed.js b/src/npc/interaction/slaveOnSlaveFeeding/fSlaveFeed.js index c4a00309ea001e1a9d9c725596b6d90fbef62d06..9cc0c477313a4bd605908494a433a3783e9f114e 100644 --- a/src/npc/interaction/slaveOnSlaveFeeding/fSlaveFeed.js +++ b/src/npc/interaction/slaveOnSlaveFeeding/fSlaveFeed.js @@ -10,7 +10,7 @@ globalThis.FSlaveFeed = function(slave, milkTap) { his2, he2, him2, himself2, wife2 } = getPronouns(milkTap).appendSuffix("2"); let incestGive; - let incestTake; + let incestTake;s let r = []; const relative = relativeTerm(slave, milkTap); const relative2 = relativeTerm(milkTap, slave);