diff --git a/src/art/artJS.js b/src/art/artJS.js
index 019cd3b5a05fb62f7852ca04a0f39ab6eaf46424..13bf1648e1d5a2b41b7f4164fb7680976a8e4149 100644
--- a/src/art/artJS.js
+++ b/src/art/artJS.js
@@ -1728,1941 +1728,3 @@ window.skinColorCatcher = function (artSlave) {
 	}
 	return colorSlave;
 };
-
-window.VectorArt = (function (artSlave) {
-	"use strict";
-	let V, T, slave;
-	let r;
-	let leftArmType, rightArmType, legSize, torsoSize, buttSize, penisSize, hairLength;
-	let bellyScaleFactor, artBoobScaleFactor, heightScaleFactor;
-	let artTranslationX, artTranslationY;
-	let penisDrawtime, penisArtString;
-	
-	function VectorArt(artSlave) {
-		/* set constants */
-		V = State.variables;
-		T = State.temporary;
-		slave = artSlave;
-		/* reset/initialize some variables */
-		T.artTransformBelly = "";
-		T.artTransformBoob = "";
-		T.art_transform = ""; /* in case other files are trying to use this, and expecting a string */
-		r = "";
-		if (V.seeHeight !== 0)
-			heightScaleFactor = 200 / slave.height;
-		else
-			heightScaleFactor = 1;
-
-		setArmType();
-		setBoobScaling();
-		setButtSize();
-		setHairLength();
-		setLegSize();
-		setPenisSize();
-		penisArtControl(); /* depends on setPenisSize and setBoobScaling, sets penisDrawtime and penisArtString */
-		setTorsoSize();
-		
-		/*
-		each function adds one layer of vector art
-		vector art added later is drawn over previously added art
-		(what is listed on the bottom in the code appears on the top of the image)
-		*/
-		ArtVectorHairBack();
-		ArtVectorArm();
-		ArtVectorAnalAccessories();
-		ArtVectorButt();
-		ArtVectorLeg();
-		ArtVectorFeet(); /* includes shoes and leg outfits*/
-		ArtVectorTorso();
-		ArtVectorPussy();
-		ArtVectorPubicHair();
-		if (slave.vaginaPiercing !== 0 || slave.clitPiercing !== 0)
-			ArtVectorPussyPiercings();
-		ArtVectorChastityBelt();
-		ArtVectorTorsoOutfit(); /* note: clothing covers chastity belts */
-		if (slave.scrotum > 0 && slave.balls > 0)
-			ArtVectorBalls();
-		if (penisDrawtime === 0) /* for dicks behind boobs */
-			r += penisArtString;
-		ArtVectorBelly(); /* includes navel piercing and belly-related clothing options */
-		ArtVectorBoob(); /* includes areolae and piercings */
-		if (penisDrawtime === 1) /* for dicks in front of boobs */
-			r += penisArtString;
-		ArtVectorBoobAddons(); /* piercings always appear in front of boobs AND dick */
-		ArtVectorCollar(); /* includes clavicle artwork */
-		ArtVectorHead(); /* glasses are drawn here */
-		ArtVectorHairFore();
-		
-		return r;
-	}
-
-	function setArmType() {
-		if (slave.amp === 1) {
-			leftArmType = "None";
-			rightArmType = "None";
-		} else {
-			if (slave.devotion > 50) {
-				leftArmType = "High";
-				rightArmType = "High";
-			} else if (slave.trust >= -20) {
-				if (slave.devotion < -20) {
-					leftArmType = "Rebel";
-					rightArmType = "Low";
-				} else if (slave.devotion <= 20) {
-					leftArmType = "Low";
-					rightArmType = "Low";
-				} else {
-					leftArmType = "Mid";
-					rightArmType = "High";
-				}
-			} else {
-				leftArmType = "Mid";
-				rightArmType = "Mid";
-			}
-		}
-	}
-
-	function setBoobScaling() {
-		/*
-		Prepare SVG transform matrix for continuous boob scaling.
-		This transform affects boobs, areolae and piercings.
-		The parameters were fit by points (300,1.0) and (15000,2.5).
-		See https://www.wolframalpha.com/input/?i=log+fit+%7B%7B300,1%7D,%7B15000,2.5%7D%7D .
-		Boobs start at 300cc as of "flesh description widgets".
-		Upper value was discussed at https://github.com/Free-Cities/Free-Cities/issues/950#issuecomment-321359466 .
-		*/
-		if (slave.boobs < 300) {
-			artBoobScaleFactor = 1;
-			artTranslationX = 22; /* a little shift to the right is needed due to perspective */
-			artTranslationY = 0;
-		} else {
-			artBoobScaleFactor = 0.383433 * Math.log(0.0452403 * slave.boobs) * heightScaleFactor;
-			artTranslationX = -282.841 * artBoobScaleFactor + 292.349;
-			artTranslationY = -225.438 * artBoobScaleFactor + 216.274;
-		}
-		T.artTransformBoob = `matrix(${artBoobScaleFactor},0,0,${artBoobScaleFactor},${artTranslationX},${artTranslationY})`;
-	}
-
-	function setButtSize() {
-		/* Size calculations - needs to be done even for amputees */
-		buttSize = Math.clamp(Math.trunc(slave.butt), 1, 7) - 1;
-	}
-
-	function setHairLength() {
-		hairLength = undefined;
-		if (slave.hLength >= 60)
-			hairLength = "Long";
-		else if (slave.hLength >= 30)
-			hairLength = "Medium";
-		else if (slave.hLength >= 10)
-			hairLength = "Short";		
-	}
-
-	function setLegSize() {
-		/* Leg wideness switch courtesy of Nov-X */
-		/* needs to be done even for amputees */
-		if (slave.hips === -2) {
-			if (slave.weight <= 0)
-				legSize = "Narrow";
-			else if (slave.weight < 161)
-				legSize = "Normal";
-			else 
-				legSize = "Wide";
-		} else if (slave.hips === -1) {
-			if (slave.weight <= -11)
-				legSize = "Narrow";
-			else if (slave.weight < 96)
-				legSize = "Normal";
-			else
-				legSize = "Wide";
-		} else if (slave.hips === 0) {
-			if (slave.weight <= -96)
-				legSize = "Narrow";
-			else if (slave.weight < 11)
-				legSize = "Normal";
-			else if (slave.weight < 131)
-				legSize = "Wide";
-			else
-				legSize = "Thick";
-		} else if (slave.hips === 1) {
-			if (slave.weight <= -31)
-				legSize = "Normal";
-			else if (slave.weight < 31)
-				legSize = "Wide";
-			else
-				legSize = "Thick";
-		} else { /* .hips === 2 or 3 */
-			if (slave.weight <= -11)
-				legSize = "Wide";
-			else
-				legSize = "Thick";
-		}
-	}
-
-	function setPenisSize() {
-		penisSize = undefined;
-		if (slave.dick > 6 || (slave.dick > 0 && slave.belly <= 4000))
-			penisSize = Math.clamp(slave.dick, 1, 11) - 1;
-	}
-
-	function penisArtControl() {
-		penisArtString = "";
-		if (penisSize === undefined) {
-			penisDrawtime = -1; /* no penis to draw */
-		} else {
-			penisDrawtime = 0; /* default is to draw before boobs/belly */
-			switch (slave.clothes) {
-				/* BULGE OUTFITS LONG+MEDIUM OUTFITS */
-				case "a ball gown":
-				case "a biyelgee costume":
-				case "a burkini":
-				case "a burqa":
-				case "a dirndl":
-				case "a halter top dress":
-				case "a hijab and abaya":
-				case "a hijab and blouse":
-				case "a kimono":
-				case "a klan robe":
-				case "a long qipao":
-				case "a maternity dress":
-				case "a military uniform":
-				case "a mounty outfit":
-				case "a nice maid outfit":
-				case "a nice nurse outfit":
-				case "a niqab and abaya":
-				case "a police uniform":
-				case "a red army uniform":
-				case "a schutzstaffel uniform":
-				case "a skimpy loincloth":
-				case "a slave gown":
-				case "a slutty nurse outfit":
-				case "a slutty schutzstaffel uniform":
-				case "a t-shirt and jeans":
-				case "a toga":
-				case "an apron":
-				case "battlearmor":
-				case "battledress":
-				case "conservative clothing":
-				case "jeans":
-				case "leather pants":
-				case "leather pants and a tube top":
-				case "leather pants and pasties":
-				case "lederhosen":
-				case "nice business attire":
-				case "slutty business attire":
-				case "spats and a tank top":
-				case "sport shorts":
-				case "sport shorts and a sports bra":
-				case "sport shorts and a t-shirt":
-				case "stretch pants and a crop-top":
-					penisArtString = jsInclude(`Art_Vector_Bulge_Outfit_${penisSize}`);
-					break;
-				/* BULGE OUTFITS SHORT OUTFITS */
-				case "a bunny outfit":
-				case "a button-up shirt and panties":
-				case "a chattel habit":
-				case "a huipil":
-				case "a leotard":
-				case "a mini dress":
-				case "a monokini":
-				case "a one-piece swimsuit":
-				case "a penitent nuns habit":
-				case "a scalemail bikini":
-				case "a slutty klan robe":
-				case "a slutty maid outfit":
-				case "a slutty outfit":
-				case "a slutty qipao":
-				case "a succubus outfit":
-				case "a sweater and cutoffs":
-				case "a sweater and panties":
-				case "a t-shirt and panties":
-				case "a t-shirt and thong":
-				case "a tank-top and panties":
-				case "a thong":
-				case "a tube top and thong":
-				case "an oversized t-shirt and boyshorts":
-				case "attractive lingerie for a pregnant woman":
-				case "boyshorts":
-				case "cutoffs":
-				case "cutoffs and a t-shirt":
-				case "harem gauze":
-				case "kitty lingerie":
-				case "panties":
-				case "panties and pasties":
-				case "striped panties":
-				case "striped underwear":
-					if (slave.belly <= 4000) {
-						if (slave.dick > 3)
-							penisArtString = jsInclude("Art_Vector_Bulge_Outfit_3");
-						else
-							penisArtString = jsInclude(`Art_Vector_Bulge_Outfit_${penisSize}`);
-					}
-					break;
-				/* hide everything */
-				case "a cheerleader outfit":
-				case "a gothic lolita dress":
-				case "a hanbok":
-				case "a schoolgirl outfit":
-					break;
-				/* full frontal */
-				default:
-					if (canAchieveErection(slave) && slave.dickAccessory !== "chastity" && slave.dickAccessory !== "combined chastity") {
-						penisDrawtime = 1; /* draw erect penis over boobs if boobs do not hide the penis' base */
-						if (artBoobScaleFactor < 3.7) {
-							if (slave.foreskin !== 0)
-								penisArtString = jsInclude(`Art_Vector_Penis_${penisSize}`);
-							else
-								penisArtString = jsInclude(`Art_Vector_PenisCirc_${penisSize}`);
-						}
-					} else {
-						/* flaccid penises are drawn behind the boobs/belly */
-						if (slave.foreskin !== 0) 
-							penisArtString = jsInclude(`Art_Vector_Flaccid_${penisSize}`);
-						else
-							penisArtString = jsInclude(`Art_Vector_FlaccidCirc_${penisSize}`);
-						/* this draws chastity OVER latex catsuit. prndev finds this alright. */
-						if (slave.dickAccessory === "chastity" || slave.dickAccessory === "combined chastity") 
-							penisArtString += jsInclude(`Art_Vector_Chastity_Cage_${penisSize}`);
-					}
-			}
-		}
-	}
-
-	function setTorsoSize() {
-		/* Torso size switch courtesy of Nov-X */
-		if (slave.waist >= 96) {
-			if (slave.weight >= 96)
-				torsoSize = "Obese";
-			else if (slave.weight >= 11)
-				torsoSize = "Fat";
-			else if (slave.weight > -31)
-				torsoSize = "Chubby";
-			else
-				torsoSize = "Normal";
-		} else if (slave.waist >= 41) {
-			if (slave.weight >= 131)
-				torsoSize = "Obese";
-			else if (slave.weight >= 31)
-				torsoSize = "Fat";
-			else if (slave.weight >= 0)
-				torsoSize = "Chubby";
-			else if (slave.weight > -96)
-				torsoSize = "Normal";
-			else
-				torsoSize = "Hourglass";
-		} else if (slave.waist >= 11) {
-			if (slave.weight >= 161)
-				torsoSize = "Obese";
-			else if (slave.weight >= 96)
-				torsoSize = "Fat";
-			else if (slave.weight >= 11)
-				torsoSize = "Chubby";
-			else if (slave.weight > -31)
-				torsoSize = "Normal";
-			else
-				torsoSize = "Hourglass";
-		} else if (slave.waist > -11) {
-			if (slave.weight >= 191)
-				torsoSize = "Obese";
-			else if (slave.weight >= 131)
-				torsoSize = "Fat";
-			else if (slave.weight >= 31)
-				torsoSize = "Chubby";
-			else if (slave.weight >= 0)
-				torsoSize = "Normal";
-			else if (slave.weight > -96)
-				torsoSize = "Hourglass";
-			else
-				torsoSize = "Unnatural";
-		} else if (slave.waist > -41) {
-			if (slave.weight >= 161)
-				torsoSize = "Fat";
-			else if (slave.weight >= 96)
-				torsoSize = "Chubby";
-			else if (slave.weight >= 11)
-				torsoSize = "Normal";
-			else if (slave.weight > -31)
-				torsoSize = "Hourglass";
-			else
-				torsoSize = "Unnatural";
-		} else if (slave.waist > -96) {
-			if (slave.weight >= 191)
-				torsoSize = "Fat";
-			else if (slave.weight >= 131)
-				torsoSize = "Chubby";
-			else if (slave.weight >= 31)
-				torsoSize = "Normal";
-			else if (slave.weight > -11)
-				torsoSize = "Hourglass";
-			else
-				torsoSize = "Unnatural";
-		} else {
-			if (slave.weight >= 161)
-				torsoSize = "Chubby";
-			else if (slave.weight >= 96)
-				torsoSize = "Normal";
-			else if (slave.weight > 0)
-				torsoSize = "Hourglass";
-			else
-				torsoSize = "Unnatural";
-		}
-	}
-
-	function ArtVectorAnalAccessories() {
-		if (slave.buttplug === "long plug")
-			r += jsInclude("Art_Vector_Plug_Long");
-		else if (slave.buttplug === "large plug")
-			r += jsInclude("Art_Vector_Plug_Large");
-		else if (slave.buttplug === "long, large plug")
-			r += jsInclude("Art_Vector_Plug_Large_Long");
-		else if (slave.buttplug === "huge plug")
-			r += jsInclude("Art_Vector_Plug_Huge");
-		else if (slave.buttplug === "long, huge plug")
-			r += jsInclude("Art_Vector_Plug_Huge_Long");
-
-		if (slave.buttplugAttachment === "tail")
-			r += jsInclude("Art_Vector_Plug_Tail");
-		else if (slave.buttplugAttachment === "cat tail")
-			r += jsInclude("Art_Vector_Cat_Tail");
-	}
-
-	function ArtVectorArm() {
-		/* Arms position switch courtesy of Nov-X */
-		/* Updated 2018-10-25 by Fr0g */
-		/* - changed arm calculation block position*/
-		/* - added brackets to make boolean logic run */
-
-		if (slave.amp === 1) {
-			/* Many amputee clothing art files exist, but draw nothing.They are excluded for now to reduce on rendering time
-			r += jsInclude("Art_Vector_Arm_Right_None");
-			r += jsInclude("Art_Vector_Arm_Left_None");
-			*/
-		} else { /* is not amputee or has limbs equipped so running arm calculation block */
-			if (slave.amp === 0) {
-				r += jsInclude(`Art_Vector_Arm_Right_${rightArmType}`);
-				r += jsInclude(`Art_Vector_Arm_Left_${leftArmType}`);
-				if (slave.muscles >= 6) {
-					if (leftArmType === "High")
-						r += jsInclude("Art_Vector_Arm_Left_High_MLight");
-					else if (leftArmType === "Mid")
-						r += jsInclude("Art_Vector_Arm_Left_Mid_MLight");
-					else if (leftArmType === "Low")
-						r += jsInclude("Art_Vector_Arm_Left_Low_MLight");
-					else if (leftArmType === "Rebel")
-						r += jsInclude("Art_Vector_Arm_Left_Rebel_MLight");
-
-					if (rightArmType === "High")
-						r += jsInclude("Art_Vector_Arm_Right_High_MLight");
-					else if (rightArmType === "Mid")
-						r += jsInclude("Art_Vector_Arm_Right_Mid_MLight");
-					else if (rightArmType === "Low")
-						r += jsInclude("Art_Vector_Arm_Right_Low_MLight");
-				}
-			} else if (slave.PLimb === 1 || slave.PLimb === 2) { /* slave is an amputee and has PLimbs equipped */
-				if (slave.amp === -1) {
-					r += jsInclude(`Art_Vector_Arm_Right_ProstheticBasic_${rightArmType}`);
-					r += jsInclude(`Art_Vector_Arm_Left_ProstheticBasic_${leftArmType}`);
-				} else if (slave.amp === -2) {
-					r += jsInclude(`Art_Vector_Arm_Right_ProstheticSexy_${rightArmType}`);
-					r += jsInclude(`Art_Vector_Arm_Left_ProstheticSexy_${leftArmType}`);
-				} else if (slave.amp === -3) {/* Reverting beauty limbs to regular SVG */
-					r += jsInclude(`Art_Vector_Arm_Right_ProstheticBeauty_${rightArmType}`);
-					r += jsInclude(`Art_Vector_Arm_Left_ProstheticBeauty_${leftArmType}`);
-				} else if (slave.amp === -4) {
-					r += jsInclude(`Art_Vector_Arm_Right_ProstheticCombat_${rightArmType}`);
-					r += jsInclude(`Art_Vector_Arm_Left_ProstheticCombat_${leftArmType}`);
-				} else if (slave.amp === -5) {
-					r += jsInclude(`Art_Vector_Arm_Right_ProstheticSwiss_${rightArmType}`);
-					r += jsInclude(`Art_Vector_Arm_Left_ProstheticSwiss_${leftArmType}`);
-				}
-			}
-			/* shiny clothing */
-			if (V.seeVectorArtHighlights === 1) {
-				if (slave.fuckdoll !== 0 || slave.clothes === "restrictive latex" || slave.clothes === "a latex catsuit" || slave.clothes === "body oil") {
-					/* only some arm positions have art (feel free to add more) */
-					if (leftArmType === "High")
-						r += jsInclude("Art_Vector_Arm_Outfit_Shine_Left_High");
-					else if (leftArmType === "Mid")
-						r += jsInclude("Art_Vector_Arm_Outfit_Shine_Left_Mid");
-					else if (leftArmType === "Low")
-						r += jsInclude("Art_Vector_Arm_Outfit_Shine_Left_Low");
-				}
-			}
-			/* TODO: simplify selection (select prefix, infix and suffix and combine instead of using switch statements) */
-			switch (slave.clothes) {
-				case "a biyelgee costume":
-				case "a burkini":
-				case "a button-up shirt":
-				case "a button-up shirt and panties":
-				case "a cheerleader outfit":
-				case "a dirndl":
-				case "a gothic lolita dress":
-				case "a hanbok":
-				case "a hijab and blouse":
-				case "a huipil":
-				case "a kimono":
-				case "a klan robe":
-				case "a long qipao":
-				case "a military uniform":
-				case "a mounty outfit":
-				case "a nice maid outfit":
-				case "a nice nurse outfit":
-				case "a police uniform":
-				case "a red army uniform":
-				case "a schoolgirl outfit":
-				case "a slutty klan robe":
-				case "a slutty nurse outfit":
-				case "a slutty qipao":
-				case "a sweater":
-				case "a sweater and cutoffs":
-				case "a sweater and panties":
-				case "a t-shirt":
-				case "a t-shirt and jeans":
-				case "a t-shirt and panties":
-				case "a t-shirt and thong":
-				case "an oversized t-shirt":
-				case "an oversized t-shirt and boyshorts":
-				case "battlearmor":
-				case "battledress":
-				case "clubslut netting":
-				case "conservative clothing":
-				case "cutoffs and a t-shirt":
-				case "lederhosen":
-				case "nice business attire":
-				case "slutty business attire":
-				case "slutty jewelry":
-				case "sport shorts and a t-shirt":
-				case "Western clothing":
-					r += jsInclude(`Art_Vector_Arm_Outfit_${clothing2artSuffix(slave.clothes)}_Right_${rightArmType}`);
-					r += jsInclude(`Art_Vector_Arm_Outfit_${clothing2artSuffix(slave.clothes)}_Left_${leftArmType}`);
-					break;
-				/* manually handle special cases */
-				case "a schutzstaffel uniform":
-				case "a slutty schutzstaffel uniform":
-					r += jsInclude(`Art_Vector_Arm_Outfit_SchutzstaffelUniform_Right_${rightArmType}`);
-					r += jsInclude(`Art_Vector_Arm_Outfit_SchutzstaffelUniform_Left_${leftArmType}`);
-					break;
-				case "a hijab and abaya":
-				case "a niqab and abaya":
-				case "a burqa":
-					r += jsInclude(`Art_Vector_Arm_Outfit_HijabAndAbaya_Right_${rightArmType}`);
-					r += jsInclude(`Art_Vector_Arm_Outfit_HijabAndAbaya_Left_${leftArmType}`);
-					break;
-				case "a slave gown":
-					/* only some arm positions have art (feel free to add more) */
-					if (leftArmType !== "Rebel")
-						r += jsInclude(`Art_Vector_Arm_Outfit_SlaveGown_Left_${leftArmType}`);
-			}
-		} /* close .amp check */
-	}
-
-	function ArtVectorBalls() {
-		switch (slave.clothes) {
-			case "a bra":
-			case "a button-up shirt":
-			case "a comfortable bodysuit":
-			case "a cybersuit":
-			case "a fallen nuns habit":
-			case "a hanbok":
-			case "a latex catsuit":
-			case "a monokini":
-			case "a nice pony outfit":
-			case "a slutty pony outfit":
-			case "a sports bra":
-			case "a string bikini":
-			case "a striped bra":
-			case "a sweater":
-			case "a t-shirt":
-			case "a tank-top":
-			case "a thong":
-			case "a tube top":
-			case "an oversized t-shirt":
-			case "attractive lingerie":
-			case "body oil":
-			case "chains":
-			case "choosing her own clothes":
-			case "clubslut netting":
-			case "no clothing":
-			case "panties and pasties":
-			case "restrictive latex":
-			case "shibari ropes":
-			case "slutty jewelry":
-			case "uncomfortable straps":
-			case "Western clothing":
-				let ballsScaleFactor = (slave.scrotum / 3) * heightScaleFactor;
-				artTranslationX = -271 * (ballsScaleFactor - 1);
-				artTranslationY = -453 * (ballsScaleFactor - 1);
-				T.artTransformBalls = `matrix(${ballsScaleFactor},0,0,${ballsScaleFactor},${artTranslationX},${artTranslationY})`;
-				r += jsInclude("Art_Vector_Balls");
-		}
-	}
-
-	function ArtVectorBelly() {
-		if (slave.belly >= 2000) {
-			/* add pregnancy belly, scale dynamically (clothing and addons can be scaled, too) */
-			/* TODO: add check in penis control. do not draw penis atop belly if _art_belly_scale_factor > 1. */
-			bellyScaleFactor = 0.300 * Math.log(0.011 * slave.belly) * heightScaleFactor;
-			artTranslationX = -262 * (bellyScaleFactor - 1);
-			artTranslationY = -284 * (bellyScaleFactor - 1);
-			T.artTransformBelly = `matrix(${bellyScaleFactor},0,0,${bellyScaleFactor},${artTranslationX},${artTranslationY})`;
-
-			if (slave.navelPiercing === 1)
-				r += jsInclude("Art_Vector_Belly_Pregnant_Piercing");
-			else if (slave.navelPiercing === 2)
-				r += jsInclude("Art_Vector_Belly_Pregnant_Piercing_Heavy");
-			else
-				r += jsInclude("Art_Vector_Belly");
-
-			switch (slave.clothes) {
-				case "a bra":
-				case "a cybersuit":
-				case "a Fuckdoll suit":
-				case "a latex catsuit":
-				case "a nice pony outfit":
-				case "a scalemail bikini":
-				case "a skimpy loincloth":
-				case "a slutty klan robe":
-				case "a slutty outfit":
-				case "a slutty pony outfit":
-				case "a sports bra":
-				case "a string bikini":
-				case "a striped bra":
-				case "a thong":
-				case "a tube top":
-				case "a tube top and thong":
-				case "attractive lingerie":
-				case "attractive lingerie for a pregnant woman":
-				case "body oil":
-				case "boyshorts":
-				case "chains":
-				case "choosing her own clothes":
-				case "cutoffs":
-				case "jeans":
-				case "kitty lingerie":
-				case "leather pants":
-				case "leather pants and a tube top":
-				case "leather pants and pasties":
-				case "no clothing":
-				case "panties":
-				case "panties and pasties":
-				case "restrictive latex":
-				case "shibari ropes":
-				case "slutty jewelry":
-				case "sport shorts":
-				case "sport shorts and a sports bra":
-				case "stretch pants and a crop-top":
-				case "striped panties":
-				case "striped underwear":
-				case "uncomfortable straps":
-					break; /* do nothing for these choices */
-				/* manually handle special cases */
-				case "a slutty schutzstaffel uniform":
-					r += jsInclude("Art_Vector_Belly_Outfit_SchutzstaffelUniform");
-					break;
-				case "a niqab and abaya":
-				case "a burqa":
-					r += jsInclude("Art_Vector_Belly_Outfit_HijabAndAbaya");
-					break;
-				default:
-					r += jsInclude(`Art_Vector_Belly_Outfit_${clothing2artSuffix(slave.clothes)}`);
-			}
-			/* shiny clothing */
-			if (V.seeVectorArtHighlights === 1) {
-				if (slave.fuckdoll !== 0 || slave.clothes === "restrictive latex" || slave.clothes === "a latex catsuit" || slave.clothes === "body oil") {
-					r += jsInclude("Art_Vector_Belly_Outfit_Shine");
-				}
-			}
-		}
-		/* belly piercings for flat bellies */
-		if (slave.belly === 0) {
-			if (slave.navelPiercing === 1)
-				r += jsInclude("Art_Vector_Belly_Piercing");
-			else if (slave.navelPiercing === 2)
-				r += jsInclude("Art_Vector_Belly_Piercing_Heavy");
-		}
-		/* Torso Accessories */
-		if ((slave.bellyAccessory === "a corset" || slave.bellyAccessory === "an extreme corset") && slave.belly === 0) {
-			if (torsoSize === "Normal")
-				r += jsInclude("Art_Vector_Corsetnormal");
-			else if (torsoSize === "Hourglass")
-				r += jsInclude("Art_Vector_Corsethourglass");
-			else if (torsoSize === "Unnatural")
-				r += jsInclude("Art_Vector_Corsetunnatural");
-		} else if (slave.bellyAccessory === "a small empathy belly") {
-			r += jsInclude("Art_Vector_Empathy_Belly_Small");
-		} else if (slave.bellyAccessory === "a medium empathy belly") {
-			r += jsInclude("Art_Vector_Empathy_Belly_Medium");
-		} else if (slave.bellyAccessory === "a large empathy belly") {
-			r += jsInclude("Art_Vector_Empathy_Belly_Large");
-		} else if (slave.bellyAccessory === "a huge empathy belly") {
-			r += jsInclude("Art_Vector_Empathy_Belly_Huge");
-		}
-	}
-
-	function ArtVectorBoob() {
-		if (slave.boobs < 300) {
-			/* BEWARE: this threshold may be used in other art-related code, too */
-			/* boobs too small - draw areolae directly onto torso */
-		} else {
-			r += jsInclude("Art_Vector_Boob_Alt");
-			/* shiny clothing */
-			if (V.seeVectorArtHighlights === 1) {
-				if (slave.fuckdoll !== 0 || slave.clothes === "a latex catsuit" || slave.clothes === "body oil")
-					r += jsInclude("Art_Vector_Boob_Outfit_Shine");
-			}
-		}
-		switch (slave.clothes) { /* display nipples/areola for the following clothes */
-			case "a chattel habit":
-			case "a fallen nuns habit":
-			case "a Fuckdoll suit":
-			case "a monokini":
-			case "a nice pony outfit":
-			case "a skimpy loincloth":
-			case "a slutty pony outfit":
-			case "a string bikini":
-			case "a succubus outfit":
-			case "a thong":
-			case "a toga":
-			case "attractive lingerie for a pregnant woman":
-			case "body oil":
-			case "boyshorts":
-			case "chains":
-			case "choosing her own clothes":
-			case "clubslut netting":
-			case "cutoffs":
-			case "jeans":
-			case "leather pants":
-			case "no clothing":
-			case "panties":
-			case "restrictive latex":
-			case "shibari ropes":
-			case "slutty jewelry":
-			case "sport shorts":
-			case "striped panties":
-			case "uncomfortable straps":
-				if (slave.areolaeShape === "star")
-					r += jsInclude("Art_Vector_Boob_Areola_Star");
-				else if (slave.areolaeShape === "heart")
-					r += jsInclude("Art_Vector_Boob_Areola_Heart");
-				else if (slave.areolae === 0)
-					r += jsInclude("Art_Vector_Boob_Areola");
-				else if (slave.areolae === 1)
-					r += jsInclude("Art_Vector_Boob_Areola_Large");
-				else if (slave.areolae === 2)
-					r += jsInclude("Art_Vector_Boob_Areola_Wide");
-				else if (slave.areolae === 3)
-					r += jsInclude("Art_Vector_Boob_Areola_Huge");
-
-				if (slave.nipples === "tiny")
-					r += jsInclude("Art_Vector_Boob_NippleTiny");
-				else if (slave.nipples === "cute")
-					r += jsInclude("Art_Vector_Boob_NippleCute");
-				else if (slave.nipples === "puffy")
-					r += jsInclude("Art_Vector_Boob_NipplePuffy");
-				else if (slave.nipples === "inverted")
-					r += jsInclude("Art_Vector_Boob_NippleInverted");
-				else if (slave.nipples === "huge")
-					r += jsInclude("Art_Vector_Boob_NippleHuge");
-				else if (slave.nipples === "partially inverted")
-					r += jsInclude("Art_Vector_Boob_NipplePartiallyInverted");
-				else if (slave.nipples === "fuckable")
-					r += jsInclude("Art_Vector_Boob_NippleFuckable");
-		}
-	}
-
-	function ArtVectorBoobAddons() {
-		if (slave.boobs < 300) {
-			/* boobs too small: do not show boob-related art */
-			/* BEWARE: this threshold should be kept in sync with the one in Art_Vector_Boob_ */
-		} else {
-			switch (slave.clothes) {
-				case "a chattel habit":
-				case "a comfortable bodysuit":
-				case "a cybersuit":
-				case "a fallen nuns habit":
-				case "a Fuckdoll suit":
-				case "a latex catsuit":
-				case "a nice pony outfit":
-				case "a skimpy loincloth":
-				case "a slutty pony outfit":
-				case "a succubus outfit":
-				case "a thong":
-				case "body oil":
-				case "boyshorts":
-				case "choosing her own clothes":
-				case "cutoffs":
-				case "jeans":
-				case "leather pants":
-				case "no clothing":
-				case "panties":
-				case "restrictive latex":
-				case "sport shorts":
-				case "striped panties":
-					break; /* do nothing for these choices */
-				/* manually handle special cases */
-				case "a slutty schutzstaffel uniform":
-					r += jsInclude("Art_Vector_Boob_Outfit_SchutzstaffelUniform");
-					break;
-				case "a niqab and abaya":
-				case "a burqa":
-					r += jsInclude("Art_Vector_Boob_Outfit_HijabAndAbaya");
-					break;
-				default:
-					r += jsInclude(`Art_Vector_Boob_Outfit_${clothing2artSuffix(slave.clothes)}`);
-			}
-		}
-		if (V.showBodyMods === 1 && (slave.nipplesPiercing > 0 || slave.areolaePiercing > 0)) {
-			/* shows nipple piercings in game when selected; piercings will show on the outfits listed below */
-			switch (slave.clothes) {
-				case "a chattel habit":
-				case "a comfortable bodysuit":
-				case "a cybersuit":
-				case "a fallen nuns habit":
-				case "a latex catsuit":
-				case "a monokini":
-				case "a nice pony outfit":
-				case "a penitent nuns habit":
-				case "a skimpy loincloth":
-				case "a slutty pony outfit":
-				case "a string bikini":
-				case "a succubus outfit":
-				case "a thong":
-				case "an apron":
-				case "attractive lingerie":
-				case "attractive lingerie for a pregnant woman":
-				case "body oil":
-				case "boyshorts":
-				case "chains":
-				case "choosing her own clothes":
-				case "cutoffs":
-				case "jeans":
-				case "leather pants":
-				case "leather pants and a tube top":
-				case "leather pants and pasties":
-				case "no clothing":
-				case "panties":
-				case "restrictive latex":
-				case "shibari ropes":
-				case "slutty jewelry":
-				case "sport shorts":
-				case "striped panties":
-				case "uncomfortable straps":
-					if (slave.nipplesPiercing === 1)
-						r += jsInclude("Art_Vector_Boob_Piercing");
-					else if (slave.nipplesPiercing > 1)
-						r += jsInclude("Art_Vector_Boob_Piercing_Heavy");
-
-					if (slave.areolaePiercing === 1)
-						r += jsInclude("Art_Vector_Boob_Areola_Piercing");
-					else if (slave.areolaePiercing > 1)
-						r += jsInclude("Art_Vector_Boob_Areola_Piercingheavy");
-			}
-		}
-	}
-
-	function ArtVectorButt() {
-		if (slave.amp === 0)
-			r += jsInclude(`Art_Vector_Butt_${buttSize}`);
-		else if (slave.amp === -1)
-			r += jsInclude(`Art_Vector_Butt_ProstheticBasic_${buttSize}`);
-		else if (slave.amp === -2)
-			r += jsInclude(`Art_Vector_Butt_ProstheticSexy_${buttSize}`);
-		else if (slave.amp === -3) /* reverted to regular SVG to match description */
-			r += jsInclude(`Art_Vector_Butt_ProstheticBeauty_${buttSize}`);
-		else if (slave.amp === -4)
-			r += jsInclude(`Art_Vector_Butt_ProstheticCombat_${buttSize}`);
-		else if (slave.amp === -5)
-			r += jsInclude(`Art_Vector_Butt_ProstheticSwiss_${buttSize}`);
-	}
-
-	function ArtVectorChastityBelt() {
-		let bodySize = "";
-		if (slave.waist >= 96) {
-			if (slave.weight >= 11)
-				bodySize = "Fat";
-			else if (slave.weight > -31)
-				bodySize = "_Chubby";
-		} else if (slave.waist >= 41) {
-			if (slave.weight >= 31)
-				bodySize = "Fat";
-			else if (slave.weight >= 0)
-				bodySize = "_Chubby";
-		} else if (slave.waist >= 11) {
-			if (slave.weight >= 96)
-				bodySize = "Fat";
-			else if (slave.weight >= 11)
-				bodySize = "_Chubby";
-		} else if (slave.waist > -11) {
-			if (slave.weight >= 131)
-				bodySize = "Fat";
-			else if (slave.weight >= 31)
-				bodySize = "_Chubby";
-		} else if (slave.waist > -41) {
-			if (slave.weight >= 161)
-				bodySize = "Fat";
-			else if (slave.weight >= 96)
-				bodySize = "_Chubby";
-		} else if (slave.waist > -96) {
-			if (slave.weight >= 191)
-				bodySize = "Fat";
-			else if (slave.weight >= 131)
-				bodySize = "_Chubby";
-		} else {
-			if (slave.weight >= 31)
-				bodySize = "_Chubby";
-		}
-
-		if (slave.dickAccessory === "anal chastity" || slave.dickAccessory === "combined chastity" || slave.vaginalAccessory === "anal chastity" || slave.vaginalAccessory === "combined chastity") {
-			if (bodySize === "Fat") {
-				r += jsInclude("Art_Vector_Chastity_Vagina_Fat");
-			} else {
-				r += jsInclude("Art_Vector_Chastity_Anus");
-				r += jsInclude(`Art_Vector_Chastity_Base${bodySize}`);
-			}
-		}
-		if (slave.vaginalAccessory === "chastity belt" || slave.vaginalAccessory === "combined chastity") {
-			if (bodySize === "Fat") {
-				r += jsInclude("Art_Vector_Chastity_Vagina_Fat");
-			} else {
-				r += jsInclude("Art_Vector_Chastity_Vagina");
-				r += jsInclude(`Art_Vector_Chastity_Base${bodySize}`);
-			}
-		}
-		if (slave.vaginalAccessory !== "none") {
-			switch (slave.clothes) {/* shows vaginal accessories on the outfits below */
-				case "a bra":
-				case "a button-up shirt":
-				case "a button-up shirt and panties":
-				case "a chattel habit":
-				case "a comfortable bodysuit":
-				case "a fallen nuns habit":
-				case "a Fuckdoll suit":
-				case "a latex catsuit":
-				case "a monokini":
-				case "a nice pony outfit":
-				case "a penitent nuns habit":
-				case "a slutty klan robe":
-				case "a slutty outfit":
-				case "a slutty pony outfit":
-				case "a sports bra":
-				case "a string bikini":
-				case "a striped bra":
-				case "a succubus outfit":
-				case "a sweater":
-				case "a t-shirt":
-				case "a t-shirt and panties":
-				case "a t-shirt and thong":
-				case "a tank-top":
-				case "a thong":
-				case "a tube top":
-				case "a tube top and thong":
-				case "an apron":
-				case "an oversized t-shirt":
-				case "attractive lingerie":
-				case "attractive lingerie for a pregnant woman":
-				case "body oil":
-				case "chains":
-				case "choosing her own clothes":
-				case "clubslut netting":
-				case "cutoffs":
-				case "harem gauze":
-				case "no clothing":
-				case "panties":
-				case "panties and pasties":
-				case "restrictive latex":
-				case "shibari ropes":
-				case "slutty jewelry":
-				case "striped underwear":
-				case "uncomfortable straps":
-					if (slave.vaginalAccessory === "dildo") {
-						r += jsInclude("Art_Vector_Dildo_Short");
-					} else if (slave.vaginalAccessory === "long dildo") {
-						r += jsInclude("Art_Vector_Dildo_Long");
-					} else if (slave.clothes !== "a comfortable bodysuit" && slave.clothes !== "a string bikini" && slave.clothes !== "attractive lingerie for a pregnant woman" && slave.clothes !== "restrictive latex") {
-						if (slave.vaginalAccessory === "large dildo") /* additional outfits disabled due to the art breaking with the larger accessories */
-							r += jsInclude("Art_Vector_Dildo_Large");
-						else if (slave.vaginalAccessory === "long, large dildo")
-							r += jsInclude("Art_Vector_Dildo_Large_Long");
-						else if (slave.vaginalAccessory === "huge dildo")
-							r += jsInclude("Art_Vector_Dildo_Huge");
-						else if (slave.vaginalAccessory === "long, huge dildo")
-							r += jsInclude("Art_Vector_Dildo_Huge_Long");
-					}
-			}
-		}
-	}
-
-	function ArtVectorCollar() {
-		r += jsInclude("Art_Vector_Clavicle");
-		/* TODO": find out where "uncomfortable leather" collar art went */
-		switch (slave.collar) {
-			case "leather with cowbell":
-				r += jsInclude("Art_Vector_Collar_Cowbell");
-				break;
-			case "heavy gold":
-				r += jsInclude("Art_Vector_Collar_Gold_Heavy");
-				break;
-			case "neck corset":
-				r += jsInclude("Art_Vector_Collar_Neck_Corset");
-				break;
-			case "pretty jewelry":
-				r += jsInclude("Art_Vector_Collar_Pretty_Jewelry");
-				break;
-			case "cruel retirement counter":
-				r += jsInclude("Art_Vector_Collar_Retirement_Cruel");
-				break;
-			case "nice retirement counter":
-				r += jsInclude("Art_Vector_Collar_Retirement_Nice");
-				break;
-			case "satin choker":
-				r += jsInclude("Art_Vector_Collar_Satin_Choker");
-				break;
-			case "shock punishment":
-				r += jsInclude("Art_Vector_Collar_Shock_Punishment");
-				break;
-			case "stylish leather":
-				r += jsInclude("Art_Vector_Collar_Stylish_Leather");
-				break;
-			case "tight steel":
-				r += jsInclude("Art_Vector_Collar_Tight_Steel");
-				break;
-			case "uncomfortable leather":
-				r += jsInclude("Art_Vector_Collar_Leather_Cruel");
-				break;
-			case "silk ribbon":
-				r += jsInclude("Art_Vector_Collar_Silk_Ribbon");
-				break;
-			case "bowtie":
-				r += jsInclude("Art_Vector_Collar_Bowtie");
-				break;
-			case "ancient Egyptian":
-				r += jsInclude("Art_Vector_Collar_Ancientegyptian");
-		}
-	}
-
-	function ArtVectorFeet() {
-		let outfit, stockings;
-		if (slave.legAccessory === "short stockings")
-			stockings = "SS";
-		else if (slave.legAccessory === "long stockings")
-			stockings = "LL";
-
-		/* Updated 2018-10-25 by Fr0g */
-		/* - added brackets to make boolean logic run */
-		if (slave.shoes === "heels") {
-			r += jsInclude("Art_Vector_Shoes_Heel");
-		} else if (slave.shoes === "pumps") {
-				r += jsInclude("Art_Vector_Shoes_Pump");
-		} else if (slave.shoes === "extreme heels") {
-				r += jsInclude(`Art_Vector_Shoes_Extreme_Heel_${legSize}`);
-		} else if (slave.shoes === "boots") {
-				r += jsInclude(`Art_Vector_Shoes_Boot_${legSize}`);
-		} else if (slave.shoes === "flats") {
-				r += jsInclude("Art_Vector_Shoes_Flat");
-		} else {
-			if (slave.amp === 0) {
-				r += jsInclude("Art_Vector_Feet_Normal");
-			} else if (slave.PLimb === 1 || slave.PLimb === 2) {
-				if (slave.amp === -1)
-					r += jsInclude("Art_Vector_Feet_ProstheticBasic");
-				else if (slave.amp === -2)
-					r += jsInclude("Art_Vector_Feet_ProstheticSexy");
-				else if (slave.amp === -3)
-					r += jsInclude("Art_Vector_Feet_ProstheticBeauty");
-				else if (slave.amp === -4)
-					r += jsInclude("Art_Vector_Feet_ProstheticCombat");
-				else if (slave.amp === -5)
-					r += jsInclude("Art_Vector_Feet_ProstheticSwiss");
-			}
-		}
-		if (stockings !== undefined && slave.amp !== 1) {
-			if (slave.shoes === "heels") {
-				r += jsInclude(`Art_Vector_Shoes_Heel_${stockings}_${legSize}`);
-			} else if (slave.shoes === "pumps") {
-				r += jsInclude(`Art_Vector_Shoes_Pump_${stockings}_${legSize}`);
-			} else if (slave.shoes === "flats") {
-				r += jsInclude(`Art_Vector_Shoes_Flat_${stockings}_${legSize}`);
-			} else if (slave.shoes === "none") {
-				r += jsInclude(`Art_Vector_Shoes_Stockings_${stockings}_${legSize}`);
-			}
-		}
-		switch (slave.clothes) {
-			case "a bra":
-			case "a button-up shirt":
-			case "a button-up shirt and panties":
-			case "a chattel habit":
-			case "a comfortable bodysuit":
-			case "a cybersuit":
-			case "a gothic lolita dress":
-			case "a hanbok":
-			case "a leotard":
-			case "a nice pony outfit":
-			case "a one-piece swimsuit":
-			case "a penitent nuns habit":
-			case "a scalemail bikini":
-			case "a skimpy loincloth":
-			case "a slutty klan robe":
-			case "a slutty outfit":
-			case "a slutty pony outfit":
-			case "a sports bra":
-			case "a string bikini":
-			case "a striped bra":
-			case "a sweater":
-			case "a sweater and panties":
-			case "a t-shirt":
-			case "a t-shirt and panties":
-			case "a t-shirt and thong":
-			case "a tank-top":
-			case "a tank-top and panties":
-			case "a thong":
-			case "a tube top":
-			case "a tube top and thong":
-			case "an oversized t-shirt":
-			case "attractive lingerie for a pregnant woman":
-			case "chains":
-			case "choosing her own clothes":
-			case "kitty lingerie":
-			case "no clothing":
-			case "panties":
-			case "panties and pasties":
-			case "shibari ropes":
-			case "striped panties":
-			case "striped underwear":
-			case "uncomfortable straps":
-				break; /* do nothing for these cases */
-			case "a Fuckdoll suit":
-			case "a latex catsuit":
-			case "body oil":
-			case "restrictive latex":
-				if (V.seeVectorArtHighlights === 1) /* special case for shiny clothing */
-					outfit = "Shine";
-				break;
-			default:
-				outfit = clothing2artSuffix(slave.clothes);
-		}
-		if (outfit !== undefined) {
-			if (slave.amp !== 1) {
-				if (slave.clothes !== "a slutty qipao" && slave.clothes !== "harem gauze" && slave.clothes !== "slutty jewelry" && slave.clothes !== "Western clothing") /* these clothes have a stump/leg outfit, but no butt outfit */
-					r += jsInclude(`Art_Vector_Butt_Outfit_${outfit}_${buttSize}`);
-				if (slave.clothes !== "a schoolgirl outfit") /* file is there, but contains no artwork */
-					r += jsInclude(`Art_Vector_Leg_Outfit_${outfit}_${legSize}`);
-			} else {
-				if (outfit === "Shine") /* the only stump outfit that does not draw an empty svg */
-					r += jsInclude(`Art_Vector_Leg_Outfit_${outfit}_Stump`);
-			}
-		}
-	}
-
-	function ArtVectorHairBack() {
-		if (hairLength !== undefined) { /* Don't draw hair if it isn't there */
-			if (slave.fuckdoll !== 0 || (slave.bald !== 0 && slave.hStyle === "bald")) {
-				r += jsInclude("Art_Vector_Hair_Back_NoHair");
-			} else {
-				switch (slave.clothes) {
-					case "a biyelgee costume":
-					case "a burkini":
-					case "a burqa":
-					case "a chattel habit":
-					case "a cybersuit":
-					case "a fallen nuns habit":
-					case "a hijab and abaya":
-					case "a hijab and blouse":
-					case "a klan robe":
-					case "a military uniform":
-					case "a mounty outfit":
-					case "a niqab and abaya":
-					case "a penitent nuns habit":
-					case "a police uniform":
-					case "a red army uniform":
-					case "a schutzstaffel uniform":
-					case "a slutty klan robe":
-					case "a slutty nurse outfit":
-					case "a slutty schutzstaffel uniform":
-					case "battlearmor":
-					case "restrictive latex":
-					case "Western clothing":
-						break; /* do nothing */
-					default:
-						switch (slave.hStyle) {
-							case "buzzcut":
-							case "shaved":
-							case "shaved bald":
-								r += jsInclude("Art_Vector_Hair_Back_NoHair");
-								break;
-							case "afro":
-								if (slave.hLength >= 150)
-									r += jsInclude("Art_Vector_Hair_Back_Afro_Giant");
-								else
-									r += jsInclude(`Art_Vector_Hair_Back_Afro_${hairLength}`);
-								break;
-							case "messy bun":
-								r += jsInclude(`Art_Vector_Hair_Back_Ninja_${hairLength}`);
-								break;
-							case "strip":
-								r += jsInclude("Art_Vector_Hair_Back_NoHair");
-								break;
-							case "braided":
-							case "bun":
-							case "cornrows":
-							case "curled":
-							case "dreadlocks":
-							case "eary":
-							case "luxurious":
-							case "messy":
-							case "neat":
-							case "permed":
-							case "ponytail":
-							case "tails":
-							case "up":
-								r += jsInclude(`Art_Vector_Hair_Back_${capFirstChar(slave.hStyle)}_${hairLength}`);
-								break;
-							default:
-								r += jsInclude("Art_Vector_Hair_Back_Messy_Medium");
-						}
-				}
-			}
-		}
-		/* note: latex clothing actually shows some hair, but there is no appropriate art for it */
-		if (slave.collar === "cat ears")
-			r += jsInclude("Art_Vector_Cat_Ear_Back");
-	}
-
-	function ArtVectorHairFore() {
-		if (hairLength !== undefined) { /* Don't draw hair if it isn't there */
-			if (slave.fuckdoll !== 0 || (slave.bald !== 0 && slave.hStyle === "bald")) {
-				r += jsInclude("Art_Vector_Hair_Fore_NoHair");
-			} else {
-				switch (slave.clothes) {
-					case "a biyelgee costume":
-					case "a burkini":
-					case "a burqa":
-					case "a chattel habit":
-					case "a cybersuit":
-					case "a fallen nuns habit":
-					case "a hijab and abaya":
-					case "a hijab and blouse":
-					case "a klan robe":
-					case "a military uniform":
-					case "a mounty outfit":
-					case "a niqab and abaya":
-					case "a penitent nuns habit":
-					case "a police uniform":
-					case "a red army uniform":
-					case "a schutzstaffel uniform":
-					case "a slutty klan robe":
-					case "a slutty nurse outfit":
-					case "a slutty schutzstaffel uniform":
-					case "battlearmor":
-					case "restrictive latex":
-					case "Western clothing":
-						break; /* do nothing */
-					default:
-						switch (slave.hStyle) {
-							case "buzzcut":
-							case "shaved":
-							case "shaved bald":
-								r += jsInclude("Art_Vector_Hair_Fore_NoHair");
-								break;
-							case "afro":
-								if (slave.hLength >= 150)
-									r += jsInclude("Art_Vector_Hair_Fore_Afro_Giant");
-								else
-									r += jsInclude(`Art_Vector_Hair_Fore_Afro_${hairLength}`);
-								break;
-							case "messy bun":
-								r += jsInclude(`Art_Vector_Hair_Fore_Ninja_${hairLength}`);
-								break;
-							case "bun":
-							case "neat":
-							case "ponytail":
-								r += jsInclude(`Art_Vector_Hair_Fore_${capFirstChar(slave.hStyle)}`);
-								break;
-							case "braided":
-							case "cornrows":
-							case "curled":
-							case "dreadlocks":
-							case "eary":
-							case "luxurious":
-							case "messy":
-							case "permed":
-							case "strip":
-							case "tails":
-							case "up":
-								r += jsInclude(`Art_Vector_Hair_Fore_${capFirstChar(slave.hStyle)}_${hairLength}`);
-								break;
-							default:
-								r += jsInclude("Art_Vector_Hair_Fore_Messy_Medium");
-						}
-				}
-			}
-		}
-		/* note: latex clothing actually shows some hair, but there is no appropriate art for it */
-		if (slave.collar === "cat ears")
-			r += jsInclude("Art_Vector_Cat_Ear_Fore");
-	}
-	
-	function ArtVectorHead() {
-		const eyebrowFullness = clothing2artSuffix(slave.eyebrowFullness); /* designed for clothing but works for eyebrows too. If other eyebrow styles are added, this may need to be changed. */
-		const hasEyebrows = slave.eyebrowHStyle !== "bald" && slave.eyebrowHStyle !== "shaved";
-
-		r += jsInclude("Art_Vector_Head");
-		/* shiny clothing */
-		if (V.seeVectorArtHighlights === 1) {
-			if (slave.fuckdoll !== 0 || slave.clothes === "restrictive latex" || slave.clothes === "a latex catsuit")
-				r += jsInclude("Art_Vector_Head_Outfit_Shine");
-		}
-		if (slave.clothes !== "restrictive latex") {
-			if (slave.markings === "beauty mark")
-				r += jsInclude("Art_Vector_Beauty_Mark");
-			else if (slave.markings === "freckles")
-				r += jsInclude("Art_Vector_Freckles");
-			else if (slave.markings === "heavily freckled")
-				r += jsInclude("Art_Vector_Freckles_Heavy");
-			else if (slave.markings === "birthmark")
-				r += jsInclude("Art_Vector_Birthmark");
-			else if (slave.minorInjury === "black eye")
-				r += jsInclude("Art_Vector_Black_Eye");
-		}
-		/* FACIAL APPEARANCE */
-		if (V.seeFaces === 1) {
-			if (slave.fuckdoll === 0 && slave.clothes !== "restrictive latex") {
-				switch (slave.race) {
-					case "southern european":
-					case "white":
-						if (slave.faceShape === "normal") {
-							r += jsInclude("Art_Vector_Eyes_TypeB");
-							r += jsInclude("Art_Vector_Mouth_TypeA");
-							r += jsInclude("Art_Vector_Nose_TypeA");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
-						} else if (slave.faceShape === "masculine") {
-							r += jsInclude("Art_Vector_Eyes_TypeD");
-							r += jsInclude("Art_Vector_Mouth_TypeF");
-							r += jsInclude("Art_Vector_Nose_TypeF");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
-						} else if (slave.faceShape === "androgynous") {
-							r += jsInclude("Art_Vector_Eyes_TypeE");
-							r += jsInclude("Art_Vector_Mouth_TypeE");
-							r += jsInclude("Art_Vector_Nose_TypeE");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
-						} else if (slave.faceShape === "cute") {
-							r += jsInclude("Art_Vector_Eyes_TypeB");
-							r += jsInclude("Art_Vector_Mouth_TypeB");
-							r += jsInclude("Art_Vector_Nose_TypeD");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
-						} else if (slave.faceShape === "sensual") {
-							r += jsInclude("Art_Vector_Eyes_TypeC");
-							r += jsInclude("Art_Vector_Mouth_TypeC");
-							r += jsInclude("Art_Vector_Nose_TypeC");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
-						} else if (slave.faceShape === "exotic") {
-							r += jsInclude("Art_Vector_Eyes_TypeA");
-							r += jsInclude("Art_Vector_Mouth_TypeC");
-							r += jsInclude("Art_Vector_Nose_TypeC");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
-						}
-						break;
-					case "asian":
-					case "malay":
-					case "pacific islander":
-						if (slave.faceShape === "normal") {
-							r += jsInclude("Art_Vector_Eyes_TypeA");
-							r += jsInclude("Art_Vector_Mouth_TypeC");
-							r += jsInclude("Art_Vector_Nose_TypeC");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
-						} else if (slave.faceShape === "masculine") {
-							r += jsInclude("Art_Vector_Eyes_TypeD");
-							r += jsInclude("Art_Vector_Mouth_TypeD");
-							r += jsInclude("Art_Vector_Nose_TypeB");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
-						} else if (slave.faceShape === "androgynous") {
-							r += jsInclude("Art_Vector_Eyes_TypeE");
-							r += jsInclude("Art_Vector_Mouth_TypeE");
-							r += jsInclude("Art_Vector_Nose_TypeA");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
-						} else if (slave.faceShape === "cute") {
-							r += jsInclude("Art_Vector_Eyes_TypeC");
-							r += jsInclude("Art_Vector_Mouth_TypeC");
-							r += jsInclude("Art_Vector_Nose_TypeC");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
-						} else if (slave.faceShape === "sensual") {
-							r += jsInclude("Art_Vector_Eyes_TypeA");
-							r += jsInclude("Art_Vector_Mouth_TypeA");
-							r += jsInclude("Art_Vector_Nose_TypeE");
-							if (slave.eyebrowFullness === "pencil-thin")
-								r += jsInclude("Art_Vector_Eyebrow_TypeC_Pencilthin");
-							else if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
-						} else if (slave.faceShape === "exotic") {
-							r += jsInclude("Art_Vector_Eyes_TypeB");
-							r += jsInclude("Art_Vector_Mouth_TypeC");
-							r += jsInclude("Art_Vector_Nose_TypeF");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
-						}
-						break;
-					case "amerindian":
-					case "latina":
-						if (slave.faceShape === "normal") {
-							r += jsInclude("Art_Vector_Eyes_TypeB");
-							r += jsInclude("Art_Vector_Mouth_TypeE");
-							r += jsInclude("Art_Vector_Nose_TypeD");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeB_${eyebrowFullness}`);
-						} else if (slave.faceShape === "masculine") {
-							r += jsInclude("Art_Vector_Eyes_TypeE");
-							r += jsInclude("Art_Vector_Mouth_TypeD");
-							r += jsInclude("Art_Vector_Nose_TypeF");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
-						} else if (slave.faceShape === "androgynous") {
-							r += jsInclude("Art_Vector_Eyes_TypeA");
-							r += jsInclude("Art_Vector_Mouth_TypeD");
-							r += jsInclude("Art_Vector_Nose_TypeB");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
-						} else if (slave.faceShape === "cute") {
-							r += jsInclude("Art_Vector_Eyes_TypeF");
-							r += jsInclude("Art_Vector_Mouth_TypeB");
-							r += jsInclude("Art_Vector_Nose_TypeB");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
-						} else if (slave.faceShape === "sensual") {
-							r += jsInclude("Art_Vector_Eyes_TypeB");
-							r += jsInclude("Art_Vector_Mouth_TypeE");
-							r += jsInclude("Art_Vector_Nose_TypeC");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
-						} else if (slave.faceShape === "exotic") {
-							r += jsInclude("Art_Vector_Eyes_TypeC");
-							r += jsInclude("Art_Vector_Mouth_TypeA");
-							r += jsInclude("Art_Vector_Nose_TypeC");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
-						}
-						break;
-					case "black":
-						if (slave.faceShape === "normal") {
-							r += jsInclude("Art_Vector_Eyes_TypeD");
-							r += jsInclude("Art_Vector_Mouth_TypeB");
-							r += jsInclude("Art_Vector_Nose_TypeF");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
-						} else if (slave.faceShape === "masculine") {
-							r += jsInclude("Art_Vector_Eyes_TypeA");
-							r += jsInclude("Art_Vector_Mouth_TypeD");
-							r += jsInclude("Art_Vector_Nose_TypeF");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
-						} else if (slave.faceShape === "androgynous") {
-							r += jsInclude("Art_Vector_Eyes_TypeF");
-							r += jsInclude("Art_Vector_Mouth_TypeE");
-							r += jsInclude("Art_Vector_Nose_TypeB");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
-						} else if (slave.faceShape === "cute") {
-							r += jsInclude("Art_Vector_Eyes_TypeC");
-							r += jsInclude("Art_Vector_Mouth_TypeE");
-							r += jsInclude("Art_Vector_Nose_TypeD");
-							if (slave.eyebrowFullness === "natural")
-								r += jsInclude("Art_Vector_Eyebrow_TypeB_Natural");
-							else if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
-						} else if (slave.faceShape === "sensual") {
-							r += jsInclude("Art_Vector_Eyes_TypeC");
-							r += jsInclude("Art_Vector_Mouth_TypeF");
-							r += jsInclude("Art_Vector_Nose_TypeA");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
-						} else if (slave.faceShape === "exotic") {
-							r += jsInclude("Art_Vector_Eyes_TypeE");
-							r += jsInclude("Art_Vector_Mouth_TypeE");
-							r += jsInclude("Art_Vector_Nose_TypeC");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
-						}
-						break;
-					case "middle eastern":
-						if (slave.faceShape === "normal") {
-							r += jsInclude("Art_Vector_Eyes_TypeB");
-							r += jsInclude("Art_Vector_Mouth_TypeA");
-							r += jsInclude("Art_Vector_Nose_TypeA");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
-						} else if (slave.faceShape === "masculine") {
-							r += jsInclude("Art_Vector_Eyes_TypeD");
-							r += jsInclude("Art_Vector_Mouth_TypeF");
-							r += jsInclude("Art_Vector_Nose_TypeA");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeB_${eyebrowFullness}`);
-						} else if (slave.faceShape === "androgynous") {
-							r += jsInclude("Art_Vector_Eyes_TypeF");
-							r += jsInclude("Art_Vector_Mouth_TypeB");
-							r += jsInclude("Art_Vector_Nose_TypeF");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
-						} else if (slave.faceShape === "cute") {
-							r += jsInclude("Art_Vector_Eyes_TypeB");
-							r += jsInclude("Art_Vector_Mouth_TypeB");
-							r += jsInclude("Art_Vector_Nose_TypeC");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
-						} else if (slave.faceShape === "sensual") {
-							r += jsInclude("Art_Vector_Eyes_TypeA");
-							r += jsInclude("Art_Vector_Mouth_TypeD");
-							r += jsInclude("Art_Vector_Nose_TypeA");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
-						} else if (slave.faceShape === "exotic") {
-							r += jsInclude("Art_Vector_Eyes_TypeE");
-							r += jsInclude("Art_Vector_Mouth_TypeE");
-							r += jsInclude("Art_Vector_Nose_TypeE");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
-						}
-						break;
-					case "semitic":
-						if (slave.faceShape === "normal") {
-							r += jsInclude("Art_Vector_Eyes_TypeB");
-							r += jsInclude("Art_Vector_Mouth_TypeA");
-							r += jsInclude("Art_Vector_Nose_TypeA");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
-						} else if (slave.faceShape === "masculine") {
-							r += jsInclude("Art_Vector_Eyes_TypeD");
-							r += jsInclude("Art_Vector_Mouth_TypeF");
-							r += jsInclude("Art_Vector_Nose_TypeA");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeB_${eyebrowFullness}`);
-						} else if (slave.faceShape === "androgynous") {
-							r += jsInclude("Art_Vector_Eyes_TypeF");
-							r += jsInclude("Art_Vector_Mouth_TypeB");
-							r += jsInclude("Art_Vector_Nose_TypeF");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
-						} else if (slave.faceShape === "cute") {
-							r += jsInclude("Art_Vector_Eyes_TypeB");
-							r += jsInclude("Art_Vector_Mouth_TypeB");
-							r += jsInclude("Art_Vector_Nose_TypeC");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
-						} else if (slave.faceShape === "sensual") {
-							r += jsInclude("Art_Vector_Eyes_TypeA");
-							r += jsInclude("Art_Vector_Mouth_TypeD");
-							r += jsInclude("Art_Vector_Nose_TypeA");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
-						} else if (slave.faceShape === "exotic") {
-							r += jsInclude("Art_Vector_Eyes_TypeE");
-							r += jsInclude("Art_Vector_Mouth_TypeE");
-							r += jsInclude("Art_Vector_Nose_TypeE");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
-						}
-						break;
-					case "indo-aryan":
-						if (slave.faceShape === "normal") {
-							r += jsInclude("Art_Vector_Eyes_TypeE");
-							r += jsInclude("Art_Vector_Mouth_TypeA");
-							r += jsInclude("Art_Vector_Nose_TypeD");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
-						} else if (slave.faceShape === "masculine") {
-							r += jsInclude("Art_Vector_Eyes_TypeF");
-							r += jsInclude("Art_Vector_Mouth_TypeD");
-							r += jsInclude("Art_Vector_Nose_TypeE");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
-						} else if (slave.faceShape === "androgynous") {
-							r += jsInclude("Art_Vector_Eyes_TypeC");
-							r += jsInclude("Art_Vector_Mouth_TypeB");
-							r += jsInclude("Art_Vector_Nose_TypeD");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
-						} else if (slave.faceShape === "cute") {
-							r += jsInclude("Art_Vector_Eyes_TypeC");
-							r += jsInclude("Art_Vector_Mouth_TypeD");
-							r += jsInclude("Art_Vector_Nose_TypeA");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
-						} else if (slave.faceShape === "sensual") {
-							r += jsInclude("Art_Vector_Eyes_TypeA");
-							r += jsInclude("Art_Vector_Mouth_TypeE");
-							r += jsInclude("Art_Vector_Nose_TypeC");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
-						} else if (slave.faceShape === "exotic") {
-							r += jsInclude("Art_Vector_Eyes_TypeA");
-							r += jsInclude("Art_Vector_Mouth_TypeC");
-							r += jsInclude("Art_Vector_Nose_TypeC");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
-						}
-						break;
-					case "mixed race":
-						if (slave.faceShape === "normal") {
-							r += jsInclude("Art_Vector_Eyes_TypeE");
-							r += jsInclude("Art_Vector_Mouth_TypeA");
-							r += jsInclude("Art_Vector_Nose_TypeD");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
-						} else if (slave.faceShape === "masculine") {
-							r += jsInclude("Art_Vector_Eyes_TypeF");
-							r += jsInclude("Art_Vector_Mouth_TypeD");
-							r += jsInclude("Art_Vector_Nose_TypeE");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
-						} else if (slave.faceShape === "androgynous") {
-							r += jsInclude("Art_Vector_Eyes_TypeC");
-							r += jsInclude("Art_Vector_Mouth_TypeB");
-							r += jsInclude("Art_Vector_Nose_TypeD");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
-						} else if (slave.faceShape === "cute") {
-							r += jsInclude("Art_Vector_Eyes_TypeC");
-							r += jsInclude("Art_Vector_Mouth_TypeD");
-							r += jsInclude("Art_Vector_Nose_TypeA");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
-						} else if (slave.faceShape === "sensual") {
-							r += jsInclude("Art_Vector_Eyes_TypeA");
-							r += jsInclude("Art_Vector_Mouth_TypeE");
-							r += jsInclude("Art_Vector_Nose_TypeC");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
-						} else if (slave.faceShape === "exotic") {
-							r += jsInclude("Art_Vector_Eyes_TypeA");
-							r += jsInclude("Art_Vector_Mouth_TypeC");
-							r += jsInclude("Art_Vector_Nose_TypeC");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
-						}
-						break;
-					default:
-						if (slave.faceShape === "normal") {
-							r += jsInclude("Art_Vector_Eyes_TypeB");
-							r += jsInclude("Art_Vector_Mouth_TypeA");
-							r += jsInclude("Art_Vector_Nose_TypeA");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
-						} else if (slave.faceShape === "masculine") {
-							r += jsInclude("Art_Vector_Eyes_TypeD");
-							r += jsInclude("Art_Vector_Mouth_TypeF");
-							r += jsInclude("Art_Vector_Nose_TypeF");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
-						} else if (slave.faceShape === "androgynous") {
-							r += jsInclude("Art_Vector_Eyes_TypeE");
-							r += jsInclude("Art_Vector_Mouth_TypeE");
-							r += jsInclude("Art_Vector_Nose_TypeE");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
-						} else if (slave.faceShape === "cute") {
-							r += jsInclude("Art_Vector_Eyes_TypeB");
-							r += jsInclude("Art_Vector_Mouth_TypeB");
-							r += jsInclude("Art_Vector_Nose_TypeD");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
-						} else if (slave.faceShape === "sensual") {
-							r += jsInclude("Art_Vector_Eyes_TypeC");
-							r += jsInclude("Art_Vector_Mouth_TypeC");
-							r += jsInclude("Art_Vector_Nose_TypeC");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
-						} else if (slave.faceShape === "exotic") {
-							r += jsInclude("Art_Vector_Eyes_TypeA");
-							r += jsInclude("Art_Vector_Mouth_TypeC");
-							r += jsInclude("Art_Vector_Nose_TypeC");
-							if (hasEyebrows === true)
-								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
-						}
-				}
-			}
-		}
-		/* END FACIAL APPEARANCE */
-
-		if (slave.eyebrowPiercing === 1)
-			r += jsInclude("Art_Vector_Eyebrow_Light");
-		else if (slave.eyebrowPiercing === 2)
-			r += jsInclude("Art_Vector_Eyebrow_Heavy");
-
-		if (slave.nosePiercing === 1)
-			r += jsInclude("Art_Vector_Nose_Light");
-		else if (slave.nosePiercing === 2)
-			r += jsInclude("Art_Vector_Nose_Heavy");
-		
-		if (slave.lipsPiercing === 1)
-			r += jsInclude("Art_Vector_Lip_Light");
-		else if (slave.lipsPiercing === 2)
-			r += jsInclude("Art_Vector_Lip_Heavy");
-
-		/* ADDONS */
-		if (slave.fuckdoll === 0) { /* fuckdolls cannot be decorated */
-			if (slave.collar === "dildo gag")
-				r += jsInclude("Art_Vector_Dildo_Gag");
-			else if (slave.collar === "ball gag")
-				r += jsInclude("Art_Vector_Ball_Gag");
-			else if (slave.collar === "bit gag")
-				r += jsInclude("Art_Vector_Bit_Gag");
-			else if (slave.collar === "massive dildo gag")
-				r += jsInclude("Art_Vector_Massive_Dildo_Gag");
-			else if (slave.collar === "porcelain mask")
-				r += jsInclude("Art_Vector_Porcelain_Mask");
-
-			if (slave.eyewear === "corrective glasses" || slave.eyewear === "glasses" || slave.eyewear === "blurring glasses")
-				r += jsInclude("Art_Vector_Glasses");
-
-			/* head clothing */
-			switch (slave.clothes) {
-				case "a biyelgee costume":
-				case "a bunny outfit":
-				case "a burkini":
-				case "a burqa":
-				case "a chattel habit":
-				case "a cybersuit":
-				case "a fallen nuns habit":
-				case "a hijab and abaya":
-				case "a hijab and blouse":
-				case "a klan robe":
-				case "a military uniform":
-				case "a mounty outfit":
-				case "a niqab and abaya":
-				case "a penitent nuns habit":
-				case "a police uniform":
-				case "a red army uniform":
-				case "a slutty klan robe":
-				case "a slutty nurse outfit":
-				case "a succubus outfit":
-				case "battlearmor":
-				case "harem gauze":
-				case "Western clothing":
-					r += jsInclude(`Art_Vector_Head_Outfit_${clothing2artSuffix(slave.clothes)}`);
-					break;
-				case "a schutzstaffel uniform":
-				case "a slutty schutzstaffel uniform":
-					r += jsInclude("Art_Vector_Head_Outfit_SchutzstaffelUniform");
-					break;
-				case "kitty lingerie":
-					r += jsInclude("Art_Vector_Cat_Ear_Fore");
-					r += jsInclude("Art_Vector_Cat_Ear_Back");
-			}
-		}	
-	}
-
-	function ArtVectorLeg() {
-		/* Selection of matching SVG based on amputee level */
-		if (slave.amp === 0) {
-			r += jsInclude(`Art_Vector_Leg_${legSize}`);
-			if (slave.muscles >= 97)
-				r += jsInclude(`Art_Vector_Leg_${legSize}_MHeavy`);
-			else if (slave.muscles >= 62)
-				r += jsInclude(`Art_Vector_Leg_${legSize}_MMedium`);
-			else if (slave.muscles >= 30)
-				r += jsInclude(`Art_Vector_Leg_${legSize}_MLight`);
-		} else if (slave.amp === 1) {
-			r += jsInclude("Art_Vector_Stump");
-		} else if (slave.PLimb === 1 || slave.PLimb === 2) { /* slave is an amputee and has PLimbs equipped */
-			if (slave.amp === -1)
-				r += jsInclude(`Art_Vector_Leg_ProstheticBasic_${legSize}`);
-			else if (slave.amp === -2)
-				r += jsInclude(`Art_Vector_Leg_ProstheticSexy_${legSize}`);
-			else if (slave.amp === -3)
-				r += jsInclude(`Art_Vector_Leg_ProstheticBeauty_${legSize}`);
-			else if (slave.amp === -4)
-				r += jsInclude(`Art_Vector_Leg_ProstheticCombat_${legSize}`);
-			else /* slave.amp === -5 */
-				r += jsInclude(`Art_Vector_Leg_ProstheticSwiss_${legSize}`);
-		}
-	}
-
-	function ArtVectorPubicHair() {
-		if (slave.fuckdoll !== 0 || slave.clothes !== "a latex catsuit") {
-			if (V.showBodyMods === 1 && slave.vaginaTat === "rude words") {
-				if (slave.dick !== 0)
-					T.art_pussy_tattoo_text = "Useless";
-				else
-					T.art_pussy_tattoo_text = "Fucktoy";
-				r += jsInclude("Art_Vector_Pussy_Tattoo");
-			}
-			if (slave.physicalAge < 11) {
-				/* these art files exist, but draw empty svg's. Commented out for now to save on rendering time
-				r += jsInclude("Art_Vector_Pubic_Hair_None");
-				r += jsInclude("Art_Vector_Pubic_Hair_Underarm_None");
-				*/
-			} else if (slave.physicalAge <= 13) {
-				if (slave.pubicHStyle !== "waxed")
-					r += jsInclude("Art_Vector_Pubic_Hair_Wispy");
-			} else if (slave.clothes !== "a comfortable bodysuit") {
-				switch (slave.pubicHStyle) {
-					case "bald":
-					case "hairless":
-					case "waxed":
-						/* commented out to save on rendering time
-						r += jsInclude("Art_Vector_Pubic_Hair_None");
-						*/
-						break;
-					case "strip":
-					case "in a strip":
-						if (torsoSize === "Obese" || torsoSize === "Fat")
-							r += jsInclude("Art_Vector_Pubic_Hair_StripFat");
-						else
-							r += jsInclude("Art_Vector_Pubic_Hair_Strip");
-						break;
-					case "neat":
-						if (torsoSize === "Obese" || torsoSize === "Fat")
-							r += jsInclude("Art_Vector_Pubic_Hair_NeatFat");
-						else
-							r += jsInclude("Art_Vector_Pubic_Hair_Neat");
-						break;
-					case "bushy in the front and neat in the rear":
-						if (torsoSize === "Obese" || torsoSize === "Fat")
-							r += jsInclude("Art_Vector_Pubic_Hair_BushFat");
-						else
-							r += jsInclude("Art_Vector_Pubic_Hair_Bush");
-						break;
-					case "bushy":
-						if (torsoSize === "Obese" || torsoSize === "Fat")
-							r += jsInclude("Art_Vector_Pubic_Hair_BushyFat");
-						else
-							r += jsInclude("Art_Vector_Pubic_Hair_Bushy");
-						break;
-					case "very bushy":
-						if (torsoSize === "Obese" || torsoSize === "Fat")
-							r += jsInclude("Art_Vector_Pubic_Hair_Very_BushyFat");
-						else
-							r += jsInclude("Art_Vector_Pubic_Hair_Very_Bushy");
-				}
-				switch (slave.underArmHStyle) {
-					case "hairless":
-					case "waxed":
-					case "bald":
-						/* commented out to save on rendering time
-						r += jsInclude("Art_Vector_Pubic_Hair_Underarm_None");
-						*/
-						break;
-					case "shaved":
-						r += jsInclude("Art_Vector_Pubic_Hair_Underarm_Shaved");
-						break;
-					case "neat":
-						r += jsInclude("Art_Vector_Pubic_Hair_Underarm_Neat");
-						break;
-					case "bushy":
-						r += jsInclude("Art_Vector_Pubic_Hair_Underarm_Bushy");
-				}
-			}
-		}
-	}
-
-	function ArtVectorPussy() {
-		if (slave.vagina >= 0 && slave.clothes !== "a latex catsuit" && slave.clothes !== "a comfortable bodysuit" && slave.clothes !== "a cybersuit")
-			r += jsInclude("Art_Vector_Pussy");
-	}
-
-	function ArtVectorPussyPiercings() {
-		switch (slave.clothes) {/* piercings display on these clothes */
-			case "a bra":
-			case "a button-up shirt":
-			case "a chattel habit":
-			case "a comfortable bodysuit":
-			case "a cybersuit":
-			case "a fallen nuns habit":
-			case "a Fuckdoll suit":
-			case "a latex catsuit":
-			case "a monokini":
-			case "a nice pony outfit":
-			case "a penitent nuns habit":
-			case "a skimpy loincloth":
-			case "a slutty pony outfit":
-			case "a sports bra":
-			case "a string bikini":
-			case "a striped bra":
-			case "a succubus outfit":
-			case "a sweater":
-			case "a t-shirt":
-			case "a t-shirt and panties":
-			case "a t-shirt and thong":
-			case "a tank-top":
-			case "a tube top":
-			case "an oversized t-shirt":
-			case "attractive lingerie":
-			case "body oil":
-			case "chains":
-			case "choosing her own clothes":
-			case "no clothing":
-			case "restrictive latex":
-			case "shibari ropes":
-			case "slutty jewelry":
-			case "sport shorts":
-			case "sport shorts and a sports bra":
-			case "sport shorts and a t-shirt":
-			case "uncomfortable straps":
-			case "Western clothing":
-				/* piercinglevel = 1, Light; piercinglevel = 2, Heavy; piercinglevel = 3, Smart; piercinglevel = 0, None */
-				if (slave.vaginaPiercing === 1)
-					r += jsInclude("Art_Vector_Pussy_Piercing");
-				else if (slave.vaginaPiercing === 2)
-					r += jsInclude("Art_Vector_Pussy_Piercing_Heavy");
-
-				if (slave.clitPiercing === 1)
-					r += jsInclude("Art_Vector_Clit_Piercing");
-				else if (slave.clitPiercing === 2)
-					r += jsInclude("Art_Vector_Clit_Piercing_Heavy");
-				else if (slave.clitPiercing === 3)
-					r += jsInclude("Art_Vector_Clit_Piercing_Smart");
-		}
-	}
-
-	function ArtVectorTorso() {
-		r += jsInclude(`Art_Vector_Torso_${torsoSize}`);
-		if (slave.muscles >= 97)
-			r += jsInclude(`Art_Vector_Torso_${torsoSize}_MHeavy`);
-		else if (slave.muscles >= 62)
-			r += jsInclude(`Art_Vector_Torso_${torsoSize}_MMedium`);
-		else if (slave.muscles >= 30)
-			r += jsInclude(`Art_Vector_Torso_${torsoSize}_MLight`);
-	}
-
-	function ArtVectorTorsoOutfit() {
-		/* TODO: latex catsuit should cover vagina and its piercings, too */
-		switch (slave.clothes) {
-			case "a Fuckdoll suit":
-			case "a latex catsuit":
-			case "a nice pony outfit":
-			case "a slutty pony outfit":
-			case "choosing her own clothes":
-			case "no clothing":
-				break; /* no torso outfit */
-			/* manually handle special cases */
-			case "a cybersuit":
-				r += jsInclude(`Art_Vector_Torso_Outfit_Latex_${torsoSize}`);
-				break;
-			case "a slutty schutzstaffel uniform":
-				r += jsInclude(`Art_Vector_Torso_Outfit_SchutzstaffelUniform_${torsoSize}`);
-				break;
-			case "a niqab and abaya":
-			case "a burqa":
-				r += jsInclude(`Art_Vector_Torso_Outfit_HijabAndAbaya_${torsoSize}`);
-				break;
-			default:
-				r += jsInclude(`Art_Vector_Torso_Outfit_${clothing2artSuffix(slave.clothes)}_${torsoSize}`);
-		}
-		if (V.seeVectorArtHighlights === 1) {
-			if (slave.fuckdoll !== 0 || slave.clothes === "restrictive latex" || slave.clothes === "a latex catsuit") {
-				if (slave.amp !== 0)
-					r += jsInclude("Art_Vector_Torso_Outfit_Shine_Shoulder");
-				if (slave.preg <= 0)
-					r += jsInclude(`Art_Vector_Torso_Outfit_Shine_${torsoSize}`);
-			}
-		}
-	}
-	return VectorArt;
-})();
diff --git a/src/art/artWidgets.tw b/src/art/artWidgets.tw
index b0bf63b04dde8f301e8808873843dfe5d28c7105..22f2127b7aeb7d4f40a6fda91ed29be8fbff8791 100644
--- a/src/art/artWidgets.tw
+++ b/src/art/artWidgets.tw
@@ -31,13 +31,7 @@ $args[2]: icon UI Display for vector art, 1 for on.
 
 <<elseif $imageChoice == 1>> /* VECTOR ART BY NOX*/
 
-<<set _artSlave = $args[0] >>
-/* prepare HTML color codes for slave display */
-/* note: latex clothing is mostly emulated by rubber color for skin (and shoes) */
-/* TODO: consistently use American "color" instead of "colour" for all identifiers */
-<<run ArtVectorColor(_artSlave)>>
-<<include Art_Vector_Generate_Stylesheet_>>
-<<= VectorArt(_artSlave)>>
+<<= VectorArt($args[0], $args[1])>>
 
 <<elseif $imageChoice == 2>> /* VECTOR ART BY NOX - Pregmod Legacy Version */
 <<SVGFilters>>
diff --git a/src/art/vector/ArtVectorColor.js b/src/art/vector/ArtVectorColor.js
deleted file mode 100644
index 4becc3e941a59ff53ec54a085f9c13def8baaabd..0000000000000000000000000000000000000000
--- a/src/art/vector/ArtVectorColor.js
+++ /dev/null
@@ -1,386 +0,0 @@
-window.ArtVectorColor = function(slave) {
-	const T = State.temporary;
-	let outfitBaseColour;
-	
-	/* 
-		WARNING: Some of these temporary variables are used in wardrobeUse.tw or salon.tw 
-	 	Known examples are _outfitBaseColour, _glassesColor, and _shoeColour
-	*/
-	setOutfitColor();	
-	setSkinColor();
-	setHairColor();
-	setShoeColor();
-
-	function setOutfitColor() {
-		/* TODO: rewrite all textual descriptions not to explicitly mention the latex being of black color. */
-		if (slave.clothes === "a Fuckdoll suit" || slave.clothes === "restrictive latex" || slave.clothes === "a latex catsuit" || slave.clothes === "a cybersuit")
-			outfitBaseColour = slave.clothingBaseColor || "#515351"; /* use custom color, or use default latex color */
-		else if (slave.clothes == "a comfortable bodysuit")
-			outfitBaseColour = slave.clothingBaseColor || "#464646"; /* use custom color, or use default bodysuit color */
-
-		/* head addons */
-		if (slave.collar === "porcelain mask")
-			T.glassesColor = slave.glassesColor || "#FFFFFF"; /* use custom color or white */
-		else
-			T.glassesColor = slave.glassesColor || "#010101"; /* use custom color or default */
-
-		T.eyeColor = extractColor(slave.eyeColor, 1);
-		T.outfitBaseColour = outfitBaseColour;
-	}
-
-	function setSkinColor() {
-		const colorSlave = skinColorCatcher(slave);
-
-		/* setting default values */
-		T.areolaStyle = colorSlave.areolaColor;
-		T.bellybuttonStyle = colorSlave.areolaColor;
-		T.labiaStyle = colorSlave.labiaColor;
-		T.skinColour = colorSlave.skinColor;
-		/* todo: introduce fleshStyle */
-		/* these need to be declared so they can be set conditionally */
-		T.headSkinStyle = undefined;
-		T.torsoSkinStyle = undefined;
-		T.boobSkinStyle = undefined;
-		T.penisSkinStyle = undefined;
-		T.scrotumSkinStyle = undefined;
-		T.bellySkinStyle = undefined;
-
-		/* BEGIN SKIN COLOR OVERRIDES FOR LATEX CLOTHING EMULATION */
-		if (slave.clothes === "a Fuckdoll suit") {
-			/* slave is a fuckdoll - display all skin as if it was black rubber */
-			T.skinColour = outfitBaseColour;
-			T.areolaStyle = "fill:rgba(81,83,81,1);";
-			T.labiaStyle = T.areolaStyle;
-			T.bellybuttonStyle = T.areolaStyle;
-		} else if (slave.clothes === "restrictive latex") { /* slave wears restrictive latex - display most skin as if it was rubber */
-			/* nice latex does not cover any privates. */
-			T.boobSkinStyle = "fill:"+T.skinColour+";";
-			T.penisSkinStyle = "fill:"+T.skinColour+";";
-			T.scrotumSkinStyle = "fill:"+T.skinColour+";";
-			T.torsoSkinStyle = "fill:"+T.skinColour+";";
-			/* rest of body is covered in latex */
-			T.skinColour = outfitBaseColour;
-			T.bellybuttonStyle = outfitBaseColour;
-		} else if (slave.clothes === "a latex catsuit") {
-			/* nice latex does not cover head. */
-			T.headSkinStyle = "fill:"+T.skinColour+";";
-			/* rest of body is covered in latex */
-			T.skinColour = outfitBaseColour;
-			/* catsuit covers areolae and crotch, too */
-			T.bellybuttonStyle = outfitBaseColour;
-		} else if (slave.clothes === "a cybersuit") {
-			/* rest of body is covered in latex */
-			T.skinColour = outfitBaseColour;
-			T.bellybuttonStyle = outfitBaseColour;
-		} else if (slave.clothes === "a comfortable bodysuit") {
-			/* nice bodysuit does not cover head. */
-			T.headSkinStyle = "fill:"+T.skinColour+";";
-			/* rest of body is covered in bodysuit */
-			T.skinColour = outfitBaseColour;
-			T.bellySkinStyle = outfitBaseColour;
-			T.bellybuttonStyle = outfitBaseColour;
-		}
-		/* END SKIN COLOR OVERRIDES FOR LATEX CLOTHING EMULATION */
-
-		/* outfit dick coloring to match outfit rgba in svg */
-		switch (slave.clothes) {
-			case "a cheerleader outfit":
-				T.scrotumSkinStyle = "fill:rgba(250,186,0,1);";
-				T.bellySkinStyle = "fill:rgba(95,110,160,1);";
-				break;
-			case "cutoffs and a t-shirt":
-				T.scrotumSkinStyle = "fill:rgba(81,124,211,1);";
-				break;
-			case "a halter top dress":
-				T.scrotumSkinStyle = "fill:rgba(94,51,124,1);";
-				T.bellySkinStyle = "fill:rgba(94,51,124,1);";
-				break;
-			case "a burqa":
-			case "a hijab and abaya":
-			case "a niqab and abaya":
-				T.scrotumSkinStyle = "fill:rgba(51,51,51,1);";
-				T.bellySkinStyle = "fill:rgba(51,51,51,1);";
-				break;
-			case "a hijab and blouse":
-				T.scrotumSkinStyle = "fill:rgba(85,0,34,1);";
-				T.bellySkinStyle = "fill:rgba(85,0,34,1);";
-				break;
-			case "a burkini":
-				T.scrotumSkinStyle = "fill:rgba(0,97,158,1);";
-				T.bellySkinStyle = "fill:rgba(0,97,158,1);";
-				break;
-			case "a klan robe":
-				T.scrotumSkinStyle = "fill:rgba(236,236,236,1);";
-				T.bellySkinStyle = "fill:rgba(236,236,236,1);";
-				break;
-			case "a nice maid outfit":
-			case "a slutty maid outfit":
-				T.scrotumSkinStyle = "fill:rgba(225,225,225,1);";
-				T.bellySkinStyle = "fill:rgba(225,225,225,1);";
-				break;
-			case "a leotard":
-				T.scrotumSkinStyle = "fill:rgba(120,15,55,1);";
-				T.bellySkinStyle = "fill:rgba(120,15,55,1);";
-				break;
-			case "a military uniform":
-				T.scrotumSkinStyle = "fill:rgba(34,42,18,1);";
-				T.bellySkinStyle = "fill:rgba(34,42,18,1);";
-				break;
-			case "a mini dress":
-				T.scrotumSkinStyle = "fill:rgba(26,26,26,1);";
-				T.bellySkinStyle = "fill:rgba(26,26,26,1);";
-				break;
-			case "a nice nurse outfit":
-				T.scrotumSkinStyle = "fill:rgba(0,128,128,1);";
-				T.bellySkinStyle = "fill:rgba(0,128,128,1);";
-				break;
-			case "a slutty nurse outfit":
-				T.scrotumSkinStyle = "fill:rgba(255,255,255,1);";
-				break;
-			case "a scalemail bikini":
-				T.scrotumSkinStyle = "fill:rgba(133,146,158,1);";
-				break;
-			case "striped panties":
-				T.scrotumSkinStyle = "fill:rgba(255,255,255,1);";
-				break;
-			case "a schoolgirl outfit":
-				T.scrotumSkinStyle = "fill:rgba(28,31,36,1);";
-				T.bellySkinStyle = "fill:rgba(28,31,36,1);";
-				break;
-			case "a ball gown":
-				T.scrotumSkinStyle = "fill:rgba(128,0,0,1);";
-				T.bellySkinStyle = "fill:rgba(128,0,0,1);";
-				break;
-			case "battledress":
-				T.scrotumSkinStyle = "fill:rgba(34,42,18,1);";
-				T.bellySkinStyle = "fill:rgba(34,42,18,1);";
-				break;
-			case "a slave gown":
-				T.scrotumSkinStyle = "fill:rgba(200,200,200,1);";
-				T.bellySkinStyle = "fill:rgba(200,200,200,1);";
-				break;
-			case "a slutty outfit":
-				T.scrotumSkinStyle = "fill:rgba(63,126,181,1);";
-				break;
-			case "spats and a tank top":
-				T.scrotumSkinStyle = "fill:rgba(51,51,51,1);";
-				break;
-			case "a succubus outfit":
-				T.scrotumSkinStyle = "fill:rgba(128,0,0,1);";
-				T.bellySkinStyle = "fill:rgba(128,0,0,1);";
-				break;
-			case "nice business attire":
-				T.scrotumSkinStyle = "fill:rgba(51,51,51,1);";
-				T.bellySkinStyle = "fill:rgba(51,51,51,1);";
-				break;
-			case "slutty business attire":
-				T.scrotumSkinStyle = "fill:rgba(51,51,51,1);";
-				break;
-			case "attractive lingerie for a pregnant woman":
-				T.scrotumSkinStyle = "fill:rgba(153,153,153,1);";
-				break;
-			case "a bunny outfit":
-				T.scrotumSkinStyle = "fill:rgba(51,51,51,1);";
-				T.bellySkinStyle = "fill:rgba(51,51,51,1);";
-				break;
-			case "conservative clothing":
-				T.scrotumSkinStyle = "fill:rgba(51,51,51,1);";
-				T.bellySkinStyle = "fill:rgba(51,51,51,1);";
-				break;
-			case "harem gauze":
-				T.scrotumSkinStyle = "fill:rgba(0,168,131,1);";
-				break;
-			case "a huipil":
-				T.scrotumSkinStyle = "fill:rgba(200,200,200,1);";
-				T.bellySkinStyle = "fill:rgba(200,200,200,1);";
-				break;
-			case "a kimono":
-				T.scrotumSkinStyle = "fill:rgba(0,91,150,1);";
-				T.bellySkinStyle = "fill:rgba(0,91,150,1);";
-				break;
-			case "a maternity dress":
-				T.scrotumSkinStyle = "fill:rgba(48,54,72,1);";
-				T.bellySkinStyle = "fill:rgba(48,54,72,1);";
-				break;
-			case "a slutty qipao":
-				T.scrotumSkinStyle = "fill:rgba(204,177,68,1);";
-				T.bellySkinStyle = "fill:rgba(204,177,68,1);";
-				break;
-			case "stretch pants and a crop-top":
-				T.scrotumSkinStyle = "fill:rgba(51,51,51,1);";
-				break;
-			case "a toga":
-				T.scrotumSkinStyle = "fill:rgba(200,200,200,1);";
-				T.bellySkinStyle = "fill:rgba(200,200,200,1);";
-				break;
-			case "a penitent nuns habit":
-				T.scrotumSkinStyle = "fill:rgba(114,93,73,1);";
-				break;
-			case "a fallen nuns habit":
-				T.bellySkinStyle = "fill:rgba(51,51,51,1);";
-				break;
-			case "a chattel habit":
-				T.scrotumSkinStyle = "fill:rgba(200,200,200,1);";
-				break;
-			case "a monokini":
-				T.scrotumSkinStyle = "fill:rgba(33,47,61,1);";
-				break;
-			case "a schutzstaffel uniform":
-			case "a slutty schutzstaffel uniform":
-				T.scrotumSkinStyle = "fill:rgba(51,51,51,1);";
-				T.bellySkinStyle = "fill:rgba(51,51,51,1);";
-				break;
-			case "a red army uniform":
-				T.scrotumSkinStyle = "fill:rgba(114,93,73,1);";
-				T.bellySkinStyle = "fill:rgba(114,93,73,1);";
-				break;
-			case "an apron":
-				T.scrotumSkinStyle = "fill:rgba(255,105,180,1);";
-				T.bellySkinStyle = "fill:rgba(255,105,180,1);";
-				break;
-			case "a dirndl":
-				T.scrotumSkinStyle = "fill:rgba(128,0,51,1);";
-				T.bellySkinStyle = "fill:rgba(128,0,51,1);";
-				break;
-			case "lederhosen":
-				T.scrotumSkinStyle = "fill:rgba(93,83,108,1);";
-				break;
-			case "a long qipao":
-				T.scrotumSkinStyle = "fill:rgba(0,128,0,1);";
-				break;
-			case "a mounty outfit":
-				T.scrotumSkinStyle = "fill:rgba(51,51,51,1);";
-				T.bellySkinStyle = "fill:rgba(128,0,0,1);";
-				break;
-			case "battlearmor":
-				T.scrotumSkinStyle = "fill:rgba(200,200,200,1);";
-				break;
-			case "striped underwear":
-				T.scrotumSkinStyle = "fill:rgba(255,255,255,1);";
-				break;
-			case "panties":
-				T.scrotumSkinStyle = "fill:rgba(255,170,238,1);";
-				break;
-			case "a thong":
-				T.scrotumSkinStyle = "fill:rgba(34,28,36,1);";
-				break;
-			case "a button-up shirt and panties":
-			case "a t-shirt and panties":
-				T.scrotumSkinStyle = "fill:rgba(255,255,255,1);";
-				T.bellySkinStyle = "fill:rgba(255,255,255,1);";
-				break;
-			case "a slutty klan robe":
-				T.scrotumSkinStyle = "fill:rgba(128,0,0,1);";
-				break;
-			case "cutoffs":
-				T.scrotumSkinStyle = "fill:rgba(81,124,211,1);";
-				break;
-			case "sport shorts":
-			case "sport shorts and a sports bra":
-				T.scrotumSkinStyle = "fill:rgba(51,51,51,1);";
-				break;
-			case "a t-shirt and thong":
-				T.scrotumSkinStyle = "fill:rgba(200,55,171,1);";
-				T.bellySkinStyle = "fill:rgba(200,55,171,1);";
-				break;
-			case "jeans":
-				T.scrotumSkinStyle = "fill:rgba(81,124,211,1);";
-				break;
-			case "leather pants":
-			case "leather pants and a tube top":
-				T.scrotumSkinStyle = "fill:rgba(26,26,26,1);";
-				break;
-			case "leather pants and pasties":
-				T.scrotumSkinStyle = "fill:rgba(85,0,0,1);";
-				break;
-			case "a t-shirt and jeans":
-				T.scrotumSkinStyle = "fill:rgba(81,124,211,1);";
-				T.bellySkinStyle = "fill:rgba(255,255,255,1);";
-				break;
-			case "a tank-top and panties":
-				T.scrotumSkinStyle = "fill:rgba(26,26,26,1);";
-				T.bellySkinStyle = "fill:rgba(26,26,26,1);";
-				break;
-			case "a tank-top":
-				T.bellySkinStyle = "fill:rgba(255,255,255,1);";
-				break;
-			case "a tube top and thong":
-				T.scrotumSkinStyle = "fill:rgba(34,28,36,1);";
-				break;
-			case "boyshorts":
-				T.scrotumSkinStyle = "fill:rgba(26,26,26,1);";
-				break;
-			case "an oversized t-shirt and boyshorts":
-				T.bellySkinStyle = "fill:rgba(255,255,255,1);";
-				break;
-			case "a sweater and panties":
-				T.scrotumSkinStyle = "fill:rgba(26,26,26,1);";
-				T.bellySkinStyle = "fill:rgba(212,170,0,1);";
-				break;
-			case "a sweater and cutoffs":
-				T.scrotumSkinStyle = "fill:rgba(77,77,77,1);";
-				T.bellySkinStyle = "fill:rgba(85,0,0,1);";
-				break;
-			case "a police uniform":
-				T.scrotumSkinStyle = "fill:rgba(11,23,40,1);";
-				T.bellySkinStyle = "fill:rgba(11,23,40,1);";
-				break;
-			case "a one-piece swimsuit":
-				T.scrotumSkinStyle = "fill:rgba(22,45,80,1);";
-				T.bellySkinStyle = "fill:rgba(22,45,80,1);";
-				break;
-			case "a skimpy loincloth":
-				T.scrotumSkinStyle = "fill:rgba(145,124,111,1);";
-				break;
-			case "kitty lingerie":
-				T.scrotumSkinStyle = "fill:rgba(255,170,238,1);";
-				break;
-			case "an oversized t-shirt":
-				T.bellySkinStyle = "fill:rgba(255,255,255,1);";
-				break;
-			case "a hanbok":
-				T.bellySkinStyle = "fill:rgba(255,109,182,1);";
-				break;
-			case "a gothic lolita dress":
-				T.bellySkinStyle = "fill:rgba(26,26,26,1);";
-				break;
-			case "a sweater":
-				T.bellySkinStyle = "fill:rgba(85,0,0,1);";
-				break;
-			case "sport shorts and a t-shirt":
-				T.scrotumSkinStyle = "fill:rgba(200,55,171,1);";
-				T.bellySkinStyle = "fill:rgba(200,55,171,1);";
-				break;
-			case "a biyelgee costume":
-				T.scrotumSkinStyle = "fill:rgba(33,68,120,1);";
-		}
-	}
-
-	function setHairColor() {
-		T.hairColour = extractColor(slave.hColor);
-		T.pubicHairColour = extractColor(slave.pubicHColor);
-		T.underarmHairColour = extractColor(slave.underArmHColor);
-		T.eyebrowHairColour = extractColor(slave.eyebrowHColor);
-		T.sclerae = extractColor(slave.sclerae);
-	}
-
-	function setShoeColor() {
-		/* BEWARE: _shoeColour is read by Wardrobe Use */
-		/* note: only heels use this _shoeShadowColour */
-
-		/* override color in case of full body latex outfit, or custom color*/
-		if (slave.clothes === "a Fuckdoll suit" || slave.clothes === "restrictive latex") {
-			T.shoeColour = T.skinColour;
-			T.shoeShadowColour = T.shoeColour+";opacity: 0.5"; /* TODO: do not abuse "color" variable for style definitions. do not rely on dark background for shadow effect either. */
-		} else if (slave.shoeColor !== undefined) {
-			T.shoeColour = slave.shoeColor+";opacity: 0.4"; /* shoe color selected by user */
-			T.shoeShadowColour = T.shoeColour+";opacity: 0.5"; /* TODO: do not abuse "color" variable for style definitions. do not rely on dark background for shadow effect either. */
-		} else {
-			T.shoeShadowColour = "#616a6b";
-			if (slave.shoes === "none")
-				T.shoeColour = "#595959";
-			else
-				T.shoeColour = "#80808080";		
-		}
-	}
-};
diff --git a/src/art/vector/Generate_Stylesheet.tw b/src/art/vector/Generate_Stylesheet.tw
deleted file mode 100644
index cb50ba685a6b24f2c6fc5015a064f0e72688c044..0000000000000000000000000000000000000000
--- a/src/art/vector/Generate_Stylesheet.tw
+++ /dev/null
@@ -1,56 +0,0 @@
-:: Art_Vector_Generate_Stylesheet_ [nobr]
-
-/* _art_display_class is the style class for this display */
-<<if _art_display_id > 0 >>
-	<<set _art_display_id += 1>>
-<<else>>
-	<<set _art_display_id = 1>>
-<</if>>
-<<set _art_display_class = "ad"+_art_display_id >>
-
-/* setup height scaling and style */
-<<if $seeHeight == 0 || ($seeHeight == 1 && $args[1] == 3)>>
-	<<set _slaveHeightScale = 1>>
-	<<set _margin = 0>>
-<<else>>
-	<<set _slaveHeightScale = _artSlave.height/200>>
-	<<set _margin = Math.max(50 - (50 * _slaveHeightScale), 0)>>
-<</if>>
-
-<<print "<style>."+_art_display_class+" {
-	position: absolute;
-	height: 100%;
-	transform: scale(" + _slaveHeightScale + ");
-	margin-top: " + _margin + "%;
-	margin-left: auto;
-	margin-right: auto;
-	left: 0;
-	right: 0;
-}
-."+_art_display_class+" .white   { fill:#FFFFFF; }
-."+_art_display_class+" .skin	{ fill:"+_skinColour+"; }
-."+_art_display_class+" .head	{ "+_headSkinStyle+"; }
-."+_art_display_class+" .torso   { "+_torsoSkinStyle+"; }
-."+_art_display_class+" .boob	{ "+_boobSkinStyle+"; }
-."+_art_display_class+" .penis   { "+_penisSkinStyle+"; }
-."+_art_display_class+" .scrotum { "+_scrotumSkinStyle+"; }
-."+_art_display_class+" .belly   { "+_bellySkinStyle+"; }
-."+_art_display_class+" .areola  { fill:"+_areolaStyle+"; }
-."+_art_display_class+" .bellybutton  { fill:"+_bellybuttonStyle+"; }
-."+_art_display_class+" .labia   { fill:"+_labiaStyle+"; }
-."+_art_display_class+" .hair	{ fill:"+_hairColour+"; }
-."+_art_display_class+" .pubic_hair	 { fill:"+_pubicHairColour+"; }
-."+_art_display_class+" .underarm_hair  { fill:"+_underarmHairColour+"; }
-."+_art_display_class+" .eyebrow_hair  { fill:"+_eyebrowHairColour+"; }
-."+_art_display_class+" .shoe	{ fill:"+_shoeColour+"; }
-."+_art_display_class+" .shoe_shadow	{ fill:"+_shoeShadowColour+"; }
-."+_art_display_class+" .smart_piercing { fill:#4DB748; }
-."+_art_display_class+" .steel_piercing { fill:#787878; }
-."+_art_display_class+" .steel_chastity { fill:#BABABA; }
-."+_art_display_class+" .outfit_base  { fill:"+_outfitBaseColour+"; }
-."+_art_display_class+" .gag	 { fill:#BF2126; }
-."+_art_display_class+" .shadow  { fill:#010101; }
-."+_art_display_class+" .glasses { fill:"+_glassesColor+"; }
-."+_art_display_class+" .eye	 { fill:"+_eyeColor+"; }
-."+_art_display_class+" .sclera	 { fill:"+_sclerae+"; }
-</style>" >>
diff --git a/src/art/vector/VectorArtJS.js b/src/art/vector/VectorArtJS.js
new file mode 100644
index 0000000000000000000000000000000000000000..d70f2a6c305931ed4324eff9968cb3cf349f6d18
--- /dev/null
+++ b/src/art/vector/VectorArtJS.js
@@ -0,0 +1,2389 @@
+window.VectorArt = (function () {
+	"use strict";
+	let V, T, slave;
+	let r;
+	let leftArmType, rightArmType, legSize, torsoSize, buttSize, penisSize, hairLength;
+	let bellyScaleFactor, artBoobScaleFactor, heightScaleFactor;
+	let artTranslationX, artTranslationY;
+	let penisDrawtime, penisArtString;
+	
+	function VectorArt(artSlave, artSize) {
+		/* set constants */
+		V = State.variables;
+		T = State.temporary;
+		slave = artSlave;
+		/* reset/initialize some variables */
+		T.artTransformBelly = "";
+		T.artTransformBoob = "";
+		T.art_transform = ""; /* in case other files are trying to use this, and expecting a string */
+
+		setStylesheet(); /* initializes the stylesheet, and r */
+		setArmType();
+		setBoobScaling();
+		setButtSize();
+		setHairLength();
+		setLegSize();
+		setPenisSize();
+		penisArtControl(); /* depends on setPenisSize and setBoobScaling, sets penisDrawtime and penisArtString */
+		setTorsoSize();
+		
+		/*
+		each function adds one layer of vector art
+		vector art added later is drawn over previously added art
+		(what is listed on the bottom in the code appears on the top of the image)
+		*/
+		ArtVectorHairBack();
+		ArtVectorArm();
+		ArtVectorAnalAccessories();
+		ArtVectorButt();
+		ArtVectorLeg();
+		ArtVectorFeet(); /* includes shoes and leg outfits*/
+		ArtVectorTorso();
+		ArtVectorPussy();
+		ArtVectorPubicHair();
+		if (slave.vaginaPiercing !== 0 || slave.clitPiercing !== 0)
+			ArtVectorPussyPiercings();
+		ArtVectorChastityBelt();
+		ArtVectorTorsoOutfit(); /* note: clothing covers chastity belts */
+		if (slave.scrotum > 0 && slave.balls > 0)
+			ArtVectorBalls();
+		if (penisDrawtime === 0) /* for dicks behind boobs */
+			r += penisArtString;
+		ArtVectorBelly(); /* includes navel piercing and belly-related clothing options */
+		ArtVectorBoob(); /* includes areolae and piercings */
+		if (penisDrawtime === 1) /* for dicks in front of boobs */
+			r += penisArtString;
+		ArtVectorBoobAddons(); /* piercings always appear in front of boobs AND dick */
+		ArtVectorCollar(); /* includes clavicle artwork */
+		ArtVectorHead(); /* glasses are drawn here */
+		ArtVectorHairFore();
+		
+		return r;
+	}
+
+	function setStylesheet() {
+		let slaveHeightScale, margin, displayClass;
+
+		/* prepare HTML color codes for slave display */
+		/* note: latex clothing is mostly emulated by rubber color for skin (and shoes) */
+		/* TODO: consistently use American "color" instead of "colour" for all identifiers */
+		ArtVectorColor(slave);
+
+		/* displayClass is the style class for this display */
+		if (T.art_display_id > 0)
+			T.art_display_id++;
+		else
+			T.art_display_id = 1;
+		displayClass = `ad${T.art_display_id}`;
+		T.art_display_class = displayClass;
+
+		/* setup height scaling and style */
+		if (V.seeHeight === 0)
+			heightScaleFactor = 1;
+		else
+			heightScaleFactor = 200 / slave.height;
+
+		if (V.seeHeight === 0 || (V.seeHeight === 1 && artSize === 3)) {
+			slaveHeightScale = 1;
+			margin = 0;			
+		} else {
+			slaveHeightScale = slave.height / 200;
+			margin = Math.max(50 - (50 * slaveHeightScale), 0);
+		}
+
+		r = `<style>.${displayClass} {\
+				position: absolute;\
+				height: 100%;\
+				transform: scale(${slaveHeightScale});\
+				margin-top: ${margin}%;\
+				margin-left: auto;\
+				margin-right: auto;\
+				left: 0;\
+				right: 0;\
+			}\
+			.${displayClass} .white{ fill:#FFFFFF; }\
+			.${displayClass} .skin{ fill:${T.skinColour}; }\
+			.${displayClass} .head{ ${T.headSkinStyle}; }\
+			.${displayClass} .torso{ ${T.torsoSkinStyle}; }\
+			.${displayClass} .boob{ ${T.boobSkinStyle}; }\
+			.${displayClass} .penis{ ${T.penisSkinStyle}; }\
+			.${displayClass} .scrotum{ ${T.scrotumSkinStyle}; }\
+			.${displayClass} .belly{ ${T.bellySkinStyle}; }\
+			.${displayClass} .areola{ fill:${T.areolaStyle}; }\
+			.${displayClass} .bellybutton{ fill:${T.bellybuttonStyle}; }\
+			.${displayClass} .labia{ fill:${T.labiaStyle}; }\
+			.${displayClass} .hair{ fill:${T.hairColour}; }\
+			.${displayClass} .pubic_hair{ fill:${T.pubicHairColour}; }\
+			.${displayClass} .underarm_hair{ fill:${T.underarmHairColour}; }\
+			.${displayClass} .eyebrow_hair{ fill:${T.eyebrowHairColour}; }\
+			.${displayClass} .shoe{ fill:${T.shoeColour}; }\
+			.${displayClass} .shoe_shadow{ fill:${T.shoeShadowColour}; }\
+			.${displayClass} .smart_piercing{ fill:#4DB748; }\
+			.${displayClass} .steel_piercing{ fill:#787878; }\
+			.${displayClass} .steel_chastity{ fill:#BABABA; }\
+			.${displayClass} .outfit_base{ fill:${T.outfitBaseColour}; }\
+			.${displayClass} .gag{ fill:#BF2126; }\
+			.${displayClass} .shadow{ fill:#010101; }\
+			.${displayClass} .glasses{ fill:${T.glassesColor}; }\
+			.${displayClass} .eye{ fill:${T.eyeColor}; }\
+			.${displayClass} .sclera{ fill:${T.sclerae}; }\
+			</style>`;
+	}
+
+	function setArmType() {
+		if (slave.amp === 1) {
+			leftArmType = "None";
+			rightArmType = "None";
+		} else {
+			if (slave.devotion > 50) {
+				leftArmType = "High";
+				rightArmType = "High";
+			} else if (slave.trust >= -20) {
+				if (slave.devotion < -20) {
+					leftArmType = "Rebel";
+					rightArmType = "Low";
+				} else if (slave.devotion <= 20) {
+					leftArmType = "Low";
+					rightArmType = "Low";
+				} else {
+					leftArmType = "Mid";
+					rightArmType = "High";
+				}
+			} else {
+				leftArmType = "Mid";
+				rightArmType = "Mid";
+			}
+		}
+	}
+
+	function setBoobScaling() {
+		/*
+		Prepare SVG transform matrix for continuous boob scaling.
+		This transform affects boobs, areolae and piercings.
+		The parameters were fit by points (300,1.0) and (15000,2.5).
+		See https://www.wolframalpha.com/input/?i=log+fit+%7B%7B300,1%7D,%7B15000,2.5%7D%7D .
+		Boobs start at 300cc as of "flesh description widgets".
+		Upper value was discussed at https://github.com/Free-Cities/Free-Cities/issues/950#issuecomment-321359466 .
+		*/
+		if (slave.boobs < 300) {
+			artBoobScaleFactor = 1;
+			artTranslationX = 22; /* a little shift to the right is needed due to perspective */
+			artTranslationY = 0;
+		} else {
+			artBoobScaleFactor = 0.383433 * Math.log(0.0452403 * slave.boobs) * heightScaleFactor;
+			artTranslationX = -282.841 * artBoobScaleFactor + 292.349;
+			artTranslationY = -225.438 * artBoobScaleFactor + 216.274;
+		}
+		T.artTransformBoob = `matrix(${artBoobScaleFactor},0,0,${artBoobScaleFactor},${artTranslationX},${artTranslationY})`;
+	}
+
+	function setButtSize() {
+		/* Size calculations - needs to be done even for amputees */
+		buttSize = Math.clamp(Math.trunc(slave.butt), 1, 7) - 1;
+	}
+
+	function setHairLength() {
+		hairLength = undefined;
+		if (slave.hLength >= 60)
+			hairLength = "Long";
+		else if (slave.hLength >= 30)
+			hairLength = "Medium";
+		else if (slave.hLength >= 10)
+			hairLength = "Short";		
+	}
+
+	function setLegSize() {
+		/* Leg wideness switch courtesy of Nov-X */
+		/* needs to be done even for amputees */
+		if (slave.hips === -2) {
+			if (slave.weight <= 0)
+				legSize = "Narrow";
+			else if (slave.weight < 161)
+				legSize = "Normal";
+			else 
+				legSize = "Wide";
+		} else if (slave.hips === -1) {
+			if (slave.weight <= -11)
+				legSize = "Narrow";
+			else if (slave.weight < 96)
+				legSize = "Normal";
+			else
+				legSize = "Wide";
+		} else if (slave.hips === 0) {
+			if (slave.weight <= -96)
+				legSize = "Narrow";
+			else if (slave.weight < 11)
+				legSize = "Normal";
+			else if (slave.weight < 131)
+				legSize = "Wide";
+			else
+				legSize = "Thick";
+		} else if (slave.hips === 1) {
+			if (slave.weight <= -31)
+				legSize = "Normal";
+			else if (slave.weight < 31)
+				legSize = "Wide";
+			else
+				legSize = "Thick";
+		} else { /* .hips === 2 or 3 */
+			if (slave.weight <= -11)
+				legSize = "Wide";
+			else
+				legSize = "Thick";
+		}
+	}
+
+	function setPenisSize() {
+		penisSize = undefined;
+		if (slave.dick > 6 || (slave.dick > 0 && slave.belly <= 4000))
+			penisSize = Math.clamp(slave.dick, 1, 11) - 1;
+	}
+
+	function penisArtControl() {
+		penisArtString = "";
+		if (penisSize === undefined) {
+			penisDrawtime = -1; /* no penis to draw */
+		} else {
+			penisDrawtime = 0; /* default is to draw before boobs/belly */
+			switch (slave.clothes) {
+				/* BULGE OUTFITS LONG+MEDIUM OUTFITS */
+				case "a ball gown":
+				case "a biyelgee costume":
+				case "a burkini":
+				case "a burqa":
+				case "a dirndl":
+				case "a halter top dress":
+				case "a hijab and abaya":
+				case "a hijab and blouse":
+				case "a kimono":
+				case "a klan robe":
+				case "a long qipao":
+				case "a maternity dress":
+				case "a military uniform":
+				case "a mounty outfit":
+				case "a nice maid outfit":
+				case "a nice nurse outfit":
+				case "a niqab and abaya":
+				case "a police uniform":
+				case "a red army uniform":
+				case "a schutzstaffel uniform":
+				case "a skimpy loincloth":
+				case "a slave gown":
+				case "a slutty nurse outfit":
+				case "a slutty schutzstaffel uniform":
+				case "a t-shirt and jeans":
+				case "a toga":
+				case "an apron":
+				case "battlearmor":
+				case "battledress":
+				case "conservative clothing":
+				case "jeans":
+				case "leather pants":
+				case "leather pants and a tube top":
+				case "leather pants and pasties":
+				case "lederhosen":
+				case "nice business attire":
+				case "slutty business attire":
+				case "spats and a tank top":
+				case "sport shorts":
+				case "sport shorts and a sports bra":
+				case "sport shorts and a t-shirt":
+				case "stretch pants and a crop-top":
+					penisArtString = jsInclude(`Art_Vector_Bulge_Outfit_${penisSize}`);
+					break;
+				/* BULGE OUTFITS SHORT OUTFITS */
+				case "a bunny outfit":
+				case "a button-up shirt and panties":
+				case "a chattel habit":
+				case "a huipil":
+				case "a leotard":
+				case "a mini dress":
+				case "a monokini":
+				case "a one-piece swimsuit":
+				case "a penitent nuns habit":
+				case "a scalemail bikini":
+				case "a slutty klan robe":
+				case "a slutty maid outfit":
+				case "a slutty outfit":
+				case "a slutty qipao":
+				case "a succubus outfit":
+				case "a sweater and cutoffs":
+				case "a sweater and panties":
+				case "a t-shirt and panties":
+				case "a t-shirt and thong":
+				case "a tank-top and panties":
+				case "a thong":
+				case "a tube top and thong":
+				case "an oversized t-shirt and boyshorts":
+				case "attractive lingerie for a pregnant woman":
+				case "boyshorts":
+				case "cutoffs":
+				case "cutoffs and a t-shirt":
+				case "harem gauze":
+				case "kitty lingerie":
+				case "panties":
+				case "panties and pasties":
+				case "striped panties":
+				case "striped underwear":
+					if (slave.belly <= 4000) {
+						if (slave.dick > 3)
+							penisArtString = jsInclude("Art_Vector_Bulge_Outfit_3");
+						else
+							penisArtString = jsInclude(`Art_Vector_Bulge_Outfit_${penisSize}`);
+					}
+					break;
+				/* hide everything */
+				case "a cheerleader outfit":
+				case "a gothic lolita dress":
+				case "a hanbok":
+				case "a schoolgirl outfit":
+					break;
+				/* full frontal */
+				default:
+					if (canAchieveErection(slave) && slave.dickAccessory !== "chastity" && slave.dickAccessory !== "combined chastity") {
+						penisDrawtime = 1; /* draw erect penis over boobs if boobs do not hide the penis' base */
+						if (artBoobScaleFactor < 3.7) {
+							if (slave.foreskin !== 0)
+								penisArtString = jsInclude(`Art_Vector_Penis_${penisSize}`);
+							else
+								penisArtString = jsInclude(`Art_Vector_PenisCirc_${penisSize}`);
+						}
+					} else {
+						/* flaccid penises are drawn behind the boobs/belly */
+						if (slave.foreskin !== 0) 
+							penisArtString = jsInclude(`Art_Vector_Flaccid_${penisSize}`);
+						else
+							penisArtString = jsInclude(`Art_Vector_FlaccidCirc_${penisSize}`);
+						/* this draws chastity OVER latex catsuit. prndev finds this alright. */
+						if (slave.dickAccessory === "chastity" || slave.dickAccessory === "combined chastity") 
+							penisArtString += jsInclude(`Art_Vector_Chastity_Cage_${penisSize}`);
+					}
+			}
+		}
+	}
+
+	function setTorsoSize() {
+		/* Torso size switch courtesy of Nov-X */
+		if (slave.waist >= 96) {
+			if (slave.weight >= 96)
+				torsoSize = "Obese";
+			else if (slave.weight >= 11)
+				torsoSize = "Fat";
+			else if (slave.weight > -31)
+				torsoSize = "Chubby";
+			else
+				torsoSize = "Normal";
+		} else if (slave.waist >= 41) {
+			if (slave.weight >= 131)
+				torsoSize = "Obese";
+			else if (slave.weight >= 31)
+				torsoSize = "Fat";
+			else if (slave.weight >= 0)
+				torsoSize = "Chubby";
+			else if (slave.weight > -96)
+				torsoSize = "Normal";
+			else
+				torsoSize = "Hourglass";
+		} else if (slave.waist >= 11) {
+			if (slave.weight >= 161)
+				torsoSize = "Obese";
+			else if (slave.weight >= 96)
+				torsoSize = "Fat";
+			else if (slave.weight >= 11)
+				torsoSize = "Chubby";
+			else if (slave.weight > -31)
+				torsoSize = "Normal";
+			else
+				torsoSize = "Hourglass";
+		} else if (slave.waist > -11) {
+			if (slave.weight >= 191)
+				torsoSize = "Obese";
+			else if (slave.weight >= 131)
+				torsoSize = "Fat";
+			else if (slave.weight >= 31)
+				torsoSize = "Chubby";
+			else if (slave.weight >= 0)
+				torsoSize = "Normal";
+			else if (slave.weight > -96)
+				torsoSize = "Hourglass";
+			else
+				torsoSize = "Unnatural";
+		} else if (slave.waist > -41) {
+			if (slave.weight >= 161)
+				torsoSize = "Fat";
+			else if (slave.weight >= 96)
+				torsoSize = "Chubby";
+			else if (slave.weight >= 11)
+				torsoSize = "Normal";
+			else if (slave.weight > -31)
+				torsoSize = "Hourglass";
+			else
+				torsoSize = "Unnatural";
+		} else if (slave.waist > -96) {
+			if (slave.weight >= 191)
+				torsoSize = "Fat";
+			else if (slave.weight >= 131)
+				torsoSize = "Chubby";
+			else if (slave.weight >= 31)
+				torsoSize = "Normal";
+			else if (slave.weight > -11)
+				torsoSize = "Hourglass";
+			else
+				torsoSize = "Unnatural";
+		} else {
+			if (slave.weight >= 161)
+				torsoSize = "Chubby";
+			else if (slave.weight >= 96)
+				torsoSize = "Normal";
+			else if (slave.weight > 0)
+				torsoSize = "Hourglass";
+			else
+				torsoSize = "Unnatural";
+		}
+	}
+
+	function ArtVectorAnalAccessories() {
+		if (slave.buttplug === "long plug")
+			r += jsInclude("Art_Vector_Plug_Long");
+		else if (slave.buttplug === "large plug")
+			r += jsInclude("Art_Vector_Plug_Large");
+		else if (slave.buttplug === "long, large plug")
+			r += jsInclude("Art_Vector_Plug_Large_Long");
+		else if (slave.buttplug === "huge plug")
+			r += jsInclude("Art_Vector_Plug_Huge");
+		else if (slave.buttplug === "long, huge plug")
+			r += jsInclude("Art_Vector_Plug_Huge_Long");
+
+		if (slave.buttplugAttachment === "tail")
+			r += jsInclude("Art_Vector_Plug_Tail");
+		else if (slave.buttplugAttachment === "cat tail")
+			r += jsInclude("Art_Vector_Cat_Tail");
+	}
+
+	function ArtVectorArm() {
+		/* Arms position switch courtesy of Nov-X */
+		/* Updated 2018-10-25 by Fr0g */
+		/* - changed arm calculation block position*/
+		/* - added brackets to make boolean logic run */
+
+		if (slave.amp === 1) {
+			/* Many amputee clothing art files exist, but draw nothing.They are excluded for now to reduce on rendering time
+			r += jsInclude("Art_Vector_Arm_Right_None");
+			r += jsInclude("Art_Vector_Arm_Left_None");
+			*/
+		} else { /* is not amputee or has limbs equipped so running arm calculation block */
+			if (slave.amp === 0) {
+				r += jsInclude(`Art_Vector_Arm_Right_${rightArmType}`);
+				r += jsInclude(`Art_Vector_Arm_Left_${leftArmType}`);
+				if (slave.muscles >= 6) {
+					if (leftArmType === "High")
+						r += jsInclude("Art_Vector_Arm_Left_High_MLight");
+					else if (leftArmType === "Mid")
+						r += jsInclude("Art_Vector_Arm_Left_Mid_MLight");
+					else if (leftArmType === "Low")
+						r += jsInclude("Art_Vector_Arm_Left_Low_MLight");
+					else if (leftArmType === "Rebel")
+						r += jsInclude("Art_Vector_Arm_Left_Rebel_MLight");
+
+					if (rightArmType === "High")
+						r += jsInclude("Art_Vector_Arm_Right_High_MLight");
+					else if (rightArmType === "Mid")
+						r += jsInclude("Art_Vector_Arm_Right_Mid_MLight");
+					else if (rightArmType === "Low")
+						r += jsInclude("Art_Vector_Arm_Right_Low_MLight");
+				}
+			} else if (slave.PLimb === 1 || slave.PLimb === 2) { /* slave is an amputee and has PLimbs equipped */
+				if (slave.amp === -1) {
+					r += jsInclude(`Art_Vector_Arm_Right_ProstheticBasic_${rightArmType}`);
+					r += jsInclude(`Art_Vector_Arm_Left_ProstheticBasic_${leftArmType}`);
+				} else if (slave.amp === -2) {
+					r += jsInclude(`Art_Vector_Arm_Right_ProstheticSexy_${rightArmType}`);
+					r += jsInclude(`Art_Vector_Arm_Left_ProstheticSexy_${leftArmType}`);
+				} else if (slave.amp === -3) {/* Reverting beauty limbs to regular SVG */
+					r += jsInclude(`Art_Vector_Arm_Right_ProstheticBeauty_${rightArmType}`);
+					r += jsInclude(`Art_Vector_Arm_Left_ProstheticBeauty_${leftArmType}`);
+				} else if (slave.amp === -4) {
+					r += jsInclude(`Art_Vector_Arm_Right_ProstheticCombat_${rightArmType}`);
+					r += jsInclude(`Art_Vector_Arm_Left_ProstheticCombat_${leftArmType}`);
+				} else if (slave.amp === -5) {
+					r += jsInclude(`Art_Vector_Arm_Right_ProstheticSwiss_${rightArmType}`);
+					r += jsInclude(`Art_Vector_Arm_Left_ProstheticSwiss_${leftArmType}`);
+				}
+			}
+			/* shiny clothing */
+			if (V.seeVectorArtHighlights === 1) {
+				if (slave.fuckdoll !== 0 || slave.clothes === "restrictive latex" || slave.clothes === "a latex catsuit" || slave.clothes === "body oil") {
+					/* only some arm positions have art (feel free to add more) */
+					if (leftArmType === "High")
+						r += jsInclude("Art_Vector_Arm_Outfit_Shine_Left_High");
+					else if (leftArmType === "Mid")
+						r += jsInclude("Art_Vector_Arm_Outfit_Shine_Left_Mid");
+					else if (leftArmType === "Low")
+						r += jsInclude("Art_Vector_Arm_Outfit_Shine_Left_Low");
+				}
+			}
+			/* TODO: simplify selection (select prefix, infix and suffix and combine instead of using switch statements) */
+			switch (slave.clothes) {
+				case "a biyelgee costume":
+				case "a burkini":
+				case "a button-up shirt":
+				case "a button-up shirt and panties":
+				case "a cheerleader outfit":
+				case "a dirndl":
+				case "a gothic lolita dress":
+				case "a hanbok":
+				case "a hijab and blouse":
+				case "a huipil":
+				case "a kimono":
+				case "a klan robe":
+				case "a long qipao":
+				case "a military uniform":
+				case "a mounty outfit":
+				case "a nice maid outfit":
+				case "a nice nurse outfit":
+				case "a police uniform":
+				case "a red army uniform":
+				case "a schoolgirl outfit":
+				case "a slutty klan robe":
+				case "a slutty nurse outfit":
+				case "a slutty qipao":
+				case "a sweater":
+				case "a sweater and cutoffs":
+				case "a sweater and panties":
+				case "a t-shirt":
+				case "a t-shirt and jeans":
+				case "a t-shirt and panties":
+				case "a t-shirt and thong":
+				case "an oversized t-shirt":
+				case "an oversized t-shirt and boyshorts":
+				case "battlearmor":
+				case "battledress":
+				case "clubslut netting":
+				case "conservative clothing":
+				case "cutoffs and a t-shirt":
+				case "lederhosen":
+				case "nice business attire":
+				case "slutty business attire":
+				case "slutty jewelry":
+				case "sport shorts and a t-shirt":
+				case "Western clothing":
+					r += jsInclude(`Art_Vector_Arm_Outfit_${clothing2artSuffix(slave.clothes)}_Right_${rightArmType}`);
+					r += jsInclude(`Art_Vector_Arm_Outfit_${clothing2artSuffix(slave.clothes)}_Left_${leftArmType}`);
+					break;
+				/* manually handle special cases */
+				case "a schutzstaffel uniform":
+				case "a slutty schutzstaffel uniform":
+					r += jsInclude(`Art_Vector_Arm_Outfit_SchutzstaffelUniform_Right_${rightArmType}`);
+					r += jsInclude(`Art_Vector_Arm_Outfit_SchutzstaffelUniform_Left_${leftArmType}`);
+					break;
+				case "a hijab and abaya":
+				case "a niqab and abaya":
+				case "a burqa":
+					r += jsInclude(`Art_Vector_Arm_Outfit_HijabAndAbaya_Right_${rightArmType}`);
+					r += jsInclude(`Art_Vector_Arm_Outfit_HijabAndAbaya_Left_${leftArmType}`);
+					break;
+				case "a slave gown":
+					/* only some arm positions have art (feel free to add more) */
+					if (leftArmType !== "Rebel")
+						r += jsInclude(`Art_Vector_Arm_Outfit_SlaveGown_Left_${leftArmType}`);
+			}
+		} /* close .amp check */
+	}
+
+	function ArtVectorBalls() {
+		switch (slave.clothes) {
+			case "a bra":
+			case "a button-up shirt":
+			case "a comfortable bodysuit":
+			case "a cybersuit":
+			case "a fallen nuns habit":
+			case "a hanbok":
+			case "a latex catsuit":
+			case "a monokini":
+			case "a nice pony outfit":
+			case "a slutty pony outfit":
+			case "a sports bra":
+			case "a string bikini":
+			case "a striped bra":
+			case "a sweater":
+			case "a t-shirt":
+			case "a tank-top":
+			case "a thong":
+			case "a tube top":
+			case "an oversized t-shirt":
+			case "attractive lingerie":
+			case "body oil":
+			case "chains":
+			case "choosing her own clothes":
+			case "clubslut netting":
+			case "no clothing":
+			case "panties and pasties":
+			case "restrictive latex":
+			case "shibari ropes":
+			case "slutty jewelry":
+			case "uncomfortable straps":
+			case "Western clothing":
+				let ballsScaleFactor = (slave.scrotum / 3) * heightScaleFactor;
+				artTranslationX = -271 * (ballsScaleFactor - 1);
+				artTranslationY = -453 * (ballsScaleFactor - 1);
+				T.artTransformBalls = `matrix(${ballsScaleFactor},0,0,${ballsScaleFactor},${artTranslationX},${artTranslationY})`;
+				r += jsInclude("Art_Vector_Balls");
+		}
+	}
+
+	function ArtVectorBelly() {
+		if (slave.belly >= 2000) {
+			/* add pregnancy belly, scale dynamically (clothing and addons can be scaled, too) */
+			/* TODO: add check in penis control. do not draw penis atop belly if _art_belly_scale_factor > 1. */
+			bellyScaleFactor = 0.300 * Math.log(0.011 * slave.belly) * heightScaleFactor;
+			artTranslationX = -262 * (bellyScaleFactor - 1);
+			artTranslationY = -284 * (bellyScaleFactor - 1);
+			T.artTransformBelly = `matrix(${bellyScaleFactor},0,0,${bellyScaleFactor},${artTranslationX},${artTranslationY})`;
+
+			if (slave.navelPiercing === 1)
+				r += jsInclude("Art_Vector_Belly_Pregnant_Piercing");
+			else if (slave.navelPiercing === 2)
+				r += jsInclude("Art_Vector_Belly_Pregnant_Piercing_Heavy");
+			else
+				r += jsInclude("Art_Vector_Belly");
+
+			switch (slave.clothes) {
+				case "a bra":
+				case "a cybersuit":
+				case "a Fuckdoll suit":
+				case "a latex catsuit":
+				case "a nice pony outfit":
+				case "a scalemail bikini":
+				case "a skimpy loincloth":
+				case "a slutty klan robe":
+				case "a slutty outfit":
+				case "a slutty pony outfit":
+				case "a sports bra":
+				case "a string bikini":
+				case "a striped bra":
+				case "a thong":
+				case "a tube top":
+				case "a tube top and thong":
+				case "attractive lingerie":
+				case "attractive lingerie for a pregnant woman":
+				case "body oil":
+				case "boyshorts":
+				case "chains":
+				case "choosing her own clothes":
+				case "cutoffs":
+				case "jeans":
+				case "kitty lingerie":
+				case "leather pants":
+				case "leather pants and a tube top":
+				case "leather pants and pasties":
+				case "no clothing":
+				case "panties":
+				case "panties and pasties":
+				case "restrictive latex":
+				case "shibari ropes":
+				case "slutty jewelry":
+				case "sport shorts":
+				case "sport shorts and a sports bra":
+				case "stretch pants and a crop-top":
+				case "striped panties":
+				case "striped underwear":
+				case "uncomfortable straps":
+					break; /* do nothing for these choices */
+				/* manually handle special cases */
+				case "a slutty schutzstaffel uniform":
+					r += jsInclude("Art_Vector_Belly_Outfit_SchutzstaffelUniform");
+					break;
+				case "a niqab and abaya":
+				case "a burqa":
+					r += jsInclude("Art_Vector_Belly_Outfit_HijabAndAbaya");
+					break;
+				default:
+					r += jsInclude(`Art_Vector_Belly_Outfit_${clothing2artSuffix(slave.clothes)}`);
+			}
+			/* shiny clothing */
+			if (V.seeVectorArtHighlights === 1) {
+				if (slave.fuckdoll !== 0 || slave.clothes === "restrictive latex" || slave.clothes === "a latex catsuit" || slave.clothes === "body oil") {
+					r += jsInclude("Art_Vector_Belly_Outfit_Shine");
+				}
+			}
+		}
+		/* belly piercings for flat bellies */
+		if (slave.belly === 0) {
+			if (slave.navelPiercing === 1)
+				r += jsInclude("Art_Vector_Belly_Piercing");
+			else if (slave.navelPiercing === 2)
+				r += jsInclude("Art_Vector_Belly_Piercing_Heavy");
+		}
+		/* Torso Accessories */
+		if ((slave.bellyAccessory === "a corset" || slave.bellyAccessory === "an extreme corset") && slave.belly === 0) {
+			if (torsoSize === "Normal")
+				r += jsInclude("Art_Vector_Corsetnormal");
+			else if (torsoSize === "Hourglass")
+				r += jsInclude("Art_Vector_Corsethourglass");
+			else if (torsoSize === "Unnatural")
+				r += jsInclude("Art_Vector_Corsetunnatural");
+		} else if (slave.bellyAccessory === "a small empathy belly") {
+			r += jsInclude("Art_Vector_Empathy_Belly_Small");
+		} else if (slave.bellyAccessory === "a medium empathy belly") {
+			r += jsInclude("Art_Vector_Empathy_Belly_Medium");
+		} else if (slave.bellyAccessory === "a large empathy belly") {
+			r += jsInclude("Art_Vector_Empathy_Belly_Large");
+		} else if (slave.bellyAccessory === "a huge empathy belly") {
+			r += jsInclude("Art_Vector_Empathy_Belly_Huge");
+		}
+	}
+
+	function ArtVectorBoob() {
+		if (slave.boobs < 300) {
+			/* BEWARE: this threshold may be used in other art-related code, too */
+			/* boobs too small - draw areolae directly onto torso */
+		} else {
+			r += jsInclude("Art_Vector_Boob_Alt");
+			/* shiny clothing */
+			if (V.seeVectorArtHighlights === 1) {
+				if (slave.fuckdoll !== 0 || slave.clothes === "a latex catsuit" || slave.clothes === "body oil")
+					r += jsInclude("Art_Vector_Boob_Outfit_Shine");
+			}
+		}
+		switch (slave.clothes) { /* display nipples/areola for the following clothes */
+			case "a chattel habit":
+			case "a fallen nuns habit":
+			case "a Fuckdoll suit":
+			case "a monokini":
+			case "a nice pony outfit":
+			case "a skimpy loincloth":
+			case "a slutty pony outfit":
+			case "a string bikini":
+			case "a succubus outfit":
+			case "a thong":
+			case "a toga":
+			case "attractive lingerie for a pregnant woman":
+			case "body oil":
+			case "boyshorts":
+			case "chains":
+			case "choosing her own clothes":
+			case "clubslut netting":
+			case "cutoffs":
+			case "jeans":
+			case "leather pants":
+			case "no clothing":
+			case "panties":
+			case "restrictive latex":
+			case "shibari ropes":
+			case "slutty jewelry":
+			case "sport shorts":
+			case "striped panties":
+			case "uncomfortable straps":
+				if (slave.areolaeShape === "star")
+					r += jsInclude("Art_Vector_Boob_Areola_Star");
+				else if (slave.areolaeShape === "heart")
+					r += jsInclude("Art_Vector_Boob_Areola_Heart");
+				else if (slave.areolae === 0)
+					r += jsInclude("Art_Vector_Boob_Areola");
+				else if (slave.areolae === 1)
+					r += jsInclude("Art_Vector_Boob_Areola_Large");
+				else if (slave.areolae === 2)
+					r += jsInclude("Art_Vector_Boob_Areola_Wide");
+				else if (slave.areolae === 3)
+					r += jsInclude("Art_Vector_Boob_Areola_Huge");
+
+				if (slave.nipples === "tiny")
+					r += jsInclude("Art_Vector_Boob_NippleTiny");
+				else if (slave.nipples === "cute")
+					r += jsInclude("Art_Vector_Boob_NippleCute");
+				else if (slave.nipples === "puffy")
+					r += jsInclude("Art_Vector_Boob_NipplePuffy");
+				else if (slave.nipples === "inverted")
+					r += jsInclude("Art_Vector_Boob_NippleInverted");
+				else if (slave.nipples === "huge")
+					r += jsInclude("Art_Vector_Boob_NippleHuge");
+				else if (slave.nipples === "partially inverted")
+					r += jsInclude("Art_Vector_Boob_NipplePartiallyInverted");
+				else if (slave.nipples === "fuckable")
+					r += jsInclude("Art_Vector_Boob_NippleFuckable");
+		}
+	}
+
+	function ArtVectorBoobAddons() {
+		if (slave.boobs < 300) {
+			/* boobs too small: do not show boob-related art */
+			/* BEWARE: this threshold should be kept in sync with the one in Art_Vector_Boob_ */
+		} else {
+			switch (slave.clothes) {
+				case "a chattel habit":
+				case "a comfortable bodysuit":
+				case "a cybersuit":
+				case "a fallen nuns habit":
+				case "a Fuckdoll suit":
+				case "a latex catsuit":
+				case "a nice pony outfit":
+				case "a skimpy loincloth":
+				case "a slutty pony outfit":
+				case "a succubus outfit":
+				case "a thong":
+				case "body oil":
+				case "boyshorts":
+				case "choosing her own clothes":
+				case "cutoffs":
+				case "jeans":
+				case "leather pants":
+				case "no clothing":
+				case "panties":
+				case "restrictive latex":
+				case "sport shorts":
+				case "striped panties":
+					break; /* do nothing for these choices */
+				/* manually handle special cases */
+				case "a slutty schutzstaffel uniform":
+					r += jsInclude("Art_Vector_Boob_Outfit_SchutzstaffelUniform");
+					break;
+				case "a niqab and abaya":
+				case "a burqa":
+					r += jsInclude("Art_Vector_Boob_Outfit_HijabAndAbaya");
+					break;
+				default:
+					r += jsInclude(`Art_Vector_Boob_Outfit_${clothing2artSuffix(slave.clothes)}`);
+			}
+		}
+		if (V.showBodyMods === 1 && (slave.nipplesPiercing > 0 || slave.areolaePiercing > 0)) {
+			/* shows nipple piercings in game when selected; piercings will show on the outfits listed below */
+			switch (slave.clothes) {
+				case "a chattel habit":
+				case "a comfortable bodysuit":
+				case "a cybersuit":
+				case "a fallen nuns habit":
+				case "a latex catsuit":
+				case "a monokini":
+				case "a nice pony outfit":
+				case "a penitent nuns habit":
+				case "a skimpy loincloth":
+				case "a slutty pony outfit":
+				case "a string bikini":
+				case "a succubus outfit":
+				case "a thong":
+				case "an apron":
+				case "attractive lingerie":
+				case "attractive lingerie for a pregnant woman":
+				case "body oil":
+				case "boyshorts":
+				case "chains":
+				case "choosing her own clothes":
+				case "cutoffs":
+				case "jeans":
+				case "leather pants":
+				case "leather pants and a tube top":
+				case "leather pants and pasties":
+				case "no clothing":
+				case "panties":
+				case "restrictive latex":
+				case "shibari ropes":
+				case "slutty jewelry":
+				case "sport shorts":
+				case "striped panties":
+				case "uncomfortable straps":
+					if (slave.nipplesPiercing === 1)
+						r += jsInclude("Art_Vector_Boob_Piercing");
+					else if (slave.nipplesPiercing > 1)
+						r += jsInclude("Art_Vector_Boob_Piercing_Heavy");
+
+					if (slave.areolaePiercing === 1)
+						r += jsInclude("Art_Vector_Boob_Areola_Piercing");
+					else if (slave.areolaePiercing > 1)
+						r += jsInclude("Art_Vector_Boob_Areola_Piercingheavy");
+			}
+		}
+	}
+
+	function ArtVectorButt() {
+		if (slave.amp === 0)
+			r += jsInclude(`Art_Vector_Butt_${buttSize}`);
+		else if (slave.amp === -1)
+			r += jsInclude(`Art_Vector_Butt_ProstheticBasic_${buttSize}`);
+		else if (slave.amp === -2)
+			r += jsInclude(`Art_Vector_Butt_ProstheticSexy_${buttSize}`);
+		else if (slave.amp === -3) /* reverted to regular SVG to match description */
+			r += jsInclude(`Art_Vector_Butt_ProstheticBeauty_${buttSize}`);
+		else if (slave.amp === -4)
+			r += jsInclude(`Art_Vector_Butt_ProstheticCombat_${buttSize}`);
+		else if (slave.amp === -5)
+			r += jsInclude(`Art_Vector_Butt_ProstheticSwiss_${buttSize}`);
+	}
+
+	function ArtVectorChastityBelt() {
+		let bodySize = "";
+		if (slave.waist >= 96) {
+			if (slave.weight >= 11)
+				bodySize = "Fat";
+			else if (slave.weight > -31)
+				bodySize = "_Chubby";
+		} else if (slave.waist >= 41) {
+			if (slave.weight >= 31)
+				bodySize = "Fat";
+			else if (slave.weight >= 0)
+				bodySize = "_Chubby";
+		} else if (slave.waist >= 11) {
+			if (slave.weight >= 96)
+				bodySize = "Fat";
+			else if (slave.weight >= 11)
+				bodySize = "_Chubby";
+		} else if (slave.waist > -11) {
+			if (slave.weight >= 131)
+				bodySize = "Fat";
+			else if (slave.weight >= 31)
+				bodySize = "_Chubby";
+		} else if (slave.waist > -41) {
+			if (slave.weight >= 161)
+				bodySize = "Fat";
+			else if (slave.weight >= 96)
+				bodySize = "_Chubby";
+		} else if (slave.waist > -96) {
+			if (slave.weight >= 191)
+				bodySize = "Fat";
+			else if (slave.weight >= 131)
+				bodySize = "_Chubby";
+		} else {
+			if (slave.weight >= 31)
+				bodySize = "_Chubby";
+		}
+
+		if (slave.dickAccessory === "anal chastity" || slave.dickAccessory === "combined chastity" || slave.vaginalAccessory === "anal chastity" || slave.vaginalAccessory === "combined chastity") {
+			if (bodySize === "Fat") {
+				r += jsInclude("Art_Vector_Chastity_Vagina_Fat");
+			} else {
+				r += jsInclude("Art_Vector_Chastity_Anus");
+				r += jsInclude(`Art_Vector_Chastity_Base${bodySize}`);
+			}
+		}
+		if (slave.vaginalAccessory === "chastity belt" || slave.vaginalAccessory === "combined chastity") {
+			if (bodySize === "Fat") {
+				r += jsInclude("Art_Vector_Chastity_Vagina_Fat");
+			} else {
+				r += jsInclude("Art_Vector_Chastity_Vagina");
+				r += jsInclude(`Art_Vector_Chastity_Base${bodySize}`);
+			}
+		}
+		if (slave.vaginalAccessory !== "none") {
+			switch (slave.clothes) {/* shows vaginal accessories on the outfits below */
+				case "a bra":
+				case "a button-up shirt":
+				case "a button-up shirt and panties":
+				case "a chattel habit":
+				case "a comfortable bodysuit":
+				case "a fallen nuns habit":
+				case "a Fuckdoll suit":
+				case "a latex catsuit":
+				case "a monokini":
+				case "a nice pony outfit":
+				case "a penitent nuns habit":
+				case "a slutty klan robe":
+				case "a slutty outfit":
+				case "a slutty pony outfit":
+				case "a sports bra":
+				case "a string bikini":
+				case "a striped bra":
+				case "a succubus outfit":
+				case "a sweater":
+				case "a t-shirt":
+				case "a t-shirt and panties":
+				case "a t-shirt and thong":
+				case "a tank-top":
+				case "a thong":
+				case "a tube top":
+				case "a tube top and thong":
+				case "an apron":
+				case "an oversized t-shirt":
+				case "attractive lingerie":
+				case "attractive lingerie for a pregnant woman":
+				case "body oil":
+				case "chains":
+				case "choosing her own clothes":
+				case "clubslut netting":
+				case "cutoffs":
+				case "harem gauze":
+				case "no clothing":
+				case "panties":
+				case "panties and pasties":
+				case "restrictive latex":
+				case "shibari ropes":
+				case "slutty jewelry":
+				case "striped underwear":
+				case "uncomfortable straps":
+					if (slave.vaginalAccessory === "dildo") {
+						r += jsInclude("Art_Vector_Dildo_Short");
+					} else if (slave.vaginalAccessory === "long dildo") {
+						r += jsInclude("Art_Vector_Dildo_Long");
+					} else if (slave.clothes !== "a comfortable bodysuit" && slave.clothes !== "a string bikini" && slave.clothes !== "attractive lingerie for a pregnant woman" && slave.clothes !== "restrictive latex") {
+						if (slave.vaginalAccessory === "large dildo") /* additional outfits disabled due to the art breaking with the larger accessories */
+							r += jsInclude("Art_Vector_Dildo_Large");
+						else if (slave.vaginalAccessory === "long, large dildo")
+							r += jsInclude("Art_Vector_Dildo_Large_Long");
+						else if (slave.vaginalAccessory === "huge dildo")
+							r += jsInclude("Art_Vector_Dildo_Huge");
+						else if (slave.vaginalAccessory === "long, huge dildo")
+							r += jsInclude("Art_Vector_Dildo_Huge_Long");
+					}
+			}
+		}
+	}
+
+	function ArtVectorColor() {
+		let outfitBaseColour;
+		
+		/* 
+			WARNING: Some of these temporary variables are used in wardrobeUse.tw or salon.tw 
+			Known examples are _outfitBaseColour, _glassesColor, and _shoeColour
+		*/
+		setOutfitColor();	
+		setSkinColor();
+		setHairColor();
+		setShoeColor();
+
+		function setOutfitColor() {
+			/* TODO: rewrite all textual descriptions not to explicitly mention the latex being of black color. */
+			if (slave.clothes === "a Fuckdoll suit" || slave.clothes === "restrictive latex" || slave.clothes === "a latex catsuit" || slave.clothes === "a cybersuit")
+				outfitBaseColour = slave.clothingBaseColor || "#515351"; /* use custom color, or use default latex color */
+			else if (slave.clothes == "a comfortable bodysuit")
+				outfitBaseColour = slave.clothingBaseColor || "#464646"; /* use custom color, or use default bodysuit color */
+
+			/* head addons */
+			if (slave.collar === "porcelain mask")
+				T.glassesColor = slave.glassesColor || "#FFFFFF"; /* use custom color or white */
+			else
+				T.glassesColor = slave.glassesColor || "#010101"; /* use custom color or default */
+
+			T.eyeColor = extractColor(slave.eyeColor, 1);
+			T.outfitBaseColour = outfitBaseColour;
+		}
+
+		function setSkinColor() {
+			const colorSlave = skinColorCatcher(slave);
+
+			/* setting default values */
+			T.areolaStyle = colorSlave.areolaColor;
+			T.bellybuttonStyle = colorSlave.areolaColor;
+			T.labiaStyle = colorSlave.labiaColor;
+			T.skinColour = colorSlave.skinColor;
+			/* todo: introduce fleshStyle */
+			/* these need to be declared so they can be set conditionally */
+			T.headSkinStyle = undefined;
+			T.torsoSkinStyle = undefined;
+			T.boobSkinStyle = undefined;
+			T.penisSkinStyle = undefined;
+			T.scrotumSkinStyle = undefined;
+			T.bellySkinStyle = undefined;
+
+			/* BEGIN SKIN COLOR OVERRIDES FOR LATEX CLOTHING EMULATION */
+			if (slave.clothes === "a Fuckdoll suit") {
+				/* slave is a fuckdoll - display all skin as if it was black rubber */
+				T.skinColour = outfitBaseColour;
+				T.areolaStyle = "fill:rgba(81,83,81,1);";
+				T.labiaStyle = T.areolaStyle;
+				T.bellybuttonStyle = T.areolaStyle;
+			} else if (slave.clothes === "restrictive latex") { /* slave wears restrictive latex - display most skin as if it was rubber */
+				/* nice latex does not cover any privates. */
+				T.boobSkinStyle = "fill:"+T.skinColour+";";
+				T.penisSkinStyle = "fill:"+T.skinColour+";";
+				T.scrotumSkinStyle = "fill:"+T.skinColour+";";
+				T.torsoSkinStyle = "fill:"+T.skinColour+";";
+				/* rest of body is covered in latex */
+				T.skinColour = outfitBaseColour;
+				T.bellybuttonStyle = outfitBaseColour;
+			} else if (slave.clothes === "a latex catsuit") {
+				/* nice latex does not cover head. */
+				T.headSkinStyle = "fill:"+T.skinColour+";";
+				/* rest of body is covered in latex */
+				T.skinColour = outfitBaseColour;
+				/* catsuit covers areolae and crotch, too */
+				T.bellybuttonStyle = outfitBaseColour;
+			} else if (slave.clothes === "a cybersuit") {
+				/* rest of body is covered in latex */
+				T.skinColour = outfitBaseColour;
+				T.bellybuttonStyle = outfitBaseColour;
+			} else if (slave.clothes === "a comfortable bodysuit") {
+				/* nice bodysuit does not cover head. */
+				T.headSkinStyle = "fill:"+T.skinColour+";";
+				/* rest of body is covered in bodysuit */
+				T.skinColour = outfitBaseColour;
+				T.bellySkinStyle = outfitBaseColour;
+				T.bellybuttonStyle = outfitBaseColour;
+			}
+			/* END SKIN COLOR OVERRIDES FOR LATEX CLOTHING EMULATION */
+
+			/* outfit dick coloring to match outfit rgba in svg */
+			switch (slave.clothes) {
+				case "a cheerleader outfit":
+					T.scrotumSkinStyle = "fill:rgba(250,186,0,1);";
+					T.bellySkinStyle = "fill:rgba(95,110,160,1);";
+					break;
+				case "cutoffs and a t-shirt":
+					T.scrotumSkinStyle = "fill:rgba(81,124,211,1);";
+					break;
+				case "a halter top dress":
+					T.scrotumSkinStyle = "fill:rgba(94,51,124,1);";
+					T.bellySkinStyle = "fill:rgba(94,51,124,1);";
+					break;
+				case "a burqa":
+				case "a hijab and abaya":
+				case "a niqab and abaya":
+					T.scrotumSkinStyle = "fill:rgba(51,51,51,1);";
+					T.bellySkinStyle = "fill:rgba(51,51,51,1);";
+					break;
+				case "a hijab and blouse":
+					T.scrotumSkinStyle = "fill:rgba(85,0,34,1);";
+					T.bellySkinStyle = "fill:rgba(85,0,34,1);";
+					break;
+				case "a burkini":
+					T.scrotumSkinStyle = "fill:rgba(0,97,158,1);";
+					T.bellySkinStyle = "fill:rgba(0,97,158,1);";
+					break;
+				case "a klan robe":
+					T.scrotumSkinStyle = "fill:rgba(236,236,236,1);";
+					T.bellySkinStyle = "fill:rgba(236,236,236,1);";
+					break;
+				case "a nice maid outfit":
+				case "a slutty maid outfit":
+					T.scrotumSkinStyle = "fill:rgba(225,225,225,1);";
+					T.bellySkinStyle = "fill:rgba(225,225,225,1);";
+					break;
+				case "a leotard":
+					T.scrotumSkinStyle = "fill:rgba(120,15,55,1);";
+					T.bellySkinStyle = "fill:rgba(120,15,55,1);";
+					break;
+				case "a military uniform":
+					T.scrotumSkinStyle = "fill:rgba(34,42,18,1);";
+					T.bellySkinStyle = "fill:rgba(34,42,18,1);";
+					break;
+				case "a mini dress":
+					T.scrotumSkinStyle = "fill:rgba(26,26,26,1);";
+					T.bellySkinStyle = "fill:rgba(26,26,26,1);";
+					break;
+				case "a nice nurse outfit":
+					T.scrotumSkinStyle = "fill:rgba(0,128,128,1);";
+					T.bellySkinStyle = "fill:rgba(0,128,128,1);";
+					break;
+				case "a slutty nurse outfit":
+					T.scrotumSkinStyle = "fill:rgba(255,255,255,1);";
+					break;
+				case "a scalemail bikini":
+					T.scrotumSkinStyle = "fill:rgba(133,146,158,1);";
+					break;
+				case "striped panties":
+					T.scrotumSkinStyle = "fill:rgba(255,255,255,1);";
+					break;
+				case "a schoolgirl outfit":
+					T.scrotumSkinStyle = "fill:rgba(28,31,36,1);";
+					T.bellySkinStyle = "fill:rgba(28,31,36,1);";
+					break;
+				case "a ball gown":
+					T.scrotumSkinStyle = "fill:rgba(128,0,0,1);";
+					T.bellySkinStyle = "fill:rgba(128,0,0,1);";
+					break;
+				case "battledress":
+					T.scrotumSkinStyle = "fill:rgba(34,42,18,1);";
+					T.bellySkinStyle = "fill:rgba(34,42,18,1);";
+					break;
+				case "a slave gown":
+					T.scrotumSkinStyle = "fill:rgba(200,200,200,1);";
+					T.bellySkinStyle = "fill:rgba(200,200,200,1);";
+					break;
+				case "a slutty outfit":
+					T.scrotumSkinStyle = "fill:rgba(63,126,181,1);";
+					break;
+				case "spats and a tank top":
+					T.scrotumSkinStyle = "fill:rgba(51,51,51,1);";
+					break;
+				case "a succubus outfit":
+					T.scrotumSkinStyle = "fill:rgba(128,0,0,1);";
+					T.bellySkinStyle = "fill:rgba(128,0,0,1);";
+					break;
+				case "nice business attire":
+					T.scrotumSkinStyle = "fill:rgba(51,51,51,1);";
+					T.bellySkinStyle = "fill:rgba(51,51,51,1);";
+					break;
+				case "slutty business attire":
+					T.scrotumSkinStyle = "fill:rgba(51,51,51,1);";
+					break;
+				case "attractive lingerie for a pregnant woman":
+					T.scrotumSkinStyle = "fill:rgba(153,153,153,1);";
+					break;
+				case "a bunny outfit":
+					T.scrotumSkinStyle = "fill:rgba(51,51,51,1);";
+					T.bellySkinStyle = "fill:rgba(51,51,51,1);";
+					break;
+				case "conservative clothing":
+					T.scrotumSkinStyle = "fill:rgba(51,51,51,1);";
+					T.bellySkinStyle = "fill:rgba(51,51,51,1);";
+					break;
+				case "harem gauze":
+					T.scrotumSkinStyle = "fill:rgba(0,168,131,1);";
+					break;
+				case "a huipil":
+					T.scrotumSkinStyle = "fill:rgba(200,200,200,1);";
+					T.bellySkinStyle = "fill:rgba(200,200,200,1);";
+					break;
+				case "a kimono":
+					T.scrotumSkinStyle = "fill:rgba(0,91,150,1);";
+					T.bellySkinStyle = "fill:rgba(0,91,150,1);";
+					break;
+				case "a maternity dress":
+					T.scrotumSkinStyle = "fill:rgba(48,54,72,1);";
+					T.bellySkinStyle = "fill:rgba(48,54,72,1);";
+					break;
+				case "a slutty qipao":
+					T.scrotumSkinStyle = "fill:rgba(204,177,68,1);";
+					T.bellySkinStyle = "fill:rgba(204,177,68,1);";
+					break;
+				case "stretch pants and a crop-top":
+					T.scrotumSkinStyle = "fill:rgba(51,51,51,1);";
+					break;
+				case "a toga":
+					T.scrotumSkinStyle = "fill:rgba(200,200,200,1);";
+					T.bellySkinStyle = "fill:rgba(200,200,200,1);";
+					break;
+				case "a penitent nuns habit":
+					T.scrotumSkinStyle = "fill:rgba(114,93,73,1);";
+					break;
+				case "a fallen nuns habit":
+					T.bellySkinStyle = "fill:rgba(51,51,51,1);";
+					break;
+				case "a chattel habit":
+					T.scrotumSkinStyle = "fill:rgba(200,200,200,1);";
+					break;
+				case "a monokini":
+					T.scrotumSkinStyle = "fill:rgba(33,47,61,1);";
+					break;
+				case "a schutzstaffel uniform":
+				case "a slutty schutzstaffel uniform":
+					T.scrotumSkinStyle = "fill:rgba(51,51,51,1);";
+					T.bellySkinStyle = "fill:rgba(51,51,51,1);";
+					break;
+				case "a red army uniform":
+					T.scrotumSkinStyle = "fill:rgba(114,93,73,1);";
+					T.bellySkinStyle = "fill:rgba(114,93,73,1);";
+					break;
+				case "an apron":
+					T.scrotumSkinStyle = "fill:rgba(255,105,180,1);";
+					T.bellySkinStyle = "fill:rgba(255,105,180,1);";
+					break;
+				case "a dirndl":
+					T.scrotumSkinStyle = "fill:rgba(128,0,51,1);";
+					T.bellySkinStyle = "fill:rgba(128,0,51,1);";
+					break;
+				case "lederhosen":
+					T.scrotumSkinStyle = "fill:rgba(93,83,108,1);";
+					break;
+				case "a long qipao":
+					T.scrotumSkinStyle = "fill:rgba(0,128,0,1);";
+					break;
+				case "a mounty outfit":
+					T.scrotumSkinStyle = "fill:rgba(51,51,51,1);";
+					T.bellySkinStyle = "fill:rgba(128,0,0,1);";
+					break;
+				case "battlearmor":
+					T.scrotumSkinStyle = "fill:rgba(200,200,200,1);";
+					break;
+				case "striped underwear":
+					T.scrotumSkinStyle = "fill:rgba(255,255,255,1);";
+					break;
+				case "panties":
+					T.scrotumSkinStyle = "fill:rgba(255,170,238,1);";
+					break;
+				case "a thong":
+					T.scrotumSkinStyle = "fill:rgba(34,28,36,1);";
+					break;
+				case "a button-up shirt and panties":
+				case "a t-shirt and panties":
+					T.scrotumSkinStyle = "fill:rgba(255,255,255,1);";
+					T.bellySkinStyle = "fill:rgba(255,255,255,1);";
+					break;
+				case "a slutty klan robe":
+					T.scrotumSkinStyle = "fill:rgba(128,0,0,1);";
+					break;
+				case "cutoffs":
+					T.scrotumSkinStyle = "fill:rgba(81,124,211,1);";
+					break;
+				case "sport shorts":
+				case "sport shorts and a sports bra":
+					T.scrotumSkinStyle = "fill:rgba(51,51,51,1);";
+					break;
+				case "a t-shirt and thong":
+					T.scrotumSkinStyle = "fill:rgba(200,55,171,1);";
+					T.bellySkinStyle = "fill:rgba(200,55,171,1);";
+					break;
+				case "jeans":
+					T.scrotumSkinStyle = "fill:rgba(81,124,211,1);";
+					break;
+				case "leather pants":
+				case "leather pants and a tube top":
+					T.scrotumSkinStyle = "fill:rgba(26,26,26,1);";
+					break;
+				case "leather pants and pasties":
+					T.scrotumSkinStyle = "fill:rgba(85,0,0,1);";
+					break;
+				case "a t-shirt and jeans":
+					T.scrotumSkinStyle = "fill:rgba(81,124,211,1);";
+					T.bellySkinStyle = "fill:rgba(255,255,255,1);";
+					break;
+				case "a tank-top and panties":
+					T.scrotumSkinStyle = "fill:rgba(26,26,26,1);";
+					T.bellySkinStyle = "fill:rgba(26,26,26,1);";
+					break;
+				case "a tank-top":
+					T.bellySkinStyle = "fill:rgba(255,255,255,1);";
+					break;
+				case "a tube top and thong":
+					T.scrotumSkinStyle = "fill:rgba(34,28,36,1);";
+					break;
+				case "boyshorts":
+					T.scrotumSkinStyle = "fill:rgba(26,26,26,1);";
+					break;
+				case "an oversized t-shirt and boyshorts":
+					T.bellySkinStyle = "fill:rgba(255,255,255,1);";
+					break;
+				case "a sweater and panties":
+					T.scrotumSkinStyle = "fill:rgba(26,26,26,1);";
+					T.bellySkinStyle = "fill:rgba(212,170,0,1);";
+					break;
+				case "a sweater and cutoffs":
+					T.scrotumSkinStyle = "fill:rgba(77,77,77,1);";
+					T.bellySkinStyle = "fill:rgba(85,0,0,1);";
+					break;
+				case "a police uniform":
+					T.scrotumSkinStyle = "fill:rgba(11,23,40,1);";
+					T.bellySkinStyle = "fill:rgba(11,23,40,1);";
+					break;
+				case "a one-piece swimsuit":
+					T.scrotumSkinStyle = "fill:rgba(22,45,80,1);";
+					T.bellySkinStyle = "fill:rgba(22,45,80,1);";
+					break;
+				case "a skimpy loincloth":
+					T.scrotumSkinStyle = "fill:rgba(145,124,111,1);";
+					break;
+				case "kitty lingerie":
+					T.scrotumSkinStyle = "fill:rgba(255,170,238,1);";
+					break;
+				case "an oversized t-shirt":
+					T.bellySkinStyle = "fill:rgba(255,255,255,1);";
+					break;
+				case "a hanbok":
+					T.bellySkinStyle = "fill:rgba(255,109,182,1);";
+					break;
+				case "a gothic lolita dress":
+					T.bellySkinStyle = "fill:rgba(26,26,26,1);";
+					break;
+				case "a sweater":
+					T.bellySkinStyle = "fill:rgba(85,0,0,1);";
+					break;
+				case "sport shorts and a t-shirt":
+					T.scrotumSkinStyle = "fill:rgba(200,55,171,1);";
+					T.bellySkinStyle = "fill:rgba(200,55,171,1);";
+					break;
+				case "a biyelgee costume":
+					T.scrotumSkinStyle = "fill:rgba(33,68,120,1);";
+			}
+		}
+
+		function setHairColor() {
+			T.hairColour = extractColor(slave.hColor);
+			T.pubicHairColour = extractColor(slave.pubicHColor);
+			T.underarmHairColour = extractColor(slave.underArmHColor);
+			T.eyebrowHairColour = extractColor(slave.eyebrowHColor);
+			T.sclerae = extractColor(slave.sclerae);
+		}
+
+		function setShoeColor() {
+			/* BEWARE: _shoeColour is read by Wardrobe Use */
+			/* note: only heels use this _shoeShadowColour */
+
+			/* override color in case of full body latex outfit, or custom color*/
+			if (slave.clothes === "a Fuckdoll suit" || slave.clothes === "restrictive latex") {
+				T.shoeColour = T.skinColour;
+				T.shoeShadowColour = T.shoeColour+";opacity: 0.5"; /* TODO: do not abuse "color" variable for style definitions. do not rely on dark background for shadow effect either. */
+			} else if (slave.shoeColor !== undefined) {
+				T.shoeColour = slave.shoeColor+";opacity: 0.4"; /* shoe color selected by user */
+				T.shoeShadowColour = T.shoeColour+";opacity: 0.5"; /* TODO: do not abuse "color" variable for style definitions. do not rely on dark background for shadow effect either. */
+			} else {
+				T.shoeShadowColour = "#616a6b";
+				if (slave.shoes === "none")
+					T.shoeColour = "#595959";
+				else
+					T.shoeColour = "#80808080";		
+			}
+		}
+	}
+
+	function ArtVectorCollar() {
+		r += jsInclude("Art_Vector_Clavicle");
+		/* TODO": find out where "uncomfortable leather" collar art went */
+		switch (slave.collar) {
+			case "leather with cowbell":
+				r += jsInclude("Art_Vector_Collar_Cowbell");
+				break;
+			case "heavy gold":
+				r += jsInclude("Art_Vector_Collar_Gold_Heavy");
+				break;
+			case "neck corset":
+				r += jsInclude("Art_Vector_Collar_Neck_Corset");
+				break;
+			case "pretty jewelry":
+				r += jsInclude("Art_Vector_Collar_Pretty_Jewelry");
+				break;
+			case "cruel retirement counter":
+				r += jsInclude("Art_Vector_Collar_Retirement_Cruel");
+				break;
+			case "nice retirement counter":
+				r += jsInclude("Art_Vector_Collar_Retirement_Nice");
+				break;
+			case "satin choker":
+				r += jsInclude("Art_Vector_Collar_Satin_Choker");
+				break;
+			case "shock punishment":
+				r += jsInclude("Art_Vector_Collar_Shock_Punishment");
+				break;
+			case "stylish leather":
+				r += jsInclude("Art_Vector_Collar_Stylish_Leather");
+				break;
+			case "tight steel":
+				r += jsInclude("Art_Vector_Collar_Tight_Steel");
+				break;
+			case "uncomfortable leather":
+				r += jsInclude("Art_Vector_Collar_Leather_Cruel");
+				break;
+			case "silk ribbon":
+				r += jsInclude("Art_Vector_Collar_Silk_Ribbon");
+				break;
+			case "bowtie":
+				r += jsInclude("Art_Vector_Collar_Bowtie");
+				break;
+			case "ancient Egyptian":
+				r += jsInclude("Art_Vector_Collar_Ancientegyptian");
+		}
+	}
+
+	function ArtVectorFeet() {
+		let outfit, stockings;
+		if (slave.legAccessory === "short stockings")
+			stockings = "SS";
+		else if (slave.legAccessory === "long stockings")
+			stockings = "LL";
+
+		/* Updated 2018-10-25 by Fr0g */
+		/* - added brackets to make boolean logic run */
+		if (slave.shoes === "heels") {
+			r += jsInclude("Art_Vector_Shoes_Heel");
+		} else if (slave.shoes === "pumps") {
+				r += jsInclude("Art_Vector_Shoes_Pump");
+		} else if (slave.shoes === "extreme heels") {
+				r += jsInclude(`Art_Vector_Shoes_Extreme_Heel_${legSize}`);
+		} else if (slave.shoes === "boots") {
+				r += jsInclude(`Art_Vector_Shoes_Boot_${legSize}`);
+		} else if (slave.shoes === "flats") {
+				r += jsInclude("Art_Vector_Shoes_Flat");
+		} else {
+			if (slave.amp === 0) {
+				r += jsInclude("Art_Vector_Feet_Normal");
+			} else if (slave.PLimb === 1 || slave.PLimb === 2) {
+				if (slave.amp === -1)
+					r += jsInclude("Art_Vector_Feet_ProstheticBasic");
+				else if (slave.amp === -2)
+					r += jsInclude("Art_Vector_Feet_ProstheticSexy");
+				else if (slave.amp === -3)
+					r += jsInclude("Art_Vector_Feet_ProstheticBeauty");
+				else if (slave.amp === -4)
+					r += jsInclude("Art_Vector_Feet_ProstheticCombat");
+				else if (slave.amp === -5)
+					r += jsInclude("Art_Vector_Feet_ProstheticSwiss");
+			}
+		}
+		if (stockings !== undefined && slave.amp !== 1) {
+			if (slave.shoes === "heels") {
+				r += jsInclude(`Art_Vector_Shoes_Heel_${stockings}_${legSize}`);
+			} else if (slave.shoes === "pumps") {
+				r += jsInclude(`Art_Vector_Shoes_Pump_${stockings}_${legSize}`);
+			} else if (slave.shoes === "flats") {
+				r += jsInclude(`Art_Vector_Shoes_Flat_${stockings}_${legSize}`);
+			} else if (slave.shoes === "none") {
+				r += jsInclude(`Art_Vector_Shoes_Stockings_${stockings}_${legSize}`);
+			}
+		}
+		switch (slave.clothes) {
+			case "a bra":
+			case "a button-up shirt":
+			case "a button-up shirt and panties":
+			case "a chattel habit":
+			case "a comfortable bodysuit":
+			case "a cybersuit":
+			case "a gothic lolita dress":
+			case "a hanbok":
+			case "a leotard":
+			case "a nice pony outfit":
+			case "a one-piece swimsuit":
+			case "a penitent nuns habit":
+			case "a scalemail bikini":
+			case "a skimpy loincloth":
+			case "a slutty klan robe":
+			case "a slutty outfit":
+			case "a slutty pony outfit":
+			case "a sports bra":
+			case "a string bikini":
+			case "a striped bra":
+			case "a sweater":
+			case "a sweater and panties":
+			case "a t-shirt":
+			case "a t-shirt and panties":
+			case "a t-shirt and thong":
+			case "a tank-top":
+			case "a tank-top and panties":
+			case "a thong":
+			case "a tube top":
+			case "a tube top and thong":
+			case "an oversized t-shirt":
+			case "attractive lingerie for a pregnant woman":
+			case "chains":
+			case "choosing her own clothes":
+			case "kitty lingerie":
+			case "no clothing":
+			case "panties":
+			case "panties and pasties":
+			case "shibari ropes":
+			case "striped panties":
+			case "striped underwear":
+			case "uncomfortable straps":
+				break; /* do nothing for these cases */
+			case "a Fuckdoll suit":
+			case "a latex catsuit":
+			case "body oil":
+			case "restrictive latex":
+				if (V.seeVectorArtHighlights === 1) /* special case for shiny clothing */
+					outfit = "Shine";
+				break;
+			default:
+				outfit = clothing2artSuffix(slave.clothes);
+		}
+		if (outfit !== undefined) {
+			if (slave.amp !== 1) {
+				if (slave.clothes !== "a slutty qipao" && slave.clothes !== "harem gauze" && slave.clothes !== "slutty jewelry" && slave.clothes !== "Western clothing") /* these clothes have a stump/leg outfit, but no butt outfit */
+					r += jsInclude(`Art_Vector_Butt_Outfit_${outfit}_${buttSize}`);
+				if (slave.clothes !== "a schoolgirl outfit") /* file is there, but contains no artwork */
+					r += jsInclude(`Art_Vector_Leg_Outfit_${outfit}_${legSize}`);
+			} else {
+				if (outfit === "Shine") /* the only stump outfit that does not draw an empty svg */
+					r += jsInclude(`Art_Vector_Leg_Outfit_${outfit}_Stump`);
+			}
+		}
+	}
+
+	function ArtVectorHairBack() {
+		if (hairLength !== undefined) { /* Don't draw hair if it isn't there */
+			if (slave.fuckdoll !== 0 || (slave.bald !== 0 && slave.hStyle === "bald")) {
+				r += jsInclude("Art_Vector_Hair_Back_NoHair");
+			} else {
+				switch (slave.clothes) {
+					case "a biyelgee costume":
+					case "a burkini":
+					case "a burqa":
+					case "a chattel habit":
+					case "a cybersuit":
+					case "a fallen nuns habit":
+					case "a hijab and abaya":
+					case "a hijab and blouse":
+					case "a klan robe":
+					case "a military uniform":
+					case "a mounty outfit":
+					case "a niqab and abaya":
+					case "a penitent nuns habit":
+					case "a police uniform":
+					case "a red army uniform":
+					case "a schutzstaffel uniform":
+					case "a slutty klan robe":
+					case "a slutty nurse outfit":
+					case "a slutty schutzstaffel uniform":
+					case "battlearmor":
+					case "restrictive latex":
+					case "Western clothing":
+						break; /* do nothing */
+					default:
+						switch (slave.hStyle) {
+							case "buzzcut":
+							case "shaved":
+							case "shaved bald":
+								r += jsInclude("Art_Vector_Hair_Back_NoHair");
+								break;
+							case "afro":
+								if (slave.hLength >= 150)
+									r += jsInclude("Art_Vector_Hair_Back_Afro_Giant");
+								else
+									r += jsInclude(`Art_Vector_Hair_Back_Afro_${hairLength}`);
+								break;
+							case "messy bun":
+								r += jsInclude(`Art_Vector_Hair_Back_Ninja_${hairLength}`);
+								break;
+							case "strip":
+								r += jsInclude("Art_Vector_Hair_Back_NoHair");
+								break;
+							case "braided":
+							case "bun":
+							case "cornrows":
+							case "curled":
+							case "dreadlocks":
+							case "eary":
+							case "luxurious":
+							case "messy":
+							case "neat":
+							case "permed":
+							case "ponytail":
+							case "tails":
+							case "up":
+								r += jsInclude(`Art_Vector_Hair_Back_${capFirstChar(slave.hStyle)}_${hairLength}`);
+								break;
+							default:
+								r += jsInclude("Art_Vector_Hair_Back_Messy_Medium");
+						}
+				}
+			}
+		}
+		/* note: latex clothing actually shows some hair, but there is no appropriate art for it */
+		if (slave.collar === "cat ears")
+			r += jsInclude("Art_Vector_Cat_Ear_Back");
+	}
+
+	function ArtVectorHairFore() {
+		if (hairLength !== undefined) { /* Don't draw hair if it isn't there */
+			if (slave.fuckdoll !== 0 || (slave.bald !== 0 && slave.hStyle === "bald")) {
+				r += jsInclude("Art_Vector_Hair_Fore_NoHair");
+			} else {
+				switch (slave.clothes) {
+					case "a biyelgee costume":
+					case "a burkini":
+					case "a burqa":
+					case "a chattel habit":
+					case "a cybersuit":
+					case "a fallen nuns habit":
+					case "a hijab and abaya":
+					case "a hijab and blouse":
+					case "a klan robe":
+					case "a military uniform":
+					case "a mounty outfit":
+					case "a niqab and abaya":
+					case "a penitent nuns habit":
+					case "a police uniform":
+					case "a red army uniform":
+					case "a schutzstaffel uniform":
+					case "a slutty klan robe":
+					case "a slutty nurse outfit":
+					case "a slutty schutzstaffel uniform":
+					case "battlearmor":
+					case "restrictive latex":
+					case "Western clothing":
+						break; /* do nothing */
+					default:
+						switch (slave.hStyle) {
+							case "buzzcut":
+							case "shaved":
+							case "shaved bald":
+								r += jsInclude("Art_Vector_Hair_Fore_NoHair");
+								break;
+							case "afro":
+								if (slave.hLength >= 150)
+									r += jsInclude("Art_Vector_Hair_Fore_Afro_Giant");
+								else
+									r += jsInclude(`Art_Vector_Hair_Fore_Afro_${hairLength}`);
+								break;
+							case "messy bun":
+								r += jsInclude(`Art_Vector_Hair_Fore_Ninja_${hairLength}`);
+								break;
+							case "bun":
+							case "neat":
+							case "ponytail":
+								r += jsInclude(`Art_Vector_Hair_Fore_${capFirstChar(slave.hStyle)}`);
+								break;
+							case "braided":
+							case "cornrows":
+							case "curled":
+							case "dreadlocks":
+							case "eary":
+							case "luxurious":
+							case "messy":
+							case "permed":
+							case "strip":
+							case "tails":
+							case "up":
+								r += jsInclude(`Art_Vector_Hair_Fore_${capFirstChar(slave.hStyle)}_${hairLength}`);
+								break;
+							default:
+								r += jsInclude("Art_Vector_Hair_Fore_Messy_Medium");
+						}
+				}
+			}
+		}
+		/* note: latex clothing actually shows some hair, but there is no appropriate art for it */
+		if (slave.collar === "cat ears")
+			r += jsInclude("Art_Vector_Cat_Ear_Fore");
+	}
+	
+	function ArtVectorHead() {
+		const eyebrowFullness = clothing2artSuffix(slave.eyebrowFullness); /* designed for clothing but works for eyebrows too. If other eyebrow styles are added, this may need to be changed. */
+		const hasEyebrows = slave.eyebrowHStyle !== "bald" && slave.eyebrowHStyle !== "shaved";
+
+		r += jsInclude("Art_Vector_Head");
+		/* shiny clothing */
+		if (V.seeVectorArtHighlights === 1) {
+			if (slave.fuckdoll !== 0 || slave.clothes === "restrictive latex" || slave.clothes === "a latex catsuit")
+				r += jsInclude("Art_Vector_Head_Outfit_Shine");
+		}
+		if (slave.clothes !== "restrictive latex") {
+			if (slave.markings === "beauty mark")
+				r += jsInclude("Art_Vector_Beauty_Mark");
+			else if (slave.markings === "freckles")
+				r += jsInclude("Art_Vector_Freckles");
+			else if (slave.markings === "heavily freckled")
+				r += jsInclude("Art_Vector_Freckles_Heavy");
+			else if (slave.markings === "birthmark")
+				r += jsInclude("Art_Vector_Birthmark");
+			else if (slave.minorInjury === "black eye")
+				r += jsInclude("Art_Vector_Black_Eye");
+		}
+		/* FACIAL APPEARANCE */
+		if (V.seeFaces === 1) {
+			if (slave.fuckdoll === 0 && slave.clothes !== "restrictive latex") {
+				switch (slave.race) {
+					case "southern european":
+					case "white":
+						if (slave.faceShape === "normal") {
+							r += jsInclude("Art_Vector_Eyes_TypeB");
+							r += jsInclude("Art_Vector_Mouth_TypeA");
+							r += jsInclude("Art_Vector_Nose_TypeA");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
+						} else if (slave.faceShape === "masculine") {
+							r += jsInclude("Art_Vector_Eyes_TypeD");
+							r += jsInclude("Art_Vector_Mouth_TypeF");
+							r += jsInclude("Art_Vector_Nose_TypeF");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
+						} else if (slave.faceShape === "androgynous") {
+							r += jsInclude("Art_Vector_Eyes_TypeE");
+							r += jsInclude("Art_Vector_Mouth_TypeE");
+							r += jsInclude("Art_Vector_Nose_TypeE");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
+						} else if (slave.faceShape === "cute") {
+							r += jsInclude("Art_Vector_Eyes_TypeB");
+							r += jsInclude("Art_Vector_Mouth_TypeB");
+							r += jsInclude("Art_Vector_Nose_TypeD");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
+						} else if (slave.faceShape === "sensual") {
+							r += jsInclude("Art_Vector_Eyes_TypeC");
+							r += jsInclude("Art_Vector_Mouth_TypeC");
+							r += jsInclude("Art_Vector_Nose_TypeC");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+						} else if (slave.faceShape === "exotic") {
+							r += jsInclude("Art_Vector_Eyes_TypeA");
+							r += jsInclude("Art_Vector_Mouth_TypeC");
+							r += jsInclude("Art_Vector_Nose_TypeC");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+						}
+						break;
+					case "asian":
+					case "malay":
+					case "pacific islander":
+						if (slave.faceShape === "normal") {
+							r += jsInclude("Art_Vector_Eyes_TypeA");
+							r += jsInclude("Art_Vector_Mouth_TypeC");
+							r += jsInclude("Art_Vector_Nose_TypeC");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
+						} else if (slave.faceShape === "masculine") {
+							r += jsInclude("Art_Vector_Eyes_TypeD");
+							r += jsInclude("Art_Vector_Mouth_TypeD");
+							r += jsInclude("Art_Vector_Nose_TypeB");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+						} else if (slave.faceShape === "androgynous") {
+							r += jsInclude("Art_Vector_Eyes_TypeE");
+							r += jsInclude("Art_Vector_Mouth_TypeE");
+							r += jsInclude("Art_Vector_Nose_TypeA");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+						} else if (slave.faceShape === "cute") {
+							r += jsInclude("Art_Vector_Eyes_TypeC");
+							r += jsInclude("Art_Vector_Mouth_TypeC");
+							r += jsInclude("Art_Vector_Nose_TypeC");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
+						} else if (slave.faceShape === "sensual") {
+							r += jsInclude("Art_Vector_Eyes_TypeA");
+							r += jsInclude("Art_Vector_Mouth_TypeA");
+							r += jsInclude("Art_Vector_Nose_TypeE");
+							if (slave.eyebrowFullness === "pencil-thin")
+								r += jsInclude("Art_Vector_Eyebrow_TypeC_Pencilthin");
+							else if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
+						} else if (slave.faceShape === "exotic") {
+							r += jsInclude("Art_Vector_Eyes_TypeB");
+							r += jsInclude("Art_Vector_Mouth_TypeC");
+							r += jsInclude("Art_Vector_Nose_TypeF");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
+						}
+						break;
+					case "amerindian":
+					case "latina":
+						if (slave.faceShape === "normal") {
+							r += jsInclude("Art_Vector_Eyes_TypeB");
+							r += jsInclude("Art_Vector_Mouth_TypeE");
+							r += jsInclude("Art_Vector_Nose_TypeD");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeB_${eyebrowFullness}`);
+						} else if (slave.faceShape === "masculine") {
+							r += jsInclude("Art_Vector_Eyes_TypeE");
+							r += jsInclude("Art_Vector_Mouth_TypeD");
+							r += jsInclude("Art_Vector_Nose_TypeF");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+						} else if (slave.faceShape === "androgynous") {
+							r += jsInclude("Art_Vector_Eyes_TypeA");
+							r += jsInclude("Art_Vector_Mouth_TypeD");
+							r += jsInclude("Art_Vector_Nose_TypeB");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
+						} else if (slave.faceShape === "cute") {
+							r += jsInclude("Art_Vector_Eyes_TypeF");
+							r += jsInclude("Art_Vector_Mouth_TypeB");
+							r += jsInclude("Art_Vector_Nose_TypeB");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
+						} else if (slave.faceShape === "sensual") {
+							r += jsInclude("Art_Vector_Eyes_TypeB");
+							r += jsInclude("Art_Vector_Mouth_TypeE");
+							r += jsInclude("Art_Vector_Nose_TypeC");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
+						} else if (slave.faceShape === "exotic") {
+							r += jsInclude("Art_Vector_Eyes_TypeC");
+							r += jsInclude("Art_Vector_Mouth_TypeA");
+							r += jsInclude("Art_Vector_Nose_TypeC");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
+						}
+						break;
+					case "black":
+						if (slave.faceShape === "normal") {
+							r += jsInclude("Art_Vector_Eyes_TypeD");
+							r += jsInclude("Art_Vector_Mouth_TypeB");
+							r += jsInclude("Art_Vector_Nose_TypeF");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
+						} else if (slave.faceShape === "masculine") {
+							r += jsInclude("Art_Vector_Eyes_TypeA");
+							r += jsInclude("Art_Vector_Mouth_TypeD");
+							r += jsInclude("Art_Vector_Nose_TypeF");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
+						} else if (slave.faceShape === "androgynous") {
+							r += jsInclude("Art_Vector_Eyes_TypeF");
+							r += jsInclude("Art_Vector_Mouth_TypeE");
+							r += jsInclude("Art_Vector_Nose_TypeB");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
+						} else if (slave.faceShape === "cute") {
+							r += jsInclude("Art_Vector_Eyes_TypeC");
+							r += jsInclude("Art_Vector_Mouth_TypeE");
+							r += jsInclude("Art_Vector_Nose_TypeD");
+							if (slave.eyebrowFullness === "natural")
+								r += jsInclude("Art_Vector_Eyebrow_TypeB_Natural");
+							else if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
+						} else if (slave.faceShape === "sensual") {
+							r += jsInclude("Art_Vector_Eyes_TypeC");
+							r += jsInclude("Art_Vector_Mouth_TypeF");
+							r += jsInclude("Art_Vector_Nose_TypeA");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+						} else if (slave.faceShape === "exotic") {
+							r += jsInclude("Art_Vector_Eyes_TypeE");
+							r += jsInclude("Art_Vector_Mouth_TypeE");
+							r += jsInclude("Art_Vector_Nose_TypeC");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
+						}
+						break;
+					case "middle eastern":
+						if (slave.faceShape === "normal") {
+							r += jsInclude("Art_Vector_Eyes_TypeB");
+							r += jsInclude("Art_Vector_Mouth_TypeA");
+							r += jsInclude("Art_Vector_Nose_TypeA");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
+						} else if (slave.faceShape === "masculine") {
+							r += jsInclude("Art_Vector_Eyes_TypeD");
+							r += jsInclude("Art_Vector_Mouth_TypeF");
+							r += jsInclude("Art_Vector_Nose_TypeA");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeB_${eyebrowFullness}`);
+						} else if (slave.faceShape === "androgynous") {
+							r += jsInclude("Art_Vector_Eyes_TypeF");
+							r += jsInclude("Art_Vector_Mouth_TypeB");
+							r += jsInclude("Art_Vector_Nose_TypeF");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
+						} else if (slave.faceShape === "cute") {
+							r += jsInclude("Art_Vector_Eyes_TypeB");
+							r += jsInclude("Art_Vector_Mouth_TypeB");
+							r += jsInclude("Art_Vector_Nose_TypeC");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
+						} else if (slave.faceShape === "sensual") {
+							r += jsInclude("Art_Vector_Eyes_TypeA");
+							r += jsInclude("Art_Vector_Mouth_TypeD");
+							r += jsInclude("Art_Vector_Nose_TypeA");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+						} else if (slave.faceShape === "exotic") {
+							r += jsInclude("Art_Vector_Eyes_TypeE");
+							r += jsInclude("Art_Vector_Mouth_TypeE");
+							r += jsInclude("Art_Vector_Nose_TypeE");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
+						}
+						break;
+					case "semitic":
+						if (slave.faceShape === "normal") {
+							r += jsInclude("Art_Vector_Eyes_TypeB");
+							r += jsInclude("Art_Vector_Mouth_TypeA");
+							r += jsInclude("Art_Vector_Nose_TypeA");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
+						} else if (slave.faceShape === "masculine") {
+							r += jsInclude("Art_Vector_Eyes_TypeD");
+							r += jsInclude("Art_Vector_Mouth_TypeF");
+							r += jsInclude("Art_Vector_Nose_TypeA");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeB_${eyebrowFullness}`);
+						} else if (slave.faceShape === "androgynous") {
+							r += jsInclude("Art_Vector_Eyes_TypeF");
+							r += jsInclude("Art_Vector_Mouth_TypeB");
+							r += jsInclude("Art_Vector_Nose_TypeF");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
+						} else if (slave.faceShape === "cute") {
+							r += jsInclude("Art_Vector_Eyes_TypeB");
+							r += jsInclude("Art_Vector_Mouth_TypeB");
+							r += jsInclude("Art_Vector_Nose_TypeC");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
+						} else if (slave.faceShape === "sensual") {
+							r += jsInclude("Art_Vector_Eyes_TypeA");
+							r += jsInclude("Art_Vector_Mouth_TypeD");
+							r += jsInclude("Art_Vector_Nose_TypeA");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+						} else if (slave.faceShape === "exotic") {
+							r += jsInclude("Art_Vector_Eyes_TypeE");
+							r += jsInclude("Art_Vector_Mouth_TypeE");
+							r += jsInclude("Art_Vector_Nose_TypeE");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
+						}
+						break;
+					case "indo-aryan":
+						if (slave.faceShape === "normal") {
+							r += jsInclude("Art_Vector_Eyes_TypeE");
+							r += jsInclude("Art_Vector_Mouth_TypeA");
+							r += jsInclude("Art_Vector_Nose_TypeD");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
+						} else if (slave.faceShape === "masculine") {
+							r += jsInclude("Art_Vector_Eyes_TypeF");
+							r += jsInclude("Art_Vector_Mouth_TypeD");
+							r += jsInclude("Art_Vector_Nose_TypeE");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+						} else if (slave.faceShape === "androgynous") {
+							r += jsInclude("Art_Vector_Eyes_TypeC");
+							r += jsInclude("Art_Vector_Mouth_TypeB");
+							r += jsInclude("Art_Vector_Nose_TypeD");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
+						} else if (slave.faceShape === "cute") {
+							r += jsInclude("Art_Vector_Eyes_TypeC");
+							r += jsInclude("Art_Vector_Mouth_TypeD");
+							r += jsInclude("Art_Vector_Nose_TypeA");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
+						} else if (slave.faceShape === "sensual") {
+							r += jsInclude("Art_Vector_Eyes_TypeA");
+							r += jsInclude("Art_Vector_Mouth_TypeE");
+							r += jsInclude("Art_Vector_Nose_TypeC");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
+						} else if (slave.faceShape === "exotic") {
+							r += jsInclude("Art_Vector_Eyes_TypeA");
+							r += jsInclude("Art_Vector_Mouth_TypeC");
+							r += jsInclude("Art_Vector_Nose_TypeC");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+						}
+						break;
+					case "mixed race":
+						if (slave.faceShape === "normal") {
+							r += jsInclude("Art_Vector_Eyes_TypeE");
+							r += jsInclude("Art_Vector_Mouth_TypeA");
+							r += jsInclude("Art_Vector_Nose_TypeD");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
+						} else if (slave.faceShape === "masculine") {
+							r += jsInclude("Art_Vector_Eyes_TypeF");
+							r += jsInclude("Art_Vector_Mouth_TypeD");
+							r += jsInclude("Art_Vector_Nose_TypeE");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+						} else if (slave.faceShape === "androgynous") {
+							r += jsInclude("Art_Vector_Eyes_TypeC");
+							r += jsInclude("Art_Vector_Mouth_TypeB");
+							r += jsInclude("Art_Vector_Nose_TypeD");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
+						} else if (slave.faceShape === "cute") {
+							r += jsInclude("Art_Vector_Eyes_TypeC");
+							r += jsInclude("Art_Vector_Mouth_TypeD");
+							r += jsInclude("Art_Vector_Nose_TypeA");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
+						} else if (slave.faceShape === "sensual") {
+							r += jsInclude("Art_Vector_Eyes_TypeA");
+							r += jsInclude("Art_Vector_Mouth_TypeE");
+							r += jsInclude("Art_Vector_Nose_TypeC");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
+						} else if (slave.faceShape === "exotic") {
+							r += jsInclude("Art_Vector_Eyes_TypeA");
+							r += jsInclude("Art_Vector_Mouth_TypeC");
+							r += jsInclude("Art_Vector_Nose_TypeC");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+						}
+						break;
+					default:
+						if (slave.faceShape === "normal") {
+							r += jsInclude("Art_Vector_Eyes_TypeB");
+							r += jsInclude("Art_Vector_Mouth_TypeA");
+							r += jsInclude("Art_Vector_Nose_TypeA");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
+						} else if (slave.faceShape === "masculine") {
+							r += jsInclude("Art_Vector_Eyes_TypeD");
+							r += jsInclude("Art_Vector_Mouth_TypeF");
+							r += jsInclude("Art_Vector_Nose_TypeF");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
+						} else if (slave.faceShape === "androgynous") {
+							r += jsInclude("Art_Vector_Eyes_TypeE");
+							r += jsInclude("Art_Vector_Mouth_TypeE");
+							r += jsInclude("Art_Vector_Nose_TypeE");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
+						} else if (slave.faceShape === "cute") {
+							r += jsInclude("Art_Vector_Eyes_TypeB");
+							r += jsInclude("Art_Vector_Mouth_TypeB");
+							r += jsInclude("Art_Vector_Nose_TypeD");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
+						} else if (slave.faceShape === "sensual") {
+							r += jsInclude("Art_Vector_Eyes_TypeC");
+							r += jsInclude("Art_Vector_Mouth_TypeC");
+							r += jsInclude("Art_Vector_Nose_TypeC");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+						} else if (slave.faceShape === "exotic") {
+							r += jsInclude("Art_Vector_Eyes_TypeA");
+							r += jsInclude("Art_Vector_Mouth_TypeC");
+							r += jsInclude("Art_Vector_Nose_TypeC");
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+						}
+				}
+			}
+		}
+		/* END FACIAL APPEARANCE */
+
+		if (slave.eyebrowPiercing === 1)
+			r += jsInclude("Art_Vector_Eyebrow_Light");
+		else if (slave.eyebrowPiercing === 2)
+			r += jsInclude("Art_Vector_Eyebrow_Heavy");
+
+		if (slave.nosePiercing === 1)
+			r += jsInclude("Art_Vector_Nose_Light");
+		else if (slave.nosePiercing === 2)
+			r += jsInclude("Art_Vector_Nose_Heavy");
+		
+		if (slave.lipsPiercing === 1)
+			r += jsInclude("Art_Vector_Lip_Light");
+		else if (slave.lipsPiercing === 2)
+			r += jsInclude("Art_Vector_Lip_Heavy");
+
+		/* ADDONS */
+		if (slave.fuckdoll === 0) { /* fuckdolls cannot be decorated */
+			if (slave.collar === "dildo gag")
+				r += jsInclude("Art_Vector_Dildo_Gag");
+			else if (slave.collar === "ball gag")
+				r += jsInclude("Art_Vector_Ball_Gag");
+			else if (slave.collar === "bit gag")
+				r += jsInclude("Art_Vector_Bit_Gag");
+			else if (slave.collar === "massive dildo gag")
+				r += jsInclude("Art_Vector_Massive_Dildo_Gag");
+			else if (slave.collar === "porcelain mask")
+				r += jsInclude("Art_Vector_Porcelain_Mask");
+
+			if (slave.eyewear === "corrective glasses" || slave.eyewear === "glasses" || slave.eyewear === "blurring glasses")
+				r += jsInclude("Art_Vector_Glasses");
+
+			/* head clothing */
+			switch (slave.clothes) {
+				case "a biyelgee costume":
+				case "a bunny outfit":
+				case "a burkini":
+				case "a burqa":
+				case "a chattel habit":
+				case "a cybersuit":
+				case "a fallen nuns habit":
+				case "a hijab and abaya":
+				case "a hijab and blouse":
+				case "a klan robe":
+				case "a military uniform":
+				case "a mounty outfit":
+				case "a niqab and abaya":
+				case "a penitent nuns habit":
+				case "a police uniform":
+				case "a red army uniform":
+				case "a slutty klan robe":
+				case "a slutty nurse outfit":
+				case "a succubus outfit":
+				case "battlearmor":
+				case "harem gauze":
+				case "Western clothing":
+					r += jsInclude(`Art_Vector_Head_Outfit_${clothing2artSuffix(slave.clothes)}`);
+					break;
+				case "a schutzstaffel uniform":
+				case "a slutty schutzstaffel uniform":
+					r += jsInclude("Art_Vector_Head_Outfit_SchutzstaffelUniform");
+					break;
+				case "kitty lingerie":
+					r += jsInclude("Art_Vector_Cat_Ear_Fore");
+					r += jsInclude("Art_Vector_Cat_Ear_Back");
+			}
+		}	
+	}
+
+	function ArtVectorLeg() {
+		/* Selection of matching SVG based on amputee level */
+		if (slave.amp === 0) {
+			r += jsInclude(`Art_Vector_Leg_${legSize}`);
+			if (slave.muscles >= 97)
+				r += jsInclude(`Art_Vector_Leg_${legSize}_MHeavy`);
+			else if (slave.muscles >= 62)
+				r += jsInclude(`Art_Vector_Leg_${legSize}_MMedium`);
+			else if (slave.muscles >= 30)
+				r += jsInclude(`Art_Vector_Leg_${legSize}_MLight`);
+		} else if (slave.amp === 1) {
+			r += jsInclude("Art_Vector_Stump");
+		} else if (slave.PLimb === 1 || slave.PLimb === 2) { /* slave is an amputee and has PLimbs equipped */
+			if (slave.amp === -1)
+				r += jsInclude(`Art_Vector_Leg_ProstheticBasic_${legSize}`);
+			else if (slave.amp === -2)
+				r += jsInclude(`Art_Vector_Leg_ProstheticSexy_${legSize}`);
+			else if (slave.amp === -3)
+				r += jsInclude(`Art_Vector_Leg_ProstheticBeauty_${legSize}`);
+			else if (slave.amp === -4)
+				r += jsInclude(`Art_Vector_Leg_ProstheticCombat_${legSize}`);
+			else /* slave.amp === -5 */
+				r += jsInclude(`Art_Vector_Leg_ProstheticSwiss_${legSize}`);
+		}
+	}
+
+	function ArtVectorPubicHair() {
+		if (slave.fuckdoll !== 0 || slave.clothes !== "a latex catsuit") {
+			if (V.showBodyMods === 1 && slave.vaginaTat === "rude words") {
+				if (slave.dick !== 0)
+					T.art_pussy_tattoo_text = "Useless";
+				else
+					T.art_pussy_tattoo_text = "Fucktoy";
+				r += jsInclude("Art_Vector_Pussy_Tattoo");
+			}
+			if (slave.physicalAge < 11) {
+				/* these art files exist, but draw empty svg's. Commented out for now to save on rendering time
+				r += jsInclude("Art_Vector_Pubic_Hair_None");
+				r += jsInclude("Art_Vector_Pubic_Hair_Underarm_None");
+				*/
+			} else if (slave.physicalAge <= 13) {
+				if (slave.pubicHStyle !== "waxed")
+					r += jsInclude("Art_Vector_Pubic_Hair_Wispy");
+			} else if (slave.clothes !== "a comfortable bodysuit") {
+				switch (slave.pubicHStyle) {
+					case "bald":
+					case "hairless":
+					case "waxed":
+						/* commented out to save on rendering time
+						r += jsInclude("Art_Vector_Pubic_Hair_None");
+						*/
+						break;
+					case "strip":
+					case "in a strip":
+						if (torsoSize === "Obese" || torsoSize === "Fat")
+							r += jsInclude("Art_Vector_Pubic_Hair_StripFat");
+						else
+							r += jsInclude("Art_Vector_Pubic_Hair_Strip");
+						break;
+					case "neat":
+						if (torsoSize === "Obese" || torsoSize === "Fat")
+							r += jsInclude("Art_Vector_Pubic_Hair_NeatFat");
+						else
+							r += jsInclude("Art_Vector_Pubic_Hair_Neat");
+						break;
+					case "bushy in the front and neat in the rear":
+						if (torsoSize === "Obese" || torsoSize === "Fat")
+							r += jsInclude("Art_Vector_Pubic_Hair_BushFat");
+						else
+							r += jsInclude("Art_Vector_Pubic_Hair_Bush");
+						break;
+					case "bushy":
+						if (torsoSize === "Obese" || torsoSize === "Fat")
+							r += jsInclude("Art_Vector_Pubic_Hair_BushyFat");
+						else
+							r += jsInclude("Art_Vector_Pubic_Hair_Bushy");
+						break;
+					case "very bushy":
+						if (torsoSize === "Obese" || torsoSize === "Fat")
+							r += jsInclude("Art_Vector_Pubic_Hair_Very_BushyFat");
+						else
+							r += jsInclude("Art_Vector_Pubic_Hair_Very_Bushy");
+				}
+				switch (slave.underArmHStyle) {
+					case "hairless":
+					case "waxed":
+					case "bald":
+						/* commented out to save on rendering time
+						r += jsInclude("Art_Vector_Pubic_Hair_Underarm_None");
+						*/
+						break;
+					case "shaved":
+						r += jsInclude("Art_Vector_Pubic_Hair_Underarm_Shaved");
+						break;
+					case "neat":
+						r += jsInclude("Art_Vector_Pubic_Hair_Underarm_Neat");
+						break;
+					case "bushy":
+						r += jsInclude("Art_Vector_Pubic_Hair_Underarm_Bushy");
+				}
+			}
+		}
+	}
+
+	function ArtVectorPussy() {
+		if (slave.vagina >= 0 && slave.clothes !== "a latex catsuit" && slave.clothes !== "a comfortable bodysuit" && slave.clothes !== "a cybersuit")
+			r += jsInclude("Art_Vector_Pussy");
+	}
+
+	function ArtVectorPussyPiercings() {
+		switch (slave.clothes) {/* piercings display on these clothes */
+			case "a bra":
+			case "a button-up shirt":
+			case "a chattel habit":
+			case "a comfortable bodysuit":
+			case "a cybersuit":
+			case "a fallen nuns habit":
+			case "a Fuckdoll suit":
+			case "a latex catsuit":
+			case "a monokini":
+			case "a nice pony outfit":
+			case "a penitent nuns habit":
+			case "a skimpy loincloth":
+			case "a slutty pony outfit":
+			case "a sports bra":
+			case "a string bikini":
+			case "a striped bra":
+			case "a succubus outfit":
+			case "a sweater":
+			case "a t-shirt":
+			case "a t-shirt and panties":
+			case "a t-shirt and thong":
+			case "a tank-top":
+			case "a tube top":
+			case "an oversized t-shirt":
+			case "attractive lingerie":
+			case "body oil":
+			case "chains":
+			case "choosing her own clothes":
+			case "no clothing":
+			case "restrictive latex":
+			case "shibari ropes":
+			case "slutty jewelry":
+			case "sport shorts":
+			case "sport shorts and a sports bra":
+			case "sport shorts and a t-shirt":
+			case "uncomfortable straps":
+			case "Western clothing":
+				/* piercinglevel = 1, Light; piercinglevel = 2, Heavy; piercinglevel = 3, Smart; piercinglevel = 0, None */
+				if (slave.vaginaPiercing === 1)
+					r += jsInclude("Art_Vector_Pussy_Piercing");
+				else if (slave.vaginaPiercing === 2)
+					r += jsInclude("Art_Vector_Pussy_Piercing_Heavy");
+
+				if (slave.clitPiercing === 1)
+					r += jsInclude("Art_Vector_Clit_Piercing");
+				else if (slave.clitPiercing === 2)
+					r += jsInclude("Art_Vector_Clit_Piercing_Heavy");
+				else if (slave.clitPiercing === 3)
+					r += jsInclude("Art_Vector_Clit_Piercing_Smart");
+		}
+	}
+
+	function ArtVectorTorso() {
+		r += jsInclude(`Art_Vector_Torso_${torsoSize}`);
+		if (slave.muscles >= 97)
+			r += jsInclude(`Art_Vector_Torso_${torsoSize}_MHeavy`);
+		else if (slave.muscles >= 62)
+			r += jsInclude(`Art_Vector_Torso_${torsoSize}_MMedium`);
+		else if (slave.muscles >= 30)
+			r += jsInclude(`Art_Vector_Torso_${torsoSize}_MLight`);
+	}
+
+	function ArtVectorTorsoOutfit() {
+		/* TODO: latex catsuit should cover vagina and its piercings, too */
+		switch (slave.clothes) {
+			case "a Fuckdoll suit":
+			case "a latex catsuit":
+			case "a nice pony outfit":
+			case "a slutty pony outfit":
+			case "choosing her own clothes":
+			case "no clothing":
+				break; /* no torso outfit */
+			/* manually handle special cases */
+			case "a cybersuit":
+				r += jsInclude(`Art_Vector_Torso_Outfit_Latex_${torsoSize}`);
+				break;
+			case "a slutty schutzstaffel uniform":
+				r += jsInclude(`Art_Vector_Torso_Outfit_SchutzstaffelUniform_${torsoSize}`);
+				break;
+			case "a niqab and abaya":
+			case "a burqa":
+				r += jsInclude(`Art_Vector_Torso_Outfit_HijabAndAbaya_${torsoSize}`);
+				break;
+			default:
+				r += jsInclude(`Art_Vector_Torso_Outfit_${clothing2artSuffix(slave.clothes)}_${torsoSize}`);
+		}
+		if (V.seeVectorArtHighlights === 1) {
+			if (slave.fuckdoll !== 0 || slave.clothes === "restrictive latex" || slave.clothes === "a latex catsuit") {
+				if (slave.amp !== 0)
+					r += jsInclude("Art_Vector_Torso_Outfit_Shine_Shoulder");
+				if (slave.preg <= 0)
+					r += jsInclude(`Art_Vector_Torso_Outfit_Shine_${torsoSize}`);
+			}
+		}
+	}
+
+	return VectorArt;
+})();