From 0ad8ac5fadd7ead09186a15b8d5401bc827ddf26 Mon Sep 17 00:00:00 2001
From: lowercasedonkey <lowercasedonkey@gmail.com>
Date: Mon, 4 Jan 2021 02:38:36 -0500
Subject: [PATCH] finish hair and face

---
 src/005-passages/facilitiesPassages.js        |   4 +-
 src/facilities/surgery/remoteSurgery.tw       |   4 +-
 .../surgery/remoteSurgeryPassage.js           | 567 ++++++++++--------
 src/uncategorized/surgeryDegradation.tw       |   2 +-
 4 files changed, 309 insertions(+), 268 deletions(-)

diff --git a/src/005-passages/facilitiesPassages.js b/src/005-passages/facilitiesPassages.js
index d11f09ce738..582882c56f3 100644
--- a/src/005-passages/facilitiesPassages.js
+++ b/src/005-passages/facilitiesPassages.js
@@ -79,10 +79,10 @@ new App.DomPassage("Toy Shop",
 );
 
 new App.DomPassage("Remote Surgery",
-	(slave) => {
+	() => {
 		V.nextButton = "Confirm changes";
 		V.nextLink = "Slave Interact";
 		V.encyclopedia = "The Remote Surgery";
-		return App.UI.remoteSurgery(slave);
+		return App.UI.remoteSurgery(getSlave(V.AS));
 	}, ["jump-to-safe", "jump-from-safe"]
 );
diff --git a/src/facilities/surgery/remoteSurgery.tw b/src/facilities/surgery/remoteSurgery.tw
index f31ea7a6196..ba6d2333ae5 100644
--- a/src/facilities/surgery/remoteSurgery.tw
+++ b/src/facilities/surgery/remoteSurgery.tw
@@ -1,4 +1,4 @@
-:: Remote Surgery [nobr jump-from-safe]
+:: Remote Surgery Old [nobr jump-from-safe]
 
 <style>
 .active {
@@ -759,7 +759,7 @@
 		<<if getSlave($AS).scar["left cheek"]>>
 			$He has <<= App.Desc.expandScarString(getSlave($AS), "left cheek")>> on $his left cheek.
 			<div class="choices">
-				[[Remove all scars there|Surgery Degradation][delete getSlave($AS).scar["left cheek"], cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS),5), $surgeryType = "scarRemov"]]
+				[[Remove all scars there|Surgery Degradation][delete getSlave($AS).scar["left cheek"], cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS),5), $surgeryType = "scarRemove"]]
 			</div>
 		<<else>>
 			$His face is unscarred.
diff --git a/src/facilities/surgery/remoteSurgeryPassage.js b/src/facilities/surgery/remoteSurgeryPassage.js
index 2e7ceeb792a..33988b80481 100644
--- a/src/facilities/surgery/remoteSurgeryPassage.js
+++ b/src/facilities/surgery/remoteSurgeryPassage.js
@@ -6,7 +6,7 @@
 App.UI.remoteSurgery = function(slave) {
 	const {
 		His, He,
-		his, he, him
+		his, him
 	} = getPronouns(slave);
 	const container = document.createElement("span");
 	container.append(intro());
@@ -49,6 +49,7 @@ App.UI.remoteSurgery = function(slave) {
 	function hairAndFace() {
 		const el = new DocumentFragment();
 		const _pubertyAge = Math.min(slave.pubertyAgeXX, slave.pubertyAgeXY);
+		/** @type {HTMLAnchorElement[]} */
 		let linkArray;
 
 		App.Events.drawEventArt(el, slave);
@@ -66,7 +67,7 @@ App.UI.remoteSurgery = function(slave) {
 						`Surgically remove ${his} ability to grow hair`,
 						"hair removal",
 						() => { slave.bald = 1; }),
-					"note");
+					"choices");
 			}
 		} else {
 			App.UI.DOM.appendNewElement("div", el, `${He} is no longer capable of growing hair on ${his} head.`);
@@ -83,7 +84,7 @@ App.UI.remoteSurgery = function(slave) {
 						`Surgically remove ${his} ability to grow eyebrows`,
 						"eyebrow removal",
 					),
-					"note");
+					"choices");
 			}
 		} else {
 			App.UI.DOM.appendNewElement("div", el, `${He} is no longer capable of growing eyebrow hair.`);
@@ -128,6 +129,7 @@ App.UI.remoteSurgery = function(slave) {
 		const _artificiality = 25 - (5 * Math.trunc(V.PC.skill.medicine / 50)) - (5 * V.surgeryUpgrade);
 		r = [];
 		r.push(`${His} ${slave.faceShape} face is`);
+		const faceDiv = App.UI.DOM.appendNewElement("div", el);
 		if (slave.face < -95) {
 			r.push(`very ugly.`);
 		} else if (slave.face < -40) {
@@ -151,7 +153,7 @@ App.UI.remoteSurgery = function(slave) {
 		} else if (slave.faceImplant > 30) {
 			r.push(`It has been totally reworked.`);
 		}
-		App.Events.addNode(el, r, "div");
+		App.Events.addNode(faceDiv, r, "div");
 
 		if (slave.indentureRestrictions > 1) {
 			App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]);
@@ -159,19 +161,14 @@ App.UI.remoteSurgery = function(slave) {
 			App.UI.DOM.appendNewElement("div", el, `${His} face cannot sustain further cosmetic surgery`, ["choices", "note"]);
 		} else {
 			linkArray = [];
-			linkArray.push(makeLink(
-				`Surgically remove ${his} ability to grow eyebrows`,
-				"eyebrow removal",
-			));
-
 			if (slave.faceShape !== "normal") {
 				linkArray.push(makeLink(
 					`Make conventionally feminine`,
 					"face",
 					() => {
 						slave.faceShape = "normal";
-						slave.faceImplant = Math.clamp(slave.faceImplant + _artificiality, 0, 100)
-						surgeryDamage(slave, 10)
+						slave.faceImplant = Math.clamp(slave.faceImplant + _artificiality, 0, 100);
+						surgeryDamage(slave, 10);
 					}
 				));
 			}
@@ -249,7 +246,7 @@ App.UI.remoteSurgery = function(slave) {
 					surgeryDamage(slave, 10);
 				}
 			));
-			const links = App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices")
+			App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices");
 			r = [];
 			r.push(`Facial surgery can either rework it and improve its attractiveness, or simply make it more attractive. No facial surgery is perfect and each surgery will make it look less natural.`);
 			if (V.PC.skill.medicine >= 100 && V.surgeryUpgrade) {
@@ -270,27 +267,9 @@ App.UI.remoteSurgery = function(slave) {
 			} else {
 				r.push(`A single facial surgery is not projected to significantly impact artificiality.`);
 			}
-			App.Events.addNode(el, r, "span", "note");
-		}
-
-
-		if (slave.eyebrowHStyle !== "bald") {
-			App.UI.DOM.appendNewElement("div", el, `${He} has ${slave.origHColor} eyebrows.`);
-			if (slave.indentureRestrictions > 1) {
-				App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]);
-			} else {
-				App.UI.DOM.appendNewElement("div", el,
-					makeLink(
-						`Surgically remove ${his} ability to grow eyebrows`,
-						"eyebrow removal",
-					),
-					"note");
-			}
-		} else {
-			App.UI.DOM.appendNewElement("div", el, `${He} is no longer capable of growing eyebrow hair.`);
+			App.Events.addNode(faceDiv, r, "span", "note");
 		}
 
