From 273080475af5e63b5c48ceb4b7adeb6af6a047e7 Mon Sep 17 00:00:00 2001
From: lowercase-donkey <lowercasedonkey@gmail.com>
Date: Sat, 27 Jul 2019 21:00:05 -0400
Subject: [PATCH] piercings

---
 .../nursery/longChildDescription.tw           | 14 ++--
 src/js/describePiercings.js                   | 73 +++++++++++++++++++
 src/js/describeTattoos.js                     |  2 +-
 src/js/descriptionWidgets.js                  |  7 +-
 src/npc/descriptions/boobs/boobs.js           |  4 +-
 src/uncategorized/bodyModification.tw         | 47 ++++--------
 src/uncategorized/longSlaveDescription.tw     | 16 ++--
 src/uncategorized/wardrobeUse.tw              |  2 +-
 src/utility/descriptionWidgetsFlesh.tw        | 21 +-----
 src/utility/descriptionWidgetsStyle.tw        |  4 +-
 10 files changed, 116 insertions(+), 74 deletions(-)
 create mode 100644 src/js/describePiercings.js

diff --git a/src/facilities/nursery/longChildDescription.tw b/src/facilities/nursery/longChildDescription.tw
index da979d185e6..7ce18eb896f 100644
--- a/src/facilities/nursery/longChildDescription.tw
+++ b/src/facilities/nursery/longChildDescription.tw
@@ -1119,9 +1119,7 @@ $He is
 	$activeChild.counter.pitKills slaves have died by $his hand in pit fights.
 <</if>>
 
-<<if $activeChild.corsetPiercing > 0>>
-	<<CorsetPiercingDescription>>
-<</if>>
+<<= App.Desc.piercing($activeChild, "corset")>>
 
 <<pregnancyDescription>>
 
@@ -1282,9 +1280,9 @@ $He is
 			The piercings on $his head run through $his suit, helping secure the material to $his head.
 		<</if>>
 	<<else>>
-		<<earPiercingDescription>>
-		<<nosePiercingDescription>>
-		<<eyebrowPiercingDescription>>
+		<<= App.Desc.mods($activeChild, "ear")>>
+		<<= App.Desc.mods($activeChild, "nose")>>
+		<<= App.Desc.mods($activeChild, "eyebrow")>>
 		<<if ($activeChild.custom.tattoo != "") && (def $activeChild.custom.tattoo)>>
 			<<print $activeChild.custom.tattoo>>
 		<</if>>
@@ -1343,9 +1341,7 @@ $He is
 <<= App.Desc.mods($activeChild, "breast")>>
 <<shouldersDescription>>
 <<nipplesDescription>>
-<<if $showBodyMods == 1>>
-	<<nipplesPiercingDescription>>
-<</if>>
+<<= App.Desc.mods($activeChild, "nipple")>>
 <<areolaeDescription>>
 
 <<if $activeChild.inflation > 0>> /* to be obsoleted with phase 4 */
diff --git a/src/js/describePiercings.js b/src/js/describePiercings.js
new file mode 100644
index 00000000000..8086a30a06b
--- /dev/null
+++ b/src/js/describePiercings.js
@@ -0,0 +1,73 @@
+/**
+ * @param {App.Entity.SlaveState} slave
+ * @returns {string} Relevant slave tattoo, if present
+ */
+App.Desc.piercing = function(slave, surface) {
+	"use strict";
+	const V = State.variables;
+	let r = ``;
+	/* eslint-disable no-unused-vars*/
+	const {
+		he, him, his, hers, himself, boy, He, His
+	} = getPronouns(slave);
+	/* eslint-enable */
+	switch (surface) {
+		case "ear": {
+			r += `<<earPiercingDescription>>`;
+			break;
+		}
+		case "nose": {
+			r += `<<nosePiercingDescription>>`;
+			break;
+		}
+		case "eyebrow": {
+			r += `<<eyebrowPiercingDescription>>`;
+			break;
+		}
+		case "lips": {
+			r += `<<lipsPiercingDescription>>`;
+			break;
+		}
+		case "tongue": {
+			r += `<<tonguePiercingDescription>>`;
+			break;
+		}
+		case "nipple": {
+			r += `<<nipplesPiercingDescription>>`;
+			break;
+		}
+		case "areolae": {
+			r += `<<areolaePiercingDescription>>`;
+			break;
+		}
+		case "navel": {
+			r += `<<navelPiercingDescription>>`;
+			break;
+		}
+		case "clit": {
+			r += `<<clitPiercingDescription>>`;
+			break;
+		}
+		case "vagina": {
+			r += `<<vaginaPiercingDescription>>`;
+			break;
+		}
+		case "dick": {
+			r += `<<dickPiercingDescription>>`;
+			break;
+		}
+		case "anus": {
+			r += `<<anusPiercingDescription>>`;
+			break;
+		}
+		case "corset": { // non anatomical
+			r += `<<CorsetPiercingDescription>>`;
+			break;
+		}
+		case "chastity": { // non anatomical
+			r += `<<chastityPiercingDescription>>`;
+			break;
+		}
+	}
+	return r;
+};
diff --git a/src/js/describeTattoos.js b/src/js/describeTattoos.js
index acdd17f24f2..54ecdbc31df 100644
--- a/src/js/describeTattoos.js
+++ b/src/js/describeTattoos.js
@@ -44,7 +44,7 @@ App.Desc.tattoo = function(slave, surface) {
 			r += `<<vaginaTatDescription>>`;
 			break;
 		}
