diff --git a/src/facilities/surgery/surgeryPassageFaceAndHair.js b/src/facilities/surgery/surgeryPassageFaceAndHair.js index 5b34595a01eedbb23dc4017ca641406969a1ad15..79114e668421b851f7b58ba5758458393de87506 100644 --- a/src/facilities/surgery/surgeryPassageFaceAndHair.js +++ b/src/facilities/surgery/surgeryPassageFaceAndHair.js @@ -11,180 +11,153 @@ App.UI.surgeryPassageHairAndFace = function(slave, cheat = false) { return container; function content() { - const el = new DocumentFragment(); + const frag = new DocumentFragment(); const _pubertyAge = Math.min(slave.pubertyAgeXX, slave.pubertyAgeXY); const { His, He, his, him } = getPronouns(slave); - /** @type {HTMLAnchorElement[]} */ - let linkArray; + const _artificiality = 25 - (5 * Math.trunc(V.PC.skill.medicine / 50)) - (5 * V.surgeryUpgrade); - App.Events.drawEventArt(el, slave); - App.UI.DOM.appendNewElement("h3", el, `Hair:`); - let r = []; + App.Events.drawEventArt(frag, slave); + App.UI.DOM.appendNewElement("h3", frag, `Hair:`); + frag.append( + mainHair(), eyebrows(), armpitHair() + ); - // Main Hair - if (slave.bald === 0 && slave.hStyle !== "bald") { - App.UI.DOM.appendNewElement("div", el, `${He} naturally grows ${slave.origHColor} hair from ${his} head.`); - if (slave.indentureRestrictions > 1) { - App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]); + App.UI.DOM.appendNewElement("h3", frag, `Face:`); + frag.append( + faceShape(), eyes(), ears(), topEars(), hearing(), horns(), lips(), teeth(), voice(), chemosensory() + ); + + return frag; + + function mainHair() { + const el = new DocumentFragment(); + if (slave.bald === 0 && slave.hStyle !== "bald") { + App.UI.DOM.appendNewElement("div", el, `${He} naturally grows ${slave.origHColor} hair from ${his} head.`); + if (slave.indentureRestrictions > 1) { + App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]); + } else { + App.UI.DOM.appendNewElement("div", el, + makeLink( + `Surgically remove ${his} ability to grow hair`, + "hair removal", + () => { slave.bald = 1; }), + "choices"); + } } else { - App.UI.DOM.appendNewElement("div", el, - makeLink( - `Surgically remove ${his} ability to grow hair`, - "hair removal", - () => { slave.bald = 1; }), - "choices"); + App.UI.DOM.appendNewElement("div", el, `${He} is no longer capable of growing hair on ${his} head.`); } - } else { - App.UI.DOM.appendNewElement("div", el, `${He} is no longer capable of growing hair on ${his} head.`); + return el; } - // Eyebrows - if (slave.eyebrowHStyle !== "bald") { - App.UI.DOM.appendNewElement("div", el, `${He} has ${slave.origHColor} eyebrows.`); - if (slave.indentureRestrictions > 1) { - App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]); + function eyebrows() { + const el = new DocumentFragment(); + if (slave.eyebrowHStyle !== "bald") { + App.UI.DOM.appendNewElement("div", el, `${He} has ${slave.origHColor} eyebrows.`); + if (slave.indentureRestrictions > 1) { + App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]); + } else { + App.UI.DOM.appendNewElement("div", el, + makeLink( + `Surgically remove ${his} ability to grow eyebrows`, + "eyebrow removal" + ), + "choices"); + } } else { - App.UI.DOM.appendNewElement("div", el, - makeLink( - `Surgically remove ${his} ability to grow eyebrows`, - "eyebrow removal" - ), - "choices"); + App.UI.DOM.appendNewElement("div", el, `${He} is no longer capable of growing eyebrow hair.`); } - } else { - App.UI.DOM.appendNewElement("div", el, `${He} is no longer capable of growing eyebrow hair.`); + return el; } - // Armpit hair - r = []; - if ((slave.underArmHStyle !== "bald" && slave.underArmHStyle !== "hairless") || (slave.pubicHStyle !== "bald" && slave.pubicHStyle !== "hairless")) { - r.push(`${He}`); - if (slave.physicalAge >= _pubertyAge) { - r.push(`naturally grows`); - } else if (slave.physicalAge >= _pubertyAge - 1) { - r.push(`is beginning to grow`); - } else { - r.push(`will someday grow`); - } - r.push(`${slave.origHColor} body hair.`); - App.Events.addNode(el, r, "div"); - if (slave.indentureRestrictions > 1) { - App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]); - } else { - App.UI.DOM.appendNewElement("div", el, - makeLink( - `Surgically remove ${his} ability to grow body hair`, - "body hair removal", - ), - "note"); - } - } else { - r.push(`${His} ${slave.skin} skin is silky smooth and hair free from ${his} neck to ${his}`); - if (!hasAnyLegs(slave)) { - r.push(`hips.`); + function armpitHair() { + const el = new DocumentFragment(); + const r = []; + if ((slave.underArmHStyle !== "bald" && slave.underArmHStyle !== "hairless") || (slave.pubicHStyle !== "bald" && slave.pubicHStyle !== "hairless")) { + r.push(`${He}`); + if (slave.physicalAge >= _pubertyAge) { + r.push(`naturally grows`); + } else if (slave.physicalAge >= _pubertyAge - 1) { + r.push(`is beginning to grow`); + } else { + r.push(`will someday grow`); + } + r.push(`${slave.origHColor} body hair.`); + App.Events.addNode(el, r, "div"); + if (slave.indentureRestrictions > 1) { + App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]); + } else { + App.UI.DOM.appendNewElement("div", el, + makeLink( + `Surgically remove ${his} ability to grow body hair`, + "body hair removal", + ), + "note"); + } } else { - r.push(`toes.`); + r.push(`${His} ${slave.skin} skin is silky smooth and hair free from ${his} neck to ${his}`); + if (!hasAnyLegs(slave)) { + r.push(`hips.`); + } else { + r.push(`toes.`); + } + App.Events.addNode(el, r, "div"); } - App.Events.addNode(el, r, "div"); - } - - App.UI.DOM.appendNewElement("h3", el, `Face:`); - const _artificiality = 25 - (5 * Math.trunc(V.PC.skill.medicine / 50)) - (5 * V.surgeryUpgrade); - r = []; - r.push(`${His} ${slave.faceShape} face is`); - const faceDiv = App.UI.DOM.appendNewElement("div", el); - if (slave.face < -95) { - r.push(`very ugly.`); - } else if (slave.face < -40) { - r.push(`ugly.`); - } else if (slave.face < -10) { - r.push(`unattractive.`); - } else if (slave.face <= 10) { - r.push(`quite average.`); - } else if (slave.face <= 40) { - r.push(`attractive.`); - } else if (slave.face <= 95) { - r.push(`beautiful.`); - } else if (slave.face > 95) { - r.push(`very beautiful.`); + return el; } - if (slave.faceImplant === 0) { - r.push(`It is entirely natural.`); - } else if (slave.faceImplant > 5) { - r.push(`It has seen some work.`); - } else if (slave.faceImplant > 30) { - r.push(`It has been totally reworked.`); - } - App.Events.addNode(faceDiv, r, "div"); + function faceShape() { + const el = new DocumentFragment(); + let r = []; + r.push(`${His} ${slave.faceShape} face is`); + const faceDiv = App.UI.DOM.appendNewElement("div", el); + if (slave.face < -95) { + r.push(`very ugly.`); + } else if (slave.face < -40) { + r.push(`ugly.`); + } else if (slave.face < -10) { + r.push(`unattractive.`); + } else if (slave.face <= 10) { + r.push(`quite average.`); + } else if (slave.face <= 40) { + r.push(`attractive.`); + } else if (slave.face <= 95) { + r.push(`beautiful.`); + } else if (slave.face > 95) { + r.push(`very beautiful.`); + } - if (slave.indentureRestrictions > 1) { - App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]); - } else if (slave.faceImplant > 95) { - App.UI.DOM.appendNewElement("div", el, `${His} face cannot sustain further cosmetic surgery`, ["choices", "note"]); - } else { - linkArray = []; - if (slave.faceShape !== "normal") { - linkArray.push(makeLink( - `Make conventionally feminine`, - "face", - () => { - slave.faceShape = "normal"; - slave.faceImplant = Math.clamp(slave.faceImplant + _artificiality, 0, 100); - surgeryDamage(slave, 10); - } - )); + if (slave.faceImplant === 0) { + r.push(`It is entirely natural.`); + } else if (slave.faceImplant > 5) { + r.push(`It has seen some work.`); + } else if (slave.faceImplant > 30) { + r.push(`It has been totally reworked.`); } - if (slave.faceShape === "masculine") { - linkArray.push(makeLink( - `Soften to androgynous`, - "face", - () => { - slave.faceShape = "androgynous"; - slave.faceImplant = Math.clamp(slave.faceImplant + _artificiality, 0, 100); - surgeryDamage(slave, 10); - } - )); + App.Events.addNode(faceDiv, r, "div"); + + if (slave.indentureRestrictions > 1) { + App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]); + } else if (slave.faceImplant > 95) { + App.UI.DOM.appendNewElement("div", el, `${His} face cannot sustain further cosmetic surgery`, ["choices", "note"]); } else { - if (slave.faceShape !== "cute") { - linkArray.push(makeLink( - `Cute`, - "face", - () => { - slave.faceShape = "cute"; - slave.faceImplant = Math.clamp(slave.faceImplant + _artificiality, 0, 100); - surgeryDamage(slave, 10); - } - )); - } - if (slave.faceShape !== "exotic") { - linkArray.push(makeLink( - `Exotic`, - "face", - () => { - slave.faceShape = "exotic"; - slave.faceImplant = Math.clamp(slave.faceImplant + _artificiality, 0, 100); - surgeryDamage(slave, 10); - } - )); - } - if (slave.faceShape !== "sensual") { + const linkArray = []; + if (slave.faceShape !== "normal") { linkArray.push(makeLink( - `Sensual`, + `Make conventionally feminine`, "face", () => { - slave.faceShape = "sensual"; + slave.faceShape = "normal"; slave.faceImplant = Math.clamp(slave.faceImplant + _artificiality, 0, 100); surgeryDamage(slave, 10); } )); } - if (slave.faceShape !== "androgynous") { + if (slave.faceShape === "masculine") { linkArray.push(makeLink( - `Androgynous`, + `Soften to androgynous`, "face", () => { slave.faceShape = "androgynous"; @@ -193,1020 +166,1093 @@ App.UI.surgeryPassageHairAndFace = function(slave, cheat = false) { } )); } else { - linkArray.push(makeLink( - `Masculine`, - "face", - () => { - slave.faceShape = "masculine"; - slave.faceImplant = Math.clamp(slave.faceImplant + _artificiality, 0, 100); - surgeryDamage(slave, 10); - } - )); - } - } - linkArray.push(makeLink( - `Just improve attractiveness`, - "face", - () => { - slave.faceImplant = Math.clamp(slave.faceImplant + _artificiality, 0, 100); - surgeryDamage(slave, 10); + if (slave.faceShape !== "cute") { + linkArray.push(makeLink( + `Cute`, + "face", + () => { + slave.faceShape = "cute"; + slave.faceImplant = Math.clamp(slave.faceImplant + _artificiality, 0, 100); + surgeryDamage(slave, 10); + } + )); + } + if (slave.faceShape !== "exotic") { + linkArray.push(makeLink( + `Exotic`, + "face", + () => { + slave.faceShape = "exotic"; + slave.faceImplant = Math.clamp(slave.faceImplant + _artificiality, 0, 100); + surgeryDamage(slave, 10); + } + )); + } + if (slave.faceShape !== "sensual") { + linkArray.push(makeLink( + `Sensual`, + "face", + () => { + slave.faceShape = "sensual"; + slave.faceImplant = Math.clamp(slave.faceImplant + _artificiality, 0, 100); + surgeryDamage(slave, 10); + } + )); + } + if (slave.faceShape !== "androgynous") { + linkArray.push(makeLink( + `Androgynous`, + "face", + () => { + slave.faceShape = "androgynous"; + slave.faceImplant = Math.clamp(slave.faceImplant + _artificiality, 0, 100); + surgeryDamage(slave, 10); + } + )); + } else { + linkArray.push(makeLink( + `Masculine`, + "face", + () => { + slave.faceShape = "masculine"; + slave.faceImplant = Math.clamp(slave.faceImplant + _artificiality, 0, 100); + surgeryDamage(slave, 10); + } + )); + } } - )); - App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices"); - r = []; - r.push(`Facial surgery can either rework it and improve its attractiveness, or simply make it more attractive. No facial surgery is perfect and each surgery will make it look less natural.`); - if (V.PC.skill.medicine >= 100 && V.surgeryUpgrade) { - r.push(`Your surgical skills and the advanced surgical suite will minimize this effect as much as possible.`); - } else if (V.PC.skill.medicine >= 100) { - r.push(`Your surgical skills will reduce this effect.`); - } else if (V.surgeryUpgrade) { - r.push(`The advanced surgical suite will reduce this effect.`); - } - if (slave.faceImplant + _artificiality > 95) { - r.push(App.UI.DOM.makeElement("span", `${(slave.faceImplant !== 0) ? `Further facial` : `Facial`} surgery will create a severe uncanny valley effect.`, "yellow")); - } else if (slave.faceImplant + _artificiality > 60 && slave.faceImplant <= 60) { - r.push(App.UI.DOM.makeElement("span", `${(slave.faceImplant !== 0) ? `Further facial` : `Facial`}surgery will be extremely obvious.`, "yellow")); - } else if (slave.faceImplant + _artificiality > 30 && slave.faceImplant <= 30) { - r.push(App.UI.DOM.makeElement("span", `${(slave.faceImplant !== 0) ? `Further facial` : `Facial`} surgery will eliminate a natural appearance.`, "yellow")); - } else if (slave.faceImplant + _artificiality > 10 && slave.faceImplant <= 10) { - r.push(App.UI.DOM.makeElement("span", `${(slave.faceImplant !== 0) ? `Further facial` : `Facial`} surgery will disturb a perfectly natural appearance.`, "yellow")); - } else { - r.push(`A single facial surgery is not projected to significantly impact artificiality.`); - } - App.Events.addNode(faceDiv, r, "span", "note"); - } - - if (slave.indentureRestrictions < 2 && slave.faceImplant <= 95) { - if (slave.ageImplant > 1) { - App.UI.DOM.appendNewElement("div", el, `${He}'s had a multiple facelifts and other cosmetic procedures in an effort to preserve ${his} youth.`); - } else if ((slave.ageImplant > 0)) { - App.UI.DOM.appendNewElement("div", el, `${He}'s had a face lift and other minor cosmetic procedures to make ${him} look younger.`); - } else if ((slave.physicalAge >= 25) && (slave.visualAge >= 25)) { - App.UI.DOM.appendNewElement("div", el, `${He}'s old enough that a face lift and other minor cosmetic procedures could make ${him} look younger.`); - App.UI.DOM.appendNewElement("div", el, makeLink( - "Age lift", - "age", + linkArray.push(makeLink( + `Just improve attractiveness`, + "face", () => { - applyAgeImplant(slave); - slave.faceImplant = Math.clamp(slave.faceImplant + _artificiality, 0, 100); cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave); + slave.faceImplant = Math.clamp(slave.faceImplant + _artificiality, 0, 100); surgeryDamage(slave, 10); } - ), "choices"); - } - } - - /* Eyes*/ - App.UI.DOM.appendNewElement("div", el, `${He} has ${App.Desc.eyesType(slave)}${(hasAnyEyes(slave)) ? `, they are ${App.Desc.eyesVision(slave)}` : ``}.`); - /* eye blur and fix */ - if (hasAnyEyes(slave)) { - /* Blur eyes*/ - if (slave.indentureRestrictions > 1) { - App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]); - } else { - linkArray = []; - if (getLeftEyeVision(slave) === 2 && getLeftEyeType(slave) === 1) { - linkArray.push(makeLink( - "Blur left eye", - "eyeBlur", - () => { - eyeSurgery(slave, "left", "blur"); - surgeryDamage(slave, 5); - } - )); + )); + App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices"); + r = []; + r.push(`Facial surgery can either rework it and improve its attractiveness, or simply make it more attractive. No facial surgery is perfect and each surgery will make it look less natural.`); + if (V.PC.skill.medicine >= 100 && V.surgeryUpgrade) { + r.push(`Your surgical skills and the advanced surgical suite will minimize this effect as much as possible.`); + } else if (V.PC.skill.medicine >= 100) { + r.push(`Your surgical skills will reduce this effect.`); + } else if (V.surgeryUpgrade) { + r.push(`The advanced surgical suite will reduce this effect.`); } - if (getRightEyeVision(slave) === 2 && getRightEyeType(slave) === 1) { - linkArray.push(makeLink( - "Blur right eye", - "eyeBlur", - () => { - eyeSurgery(slave, "right", "blur"); - surgeryDamage(slave, 5); - } - )); + if (slave.faceImplant + _artificiality > 95) { + r.push(App.UI.DOM.makeElement("span", `${(slave.faceImplant !== 0) ? `Further facial` : `Facial`} surgery will create a severe uncanny valley effect.`, "yellow")); + } else if (slave.faceImplant + _artificiality > 60 && slave.faceImplant <= 60) { + r.push(App.UI.DOM.makeElement("span", `${(slave.faceImplant !== 0) ? `Further facial` : `Facial`}surgery will be extremely obvious.`, "yellow")); + } else if (slave.faceImplant + _artificiality > 30 && slave.faceImplant <= 30) { + r.push(App.UI.DOM.makeElement("span", `${(slave.faceImplant !== 0) ? `Further facial` : `Facial`} surgery will eliminate a natural appearance.`, "yellow")); + } else if (slave.faceImplant + _artificiality > 10 && slave.faceImplant <= 10) { + r.push(App.UI.DOM.makeElement("span", `${(slave.faceImplant !== 0) ? `Further facial` : `Facial`} surgery will disturb a perfectly natural appearance.`, "yellow")); + } else { + r.push(`A single facial surgery is not projected to significantly impact artificiality.`); } - if (linkArray.length === 2) { - linkArray.push(makeLink( - "Blur both eyes", - "eyeBlur", + App.Events.addNode(faceDiv, r, "span", "note"); + } + + if (slave.indentureRestrictions < 2 && slave.faceImplant <= 95) { + if (slave.ageImplant > 1) { + App.UI.DOM.appendNewElement("div", el, `${He}'s had a multiple facelifts and other cosmetic procedures in an effort to preserve ${his} youth.`); + } else if ((slave.ageImplant > 0)) { + App.UI.DOM.appendNewElement("div", el, `${He}'s had a face lift and other minor cosmetic procedures to make ${him} look younger.`); + } else if ((slave.physicalAge >= 25) && (slave.visualAge >= 25)) { + App.UI.DOM.appendNewElement("div", el, `${He}'s old enough that a face lift and other minor cosmetic procedures could make ${him} look younger.`); + App.UI.DOM.appendNewElement("div", el, makeLink( + "Age lift", + "age", () => { - eyeSurgery(slave, "both", "blur"); - surgeryDamage(slave, 5); + applyAgeImplant(slave); + slave.faceImplant = Math.clamp(slave.faceImplant + _artificiality, 0, 100); cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave); + surgeryDamage(slave, 10); } - )); + ), "choices"); } - App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices"); } + return el; + } - /* Fix eyes */ - linkArray = []; - if (getLeftEyeVision(slave) === 1 && getLeftEyeType(slave) === 1) { - linkArray.push(makeLink( - "Fix left eye", - "eyeFix", - () => { - eyeSurgery(slave, "left", "fix"); - surgeryDamage(slave, 5); + function eyes() { + const el = new DocumentFragment(); + let linkArray; + App.UI.DOM.appendNewElement("div", el, `${He} has ${App.Desc.eyesType(slave)}${(hasAnyEyes(slave)) ? `, they are ${App.Desc.eyesVision(slave)}` : ``}.`); + /* eye blur and fix */ + if (hasAnyEyes(slave)) { + /* Blur eyes*/ + if (slave.indentureRestrictions > 1) { + App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]); + } else { + linkArray = []; + if (getLeftEyeVision(slave) === 2 && getLeftEyeType(slave) === 1) { + linkArray.push(makeLink( + "Blur left eye", + "eyeBlur", + () => { + eyeSurgery(slave, "left", "blur"); + surgeryDamage(slave, 5); + } + )); } - )); - } - if (getRightEyeVision(slave) === 1 && getRightEyeType(slave) === 1) { - linkArray.push(makeLink( - "Fix right eye", - "eyeFix", - () => { - eyeSurgery(slave, "right", "fix"); - surgeryDamage(slave, 5); + if (getRightEyeVision(slave) === 2 && getRightEyeType(slave) === 1) { + linkArray.push(makeLink( + "Blur right eye", + "eyeBlur", + () => { + eyeSurgery(slave, "right", "blur"); + surgeryDamage(slave, 5); + } + )); } - )); - } - if (linkArray.length === 2) { - linkArray.push(makeLink( - "Fix both", - "eyeFix", - () => { - eyeSurgery(slave, "both", "fix"); - surgeryDamage(slave, 5); + if (linkArray.length === 2) { + linkArray.push(makeLink( + "Blur both eyes", + "eyeBlur", + () => { + eyeSurgery(slave, "both", "blur"); + surgeryDamage(slave, 5); + } + )); } - )); - } - App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices"); - } - - if (V.seeExtreme === 1) { - if (slave.indentureRestrictions < 1) { - /* blind */ - linkArray = []; - if (getLeftEyeVision(slave) > 0 && getLeftEyeType(slave) === 1) { - linkArray.push(makeLink( - "Blind left eye", - "blind", - () => { - eyeSurgery(slave, "left", "blind"); - surgeryDamage(slave, 5); - } - )); - } - if (getRightEyeVision(slave) > 0 && getRightEyeType(slave) === 1) { - linkArray.push(makeLink( - "Blind right eye", - "blind", - () => { - eyeSurgery(slave, "right", "blind"); - surgeryDamage(slave, 5); - } - )); - } - if (linkArray.length === 2) { - linkArray.push(makeLink( - "Blind both eyes", - "blind", - () => { - eyeSurgery(slave, "both", "blind"); - surgeryDamage(slave, 5); - } - )); + App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices"); } - App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices"); - /* remove */ + /* Fix eyes */ linkArray = []; - if (hasLeftEye(slave)) { + if (getLeftEyeVision(slave) === 1 && getLeftEyeType(slave) === 1) { linkArray.push(makeLink( - "Remove left eye", - getBestVision(slave) > 0 ? "remove eyes" : "remove blind eyes", + "Fix left eye", + "eyeFix", () => { - eyeSurgery(slave, "left", "remove"); + eyeSurgery(slave, "left", "fix"); surgeryDamage(slave, 5); } )); } - if (hasRightEye(slave)) { + if (getRightEyeVision(slave) === 1 && getRightEyeType(slave) === 1) { linkArray.push(makeLink( - "Remove right eye", - getBestVision(slave) > 0 ? "remove eyes" : "remove blind eyes", + "Fix right eye", + "eyeFix", () => { - eyeSurgery(slave, "right", "remove"); + eyeSurgery(slave, "right", "fix"); surgeryDamage(slave, 5); } )); } if (linkArray.length === 2) { linkArray.push(makeLink( - "Remove both eyes", - getBestVision(slave) > 0 ? "remove eyes" : "remove blind eyes", + "Fix both", + "eyeFix", () => { - eyeSurgery(slave, "both", "remove"); + eyeSurgery(slave, "both", "fix"); surgeryDamage(slave, 5); } )); } App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices"); - /* implant */ - if (isProstheticAvailable(slave, "ocular")) { + } + + if (V.seeExtreme === 1) { + if (slave.indentureRestrictions < 1) { + /* blind */ linkArray = []; - if (!hasLeftEye(slave)) { + if (getLeftEyeVision(slave) > 0 && getLeftEyeType(slave) === 1) { linkArray.push(makeLink( - "Give left eye ocular implant", - getBestVision(slave) > 0 ? "ocular implant" : "ocular implant for blind", + "Blind left eye", + "blind", () => { - eyeSurgery(slave, "left", "cybernetic"); + eyeSurgery(slave, "left", "blind"); surgeryDamage(slave, 5); } )); } - if (!hasRightEye(slave)) { + if (getRightEyeVision(slave) > 0 && getRightEyeType(slave) === 1) { linkArray.push(makeLink( - "Give right eye ocular implant", - getBestVision(slave) > 0 ? "ocular implant" : "ocular implant for blind", + "Blind right eye", + "blind", () => { - eyeSurgery(slave, "right", "cybernetic"); + eyeSurgery(slave, "right", "blind"); surgeryDamage(slave, 5); } )); } if (linkArray.length === 2) { linkArray.push(makeLink( - "Give both eyes ocular implants", - getBestVision(slave) > 0 ? "ocular implant" : "ocular implant for blind", + "Blind both eyes", + "blind", () => { - eyeSurgery(slave, "both", "cybernetic"); + eyeSurgery(slave, "both", "blind"); surgeryDamage(slave, 5); } )); } App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices"); - } - } - } - /* Regular ears*/ - r = []; - linkArray = []; - r.push(`${He} has`); - if (slave.earShape === "normal") { - r.push(`normal ears.`); - } else if (slave.earShape === "damaged") { - r.push(`damaged ears.`); - linkArray.push(makeLink( - "Repair", - "earRestore", - () => { - slave.earShape = "normal"; - surgeryDamage(slave, 10); + /* remove */ + linkArray = []; + if (hasLeftEye(slave)) { + linkArray.push(makeLink( + "Remove left eye", + getBestVision(slave) > 0 ? "remove eyes" : "remove blind eyes", + () => { + eyeSurgery(slave, "left", "remove"); + surgeryDamage(slave, 5); + } + )); + } + if (hasRightEye(slave)) { + linkArray.push(makeLink( + "Remove right eye", + getBestVision(slave) > 0 ? "remove eyes" : "remove blind eyes", + () => { + eyeSurgery(slave, "right", "remove"); + surgeryDamage(slave, 5); + } + )); + } + if (linkArray.length === 2) { + linkArray.push(makeLink( + "Remove both eyes", + getBestVision(slave) > 0 ? "remove eyes" : "remove blind eyes", + () => { + eyeSurgery(slave, "both", "remove"); + surgeryDamage(slave, 5); + } + )); + } + App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices"); + /* implant */ + if (isProstheticAvailable(slave, "ocular")) { + linkArray = []; + if (!hasLeftEye(slave)) { + linkArray.push(makeLink( + "Give left eye ocular implant", + getBestVision(slave) > 0 ? "ocular implant" : "ocular implant for blind", + () => { + eyeSurgery(slave, "left", "cybernetic"); + surgeryDamage(slave, 5); + } + )); + } + if (!hasRightEye(slave)) { + linkArray.push(makeLink( + "Give right eye ocular implant", + getBestVision(slave) > 0 ? "ocular implant" : "ocular implant for blind", + () => { + eyeSurgery(slave, "right", "cybernetic"); + surgeryDamage(slave, 5); + } + )); + } + if (linkArray.length === 2) { + linkArray.push(makeLink( + "Give both eyes ocular implants", + getBestVision(slave) > 0 ? "ocular implant" : "ocular implant for blind", + () => { + eyeSurgery(slave, "both", "cybernetic"); + surgeryDamage(slave, 5); + } + )); + } + App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices"); + } } - )); - } else if (slave.earShape === "pointy") { - r.push(`small elfin ears.`); - } else if (slave.earShape === "elven") { - r.push(`long elf ears.`); - } else if (slave.earShape === "ushi") { - r.push(`floppy cow ears.`); - } else if (slave.earShape === "none") { - r.push(`no ears.`); - } else { - r.push(`bugged ears. You done goofed. <span class="note">Report This</span>`); + } + return el; } - App.Events.addNode(el, r, "div"); - if (slave.indentureRestrictions >= 2) { - App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]); - } else { - if (slave.earShape !== "normal" && slave.earShape !== "none") { + function ears() { + const el = new DocumentFragment(); + const r = []; + const linkArray = []; + r.push(`${He} has`); + if (slave.earShape === "normal") { + r.push(`normal ears.`); + } else if (slave.earShape === "damaged") { + r.push(`damaged ears.`); linkArray.push(makeLink( - "Restore to normal", + "Repair", "earRestore", () => { slave.earShape = "normal"; surgeryDamage(slave, 10); } )); + } else if (slave.earShape === "pointy") { + r.push(`small elfin ears.`); + } else if (slave.earShape === "elven") { + r.push(`long elf ears.`); + } else if (slave.earShape === "ushi") { + r.push(`floppy cow ears.`); + } else if (slave.earShape === "none") { + r.push(`no ears.`); + } else { + r.push(`bugged ears. You done goofed. <span class="note">Report This</span>`); } + App.Events.addNode(el, r, "div"); - if (slave.earShape !== "none" && V.seeExtreme === 1 && slave.indentureRestrictions < 1) { - linkArray.push(makeLink( - "Remove them", - "earGone", - () => { - surgeryAmp(slave, "left ear"); - surgeryAmp(slave, "right ear"); - if (slave.hears !== -2 && slave.earImplant !== 1) { - slave.hears = -1; - } - surgeryDamage(slave, 20); - } - )); - } - if (slave.earShape !== "none") { - if (slave.earShape !== "pointy") { + if (slave.indentureRestrictions >= 2) { + App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]); + } else { + if (slave.earShape !== "normal" && slave.earShape !== "none") { linkArray.push(makeLink( - "Reshape into small elfin ears", - "earMinor", + "Restore to normal", + "earRestore", () => { - slave.earShape = "pointy"; + slave.earShape = "normal"; surgeryDamage(slave, 10); } )); } - if (V.surgeryUpgrade === 1) { - if (slave.earShape !== "elven") { - linkArray.push(makeLink( - "Reshape into long elf ears", - "earMajor", - () => { - slave.earShape = "elven"; - surgeryDamage(slave, 10); + + if (slave.earShape !== "none" && V.seeExtreme === 1 && slave.indentureRestrictions < 1) { + linkArray.push(makeLink( + "Remove them", + "earGone", + () => { + surgeryAmp(slave, "left ear"); + surgeryAmp(slave, "right ear"); + if (slave.hears !== -2 && slave.earImplant !== 1) { + slave.hears = -1; } - )); - } - if (slave.earShape !== "ushi") { + surgeryDamage(slave, 20); + } + )); + } + if (slave.earShape !== "none") { + if (slave.earShape !== "pointy") { linkArray.push(makeLink( - "Reshape into bovine ears", - "earMajor", + "Reshape into small elfin ears", + "earMinor", () => { - slave.earShape = "ushi"; + slave.earShape = "pointy"; surgeryDamage(slave, 10); } )); } - } - } + if (V.surgeryUpgrade === 1) { + if (slave.earShape !== "elven") { + linkArray.push(makeLink( + "Reshape into long elf ears", + "earMajor", + () => { + slave.earShape = "elven"; + surgeryDamage(slave, 10); + } + )); + } + if (slave.earShape !== "ushi") { + linkArray.push(makeLink( + "Reshape into bovine ears", + "earMajor", + () => { + slave.earShape = "ushi"; + surgeryDamage(slave, 10); + } + )); + } + } + } + } + App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices"); + return el; } - App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices"); - /* Top ears*/ - r = []; - linkArray = []; - r.push(`${He} has`); - if (slave.earT === "none") { - if (slave.earShape !== "none") { - r.push(`only one set of ears.`); + function topEars() { + const el = new DocumentFragment(); + const r = []; + const linkArray = []; + r.push(`${He} has`); + if (slave.earT === "none") { + if (slave.earShape !== "none") { + r.push(`only one set of ears.`); + } else { + r.push(`no secondary ears.`); + } + } else if (slave.earT === "normal") { + if (slave.earShape !== "none") { + r.push(`a second pair of ears grafted to ${his} head.`); + } else { + r.push(`a pair of ears grafted to the top of ${his} head.`); + } + } else if (slave.earT === "neko") { + r.push(`a pair of cat ears adorning ${his} head.`); + } else if (slave.earT === "inu") { + r.push(`a pair of dog ears adorning ${his} head.`); + } else if (slave.earT === "kit") { + r.push(`a pair of fox ears adorning ${his} head.`); + } else if (slave.earT === "tanuki") { + r.push(`a pair of tanuki ears adorning ${his} head.`); + } else if (slave.earT === "usagi") { + r.push(`a pair of rabbit ears adorning ${his} head.`); } else { - r.push(`no secondary ears.`); + r.push(`You done goofed.`); + r.push(`<span class="note">Report This</span>`); } - } else if (slave.earT === "normal") { - if (slave.earShape !== "none") { - r.push(`a second pair of ears grafted to ${his} head.`); + App.Events.addNode(el, r, "div"); + if (slave.indentureRestrictions >= 2) { + App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]); } else { - r.push(`a pair of ears grafted to the top of ${his} head.`); + if (slave.earT !== "none") { + if (V.seeExtreme === 1 && slave.indentureRestrictions < 1) { + linkArray.push(makeLink( + "Remove them", + "earGone", + () => { + slave.earT = "none"; + surgeryDamage(slave, 20); + } + )); + } + if (slave.earT !== "neko") { + linkArray.push(makeLink( + "Reshape into cat ears", + "earMajor", + () => { + slave.earT = "neko"; + surgeryDamage(slave, 10); + } + )); + } + if (slave.earT !== "inu") { + linkArray.push(makeLink( + "Reshape into dog ears", + "earMajor", + () => { + slave.earT = "inu"; + surgeryDamage(slave, 10); + } + )); + } + if (slave.earT !== "kit") { + linkArray.push(makeLink( + "Reshape into fox ears", + "earMajor", + () => { + slave.earT = "kit"; + surgeryDamage(slave, 10); + } + )); + } + if (slave.earT !== "tanuki") { + linkArray.push(makeLink( + "Reshape into tanuki ears", + "earMajor", + () => { + slave.earT = "tanuki"; + surgeryDamage(slave, 10); + } + )); + } + if (slave.earT !== "usagi") { + linkArray.push(makeLink( + "Reshape into rabbit ears", + "earMajor", + () => { + slave.earT = "usagi"; + surgeryDamage(slave, 10); + } + )); + } + if (slave.earTColor === "hairless") { + r.push(`They are completely bald.`); + linkArray.push(makeLink( + "Implant hair mimicking fibers", + "earMinor", + () => { + slave.earTColor = slave.hColor; + surgeryDamage(slave, 10); + } + )); + } else { + r.push(`They are covered by a multitude of implanted ${slave.earTColor} fibers mimicking hair.`); + linkArray.push(makeLink( + "Remove them", + "earMinor", + () => { + slave.earTColor = "hairless"; + surgeryDamage(slave, 10); + } + )); + } + } + App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices"); } - } else if (slave.earT === "neko") { - r.push(`a pair of cat ears adorning ${his} head.`); - } else if (slave.earT === "inu") { - r.push(`a pair of dog ears adorning ${his} head.`); - } else if (slave.earT === "kit") { - r.push(`a pair of fox ears adorning ${his} head.`); - } else if (slave.earT === "tanuki") { - r.push(`a pair of tanuki ears adorning ${his} head.`); - } else if (slave.earT === "usagi") { - r.push(`a pair of rabbit ears adorning ${his} head.`); - } else { - r.push(`You done goofed.`); - r.push(`<span class="note">Report This</span>`); + return el; } - App.Events.addNode(el, r, "div"); - if (slave.indentureRestrictions >= 2) { - App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]); - } else { - if (slave.earT !== "none") { - if(V.seeExtreme === 1 && slave.indentureRestrictions < 1) { - linkArray.push(makeLink( - "Remove them", - "earGone", - () => { - slave.earT = "none"; - surgeryDamage(slave, 20); - } - )); + + function hearing() { + const el = new DocumentFragment(); + const r = []; + const linkArray = []; + + if (slave.earImplant === 1) { + r.push(`${He} has cochlear implants.`); + } else if (slave.hears <= -2) { + r.push(`${He} is deaf.`); + } else { + r.push(`${He} has working`); + if (slave.hears === -1) { + r.push(`inner ears, but is hearing impaired${(slave.earShape === "none") ? `, likely due to missing the outer structure` : ``}.`); + } else { + r.push(`ears and good hearing.`); } - if (slave.earT !== "neko") { - linkArray.push(makeLink( - "Reshape into cat ears", - "earMajor", - () => { - slave.earT = "neko"; - surgeryDamage(slave, 10); - } - )); + } + App.Events.addNode(el, r, "div"); + + if (slave.earImplant !== 1) { + if (slave.hears === -1) { + if (slave.earImplant !== 1 && slave.earShape !== "none") { + linkArray.push(makeLink( + "Correct hearing", + "earFix", + () => { + slave.hears = 0; + surgeryDamage(slave, 10); + } + )); + } + } else if (slave.hears === 0) { + if (V.seeExtreme === 1 && slave.earImplant !== 1 && slave.indentureRestrictions < 1) { + linkArray.push(makeLink( + "Muffle hearing", + "earMuffle", + () => { + slave.hears = -1; + surgeryDamage(slave, 10); + } + )); + } } - if (slave.earT !== "inu") { + } + + if (V.seeExtreme === 1 && slave.indentureRestrictions < 1) { + if (slave.earImplant === 0) { + if (slave.hears > -2) { + linkArray.push(makeLink( + "Deafen", + "deafen", + () => { + slave.hears = -2; + surgeryDamage(slave, 10); + } + )); + } + if (isProstheticAvailable(slave, "cochlear")) { + linkArray.push(makeLink( + `Give ${him} cochlear implants`, + "cochlear implant", + () => { + slave.earImplant = 1; + surgeryDamage(slave, 20); + } + )); + } + } + } + App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices"); + return el; + } + + function horns() { + const el = new DocumentFragment(); + const r = []; + const linkArray = []; + r.push(`${He} has`); + if (slave.horn === "none") { + r.push(`no horns.`); + } else { + r.push(`${slave.horn}.`); + } + App.Events.addNode(el, r, "div"); + + if (slave.indentureRestrictions >= 2) { + App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]); + } else if (slave.horn === "none") { + if (slave.horn !== "curved succubus horns") { linkArray.push(makeLink( - "Reshape into dog ears", - "earMajor", + "Succubus horns", + "horn", () => { - slave.earT = "inu"; + slave.horn = "curved succubus horns"; + slave.hornColor = "jet black"; surgeryDamage(slave, 10); } )); } - if (slave.earT !== "kit") { + if (slave.horn !== "backswept horns") { linkArray.push(makeLink( - "Reshape into fox ears", - "earMajor", + "Backswept horns", + "horn", () => { - slave.earT = "kit"; + slave.horn = "backswept horns"; + slave.hornColor = "jet black"; surgeryDamage(slave, 10); } )); } - if (slave.earT !== "tanuki") { + if (slave.horn !== "cow horns") { linkArray.push(makeLink( - "Reshape into tanuki ears", - "earMajor", + "Bovine horns", + "horn", () => { - slave.earT = "tanuki"; + slave.horn = "cow horns"; + slave.hornColor = "ivory"; surgeryDamage(slave, 10); } )); } - if (slave.earT !== "usagi") { + if (slave.horn !== "one long oni horn") { linkArray.push(makeLink( - "Reshape into rabbit ears", - "earMajor", + "One oni horn", + "horn", () => { - slave.earT = "usagi"; + slave.horn = "one long oni horn"; + slave.hornColor = slave.skin; surgeryDamage(slave, 10); } )); } - if (slave.earTColor === "hairless") { - r.push(`They are completely bald.`); + if (slave.horn !== "two long oni horns") { linkArray.push(makeLink( - "Implant hair mimicking fibers", - "earMinor", + "Two oni horns", + "horn", () => { - slave.earTColor = slave.hColor; + slave.horn = "two long oni horns"; + slave.hornColor = slave.skin; surgeryDamage(slave, 10); } )); - } else { - r.push(`They are covered by a multitude of implanted ${slave.earTColor} fibers mimicking hair.`); + } + if (slave.horn !== "small horns") { linkArray.push(makeLink( - "Remove them", - "earMinor", + "Small horns", + "horn", () => { - slave.earTColor = "hairless"; + slave.horn = "small horns"; + slave.hornColor = "ivory"; surgeryDamage(slave, 10); } )); } + } else if (slave.horn !== "one long oni horn") { + linkArray.push(makeLink( + "Remove them", + "hornGone", + () => { + surgeryAmp(slave, "horn"); + } + )); + } else { + linkArray.push(makeLink( + "Remove it", + "hornGone", + () => { + surgeryAmp(slave, "horn"); + } + )); } App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices"); + return el; } - /* Hearing*/ - r = []; - if (slave.earImplant === 1) { - r.push(`${He} has cochlear implants.`); - } else if (slave.hears <= -2) { - r.push(`${He} is deaf.`); - } else { - r.push(`${He} has working`); - if (slave.hears === -1) { - r.push(`inner ears, but is hearing impaired${(slave.earShape === "none") ? `, likely due to missing the outer structure`:``}.`); + function lips() { + const el = new DocumentFragment(); + const r = []; + const linkArray = []; + r.push(`${He} has`); + if (slave.lips <= 10) { + r.push(`thin, unattractive lips.`); + } else if (slave.lips <= 20) { + r.push(`normal lips.`); + } else if (slave.lips <= 40) { + r.push(`full, attractive lips.`); + } else if (slave.lips <= 70) { + r.push(`plump, beestung lips.`); + } else if (slave.lips <= 95) { + r.push(`huge, obviously augmented lips.`); } else { - r.push(`ears and good hearing.`); + r.push(`a facepussy: ${his} lips are so huge that they're always a bit parted in the middle, forming a moist, inviting hole for cock.`); } - } - App.Events.addNode(el, r, "div"); + if (slave.lipsImplant > 20) { + r.push(`${He} has enormous lip implants.`); + } else if (slave.lipsImplant > 10) { + r.push(`${He} has large lip implants.`); + } else if (slave.lipsImplant > 0) { + r.push(`${He} has moderate lip implants.`); + } + r.push(App.UI.DOM.makeElement("span", `New implants will reduce ${his} oral skills`, "note")); + App.Events.addNode(el, r, "div"); - linkArray = []; - if (slave.earImplant !== 1) { - if (slave.hears === -1) { - if (slave.earImplant !== 1 && slave.earShape !== "none") { + if (slave.indentureRestrictions >= 2) { + App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]); + } else if ((slave.lips <= 75) || ((slave.lips <= 95) && (V.seeExtreme === 1))) { + if (slave.lipsImplant > 0) { linkArray.push(makeLink( - "Correct hearing", - "earFix", + "Replace with the next size up", + "lips", () => { - slave.hears = 0; + slave.lipsImplant += 20; + slave.lips += 20; surgeryDamage(slave, 10); } )); - } - } else if (slave.hears === 0) { - if (V.seeExtreme === 1 && slave.earImplant !== 1 && slave.indentureRestrictions < 1) { + } else { linkArray.push(makeLink( - "Muffle hearing", - "earMuffle", + "Lip implant", + "lips", () => { - slave.hears = -1; + slave.lipsImplant = 20; + slave.lips += 20; surgeryDamage(slave, 10); } )); } } - } - - if (V.seeExtreme === 1 && slave.indentureRestrictions < 1) { - if (slave.earImplant === 0) { - if (slave.hears > -2) { + if (slave.lipsImplant !== 0) { + if (slave.indentureRestrictions < 2) { linkArray.push(makeLink( - "Deafen", - "deafen", + "Remove lip implants", + "lips", () => { - slave.hears = -2; - surgeryDamage(slave, 10); + surgeryAmp(slave, "lips"); } )); } - if (isProstheticAvailable(slave, "cochlear")) { + } + if (slave.lips >= 10 && slave.lipsImplant === 0) { + if (slave.indentureRestrictions < 2) { linkArray.push(makeLink( - `Give ${him} cochlear implants`, - "cochlear implant", + "Reduce lips", + "lips", () => { - slave.earImplant = 1; - surgeryDamage(slave, 20); + slave.lips -= 10; + surgeryDamage(slave, 10); } )); } } + App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices"); + return el; } - App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices"); - - /* Horns*/ - r = []; - r.push(`${He} has`); - if (slave.horn === "none") { - r.push(`no horns.`); - } else { - r.push(`${slave.horn}.`); - } - App.Events.addNode(el, r, "div"); - - if (slave.indentureRestrictions >= 2) { - App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]); - } else if (slave.horn === "none") { - linkArray = []; - if (slave.horn !== "curved succubus horns") { - linkArray.push(makeLink( - "Succubus horns", - "horn", - () => { - slave.horn = "curved succubus horns"; - slave.hornColor = "jet black"; - surgeryDamage(slave, 10); - } - )); - } - if (slave.horn !== "backswept horns") { - linkArray.push(makeLink( - "Backswept horns", - "horn", - () => { - slave.horn = "backswept horns"; - slave.hornColor = "jet black"; - surgeryDamage(slave, 10); - } - )); - } - if (slave.horn !== "cow horns") { - linkArray.push(makeLink( - "Bovine horns", - "horn", - () => { - slave.horn = "cow horns"; - slave.hornColor = "ivory"; - surgeryDamage(slave, 10); - } - )); - } - if (slave.horn !== "one long oni horn") { - linkArray.push(makeLink( - "One oni horn", - "horn", - () => { - slave.horn = "one long oni horn"; - slave.hornColor = slave.skin; - surgeryDamage(slave, 10); - } - )); - } - if (slave.horn !== "two long oni horns") { - linkArray.push(makeLink( - "Two oni horns", - "horn", - () => { - slave.horn = "two long oni horns"; - slave.hornColor = slave.skin; - surgeryDamage(slave, 10); - } - )); - } - if (slave.horn !== "small horns") { - linkArray.push(makeLink( - "Small horns", - "horn", - () => { - slave.horn = "small horns"; - slave.hornColor = "ivory"; - surgeryDamage(slave, 10); - } - )); - } - } else if (slave.horn !== "one long oni horn") { - linkArray.push(makeLink( - "Remove them", - "hornGone", - () => { - surgeryAmp(slave, "horn"); - } - )); - } else { - linkArray.push(makeLink( - "Remove it", - "hornGone", - () => { - surgeryAmp(slave, "horn"); - } - )); - } - App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices"); - - /* Lips*/ - r = []; - linkArray = []; - r.push(`${He} has`); - if (slave.lips <= 10) { - r.push(`thin, unattractive lips.`); - } else if (slave.lips <= 20) { - r.push(`normal lips.`); - } else if (slave.lips <= 40) { - r.push(`full, attractive lips.`); - } else if (slave.lips <= 70) { - r.push(`plump, beestung lips.`); - } else if (slave.lips <= 95) { - r.push(`huge, obviously augmented lips.`); - } else { - r.push(`a facepussy: ${his} lips are so huge that they're always a bit parted in the middle, forming a moist, inviting hole for cock.`); - } - if (slave.lipsImplant > 20) { - r.push(`${He} has enormous lip implants.`); - } else if (slave.lipsImplant > 10) { - r.push(`${He} has large lip implants.`); - } else if (slave.lipsImplant > 0) { - r.push(`${He} has moderate lip implants.`); - } - r.push(App.UI.DOM.makeElement("span", `New implants will reduce ${his} oral skills`, "note")); - App.Events.addNode(el, r, "div"); - - if (slave.indentureRestrictions >= 2) { - App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]); - } else if ((slave.lips <= 75) || ((slave.lips <= 95) && (V.seeExtreme === 1))) { - if (slave.lipsImplant > 0) { - linkArray.push(makeLink( - "Replace with the next size up", - "lips", - () => { - slave.lipsImplant += 20; - slave.lips += 20; - surgeryDamage(slave, 10); - } - )); - } else { - linkArray.push(makeLink( - "Lip implant", - "lips", - () => { - slave.lipsImplant = 20; - slave.lips += 20; - surgeryDamage(slave, 10); - } - )); - } - } - if (slave.lipsImplant !== 0) { - if (slave.indentureRestrictions < 2) { - linkArray.push(makeLink( - "Remove lip implants", - "lips", - () => { - surgeryAmp(slave, "lips"); - } - )); - } - } - if (slave.lips >= 10 && slave.lipsImplant === 0) { - if (slave.indentureRestrictions < 2) { - linkArray.push(makeLink( - "Reduce lips", - "lips", - () => { - slave.lips -= 10; - surgeryDamage(slave, 10); - } - )); - } - } - App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices"); - /* Teeth*/ - r = []; - linkArray = []; - switch (slave.teeth) { - case "crooked": - r.push(`${He} has crooked teeth.`); - linkArray.push(makeLink( - "Apply braces", - "braces", - () => { - slave.teeth = "straightening braces"; - } - )); - break; - case "gapped": - r.push(`${He} has a noticeable gap in ${his} front teeth.`); - linkArray.push(makeLink( - "Apply braces", - "braces", - () => { - slave.teeth = "straightening braces"; - } - )); - break; - case "straightening braces": - r.push(`${His} crooked teeth are in braces.`); - linkArray.push(makeLink( - "Remove braces", - "oral", - () => { - slave.teeth = "crooked"; - }, - 0 - )); - break; - case "cosmetic braces": - r.push(`${He} has braces on ${his} straight teeth.`); - linkArray.push(makeLink( - "Remove braces", - "oral", - () => { - slave.teeth = "normal"; - }, - 0 - )); - break; - case "removable": - r.push(`${He} has prosthetic teeth that can be removed for extreme oral sex.`); - break; - case "pointy": - r.push(`${His} teeth have been replaced with sturdy, realistic implants that mimic the dentition of a predator.`); - if (V.seeExtreme === 1 && slave.indentureRestrictions < 1) { + function teeth() { + const el = new DocumentFragment(); + const r = []; + const linkArray = []; + switch (slave.teeth) { + case "crooked": + r.push(`${He} has crooked teeth.`); linkArray.push(makeLink( - "Normal dental implants", - "oral", + "Apply braces", + "braces", () => { - slave.teeth = "normal"; - surgeryDamage(slave, 10); + slave.teeth = "straightening braces"; } )); - } - break; - case "fangs": - r.push(`${His} upper canines have been replaced with sturdy, realistic implants that can only be described as vampiric.`); - if (V.seeExtreme === 1 && slave.indentureRestrictions < 1) { + break; + case "gapped": + r.push(`${He} has a noticeable gap in ${his} front teeth.`); linkArray.push(makeLink( - "Remove a fang", - "fang", + "Apply braces", + "braces", () => { - slave.teeth = "fang"; - surgeryDamage(slave, 20); + slave.teeth = "straightening braces"; } )); + break; + case "straightening braces": + r.push(`${His} crooked teeth are in braces.`); linkArray.push(makeLink( - "Normal dental implants", + "Remove braces", "oral", () => { - slave.teeth = "normal"; - surgeryDamage(slave, 10); - } + slave.teeth = "crooked"; + }, + 0 )); - } - break; - case "fang": - r.push(`A single one of ${his} upper canines has been replaced with a sturdy, realistic implant shaped like a fang.`); - if (slave.lips <= 50) { - r.push(`It is occasionally visible over ${his} lower lip.`); - } - if (V.seeExtreme === 1 && slave.indentureRestrictions < 1) { + break; + case "cosmetic braces": + r.push(`${He} has braces on ${his} straight teeth.`); linkArray.push(makeLink( - "Replace them with removable prosthetics", - "teeth", + "Remove braces", + "oral", () => { - slave.teeth = "removable"; - surgeryDamage(slave, 20); - } + slave.teeth = "normal"; + }, + 0 )); + break; + case "removable": + r.push(`${He} has prosthetic teeth that can be removed for extreme oral sex.`); + break; + case "pointy": + r.push(`${His} teeth have been replaced with sturdy, realistic implants that mimic the dentition of a predator.`); + if (V.seeExtreme === 1 && slave.indentureRestrictions < 1) { + linkArray.push(makeLink( + "Normal dental implants", + "oral", + () => { + slave.teeth = "normal"; + surgeryDamage(slave, 10); + } + )); + } + break; + case "fangs": + r.push(`${His} upper canines have been replaced with sturdy, realistic implants that can only be described as vampiric.`); + if (V.seeExtreme === 1 && slave.indentureRestrictions < 1) { + linkArray.push(makeLink( + "Remove a fang", + "fang", + () => { + slave.teeth = "fang"; + surgeryDamage(slave, 20); + } + )); + linkArray.push(makeLink( + "Normal dental implants", + "oral", + () => { + slave.teeth = "normal"; + surgeryDamage(slave, 10); + } + )); + } + break; + case "fang": + r.push(`A single one of ${his} upper canines has been replaced with a sturdy, realistic implant shaped like a fang.`); + if (slave.lips <= 50) { + r.push(`It is occasionally visible over ${his} lower lip.`); + } + if (V.seeExtreme === 1 && slave.indentureRestrictions < 1) { + linkArray.push(makeLink( + "Replace them with removable prosthetics", + "teeth", + () => { + slave.teeth = "removable"; + surgeryDamage(slave, 20); + } + )); + linkArray.push(makeLink( + "Add another fang", + "fangs", + () => { + slave.teeth = "fangs"; + } + )); + linkArray.push(makeLink( + "Normal dental implants", + "oral", + () => { + slave.teeth = "normal"; + surgeryDamage(slave, 10); + } + )); + } + break; + case "baby": + r.push(`${He} has baby teeth.`); + if (V.seeExtreme === 1 && slave.indentureRestrictions < 1) { + linkArray.push(makeLink( + "Normal dental implants", + "oral", + () => { + slave.teeth = "normal"; + surgeryDamage(slave, 10); + } + )); + } + break; + case "mixed": + r.push(`${He} has a mix of baby and normal teeth.`); + break; + default: + r.push(`${He} has normal, healthy teeth.`); linkArray.push(makeLink( - "Add another fang", - "fangs", + "Unnecessary braces", + "braces", () => { - slave.teeth = "fangs"; + slave.teeth = "cosmetic braces"; } )); + if (V.seeExtreme === 1 && slave.indentureRestrictions < 1) { + linkArray.push(makeLink( + "Add a fang", + "fang", + () => { + slave.teeth = "fang"; + } + )); + } + } + if (V.seeExtreme === 1 && slave.indentureRestrictions < 1) { + if (slave.teeth !== "removable") { linkArray.push(makeLink( - "Normal dental implants", - "oral", + "Replace them with removable prosthetics", + "teeth", () => { - slave.teeth = "normal"; - surgeryDamage(slave, 10); + slave.teeth = "removable"; + surgeryDamage(slave, 20); } )); } - break; - case "baby": - r.push(`${He} has baby teeth.`); - if (V.seeExtreme === 1 && slave.indentureRestrictions < 1) { + + if (slave.teeth !== "pointy") { linkArray.push(makeLink( - "Normal dental implants", - "oral", + "Replace them with sharp teeth", + "sharp", () => { - slave.teeth = "normal"; - surgeryDamage(slave, 10); + slave.teeth = "pointy"; + surgeryDamage(slave, 20); } )); } - break; - case "mixed": - r.push(`${He} has a mix of baby and normal teeth.`); - break; - default: - r.push(`${He} has normal, healthy teeth.`); - linkArray.push(makeLink( - "Unnecessary braces", - "braces", - () => { - slave.teeth = "cosmetic braces"; - } - )); - if (V.seeExtreme === 1 && slave.indentureRestrictions < 1) { + + if (slave.teeth !== "fangs" && slave.teeth !== "fang") { linkArray.push(makeLink( - "Add a fang", - "fang", + "Replace them with fangs", + "fangs", () => { - slave.teeth = "fang"; + slave.teeth = "fangs"; + surgeryDamage(slave, 20); } )); } - } - if (V.seeExtreme === 1 && slave.indentureRestrictions < 1) { - if (slave.teeth !== "removable") { - linkArray.push(makeLink( - "Replace them with removable prosthetics", - "teeth", - () => { - slave.teeth = "removable"; - surgeryDamage(slave, 20); - } - )); } + App.Events.addNode(el, r, "div"); + App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices"); + return el; + } - if (slave.teeth !== "pointy") { - linkArray.push(makeLink( - "Replace them with sharp teeth", - "sharp", - () => { - slave.teeth = "pointy"; - surgeryDamage(slave, 20); - } - )); + function voice() { + const el = new DocumentFragment(); + const r = []; + if (slave.electrolarynx === 1) { + r.push(`${He} has an artificial larynx.`); + } else { + if (slave.voice === 0) { + r.push(`${He} is mute.`); + } else if (slave.voice === 1) { + r.push(`${He} has a deep voice.`); + } else if (slave.voice === 2) { + r.push(`${He} has a feminine voice.`); + } else if (slave.voice === 3) { + r.push(`${He} has a high, girly voice.`); + } + if (slave.voiceImplant >= 1) { + r.push(`${He} has had surgery on ${his} voice box to raise ${his} voice.`); + } else if (slave.voiceImplant <= -1) { + r.push(`${He} has had surgery on ${his} voice box to lower ${his} voice.`); + } } - - if (slave.teeth !== "fangs" && slave.teeth !== "fang") { - linkArray.push(makeLink( - "Replace them with fangs", - "fangs", - () => { - slave.teeth = "fangs"; - surgeryDamage(slave, 20); + App.Events.addNode(el, r, "div"); + if (slave.indentureRestrictions < 1 && slave.electrolarynx !== 1) { + const linkArray = []; + if (slave.voice !== 0) { + if (slave.voice < 3) { + linkArray.push(makeLink( + "Perform surgery to raise voice", + "voice", + () => { + slave.voice += 1; + surgeryDamage(slave, 10); + } + )); } - )); + if (slave.voice > 1) { + linkArray.push(makeLink( + "Perform surgery to lower voice", + "voice2", + () => { + slave.voice -= 1; + surgeryDamage(slave, 10); + } + )); + } + if (V.seeExtreme === 1) { + linkArray.push(makeLink( + "Remove vocal cords", + "mute", + () => { + surgeryAmp(slave, "voicebox"); + } + )); + } + } else if (isProstheticAvailable(slave, "electrolarynx")) { + linkArray.push(makeLink( + `Give ${him} an electrolarynx`, + "electrolarynx", + () => { + slave.electrolarynx = 1; + slave.voice = 2; + surgeryDamage(slave, 20); + } + )); + } + App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices"); } + return el; } - App.Events.addNode(el, r, "div"); - App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices"); - /* Voice*/ - r = []; - if (slave.electrolarynx === 1) { - r.push(`${He} has an artificial larynx.`); - } else { - if (slave.voice === 0) { - r.push(`${He} is mute.`); - } else if (slave.voice === 1) { - r.push(`${He} has a deep voice.`); - } else if (slave.voice === 2) { - r.push(`${He} has a feminine voice.`); - } else if (slave.voice === 3) { - r.push(`${He} has a high, girly voice.`); - } - if (slave.voiceImplant >= 1) { - r.push(`${He} has had surgery on ${his} voice box to raise ${his} voice.`); - } else if (slave.voiceImplant <= -1) { - r.push(`${He} has had surgery on ${his} voice box to lower ${his} voice.`); + function chemosensory() { + const el = new DocumentFragment(); + const r = []; + if (slave.smells === 0 && slave.tastes === 0) { + r.push(`${He} has a working chemosensory system.`); + } else if (slave.smells === 0) { + r.push(`${He} has a working olfactory system and an impaired gustatory system.`); + } else if (slave.tastes === 0) { + r.push(`${He} has a working gustatory system and an impaired olfactory system.`); + } else { + r.push(`${He} has an impaired chemosensory system.`); } - } - App.Events.addNode(el, r, "div"); - if (slave.indentureRestrictions < 1 && slave.electrolarynx !== 1) { - linkArray = []; - if (slave.voice !== 0) { - if (slave.voice < 3) { + App.Events.addNode(el, r, "div"); + if (slave.indentureRestrictions < 1) { + const linkArray = []; + if (slave.smells === 0 && V.seeExtreme === 1) { linkArray.push(makeLink( - "Perform surgery to raise voice", - "voice", + "Remove sense of smell", + "desmell", () => { - slave.voice += 1; + slave.smells = -1; surgeryDamage(slave, 10); } )); - } - if (slave.voice > 1) { + } else if (slave.smells === -1) { linkArray.push(makeLink( - "Perform surgery to lower voice", - "voice2", + "Repair sense of smell", + "resmell", () => { - slave.voice -= 1; + slave.smells = 0; surgeryDamage(slave, 10); } )); } - if (V.seeExtreme === 1) { + if (slave.tastes === 0 && V.seeExtreme === 1) { linkArray.push(makeLink( - "Remove vocal cords", - "mute", + "Remove sense of taste", + "detaste", () => { - surgeryAmp(slave, "voicebox"); + slave.smells = -1; + surgeryDamage(slave, 10); + } + )); + } else if (slave.tastes === -1) { + linkArray.push(makeLink( + "Repair sense of taste", + "retaste", + () => { + slave.smells = 0; + surgeryDamage(slave, 10); } )); } - } else if (isProstheticAvailable(slave, "electrolarynx")) { - linkArray.push(makeLink( - `Give ${him} an electrolarynx`, - "electrolarynx", - () => { - slave.electrolarynx = 1; - slave.voice = 2; - surgeryDamage(slave, 20); - } - )); - } - App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices"); - } - - /* Smell*/ - r = []; - if (slave.smells === 0 && slave.tastes === 0) { - r.push(`${He} has a working chemosensory system.`); - } else if (slave.smells === 0) { - r.push(`${He} has a working olfactory system and an impaired gustatory system.`); - } else if (slave.tastes === 0) { - r.push(`${He} has a working gustatory system and an impaired olfactory system.`); - } else { - r.push(`${He} has an impaired chemosensory system.`); - } - App.Events.addNode(el, r, "div"); - if (slave.indentureRestrictions < 1) { - linkArray = []; - if (slave.smells === 0 && V.seeExtreme === 1) { - linkArray.push(makeLink( - "Remove sense of smell", - "desmell", - () => { - slave.smells = -1; - surgeryDamage(slave, 10); - } - )); - } else if (slave.smells === -1) { - linkArray.push(makeLink( - "Repair sense of smell", - "resmell", - () => { - slave.smells = 0; - surgeryDamage(slave, 10); - } - )); - } - if (slave.tastes === 0 && V.seeExtreme === 1) { - linkArray.push(makeLink( - "Remove sense of taste", - "detaste", - () => { - slave.smells = -1; - surgeryDamage(slave, 10); - } - )); - } else if (slave.tastes === -1) { - linkArray.push(makeLink( - "Repair sense of taste", - "retaste", - () => { - slave.smells = 0; - surgeryDamage(slave, 10); - } - )); + App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices"); } - App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices"); + return el; } - - return el; } /**