diff --git a/src/js/health.js b/src/js/health.js index 4e7d09d9896c10b9e76dc2133fef486d0ba9c8fb..20613e8d670ea8d76f15d317ae7954ddff06348d 100644 --- a/src/js/health.js +++ b/src/js/health.js @@ -69,11 +69,14 @@ globalThis.healthCure = function(slave, cure) { * Surgical procedures also depend on the PC's medicine skill * @param {App.Entity.SlaveState} slave * @param {number} damage + * @param {boolean} [cheat] * @returns {void} */ -globalThis.surgeryDamage = function(slave, damage) { - const playerSkillFactor = 1 + Math.clamp(Math.pow(V.PC.skill.medicine / 100, 2), 0, 1); - healthDamage(slave, Math.trunc(damage / playerSkillFactor)); +globalThis.surgeryDamage = function(slave, damage, cheat = false) { + if (!cheat) { + const playerSkillFactor = 1 + Math.clamp(Math.pow(V.PC.skill.medicine / 100, 2), 0, 1); + healthDamage(slave, Math.trunc(damage / playerSkillFactor)); + } }; /** diff --git a/src/npc/surgery/surgery.js b/src/npc/surgery/surgery.js index 1a51b33059b06747cda05db44392ad27d8614edd..4777bc268a2e2e0c4e56966a2663940ffbacd767 100644 --- a/src/npc/surgery/surgery.js +++ b/src/npc/surgery/surgery.js @@ -10,16 +10,17 @@ * @param {number} [costs] money costs * @param {number} [hCosts] health costs * @param {string} [surgeryType] + * @param {boolean} [cheat] * @returns {FC.Medicine.Surgery.Procedure} */ -App.Medicine.Surgery.makeOption = function(typeId, label, effect, desc, action, costs, hCosts, surgeryType) { +App.Medicine.Surgery.makeOption = function(typeId, label, effect, desc, action, costs, hCosts, surgeryType, cheat = false) { return { typeId: typeId, label: label, targetEffect: effect, description: desc, - costs: costs, - healthCosts: hCosts, + costs: (cheat) ? 0 : costs, + healthCosts: (cheat) ? 0 : hCosts, action: action, surgeryType: surgeryType }; @@ -72,12 +73,15 @@ App.Medicine.Keys = { * Commit procedure, executing its action and subtracting its costs * @param {FC.Medicine.Surgery.Procedure} surgery * @param {App.Entity.SlaveState} slave + * @param {boolean} [cheat] */ -App.Medicine.Surgery.commit = function(surgery, slave) { +App.Medicine.Surgery.commit = function(surgery, slave, cheat = false) { V.surgeryType = surgery.surgeryType; surgery.action(slave); - cashX(forceNeg(surgery.costs), "slaveSurgery", slave); - surgeryDamage(slave, surgery.healthCosts); + if (!cheat) { + cashX(forceNeg(surgery.costs), "slaveSurgery", slave); + surgeryDamage(slave, surgery.healthCosts, cheat); + } }; /** @@ -85,9 +89,10 @@ App.Medicine.Surgery.commit = function(surgery, slave) { * @param {string} passage Passage to go after the surgery * @param {FC.Medicine.Surgery.Procedure} surgery * @param {App.Entity.SlaveState} slave + * @param {boolean} [cheat] * @returns {string} */ -App.Medicine.Surgery.makeLink = function(passage, surgery, slave) { +App.Medicine.Surgery.makeLink = function(passage, surgery, slave, cheat = false) { if (surgery.action === undefined) { return App.UI.disabledLink(surgery.label, [surgery.description]); } @@ -107,7 +112,7 @@ App.Medicine.Surgery.makeLink = function(passage, surgery, slave) { } return App.UI.link(surgery.label, App.Medicine.Surgery.commit, [surgery, slave], passage, - `${capFirstChar(surgery.description)}.\nSurgery costs: ${cashFormat(surgery.costs)}.\nProjected health damage: ${healthCosts()}.`); + `${capFirstChar(surgery.description)}.${cheat ? `` : `\nSurgery costs: ${cashFormat(surgery.costs)}.\nProjected health damage: ${healthCosts()}.`}`); }; /** @@ -574,22 +579,23 @@ App.Medicine.Surgery.sizingProcedures = function() { * For limbs use removeLimbs() * @param {App.Entity.SlaveState} slave * @param {string} part + * @param {boolean} [cheat] */ -globalThis.surgeryAmp = function(slave, part) { +globalThis.surgeryAmp = function(slave, part, cheat = false) { switch (part) { case "left ear": delete slave.brand["left ear"]; slave.earShape = "none"; slave.earT = "none"; slave.earPiercing = 0; - surgeryDamage(slave, 10); + surgeryDamage(slave, 10, cheat); break; case "right ear": delete slave.brand["right ear"]; slave.earShape = "none"; slave.earT = "none"; slave.earPiercing = 0; - surgeryDamage(slave, 10); + surgeryDamage(slave, 10, cheat); break; case "dick": slave.dick = 0; @@ -599,7 +605,7 @@ globalThis.surgeryAmp = function(slave, part) { slave.dickTat = 0; slave.dickAccessory = "none"; slave.chastityPenis = 0; - surgeryDamage(slave, 20); + surgeryDamage(slave, 20, cheat); break; case "vagina": slave.vagina = -1; @@ -611,17 +617,17 @@ globalThis.surgeryAmp = function(slave, part) { slave.vaginalAccessory = "none"; slave.vaginalAttachment = "none"; slave.chastityVagina = 0; - surgeryDamage(slave, 20); + surgeryDamage(slave, 20, cheat); break; case "horn": slave.horn = "none"; slave.hornColor = "none"; - surgeryDamage(slave, 10); + surgeryDamage(slave, 10, cheat); break; case "voicebox": slave.voice = 0; slave.voiceImplant = 0; - surgeryDamage(slave, 10); + surgeryDamage(slave, 10, cheat); break; case "lips": slave.lips -= slave.lipsImplant;