-		case "penis": {
+		case "dick": {
 			r += `<<dickTatDescription>>`;
 			break;
 		}
diff --git a/src/js/descriptionWidgets.js b/src/js/descriptionWidgets.js
index 28ac6fa97b2..a61343d53ec 100644
--- a/src/js/descriptionWidgets.js
+++ b/src/js/descriptionWidgets.js
@@ -588,7 +588,12 @@ App.Desc.mods = function(slave, surface) {
 	if (slave.fuckdoll !== 0 && !["vagina", "anus", "lips"].includes(surface)) { /* Fuckdoll vulva and anus alone are visibile, plus enormus lips */
 		return;
 	}
-	return App.Desc.tattoo(slave, surface) + App.Desc.brand(slave, surface) + App.Desc.scar(slave, surface);
+	return (
+		App.Desc.piercing(slave, surface) +
+		App.Desc.tattoo(slave, surface) +
+		App.Desc.brand(slave, surface) +
+		App.Desc.scar(slave, surface)
+	);
 };
 
 /**
diff --git a/src/npc/descriptions/boobs/boobs.js b/src/npc/descriptions/boobs/boobs.js
index a7d93502f6f..6deaacde6c9 100644
--- a/src/npc/descriptions/boobs/boobs.js
+++ b/src/npc/descriptions/boobs/boobs.js
@@ -1703,9 +1703,9 @@ App.Desc.areola = function(slave, pronouns) {
 						r.push(`${His} motherly boobs point downward, though, leaving only the top of each ${slave.areolaeShape} visible.`);
 					}
 				}
-			} else {
+			} /* else {
 				r.push(this.areolaePiercing(slave, pronouns));
-			}
+			}*/
 		}
 		if ((V.showClothing === 1) && (V.saleDescription === 0)) {
 			if (slave.areolae > 1) {
diff --git a/src/uncategorized/bodyModification.tw b/src/uncategorized/bodyModification.tw
index b6829ef34dd..aee6e814ea3 100644
--- a/src/uncategorized/bodyModification.tw
+++ b/src/uncategorized/bodyModification.tw
@@ -404,36 +404,21 @@ Piercings:
 	$His smooth $activeSlave.skin skin is completely unpierced.
 <</if>>
 
-<<if $activeSlave.earPiercing > 0 >><br>&nbsp;&nbsp;&nbsp;&nbsp;<<earPiercingDescription>><</if>>
-<<if $activeSlave.nosePiercing > 0 >><br>&nbsp;&nbsp;&nbsp;&nbsp;<<nosePiercingDescription>><</if>>
-<<if $activeSlave.eyebrowPiercing > 0 >><br>&nbsp;&nbsp;&nbsp;&nbsp;<<eyebrowPiercingDescription>><</if>>
-<<if $activeSlave.lipsPiercing > 0 >><br>&nbsp;&nbsp;&nbsp;&nbsp;<<lipsPiercingDescription>><</if>>
-<<if $activeSlave.tonguePiercing > 0 >><br>&nbsp;&nbsp;&nbsp;&nbsp;<<tonguePiercingDescription>><</if>>
-<<if $activeSlave.nipplesPiercing > 0 >><br>&nbsp;&nbsp;&nbsp;&nbsp;<<nipplesPiercingDescription>><</if>>
-<<if $activeSlave.areolaePiercing > 0 >><br>&nbsp;&nbsp;&nbsp;&nbsp;<<areolaePiercingDescription>><</if>>
-<<if $activeSlave.navelPiercing > 0 >><br>&nbsp;&nbsp;&nbsp;&nbsp;<<navelPiercingDescription>><</if>>
-<<if $activeSlave.corsetPiercing > 0 >><br>&nbsp;&nbsp;&nbsp;&nbsp;<<CorsetPiercingDescription>><</if>>
-<<if $activeSlave.clitPiercing > 0 >><br>&nbsp;&nbsp;&nbsp;&nbsp;<<clitPiercingDescription>><</if>>
-<<if $activeSlave.vaginaPiercing > 0 >><br>&nbsp;&nbsp;&nbsp;&nbsp;<<vaginaPiercingDescription>><</if>>
-<<if $activeSlave.dickPiercing > 0 >><br>&nbsp;&nbsp;&nbsp;&nbsp;<<dickPiercingDescription>><</if>>
-<<if $activeSlave.anusPiercing > 0 >><br>&nbsp;&nbsp;&nbsp;&nbsp;<<anusPiercingDescription>><</if>>
-
-<br><<chastityPiercingDescription>>
-
-/*<<earPiercingDescription>>
-<<nosePiercingDescription>>
-<<eyebrowPiercingDescription>>
-<<lipsPiercingDescription>>
-<<tonguePiercingDescription>>
-<<nipplesPiercingDescription>>
-<<areolaePiercingDescription>>
-<<navelPiercingDescription>>
-<<CorsetPiercingDescription>>
-<<clitPiercingDescription>>
-<<vaginaPiercingDescription>>
-<<dickPiercingDescription>>
-<<anusPiercingDescription>>
-<<chastityPiercingDescription>>*/
+<<if $activeSlave.earPiercing > 0 >><br>&nbsp;&nbsp;&nbsp;&nbsp;<<= App.Desc.piercing($activeSlave, "ear")>><</if>>
+<<if $activeSlave.nosePiercing > 0 >><br>&nbsp;&nbsp;&nbsp;&nbsp;<<= App.Desc.piercing($activeSlave, "nose")>><</if>>
+<<if $activeSlave.eyebrowPiercing > 0 >><br>&nbsp;&nbsp;&nbsp;&nbsp;<<= App.Desc.piercing($activeSlave, "eyebrow")>><</if>>
+<<if $activeSlave.lipsPiercing > 0 >><br>&nbsp;&nbsp;&nbsp;&nbsp;<<= App.Desc.piercing($activeSlave, "lips")>><</if>>
+<<if $activeSlave.tonguePiercing > 0 >><br>&nbsp;&nbsp;&nbsp;&nbsp;<<= App.Desc.piercing($activeSlave, "tongue")>><</if>>
+<<if $activeSlave.nipplesPiercing > 0 >><br>&nbsp;&nbsp;&nbsp;&nbsp;<<= App.Desc.piercing($activeSlave, "nipple")>><</if>>
+<<if $activeSlave.areolaePiercing > 0 >><br>&nbsp;&nbsp;&nbsp;&nbsp;<<= App.Desc.piercing($activeSlave, "areolae")>><</if>>
+<<if $activeSlave.navelPiercing > 0 >><br>&nbsp;&nbsp;&nbsp;&nbsp;<<= App.Desc.piercing($activeSlave, "navel")>><</if>>
+<<if $activeSlave.corsetPiercing > 0 >><br>&nbsp;&nbsp;&nbsp;&nbsp;<<= App.Desc.piercing($activeSlave, "corset")>><</if>>
+<<if $activeSlave.clitPiercing > 0 >><br>&nbsp;&nbsp;&nbsp;&nbsp;<<= App.Desc.piercing($activeSlave, "clit")>><</if>>
+<<if $activeSlave.vaginaPiercing > 0 >><br>&nbsp;&nbsp;&nbsp;&nbsp;<<= App.Desc.piercing($activeSlave, "vagina")>><</if>>
+<<if $activeSlave.dickPiercing > 0 >><br>&nbsp;&nbsp;&nbsp;&nbsp;<<= App.Desc.piercing($activeSlave, "dick")>><</if>>
+<<if $activeSlave.anusPiercing > 0 >><br>&nbsp;&nbsp;&nbsp;&nbsp;<<= App.Desc.piercing($activeSlave, "anus")>><</if>>
+
+<br><<= App.Desc.piercing($activeSlave, "chastity")>>
 
 /* Apply piercings */
 
@@ -624,7 +609,7 @@ Tattoos:
 <<if $activeSlave.stampTat != 0>>							<br>&nbsp;&nbsp;&nbsp;&nbsp;<<= App.Desc.tattoo($activeSlave, "lower back")>><<set _hasTat = 1>><</if>>
 <<if $activeSlave.buttTat != 0>>							<br>&nbsp;&nbsp;&nbsp;&nbsp;<<= App.Desc.tattoo($activeSlave, "buttock")>><<set _hasTat = 1>><</if>>
 <<if $activeSlave.vaginaTat != 0>>							<br>&nbsp;&nbsp;&nbsp;&nbsp;<<= App.Desc.tattoo($activeSlave, "vagina")>><<set _hasTat = 1>><</if>>
-<<if $activeSlave.dickTat != 0 && $activeSlave.dick > 0>>	<br>&nbsp;&nbsp;&nbsp;&nbsp;<<= App.Desc.tattoo($activeSlave, "penis")>><<set _hasTat = 1>><</if>>
+<<if $activeSlave.dickTat != 0 && $activeSlave.dick > 0>>	<br>&nbsp;&nbsp;&nbsp;&nbsp;<<= App.Desc.tattoo($activeSlave, "dick")>><<set _hasTat = 1>><</if>>
 <<if $activeSlave.anusTat != 0>>							<br>&nbsp;&nbsp;&nbsp;&nbsp;<<= App.Desc.tattoo($activeSlave, "anus")>><<set _hasTat = 1>><</if>>
 <<if $activeSlave.legsTat != 0 && $activeSlave.amp != 1>>	<br>&nbsp;&nbsp;&nbsp;&nbsp;<<= App.Desc.tattoo($activeSlave, "thigh")>><<set _hasTat = 1>><</if>>
 
diff --git a/src/uncategorized/longSlaveDescription.tw b/src/uncategorized/longSlaveDescription.tw
index 582036d6452..4db8ac2a928 100644
--- a/src/uncategorized/longSlaveDescription.tw
+++ b/src/uncategorized/longSlaveDescription.tw
@@ -1926,9 +1926,7 @@ $He is
 	$activeSlave.counter.pitKills slaves have died by $his hand in pit fights.
 <</if>>
 
-<<if $activeSlave.corsetPiercing > 0>>
-	<<CorsetPiercingDescription>>
-<</if>>
+<<= App.Desc.piercing($activeSlave, "corset")>>
 
 <<pregnancyDescription>>
 
@@ -2082,9 +2080,9 @@ $He is
 			The piercings on $his head run through $his suit, helping secure the material to $his head.
 		<</if>>
 	<<else>>
-		<<earPiercingDescription>>
-		<<nosePiercingDescription>>
-		<<eyebrowPiercingDescription>>
+		<<= App.Desc.mods($activeSlave, "ear")>>
+		<<= App.Desc.mods($activeSlave, "nose")>>
+		<<= App.Desc.mods($activeSlave, "eyebrow")>>
 		<<if ($activeSlave.custom.tattoo != "") && (def $activeSlave.custom.tattoo)>>
 			<<print $activeSlave.custom.tattoo>>
 		<</if>>
@@ -2144,10 +2142,9 @@ $He is
 <<= App.Desc.mods($activeSlave, "breast")>>
 <<shouldersDescription>>
 <<nipplesDescription>>
-<<if $showBodyMods == 1>>
-	<<nipplesPiercingDescription>>
-<</if>>
+<<= App.Desc.mods($activeSlave, "nipple")>>
 <<areolaeDescription>>
+<<= App.Desc.mods($activeSlave, "areolae")>>
 
 <<if $activeSlave.inflation > 0>> /* to be obsoleted with phase 4 */
 	<<BellyInflationDescription>>
@@ -2156,6 +2153,7 @@ $He is
 <<else>>
 	<<BellyDescription>>
 <</if>>
+<<= App.Desc.mods($activeSlave, "navel")>>
 
 <<ButtDescription>>
 
diff --git a/src/uncategorized/wardrobeUse.tw b/src/uncategorized/wardrobeUse.tw
index 7e5f34bbfcd..1f0eb75d7cc 100644
--- a/src/uncategorized/wardrobeUse.tw
+++ b/src/uncategorized/wardrobeUse.tw
@@ -407,7 +407,7 @@ Collar: ''$activeSlave.collar.''
 
 Torso accessory: ''$activeSlave.bellyAccessory.''
 <br>
-//<<waistDescription>><<pregnancyDescription>><<clothingCorsetDescription>><<CorsetPiercingDescription>>//
+//<<waistDescription>><<pregnancyDescription>><<clothingCorsetDescription>><<= App.Desc.piercing($activeSlave, "corset")>>//
 <<options $activeSlave.bellyAccessory>>
 	<<option "none" "None">>
 	<<option "a corset" "Tight corset">>
diff --git a/src/utility/descriptionWidgetsFlesh.tw b/src/utility/descriptionWidgetsFlesh.tw
index 715142ccb42..ec8c905f7d0 100644
--- a/src/utility/descriptionWidgetsFlesh.tw
+++ b/src/utility/descriptionWidgetsFlesh.tw
@@ -1471,9 +1471,6 @@ $He's got a
 <<buttplugDescription>>
 
 <<= App.Desc.mods($activeSlave, "anus")>>
-<<if $showBodyMods == 1>>
-	<<anusPiercingDescription>>
-<</if>>
 
 <<if $activeSlave.fuckdoll > 0>>
 	As a Fuckdoll,
@@ -3604,11 +3601,6 @@ $He's got a
 
 <<= App.Desc.mods($activeSlave, "dick")>>
 <<= App.Desc.mods($activeSlave, "testicle")>>
-<<if $activeSlave.fuckdoll == 0>>
-	<<if $showBodyMods == 1>>
-		<<dickPiercingDescription>>
-	<</if>>
-<</if>>
 
 <</widget>>
 
@@ -4010,11 +4002,8 @@ $He's got a
 	<</if>>
 <</if>>
 
-<<if $showBodyMods == 1>>
-	<<vaginaPiercingDescription>>
-	<<clitPiercingDescription>>
-<</if>>
 <<= App.Desc.mods($activeSlave, "vagina")>>
+<<= App.Desc.mods($activeSlave, "clit")>>
 
 <<if $activeSlave.fuckdoll == 0>>
 	<<if ($activeSlave.releaseRules == "permissive") || $activeSlave.releaseRules == "masturbation">>
@@ -4385,7 +4374,6 @@ $His
 		<<makeupDescription>>
 	<</if>>
 <</if>>
-<<= App.Desc.mods($activeSlave, "lips")>>
 
 <</widget>>
 
@@ -4507,11 +4495,8 @@ $He has
 	$He has no sense of taste, but this isn't immediately obvious just by looking at $his tongue.
 <</if>>
 
-<<if $showBodyMods == 1>>
-	<<lipsPiercingDescription>>
-	<<tonguePiercingDescription>>
-<</if>>
-
+<<= App.Desc.mods($activeSlave, "lips")>>
+<<= App.Desc.mods($activeSlave, "tongue")>>
 
 <<if $activeSlave.fuckdoll > 0>>
 	<<if $PC.dick == 1>>Sticking a dick<<else>>Sliding a dildo<</if>> into $his <<if $activeSlave.lips > 95>>facepussy<<else>>mouth insert<</if>>
diff --git a/src/utility/descriptionWidgetsStyle.tw b/src/utility/descriptionWidgetsStyle.tw
index 7cf0f56afbe..7ea6398956c 100644
--- a/src/utility/descriptionWidgetsStyle.tw
+++ b/src/utility/descriptionWidgetsStyle.tw
@@ -877,7 +877,7 @@ $activeSlave.slaveName is
 		<<footwearDescription>>
 	<</if>>
 
-	<<chastityPiercingDescription>>
+	<<= App.Desc.piercing($activeSlave, "chastity")>>
 
 <<case "a Santa dress">>
 	made of red felt with white fur
@@ -4883,7 +4883,7 @@ $His
 		end at mid-calf, leaving $his feet bare except for a set of jeweled toe-rings.
 	<</switch>>
 
-	<<chastityPiercingDescription>>
+	<<= App.Desc.piercing($activeSlave, "chastity")>>
 
 <<default>>
 	<<switch $activeSlave.shoes>>
-- 
GitLab