-
 		if (slave.indentureRestrictions < 2 && slave.faceImplant <= 95) {
 			if (slave.ageImplant > 1) {
 				App.UI.DOM.appendNewElement("div", el, `${He}'s had a multiple facelifts and other cosmetic procedures in an effort to preserve ${his} youth.`);
@@ -307,18 +286,11 @@ App.UI.remoteSurgery = function(slave) {
 						surgeryDamage(slave, 10);
 					}
 				), "choices");
-
 			}
 		}
 
-		/*Eyes*/
-		//<div>
-		r.push(`${He} has ${App.Desc.eyesType(slave)}`);
-		if (hasAnyEyes(slave)) {
-			r.push(`, they are ${App.Desc.eyesVision(slave)}`);
-		}
-		r.push(`.`);
-		//<div class="choices">
+		/* Eyes*/
+		App.UI.DOM.appendNewElement("div", el, `${He} has ${App.Desc.eyesType(slave)}${(hasAnyEyes(slave)) ? `, they are ${App.Desc.eyesVision(slave)}`:``}.`);
 		/* eye blur and fix */
 		if (hasAnyEyes(slave)) {
 			/* Blur eyes*/
@@ -348,7 +320,7 @@ App.UI.remoteSurgery = function(slave) {
 				}
 				if (linkArray.length === 2) {
 					linkArray.push(makeLink(
-						"Blur both eye",
+						"Blur both eyes",
 						"eyeBlur",
 						() => {
 							eyeSurgery(slave, "both", "blur");
@@ -465,7 +437,7 @@ App.UI.remoteSurgery = function(slave) {
 				App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices");
 				/* implant */
 				if (isProstheticAvailable(slave, "ocular")) {
-					//<div>
+					// <div>
 					linkArray = [];
 					if (!hasLeftEye(slave)) {
 						linkArray.push(makeLink(
@@ -503,10 +475,10 @@ App.UI.remoteSurgery = function(slave) {
 		}
 
 
-		/*Regular Ears*/
-		//<div>
+		/* Regular Ears*/
+		// <div>
 		r = [];
-		linkArray = []
+		linkArray = [];
 		r.push(`${He} has`);
 		if (slave.earShape === "normal") {
 			r.push(`normal ears.`);
@@ -531,8 +503,8 @@ App.UI.remoteSurgery = function(slave) {
 		} else {
 			r.push(`bugged ears. You done goofed. <span class="note">Report This//</span>`);
 		}
+		App.Events.addNode(el, r, "div");
 
-		//<div class="choices">
 		if (slave.indentureRestrictions >= 2) {
 			App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]);
 		} else {
@@ -559,7 +531,7 @@ App.UI.remoteSurgery = function(slave) {
 				));
 			}
 			if (slave.earShape === "none") {
-				//TODO: remove this BC code
+				// TODO: remove this BC code
 				if (slave.hears !== -2 && slave.earImplant !== 1) {
 					slave.hears = -1;
 				}
@@ -600,7 +572,7 @@ App.UI.remoteSurgery = function(slave) {
 		}
 		App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices");
 
-		/*Top Ears*/
+		/* Top Ears*/
 		r = [];
 		linkArray = [];
 		r.push(`${He} has`);
@@ -630,7 +602,7 @@ App.UI.remoteSurgery = function(slave) {
 			r.push(`You done goofed.`);
 			r.push(`<span class="note">Report This</span>`);
 		}
-
+		App.Events.addNode(el, r, "div");
 		if (slave.indentureRestrictions >= 2) {
 			App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]);
 		} else {
@@ -639,7 +611,7 @@ App.UI.remoteSurgery = function(slave) {
 					"Remove them",
 					"earGone",
 					() => {
-						slave.earT = "none"
+						slave.earT = "none";
 						surgeryDamage(slave, 20);
 					}
 				));
@@ -649,7 +621,7 @@ App.UI.remoteSurgery = function(slave) {
 					"Reshape into cat Ears",
 					"earMajor",
 					() => {
-						slave.earT = "neko"
+						slave.earT = "neko";
 						surgeryDamage(slave, 10);
 					}
 				));
@@ -659,7 +631,7 @@ App.UI.remoteSurgery = function(slave) {
 					"Reshape into dog Ears",
 					"earMajor",
 					() => {
-						slave.earT = "inu"
+						slave.earT = "inu";
 						surgeryDamage(slave, 10);
 					}
 				));
@@ -669,7 +641,7 @@ App.UI.remoteSurgery = function(slave) {
 					"Reshape into fox Ears",
 					"earMajor",
 					() => {
-						slave.earT = "kit"
+						slave.earT = "kit";
 						surgeryDamage(slave, 10);
 					}
 				));
@@ -679,7 +651,7 @@ App.UI.remoteSurgery = function(slave) {
 					"Reshape into tanuki Ears",
 					"earMajor",
 					() => {
-						slave.earT = "tanuki"
+						slave.earT = "tanuki";
 						surgeryDamage(slave, 10);
 					}
 				));
@@ -689,7 +661,7 @@ App.UI.remoteSurgery = function(slave) {
 					"Reshape into rabbit Ears",
 					"earMajor",
 					() => {
-						slave.earT = "usagi"
+						slave.earT = "usagi";
 						surgeryDamage(slave, 10);
 					}
 				));
@@ -700,7 +672,7 @@ App.UI.remoteSurgery = function(slave) {
 					"Implant hair mimicking fibers",
 					"earMinor",
 					() => {
-						slave.earTColor = slave.hColor
+						slave.earTColor = slave.hColor;
 						surgeryDamage(slave, 10);
 					}
 				));
@@ -710,7 +682,7 @@ App.UI.remoteSurgery = function(slave) {
 					"Remove them",
 					"earMinor",
 					() => {
-						slave.earTColor = "hairless"
+						slave.earTColor = "hairless";
 						surgeryDamage(slave, 10);
 					}
 				));
