diff --git a/slave variables documentation - Pregmod.txt b/slave variables documentation - Pregmod.txt index 4bd49fb8953eb04ea8bc460c50f5ee090ffd6706..efc598d180d04457c07a77bb74b3972d33db074e 100644 --- a/slave variables documentation - Pregmod.txt +++ b/slave variables documentation - Pregmod.txt @@ -1474,7 +1474,7 @@ type of kemonomimi ears if any "inu" "kit" "tanuki" -"human" +"normal" earTColor: diff --git a/src/002-config/fc-js-init.js b/src/002-config/fc-js-init.js index 0a927718feb845b3d9a8ff27fb6857fafcce063a..27db52b134934fac831a6d5f4bdd700180d9ed4a 100644 --- a/src/002-config/fc-js-init.js +++ b/src/002-config/fc-js-init.js @@ -36,6 +36,8 @@ App.Facilities = { HGSuite: {} }; App.Medicine = {}; +App.Medicine.OrganFarm = {}; +App.Medicine.OrganFarm.Organs = {}; App.RA = {}; App.SF = {}; App.Corporate = {}; diff --git a/src/004-base/organFarmBase.js b/src/004-base/organFarmBase.js new file mode 100644 index 0000000000000000000000000000000000000000..f38973632a31e9984a8ca14ff3a1c9cfd90c60ea --- /dev/null +++ b/src/004-base/organFarmBase.js @@ -0,0 +1,103 @@ +/* +type (string) !!!--UNIQUE--!!! +name, tooltip (string) +cost (number) +growRequirement (slave) -> bool +time (number) +implantAction[] { + name (string) + requirement (slave) -> bool + errorMessage (slave) -> string + effect (slave) -> () + surgeryType (string) --for surgery Degradation + autoImplant (bool) + autoErrorMessage (slave) -> string +} +dependencies[] (string) --organ types + */ + +App.Medicine.OrganFarm.Organ = class { + /** + * + * @param {string} type + * @param {string} name + * @param {string} tooltip + * @param {number} cost + * @param {number} time + * @param {function(App.Entity.SlaveState):boolean} canGrow + * @param {string[]} dependencies + * @param {App.Medicine.OrganFarm.OrganImplantAction[]} actions + */ + constructor({type: type, name, tooltip= "", cost, time, canGrow = () => true, dependencies = [], actions= []} = {}) { + this.type = type; + this.name = name; + this.tooltip = tooltip; + this.cost = cost; + this.time = time; + /** @type {function(App.Entity.SlaveState):boolean} */ + this.canGrow = canGrow; + /** @type {string[]} */ + this.dependencies = dependencies; + /** @type {App.Medicine.OrganFarm.OrganImplantAction[]} */ + this.implantActions = actions; + + App.Medicine.OrganFarm.Organs[type] = this; + } +}; + +/* +implantAction[] { + name (string) + requirement (slave) -> bool + errorMessage (slave) -> string + effect (slave) -> () + surgeryType (string) --for surgery Degradation + autoImplant (bool) + autoErrorMessage (slave) -> string +} + */ + +App.Medicine.OrganFarm.OrganImplantAction = class { + /** + * @param {string} name + * @param {string} tooltip + * @param {number} healthImpact + * @param {string} surgeryType + * @param {boolean} autoImplant + * @param {function(App.Entity.SlaveState):boolean} canImplant + * @param {function(App.Entity.SlaveState):string} implantError + * @param {function(App.Entity.SlaveState)} implant + */ + constructor({name, tooltip = "", healthImpact, surgeryType, autoImplant = true, canImplant, implantError, implant} = {}) { + this.name = name; + this.tooltip = tooltip; + this.healthImpact = healthImpact; + this.surgeryType = surgeryType; + this.autoImplant = autoImplant; + /** + * True if this action can implant the organ + * @type {function(App.Entity.SlaveState):boolean} + */ + this.canImplant = canImplant; + /** + * Error message if the organ cannot be implanted. + * @type {function(App.Entity.SlaveState):string} + */ + this.implantError = implantError; + /** + * Implant the organ + * @type {function(App.Entity.SlaveState)} + */ + this.implant = implant; + } + + /** + * Error message if the organ cannot be implanted automatically. + * @param {App.Entity.SlaveState} slave + * @returns {string} + */ + autoImplantError(slave) { + return this.implantError(slave); + } + +}; diff --git a/src/gui/css/mainStyleSheet.css b/src/gui/css/mainStyleSheet.css index 0b0d6254b92fceccecfbd03926f4edda4a69c80a..dabe0b08b77d1ae90668886dcf62a56488ff24e1 100644 --- a/src/gui/css/mainStyleSheet.css +++ b/src/gui/css/mainStyleSheet.css @@ -345,13 +345,16 @@ table.corporate td { margin-top: 0.5em; margin-bottom: 1.5em; } +div.organContainer { + display: grid; + grid-template-columns: max-content auto; +} div.tab { margin-left: 20px; } div.indent { text-indent: 2em; } - div.double-indent { text-indent: 4em; -} \ No newline at end of file +} diff --git a/src/js/utilJS.js b/src/js/utilJS.js index b15f8aacceca1f5aea2c30e320a6e04cbdab916c..008044413dee80374e3f15e1139a14c5254b8ff8 100644 --- a/src/js/utilJS.js +++ b/src/js/utilJS.js @@ -3217,3 +3217,63 @@ window.mapIdList = function(list) { } return mappedList; }; + +/** + * Topological sorting algorithm + * https://gist.github.com/shinout/1232505 + * Added keys parameter since it better suits our needs and updated to project code style. + * + * @param {[]} keys + * @param {[[]]} edges: list of edges. each edge forms Array<ID,ID> e.g. [12 , 3] + * @returns Array: topological sorted list of IDs + * @throws Error: in case there is a closed chain. + **/ +App.Utils.topologicalSort = function(keys, edges) { + let nodes = {}; // hash: stringified id of the node => { id: id, afters: list of ids } + let sorted = []; // sorted list of IDs ( returned value ) + let visited = {}; // hash: id of already visited node => true + + const Node = function(id) { + this.id = id; + this.afters = []; + }; + + // 1. build data structures + keys.forEach(key => { + nodes[key] = new Node(key); + }); + + edges.forEach(edge => { + const from = edge[0], to = edge[1]; + if (!nodes[from]) { nodes[from] = new Node(from); } + if (!nodes[to]) { nodes[to] = new Node(to); } + nodes[from].afters.push(to); + }); + + // 2. topological sort + Object.keys(nodes).forEach(function visit(idstr, ancestors) { + let node = nodes[idstr]; + let id = node.id; + + // if already exists, do nothing + if (visited[idstr]) { return; } + + if (!Array.isArray(ancestors)) { ancestors = []; } + + ancestors.push(id); + + visited[idstr] = true; + + node.afters.forEach((afterID) => { + if (ancestors.indexOf(afterID) >= 0) { // if already in ancestors, a closed chain exists. + throw new Error('closed chain : ' + afterID + ' is in ' + id); + } + + visit(afterID.toString(), ancestors.map(v => v)); // recursive call + }); + + sorted.unshift(id); + }); + + return sorted; +}; diff --git a/src/npc/surgery/organFarm.js b/src/npc/surgery/organFarm.js new file mode 100644 index 0000000000000000000000000000000000000000..3a0b8120e0c37432460eb86fdd9b67d1526b14f7 --- /dev/null +++ b/src/npc/surgery/organFarm.js @@ -0,0 +1,183 @@ +/** + * @param {App.Entity.SlaveState} slave + * @param {string} slaveString + * @returns {string} + */ +App.Medicine.OrganFarm.growActions = function(slave, slaveString) { + const organOrder = App.Medicine.OrganFarm.organDisplayOrder; + const O = App.Medicine.OrganFarm.Organs; + + // find already being grown/ready to implant organs + const slaveOrgans = {}; + organOrder.forEach(organ => slaveOrgans[organ] = 0); + V.completedOrgans.forEach(organ => { + if (organ.ID === slave.ID) { + slaveOrgans[organ.type] = -1; + } + }); + V.organs.forEach(organ => { + if (organ.ID === slave.ID) { + slaveOrgans[organ.type] = organ.weeksToCompletion; + } + }); + + function weeksLeft(time) { + if (V.organFarmUpgrade === 1) { + return time; + } else if (V.organFarmUpgrade === 2) { + return Math.ceil(time / 2); + } else { + return Math.ceil(time / 4); + } + } + + const {His, him} = getPronouns(slave); + + // create entries for each organ + let grow = ""; + let wait = []; + for (const organ of organOrder) { + if (slaveOrgans[organ] === 0) { + if (O[organ].canGrow()) { + grow += `<div><<link "${O[organ].name}" "Remote Surgery">><<run App.Medicine.OrganFarm.growOrgan(${slaveString}, "${organ}")>><</link>></div>`; + grow += `<div>//Costs ${cashFormat(O[organ].cost)}${O[organ].tooltip !== "" ? ` and ${O[organ].tooltip}` : ""}.//</div>`; + } + } else if (slaveOrgans[organ] > 0) { + wait.push({ + time: slaveOrgans[organ], + text: `${His} ${O[organ].name.toLowerCase()} will be ready for implantation in ${weeksLeft(slaveOrgans[organ])} weeks.` + }); + } + } + + // put everything in one string + let r = ""; + if (grow !== "") { + // organContainer is defined in mainStyleSheet.css + r += `The fabricator is ready to grow an organ for ${him}. Extract tissue to begin growing:<div class="organContainer">${grow}</div>`; + } + if (wait !== []) { + wait.sort((a, b) => a.time - b.time); + for (let i = 0; i < wait.length; i++) { + r += `<div>${wait[i].text}</div>`; + } + } + + return r; +}; + +App.Medicine.OrganFarm.growOrgan = function(slave, organType) { + const organ = App.Medicine.OrganFarm.Organs[organType]; + + V.organs.push({type: organType, weeksToCompletion: organ.time, ID: slave.ID}); + + cashX(-organ.cost, "slaveSurgery", slave); +}; + +/** + * @param {App.Entity.SlaveState} slave + * @param {string} slaveString + * @returns {string} + */ +App.Medicine.OrganFarm.implantActions = function(slave, slaveString) { + let slaveOrgans = V.completedOrgans.filter(o => o.ID === slave.ID); + if (slaveOrgans.length === 0) { return ""; } + + const F = App.Medicine.OrganFarm; + let r = ""; + + for (const organ of slaveOrgans) { + r += `<div>${F.Organs[organ.type].name}:</div><div>`; + + let anyAction = false; + let lines = []; + for (let i = 0; i < F.Organs[organ.type].implantActions.length; i++) { + const action = F.Organs[organ.type].implantActions[i]; + if (action.canImplant(slave)) { + lines.push(`//${action.tooltip === "" ? "" : `${capFirstChar(action.tooltip)}: `}//[[${action.name}|Surgery Degradation][App.Medicine.OrganFarm.implant(${slaveString}, "${organ.type}", ${i})]]`); + anyAction = true; + break; + } else { + const error = action.implantError(slave); + if (error !== "") { + lines.push(`ERROR: ${error} `); + } + } + } + + for (let i = 0; i < lines.length; i++) { + if (i + 1 < lines.length) { + r += `<div>${lines[i]}</div>`; + } else { + r += `<div>${lines[i]}`; + + if (anyAction) { + r += " | "; + } + + r += `[[Discard|Remote Surgery][App.Medicine.OrganFarm.removeOrgan(${slaveString}, "${organ.type}")]]</div></div>`; + } + } + + } + + return `The fabricator has completed ${slaveOrgans.length} organ(s):<div class="organContainer">${r}</div>`; +}; + +/** + * @param {App.Entity.SlaveState} slave + * @param {string} type + * @param {number} actionIndex + */ +App.Medicine.OrganFarm.implant = function(slave, type, actionIndex) { + const A = App.Medicine.OrganFarm.Organs[type].implantActions[actionIndex]; + + A.implant(slave); + slave.health -= A.healthImpact; + if (V.organFarmUpgrade >= 2) { + slave.chem -= 20; + } + + App.Medicine.OrganFarm.removeOrgan(slave, type); + V.surgeryType = A.surgeryType; +}; + +/** + * @param {App.Entity.SlaveState} slave + * @param {string} type + */ +App.Medicine.OrganFarm.removeOrgan = function(slave, type) { + let organIndex = V.completedOrgans.findIndex(o => (o.ID === slave.ID && o.type === type)); + + if (organIndex !== -1) { + V.completedOrgans.deleteAt(organIndex); + } +}; + +/** + * @param {App.Entity.SlaveState} slave + * @returns {[string]} + */ +App.Medicine.OrganFarm.getSortedOrgans = function(slave) { + const F = App.Medicine.OrganFarm; + const organs = []; + const dependencies = []; + V.completedOrgans.forEach(organ => { + if (organ.ID === slave.ID) { + organs.push(organ.type); + } + }); + organs.forEach(o => { + F.Organs[o].dependencies.forEach(d => { + if (organs.includes(d)) { /* inefficient, is there a better way? */ + dependencies.push([d, o]); + } + }); + }); + try { + return App.Utils.topologicalSort(organs, dependencies); + } catch (e) { // closed loop + console.log(e.message); + return []; + } +}; diff --git a/src/npc/surgery/organs.js b/src/npc/surgery/organs.js new file mode 100644 index 0000000000000000000000000000000000000000..aabcd517f2e111662e45833a0a54953950b96b1f --- /dev/null +++ b/src/npc/surgery/organs.js @@ -0,0 +1,356 @@ +/** + * Organs will usually be displayed in this order. + * If an organ is not part of this array, it will be unreachable. + * + * @type {string[]} + */ +App.Medicine.OrganFarm.organDisplayOrder = ["penis", "testicles", "scrotum", "pigTesticles", "dogTesticles", "horseTesticles", "cowTesticles", "foreskin", "prostate", "ovaries", "asexualReproOvaries", "pigOvaries", "dogOvaries", "horseOvaries", "cowOvaries", "freshOvaries", "leftEye", "rightEye", "ears", "topEars", "cochleae", "voicebox", "mpreg", "mpregPig", "mpregDog", "mpregHorse", "mpregCow"]; + +App.Medicine.OrganFarm.init = function() { + new App.Medicine.OrganFarm.Organ({ + type: "penis", name: "Penis", tooltip: "will add a prostate if one is not already present", cost: 5000, time: 5, + canGrow: () => (V.seeDicks !== 0 || V.makeDicks === 1), + actions: [ + new App.Medicine.OrganFarm.OrganImplantAction({ + name: "Implant", healthImpact: 20, surgeryType: "addDick", + canImplant: slave => (slave.dick <= 0), + implantError: () => "this slave already has a penis", + implant: slave => { + if (slave.prostate === 0) { + slave.prostate = 1; + } + slave.dick = 2; + slave.clit = 0; + slave.foreskin = slave.dick; + } + }) + ] + }); + + new App.Medicine.OrganFarm.Organ({ + type: "foreskin", name: "Foreskin", cost: 2500, time: 5, + actions: [ + new App.Medicine.OrganFarm.OrganImplantAction({ + name: "Graft on", healthImpact: 10, surgeryType: "addForeskin", + canImplant: slave => (slave.foreskin <= 0), + implantError: slave => `This slave already has a ${slave.dick > 0 ? "foreskin" : "clitoral hood"}.`, + implant: slave => { + if (slave.dick > 0) { + slave.foreskin = slave.dick; + } else if (slave.clit > 0) { + slave.foreskin = slave.clit; + } else { + slave.foreskin = 1; + } + } + }) + ] + }); + + new App.Medicine.OrganFarm.Testicles({type: "testicles", name: "Testicles", ballType: "human", animal: false}); + new App.Medicine.OrganFarm.Testicles({type: "pigTesticles", name: "Pig testicles", ballType: "pig", animal: true}); + new App.Medicine.OrganFarm.Testicles({type: "dogTesticles", name: "Dog testicles", ballType: "dog", animal: true}); + new App.Medicine.OrganFarm.Testicles({type: "horseTesticles", name: "Horse testicles", ballType: "horse", animal: true}); + new App.Medicine.OrganFarm.Testicles({type: "cowTesticles", name: "Cow testicles", ballType: "cow", animal: true}); + + new App.Medicine.OrganFarm.Organ({ + type: "scrotum", name: "Scrotum", tooltip: "requires balls for successful implantation", cost: 2500, time: 5, + dependencies: ["testicles", "pigTesticles", "dogTesticles", "horseTesticles", "cowTesticles"], + actions: [ + new App.Medicine.OrganFarm.OrganImplantAction({ + name: "Graft on", healthImpact: 10, surgeryType: "addScrotum", + canImplant: slave => (slave.scrotum <= 0 && slave.balls > 0), + implantError: slave => (slave.scrotum > 0) ? "This slave already has a scrotum." : "This slave lacks the balls necessary to accept a scrotum.", + implant: slave => { + slave.scrotum = slave.balls; + } + }) + ] + }); + + new App.Medicine.OrganFarm.Ovaries({type: "ovaries", name: "Ovaries", eggType: "human", pregData: "human", animal: false}); + new App.Medicine.OrganFarm.Ovaries({type: "pigOvaries", name: "Pig ovaries", eggType: "pig", pregData: "pig", animal: true}); + new App.Medicine.OrganFarm.Ovaries({ + type: "dogOvaries", + name: "Dog ovaries", + eggType: "dog", + pregData: "canineM", + animal: true + }); + new App.Medicine.OrganFarm.Ovaries({ + type: "horseOvaries", + name: "Horse ovaries", + eggType: "horse", + pregData: "equine", + animal: true + }); + new App.Medicine.OrganFarm.Ovaries({type: "cowOvaries", name: "Cow ovaries", eggType: "cow", pregData: "cow", animal: true}); + + new App.Medicine.OrganFarm.AnalWomb({ + type: "mpreg", + name: "Anal womb and ovaries", + eggType: "human", + pregData: "human", + animal: false + }); + new App.Medicine.OrganFarm.AnalWomb({ + type: "mpregPig", + name: "Anal pig womb and ovaries", + eggType: "pig", + pregData: "pig", + animal: true + }); + new App.Medicine.OrganFarm.AnalWomb({ + type: "mpregDog", + name: "Anal dog womb and ovaries", + eggType: "dog", + pregData: "canineM", + animal: true + }); + new App.Medicine.OrganFarm.AnalWomb({ + type: "mpregHorse", + name: "Anal horse womb and ovaries", + eggType: "horse", + pregData: "equine", + animal: true + }); + new App.Medicine.OrganFarm.AnalWomb({ + type: "mpregCow", + name: "Anal cow womb and ovaries", + eggType: "cow", + pregData: "cow", + animal: true + }); + + new App.Medicine.OrganFarm.Organ({ + type: "freshOvaries", name: "Younger Ovaries", + tooltip: "requires a womb for successful implantation", + cost: 10000, time: 10, + canGrow: () => (V.youngerOvaries === 1), + dependencies: ["ovaries", "pigOvaries", "dogOvaries", "horseOvaries", "cowOvaries", "mpreg", "mpregPig", "mpregDog", "mpregHorse", "mpregCow"], + actions: [ + new App.Medicine.OrganFarm.OrganImplantAction({ + name: "Implant", healthImpact: 20, surgeryType: "freshOvaries", + canImplant: s => ((s.mpreg !== 0 || s.ovaries !== 0) && s.bellyImplant === -1 && s.physicalAge < 70), + implantError: s => (s.physicalAge >= 70) ? "This slave's body is too old to handle pregnancy." : "This slave lacks a viable womb.", + implant: s => { + if (s.ovaryAge >= 47) { + s.ovaryAge = 45; + } else { + s.ovaryAge = -2; // It shouldn't matter if this goes negative as it is just a signal for menopause to occur. + } + if (s.preg < 0) { + s.preg = 0; + } + if (s.pubertyXX === 0 && s.physicalAge >= V.fertilityAge) { + if (V.precociousPuberty === 1) { + s.pubertyAgeXX = s.physicalAge + 1; + } else { + s.pubertyXX = 1; + } + } + } + }) + ] + }); + + new App.Medicine.OrganFarm.Organ({ + type: "asexualReproOvaries", name: "Asexual reproduction modification", + tooltip: "requires existing ovaries for successful implantation", + cost: 10000, time: 10, + canGrow: () => (V.asexualReproOvaries === 1), + dependencies: ["ovaries", "pigOvaries", "dogOvaries", "horseOvaries", "cowOvaries", "mpreg", "mpregPig", "mpregDog", "mpregHorse", "mpregCow"], + actions: [ + new App.Medicine.OrganFarm.OrganImplantAction({ + name: "Implant", healthImpact: 20, surgeryType: "asexualReproOvaries", + canImplant: s => (s.mpreg !== 0 || s.ovaries !== 0), + implantError: () => "This slave lacks ovaries.", + implant: s => { + if (s.preg < 0) { + s.preg = 0; + } + s.eggType = "human"; + s.pregData = clone(setup.pregData.human); + if (s.pubertyXX === 0 && s.physicalAge >= V.fertilityAge) { + if (V.precociousPuberty === 1) { + s.pubertyAgeXX = s.physicalAge + 1; + } else { + s.pubertyXX = 1; + } + } + s.ovaImplant = "asexual"; + } + }) + ] + }); + + new App.Medicine.OrganFarm.Organ({ + type: "prostate", name: "Prostate", cost: 5000, time: 5, + actions: [ + new App.Medicine.OrganFarm.OrganImplantAction({ + name: "Implant", healthImpact: 20, surgeryType: "addProstate", + canImplant: s => (s.prostate === 0), + implantError: () => "This slave already has a prostate.", + implant: s => { + s.prostate = 1; + } + }) + ] + }); + + new App.Medicine.OrganFarm.Organ({ + type: "leftEye", name: "Left Eye", cost: 5000, time: 10, + actions: [ + new App.Medicine.OrganFarm.OrganImplantAction({ + name: "Implant", healthImpact: 10, surgeryType: "newEyes", + canImplant: s => (getLeftEyeVision(s) === 0 && getLeftEyeType(s) !== 2), + implantError: () => "Slave has a working left eye.", + implant: s => { + eyeSurgery(s, "left", "normal"); + } + }), + new App.Medicine.OrganFarm.OrganImplantAction({ + name: "Replace", tooltip: "replace the existing ocular implant with an organic eye", + healthImpact: 10, surgeryType: "newEyes", autoImplant: false, + canImplant: s => (getLeftEyeType(s) === 2), + implantError: () => "", + implant: s => { + eyeSurgery(s, "left", "normal"); + } + }) + ] + }); + new App.Medicine.OrganFarm.Organ({ + type: "rightEye", name: "Right Eye", cost: 5000, time: 10, + actions: [ + new App.Medicine.OrganFarm.OrganImplantAction({ + name: "Implant", healthImpact: 10, surgeryType: "newEyes", + canImplant: s => (getRightEyeVision(s) === 0 && getRightEyeType(s) !== 2), + implantError: () => "Slave has a working right eye.", + implant: s => { + eyeSurgery(s, "right", "normal"); + } + }), + new App.Medicine.OrganFarm.OrganImplantAction({ + name: "Replace", tooltip: "replace the existing ocular implant with an organic eye", + healthImpact: 20, surgeryType: "newEyes", autoImplant: false, + canImplant: s => (getRightEyeType(s) === 2), + implantError: () => "", + implant: s => { + eyeSurgery(s, "right", "normal"); + } + }) + ] + }); + + new App.Medicine.OrganFarm.Organ({ + type: "ears", name: "Normal Ears", cost: 1000, time: 2, + actions: [ + new App.Medicine.OrganFarm.OrganImplantAction({ + name: "Attach", healthImpact: 15, surgeryType: "earMinor", + canImplant: s => (s.earShape === "none"), + implantError: () => "This slave already has ears.", + implant: s => { + s.earShape = "normal"; + if (s.hears === -1) { + s.hears = 0; + } + } + }), + new App.Medicine.OrganFarm.OrganImplantAction({ + name: "Replace", tooltip: "replace current ears with normal human ears", + healthImpact: 20, surgeryType: "earMinor", autoImplant: false, + canImplant: s => (s.earShape !== "normal"), + implantError: () => "This slave already has normal ears.", + implant: s => { + s.earShape = "normal"; + } + }) + ] + }); + new App.Medicine.OrganFarm.Organ({ + type: "topEars", name: "Top Ears", cost: 1000, time: 2, + canGrow: () => (V.surgeryUpgrade >= 1), + actions: [ + new App.Medicine.OrganFarm.OrganImplantAction({ + name: "Attach", healthImpact: 10, surgeryType: "earMinor", + canImplant: s => (s.earT === "none"), + implantError: () => "This slave already has ears at the top of the head.", + implant: s => { + s.earT = "normal"; + s.earTColor = "hairless"; + } + }), + new App.Medicine.OrganFarm.OrganImplantAction({ + name: "Replace", tooltip: "replace current top ears with normal ears", + healthImpact: 20, surgeryType: "earMinor", autoImplant: false, + canImplant: s => (s.earT !== "normal"), + implantError: () => "This slave already has normal ears at the top of the head.", + implant: s => { + s.earT = "normal"; + s.earTColor = "hairless"; + } + }) + ] + }); + + new App.Medicine.OrganFarm.Organ({ + type: "cochleae", name: "Cochleae", cost: 8000, time: 6, + actions: [ + new App.Medicine.OrganFarm.OrganImplantAction({ + name: "Implant", healthImpact: 20, surgeryType: "undeafen", + canImplant: s => (s.hears <= -2 && s.earImplant === 0), + implantError: () => "This slave already has working ears.", + implant: s => { + s.hears = 0; + } + }), + new App.Medicine.OrganFarm.OrganImplantAction({ + name: "Replace", tooltip: "remove cochlear implants before implanting organic cochleae", + healthImpact: 20, surgeryType: "newEars", autoImplant: false, + canImplant: s => (s.earImplant === 1), + implantError: () => "", + implant: s => { + s.hears = 0; + s.earImplant = 0; + } + }) + ] + }); + + new App.Medicine.OrganFarm.Organ({ + type: "voicebox", name: "Vocal Cords", cost: 5000, time: 5, + actions: [ + new App.Medicine.OrganFarm.OrganImplantAction({ + name: "Implant", healthImpact: 10, surgeryType: "restoreVoice", + canImplant: s => (s.voice === 0 && s.electrolarynx === 0), + implantError: () => "This slave is not mute.", + implant: s => { + if (s.ovaries === 1 && s.hormoneBalance >= 200) { + s.voice = 3; + } else if (s.balls > 0 || s.hormoneBalance < -20) { + s.voice = 1; + } else { + s.voice = 2; + } + } + }), + new App.Medicine.OrganFarm.OrganImplantAction({ + name: "Replace", tooltip: "remove electrolarynx and implant organic vocal cords", + healthImpact: 20, surgeryType: "newVoice", autoImplant: false, + canImplant: s => (s.electrolarynx === 1), + implantError: () => "", + implant: s => { + s.electrolarynx = 0; + if (s.ovaries === 1 && s.hormoneBalance >= 200) { + s.voice = 3; + } else if (s.balls > 0 || s.hormoneBalance < -20) { + s.voice = 1; + } else { + s.voice = 2; + } + } + }) + ] + }); +}; diff --git a/src/npc/surgery/reproductiveOrgans.js b/src/npc/surgery/reproductiveOrgans.js new file mode 100644 index 0000000000000000000000000000000000000000..321bb7c5ed5dc05f2fabbfba2138c8fbbb1e0cc7 --- /dev/null +++ b/src/npc/surgery/reproductiveOrgans.js @@ -0,0 +1,273 @@ +App.Medicine.OrganFarm.TesticlesImplantAction = class extends App.Medicine.OrganFarm.OrganImplantAction { + /** + * @param {string} name + * @param {string} tooltip + * @param {string} ballType + * @param {boolean} animal + * @param {boolean} autoImplant + * @param {function(App.Entity.SlaveState):boolean} canImplant + * @param {function(App.Entity.SlaveState):string} implantError + * @param {function(App.Entity.SlaveState)} implant + */ + constructor({name, tooltip = "", animal, autoImplant = true, canImplant, implantError, implant} = {}) { + super({ + name: name, + tooltip: tooltip, + healthImpact: 20, + surgeryType: animal ? "addAnimalBalls" : "addBalls", + autoImplant: autoImplant, + canImplant: s => (!this.animal || V.animalTesticles > 0) && canImplant(s), + implantError: s => (this.animal && V.animalTesticles === 0) ? "" : implantError(s), + implant: implant + }); + this.animal = animal; + } +}; + +App.Medicine.OrganFarm.Testicles = class extends App.Medicine.OrganFarm.Organ { + /** + * @param {string} type + * @param {string} name + * @param {string} ballType + * @param {boolean} animal + */ + constructor({type, name, ballType, animal} = {}) { + super({ + type: type, name: name, + tooltip: "will add a prostate if one is not already present; requires a penis for successful implantation", + cost: 5000, time: 10, + canGrow: () => (!this.animal || V.animalTesticles > 0), dependencies: ["penis"], + actions: [ + new App.Medicine.OrganFarm.TesticlesImplantAction({ + name: "Implant", ballType: ballType, animal: animal, + canImplant: slave => (slave.balls <= 0 && slave.dick > 0), + implantError: slave => { + if (slave.dick === 0) { + return "This slave lacks the penis necessary to accept testicles."; + } else { + return "This slave already has testicles."; + } + }, + implant: slave => { + if (slave.prostate === 0) { + slave.prostate = 1; + } + slave.balls = 2; + slave.ballType = this.ballType; + slave.scrotum = 2; + if (slave.pubertyAgeXY === 0) { + if (V.precociousPuberty === 1) { + if (slave.physicalAge >= V.potencyAge) { + slave.pubertyAgeXY = slave.physicalAge + 1; + } + } else { + if (slave.physicalAge >= V.potencyAge) { + slave.pubertyXY = 1; + } + } + } + } + }), + new App.Medicine.OrganFarm.TesticlesImplantAction({ + name: "Implant", + tooltip: "you can forgo standard procedure and implant testicles directly into $his abdomen", + ballType: ballType, animal: animal, surgeryType: "addTesticles", autoImplant: false, + canImplant: slave => (slave.dick === 0 && slave.balls <= 0), + implantError: slave => ((slave.balls > 0) ? "This slave already has testicles." : ""), + implant: slave => { + if (slave.prostate === 0) { + slave.prostate = 1; + } + slave.balls = 2; + slave.ballType = this.ballType; + if (slave.pubertyAgeXY === 0) { + if (V.precociousPuberty === 1) { + if (slave.physicalAge >= V.potencyAge) { + slave.pubertyAgeXY = slave.physicalAge + 1; + } + } else { + if (slave.physicalAge >= V.potencyAge) { + slave.pubertyXY = 1; + } + } + } + } + }), + new App.Medicine.OrganFarm.TesticlesImplantAction({ + name: "Replace", + tooltip: "you can replace the existing testicles with a new pair", + healthImpact: 20, + surgeryType: "addTesticles", + autoImplant: false, + canImplant: slave => (slave.balls > 0 && slave.ballType !== this.ballType), + implantError: slave => (slave.balls > 0 ? `This slave already has ${this.ballType} testicles.` : ""), + implant: slave => { + slave.balls = 2; + slave.ballType = this.ballType; + if (slave.pubertyAgeXY === 0) { + if (V.precociousPuberty === 1) { + if (slave.physicalAge >= V.potencyAge) { + slave.pubertyAgeXY = slave.physicalAge + 1; + } + } else { + if (slave.physicalAge >= V.potencyAge) { + slave.pubertyXY = 1; + } + } + } + } + }) + ] + }); + this.animal = animal; + this.ballType = ballType; + } +}; + +App.Medicine.OrganFarm.OvariesImplantAction = class extends App.Medicine.OrganFarm.OrganImplantAction { + /** + * @param {string} name + * @param {string} tooltip + * @param {boolean} animal + * @param {boolean} autoImplant + * @param {function(App.Entity.SlaveState):boolean} canImplant + * @param {function(App.Entity.SlaveState):string} implantError + * @param {function(App.Entity.SlaveState)} implant + */ + constructor({name, tooltip = "", animal, autoImplant = true, canImplant, implantError, implant} = {}) { + super({ + name: name, tooltip: tooltip, healthImpact: 20, + surgeryType: animal ? "addAnimalOvaries" : "addOvaries", autoImplant: autoImplant, + canImplant: s => (!this.animal || V.animalTesticles > 0) && canImplant(s), + implantError: s => (this.animal && V.animalTesticles === 0) ? "" : implantError(s), + implant: implant + }); + this.animal = animal; + } +}; + +App.Medicine.OrganFarm.Ovaries = class extends App.Medicine.OrganFarm.Organ { + /** + * @param {string} type + * @param {string} name + * @param {string} eggType + * @param {string} pregData + * @param {boolean} animal + */ + constructor({type, name, eggType, pregData, animal} = {}) { + super({ + type: type, name: name, tooltip: "requires a vagina for successful implantation", + cost: 10000, time: 10, + canGrow: () => (!this.animal || V.animalTesticles > 0), + actions: [ + new App.Medicine.OrganFarm.OvariesImplantAction({ + name: "Implant", animal: animal, + canImplant: s => (s.vagina >= 0 && s.ovaries <= 0 && s.mpreg === 0 && s.bellyImplant === -1), + implantError: s => { + if (s.vagina < 0) { return "This slave lacks the vagina necessary to accept ovaries."; } + if (s.ovaries >= 0) { return "This slave already has ovaries."; } + return "This slave's body cavity is filled with another organ."; + }, + implant: s => { + s.ovaries = 1; + s.eggType = this.eggType; + s.preg = 0; + s.pregData = clone(setup.pregData[this.pregData]); + if (s.pubertyXX === 0 && s.physicalAge >= V.fertilityAge) { + if (V.precociousPuberty === 1) { + s.pubertyAgeXX = s.physicalAge + 1; + } else { + s.pubertyXX = 1; + } + } + } + }), + new App.Medicine.OrganFarm.OvariesImplantAction({ + name: "Replace", + tooltip: "you can replace the existing ovaries with a new pair", + animal: animal, + autoImplant: false, + canImplant: s => (s.vagina >= 0 && s.mpreg === 0 && s.bellyImplant === -1 && s.eggType !== this.eggType), + implantError: s => (s.eggType === this.eggType) ? `This slave already has ${s.eggType} ovaries.` : "", + implant: s => { + s.eggType = this.eggType; + s.preg = 0; + s.pregData = clone(setup.pregData[this.pregData]); + if (s.pubertyXX === 0 && s.physicalAge >= V.fertilityAge) { + if (V.precociousPuberty === 1) { + s.pubertyAgeXX = s.physicalAge + 1; + } else { + s.pubertyXX = 1; + } + } + } + }) + ] + }); + this.animal = animal; + this.eggType = eggType; + this.pregData = pregData; + } +}; + +App.Medicine.OrganFarm.AnalWombImplantAction = class extends App.Medicine.OrganFarm.OrganImplantAction { + /** + * @param {string} eggType + * @param {string} pregData + * @param {boolean} animal + */ + constructor({eggType, pregData, animal} = {}) { + super({ + name: "Implant", healthImpact: 40, + surgeryType: "mpreg", + canImplant: s => ((!this.animal || V.animalTesticles > 0) && s.ovaries === 0 && s.vagina <= -1 && s.mpreg === 0 && s.bellyImplant < 0), + implantError: s => { + if (this.animal && V.animalTesticles === 0) { return ""; } + if (s.bellyImplant >= 0) {return "This slave has a fillable abdominal implant."; } + return "This slave has existing reproductive Organs."; + }, + implant: s => { + s.mpreg = 1; + s.eggType = this.eggType; + s.preg = 0; + s.pregData = clone(setup.pregData[this.pregData]); + if (s.pubertyXX === 0 && s.physicalAge >= V.fertilityAge) { + if (V.precociousPuberty === 1) { + s.pubertyAgeXX = s.physicalAge + 1; + } else { + s.pubertyXX = 1; + } + } + } + }); + this.animal = animal; + this.eggType = eggType; + this.pregData = pregData; + } +}; + +App.Medicine.OrganFarm.AnalWomb = class extends App.Medicine.OrganFarm.Organ { + /** + * @param {string} type + * @param {string} name + * @param {string} eggType + * @param {string} pregData + * @param {boolean} animal + */ + constructor({type, name, eggType, pregData, animal} = {}) { + super({ + type: type, name: name, + tooltip: "the slave must not have female reproductive organs for successful implantation", + cost: 20000, time: 10, + canGrow: () => (V.arcologies[0].FSGenderRadicalistResearch === 1 && (!this.animal || V.animalMpreg > 0)), + actions: [ + new App.Medicine.OrganFarm.AnalWombImplantAction({ + eggType: eggType, + pregData: pregData, + animal: animal + }) + ] + }); + this.animal = animal; + } +}; diff --git a/src/pregmod/organFarmOptions.tw b/src/pregmod/organFarmOptions.tw deleted file mode 100644 index 93e569fa714402ec571e0304bb5dfb478bf1ebf0..0000000000000000000000000000000000000000 --- a/src/pregmod/organFarmOptions.tw +++ /dev/null @@ -1,2571 +0,0 @@ -:: organFarmOptions [nobr] - -<<set _newOrgan = {type: "0", weeksToCompletion: "0", ID: 0}>> -<<set $slaveOrgans = { - penis: 0, - testicles: 0, - scrotum: 0, - pigTesticles: 0, - dogTesticles: 0, - horseTesticles: 0, - cowTesticles: 0, - foreskin: 0, - ovaries: 0, - freshOvaries: 0, - asexualReproOvaries: 0, - prostate: 0, - pigOvaries: 0, - dogOvaries: 0, - horseOvaries: 0, - cowOvaries: 0, - eyes: 0, - ears: 0, - cochleae: 0, - voicebox: 0, - mpreg: 0, - mpregPig: 0, - mpregDog: 0, - mpregHorse: 0, - mpregCow: 0}>> -<<for _i = 0; _i < $organs.length; _i++>> - <<if $activeSlave.ID == $organs[_i].ID>> - <<if $organs[_i].type == "penis">> - <<set $slaveOrgans.penis = 1>> - <<elseif $organs[_i].type == "testicles">> - <<set $slaveOrgans.testicles = 1>> - <<elseif $organs[_i].type == "scrotum">> - <<set $slaveOrgans.scrotum = 1>> - <<elseif $organs[_i].type == "pigTesticles">> - <<set $slaveOrgans.pigTesticles = 1>> - <<elseif $organs[_i].type == "dogTesticles">> - <<set $slaveOrgans.dogTesticles = 1>> - <<elseif $organs[_i].type == "horseTesticles">> - <<set $slaveOrgans.horseTesticles = 1>> - <<elseif $organs[_i].type == "cowTesticles">> - <<set $slaveOrgans.cowTesticles = 1>> - <<elseif $organs[_i].type == "foreskin">> - <<set $slaveOrgans.foreskin = 1>> - <<elseif $organs[_i].type == "ovaries">> - <<set $slaveOrgans.ovaries = 1>> - <<elseif $organs[_i].type == "prostate">> - <<set $slaveOrgans.prostate = 1>> - <<elseif $organs[_i].type == "pigOvaries">> - <<set $slaveOrgans.pigOvaries = 1>> - <<elseif $organs[_i].type == "dogOvaries">> - <<set $slaveOrgans.dogOvaries = 1>> - <<elseif $organs[_i].type == "horseOvaries">> - <<set $slaveOrgans.horseOvaries = 1>> - <<elseif $organs[_i].type == "cowOvaries">> - <<set $slaveOrgans.cowOvaries = 1>> - <<elseif $organs[_i].type == "eyes">> - <<set $slaveOrgans.eyes = 1>> - <<elseif $organs[_i].type == "ears">> - <<set $slaveOrgans.ears = 1>> - <<elseif $organs[_i].type == "cochleae">> - <<set $slaveOrgans.cochleae = 1>> - <<elseif $organs[_i].type == "voicebox">> - <<set $slaveOrgans.voicebox = 1>> - <<elseif $organs[_i].type == "mpreg">> - <<set $slaveOrgans.mpreg = 1>> - <<elseif $organs[_i].type == "mpregPig">> - <<set $slaveOrgans.mpregPig = 1>> - <<elseif $organs[_i].type == "mpregDog">> - <<set $slaveOrgans.mpregDog = 1>> - <<elseif $organs[_i].type == "mpregHorse">> - <<set $slaveOrgans.mpregHorse = 1>> - <<elseif $organs[_i].type == "mpregCow">> - <<set $slaveOrgans.mpregCow = 1>> - <<elseif $organs[_i].type == "freshOvaries">> - <<set $slaveOrgans.freshOvaries = 1>> - <<elseif $organs[_i].type == "asexualReproOvaries">> - <<set $slaveOrgans.asexualReproOvaries = 1>> - <</if>> - <</if>> -<</for>> - -The fabricator is ready to grow an organ for $him. Extract tissue to begin growing: -<<if $seeDicks != 0 || $makeDicks == 1>> - <<if $slaveOrgans.penis != 1>> - <br> - <<link "Penis">> - <<run cashX(-5000, "slaveSurgery", $activeSlave)>> - <<set _newOrgan = {type: "penis", weeksToCompletion: "5", ID: 0}>> - <<set _newOrgan.ID = $activeSlave.ID>> - <<set $organs.push(_newOrgan)>> - <<goto "Remote Surgery">> - <</link>> //Costs <<print cashFormat(5000)>> and will add a prostate if one is not already present// - <</if>> - <<if $slaveOrgans.testicles != 1>> - <br> - <<link "Testicles">> - <<run cashX(-5000, "slaveSurgery", $activeSlave)>> - <<set _newOrgan = {type: "testicles", weeksToCompletion: "10", ID: 0}>> - <<set _newOrgan.ID = $activeSlave.ID>> - <<set $organs.push(_newOrgan)>> - <<goto "Remote Surgery">> - <</link>> //Costs <<print cashFormat(5000)>> and will add a prostate if one is not already present; requires a penis for successful implantation// - <</if>> - <<if $slaveOrgans.scrotum != 1>> - <<if $activeSlave.scrotum == 0>> - <br> - <<link "Scrotum">> - <<run cashX(-2500, "slaveSurgery", $activeSlave)>> - <<set _newOrgan = {type: "scrotum", weeksToCompletion: "5", ID: 0}>> - <<set _newOrgan.ID = $activeSlave.ID>> - <<set $organs.push(_newOrgan)>> - <<goto "Remote Surgery">> - <</link>> //Costs <<print cashFormat(2500)>> and requires balls for successful implantation// - <</if>> - <</if>> - <<if $animalTesticles > 0>> - <<if $slaveOrgans.pigTesticles != 1>> - <br> - <<link "Pig testicles">> - <<run cashX(-5000, "slaveSurgery", $activeSlave)>> - <<set _newOrgan = {type: "pigTesticles", weeksToCompletion: "10", ID: 0}>> - <<set _newOrgan.ID = $activeSlave.ID>> - <<set $organs.push(_newOrgan)>> - <<goto "Remote Surgery">> - <</link>> //Costs <<print cashFormat(5000)>> and requires a penis for successful implantation// - <</if>> - <<if $slaveOrgans.dogTesticles != 1>> - <br> - <<link "Dog testicles">> - <<run cashX(-5000, "slaveSurgery", $activeSlave)>> - <<set _newOrgan = {type: "dogTesticles", weeksToCompletion: "10", ID: 0}>> - <<set _newOrgan.ID = $activeSlave.ID>> - <<set $organs.push(_newOrgan)>> - <<goto "Remote Surgery">> - <</link>> //Costs <<print cashFormat(5000)>> and requires a penis for successful implantation// - <</if>> - <<if $slaveOrgans.horseTesticles != 1>> - <br> - <<link "Horse testicles">> - <<run cashX(-5000, "slaveSurgery", $activeSlave)>> - <<set _newOrgan = {type: "horseTesticles", weeksToCompletion: "10", ID: 0}>> - <<set _newOrgan.ID = $activeSlave.ID>> - <<set $organs.push(_newOrgan)>> - <<goto "Remote Surgery">> - <</link>> //Costs <<print cashFormat(5000)>> and requires a penis for successful implantation// - <</if>> - <<if $slaveOrgans.cowTesticles != 1>> - <br> - <<link "Cow testicles">> - <<run cashX(-5000, "slaveSurgery", $activeSlave)>> - <<set _newOrgan = {type: "cowTesticles", weeksToCompletion: "10", ID: 0}>> - <<set _newOrgan.ID = $activeSlave.ID>> - <<set $organs.push(_newOrgan)>> - <<goto "Remote Surgery">> - <</link>> //Costs <<print cashFormat(5000)>> and requires a penis for successful implantation// - <</if>> - <</if>> - <<if $slaveOrgans.foreskin != 1>> - <<if $activeSlave.foreskin <= 0>> - <br> - <<link "Foreskin">> - <<run cashX(-2500, "slaveSurgery", $activeSlave)>> - <<set _newOrgan = {type: "foreskin", weeksToCompletion: "5", ID: 0}>> - <<set _newOrgan.ID = $activeSlave.ID>> - <<set $organs.push(_newOrgan)>> - <<goto "Remote Surgery">> - <</link>> //Costs <<print cashFormat(2500)>>// - <</if>> - <</if>> -<</if>> -<<if $slaveOrgans.prostate != 1>> - <br> - <<link "Prostate">> - <<run cashX(-5000, "slaveSurgery", $activeSlave)>> - <<set _newOrgan = {type: "prostate", weeksToCompletion: "5", ID: 0}>> - <<set _newOrgan.ID = $activeSlave.ID>> - <<set $organs.push(_newOrgan)>> - <<goto "Remote Surgery">> - <</link>> //Costs <<print cashFormat(5000)>> and does not require the presence any specific organ for successful implantation// -<</if>> -<<if $slaveOrgans.ovaries != 1>> - <br> - <<link "Ovaries">> - <<run cashX(-10000, "slaveSurgery", $activeSlave)>> - <<set _newOrgan = {type: "ovaries", weeksToCompletion: "10", ID: 0}>> - <<set _newOrgan.ID = $activeSlave.ID>> - <<set $organs.push(_newOrgan)>> - <<goto "Remote Surgery">> - <</link>> //Costs <<print cashFormat(10000)>> and requires a vagina for successful implantation// -<</if>> -<<if $asexualReproduction == 1>> - <<if $slaveOrgans.asexualReproOvaries != 1>> - <br> - <<link "Asexual reproduction modification">> - <<run cashX(-10000, "slaveSurgery", $activeSlave)>> - <<set _newOrgan = {type: "asexualReproOvaries", weeksToCompletion: "10", ID: 0}>> - <<set _newOrgan.ID = $activeSlave.ID>> - <<set $organs.push(_newOrgan)>> - <<goto "Remote Surgery">> - <</link>> //Costs <<print cashFormat(10000)>> and requires existing ovaries for successful implantation// - <</if>> -<</if>> -<<if $animalOvaries > 0>> - <<if $slaveOrgans.pigOvaries != 1>> - <br> - <<link "Pig ovaries">> - <<run cashX(-10000, "slaveSurgery", $activeSlave)>> - <<set _newOrgan = {type: "pigOvaries", weeksToCompletion: "10", ID: 0}>> - <<set _newOrgan.ID = $activeSlave.ID>> - <<set $organs.push(_newOrgan)>> - <<goto "Remote Surgery">> - <</link>> //Costs <<print cashFormat(10000)>> and requires a vagina for successful implantation// - <</if>> - <<if $slaveOrgans.dogOvaries != 1>> - <br> - <<link "Dog ovaries">> - <<run cashX(-10000, "slaveSurgery", $activeSlave)>> - <<set _newOrgan = {type: "dogOvaries", weeksToCompletion: "10", ID: 0}>> - <<set _newOrgan.ID = $activeSlave.ID>> - <<set $organs.push(_newOrgan)>> - <<goto "Remote Surgery">> - <</link>> //Costs <<print cashFormat(10000)>> and requires a vagina for successful implantation// - <</if>> - <<if $slaveOrgans.horseOvaries != 1>> - <br> - <<link "Horse ovaries">> - <<run cashX(-10000, "slaveSurgery", $activeSlave)>> - <<set _newOrgan = {type: "horseOvaries", weeksToCompletion: "10", ID: 0}>> - <<set _newOrgan.ID = $activeSlave.ID>> - <<set $organs.push(_newOrgan)>> - <<goto "Remote Surgery">> - <</link>> //Costs <<print cashFormat(10000)>> and requires a vagina for successful implantation// - <</if>> - <<if $slaveOrgans.cowOvaries != 1>> - <br> - <<link "Cow ovaries">> - <<run cashX(-10000, "slaveSurgery", $activeSlave)>> - <<set _newOrgan = {type: "cowOvaries", weeksToCompletion: "10", ID: 0}>> - <<set _newOrgan.ID = $activeSlave.ID>> - <<set $organs.push(_newOrgan)>> - <<goto "Remote Surgery">> - <</link>> //Costs <<print cashFormat(10000)>> and requires a vagina for successful implantation// - <</if>> -<</if>> -<<if $youngerOvaries == 1>> - <<if $slaveOrgans.freshOvaries != 1>> - <br> - <<link "Younger Ovaries">> - <<run cashX(-10000, "slaveSurgery", $activeSlave)>> - <<set _newOrgan = {type: "freshOvaries", weeksToCompletion: "10", ID: 0}>> - <<set _newOrgan.ID = $activeSlave.ID>> - <<set $organs.push(_newOrgan)>> - <<goto "Remote Surgery">> - <</link>> //Costs <<print cashFormat(10000)>> and requires a womb for successful implantation// - <</if>> -<</if>> -<<if $slaveOrgans.eyes != 1>> - <br> - <<link "Eyes">> - <<run cashX(-10000, "slaveSurgery", $activeSlave)>> - <<set _newOrgan = {type: "eyes", weeksToCompletion: "10", ID: 0}>> - <<set _newOrgan.ID = $activeSlave.ID>> - <<set $organs.push(_newOrgan)>> - <<goto "Remote Surgery">> - <</link>> //Costs <<print cashFormat(10000)>>, currently eyes can only be implanted in pairs.// -<</if>> -<<if $slaveOrgans.ears != 1>> - <br> - <<link "Normal Ears">> - <<run cashX(-1000, "slaveSurgery", $activeSlave)>> - <<set _newOrgan = {type: "ears", weeksToCompletion: "2", ID: 0}>> - <<set _newOrgan.ID = $activeSlave.ID>> - <<set $organs.push(_newOrgan)>> - <<goto "Remote Surgery">> - <</link>> //Costs <<print cashFormat(1000)>>// -<</if>> -<<if $slaveOrgans.cochleae != 1>> - <<if $activeSlave.hears <= -2>> - <br> - <<link "Cochleae">> - <<run cashX(-8000, "slaveSurgery", $activeSlave)>> - <<set _newOrgan = {type: "cochleae", weeksToCompletion: "6", ID: 0}>> - <<set _newOrgan.ID = $activeSlave.ID>> - <<set $organs.push(_newOrgan)>> - <<goto "Remote Surgery">> - <</link>> //Costs <<print cashFormat(8000)>>// - <</if>> -<</if>> -<<if $slaveOrgans.voicebox != 1>> - <<if ($activeSlave.voice == 0)>> - <br> - <<link "Vocal cords">> - <<run cashX(-5000, "slaveSurgery", $activeSlave)>> - <<set _newOrgan = {type: "voicebox", weeksToCompletion: "5", ID: 0}>> - <<set _newOrgan.ID = $activeSlave.ID>> - <<set $organs.push(_newOrgan)>> - <<goto "Remote Surgery">> - <</link>> //Costs <<print cashFormat(5000)>>// - <</if>> -<</if>> -<<if $arcologies[0].FSGenderRadicalistResearch == 1>> - <<if $slaveOrgans.mpreg != 1>> - <br> - <<link "Anal womb and ovaries">> - <<run cashX(-20000, "slaveSurgery", $activeSlave)>> - <<set _newOrgan = {type: "mpreg", weeksToCompletion: "10", ID: 0}>> - <<set _newOrgan.ID = $activeSlave.ID>> - <<set $organs.push(_newOrgan)>> - <<goto "Remote Surgery">> - <</link>> //Costs <<print cashFormat(20000)>> and the slave must not have female reproductive organs for successful implantation// - <</if>> - - <<if $animalMpreg > 0>> - <<if $slaveOrgans.mpregPig != 1>> - <br> - <<link "Anal pig womb and ovaries">> - <<run cashX(-20000, "slaveSurgery", $activeSlave)>> - <<set _newOrgan = {type: "mpregPig", weeksToCompletion: "10", ID: 0}>> - <<set _newOrgan.ID = $activeSlave.ID>> - <<set $organs.push(_newOrgan)>> - <<goto "Remote Surgery">> - <</link>> //Costs <<print cashFormat(20000)>> and the slave must not have female reproductive organs for successful implantation// - <</if>> - <<if $slaveOrgans.mpregDog != 1>> - <br> - <<link "Anal dog womb and ovaries">> - <<run cashX(-20000, "slaveSurgery", $activeSlave)>> - <<set _newOrgan = {type: "mpregDog", weeksToCompletion: "10", ID: 0}>> - <<set _newOrgan.ID = $activeSlave.ID>> - <<set $organs.push(_newOrgan)>> - <<goto "Remote Surgery">> - <</link>> //Costs <<print cashFormat(20000)>> and the slave must not have female reproductive organs for successful implantation// - <</if>> - <<if $slaveOrgans.mpregHorse != 1>> - <br> - <<link "Anal horse womb and ovaries">> - <<run cashX(-20000, "slaveSurgery", $activeSlave)>> - <<set _newOrgan = {type: "mpregHorse", weeksToCompletion: "10", ID: 0}>> - <<set _newOrgan.ID = $activeSlave.ID>> - <<set $organs.push(_newOrgan)>> - <<goto "Remote Surgery">> - <</link>> //Costs <<print cashFormat(20000)>> and the slave must not have female reproductive organs for successful implantation// - <</if>> - <<if $slaveOrgans.mpregCow != 1>> - <br> - <<link "Anal cow womb and ovaries">> - <<run cashX(-20000, "slaveSurgery", $activeSlave)>> - <<set _newOrgan = {type: "mpregCow", weeksToCompletion: "10", ID: 0}>> - <<set _newOrgan.ID = $activeSlave.ID>> - <<set $organs.push(_newOrgan)>> - <<goto "Remote Surgery">> - <</link>> //Costs <<print cashFormat(20000)>> and the slave must not have female reproductive organs for successful implantation// - <</if>> - <</if>> -<</if>> - -<<if $organs.length > 0>> - <<for _i = 0; _i < $organs.length; _i++>> - <<if $organs[_i].ID == $activeSlave.ID>> - <br> - $His - <<switch $organs[_i].type>> - <<case "foreskin" "penis" "prostate" "scrotum" "voicebox">> - $organs[_i].type is - <<case "cochleae" "ears" "eyes" "ovaries" "testicles">> - $organs[_i].type are - <<case "pigTesticles">> - pig testicles are - <<case "dogTesticles">> - dog testicles are - <<case "horseTesticles">> - horse testicles are - <<case "cowTesticles">> - cow testicles are - <<case "freshOvaries">> - revitalized ovaries are - <<case "pigOvaries">> - pig ovaries are - <<case "dogOvaries">> - dog ovaries are - <<case "horseOvaries">> - horse ovaries are - <<case "cowOvaries">> - cow ovaries are - <<case "mpreg">> - anal womb and ovaries are - <<case "mpregPig">> - anal womb and pig ovaries are - <<case "mpregDog">> - anal womb and dog ovaries are - <<case "mpregHorse">> - anal womb and horse ovaries are - <<case "mpregCow">> - anal womb and cow ovaries are - <<case "asexualReproOvaries">> - sperm producing ovary replacement is - <</switch>> - expected to be ready in <<if $organFarmUpgrade == 1>><<print $organs[_i].weeksToCompletion>><<elseif $organFarmUpgrade == 2>><<print Math.ceil($organs[_i].weeksToCompletion/2)>><<elseif $organFarmUpgrade == 3>><<print Math.ceil($organs[_i].weeksToCompletion/4)>><</if>> weeks. - <</if>> - <</for>> -<</if>> - -<<if $completedOrgans.length > 0>> - <<for _i = 0; _i < $completedOrgans.length; _i++>> - <<if $completedOrgans[_i].ID == $activeSlave.ID>> - <br>The fabricator has completed $his $completedOrgans[_i].type. - <<switch $completedOrgans[_i].type>> - <<case "penis">> - <<if $activeSlave.dick > 0>> - <br> - ERROR: this slave already has a penis. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "penis"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<else>> - <br> - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "penis"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<if $activeSlave.prostate == 0>> - <<set $activeSlave.prostate = 1>> - <</if>> - <<set $activeSlave.dick = 2>> - <<set $activeSlave.clit = 0>> - <<set $activeSlave.foreskin = $activeSlave.dick>> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<set $surgeryType = "addDick">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "penis"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <</if>> - <<case "testicles">> - <<if $activeSlave.balls > 0 && $activeSlave.ballType == "human">> - <br> - ERROR: this slave already has testicles. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "testicles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<elseif $activeSlave.balls > 0>> - <br> - ERROR: this slave already has $activeSlave.ballType testicles. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "testicles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <br>You can replace $his existing testicles with a new pair. - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "testicles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.balls = 2>> - <<set $activeSlave.ballType = "human">> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXY == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyAgeXY = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyXY = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addTesticles">> - <</link>> - <<elseif $activeSlave.dick == 0>> - <br> - ERROR: this slave lacks the penis necessary to accept testicles. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "testicles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <br>You can forgo standard procedure and implant testicles directly into $his abdomen. - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "testicles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<if $activeSlave.prostate < 1>><<set $activeSlave.prostate = 1>><</if>> - <<set $activeSlave.balls = 2>> - <<set $activeSlave.ballType = "human">> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXY == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyAgeXY = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyXY = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addTesticles">> - <</link>> - <<else>> - <br> - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "testicles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<if $activeSlave.prostate == 0>> - <<set $activeSlave.prostate = 1>> - <</if>> - <<set $activeSlave.balls = 2>> - <<set $activeSlave.ballType = "human">> - <<set $activeSlave.scrotum = 2>> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXY == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyAgeXY = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyXY = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addBalls">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "testicles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <</if>> - <<case "pigTesticles">> - <<if $activeSlave.balls > 0 && $activeSlave.ballType == "pig">> - <br> - ERROR: this slave already has testicles. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "pigTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<elseif $activeSlave.balls > 0>> - <br> - ERROR: this slave already has $activeSlave.ballType testicles. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "pigTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <br>You can replace $his existing testicles with a new pair. - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "pigTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.balls = 2>> - <<set $activeSlave.ballType = "pig">> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXY == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyAgeXY = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyXY = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addAnimalBalls">> - <</link>> - <<elseif $activeSlave.dick == 0>> - <br> - ERROR: this slave lacks the penis necessary to accept testicles. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "pigTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <br>You can forgo standard procedure and implant testicles directly into $his abdomen. - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "pigTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<if $activeSlave.prostate < 1>><<set $activeSlave.prostate = 1>><</if>> - <<set $activeSlave.balls = 2>> - <<set $activeSlave.ballType = "pig">> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXY == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyAgeXY = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyXY = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addAnimalBalls">> - <</link>> - <<else>> - <br> - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "pigTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.balls = 3>> - <<set $activeSlave.scrotum = 3>> - <<set $activeSlave.ballType = "pig">> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXY == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyAgeXY = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyXY = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addAnimalBalls">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "pigTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <</if>> - <<case "dogTesticles">> - <<if $activeSlave.balls > 0 && $activeSlave.ballType == "dog">> - <br> - ERROR: this slave already has testicles. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "dogTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<elseif $activeSlave.balls > 0>> - <br> - ERROR: this slave already has $activeSlave.ballType testicles. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "dogTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <br>You can replace $his existing testicles with a new pair. - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "dogTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.balls = 2>> - <<set $activeSlave.ballType = "dog">> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXY == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyAgeXY = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyXY = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addAnimalBalls">> - <</link>> - <<elseif $activeSlave.dick == 0>> - <br> - ERROR: this slave lacks the penis necessary to accept testicles. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "dogTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <br>You can forgo standard procedure and implant testicles directly into $his abdomen. - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "dogTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<if $activeSlave.prostate < 1>><<set $activeSlave.prostate = 1>><</if>> - <<set $activeSlave.balls = 2>> - <<set $activeSlave.ballType = "dog">> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXY == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyAgeXY = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyXY = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addAnimalBalls">> - <</link>> - <<else>> - <br> - <<link "Implant">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "dogTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.balls = 2>> - <<set $activeSlave.ballType = "dog">> - <<set $activeSlave.scrotum = 2>> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXY == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyAgeXY = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyXY = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addAnimalBalls">> - <<goto "Surgery Degradation">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "dogTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <</if>> - <<case "horseTesticles">> - <<if $activeSlave.balls > 0 && $activeSlave.ballType == "horse">> - <br> - ERROR: this slave already has testicles. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "horseTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<elseif $activeSlave.balls > 0>> - <br> - ERROR: this slave already has $activeSlave.ballType testicles. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "horseTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <br>You can replace $his existing testicles with a new pair. - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "horseTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.balls = 2>> - <<set $activeSlave.ballType = "horse">> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXY == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyAgeXY = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyXY = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addAnimalBalls">> - <</link>> - <<elseif $activeSlave.dick == 0>> - <br> - ERROR: this slave lacks the penis necessary to accept testicles. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "horseTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <br>You can forgo standard procedure and implant testicles directly into $his abdomen. - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "horseTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<if $activeSlave.prostate < 1>><<set $activeSlave.prostate = 1>><</if>> - <<set $activeSlave.balls = 2>> - <<set $activeSlave.ballType = "horse">> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXY == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyAgeXY = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyXY = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addAnimalBalls">> - <</link>> - <<else>> - <br> - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "horseTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.balls = 3>> - <<set $activeSlave.scrotum = 3>> - <<set $activeSlave.ballType = "horse">> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXY == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyAgeXY = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyXY = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addAnimalBalls">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "horseTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <</if>> - <<case "cowTesticles">> - <<if $activeSlave.balls > 0 && $activeSlave.ballType == "cow">> - <br> - ERROR: this slave already has testicles. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "cowTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<elseif $activeSlave.balls > 0>> - <br> - ERROR: this slave already has $activeSlave.ballType testicles. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "cowTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <br>You can replace $his existing testicles with a new pair. - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "cowTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.balls = 2>> - <<set $activeSlave.ballType = "cow">> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXY == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyAgeXY = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyXY = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addAnimalBalls">> - <</link>> - <<elseif $activeSlave.dick == 0>> - <br> - ERROR: this slave lacks the penis necessary to accept testicles. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "cowTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <br>You can forgo standard procedure and implant testicles directly into $his abdomen. - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "cowTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<if $activeSlave.prostate < 1>><<set $activeSlave.prostate = 1>><</if>> - <<set $activeSlave.balls = 2>> - <<set $activeSlave.ballType = "cow">> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXY == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyAgeXY = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyXY = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addAnimalBalls">> - <</link>> - <<else>> - <br> - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "cowTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.balls = 3>> - <<set $activeSlave.scrotum = 3>> - <<set $activeSlave.ballType = "cow">> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXY == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyAgeXY = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyXY = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addAnimalBalls">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "cowTesticles"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <</if>> - <<case "scrotum">> - <<if $activeSlave.scrotum > 0>> - <br> - ERROR: this slave already has a scrotum. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "scrotum"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<elseif $activeSlave.balls == 0>> - <br> - ERROR: this slave lacks the balls necessary to accept a scrotum. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "scrotum"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<else>> - <br> - <<link "Graft on" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "scrotum"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.scrotum = $activeSlave.balls>> - <<set $activeSlave.health -= 10>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 10>> - <</if>> - <<set $surgeryType = "addScrotum">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "scrotum"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <</if>> - <<case "foreskin">> - <<if $activeSlave.foreskin > 0>> - <br> - ERROR: this slave already has a <<if $activeSlave.dick > 0>>foreskin<<else>>clitoral hood<</if>>. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "foreskin"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<else>> - <br> - <<link "Graft on" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "foreskin"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<if $activeSlave.dick > 0>> - <<set $activeSlave.foreskin = $activeSlave.dick>> - <<elseif $activeSlave.clit > 0>> - <<set $activeSlave.foreskin = $activeSlave.clit>> - <<else>> - <<set $activeSlave.foreskin = 1>> - <</if>> - <<set $activeSlave.health -= 10>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 10>> - <</if>> - <<set $surgeryType = "addForeskin">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "foreskin"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <</if>> - <<case "ovaries">> - <<if $activeSlave.ovaries > 0 && $activeSlave.eggType == "human">> - <br> - ERROR: this slave already has ovaries. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "ovaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<elseif $activeSlave.ovaries > 0>> - <br> - ERROR: this slave already has $activeSlave.eggType ovaries. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "ovaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <br>You can replace $his existing ovaries with a new pair. - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "ovaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.eggType = "human">> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.health -= 20>> - <<set $activeSlave.pregData = clone(setup.pregData.human)>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addOvaries">> - <</link>> - <<elseif $activeSlave.vagina < 0>> - <br> - ERROR: this slave lacks the vagina necessary to accept ovaries. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "ovaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<elseif $activeSlave.mpreg != 0 || $activeSlave.bellyImplant != -1>> - <br> - ERROR: this slave's body cavity is filled with another organ. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "ovaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<else>> - <br> - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "ovaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.ovaries = 1>> - <<set $activeSlave.eggType = "human">> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.health -= 20>> - <<set $activeSlave.pregData = clone(setup.pregData.human)>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addOvaries">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "ovaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <</if>> - <<case "pigOvaries">> - <<if $activeSlave.ovaries > 0 && $activeSlave.eggType == "pig">> - <br> - ERROR: this slave already has ovaries. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "pigOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<elseif $activeSlave.ovaries > 0>> - <br> - ERROR: this slave already has $activeSlave.eggType ovaries. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "pigOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <br>You can replace $his existing ovaries with a new pair. - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "pigOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.eggType = "pig">> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.health -= 20>> - <<set $activeSlave.pregData = clone(setup.pregData.pig)>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addAnimalOvaries">> - <</link>> - <<elseif $activeSlave.vagina < 0>> - <br> - ERROR: this slave lacks the vagina necessary to accept ovaries. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "pigOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<elseif $activeSlave.mpreg != 0 || $activeSlave.bellyImplant != -1>> - <br> - ERROR: this slave's body cavity is filled with another organ. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "pigOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<else>> - <br> - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "pigOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.ovaries = 1>> - <<set $activeSlave.eggType = "pig">> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.health -= 20>> - <<set $activeSlave.pregData = clone(setup.pregData.pig)>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addAnimalOvaries">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "pigOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <</if>> - <<case "dogOvaries">> - <<if $activeSlave.ovaries > 0 && $activeSlave.eggType == "dog">> - <br> - ERROR: this slave already has ovaries. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "dogOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<elseif $activeSlave.ovaries > 0>> - <br> - ERROR: this slave already has $activeSlave.eggType ovaries. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "dogOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <br>You can replace $his existing ovaries with a new pair. - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "dogOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.eggType = "dog">> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.health -= 20>> - <<set $activeSlave.pregData = clone(setup.pregData.canineM)>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addAnimalOvaries">> - <</link>> - <<elseif $activeSlave.vagina < 0>> - <br> - ERROR: this slave lacks the vagina necessary to accept ovaries. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "dogOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<elseif $activeSlave.mpreg != 0 || $activeSlave.bellyImplant != -1>> - <br> - ERROR: this slave's body cavity is filled with another organ. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "dogOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<else>> - <br> - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "dogOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.ovaries = 1>> - <<set $activeSlave.eggType = "dog">> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.health -= 20>> - <<set $activeSlave.pregData = clone(setup.pregData.canineM)>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addAnimalOvaries">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "dogOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <</if>> - <<case "horseOvaries">> - <<if $activeSlave.ovaries > 0 && $activeSlave.eggType == "horse">> - <br> - ERROR: this slave already has ovaries. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "horseOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<elseif $activeSlave.ovaries > 0>> - <br> - ERROR: this slave already has $activeSlave.eggType ovaries. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "horseOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <br>You can replace $his existing ovaries with a new pair. - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "horseOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.eggType = "horse">> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.health -= 20>> - <<set $activeSlave.pregData = clone(setup.pregData.equine)>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addAnimalOvaries">> - <</link>> - <<elseif $activeSlave.vagina < 0>> - <br> - ERROR: this slave lacks the vagina necessary to accept ovaries. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "horseOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<elseif $activeSlave.mpreg != 0 || $activeSlave.bellyImplant != -1>> - <br> - ERROR: this slave's body cavity is filled with another organ. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "horseOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<else>> - <br> - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "horseOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.ovaries = 1>> - <<set $activeSlave.eggType = "horse">> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.health -= 20>> - <<set $activeSlave.pregData = clone(setup.pregData.equine)>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addAnimalOvaries">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "horseOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <</if>> - <<case "cowOvaries">> - <<if $activeSlave.ovaries > 0 && $activeSlave.eggType == "cow">> - <br> - ERROR: this slave already has ovaries. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "cowOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<elseif $activeSlave.ovaries > 0>> - <br> - ERROR: this slave already has $activeSlave.eggType ovaries. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "cowOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <br>You can replace $his existing ovaries with a new pair. - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "cowOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.eggType = "cow">> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addAnimalOvaries">> - <</link>> - <<elseif $activeSlave.vagina < 0>> - <br> - ERROR: this slave lacks the vagina necessary to accept ovaries. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "cowOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<elseif $activeSlave.mpreg != 0 || $activeSlave.bellyImplant != -1>> - <br> - ERROR: this slave's body cavity is filled with another organ. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "cowOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<else>> - <br> - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "cowOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.ovaries = 1>> - <<set $activeSlave.eggType = "cow">> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addAnimalOvaries">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "cowOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <</if>> - <<case "freshOvaries">> - <<if ($activeSlave.mpreg == 0 && $activeSlave.ovaries == 0) || $activeSlave.bellyImplant != -1>> - <br> - ERROR: this slave lacks a viable womb. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "freshOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<elseif $activeSlave.physicalAge >= 70>> - ERROR: this slave's body is too old to handle pregnancy. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "freshOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<else>> - <br> - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "freshOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<if $activeSlave.ovaryAge >= 47>> - <<set $activeSlave.ovaryAge = 45>> - <<else>> - <<set $activeSlave.ovaryAge -= 2>> /* It shouldn't matter if this goes negative as it is just a signal for menopause to occur. */ - <</if>> - <<if $activeSlave.preg < 0>> - <<set $activeSlave.preg = 0>> - <</if>> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "freshOvaries">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "freshOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <</if>> - <<case "asexualReproOvaries">> - <<if ($activeSlave.mpreg == 0 && $activeSlave.ovaries == 0)>> - <br> - ERROR: this slave lacks ovaries. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "asexualReproOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<else>> - <br> - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "asexualReproOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<if $activeSlave.preg < 0>> - <<set $activeSlave.preg = 0>> - <</if>> - <<set $activeSlave.eggType = "human">> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $activeSlave.ovaImplant = "asexual">> - <<set $surgeryType = "asexualReproOvaries">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "asexualReproOvaries"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <</if>> - <<case "prostate">> - <<if $activeSlave.prostate != 0>> - <br> - ERROR: this slave already has a prostate. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "prostate"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<else>> - <br> - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "prostate"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.prostate = 1>> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<set $surgeryType = "addProstate">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "prostate"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <</if>> - <<case "eyes">> - <<if hasBothCyberneticEyes($activeSlave)>> - <br> - <<link "Remove ocular implants and implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "eyes"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<run eyeSurgery($activeSlave, "both", "normal")>> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<set $surgeryType = "newEyes">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "eyes"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<elseif getBestVision($activeSlave) === 0>> - <br> - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "eyes"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<run eyeSurgery($activeSlave, "both", "normal")>> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<set $surgeryType = "unblind">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "eyes"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<else>> - <br> - ERROR: this slave has working eyes. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "eyes"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - - <</if>> - <<case "ears">> - <<if $activeSlave.earShape == "normal" && $activeSlave.earT != "none">> - <br> - ERROR: this slave has normal ears. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "ears"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<else>> - <br> - <<if $activeSlave.earShape == "none">> - <<link "Attach" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "ears"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.earShape = "normal">> - <<if $activeSlave.hears == -1>> - <<set $activeSlave.hears = 0>> - <</if>> - <<set $activeSlave.health -= 15>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<set $surgeryType = "earMinor">> - <</link>> - <<elseif $activeSlave.earShape != "normal">> - <<link "Remove current ears and attach" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "ears"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.earShape = "normal">> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<set $surgeryType = "earMinor">> - <</link>> - <</if>> - | - <<if $surgeryUpgrade == 1>> - <<if $activeSlave.earT == "none">> - <<link "Attach to top of head" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "ears"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.earT = "normal", $activeSlave.earTColor = "hairless">> - <<set $activeSlave.health -= 10>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<set $surgeryType = "earMinor">> - <</link>> - <<else>> - <<link "Remove current upper ears and attach" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "ears"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.earT = "normal", $activeSlave.earTColor = "hairless">> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<set $surgeryType = "earMinor">> - <</link>> - <</if>> - <<else>> - //Upgraded autosurgery required for non-standard grafting// - <</if>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "ears"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <</if>> - <<case "cochleae">> - <<if $activeSlave.hears > -2 && $activeSlave.earImplant != 1>> - <br> - ERROR: this slave has working cochleae. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "cochleae"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<elseif $activeSlave.earImplant == 1>> - <br> - <<link "Remove cochlear implants and implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "cochleae"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.hears = 0>> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<set $surgeryType = "newEars">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "cochleae"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<else>> - <br> - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "cochleae"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.hears = 0>> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<set $surgeryType = "undeafen">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "cochleae"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <</if>> - <<case "mpreg">> - <<if ($activeSlave.ovaries != 0) || ($activeSlave.vagina > -1) || ($activeSlave.mpreg != 0)>> - <br> - ERROR: this slave has existing reproductive Organs. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "mpreg"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<elseif $activeSlave.bellyImplant >= 0>> - <br> - ERROR: this slave has a fillable abdominal implant. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "mpreg"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<else>> - <br> - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "mpreg"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.mpreg = 1>> - <<set $activeSlave.eggType = "human">> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.health -= 40>> - <<set $activeSlave.pregData = clone(setup.pregData.human)>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "mpreg">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "mpreg"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <</if>> - <<case "mpregPig">> - <<if ($activeSlave.ovaries != 0) || ($activeSlave.vagina > -1) || ($activeSlave.mpreg != 0)>> - <br> - ERROR: this slave has existing reproductive Organs. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "mpregPig"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<elseif $activeSlave.bellyImplant >= 0>> - <br> - ERROR: this slave has a fillable abdominal implant. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "mpregPig"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<else>> - <br> - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "mpregPig"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.mpreg = 1>> - <<set $activeSlave.eggType = "pig">> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.health -= 40>> - <<set $activeSlave.pregData = clone(setup.pregData.pig)>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "mpregPig">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "mpregPig"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <</if>> - <<case "mpregDog">> - <<if ($activeSlave.ovaries != 0) || ($activeSlave.vagina > -1) || ($activeSlave.mpreg != 0)>> - <br> - ERROR: this slave has existing reproductive completedOrgans. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "mpregDog"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<elseif $activeSlave.bellyImplant >= 0>> - <br> - ERROR: this slave has a fillable abdominal implant. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "mpregDog"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<else>> - <br> - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "mpregDog"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.mpreg = 1>> - <<set $activeSlave.eggType = "dog">> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.health -= 40>> - <<set $activeSlave.pregData = clone(setup.pregData.canineM)>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "mpregDog">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "mpregDog"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <</if>> - <<case "mpregHorse">> - <<if ($activeSlave.ovaries != 0) || ($activeSlave.vagina > -1) || ($activeSlave.mpreg != 0)>> - <br> - ERROR: this slave has existing reproductive Organs. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "mpregHorse"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<elseif $activeSlave.bellyImplant >= 0>> - <br> - ERROR: this slave has a fillable abdominal implant. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "mpregHorse"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<else>> - <br> - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "mpregHorse"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.mpreg = 1>> - <<set $activeSlave.eggType = "horse">> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.health -= 40>> - <<set $activeSlave.pregData = clone(setup.pregData.equine)>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "mpregHorse">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "mpregHorse"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <</if>> - <<case "mpregCow">> - <<if ($activeSlave.ovaries != 0) || ($activeSlave.vagina > -1) || ($activeSlave.mpreg != 0)>> - <br> - ERROR: this slave has existing reproductive Organs. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "mpregCow"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<elseif $activeSlave.bellyImplant >= 0>> - <br> - ERROR: this slave has a fillable abdominal implant. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "mpregCow"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<else>> - <br> - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "mpregCow"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<set $activeSlave.mpreg = 1>> - <<set $activeSlave.eggType = "cow">> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.health -= 40>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "mpregCow">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "mpregCow"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <</if>> - <<case "voicebox">> - <<if $activeSlave.voice > 0 && $activeSlave.electrolarynx != 1>> - <br> - ERROR: this slave is not mute. - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "voicebox"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<elseif $activeSlave.electrolarynx == 1>> - <br> - <<link "Remove electrolarynx and implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "voicebox"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<if $activeSlave.ovaries == 1 && $activeSlave.hormoneBalance >= 200>> - <<set $activeSlave.voice = 3>> - <<elseif ($activeSlave.balls > 0) || ($activeSlave.hormoneBalance < -20)>> - <<set $activeSlave.voice = 1>> - <<else>> - <<set $activeSlave.voice = 2>> - <</if>> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<set $surgeryType = "newVoice">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "voicebox"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <<else>> - <br> - <<link "Implant" "Surgery Degradation">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "voicebox"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <<if $activeSlave.ovaries == 1 && $activeSlave.hormoneBalance >= 200>> - <<set $activeSlave.voice = 3>> - <<elseif ($activeSlave.balls > 0) || ($activeSlave.hormoneBalance < -20)>> - <<set $activeSlave.voice = 1>> - <<else>> - <<set $activeSlave.voice = 2>> - <</if>> - <<set $activeSlave.health -= 10>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 10>> - <</if>> - <<set $surgeryType = "restoreVoice">> - <</link>> - | - <<link "Discard" "Remote Surgery">> - <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "voicebox"; })>> - <<if _ofo != -1>> - <<set $completedOrgans.deleteAt(_ofo)>> - <<else>> - @@.red;Organ not found for deletion!@@ - <</if>> - <</link>> - <</if>> - <</switch>> - <</if>> - <</for>> /* for of the $completedOrgans loop */ -<</if>> diff --git a/src/uncategorized/multiImplant.tw b/src/uncategorized/multiImplant.tw index 853b25a7d4b19d247e7f81197553e29befb38b8e..463533c33a7ef8298f43329fd2f80f2dbf971dff 100644 --- a/src/uncategorized/multiImplant.tw +++ b/src/uncategorized/multiImplant.tw @@ -1,1125 +1,192 @@ :: Multiple Organ Implant [nobr] -You head down to your <<if $surgeryUpgrade == 1>>heavily upgraded and customized remote surgery<<else>>remote surgery<</if>> and start having the slaves with <<if ($completedOrgans.length > 0) && ($adjustProstheticsCompleted > 0)>>organs or prosthetics <<elseif ($completedOrgans.length > 1)>>organs <<elseif ($adjustProstheticsCompleted > 1)>>prosthetics <</if>>that are ready be sent down. +You head down to your <<if $surgeryUpgrade == 1>>heavily upgraded and customized<</if>> remote surgery and start having the slaves with <<if ($completedOrgans.length > 0) && ($adjustProstheticsCompleted > 0)>>organs or prosthetics <<elseif ($completedOrgans.length > 1)>>organs <<elseif ($adjustProstheticsCompleted > 1)>>prosthetics <</if>>that are ready be sent down. -/* builds a list for each slave and adds the appropriate organs to it */ +<h1>Implant Organs</h1> + +<<set _F = App.Medicine.OrganFarm>> +<<for _i = 0; _i < $slaves.length; _i++>> + <<set $activeSlave = $slaves[_i]>> + <<set _sortedOrgans = _F.getSortedOrgans($activeSlave)>> + <<if _sortedOrgans.length === 0>><<continue>><</if>> + + <h2>$activeSlave.slaveName</h2> + + <<for _k = 0; _k < _sortedOrgans.length; _k++>> + <h3><<print _F.Organs[_sortedOrgans[_k]].name>></h3> + <<set _actions = _F.Organs[_sortedOrgans[_k]].implantActions>> + <<set _manual = false, _success = false, _break = false>> + <<for _l = 0; _l < _actions.length; _l++>> + <<if !_actions[_l].autoImplant>> + <<if _actions[_l].canImplant($activeSlave)>> + <<set _manual = true>> + <</if>> + <<continue>> + <</if>> + <<if !_actions[_l].canImplant($activeSlave)>> + @@.red;ERROR: <<print _actions[_l].implantError($activeSlave)>>@@<br> + <<elseif $activeSlave.health - _actions[_l].healthImpact < -75>> + Estimated health impact too high, skipping further surgeries. + <<set _break = true>> + <<break>> + <<else>> + <<run App.Medicine.OrganFarm.implant($activeSlave, _sortedOrgans[_k], _l)>> + <<include "Surgery Degradation">><br><br> + <<set _success = true>> + <</if>> + <</for>> + <<if _break>><<break>><</if>> + <<if !_success && _manual>> + //Cannot implant <<print _F.Organs[_sortedOrgans[_k]].name.toLowerCase()>> automatically, try implanting manually in the remote surgery.// + <</if>> + <</for>> + + <<set $slaves[_i] = $activeSlave>> +<</for>> + + +<h1>Implant prosthetics</h1> + +/* prosthetics */ <<for _i = 0; _i < $slaves.length; _i++>> <<set $activeSlave = $slaves[_i]>> /* count for estimating health impact */ - <<set _organCount = $completedOrgans.filter(o => o.ID == $activeSlave.ID).length>> <<set _prostheticCount = $adjustProsthetics.filter(p => p.slaveID == $activeSlave.ID && p.workLeft <= 0).length>> /* since we already have count, skip slaves that don't need work */ - <<if _organCount + _prostheticCount < 1>> + <<if _prostheticCount < 1>> <<continue>> <</if>> /* Ensures that a slave can never die during the execution of this passage. Calculation based on worst case, so when changing worst case change it here too. */ - <<if $activeSlave.health - (_organCount * 40 + _prostheticCount * 20) < -75>> + <<if $activeSlave.health - (_prostheticCount * 20) < -75>> <br><hr> @@.red;Estimated health impact too great; $activeSlave.slaveName skipped.@@ <<continue>> <</if>> - /* start actual work */ - <<if _organCount > 0>> /* check _organCount */ - <<setLocalPronouns $activeSlave>> - <<set _slaveOrgans = { - penis: 0, - testicles: 0, - scrotum: 0, - pigTesticles: 0, - canineTesticles: 0, - horseTesticles: 0, - cowTesticles: 0, - foreskin: 0, - ovaries: 0, - freshOvaries: 0, - asexualReproOvaries: 0, - prostate: 0, - pigOvaries: 0, - canineOvaries: 0, - horseOvaries: 0, - cowOvaries: 0, - eyes: 0, - ears: 0, - cochleae: 0, - voicebox: 0, - mpreg: 0, - mpregPig: 0, - mpregCanine: 0, - mpregHorse: 0, - mpregCow: 0 - }>> - <<for _j = 0; _j < $completedOrgans.length; _j++>> - <<if $activeSlave.ID == $completedOrgans[_j].ID>> - <<if $completedOrgans[_j].type == "penis">> - <<set _slaveOrgans.penis = $completedOrgans[_j]>> - <<set $completedOrgans.deleteAt(_j),_j-->> - <<elseif $completedOrgans[_j].type == "testicles">> - <<set _slaveOrgans.testicles = $completedOrgans[_j]>> - <<set $completedOrgans.deleteAt(_j),_j-->> - <<elseif $completedOrgans[_j].type == "scrotum">> - <<set _slaveOrgans.scrotum = $completedOrgans[_j]>> - <<set $completedOrgans.deleteAt(_j),_j-->> - <<elseif $completedOrgans[_j].type == "pigTesticles">> - <<set _slaveOrgans.pigTesticles = $completedOrgans[_j]>> - <<set $completedOrgans.deleteAt(_j),_j-->> - <<elseif $completedOrgans[_j].type == "canineTesticles">> - <<set _slaveOrgans.canineTesticles = $completedOrgans[_j]>> - <<set $completedOrgans.deleteAt(_j),_j-->> - <<elseif $completedOrgans[_j].type == "horseTesticles">> - <<set _slaveOrgans.horseTesticles = $completedOrgans[_j]>> - <<set $completedOrgans.deleteAt(_j),_j-->> - <<elseif $completedOrgans[_j].type == "cowTesticles">> - <<set _slaveOrgans.cowTesticles = $completedOrgans[_j]>> - <<set $completedOrgans.deleteAt(_j),_j-->> - <<elseif $completedOrgans[_j].type == "foreskin">> - <<set _slaveOrgans.foreskin = $completedOrgans[_j]>> - <<set $completedOrgans.deleteAt(_j),_j-->> - <<elseif $completedOrgans[_j].type == "ovaries">> - <<set _slaveOrgans.ovaries = $completedOrgans[_j]>> - <<set $completedOrgans.deleteAt(_j),_j-->> - <<elseif $completedOrgans[_j].type == "freshOvaries">> - <<set _slaveOrgans.freshOvaries = $completedOrgans[_j]>> - <<set $completedOrgans.deleteAt(_j),_j-->> - <<elseif $completedOrgans[_j].type == "asexualReproOvaries">> - <<set _slaveOrgans.asexualReproOvaries = $completedOrgans[_j]>> - <<set $completedOrgans.deleteAt(_j),_j-->> - <<elseif $completedOrgans[_j].type == "prostate">> - <<set _slaveOrgans.prostate = $completedOrgans[_j]>> - <<set $completedOrgans.deleteAt(_j),_j-->> - <<elseif $completedOrgans[_j].type == "pigOvaries">> - <<set _slaveOrgans.pigOvaries = $completedOrgans[_j]>> - <<set $completedOrgans.deleteAt(_j),_j-->> - <<elseif $completedOrgans[_j].type == "canineOvaries">> - <<set _slaveOrgans.canineOvaries = $completedOrgans[_j]>> - <<set $completedOrgans.deleteAt(_j),_j-->> - <<elseif $completedOrgans[_j].type == "horseOvaries">> - <<set _slaveOrgans.horseOvaries = $completedOrgans[_j]>> - <<set $completedOrgans.deleteAt(_j),_j-->> - <<elseif $completedOrgans[_j].type == "cowOvaries">> - <<set _slaveOrgans.cowOvaries = $completedOrgans[_j]>> - <<set $completedOrgans.deleteAt(_j),_j-->> - <<elseif $completedOrgans[_j].type == "eyes">> - <<set _slaveOrgans.eyes = $completedOrgans[_j]>> - <<set $completedOrgans.deleteAt(_j),_j-->> - <<elseif $completedOrgans[_j].type == "ears">> - <<set _slaveOrgans.ears = $completedOrgans[_j]>> - <<set $completedOrgans.deleteAt(_j),_j-->> - <<elseif $completedOrgans[_j].type == "cochleae">> - <<set _slaveOrgans.cochleae = $completedOrgans[_j]>> - <<set $completedOrgans.deleteAt(_j),_j-->> - <<elseif $completedOrgans[_j].type == "voicebox">> - <<set _slaveOrgans.voicebox = $completedOrgans[_j]>> - <<set $completedOrgans.deleteAt(_j),_j-->> - <<elseif $completedOrgans[_j].type == "mpreg">> - <<set _slaveOrgans.mpreg = $completedOrgans[_j]>> - <<set $completedOrgans.deleteAt(_j),_j-->> - <<elseif $completedOrgans[_j].type == "mpregPig">> - <<set _slaveOrgans.mpregPig = $completedOrgans[_j]>> - <<set $completedOrgans.deleteAt(_j),_j-->> - <<elseif $completedOrgans[_j].type == "mpregCanine">> - <<set _slaveOrgans.mpregCanine = $completedOrgans[_j]>> - <<set $completedOrgans.deleteAt(_j),_j-->> - <<elseif $completedOrgans[_j].type == "mpregHorse">> - <<set _slaveOrgans.mpregHorse = $completedOrgans[_j]>> - <<set $completedOrgans.deleteAt(_j),_j-->> - <<elseif $completedOrgans[_j].type == "mpregCow">> - <<set _slaveOrgans.mpregCow = $completedOrgans[_j]>> - <<set $completedOrgans.deleteAt(_j),_j-->> - <<else>> - <br>Error: unrecognized organ. - <</if>> - <</if>> - <</for>> - /* read _slaveOrgans and install them when appropriate */ - /* order here is important, do not change it without good reason */ - /* eyes */ - <<if _slaveOrgans.eyes != 0>> - <<if !hasAnyCyberneticEyes($activeSlave) && getBestVision($activeSlave) === 0>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<run eyeSurgery($activeSlave, "both", "normal")>> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<set $surgeryType = "unblind">> - <br><hr> - <<include "Surgery Degradation">> - <<elseif hasBothCyberneticEyes($activeSlave)>> - <br><hr> - @@.red;Could not implant eyes on $activeSlave.slaveName: $he has ocular implants installed, visit the remote surgery to install manually.@@ - <<set $completedOrgans.push(_slaveOrgans.eyes)>> - <<else>> - <br><hr> - @@.red;Could not implant eyes on $activeSlave.slaveName: $he is not blind.@@ - <<set $completedOrgans.push(_slaveOrgans.eyes)>> - <</if>> - <</if>> - /* ears */ - <<if _slaveOrgans.ears != 0>> - <<if $activeSlave.earShape == "none">> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set $activeSlave.earShape = "normal">> - <<if $activeSlave.hears == -1>> - <<set $activeSlave.hears = 0>> - <</if>> - <<set $activeSlave.health -= 15>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<set $surgeryType = "earMinor">> - <br><hr> - <<include "Surgery Degradation">> - <<else>> - <br><hr> - @@.red;Could not implant ears on $activeSlave.slaveName: $he already has them. Additional options available under individual surgery.@@ - <<set $completedOrgans.push(_slaveOrgans.ears)>> - <</if>> - <</if>> - /* cochleae */ - <<if _slaveOrgans.cochleae != 0>> - <<if ($activeSlave.hears == -2) && $activeSlave.earImplant != 1>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set $activeSlave.hears = 0>> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<set $surgeryType = "undeafen">> - <br><hr> - <<include "Surgery Degradation">> - <<elseif $activeSlave.earImplant == 1>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set $activeSlave.hears = 0>> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<set $surgeryType = "newEars">> - <<include "Surgery Degradation">> - <<else>> - <br><hr> - @@.red;Could not implant cochleae on $activeSlave.slaveName: $he is not deaf.@@ - <<set $completedOrgans.push(_slaveOrgans.cochleae)>> - <</if>> - <</if>> - /* voice */ - <<if _slaveOrgans.voicebox != 0>> - <<if ($activeSlave.voice == 0)>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<if $activeSlave.ovaries == 1 && $activeSlave.hormoneBalance >= 200>> - <<set $activeSlave.voice = 3>> - <<elseif ($activeSlave.balls > 0) || ($activeSlave.hormoneBalance < -20)>> - <<set $activeSlave.voice = 1>> - <<else>> - <<set $activeSlave.voice = 2>> - <</if>> - <<set $activeSlave.health -= 10>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 10>> - <</if>> - <<set $surgeryType = "restoreVoice">> - <br><hr> - <<run Enunciate($activeSlave)>> - <<include "Surgery Degradation">> - <<else>> - <br><hr> - @@.red;Could not implant vocal cords on $activeSlave.slaveName: $he is not mute.@@ - <<set $completedOrgans.push(_slaveOrgans.voicebox)>> - <</if>> - <</if>> - /* foreskin */ - <<if _slaveOrgans.foreskin != 0>> - <<if ($activeSlave.foreskin == 0)>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<if $activeSlave.dick > 0>> - <<set $activeSlave.foreskin = $activeSlave.dick>> - <<elseif $activeSlave.clit > 0>> - <<set $activeSlave.foreskin = $activeSlave.clit>> - <<else>> - <<set $activeSlave.foreskin = 1>> - <</if>> - <<set $activeSlave.health -= 10>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 10>> - <</if>> - <<set $surgeryType = "addForeskin">> - <br><hr> - <<include "Surgery Degradation">> - <<else>> - <br><hr> - @@.red;Could not implant <<if $activeSlave.dick > 0>>foreskin<<else>>clitoral hood<</if>> on $activeSlave.slaveName: $he already has one.@@ - <<set $completedOrgans.push(_slaveOrgans.foreskin)>> - <</if>> - <</if>> - /* prostate */ - <<if _slaveOrgans.prostate != 0>> - <<if ($activeSlave.prostate == 0)>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set $activeSlave.prostate = 1>> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<set $surgeryType = "addProstate">> - <br><hr> - <<include "Surgery Degradation">> - <<else>> - <br><hr> - @@.red;Could not implant prostate on $activeSlave.slaveName: $he already has a prostate.@@ - <<set $completedOrgans.push(_slaveOrgans.prostate)>> - <</if>> - <</if>> - /* ovaries */ - <<if _slaveOrgans.ovaries != 0>> - <<if ($activeSlave.ovaries == 0) && ($activeSlave.vagina >= 0) && ($activeSlave.mpreg == 0) && ($activeSlave.bellyImplant == -1)>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set $activeSlave.ovaries = 1>> - <<set $activeSlave.eggType = "human">> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addOvaries">> - <br><hr> - <<include "Surgery Degradation">> - <<elseif $activeSlave.ovaries == 1>> - <br><hr> - @@.red;Could not implant ovaries on $activeSlave.slaveName: $he already has ovaries.@@ - <<set $completedOrgans.push(_slaveOrgans.ovaries)>> - <<elseif $activeSlave.vagina < 0>> - <br><hr> - @@.red;Could not implant ovaries on $activeSlave.slaveName: $he lacks a vagina.@@ - <<set $completedOrgans.push(_slaveOrgans.ovaries)>> - <<elseif $activeSlave.bellyImplant >= 0>> - <br><hr> - @@.red;Could not implant ovaries on $activeSlave.slaveName: $he has a fillable abdominal implant.@@ - <<set $completedOrgans.push(_slaveOrgans.ovaries)>> - <<elseif $activeSlave.mpreg != 0>> - <br><hr> - @@.red;Could not implant ovaries on $activeSlave.slaveName: $he has an anal womb.@@ - <<set $completedOrgans.push(_slaveOrgans.ovaries)>> - <</if>> - <</if>> - /* asexual reproduction modifiction */ - <<if _slaveOrgans.asexualReproOvaries != 0>> - <<if ($activeSlave.mpreg == 1 || $activeSlave.ovaries == 1)>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set $activeSlave.eggType = "human">> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "asexualReproOvaries">> - <br><hr> - <<include "Surgery Degradation">> - <<else>> - <br><hr> - @@.red;Could not implant modified ovary in $activeSlave.slaveName: $he has no ovaries.@@ - <<set $completedOrgans.push(_slaveOrgans.asexualReproOvaries)>> - <</if>> - <</if>> - /* pig ovaries */ - <<if _slaveOrgans.pigOvaries != 0>> - <<if ($activeSlave.ovaries == 0) && ($activeSlave.vagina >= 0) && ($activeSlave.mpreg == 0) && ($activeSlave.bellyImplant == -1)>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set $activeSlave.ovaries = 1>> - <<set $activeSlave.eggType = "pig">> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addAnimalOvaries">> - <br><hr> - <<include "Surgery Degradation">> - <<elseif $activeSlave.ovaries == 1>> - <br><hr> - @@.red;Could not implant pig ovaries on $activeSlave.slaveName: $he already has ovaries.@@ - <<set $completedOrgans.push(_slaveOrgans.pigOvaries)>> - <<elseif $activeSlave.vagina < 0>> - <br><hr> - @@.red;Could not implant pig ovaries on $activeSlave.slaveName: $he lacks a vagina.@@ - <<set $completedOrgans.push(_slaveOrgans.pigOvaries)>> - <<elseif $activeSlave.bellyImplant >= 0>> - <br><hr> - @@.red;Could not implant pig ovaries on $activeSlave.slaveName: $he has a fillable abdominal implant.@@ - <<set $completedOrgans.push(_slaveOrgans.pigOvaries)>> - <<elseif $activeSlave.mpreg != 0>> - <br><hr> - @@.red;Could not implant pig ovaries on $activeSlave.slaveName: $he has an anal womb.@@ - <<set $completedOrgans.push(_slaveOrgans.pigOvaries)>> - <</if>> - <</if>> - /* dog ovaries */ - <<if _slaveOrgans.canineOvaries != 0>> - <<if ($activeSlave.ovaries == 0) && ($activeSlave.vagina >= 0) && ($activeSlave.mpreg == 0) && ($activeSlave.bellyImplant == -1)>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set $activeSlave.ovaries = 1>> - <<set $activeSlave.eggType = "dog">> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addAnimalOvaries">> - <br><hr> - <<include "Surgery Degradation">> - <<elseif $activeSlave.ovaries == 1>> - <br><hr> - @@.red;Could not implant dog ovaries on $activeSlave.slaveName: $he already has ovaries.@@ - <<set $completedOrgans.push(_slaveOrgans.canineOvaries)>> - <<elseif $activeSlave.vagina < 0>> - <br><hr> - @@.red;Could not implant dog ovaries on $activeSlave.slaveName: $he lacks a vagina.@@ - <<set $completedOrgans.push(_slaveOrgans.canineOvaries)>> - <<elseif $activeSlave.bellyImplant >= 0>> - <br><hr> - @@.red;Could not implant dog ovaries on $activeSlave.slaveName: $he has a fillable abdominal implant.@@ - <<set $completedOrgans.push(_slaveOrgans.canineOvaries)>> - <<elseif $activeSlave.mpreg != 0>> - <br><hr> - @@.red;Could not implant dog ovaries on $activeSlave.slaveName: $he has an anal womb.@@ - <<set $completedOrgans.push(_slaveOrgans.canineOvaries)>> - <</if>> - <</if>> - /* horse ovaries */ - <<if _slaveOrgans.horseOvaries != 0>> - <<if ($activeSlave.ovaries == 0) && ($activeSlave.vagina >= 0) && ($activeSlave.mpreg == 0) && ($activeSlave.bellyImplant == -1)>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set $activeSlave.ovaries = 1>> - <<set $activeSlave.eggType = "horse">> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addAnimalOvaries">> - <br><hr> - <<include "Surgery Degradation">> - <<elseif $activeSlave.ovaries == 1>> - <br><hr> - @@.red;Could not implant horse ovaries on $activeSlave.slaveName: $he already has ovaries.@@ - <<set $completedOrgans.push(_slaveOrgans.horseOvaries)>> - <<elseif $activeSlave.vagina < 0>> - <br><hr> - @@.red;Could not implant horse ovaries on $activeSlave.slaveName: $he lacks a vagina.@@ - <<set $completedOrgans.push(_slaveOrgans.horseOvaries)>> - <<elseif $activeSlave.bellyImplant >= 0>> - <br><hr> - @@.red;Could not implant horse ovaries on $activeSlave.slaveName: $he has a fillable abdominal implant.@@ - <<set $completedOrgans.push(_slaveOrgans.horseOvaries)>> - <<elseif $activeSlave.mpreg != 0>> - <br><hr> - @@.red;Could not implant horse ovaries on $activeSlave.slaveName: $he has an anal womb.@@ - <<set $completedOrgans.push(_slaveOrgans.horseOvaries)>> - <</if>> - <</if>> - /* cow ovaries */ - <<if _slaveOrgans.cowOvaries != 0>> - <<if ($activeSlave.ovaries == 0) && ($activeSlave.vagina >= 0) && ($activeSlave.mpreg == 0) && ($activeSlave.bellyImplant == -1)>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set $activeSlave.ovaries = 1>> - <<set $activeSlave.eggType = "cow">> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "addAnimalOvaries">> - <br><hr> - <<include "Surgery Degradation">> - <<elseif $activeSlave.ovaries == 1>> - <br><hr> - @@.red;Could not implant cow ovaries on $activeSlave.slaveName: $he already has ovaries.@@ - <<set $completedOrgans.push(_slaveOrgans.cowOvaries)>> - <<elseif $activeSlave.vagina < 0>> - <br><hr> - @@.red;Could not implant cow ovaries on $activeSlave.slaveName: $he lacks a vagina.@@ - <<set $completedOrgans.push(_slaveOrgans.cowOvaries)>> - <<elseif $activeSlave.bellyImplant >= 0>> - <br><hr> - @@.red;Could not implant cow ovaries on $activeSlave.slaveName: $he has a fillable abdominal implant.@@ - <<set $completedOrgans.push(_slaveOrgans.cowOvaries)>> - <<elseif $activeSlave.mpreg != 0>> - <br><hr> - @@.red;Could not implant cow ovaries on $activeSlave.slaveName: $he has an anal womb.@@ - <<set $completedOrgans.push(_slaveOrgans.cowOvaries)>> - <</if>> - <</if>> - /* male preg */ - <<if _slaveOrgans.mpreg != 0>> - <<if ($activeSlave.ovaries == 0) && ($activeSlave.vagina < 0) && ($activeSlave.mpreg == 0) && ($activeSlave.bellyImplant == -1)>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set $activeSlave.mpreg = 1>> - <<set $activeSlave.eggType = "human">> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.health -= 40>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "mpreg">> - <br><hr> - <<include "Surgery Degradation">> - <<elseif $activeSlave.ovaries == 1>> - <br><hr> - @@.red;Could not implant anal womb on $activeSlave.slaveName: $he has ovaries.@@ - <<set $completedOrgans.push(_slaveOrgans.mpreg)>> - <<elseif $activeSlave.vagina < 0>> - <br><hr> - @@.red;Could not implant anal womb on $activeSlave.slaveName: $he has a vagina.@@ - <<set $completedOrgans.push(_slaveOrgans.mpreg)>> - <<elseif $activeSlave.bellyImplant >= 0>> - <br><hr> - @@.red;Could not implant anal womb on $activeSlave.slaveName: $he has a fillable abdominal implant.@@ - <<set $completedOrgans.push(_slaveOrgans.mpreg)>> - <<elseif $activeSlave.mpreg == 1>> - <br><hr> - @@.red;Could not implant anal womb on $activeSlave.slaveName: $he already has an anal womb.@@ - <<set $completedOrgans.push(_slaveOrgans.mpreg)>> - <</if>> - <</if>> - /* male pig preg */ - <<if _slaveOrgans.mpregPig != 0>> - <<if ($activeSlave.ovaries == 0) && ($activeSlave.vagina < 0) && ($activeSlave.mpreg == 0) && ($activeSlave.bellyImplant == -1)>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set $activeSlave.mpreg = 1>> - <<set $activeSlave.eggType = "pig">> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.health -= 40>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "mpregAnimal">> - <br><hr> - <<include "Surgery Degradation">> - <<elseif $activeSlave.ovaries == 1>> - <br><hr> - @@.red;Could not implant pig anal womb on $activeSlave.slaveName: $he has ovaries.@@ - <<set $completedOrgans.push(_slaveOrgans.mpregPig)>> - <<elseif $activeSlave.vagina < 0>> - <br><hr> - @@.red;Could not implant pig anal womb on $activeSlave.slaveName: $he has a vagina.@@ - <<set $completedOrgans.push(_slaveOrgans.mpregPig)>> - <<elseif $activeSlave.bellyImplant >= 0>> - <br><hr> - @@.red;Could not implant pig anal womb on $activeSlave.slaveName: $he has a fillable abdominal implant.@@ - <<set $completedOrgans.push(_slaveOrgans.mpregPig)>> - <<elseif $activeSlave.mpreg != 0>> - <br><hr> - @@.red;Could not implant pig anal womb on $activeSlave.slaveName: $he already has an anal womb.@@ - <<set $completedOrgans.push(_slaveOrgans.mpregPig)>> - <</if>> - <</if>> - /* male dog preg */ - <<if _slaveOrgans.mpregCanine != 0>> - <<if ($activeSlave.ovaries == 0) && ($activeSlave.vagina < 0) && ($activeSlave.mpreg == 0) && ($activeSlave.bellyImplant == -1)>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set $activeSlave.mpreg = 1>> - <<set $activeSlave.eggType = "dog">> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.health -= 40>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "mpregAnimal">> - <br><hr> - <<include "Surgery Degradation">> - <<elseif $activeSlave.ovaries == 1>> - <br><hr> - @@.red;Could not implant dog anal womb on $activeSlave.slaveName: $he has ovaries.@@ - <<set $completedOrgans.push(_slaveOrgans.mpregCanine)>> - <<elseif $activeSlave.vagina < 0>> - <br><hr> - @@.red;Could not implant dog anal womb on $activeSlave.slaveName: $he has a vagina.@@ - <<set $completedOrgans.push(_slaveOrgans.mpregCanine)>> - <<elseif $activeSlave.bellyImplant >= 0>> - <br><hr> - @@.red;Could not implant dog anal womb on $activeSlave.slaveName: $he has a fillable abdominal implant.@@ - <<set $completedOrgans.push(_slaveOrgans.mpregCanine)>> - <<elseif $activeSlave.mpreg != 0>> - <br><hr> - @@.red;Could not implant dog anal womb on $activeSlave.slaveName: $he already has an anal womb.@@ - <<set $completedOrgans.push(_slaveOrgans.mpregCanine)>> - <</if>> - <</if>> - /* male horse preg */ - <<if _slaveOrgans.mpregHorse != 0>> - <<if ($activeSlave.ovaries == 0) && ($activeSlave.vagina < 0) && ($activeSlave.mpreg == 0) && ($activeSlave.bellyImplant == -1)>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set $activeSlave.mpreg = 1>> - <<set $activeSlave.eggType = "horse">> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.health -= 40>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "mpregAnimal">> - <br><hr> - <<include "Surgery Degradation">> - <<elseif $activeSlave.ovaries == 1>> - <br><hr> - @@.red;Could not implant horse anal womb on $activeSlave.slaveName: $he has ovaries.@@ - <<set $completedOrgans.push(_slaveOrgans.mpregHorse)>> - <<elseif $activeSlave.vagina < 0>> - <br><hr> - @@.red;Could not implant horse anal womb on $activeSlave.slaveName: $he has a vagina.@@ - <<set $completedOrgans.push(_slaveOrgans.mpregHorse)>> - <<elseif $activeSlave.bellyImplant >= 0>> - <br><hr> - @@.red;Could not implant horse anal womb on $activeSlave.slaveName: $he has a fillable abdominal implant.@@ - <<set $completedOrgans.push(_slaveOrgans.mpregHorse)>> - <<elseif $activeSlave.mpreg != 0>> - <br><hr> - @@.red;Could not implant horse anal womb on $activeSlave.slaveName: $he already has an anal womb.@@ - <<set $completedOrgans.push(_slaveOrgans.mpregHorse)>> - <</if>> - <</if>> - /* male cow preg */ - <<if _slaveOrgans.mpregCow != 0>> - <<if ($activeSlave.ovaries == 0) && ($activeSlave.vagina < 0) && ($activeSlave.mpreg == 0) && ($activeSlave.bellyImplant == -1)>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set $activeSlave.mpreg = 1>> - <<set $activeSlave.eggType = "cow">> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.health -= 40>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "mpregAnimal">> - <br><hr> - <<include "Surgery Degradation">> - <<elseif $activeSlave.ovaries == 1>> - <br><hr> - @@.red;Could not implant cow anal womb on $activeSlave.slaveName: $he has ovaries.@@ - <<set $completedOrgans.push(_slaveOrgans.mpregCow)>> - <<elseif $activeSlave.vagina < 0>> - <br><hr> - @@.red;Could not implant cow anal womb on $activeSlave.slaveName: $he has a vagina.@@ - <<set $completedOrgans.push(_slaveOrgans.mpregCow)>> - <<elseif $activeSlave.bellyImplant >= 0>> - <br><hr> - @@.red;Could not implant cow anal womb on $activeSlave.slaveName: $he has a fillable abdominal implant.@@ - <<set $completedOrgans.push(_slaveOrgans.mpregCow)>> - <<elseif $activeSlave.mpreg != 0>> - <br><hr> - @@.red;Could not implant cow anal womb on $activeSlave.slaveName: $he already has an anal womb.@@ - <<set $completedOrgans.push(_slaveOrgans.mpregCow)>> - <</if>> - <</if>> - /* ovary renewal */ - <<if _slaveOrgans.freshOvaries != 0>> - <<if (($activeSlave.ovaries == 1) || ($activeSlave.mpreg == 1)) && ($activeSlave.bellyImplant == -1) && ($activeSlave.physicalAge < 60)>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<if $activeSlave.ovaryAge >= 47>> - <<set $activeSlave.ovaryAge = 45>> - <<else>> - <<set $activeSlave.ovaryAge -= 2>> /* It shouldn't matter if this goes negative as it is just a signal for menopause to occur. */ - <</if>> - <<if $activeSlave.preg < 0>> - <<set $activeSlave.preg = 0>> - <</if>> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXX == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyAgeXX = ($activeSlave.physicalAge+1)>> - <</if>> - <<else>> - <<if $activeSlave.physicalAge >= $fertilityAge>> - <<set $activeSlave.pubertyXX = 1>> - <</if>> - <</if>> - <</if>> - <<set $surgeryType = "freshOvaries">> - <br><hr> - <<include "Surgery Degradation">> - <<elseif ($activeSlave.physicalAge >= 70)>> - <br><hr> - @@.red;This slave's body is too old to handle pregnancy.@@ - <<elseif ($activeSlave.mpreg == 0 && $activeSlave.ovaries == 0) || $activeSlave.bellyImplant != -1>> - <br><hr> - @@.red;This slave lacks a viable womb to accept fertile ovaries.@@ - <<set $completedOrgans.push(_slaveOrgans.freshOvaries)>> - <</if>> - <</if>> - /* penis */ - <<if _slaveOrgans.penis != 0>> - <<if $activeSlave.dick == 0>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<if $activeSlave.prostate == 0>> - <<set $activeSlave.prostate = 1>> - <</if>> - <<set $activeSlave.dick = 2>> - <<set $activeSlave.clit = 0>> - <<set $activeSlave.foreskin = $activeSlave.dick>> - <<set $activeSlave.health -= 20>> - <<set $surgeryType = "addDick">> - <br><hr> - <<include "Surgery Degradation">> - <<else>> - @@.red;Could not implant penis on $activeSlave.slaveName: $he already has a penis.@@ - <<set $completedOrgans.push(_slaveOrgans.penis)>> - <</if>> - <</if>> - /* testicles */ - <<if _slaveOrgans.testicles != 0>> - <<if ($activeSlave.dick >= 1) && ($activeSlave.balls == 0)>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<if $activeSlave.prostate == 0>> - <<set $activeSlave.prostate = 1>> - <</if>> - <<set $activeSlave.balls = 2>> - <<set $activeSlave.ballType = "human">> - <<set $activeSlave.scrotum = 2>> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXY == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyAgeXY = ($activeSlave.physicalAge+1)>> - <</if>> + <<for _k = 0; _k < $adjustProsthetics.length; _k++>> + <<set _p = $adjustProsthetics[_k]>> + <<if _p.slaveID == $activeSlave.ID && _p.workLeft <= 0>> + <<set $adjustProsthetics.splice(_k, 1), _k-->> + <<set addProsthetic($activeSlave, _p.id)>> + <br><hr> + <<switch _p.id>> + <<case "ocular">> + <<if getBestVision($activeSlave) === 0>> + <<run eyeSurgery($activeSlave, "both", "cybernetic"), cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> + <<set $activeSlave.health -= 20, $surgeryType = "ocular implant">> + <<include "Surgery Degradation">> <<else>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyXY = 1>> - <</if>> + //Since $he has working eyes the <<= setup.prosthetics.ocular.name>> will be put into storage.// <</if>> - <</if>> - <<set $surgeryType = "addBalls">> - <br><hr> - <<include "Surgery Degradation">> - <<elseif $activeSlave.dick == 0>> - <br><hr> - @@.red;Could not implant testicles on $activeSlave.slaveName: $he lacks a penis.@@ - <<set $completedOrgans.push(_slaveOrgans.testicles)>> - <<else>> - <br><hr> - @@.red;Could not implant testicles on $activeSlave.slaveName: $he already has testicles.@@ - <<set $completedOrgans.push(_slaveOrgans.testicles)>> - <</if>> - <</if>> - /* pig testicles */ - <<if _slaveOrgans.pigTesticles != 0>> - <<if ($activeSlave.dick >= 1) && ($activeSlave.balls == 0)>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set $activeSlave.balls = 3>> - <<set $activeSlave.scrotum = 3>> - <<set $activeSlave.ballType = "pig">> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXY == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyAgeXY = ($activeSlave.physicalAge+1)>> - <</if>> + <<case "cochlear">> + <<if $activeSlave.hears != 0>> + <<set $activeSlave.earImplant = 1, cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave), $activeSlave.health -= 20, $surgeryType = "cochlear implant">> + <<include "Surgery Degradation">> <<else>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyXY = 1>> - <</if>> + //Since $he has working ears the <<= setup.prosthetics.cochlear.name>> will be put into storage.// <</if>> - <</if>> - <<set $surgeryType = "addAnimalBalls">> - <br><hr> - <<include "Surgery Degradation">> - <<elseif $activeSlave.dick == 0>> - <br><hr> - @@.red;Could not implant pig testicles on $activeSlave.slaveName: $he lacks a penis.@@ - <<set $completedOrgans.push(_slaveOrgans.pigTesticles)>> - <<else>> - <br><hr> - @@.red;Could not implant pig testicles on $activeSlave.slaveName: $he already has testicles.@@ - <<set $completedOrgans.push(_slaveOrgans.pigTesticles)>> - <</if>> - <</if>> - /* dog testicles */ - <<if _slaveOrgans.canineTesticles != 0>> - <<if ($activeSlave.dick >= 0) && ($activeSlave.balls == 0)>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set $activeSlave.balls = 2>> - <<set $activeSlave.ballType = "dog">> - <<set $activeSlave.scrotum = 2>> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXY == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyAgeXY = ($activeSlave.physicalAge+1)>> - <</if>> + <<case "electrolarynx">> + <<if $activeSlave.voice <= 0>> + <<set $activeSlave.electrolarynx = 1, $activeSlave.voice = 2, cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave), $activeSlave.health -= 20, $surgeryType = "electrolarynx">> + <<include "Surgery Degradation">> <<else>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyXY = 1>> - <</if>> + //Since $he has a voice the <<= setup.prosthetics.electrolarynx.name>> will be put into storage.// <</if>> - <</if>> - <br><hr> - <<set $surgeryType = "addAnimalBalls">> - <br><hr> - <<include "Surgery Degradation">> - <<elseif $activeSlave.dick == 0>> - <br><hr> - @@.red;Could not implant dog testicles on $activeSlave.slaveName: $he lacks a penis.@@ - <<set $completedOrgans.push(_slaveOrgans.canineTesticles)>> - <<else>> - <br><hr> - @@.red;Could not implant dog testicles on $activeSlave.slaveName: $he already has testicles.@@ - <<set $completedOrgans.push(_slaveOrgans.canineTesticles)>> - <</if>> - <</if>> - /* horse testicles */ - <<if _slaveOrgans.horseTesticles != 0>> - <<if ($activeSlave.dick >= 1) && ($activeSlave.balls == 0)>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set $activeSlave.balls = 3>> - <<set $activeSlave.scrotum = 3>> - <<set $activeSlave.ballType = "horse">> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXY == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyAgeXY = ($activeSlave.physicalAge+1)>> - <</if>> + <<case "interfaceP1">> + <<if hasAnyNaturalLimbs($activeSlave)>> + //Since $he has at least one healthy limb the <<= setup.prosthetics.interfaceP1.name>> will be put into storage.// + <<elseif $activeSlave.PLimb == 2>> + //Since $he already has <<= addA(setup.prosthetics.interfaceP2.name)>> installed the <<= setup.prosthetics.interfaceP1.name>> will be put into storage.// <<else>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyXY = 1>> - <</if>> + <<set $activeSlave.PLimb = 1, cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave), $activeSlave.health -= 20, $surgeryType = "PLimb interface1">> + <<include "Surgery Degradation">> <</if>> - <</if>> - <<set $surgeryType = "addAnimalBalls">> - <br><hr> - <<include "Surgery Degradation">> - <<elseif $activeSlave.dick == 0>> - <br><hr> - @@.red;Could not implant horse testicles on $activeSlave.slaveName: $he lacks a penis.@@ - <<set $completedOrgans.push(_slaveOrgans.horseTesticles)>> - <<else>> - <br><hr> - @@.red;Could not implant horse testicles on $activeSlave.slaveName: $he already has testicles.@@ - <<set $completedOrgans.push(_slaveOrgans.horseTesticles)>> - <</if>> - <</if>> - /* cow testicles */ - <<if _slaveOrgans.cowTesticles != 0>> - <<if ($activeSlave.dick >= 1) && ($activeSlave.balls == 0)>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set $activeSlave.balls = 3>> - <<set $activeSlave.scrotum = 3>> - <<set $activeSlave.ballType = "cow">> - <<set $activeSlave.health -= 20>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 20>> - <</if>> - <<if $activeSlave.pubertyXY == 0>> - <<if $precociousPuberty == 1>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyAgeXY = ($activeSlave.physicalAge+1)>> - <</if>> + <<case "interfaceP2">> + <<if hasAllNaturalLimbs($activeSlave)>> + //Since $he has no amputated limbs the <<= setup.prosthetics.interfaceP2.name>> will be put into storage.// + <<elseif $activeSlave.PLimb == 1>> + <<set $activeSlave.PLimb = 2, cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave), $activeSlave.health -= 5, $surgeryType = "PLimb interface3">> + <<include "Surgery Degradation">> <<else>> - <<if $activeSlave.physicalAge >= $potencyAge>> - <<set $activeSlave.pubertyXY = 1>> - <</if>> + <<set $activeSlave.PLimb = 2, cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave), $activeSlave.health -= 20, $surgeryType = "PLimb interface2">> + <<include "Surgery Degradation">> <</if>> - <</if>> - <<set $surgeryType = "addAnimalBalls">> - <br><hr> - <<include "Surgery Degradation">> - <<elseif $activeSlave.dick == 0>> - <br><hr> - @@.red;Could not implant cow testicles on $activeSlave.slaveName: $he lacks a penis.@@ - <<set $completedOrgans.push(_slaveOrgans.cowTesticles)>> - <<else>> - <br><hr> - @@.red;Could not implant cow testicles on $activeSlave.slaveName: $he already has testicles.@@ - <<set $completedOrgans.push(_slaveOrgans.cowTesticles)>> - <</if>> - <</if>> - /* scrotum */ - <<if _slaveOrgans.scrotum != 0>> - <<if ($activeSlave.scrotum == 0) && ($activeSlave.balls >= 1)>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set $activeSlave.scrotum = $activeSlave.balls>> - <<set $activeSlave.health -= 10>> - <<if $organFarmUpgrade == 2>> - <<set $activeSlave.chem += 10>> - <</if>> - <<set $surgeryType = "addScrotum">> - <br><hr> - <<include "Surgery Degradation">> - <<elseif $activeSlave.balls == 0>> - <br><hr> - @@.red;Could not implant scrotum on $activeSlave.slaveName: $he lacks testicles.@@ - <<set $completedOrgans.push(_slaveOrgans.scrotum)>> - <<else>> - <br><hr> - @@.red;Could not implant scrotum on $activeSlave.slaveName: $he already has a scrotum.@@ - <<set $completedOrgans.push(_slaveOrgans.scrotum)>> - <</if>> - <</if>> - /* finished checking _slaveOrgans */ - <</if>> /* check _organCount closed */ - - /* start prosthetics */ - <<if _prostheticCount > 0>> - <<for _k = 0; _k < $adjustProsthetics.length; _k++>> - <<set _p = $adjustProsthetics[_k]>> - <<if _p.slaveID == $activeSlave.ID && _p.workLeft <= 0>> - <<set $adjustProsthetics.splice(_k, 1), _k-->> - <<set addProsthetic($activeSlave, _p.id)>> - <br><hr> - <<switch _p.id>> - <<case "ocular">> - <<if getBestVision($activeSlave) === 0>> - <<run eyeSurgery($activeSlave, "both", "cybernetic"), cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<set $activeSlave.health -= 20, $surgeryType = "ocular implant">> - <<include "Surgery Degradation">> - <<else>> - //Since $he has working eyes the <<= setup.prosthetics.ocular.name>> will be put into storage.// - <</if>> - <<case "cochlear">> - <<if $activeSlave.hears != 0>> - <<set $activeSlave.earImplant = 1, cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave), $activeSlave.health -= 20, $surgeryType = "cochlear implant">> - <<include "Surgery Degradation">> - <<else>> - //Since $he has working ears the <<= setup.prosthetics.cochlear.name>> will be put into storage.// - <</if>> - <<case "electrolarynx">> - <<if $activeSlave.voice <= 0>> - <<set $activeSlave.electrolarynx = 1, $activeSlave.voice = 2, cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave), $activeSlave.health -= 20, $surgeryType = "electrolarynx">> - <<include "Surgery Degradation">> - <<else>> - //Since $he has a voice the <<= setup.prosthetics.electrolarynx.name>> will be put into storage.// - <</if>> - <<case "interfaceP1">> - <<if hasAnyNaturalLimbs($activeSlave)>> - //Since $he has at least one healthy limb the <<= setup.prosthetics.interfaceP1.name>> will be put into storage.// - <<elseif $activeSlave.PLimb == 2>> - //Since $he already has <<= addA(setup.prosthetics.interfaceP2.name)>> installed the <<= setup.prosthetics.interfaceP1.name>> will be put into storage.// - <<else>> - <<set $activeSlave.PLimb = 1, cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave), $activeSlave.health -= 20, $surgeryType = "PLimb interface1">> - <<include "Surgery Degradation">> - <</if>> - <<case "interfaceP2">> - <<if hasAllNaturalLimbs($activeSlave)>> - //Since $he has no amputated limbs the <<= setup.prosthetics.interfaceP2.name>> will be put into storage.// - <<elseif $activeSlave.PLimb == 1>> - <<set $activeSlave.PLimb = 2, cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave), $activeSlave.health -= 5, $surgeryType = "PLimb interface3">> - <<include "Surgery Degradation">> - <<else>> - <<set $activeSlave.PLimb = 2, cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave), $activeSlave.health -= 20, $surgeryType = "PLimb interface2">> - <<include "Surgery Degradation">> - <</if>> - <<case "basicL" "sexL" "beautyL" "combatL" "cyberneticL">> - <<if $activeSlave.fuckdoll != 0>> - //Since a Fuckdoll can't use prosthetic limbs the <<= setup.prosthetics[_p.id].name>> will be put into storage.// - <<elseif hasAllNaturalLimbs($activeSlave)>> - //Since $he needs an amputated limb to attach prosthetics the <<= setup.prosthetics[_p.id].name>> will be put into storage.// - <<elseif $activeSlave.PLimb == 0>> - //Since $he must have a prosthetic interface installed to attach prosthetic limbs the <<= setup.prosthetics[_p.id].name>> will be put into storage.// + <<case "basicL" "sexL" "beautyL" "combatL" "cyberneticL">> + <<if $activeSlave.fuckdoll != 0>> + //Since a Fuckdoll can't use prosthetic limbs the <<= setup.prosthetics[_p.id].name>> will be put into storage.// + <<elseif hasAllNaturalLimbs($activeSlave)>> + //Since $he needs an amputated limb to attach prosthetics the <<= setup.prosthetics[_p.id].name>> will be put into storage.// + <<elseif $activeSlave.PLimb == 0>> + //Since $he must have a prosthetic interface installed to attach prosthetic limbs the <<= setup.prosthetics[_p.id].name>> will be put into storage.// + <<else>> + <<if _p.id == "basicL">> + <<set _state = App.Desc.limbChange().currentLimbs($activeSlave), _change = upgradeLimbs($activeSlave, 2)>> + <<if _change>> + <<= App.Desc.limbChange().reaction($activeSlave, _state)>> + <<else>> + //Since $he already has more advanced prosthetic limbs attached the <<= setup.prosthetics.basicL.name>> will be put into storage.// + <</if>> + <<elseif _p.id == "sexL">> + <<set _state = App.Desc.limbChange().currentLimbs($activeSlave), _change = upgradeLimbs($activeSlave, 3)>> + <<if _change>> + <<= App.Desc.limbChange().reaction($activeSlave, _state)>> + <<else>> + //Since $he already has advanced prosthetic limbs attached the <<= setup.prosthetics.sexL.name>> will be put into storage.// + <</if>> + <<elseif _p.id == "beautyL">> + <<set _state = App.Desc.limbChange().currentLimbs($activeSlave), _change = upgradeLimbs($activeSlave, 4)>> + <<if _change>> + <<= App.Desc.limbChange().reaction($activeSlave, _state)>> + <<else>> + //Since $he already has advanced prosthetic limbs attached the <<= setup.prosthetics.beautyL.name>> will be put into storage.// + <</if>> + <<elseif _p.id == "combatL">> + <<set _state = App.Desc.limbChange().currentLimbs($activeSlave), _change = upgradeLimbs($activeSlave, 5)>> + <<if _change>> + <<= App.Desc.limbChange().reaction($activeSlave, _state)>> + <<else>> + //Since $he already has advanced prosthetic limbs attached the <<= setup.prosthetics.combatL.name>> will be put into storage.// + <</if>> <<else>> - <<if _p.id == "basicL">> + <<if $activeSlave.PLimb == 2>> <<set _state = App.Desc.limbChange().currentLimbs($activeSlave), _change = upgradeLimbs($activeSlave, 2)>> <<if _change>> <<= App.Desc.limbChange().reaction($activeSlave, _state)>> - <<else>> - //Since $he already has more advanced prosthetic limbs attached the <<= setup.prosthetics.basicL.name>> will be put into storage.// - <</if>> - <<elseif _p.id == "sexL">> - <<set _state = App.Desc.limbChange().currentLimbs($activeSlave), _change = upgradeLimbs($activeSlave, 3)>> - <<if _change>> - <<= App.Desc.limbChange().reaction($activeSlave, _state)>> - <<else>> - //Since $he already has advanced prosthetic limbs attached the <<= setup.prosthetics.sexL.name>> will be put into storage.// - <</if>> - <<elseif _p.id == "beautyL">> - <<set _state = App.Desc.limbChange().currentLimbs($activeSlave), _change = upgradeLimbs($activeSlave, 4)>> - <<if _change>> - <<= App.Desc.limbChange().reaction($activeSlave, _state)>> - <<else>> - //Since $he already has advanced prosthetic limbs attached the <<= setup.prosthetics.beautyL.name>> will be put into storage.// - <</if>> - <<elseif _p.id == "combatL">> - <<set _state = App.Desc.limbChange().currentLimbs($activeSlave), _change = upgradeLimbs($activeSlave, 5)>> - <<if _change>> - <<= App.Desc.limbChange().reaction($activeSlave, _state)>> - <<else>> - //Since $he already has advanced prosthetic limbs attached the <<= setup.prosthetics.combatL.name>> will be put into storage.// <</if>> <<else>> - <<if $activeSlave.PLimb == 2>> - <<set _state = App.Desc.limbChange().currentLimbs($activeSlave), _change = upgradeLimbs($activeSlave, 2)>> - <<if _change>> - <<= App.Desc.limbChange().reaction($activeSlave, _state)>> - <</if>> - <<else>> - //Since $he must have <<= addA(setup.prosthetics.interfaceP2.name)>> installed to attach cybernetic limbs the <<= setup.prosthetics.cyberneticL.name>> will be put into storage.// - <</if>> + //Since $he must have <<= addA(setup.prosthetics.interfaceP2.name)>> installed to attach cybernetic limbs the <<= setup.prosthetics.cyberneticL.name>> will be put into storage.// <</if>> <</if>> - <<case "interfaceTail">> - <<set $activeSlave.PTail = 1, $activeSlave.tail = "none", $activeSlave.tailColor = "none", cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave), $activeSlave.health -= 10, $surgeryType = "tailInterface">> - <<include "Surgery Degradation">> - <<case "modT" "sexT" "combatT">> - <<if $activeSlave.PTail == 0>> - //Since $he must have <<= addA(setup.prosthetics.interfaceTail.name)>> installed to attach tails the <<= setup.prosthetics[_p.id].name>> will be put into storage.// - <<elseif $activeSlave.tail != "none">> - //Since $he currently has a tail attached the <<= setup.prosthetics[_p.id].name>> will be put into storage.// - <<elseif _p.id == "modT">> - //Since installing <<= addA(setup.prosthetics.modT.name)>> is complicated it can't be automated.// - /*Reason: there are different designs player can choose from.*/ - <<elseif _p.id == "combatT">> - <<set $prostheticsConfig = "attachTail", $activeSlave.tail = "combat", $activeSlave.tailColor = "jet black">> - <<include "Prosthetics Configuration">> - <<elseif _p.id == "sexT">> - <<set $prostheticsConfig = "attachTail", $activeSlave.tail = "sex", $activeSlave.tailColor = "pink">> - <<include "Prosthetics Configuration">> - <</if>> - <<default>> - //Since there is no automated procedure to implant/attach <<= setup.prosthetics[_p.id].name>> it will be put into storage.// - <</switch>> - <br> - <</if>> - <</for>> - <</if>> - /* end prosthetics */ + <</if>> + <<case "interfaceTail">> + <<set $activeSlave.PTail = 1, $activeSlave.tail = "none", $activeSlave.tailColor = "none", cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave), $activeSlave.health -= 10, $surgeryType = "tailInterface">> + <<include "Surgery Degradation">> + <<case "modT" "sexT" "combatT">> + <<if $activeSlave.PTail == 0>> + //Since $he must have <<= addA(setup.prosthetics.interfaceTail.name)>> installed to attach tails the <<= setup.prosthetics[_p.id].name>> will be put into storage.// + <<elseif $activeSlave.tail != "none">> + //Since $he currently has a tail attached the <<= setup.prosthetics[_p.id].name>> will be put into storage.// + <<elseif _p.id == "modT">> + //Since installing <<= addA(setup.prosthetics.modT.name)>> is complicated it can't be automated.// + /*Reason: there are different designs player can choose from.*/ + <<elseif _p.id == "combatT">> + <<set $prostheticsConfig = "attachTail", $activeSlave.tail = "combat", $activeSlave.tailColor = "jet black">> + <<include "Prosthetics Configuration">> + <<elseif _p.id == "sexT">> + <<set $prostheticsConfig = "attachTail", $activeSlave.tail = "sex", $activeSlave.tailColor = "pink">> + <<include "Prosthetics Configuration">> + <</if>> + <<default>> + //Since there is no automated procedure to implant/attach <<= setup.prosthetics[_p.id].name>> it will be put into storage.// + <</switch>> + <br> + <</if>> + <</for>> /* updates the interrogated slave */ <<set $slaves[_i] = $activeSlave>> <</for>> /* end of the $slaves loop */ diff --git a/src/uncategorized/remoteSurgery.tw b/src/uncategorized/remoteSurgery.tw index 22ca773d6af76fe5ac6eb2732a80fdce611a1504..8378cd551120c38ca4d53a4496b4170fe5f9b3d4 100644 --- a/src/uncategorized/remoteSurgery.tw +++ b/src/uncategorized/remoteSurgery.tw @@ -1908,13 +1908,17 @@ <</if>> </div> -<div class="indent"> - <<if $organFarmUpgrade >= 1>> /* ORGAN FARM */ - <<if $activeSlave.indentureRestrictions < 2>> - <<include "organFarmOptions">> - <</if>> - <</if>> /* CLOSES ORGAN FARM */ -</div> +<<if $organFarmUpgrade >= 1 && $activeSlave.indentureRestrictions < 2>> + <h2>Organ Farm</h2> + <h3>Grow new organs</h3> + <div class="indent"> + <<print App.Medicine.OrganFarm.growActions($activeSlave, "$activeSlave")>> + </div> + <h3>Implant organs</h3> + <div class="indent"> + <<print App.Medicine.OrganFarm.implantActions($activeSlave, "$activeSlave")>> + </div> +<</if>> <h3>Perform more extreme surgery:</h3> diff --git a/src/zz1-last/initOrganFarm.js b/src/zz1-last/initOrganFarm.js new file mode 100644 index 0000000000000000000000000000000000000000..4c1d2e41d1cc0d82cc1072adf0a1d640af4be26b --- /dev/null +++ b/src/zz1-last/initOrganFarm.js @@ -0,0 +1 @@ +App.Medicine.OrganFarm.init();