@@ -718,7 +690,7 @@ App.UI.remoteSurgery = function(slave) {
 			App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices");
 		}
 
-		/*Hearing*/
+		/* Hearing*/
 		r = [];
 		if (slave.earImplant === 1) {
 			r.push(`${He} has cochlear implants.`);
@@ -738,7 +710,7 @@ App.UI.remoteSurgery = function(slave) {
 		}
 		App.Events.addNode(el, r, "div");
 
-		//<div class="choices">
+		linkArray = [];
 		if (slave.earImplant !== 1) {
 			if (slave.hears === -1) {
 				if (slave.earImplant !== 1 && slave.earShape !== "none") {
@@ -791,9 +763,8 @@ App.UI.remoteSurgery = function(slave) {
 		}
 		App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices");
 
-		/*Horns*/
-		//<div>
-		r = []
+		/* Horns*/
+		r = [];
 		r.push(`${He} has`);
 		if (slave.horn === "none") {
 			r.push(`no horns.`);
@@ -801,7 +772,7 @@ App.UI.remoteSurgery = function(slave) {
 			r.push(`${slave.horn}.`);
 		}
 		App.Events.addNode(el, r, "div");
-		//<div class="choices">
+
 		if (slave.indentureRestrictions >= 2) {
 			App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]);
 		} else if (slave.horn === "none") {
@@ -812,7 +783,7 @@ App.UI.remoteSurgery = function(slave) {
 					"horn",
 					() => {
 						slave.horn = "curved succubus horns";
-						slave.hornColor = "jet black"
+						slave.hornColor = "jet black";
 						surgeryDamage(slave, 10);
 					}
 				));
@@ -823,7 +794,7 @@ App.UI.remoteSurgery = function(slave) {
 					"horn",
 					() => {
 						slave.horn = "backswept horns";
-						slave.hornColor = "jet black"
+						slave.hornColor = "jet black";
 						surgeryDamage(slave, 10);
 					}
 				));
@@ -834,7 +805,7 @@ App.UI.remoteSurgery = function(slave) {
 					"horn",
 					() => {
 						slave.horn = "cow horns";
-						slave.hornColor = "ivory"
+						slave.hornColor = "ivory";
 						surgeryDamage(slave, 10);
 					}
 				));
@@ -877,7 +848,7 @@ App.UI.remoteSurgery = function(slave) {
 				"Remove them",
 				"hornGone",
 				() => {
-					surgeryAmp(slave, "horn")
+					surgeryAmp(slave, "horn");
 				}
 			));
 		} else {
@@ -885,13 +856,13 @@ App.UI.remoteSurgery = function(slave) {
 				"Remove it",
 				"hornGone",
 				() => {
-					surgeryAmp(slave, "horn")
+					surgeryAmp(slave, "horn");
 				}
 			));
 		}
 		App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices");
 
-		/*Lips*/
+		/* Lips*/
 		r = [];
 		linkArray = [];
 		r.push(`${He} has`);
@@ -908,15 +879,14 @@ App.UI.remoteSurgery = function(slave) {
 		} else {
 			r.push(`a facepussy: ${his} lips are so huge that they're always a bit parted in the middle, forming a moist, inviting hole for cock.`);
 		}
-		if (slave.lipsImplant === 0) {
-		} else if (slave.lipsImplant <= 10) {
-			r.push(`${He} has moderate lip implants.`);
-		} else if (slave.lipsImplant <= 20) {
+		if (slave.lipsImplant > 20) {
+			r.push(`${He} has enormous lip implants.`);
+		} else if (slave.lipsImplant > 10) {
 			r.push(`${He} has large lip implants.`);
 		} else {
-			r.push(`${He} has enormous lip implants.`);
+			r.push(`${He} has moderate lip implants.`);
 		}
-		r.push(App.UI.DOM.makeElement("span", `Installing implants will reduce ${his} oral skills`, "note"))
+		r.push(App.UI.DOM.makeElement("span", `Installing implants will reduce ${his} oral skills`, "note"));
 		App.Events.addNode(el, r, "div");
 
 		if (slave.indentureRestrictions >= 2) {
@@ -928,7 +898,7 @@ App.UI.remoteSurgery = function(slave) {
 					"lips",
 					() => {
 						slave.lipsImplant += 20;
-						slave.lips += 20
+						slave.lips += 20;
 						surgeryDamage(slave, 10);
 					}
 				));
@@ -938,7 +908,7 @@ App.UI.remoteSurgery = function(slave) {
 					"lips",
 					() => {
 						slave.lipsImplant = 20;
-						slave.lips += 20
+						slave.lips += 20;
 						surgeryDamage(slave, 10);
 					}
 				));
@@ -950,7 +920,7 @@ App.UI.remoteSurgery = function(slave) {
 					"Remove lip implants",
 					"lips",
 					() => {
-						surgeryAmp(slave, "lips")
+						surgeryAmp(slave, "lips");
 					}
 				));
 			}
@@ -962,16 +932,16 @@ App.UI.remoteSurgery = function(slave) {
 					"lips",
 					() => {
 						slave.lips -= 10;
-						surgeryDamage(slave, 10);;
+						surgeryDamage(slave, 10);
 					}
 				));
 			}
 		}
+		App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices");
 
-		/*Teeth*/
+		/* Teeth*/
 		r = [];
 		linkArray = [];
-		const someNaturalteeth = new Set(["normal", "crooked", "gapped", "straightening braces", "cosmetic braces", "baby"])
 		switch (slave.teeth) {
 			case "crooked":
 				r.push(`${He} has crooked teeth.`);
@@ -979,30 +949,12 @@ App.UI.remoteSurgery = function(slave) {
 					"Apply braces",
 					"braces",
 					() => {
-						slave.teeth = "straightening braces"
+						slave.teeth = "straightening braces";
 					}
 				));
-				if (V.seeExtreme === 1 && slave.indentureRestrictions < 1) {
-					linkArray.push(makeLink(
-						"Replace them with removable prosthetics",
-						"teeth",
-						() => {
-							slave.teeth = "removable";
-							surgeryDamage(slave, 20)
-						}
-					));
-					linkArray.push(makeLink(
-						"Replace them with sharp teeth",
-						"teeth",
-						() => {
-							slave.teeth = "pointy";
-							surgeryDamage(slave, 20)
-						}
-					));
-				}
+				break;
 			case "gapped":
 				r.push(`${He} has a noticeable gap in ${his} front teeth.`);
-				//<div class="choices">
 				linkArray.push(makeLink(
 					"Apply braces",
 					"braces",
@@ -1010,27 +962,9 @@ App.UI.remoteSurgery = function(slave) {
 						slave.teeth = "straightening braces";
 					}
 				));
-				if (V.seeExtreme === 1 && slave.indentureRestrictions < 1) {
-					linkArray.push(makeLink(
-						"Replace them with removable prosthetics",
-						"teeth",
-						() => {
-							slave.teeth = "removable";
-							surgeryDamage(slave, 20);
-						}
-					));
-					linkArray.push(makeLink(
-						"Replace them with sharp teeth",
-						"teeth",
-						() => {
-							slave.teeth = "pointy";
-							surgeryDamage(slave, 20);
-						}
-					));
-				}
+				break;
 			case "straightening braces":
 				r.push(`${His} crooked teeth are in braces.`);
-				//<div class="choices">
 				linkArray.push(makeLink(
 					"Remove braces",
 					"teeth",
@@ -1038,104 +972,63 @@ App.UI.remoteSurgery = function(slave) {
 						slave.teeth = "crooked";
 					}
 				));
-				
-
-				if (V.seeExtreme === 1) && (slave.indentureRestrictions < 1) {
-					linkArray.push(makeLink(
-						"Replace them with removable prosthetics",
-						"teeth",
-						() => {
-							slave.teeth = "removable";
-							surgeryDamage(slave, 20);
-						}
-					));
-					linkArray.push(makeLink(
-					"Replace them with sharp teeth",
-					"teeth",
-					() => {
-						slave.teeth = "pointy";
-						surgeryDamage(slave, 20);
-					}
-				));
-				}
-			//</div>
+				break;
 			case "cosmetic braces":
 				r.push(`${He} has braces on ${his} straight teeth.`);
-				//<div class="choices">
-				[[Remove braces | Remote Surgery][slave.teeth = "normal"]]
-				if (V.seeExtreme === 1) && (slave.indentureRestrictions < 1) {
-					linkArray.push(makeLink(
-						"Replace them with removable prosthetics",
-						"teeth",
-						() => {
-							slave.teeth = "removable";
-							surgeryDamage(slave, 20);
-						}
-					));
-					linkArray.push(makeLink(
-					"Replace them with sharp teeth",
+				linkArray.push(makeLink(
+					"Remove braces",
 					"teeth",
 					() => {
-						slave.teeth = "pointy";
-						surgeryDamage(slave, 20);
+						slave.teeth = "normal";
 					}
-				}
-			//</div>
+				));
+				break;
 			case "removable":
 				r.push(`${He} has prosthetic teeth that can be removed for extreme oral sex.`);
-				//<div class="choices">
-				if (V.seeExtreme === 1) && (slave.indentureRestrictions < 1) {
-					linkArray.push(makeLink(
-					"Replace them with sharp teeth",
-					"teeth",
-					() => {
-						slave.teeth = "pointy";
-						surgeryDamage(slave, 20);
-					}
-						[[Normal dental implants | Surgery Degradation][slave.teeth = "normal", cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), surgeryDamage(slave, 10), V.surgeryType = "oral"]]
-				}
-			//</div>
+				break;
 			case "pointy":
 				r.push(`${His} teeth have been replaced with sturdy, realistic implants that mimic the dentition of a predator.`);
-				//<div class="choices">
-				if (V.seeExtreme === 1) && (slave.indentureRestrictions < 1) {
+				if (V.seeExtreme === 1 && slave.indentureRestrictions < 1) {
 					linkArray.push(makeLink(
-						"Replace them with removable prosthetics",
-						"teeth",
+						"Normal dental implants",
+						"oral",
 						() => {
-							slave.teeth = "removable";
-							surgeryDamage(slave, 20);
+							slave.teeth = "normal";
+							surgeryDamage(slave, 10);
 						}
 					));
-					|
-						[[Normal dental implants | Surgery Degradation][slave.teeth = "normal", cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), surgeryDamage(slave, 10), V.surgeryType = "oral"]]
 				}
-			//</div>
+				break;
 			case "fangs":
 				r.push(`${His} upper canines have been replaced with sturdy, realistic implants that can only be described as vampiric.`);
-				//<div class="choices">
-				if (V.seeExtreme === 1) && (slave.indentureRestrictions < 1) {
-					[[Replace them with removable prosthetics | Surgery Degradation][slave.teeth = "removable", cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), surgeryDamage(slave, 20), V.surgeryType = "teeth"]] |
-						[[Remove a fang | Surgery Degradation][slave.teeth = "fang", cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), surgeryDamage(slave, 20), V.surgeryType = "fang"]] |
-						[[Normal dental implants | Surgery Degradation][slave.teeth = "normal", cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), surgeryDamage(slave, 10), V.surgeryType = "oral"]]
+				// <div class="choices">
+				if (V.seeExtreme === 1 && slave.indentureRestrictions < 1) {
+					linkArray.push(makeLink(
+						"Remove a fang",
+						"fang",
+						() => {
+							slave.teeth = "fang";
+							surgeryDamage(slave, 20);
+						}
+					));
+					linkArray.push(makeLink(
+						"Normal dental implants",
+						"oral",
+						() => {
+							slave.teeth = "normal";
+							surgeryDamage(slave, 10);
+						}
+					));
 				}
-			//</div>
+				break;
+			// </div>
 			case "fang":
 				r.push(`A single one of ${his} upper canines has been replaced with a sturdy, realistic implant shaped like a fang.`);
 				if (slave.lips <= 50) {
 					r.push(`It is occasionally visible over ${his} lower lip.`);
 				}
-				//<div class="choices">
-				if (V.seeExtreme === 1) && (slave.indentureRestrictions < 1) {
-					[[Replace them with removable prosthetics | Surgery Degradation][slave.teeth = "removable", cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), surgeryDamage(slave, 20), V.surgeryType = "teeth"]] |
-						[[Add another fang | Surgery Degradation][slave.teeth = "fangs", cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), surgeryDamage(slave, 20), V.surgeryType = "fangs"]] |
-						[[Normal dental implants | Surgery Degradation][slave.teeth = "normal", cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), surgeryDamage(slave, 10), V.surgeryType = "oral"]]
-				}
-			//</div>
-			case "baby":
-				r.push(`${He} has baby teeth.`);
-				//<div class="choices">
-				if (V.seeExtreme === 1) && (slave.indentureRestrictions < 1) {
+				// <div class="choices">
+				if (V.seeExtreme === 1 && slave.indentureRestrictions < 1) {
 					linkArray.push(makeLink(
 						"Replace them with removable prosthetics",
 						"teeth",
@@ -1145,41 +1038,97 @@ App.UI.remoteSurgery = function(slave) {
 						}
 					));
 					linkArray.push(makeLink(
-					"Replace them with sharp teeth",
-					"teeth",
-					() => {
-						slave.teeth = "pointy";
-						surgeryDamage(slave, 20);
-					}
-						|
-							[[Normal dental implants | Surgery Degradation][slave.teeth = "normal", cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), surgeryDamage(slave, 10), V.surgeryType = "oral"]]
+						"Add another fang",
+						"fangs",
+						() => {
+							slave.teeth = "fangs";
+						}
+					));
+					linkArray.push(makeLink(
+						"Normal dental implants",
+						"oral",
+						() => {
+							slave.teeth = "normal";
+							surgeryDamage(slave, 10);
+						}
+					));
+				}
+				break;
+			case "baby":
+				r.push(`${He} has baby teeth.`);
+				if (V.seeExtreme === 1 && slave.indentureRestrictions < 1) {
+					linkArray.push(makeLink(
+						"Normal dental implants",
+						"oral",
+						() => {
+							slave.teeth = "normal";
+							surgeryDamage(slave, 10);
+						}
+					));
 				}
-			//</div>
+				break;
 			case "mixed":
 				r.push(`${He} has a mix of baby and normal teeth.`);
-				//<div class="choices">
-				if (V.seeExtreme === 1) && (slave.indentureRestrictions < 1) {
-					[[Replace them with removable prosthetics | Surgery Degradation][slave.teeth = "removable", cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), surgeryDamage(slave, 20), V.surgeryType = "teeth"]] |
-						[[Replace them with sharp teeth | Surgery Degradation][slave.teeth = "pointy", cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), surgeryDamage(slave, 20), V.surgeryType = "sharp"]] |
-							[[Normal dental implants | Surgery Degradation][slave.teeth = "normal", cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), surgeryDamage(slave, 10), V.surgeryType = "oral"]]
-				}
-			//</div>
+				break;
 			default:
 				r.push(`${He} has normal, healthy teeth.`);
-				//<div class="choices">
-				[[Unnecessary braces | Surgery Degradation][slave.teeth = "cosmetic braces", cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), V.surgeryType = "braces"]]
-				if (V.seeExtreme === 1) && (slave.indentureRestrictions < 1) {
-							| [[Replace them with removable prosthetics | Surgery Degradation][slave.teeth = "removable", cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), surgeryDamage(slave, 20), V.surgeryType = "teeth"]] |
-						[[Replace them with sharp teeth | Surgery Degradation][slave.teeth = "pointy", cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), surgeryDamage(slave, 20), V.surgeryType = "sharp"]] |
-							[[Replace them with fangs | Surgery Degradation][slave.teeth = "fangs", cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), surgeryDamage(slave, 20), V.surgeryType = "fangs"]] |
-								[[Add a fang | Surgery Degradation][slave.teeth = "fang", cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), surgeryDamage(slave, 20), V.surgeryType = "fang"]] |
+				linkArray.push(makeLink(
+					"Unnecessary braces",
+					"teeth",
+					() => {
+						slave.teeth = "cosmetic braces";
+					}
+				));
+				if (V.seeExtreme === 1 && slave.indentureRestrictions < 1) {
+					linkArray.push(makeLink(
+						"Add a fang",
+						"fang",
+						() => {
+							slave.teeth = "fang";
 						}
-			//</div>
+					));
+				}
+		}
+		if (V.seeExtreme === 1 && slave.indentureRestrictions < 1) {
+			if (slave.teeth !== "removable") {
+				linkArray.push(makeLink(
+					"Replace them with removable prosthetics",
+					"teeth",
+					() => {
+						slave.teeth = "removable";
+						surgeryDamage(slave, 20);
+					}
+				));
+			}
+
+			if (slave.teeth !== "pointy") {
+				linkArray.push(makeLink(
+					"Replace them with sharp teeth",
+					"sharp",
+					() => {
+						slave.teeth = "pointy";
+						surgeryDamage(slave, 20);
+					}
+				));
+			}
+
+			if (slave.teeth !== "fangs" && slave.teeth !== "fang") {
+				linkArray.push(makeLink(
+					"Replace them with fangs",
+					"fangs",
+					() => {
+						slave.teeth = "fangs";
+						surgeryDamage(slave, 20);
+					}
+				));
+			}
 		}
-		//</div>
+		App.Events.addNode(el, r, "div");
+		App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices");
 
-		/*Voice*/
-		//<div>
+		/* Voice*/
+		// <div>
+		r = [];
 		if (slave.electrolarynx === 1) {
 			r.push(`${He} has an artificial larynx.`);
 		} else {
@@ -1198,30 +1147,55 @@ App.UI.remoteSurgery = function(slave) {
 				r.push(`${He} has had surgery on ${his} voice box to lower ${his} voice.`);
 			}
 		}
-		if (slave.indentureRestrictions < 1) && (slave.electrolarynx !== 1) {
-			//<div class="choices">
+		App.Events.addNode(el, r, "div");
+		if (slave.indentureRestrictions < 1 && slave.electrolarynx !== 1) {
+			linkArray = [];
 			if (slave.voice !== 0) {
 				if (slave.voice < 3) {
-					[[Perform surgery to raise voice | Surgery Degradation][slave.voice += 1, slave.voiceImplant += 1, cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), surgeryDamage(slave, 10), V.surgeryType = "voice"]]
-				}
-				if (slave.voice === 2) {
-							|
+					linkArray.push(makeLink(
+						"Perform surgery to raise voice",
+						"voice",
+						() => {
+							slave.voice += 1;
+							surgeryDamage(slave, 10);
 						}
+					));
+				}
 				if (slave.voice > 1) {
-					[[Perform surgery to lower voice | Surgery Degradation][slave.voice -= 1, slave.voiceImplant -= 1, cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), surgeryDamage(slave, 10), V.surgeryType = "voice2"]]
+					linkArray.push(makeLink(
+						"Perform surgery to lower voice",
+						"voice2",
+						() => {
+							slave.voice -= 1;
+							surgeryDamage(slave, 10);
+						}
+					));
 				}
 				if (V.seeExtreme === 1) {
-							| [[Remove vocal cords | Surgery Degradation][surgeryAmp(slave, "voicebox"), V.surgeryType = "mute", cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave)]]
+					linkArray.push(makeLink(
+						"Remove vocal cords",
+						"mute",
+						() => {
+							surgeryAmp(slave, "voicebox");
+						}
+					));
 				}
 			} else if (isProstheticAvailable(slave, "electrolarynx")) {
-				[["Give " + ${ him } + " an electrolarynx" | Surgery Degradation][slave.electrolarynx = 1, slave.voice = 2, cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), surgeryDamage(slave, 20), V.surgeryType = "electrolarynx"]]
+				linkArray.push(makeLink(
+					`Give ${him} an electrolarynx`,
+					"electrolarynx",
+					() => {
+						slave.electrolarynx = 1;
+						slave.voice = 2;
+						surgeryDamage(slave, 20);
+					}
+				));
 			}
-			//</div>
+			App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices");
 		}
-		//</div>
 
-		/*Smell*/
-		//<div>
+		/* Smell*/
+		r = [];
 		if (slave.smells === 0 && slave.tastes === 0) {
 			r.push(`${He} has a working chemosensory system.`);
 		} else if (slave.smells === 0) {
@@ -1232,47 +1206,116 @@ App.UI.remoteSurgery = function(slave) {
 			r.push(`${He} has an impaired chemosensory system.`);
 		}
 		if (slave.indentureRestrictions < 1) {
-			//<div class="choices">
-			if (slave.smells === 0) && (V.seeExtreme === 1) {
-				[[Remove sense of smell | Surgery Degradation][slave.smells = -1, cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), surgeryDamage(slave, 10), V.surgeryType = "desmell"]]
+			// <div class="choices">
+			if (slave.smells === 0 && V.seeExtreme === 1) {
+				linkArray.push(makeLink(
+					"Remove sense of smell",
+					"desmell",
+					() => {
+						slave.smells = -1;
+						surgeryDamage(slave, 10);
+					}
+				));
 			} else if (slave.smells === -1) {
-						| [[Repair sense of smell | Surgery Degradation][slave.smells = 0, cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), surgeryDamage(slave, 10), V.surgeryType = "resmell"]]
+				linkArray.push(makeLink(
+					"Repair sense of smell",
+					"resmell",
+					() => {
+						slave.smells = 0;
+						surgeryDamage(slave, 10);
+					}
+				));
 			}
-			if (slave.tastes === 0) && (V.seeExtreme === 1) {
-						| [[Remove sense of taste | Surgery Degradation][slave.tastes = -1, cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), surgeryDamage(slave, 10), V.surgeryType = "detaste"]]
+			if (slave.tastes === 0 && V.seeExtreme === 1) {
+				linkArray.push(makeLink(
+					"Remove sense of taste",
+					"detaste",
+					() => {
+						slave.smells = -1;
+						surgeryDamage(slave, 10);
+					}
+				));
 			} else if (slave.tastes === -1) {
-						| [[Repair sense of taste | Surgery Degradation][slave.tastes = 0, cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), surgeryDamage(slave, 10), V.surgeryType = "retaste"]]
+				linkArray.push(makeLink(
+					"Repair sense of taste",
+					"retaste",
+					() => {
+						slave.smells = 0;
+						surgeryDamage(slave, 10);
+					}
+				));
 			}
-			//</div>
 		}
-		//</div>
 
-		/*Scars*/
-		//<div>
+		/* Scars*/
+		r = [];
+		linkArray = [];
 		if (slave.scar["left cheek"]) {
-			r.push(`${He} has `);
-			V.App.Desc.expandScarString(slave, "left cheek")
-			r.push(` on ${his} left cheek.`);
-			//<div class="choices">
-			[[Remove all scars there | Surgery Degradation][delete slave.scar["left cheek"], cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), surgeryDamage(slave, 5), V.surgeryType = "scarRemov"]]
-			//</div>
+			r.push(`${He} has ${App.Desc.expandScarString(slave, "left cheek")} on ${his} left cheek.`);
+			linkArray.push(makeLink(
+				"Remove all scars there",
+				"scarRemove",
+				() => {
+					delete slave.scar["left cheek"];
+					surgeryDamage(slave, 5);
+				}
+			));
 		} else {
 			r.push(`${His} face is unscarred.`);
-			//<div class="choices">
 			if (slave.indentureRestrictions > 1) {
-				//<span class="note">${His} indenture forbids elective surgery//</span>
+				App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]);
 			} else {
-				[[Give a menacing scar | Surgery Degradation][App.Medicine.Modification.addScar(slave, "left cheek", "menacing"), cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), surgeryDamage(slave, 5), V.surgeryType = "scarFear"]] |
-					[[Give an exotic scar | Surgery Degradation][App.Medicine.Modification.addScar(slave, "left cheek", "exotic"), cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave), surgeryDamage(slave, 5), V.surgeryType = "scarExo"]]
+				linkArray.push(makeLink(
+					"Give a menacing scar",
+					"scarFear",
+					() => {
+						App.Medicine.Modification.addScar(slave, "left cheek", "menacing");
+						surgeryDamage(slave, 5);
+					}
+				));
+				linkArray.push(makeLink(
+					"Give a exotic scar",
+					"scarExo",
+					() => {
+						App.Medicine.Modification.addScar(slave, "left cheek", "exotic");
+						surgeryDamage(slave, 5);
+					}
+				));
 			}
-			//</div>
 		}
-		//</div>
-		//</div>
 		return el;
 	}
 
-	function capacity() {
+	function upper() {
+		const el = new DocumentFragment();
+		let r = [];
+
+		App.Events.addNode(el, r, "div");
+		return el;
+	}
+
+	function lower() {
+		const el = new DocumentFragment();
+		let r = [];
+
+		App.Events.addNode(el, r, "div");
+		return el;
+	}
+	function race() {
+		const el = new DocumentFragment();
+		let r = [];
+
+		App.Events.addNode(el, r, "div");
+		return el;
+	}
+	function structural() {
+		const el = new DocumentFragment();
+		let r = [];
+
+		App.Events.addNode(el, r, "div");
+		return el;
+	}
+	function extremeSurgery() {
 		const el = new DocumentFragment();
 		let r = [];
 
@@ -1360,8 +1403,6 @@ App.UI.remoteSurgery = function(slave) {
 
 		el.append(tabBar);
 
-		App.Events.drawEventArt(el, slave);
-
 		el.append(tabContents);
 
 		return el;
diff --git a/src/uncategorized/surgeryDegradation.tw b/src/uncategorized/surgeryDegradation.tw
index 4ee418c8de4..e8a66c8f58f 100644
--- a/src/uncategorized/surgeryDegradation.tw
+++ b/src/uncategorized/surgeryDegradation.tw
@@ -1013,7 +1013,7 @@ As the remote surgery's long recovery cycle completes,
 <<case "endejac">>
 	$His groin is a little sore, and $he examines it closely, but $he can't find much difference other than the swelling in $his crotch has gone down. $He'll realize later when $his next ejaculation is rather underwhelming from what $he has become accustomed to. As with all surgery @@.health.dec;$his health has been slightly affected.@@
 
-<<case "scarRemov">>
+<<case "scarRemove">>
 	Even though removing scars is a trivial process, @@.health.dec;$his health has been slightly affected.@@
 	<<if getSlave($AS).fetish != "mindbroken" && getSlave($AS).fuckdoll == 0>>
 		When $he exits the room, $he feels that most of $his skin is numb, and $he is @@.hotpink;happy@@ when $he finds $his scars have been removed.
-- 
GitLab