diff --git a/src/SpecialForce/SpecialForce.js b/src/SpecialForce/SpecialForce.js
index c32c7ce750ed2233a07cfb2833d08216a3423a49..943a16eca071d28e53836eff817f3bcb974f961d 100644
--- a/src/SpecialForce/SpecialForce.js
+++ b/src/SpecialForce/SpecialForce.js
@@ -167,7 +167,7 @@ window.SFBC = function() {
 				V.SF.UC = {Assign:V.SF.SpecOps, Lock:V.SF.SpecOpsLock};
 				jsDel([V.SF.SpecOps,V.SF.SpecOpsLock]);
 			} else if (V.SF.UC === {}) {
-				V.SF.UC={Assign:0, Lock:0};
+				V.SF.UC = {Assign:0, Lock:0};
 			}
 		}
 		if (V.SF.U !== undefined) V.SF.Upgrade = V.SF.U; delete V.SF.U;
@@ -520,7 +520,7 @@ window.progress = function(x,max) {
 		else {
 			z = 10 - x;
 			for (i = 0;i<x;i++) out += `█⏐`;
-			for (i = 0;i<z;i++) out += `<span style='opacity: 0;\'>█</span>⏐`;}}
+			for (i = 0;i<z;i++) out += `<span style='opacity: 0;'>█</span>⏐`;}}
 	else {
 		Math.clamp(x,0,max);
 		x = Math.floor(10*x/max);
@@ -628,93 +628,93 @@ window.BadOutcome = function() {
 };
 
 window.UnitText = function(input) {
-	"use strict"; const V = State.variables, S = V.SF.Squad; let r =``;
+	"use strict"; const V = State.variables, S = V.SF.Squad;
 	//Sorted by case
 	let appear = `is currently constructed in a haphazard fashion.`;
-	 let barracks = `Soldiers' cots are mixed in with weapons crates and ammunition.`;
-	 let slave = `Cages for processing slaves lie off to one side,`;
-	 let common = `and in the center is a common area with tables for soldiers to gather around for meals or rowdy conversations.`;
-	 let garage = ``, drone = ``, hangar = ``, launch = ``, artillery = ``;
-	 let comms = ``, training = ``;
+	let barracks = `Soldiers' cots are mixed in with weapons crates and ammunition.`;
+	let slave = `Cages for processing slaves lie off to one side,`;
+	let common = `and in the center is a common area with tables for soldiers to gather around for meals or rowdy conversations.`;
+	let garage = ``, drone = ``, hangar = ``, launch = ``, artillery = ``;
+	let comms = ``, training = ``;
 
 	const Quantity = `the ${num(S.Troops)} members of ${V.SF.Lower}`;
 
 	let weapons = `The weapons are mostly worn rifles that have already seen years of service before ${V.SF.Lower} acquired them.`;
-	 let armor1 = `The body armor is enough to stop smaller calibers, but nothing serious.`;
-	 let radio = ``, helmets = ``, ammo0 = ``, uniforms = ``, special = ``;
-	 let exo = ``;
+	let armor1 = `The body armor is enough to stop smaller calibers, but nothing serious.`;
+	let radio = ``, helmets = ``, ammo0 = ``, uniforms = ``, special = ``;
+	let exo = ``;
 
 	let amphet = ``, phen = ``, steroid = ``, downer = ``, concen = ``;
-	 let stimpack = ``, stabilizer = ``;
+	let stimpack = ``, stabilizer = ``;
 
 	let a = `have been recommissioned for use by ${V.SF.Lower}`, b = `.`, c = ``;
-	 let d = ``, e = ``, f = ``, g = ``, h = ``, i = ``, j = ``, k = ``;
+	let d = ``, e = ``, f = ``, g = ``, h = ``, i = ``, j = ``, k = ``;
 
 	let activate = `has been recommissioned for use by ${V.SF.Lower}. They`;
-	 let mechanics = `, mechanics are methodically checking the recent purchases for battle-readiness`;
-	 let MG = `120 mm main gun is enough to handle the majority of opponents around the Free Cities.`;
-	 let engine1 = ``, armor2 = ``, armor22 = ``, ammo1 = ``, mg = ``;
-	 let fireC0 = ``, fireC1 = ``, fireC2 = ``, fireC3 = ``, turret = ``;
+	let mechanics = `, mechanics are methodically checking the recent purchases for battle-readiness`;
+	let MG = `120 mm main gun is enough to handle the majority of opponents around the Free Cities.`;
+	let engine1 = ``, armor2 = ``, armor22 = ``, ammo1 = ``, mg = ``;
+	let fireC0 = ``, fireC1 = ``, fireC2 = ``, fireC3 = ``, turret = ``;
 
 	let B = `has been recommissioned for use by ${V.SF.Lower}. They`;
-	 let C = `, mechanics are giving the new purchases a final tuneup`;
-	 let squad = `a squad`, G1 = `20`, G2 = `in a firefight`;
-	 let e0 = `The engine has been`, engine3 = ``, armor3 = ``, tires = ``;
-	 let m1 = ``, m2 = ``, pod1 = ``, pod2 = ``;
+	let C = `, mechanics are giving the new purchases a final tuneup`;
+	let squad = `a squad`, G1 = `20`, G2 = `in a firefight`;
+	let e0 = `The engine has been`, engine3 = ``, armor3 = ``, tires = ``;
+	let m1 = ``, m2 = ``, pod1 = ``, pod2 = ``;
 
 	let b1 = `has been sold to ${V.SF.Lower} through back channels to support a failing Old World nation. The tank is so large it cannot fit inside the garage, and has`;
-	 let c1 = ``, engines4 = `. Two engines power the left and right sides of the tank separately, leaving it underpowered and slow`;
-	 let gun0 = ``, gun1 = ``, gun2 = `an undersized main gun and makeshift firing system from a standard battle tank`;
-	 let armor5 = ``, armor6 = ``, cannon = ``, laser = ``, PGTframe = ``;
+	let c1 = ``, engines4 = `. Two engines power the left and right sides of the tank separately, leaving it underpowered and slow`;
+	let gun0 = ``, gun1 = ``, gun2 = `an undersized main gun and makeshift firing system from a standard battle tank`;
+	let armor5 = ``, armor6 = ``, cannon = ``, laser = ``, PGTframe = ``;
 
 	let W1 = `only armed`, W2 = `;`, W3 = `a poor weapon against flying targets, but enough to handle ground forces`;
-	 let group = `A small group of attack VTOL have been recommissioned for use by ${V.SF.Lower}, enough to make up a squadron`;
-	 let engines = ``, TAI = ``, lock = ``, support = ``, stealth = ``;
-	 let scramble = ``, PAI = ``;
+	let group = `A small group of attack VTOL have been recommissioned for use by ${V.SF.Lower}, enough to make up a squadron`;
+	let engines = ``, TAI = ``, lock = ``, support = ``, stealth = ``;
+	let scramble = ``, PAI = ``;
 
 	let Num = `number`, type = `tiltrotor`, capacity = `small platoon or 15`;
-	 let engines0 = ``, engines01 = ``, Radar = ``, Armor = ``, landing = ``;
-	 let miniguns = ``, counter = ``;
+	let engines0 = ``, engines01 = ``, Radar = ``, Armor = ``, landing = ``;
+	let miniguns = ``, counter = ``;
 
 	let engine20 = `ramjet engines in the atmosphere that can reach Mach 10`;
-	 let b5 = `has been purchased from an insolvent Old World nation. It `;
-	 let shield = ``, camera = ``, efficiency = ``, camera2 = ``, drag = ``;
-	 let crew = ``, engine2 = ``, skin = ``;
+	let b5 = `has been purchased from an insolvent Old World nation. It `;
+	let shield = ``, camera = ``, efficiency = ``, camera2 = ``, drag = ``;
+	let crew = ``, engine2 = ``, skin = ``;
 
 	let activate2 = `has been recommissioned for use by ${V.SF.Lower}. Currently, it `;
-		let barrels = `Miniguns and Gatling cannons line`, distance = `, though the distance to ground targets renders the smaller calibers somewhat less useful`;
-	 let b4 = ``, c2 = ``, fuel = ``, GS_Speed = ``, countermeasures = ``, ammunition = ``, DFA = ``, autocannon = ``;
+	let barrels = `Miniguns and Gatling cannons line`, distance = `, though the distance to ground targets renders the smaller calibers somewhat less useful`;
+	let b4 = ``, c2 = ``, fuel = ``, GS_Speed = ``, countermeasures = ``, ammunition = ``, DFA = ``, autocannon = ``;
 
 	let loc1 = `An unused science satellite has been purchased from an Old World nation. While currently useless, it holds potential to be a powerful tool.`;
-	 let gyro = ``, telemetry = ``, thrusters = ``, solar = ``, surviv = ``;
-	 let laser1 = ``, heat = ``, reactor = ``, lens = ``, kin = ``;
+	let gyro = ``, telemetry = ``, thrusters = ``, solar = ``, surviv = ``;
+	let laser1 = ``, heat = ``, reactor = ``, lens = ``, kin = ``;
 
 	let loc = `has been purchased from a crumbling Old World nation. It`;
-	 let power = `Large batteries mounted in oversized shoulders power the robot for up to ten minutes of use, though they make for large targets.`;
-	 let knife = `simply a 8.5 meter long knife, though additional weapons are under development.`;
-	 let armor8 = ``, actuator = ``, cannon1 = ``, heatsink = ``, ammo2 = ``;
-	 let missile = ``;
+	let power = `Large batteries mounted in oversized shoulders power the robot for up to ten minutes of use, though they make for large targets.`;
+	let knife = `simply a 8.5 meter long knife, though additional weapons are under development.`;
+	let armor8 = ``, actuator = ``, cannon1 = ``, heatsink = ``, ammo2 = ``;
+	let missile = ``;
 
-let a4 = `A cruise missile launch site has been constructed near the base of`;
- let b2 = `outdated, something quickly rigged together to give the launch site something to fire in the case of an attack`;
- let c8 = ``, d1 = ``, e1 = ``, f1 = ``, g1 = ``, h1 = ``;
+	let a4 = `A cruise missile launch site has been constructed near the base of`;
+	let b2 = `outdated, something quickly rigged together to give the launch site something to fire in the case of an attack`;
+	let c8 = ``, d1 = ``, e1 = ``, f1 = ``, g1 = ``, h1 = ``;
 
-let recom1 = `has been recommissioned from the Old World for ${V.SF.Lower}. It`;
- let jets = `Formerly mothballed strike jets`, loc2 = ``, radar = ``, AAG = ``;
- let prop = ``, torp = ``, armor9 = ``, power1 = ``, scramble1 = ``;
+	let recom1 = `has been recommissioned from the Old World for ${V.SF.Lower}. It`;
+	let jets = `Formerly mothballed strike jets`, loc2 = ``, radar = ``, AAG = ``;
+	let prop = ``, torp = ``, armor9 = ``, power1 = ``, scramble1 = ``;
 
-let recom = `has been recommissioned from the old world, and`;
- let reactor0 = `Because diesel engines provide power and breathing oxygen is kept in pressurized canisters, the sub must frequently surface.`;
- let reactor1 = ``, cal = ``, hull = ``, tubes = ``, torpedoes = ``, sonar = ``;
- let control = ``, missiles = ``;
+	let recom = `has been recommissioned from the old world, and`;
+	let reactor0 = `Because diesel engines provide power and breathing oxygen is kept in pressurized canisters, the sub must frequently surface.`;
+	let reactor1 = ``, cal = ``, hull = ``, tubes = ``, torpedoes = ``, sonar = ``;
+	let control = ``, missiles = ``;
 
-let recom2 = `; has been recommissioned for use by ${V.SF.Lower}. It`;
- let tons = `200`, skirt = ``, guns = ``, guns2 = ``, fans = ``, speed = ``;
- let turbines = ``, armor10 = ``, ramps = ``, HATframe = ``, loadout = ``;
+	let recom2 = `; has been recommissioned for use by ${V.SF.Lower}. It`;
+	let tons = `200`, skirt = ``, guns = ``, guns2 = ``, fans = ``, speed = ``;
+	let turbines = ``, armor10 = ``, ramps = ``, HATframe = ``, loadout = ``;
 
 	switch(input) {
 		case 'firebase':
-			if (S.Firebase >= 0) { r += `<br>''Firebase:''`;
+			if (S.Firebase >= 0) { const text0 = `<br>''Firebase:''`;
 				if (S.Firebase >= 1) appear = `has had some organization put into it.`; barracks = `The majority of weapons, armor, and ammunition have been separated from the soldiers' cots into their own armory.`; garage = `A section near the outer wall of the arcology has been converted to a garage with an adjoining vehicle maintenance bay`; drone = `.`;	if (V.terrain === "oceanic") garage += ` for inter-arcology travel`;
 				if (S.Firebase >= 2) barracks = `A barracks has been constructed near the armory, allowing soldiers a quieter place to sleep and store their personal spoils.`; drone = `; as well as a facility for the storage, maintenance, and deployment of armed combat drones.`;
 				if (S.Firebase >= 3) appear = `has become more permanent.`; barracks = `A command center has been constructed near the barracks and armory, allowing for additional support personnel.`;
@@ -728,17 +728,26 @@ let recom2 = `; has been recommissioned for use by ${V.SF.Lower}. It`;
 				if (S.Firebase >= 8) { appear = `has become a fully fledged military base.`; comms = `A Free City-wide communication network for ${V.SF.Lower} has been constructed to facilitate faster responses and efficient monitoring of the surrounding area.`; }
 				if (S.Firebase >= 9) training = `A high-tech killhouse has been constructed to aid in soldier training.`;
 				if (S.Firebase >= 10) artillery = `Railgun artillery batteries are set around the base of the arcology, capable of accurately destroying enemies an absurd distance away.`;
-				return `${r} The firebase ${appear} ${barracks} ${comms} ${training} ${slave} ${common} ${garage}${drone} ${hangar} ${launch} ${artillery}`;
-			} break;
-		case 'troop': r += `<br>&nbsp;The large dormitories are`;
-			if (S.Troops < 100) {return `${r} sparsely occupied, ${Quantity} residing within them concentrating together in a corner. The hundreds of empty beds and lockers visibly herald the future`;}
-			else if (S.Troops < 400) {return `${r} lightly occupied, with ${Quantity} starting to spread out across them`;}
-			else if (S.Troops < 800) {return `${r} moderately occupied, though ${Quantity} residing within have a considerable amount of extra room`;}
-			else if (S.Troops < 1500) {return `${r} well-occupied, and ${Quantity} residing within have started to form small cliques based on section and row`;}
-			else {return `${r} near capacity, and ${Quantity} often barter their personal loot, whether it be monetary or human, for the choicest bunks`;}
+				return `${text0} The firebase ${appear} ${barracks} ${comms} ${training} ${slave} ${common} ${garage}${drone} ${hangar} ${launch} ${artillery}`;
+			}
+			break;
+		case 'troop':
+			if (S.Troops > 0) { const text1 = `<br>&nbsp;The large dormitories are`;
+				if (S.Troops < 100) {
+					return `${text1} sparsely occupied, ${Quantity} residing within them concentrating together in a corner. The hundreds of empty beds and lockers visibly herald the future.`;
+				} else if (S.Troops < 400) {
+					return `${text1} lightly occupied, with ${Quantity} starting to spread out across them.`;
+				} else if (S.Troops < 800) {
+					return `${text1} moderately occupied, though ${Quantity} residing within have a considerable amount of extra room.`;
+				} else if (S.Troops < 1500) {
+					return `${text1} well-occupied, and ${Quantity} residing within have started to form small cliques based on section and row.`;
+				} else {
+					return `${text1} near capacity, and ${Quantity} often barter their personal loot, whether it be monetary or human, for the choicest bunks.`;
+				}
+			}
 			break;
 		case 'armoury':
-			if (S.Armoury >= 0) { r += `<br><br>''Armory:''<br>`; radio = `Radios have been wired into the soldiers helmets`; helmets = `.`;
+			if (S.Armoury >= 0) { const text2 = `<br><br>''Armory:''<br>`; radio = `Radios have been wired into the soldiers helmets`; helmets = `.`;
 				if (S.Armoury >= 2) helmets = ` and a HUD has been integrated into the soldier's eyewear.`;
 				if (S.Armoury >= 3) ammo0 = `Tactical vests have been provided, allowing soldiers to carry additional ammo.`;
 				if (S.Armoury >= 4) armor1 = `The body armor is a newer variant, able to stop small arms fire and protect against shrapnel.`;
@@ -748,10 +757,11 @@ let recom2 = `; has been recommissioned for use by ${V.SF.Lower}. It`;
 				if (S.Armoury >= 8) helmets = `and a HUD and camera display have been integrated into soldiers' eyewear, enabling accurate aim around corners or from behind cover`;
 				if (S.Armoury >= 9) exo = `An exosuit has been developed to reduce the amount of weight soldiers carry, increase lifting strength, and move faster in combat.`;
 				if (S.Armoury >= 10) weapons = `Cutting-edge weaponry is available to ${V.SF.Lower}, far outpacing the ability of rival mercenary outfits.`;
-				return `${r} The armory holds soldiers' weapons and gear while not in training or combat. ${weapons} ${special} ${armor1} ${radio}${helmets} ${ammo0} ${uniforms} ${exo}`;
-			} break;
+				return `${text2} The armory holds soldiers' weapons and gear while not in training or combat. ${weapons} ${special} ${armor1} ${radio}${helmets} ${ammo0} ${uniforms} ${exo}`;
+			}
+			break;
 		case 'drugs':
-			if (S.Drugs >= 0) { r += `<br><br>''Drug Lab:''`; amphet = `Amphetamines have been added to the cocktail at a low dosage to act as a stimulant, physical performance enhancer, cognition control enhancer. Some side-effects exist.`;
+			if (S.Drugs >= 0) { const text3 = `<br><br>''Drug Lab:''`; amphet = `Amphetamines have been added to the cocktail at a low dosage to act as a stimulant, physical performance enhancer, cognition control enhancer. Some side-effects exist.`;
 				if (S.Drugs >= 2) phen = `Phencyclidine has been added to the cocktail at a low dosage as a dissociative psychotropic for soldiers in battle to introduce feelings of detachment, strength and invincibility, and aggression. Some side-effects reduce the tolerable dosage before soldiers go on uncontrollable violent outbreaks.`;
 				if (S.Drugs >= 3) steroid = `Testosterone is being produced for soldiers in training as a natural muscle growth stimulant and to invoke aggression.`;
 				if (S.Drugs >= 4) downer = `Zaleplon is being produced as a downer to counteract the battle cocktail and encourage rest before combat.`;
@@ -761,10 +771,11 @@ let recom2 = `; has been recommissioned for use by ${V.SF.Lower}. It`;
 				if (S.Drugs >= 8) amphet = `Diphenylmethylsulfinylacetamide has been added to the cocktail to counteract the effects of sleep deprivation and promote alertness.`;
 				if (S.Drugs >= 9) stimpack = `A stimpack of the battle cocktail is being given to soldiers in battle to take if the original dose wears off before the battle is over.`;
 				if (S.Drugs >= 10) stabilizer = `A stabilizer has been added to the battle cocktail that helps tie effects together while reducing side-effects, leading to an effectively safe supersoldier drug.`;
-				return `${r} A drug lab has been established to increase the effectiveness of ${V.SF.Lower}'s soldiers. Many of these chemicals are mixed into a single 'battle cocktail' to be taken before combat. ${amphet} ${phen} ${concen} ${steroid} ${downer} ${stimpack} ${stabilizer}`;
-			} break;
+				return `${text3} A drug lab has been established to increase the effectiveness of ${V.SF.Lower}'s soldiers. Many of these chemicals are mixed into a single 'battle cocktail' to be taken before combat. ${amphet} ${phen} ${concen} ${steroid} ${downer} ${stimpack} ${stabilizer}`;
+			}
+			break;
 		case 'UAV':
-			if(S.Firebase >= 2 && S.Drones >= 1) { r += `<br><br>''Drone Bay:''`;
+			if(S.Firebase >= 2 && S.Drones >= 1) { const text4 = `<br><br>''Drone Bay:''`;
 				if (S.Drones >= 2) a = `equipped with missiles are resting on one side of the drone bay`; b = `; as well as destroying the occasional target.`;
 				if (S.Drones >= 3) c = `A fleet of`; d = `large delivery quadcopters have been converted for military service to support ground forces as combat drones.`;
 				if (S.Drones >= 4) d = `combat drones take up the rest of the space in the drone bay. They have a`; e = `small automatic rifle`; f = `mounted to the underside.`;
@@ -774,10 +785,11 @@ let recom2 = `; has been recommissioned for use by ${V.SF.Lower}. It`;
 				if (S.Drones >= 8) j = `The drone control signal has been boosted and encrypted, giving the drones a greater range and protecting against electronic warfare.`;
 				if (S.Drones >= 9) e = `light machine gun`;
 				if (S.Drones >= 10) k = `A drone-to-drone network has been installed, allowing drones to swarm, maneuver, and attack targets autonomously.`;
-				return `${r} Surveillance drones ${a}. During combat, they supply aerial intel to commanders and act as the communications network for ground forces${b} ${c} ${d} ${e} ${f} ${g} ${h} ${i} ${j} ${k}`;
-			} break;
+				return `${text4} Surveillance drones ${a}. During combat, they supply aerial intel to commanders and act as the communications network for ground forces${b} ${c} ${d} ${e} ${f} ${g} ${h} ${i} ${j} ${k}`;
+			}
+			break;
 		case 'AV':
-			if (S.AV >= 1) { r += `<br>&nbsp;&nbsp;''Assault:''`;
+			if (S.AV >= 1) { const text5 = `<br>&nbsp;&nbsp;''Assault:''`;
 				if (S.AV >= 2) engine1 = `The engine1 has been overhauled, allowing much faster maneuvering around the battlefield.`; activate = ``; mechanics = ``;
 				if (S.AV >= 3) armor2 = `A composite ceramic armor has replaced the original, offering much greater protection from attacks.`;
 				if (S.AV >= 4) ammo1 = `The tanks have been outfitted with additional types of ammo for situational use.`;
@@ -787,10 +799,11 @@ let recom2 = `; has been recommissioned for use by ${V.SF.Lower}. It`;
 				if (S.AV >= 8) armor22 = `A reactive armor system has been added, giving the tank an additional, if temporary, layer of protection.`;
 				if (S.AV >= 9) turret = `The turret has been massively redesigned, lowering the tank profile and increasing the efficiency of the mechanisms within.`;
 				if (S.AV >= 10) MG = `140 mm main gun can quash anything even the greatest Old World nations could muster.`;
-				return `${r} A fleet of main battle tanks ${activate} are parked in the garage${mechanics}. ${turret} The ${MG} ${ammo1} ${mg} ${fireC0} ${fireC2} ${fireC3} ${fireC1} ${engine1} ${armor2} ${armor22}`;
-			} break;
+				return `${text5} A fleet of main battle tanks ${activate} are parked in the garage${mechanics}. ${turret} The ${MG} ${ammo1} ${mg} ${fireC0} ${fireC2} ${fireC3} ${fireC1} ${engine1} ${armor2} ${armor22}`;
+			}
+			break;
 		case 'TV':
-			if (S.TV >= 1) { r += `<br>&nbsp;&nbsp;''Transport:''`;
+			if (S.TV >= 1) { const text6 = `<br>&nbsp;&nbsp;''Transport:''`;
 				if (S.TV >= 2) engine3 = `${e0} overhauled, allowing for higher mobility.`; C = ``; B = ``;
 				if (S.TV >= 3) armor3 = `Composite armor has been bolted to the exterior, increasing the survivability of an explosive attack for the crew and passengers.`;
 				if (S.TV >= 4) tires = `The tires have been replaced with a much more durable version that can support a heavier vehicle.`;
@@ -800,10 +813,11 @@ let recom2 = `; has been recommissioned for use by ${V.SF.Lower}. It`;
 				if (S.TV >= 8) pod2 = `and an anti-aircraft missile pod have been installed on either side of the turret.`;
 				if (S.TV >= 9) squad = `two squads`; armor3 = ``; m2 = `destroying any incoming missiles with a high-powered laser. Some of the now redundant composite armor has been removed, and the reclaimed space allows for more passengers.`;
 				if (S.TV >= 10) engine3 = `${e0} replaced with the newest model, allowing the vehicle to get in and out of the conflict extremely quickly.`;
-				return `A fleet of infantry fighting vehicles ${B} are parked in the garage${C}. The IFVs can carry ${squad} of 6 to a firezone. The ${G1} mm autocannon supports infantry ${G2}. ${pod1} ${pod2} ${engine3} ${armor3} ${tires} ${m1} ${m2}`;
-			} break;
+				return `${text6} A fleet of infantry fighting vehicles ${B} are parked in the garage${C}. The IFVs can carry ${squad} of 6 to a firezone. The ${G1} mm autocannon supports infantry ${G2}. ${pod1} ${pod2} ${engine3} ${armor3} ${tires} ${m1} ${m2}`;
+			}
+			break;
 		case 'PGT':
-			if (S.PGT >= 1) {r += `<br>&nbsp;''Prototype Goliath Tank:''`;
+			if (S.PGT >= 1) { const text7 = `<br>&nbsp;''Prototype Goliath Tank:''`;
 				if (S.PGT >= 2) c1 = `rests in`; b1 = ``; engines4 = ` and powered by their own engine, allowing the tank to travel with an unsettling speed for its massive bulk`;
 				if (S.PGT >= 3) gun0 = `a railgun capable of`; gun1 = `firing steel slugs`; gun2 = `through one tank and into another`;
 				if (S.PGT >= 4) armor6 = `reinforced, increasing survivability for the crew inside.`; armor5 = `The armor has been`;
@@ -813,10 +827,11 @@ let recom2 = `; has been recommissioned for use by ${V.SF.Lower}. It`;
 				if (S.PGT >= 8) armor6 = `redesigned with sloping and state-of-the-art materials, allowing the Goliath to shrug off even the most advanced armor5-piercing tank rounds.`;
 				if (S.PGT >= 9) gun1 = `firing guided projectiles`;
 				if (S.PGT >= 10) gun0 = `a twin-barreled railgun capable of rapidly`;
-				return `A prototype Goliath tank ${b1}${c1} its own garage housing built outside the arcology. The massive bulk is spread out over 8 tracks, two for each corner of the tank${engines4}. The turret is equipped with ${gun0} ${gun1} ${gun2}. ${cannon} ${armor5} ${armor6} ${laser} ${PGTframe}`;
-			} break;
+				return `${text7} A prototype Goliath tank ${b1}${c1} its own garage housing built outside the arcology. The massive bulk is spread out over 8 tracks, two for each corner of the tank${engines4}. The turret is equipped with ${gun0} ${gun1} ${gun2}. ${cannon} ${armor5} ${armor6} ${laser} ${PGTframe}`;
+			}
+			break;
 		case 'AA':
-			if (S.AA >= 1) { r += `<br>&nbsp;&nbsp;''Assault:''`;
+			if (S.AA >= 1) { const text8 = `<br>&nbsp;&nbsp;''Assault:''`;
 				if (S.AA >= 2) W1 = `armed`; W2 = ` and air-to-air missiles,`; W3 = `a combination that can defend the arcology from enemy aircraft, as well as`; support = ` support ground troops`;
 				if (S.AA >= 3) engines = `The engines have been tuned, allowing faster flight with greater acceleration.`;
 				if (S.AA >= 4) TAI = `An advanced targeting AI has been installed to handle all control of weapons, allowing much more efficient use of ammunition and anti-countermeasure targeting.`;
@@ -826,10 +841,11 @@ let recom2 = `; has been recommissioned for use by ${V.SF.Lower}. It`;
 				if (S.AA >= 8) stealth = `The old skin has been replaced with a radar-absorbent material, making the aircraft difficult to pick up on radar.`;
 				if (S.AA >= 9) scramble = `The VTOLs can scramble to react to any threat in under three minutes.`;
 				if (S.AA >= 10) PAI = `A piloting AI has been installed, allowing the VTOLs to perform impossible maneuvers that cannot be done by a human pilot. This removes the need for a human in the aircraft altogether.`;
-				return `${r} ${group}. Several of the landing pads around ${V.arcologies[0].name} host groups of four fighters, ready to defend the arcology. ${scramble} The attack VTOL are currently ${W1} with a Gatling cannon${W2} ${W3}${support}. ${TAI} ${PAI} ${engines} ${lock} ${stealth}`;
-			} break;
+				return `${text8} ${group}. Several of the landing pads around ${V.arcologies[0].name} host groups of four fighters, ready to defend the arcology. ${scramble} The attack VTOL are currently ${W1} with a Gatling cannon${W2} ${W3}${support}. ${TAI} ${PAI} ${engines} ${lock} ${stealth}`;
+			}
+			break;
 		case 'TA':
-			if (S.TA >= 1) { r += `<br>&nbsp;&nbsp;''Transport:''`;
+			if (S.TA >= 1) { const text9 = `<br>&nbsp;&nbsp;''Transport:''`;
 				if (S.TA >= 2) engines0 = `The tiltrotor engines have been replaced with a more powerful engine, allowing faster travel times.`;
 				if (S.TA >= 3) counter = `Multispectrum countermeasures have been added to protect against guided missiles.`;
 				if (S.TA >= 4) miniguns = `Mounted miniguns have been installed to cover soldiers disembarking in dangerous areas.`;
@@ -839,10 +855,10 @@ let recom2 = `; has been recommissioned for use by ${V.SF.Lower}. It`;
 				if (S.TA >= 8) capacity = `large platoon or 20`; engines01 = `Further tweaks to the engine allow for greater lifting capacity.`;
 				if (S.TA >= 9) Radar = `Radar-absorbent materials have replaced the old skin, making it difficult to pick up the VTOL on radar.`;
 				if (S.TA >= 10) type = `tiltjet`; engines01 = ``; engines0 = `The tiltrotors have been replaced with tiltjets, allowing for much greater airspeed and acceleration.`;
-				return `${r} A ${Num} of transport ${type} VTOL have been recommissioned for use by ${V.SF.Lower}. The VTOLs are resting on large pads near the base to load either a ${capacity} tons of material. ${engines0} ${engines01} ${Armor} ${landing} ${counter} ${Radar} ${miniguns}`;
+				return `${text9} A ${Num} of transport ${type} VTOL have been recommissioned for use by ${V.SF.Lower}. The VTOLs are resting on large pads near the base to load either a ${capacity} tons of material. ${engines0} ${engines01} ${Armor} ${landing} ${counter} ${Radar} ${miniguns}`;
 			} break;
 		case 'SP':
-			if (S.SpacePlane >= 1) { r += `<br>&nbsp;''Spaceplane:''`;
+			if (S.SpacePlane >= 1) { const text10 = `<br>&nbsp;''Spaceplane:''`;
 				if (S.SpacePlane >= 2) b5 = ``; shield = `The current heat shielding has been upgraded, reducing the likelihood of heat damage during reentry.`;
 				if (S.SpacePlane >= 3) engine2 = ` and liquid rocket engines in orbit that can reach an equivalent Mach 18`;
 				if (S.SpacePlane >= 4) camera = `A state-of-the-art camera has been installed in the underbelly that takes incredibly high resolution photos, but requires the frictionless environment of space to focus.`;
@@ -852,10 +868,11 @@ let recom2 = `; has been recommissioned for use by ${V.SF.Lower}. It`;
 				if (S.SpacePlane >= 8) crew = `Increased the crew comfort and life support systems to increase operational time.`;
 				if (S.SpacePlane >= 9) skin = `Replaced the underbelly skin with a chameleon kit, matching the color to the sky above it.`;
 				if (S.SpacePlane >= 10) engine20 = `experimental scramjet engines in the atmosphere that can reach Mach 15`; engine2 = ` and liquid rocket engines in orbit that can reach an equivalent Mach 25`;
-				return `${r} A prototype spaceplane ${b5} rests in the hangar, its black fuselage gleaming. The craft is powered by ${engine20}${engine2}. ${efficiency} ${shield} ${camera} ${camera2} ${drag} ${crew} ${skin}`;
-			} break;
+				return `${text10} A prototype spaceplane ${b5} rests in the hangar, its black fuselage gleaming. The craft is powered by ${engine20}${engine2}. ${efficiency} ${shield} ${camera} ${camera2} ${drag} ${crew} ${skin}`;
+			}
+			break;
 		case 'GunS':
-			if(S.GunS >= 1) { r += `<br>&nbsp;''Gunship:''`;
+			if(S.GunS >= 1) { const text11 = `<br>&nbsp;''Gunship:''`;
 				if (S.GunS >= 2) b4 = `Infrared sensors have been added for the gunners to better pick targets.`; activate2 = ``;
 				if (S.GunS >= 3) c2 = `The underside of the aircraft has been better armored against small-arms fire`; countermeasures = `.`;
 				if (S.GunS >= 4) fuel = `Larger fuel tanks have been installed in the wings and fuselage, allowing the gunship to provide aerial support for longer periods before refueling.`;
@@ -865,10 +882,11 @@ let recom2 = `; has been recommissioned for use by ${V.SF.Lower}. It`;
 				if (S.GunS >= 8) b4 = `Upgraded multi-spectrum sensors can clearly depict targets even with IR shielding.`;
 				if (S.GunS >= 9) ammunition = `The ammunition storage has been increased, only slightly depriving loaders of a place to sit.`;
 				if (S.GunS >= 10) DFA = `; both light and heavy vehicles, and most enemy cover from above`; autocannon = `; a 40 mm autocannon, and a 105 mm howitzer are mounted on`;
-				return `${r} A large gunship ${activate2} is being refueled in the hangar. ${barrels}${autocannon} the port side of the fuselage${distance}${DFA}. ${b4} ${ammunition} ${GS_Speed} ${c2}${countermeasures} ${fuel}`;
-			} break;
+				return `${text11} A large gunship ${activate2} is being refueled in the hangar. ${barrels}${autocannon} the port side of the fuselage${distance}${DFA}. ${b4} ${ammunition} ${GS_Speed} ${c2}${countermeasures} ${fuel}`;
+			}
+			break;
 		case 'sat':
-			if (S.Satellite.lv >= 1) { r += `<br>&nbsp;''Satellite:''`;
+			if (S.Satellite.lv >= 1) { const text12 = `<br>&nbsp;''Satellite:''`;
 				if (S.Satellite.lv >= 2)
 					if (V.SF.Squad.Satellite.InOrbit < 1) loc1 = `The satellite is being worked on in the Launch Bay.`; else loc1 = `The satellite is in geosynchronous orbit, far above the arcology.`; gyro = `A suite of sensors have been installed to ensure the satellite can detect attitude and orbital altitude.`;
 				if (S.Satellite.lv >= 3) telemetry = `Telemetry systems have been installed to communicate with the satellite in orbit, with strong encryption measures.`;
@@ -879,10 +897,10 @@ let recom2 = `; has been recommissioned for use by ${V.SF.Lower}. It`;
 				if (S.Satellite.lv >= 8) reactor = `A small, efficient nuclear reactor has been installed to continue generating energy while in the Earth's shadow.`;
 				if (S.Satellite.lv >= 9) lens = `A higher quality and adjustable lens has been installed on the laser, allowing scalpel precision on armor or wide-area blasts on unarmored targets.`;
 				if (S.Satellite.lv >= 10) kin = `A magazine of directable tungsten rods have been mounted to the exterior of the satellite, allowing for kinetic bombardment roughly equal to a series of nuclear blasts.`;
-				return `${r} ${loc1} ${gyro} ${thrusters} ${telemetry} ${solar} ${reactor} ${surviv} ${laser1}${heat} ${lens} ${kin}`;
+				return `${text12} ${loc1} ${gyro} ${thrusters} ${telemetry} ${solar} ${reactor} ${surviv} ${laser1}${heat} ${lens} ${kin}`;
 			} break;
 		case 'GR':
-			if (S.GiantRobot >= 1) { r += `<br>&nbsp;''Giant Robot:''`;
+			if (S.GiantRobot >= 1) { const text13 = `<br>&nbsp;''Giant Robot:''`;
 				if (S.GiantRobot >= 2) loc = ``; armor8 = `Armor plating has been mounted over the majority of the robot.`;
 				if (S.GiantRobot >= 3) power = `The robot is now powered by an umbilical cable system instead of bulky and short-lived batteries.`;
 				if (S.GiantRobot >= 4) knife = `a 25 meter plasma sword. The cutting edge uses plasma to melt and cut through targets, reducing the strain on the sword.`;
@@ -892,10 +910,10 @@ let recom2 = `; has been recommissioned for use by ${V.SF.Lower}. It`;
 				if (S.GiantRobot >= 8) armor8 = ``; actuator = `Final actuator tweaks have allowed for the addition of exceptionally thick armor without any loss in speed or power.`;
 				if (S.GiantRobot >= 9) ammo2 = `; with spare ammunition drums kept along the robot's waist.`;
 				if (S.GiantRobot >= 10) missile = `Missile pods have been mounted on the shoulders.`;
-				return `${r} A prototype giant robot ${loc} rests in a gantry along the side of the arcology. The robot is as tall as a medium-sized office building, focusing on speed over other factors. ${power} ${armor8} ${actuator} ${heatsink} The main armament is ${knife} ${cannon1}${ammo2} ${missile}`;
+				return `${text13} A prototype giant robot ${loc} rests in a gantry along the side of the arcology. The robot is as tall as a medium-sized office building, focusing on speed over other factors. ${power} ${armor8} ${actuator} ${heatsink} The main armament is ${knife} ${cannon1}${ammo2} ${missile}`;
 			} break;
 		case 'ms':
-			if (S.MissileSilo >= 1) { r += `<br>&nbsp;''Cruise Missile:''`;
+			if (S.MissileSilo >= 1) { const text14 = `<br>&nbsp;''Cruise Missile:''`;
 				if (S.MissileSilo >= 2) b2 = `a modern missile`; c8 = `; tipped with a conventional warhead`;
 				if (S.MissileSilo >= 3) d1 = `The launch systems have been overhauled, allowing a launch within seconds of an attack order being given.`;
 				if (S.MissileSilo >= 4) e1 = `The missile engines have been tweaked, giving them a greater range.`;
@@ -905,10 +923,11 @@ let recom2 = `; has been recommissioned for use by ${V.SF.Lower}. It`;
 				if (S.MissileSilo >= 8) g1 = `The ability to pick new targets should the original be lost has been added.`;
 				if (S.MissileSilo >= 9) h1 = `The missile now uses its remaining fuel to create a thermobaric explosion, massively increasing explosive power.`;
 				if (S.MissileSilo >= 10) c8 = ` that can be tipped with either a conventional or nuclear warhead`;
-				return `${r} ${a4} the arcology. The current missile armament is ${b2}${c8}. ${d1} ${e1} ${f1} ${g1} ${h1}`;
-			} break;
+				return `${text14} ${a4} the arcology. The current missile armament is ${b2}${c8}. ${d1} ${e1} ${f1} ${g1} ${h1}`;
+			}
+			break;
 		case 'AC':
-			if (S.AircraftCarrier >= 1) { r += `<br>&nbsp;''Aircraft Carrier:''`;
+			if (S.AircraftCarrier >= 1) { const text15 = `<br>&nbsp;''Aircraft Carrier:''`;
 				if (V.week % 6 === 0) loc2 = `moored to the pier in the Naval Yard`; else loc2 = `patrolling the waters near ${V.arcologies[0].name}`;
 				if (S.AircraftCarrier >= 2) radar = `The island's radar and comms have been improved.`; recom1 = ``;
 				if (S.AircraftCarrier >= 3) AAG = `The antiair guns have been updated to automatically track and predict enemy aircraft movement.`;
@@ -919,10 +938,11 @@ let recom2 = `; has been recommissioned for use by ${V.SF.Lower}. It`;
 				if (S.AircraftCarrier >= 8) power1 = `The power plant has been converted to provide nuclear power.`;
 				if (S.AircraftCarrier >= 9) scramble1 = `The catapult has been converted to an electromagnetic launch system, halving the time it takes to scramble1 jets.`;
 				if (S.AircraftCarrier >= 10) jets = `Attack VTOL from the converted for carrier capability`;
-				return `${r} An aircraft carrier ${recom1} is ${loc2}. ${jets} serve as its airpower. ${scramble1} ${power1} ${radar} ${AAG} ${torp} ${prop} ${armor9}`;
-			} break;
+				return `${text15} An aircraft carrier ${recom1} is ${loc2}. ${jets} serve as its airpower. ${scramble1} ${power1} ${radar} ${AAG} ${torp} ${prop} ${armor9}`;
+			}
+			break;
 		case 'Sub':
-			if (S.Sub >= 1) { r += `<br>&nbsp;''Submarine:''`;
+			if (S.Sub >= 1) { const text16 = `<br>&nbsp;''Submarine:''`;
 				if (S.Sub >= 2) recom = ``; reactor0 = `A nuclear reactor provides power`; reactor1 = `; but because oxygen is still kept in pressurized canisters the sub must frequently surface to replenish its oxygen stocks.`;
 				if (S.Sub >= 3) reactor1 = ` and an oxygen generator pulls Oâ‚‚ from the surrounding seawater, allowing the submarine to remain underwater for months if necessary.`;
 				if (S.Sub >= 4) cal = `Calibration of the propulsion systems has reduced the telltale hum of a moving sub to a whisper.`;
@@ -932,10 +952,11 @@ let recom2 = `; has been recommissioned for use by ${V.SF.Lower}. It`;
 				if (S.Sub >= 8) control = `The control room computers have been upgraded to automate many conn duties.`;
 				if (S.Sub >= 9) torpedoes = `and launch more agile torpedoes.`;
 				if (S.Sub >= 10) missiles = `The submarine has been outfitted with several cruise missiles to attack land or sea-based targets.`;
-				return `${r} An attack submarine ${recom} is moored to the pier of the Naval Yard. ${reactor0}${reactor1} ${cal} ${hull} ${tubes}${torpedoes} ${sonar} ${control} ${missiles}`;
-			} break;
+				return `${text16} An attack submarine ${recom} is moored to the pier of the Naval Yard. ${reactor0}${reactor1} ${cal} ${hull} ${tubes}${torpedoes} ${sonar} ${control} ${missiles}`;
+			}
+			break;
 		case 'HAT':
-			if (S.HAT >= 1) {r += `<br>&nbsp;''Amphibious Transport:''`;
+			if (S.HAT >= 1) { const text17 = `<br>&nbsp;''Amphibious Transport:''`;
 				if (S.HAT >= 2) skirt = `The skirt has been upgraded to increase durability and improve cushion when traveling over uneven terrain and waves.`; recom2 = `;`;
 				if (S.HAT >= 3) guns = `A minigun`; guns2 = `has been mounted on the front corners of the craft to defend against attackers.`;
 				if (S.HAT >= 4) fans = `The turbines powering the rear fans`; speed = `acceleration and speed.`; turbines = `have been replaced with a more powerful version, allowing greater`;
@@ -945,8 +966,9 @@ let recom2 = `; has been recommissioned for use by ${V.SF.Lower}. It`;
 				if (S.HAT >= 8) ramps = `The loading ramps have been improved, allowing for faster unloading.`;
 				if (S.HAT >= 9) HATframe = `The frame has been widened and reinforced, allowing for more space on the deck.`;
 				if (S.HAT >= 10) loadout = `An experimental loadout sacrifices all carrying capacity to instead act as a floating gun platform by mounting several rotary autocannons the deck, should the need arise.`;
-				return `${r} An air cushion transport vehicle, or hovercraft ${recom2} is parked on the pier of the Naval Yard, ready to ferry ${tons} tons of soldiers and vehicles. ${guns} ${guns2} ${fans} ${turbines} ${speed} ${skirt} ${armor10} ${ramps} ${HATframe} ${loadout}`;
-			} break;
+				return `${text17} An air cushion transport vehicle, or hovercraft ${recom2} is parked on the pier of the Naval Yard, ready to ferry ${tons} tons of soldiers and vehicles. ${guns} ${guns2} ${fans} ${turbines} ${speed} ${skirt} ${armor10} ${ramps} ${HATframe} ${loadout}`;
+			}
+			break;
 	}
 		/*if (V.SF.Facility.Toggle > 0 && V.SF.Facility.Active > 0) { r += `<br><br>''${V.SF.Facility.Caps}:''`;
 			if (passage() === "Firebase") {
@@ -1061,7 +1083,7 @@ let recom2 = `; has been recommissioned for use by ${V.SF.Lower}. It`;
 				case 'Edo Revivalism': text += `Edo Revivalism: a vision of Edo Japan.`; break;
 				case 'Arabian Revivalism': text += `Arabian Revivalism: a vision of the Sultanate of old.`; break;
 				case 'Chinese Revivalism': text += `Chinese Revivalism: a vision of ancient China.`; break;
-				case 'Multiculturalism': text +=`Multiculturalism: a commitment to allow your arcology's citizens cultural freedom.`; break;
+				case 'Multiculturalism': text + = `Multiculturalism: a commitment to allow your arcology's citizens cultural freedom.`; break;
 			}
 			text += `\n&nbsp;Smuggle in FS-optimized : `;
 			const Optionslist = UpgradeOptions;
@@ -1084,7 +1106,7 @@ let recom2 = `; has been recommissioned for use by ${V.SF.Lower}. It`;
 					case 'VehicleUpgrades': title='Vehicle Upgrade'; cost=300000; break;
 					case 'CommonAreaVendors': title='Firebase Vendors'; cost=300000; break;
 					case 'RoleplayingManadated': title='Mandate FS-Roleplaying'; cost=500000; break;
-					case 'ColonelCompilance': title='colonel compliance'; cost=1000000; break;
+					case 'ColonelCompilance': title='colonel compliance'; cost = 1000000; break;
 				}
 				if (![FSPOS].includes(V.SF.Acceptance.FS)) {
 					MEMU_OPTION('Slaves','Slaves',cost), text += ` `;
diff --git a/src/art/vector_revamp/vectorRevampedArtControl.js b/src/art/vector_revamp/vectorRevampedArtControl.js
index 381e46520e2eca963e2a7454ea43ffc96da8b3b5..7e1f419ffc7738643f55f1af0db7ad24b7a657ed 100644
--- a/src/art/vector_revamp/vectorRevampedArtControl.js
+++ b/src/art/vector_revamp/vectorRevampedArtControl.js
@@ -452,7 +452,7 @@ class ClothingControl {
 
 	get restrictiveLatex() {
 		var defaultOutfitColor = "#515351";
-		var areolaColor = "#383838";	/** FIXME: 'areolaColor' is declared but its value is never read.ts(6133) */
+		var areolaColor = "#383838";
 		return {
 			bodySettings: {
 				showEyes: false,
@@ -874,8 +874,8 @@ class RevampedArtControl {
 	get armLayer() {
 		var result = [];
 
-		var leftArmType = "";	/** FIXME: 'leftArmType' is declared but its value is never read.ts(6133) */
-		var rightArmType = "";	/** FIXME: 'rightArmType' is declared but its value is never read.ts(6133) */
+		var leftArmType = "";
+		var rightArmType = "";
 
 		if (this.artSlave.amp === 1) {
 			result.push("Art_Vector_Revamp_Arm_Stump");
diff --git a/src/endWeek/saChoosesOwnClothes.js b/src/endWeek/saChoosesOwnClothes.js
index 78451c250e5f0cb8b51174fad58f1740bac840e1..39cdbd92e97badfdd6d767e88e8007b4322918f7 100644
--- a/src/endWeek/saChoosesOwnClothes.js
+++ b/src/endWeek/saChoosesOwnClothes.js
@@ -1,3 +1,4 @@
+/* eslint-disable no-empty */
 /* eslint-disable no-undef */
 /* eslint-disable no-unused-vars */
 window.saChoosesOwnClothes = (function() {
@@ -989,9 +990,7 @@ window.saChoosesOwnClothes = (function() {
 		let neck = [];
 
 		if(slave.fetish === 'mindbroken') {
-			/** FIXME: Empty block statement.eslint(no-empty) */
 		} else if(slave.devotion <= 20) {
-			/** FIXME: Empty block statement.eslint(no-empty) */
 		} else {
 			if(V.arcologies[0].FSEgyptianRevivalist > 0) {
 				neck.push({text: `dons a wesekh to support your ancient Egyptian pretensions,`, collar: "ancient Egyptian"});
diff --git a/src/endWeek/saServant.js b/src/endWeek/saServant.js
index a1dbca384f12e997e9f1ae611062b7fd84892079..e58b06959ed64569e1f8c67e1142404148e72c71 100644
--- a/src/endWeek/saServant.js
+++ b/src/endWeek/saServant.js
@@ -3,7 +3,7 @@
 window.saServant = /** @param {App.Entity.SlaveState} slave */ function saServant(slave) {
 
 	var pronouns = getPronouns(slave);
-	var he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, boy = pronouns.noun;	/** FIXME: 'hers', 'himself', 'boy' is declared but its value is never read.ts(6133) */
+	var he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, boy = pronouns.noun;
 	var He = capFirstChar(he), His = capFirstChar(his);
 	var V = State.variables;
 
diff --git a/src/facilities/farmyard/farmyard.tw b/src/facilities/farmyard/farmyard.tw
index e846a39c53768301a21f0c817532a5bb1d4388fc..34fb3df5ed9a6178e72324174ea08aaa3e6f28c8 100644
--- a/src/facilities/farmyard/farmyard.tw
+++ b/src/facilities/farmyard/farmyard.tw
@@ -219,7 +219,7 @@ $farmyardNameCaps is an oasis of growth in the midst of the jungle of steel and
 		<<if (_CL > 0 || _HL > 0 || _FL > 0)>>
 			[[Begin shows|Farmyard][$farmyardShows = 1]]
 		<<else>>
-			//You must purchase animals before you put on shows//
+			//You must purchase animals before you can put on shows//
 		<</if>>
 	<</if>>
 <</if>>
@@ -310,14 +310,14 @@ $farmyardNameCaps is an oasis of growth in the midst of the jungle of steel and
 			<<print $canines>>.
 		<<elseif _CL <= 3>>
 			a couple different
-			<<for _c = 0; _c < _CL; _c++>>	/* FIXME: this does not work */
-			<<if $canines[_c].species != "dog">>
-				<<set _onlyDogs = 0>>
-			<<else>>
-				<<set _onlyDogs = 1>>
-			<</if>>
-			<</for>>
-			<<if _onlyDogs == 0>>
+			<<set $onlyDogs = 0>>
+			<<run $canines.forEach(function(c) {
+				const V = State.variables;
+				if (c.species == "dog") {
+					V.onlyDogs = 1;
+				}
+			})>>
+			<<if $onlyDogs == 0>>
 				types of canines.
 			<<else>>
 				breeds of dogs.
@@ -391,14 +391,14 @@ $farmyardNameCaps is an oasis of growth in the midst of the jungle of steel and
 			<<print $felines>>.
 		<<elseif _FL <= 3>>
 			a couple different
-			<<for _f = 0; _f < _FL; _f++>>	/* FIXME: this does not work */
-			<<if $felines[_f].species != "cat">>
-				<<set _onlyCats = 0>>
-			<<else>>
-				<<set _onlyCats = 1>>
-			<</if>>
-			<</for>>
-			<<if _onlyCats == 0>>
+			<<set $onlyCats = 0>>
+			<<run $felines.forEach(function(c) {
+				const V = State.variables;
+				if (c.species == "cat") {
+					V.onlyCats = 1;
+				}
+			})>>
+			<<if $onlyCats == 0>>
 				types of felines.
 			<<else>>
 				breeds of cats.
diff --git a/src/facilities/farmyard/farmyardAnimals.tw b/src/facilities/farmyard/farmyardAnimals.tw
index 4fb491daa66965e82c2015eb59f1fe5eff11bf1a..4831242bd8ed512ba0295a256c81a723e32c844b 100644
--- a/src/facilities/farmyard/farmyardAnimals.tw
+++ b/src/facilities/farmyard/farmyardAnimals.tw
@@ -2,6 +2,8 @@
 
 <<set $nextButton = "Back", $nextLink = "Farmyard", $returnTo = "FarmyardAnimals", $showEncyclopedia = 1, $encyclopedia = "Farmyard">>
 
+/* TODO: write some descriptions for the different animals in their cages */
+
 <<if $farmyardKennels > 0 || $farmyardStable > 0 || $farmyardCages > 0>>
 <br>
 ''Domestic Animals''
diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js
index a6985cba59c0921d3aeaff603916fe9dc928a31e..6a1ab33686b346212b5dec66f61bff55447f68fc 100644
--- a/src/js/DefaultRules.js
+++ b/src/js/DefaultRules.js
@@ -206,7 +206,7 @@ window.DefaultRules = (function() {
 				break;
 
 			case "work as a farmhand":
-				if ((V.farmyardSlaves < V.farmyard)) { // TODO: rework these requirements
+				if ((V.farmyardSlaves < V.farmyard && !slave.fuckdoll)) { // TODO: rework these requirements
 					break;
 				} else {
 					RAFacilityRemove(slave, rule);
diff --git a/src/js/familyTreeJS.js b/src/js/familyTreeJS.js
index 4f78035bb341eb070519ed791c6fb0a2984f26ba..767265dd7932d88188f1a02a0c618add486e8c39 100644
--- a/src/js/familyTreeJS.js
+++ b/src/js/familyTreeJS.js
@@ -592,7 +592,7 @@ window.updateFamilyTree = function(activeSlave = lastActiveSlave, slaves = lastS
 				}
 				var marriage = {
 					"spouse": {"name": spouseName, "class": spouse.genes},
-					"children": children.map(function (x) { return slaveInfo_(x, activeSlaveId, slavesAdded, depth + 1);} ),	/** FIXME: Functions declared within loops referencing an outer scoped variable may lead to confusing semantics. (slaveInfo_, activeSlaveId, slavesAdded, depth) (W083)jshint(W083) */
+					"children": children.map(function (x) { return slaveInfo_(x, activeSlaveId, slavesAdded, depth + 1);} ),
 				};
 				data.marriages.push(marriage);
 			}
diff --git a/src/js/optionsMacro.js b/src/js/optionsMacro.js
index b4d81c6d548aecbba2d12f180509f62df7af8a56..bbf725a57cc0cb0508ade6e23a9e702cbbfd5a14 100644
--- a/src/js/optionsMacro.js
+++ b/src/js/optionsMacro.js
@@ -1,3 +1,4 @@
+/* eslint-disable no-empty */
 /* eslint-disable no-console */
 /* eslint-disable no-undef */
 /* Use like:
diff --git a/src/js/rulesAssistantOptions.js b/src/js/rulesAssistantOptions.js
index 99875f7b1e636f9776f978beb8278ce316421160..c8f40b383cb822fd93e27450cf73af04dae81f59 100644
--- a/src/js/rulesAssistantOptions.js
+++ b/src/js/rulesAssistantOptions.js
@@ -213,7 +213,7 @@ window.rulesAssistantOptions = (function() {
 				this.value.innerHTML = ""+what;
 		}
 
-		getData(what) {	/** FIXME: 'what' is declared but its value is never read.ts(6133) */
+		getData(what) {
 			return (this.value.tagName === "INPUT" ? this.parse(this.value.value): this.selectedItem.data);
 		}
 
@@ -301,7 +301,7 @@ window.rulesAssistantOptions = (function() {
 			this.label = label;
 			this.onclick = onclick;
 		}
-		render(label, onclick) {	/** FIXME: 'onclick' is declared but its value is never read.ts(6133) */
+		render(label, onclick) {
 			const elem = document.createElement("span");
 			elem.classList.add("rajs-listitem");
 			elem.innerHTML = label;
@@ -671,7 +671,7 @@ window.rulesAssistantOptions = (function() {
 			min.setAttribute("type", "text");
 			min.value = "" + data.value[0];
 			min.onkeypress = e => { if (returnP(e)) this.setmin(min.value); };
-			min.onblur = e => this.setmin(min.value);	/** FIXME: 'e' is declared but its value is never read.ts(6133) */
+			min.onblur = e => this.setmin(min.value);
 			this.min = min;
 			elem.appendChild(min);
 
@@ -685,7 +685,7 @@ window.rulesAssistantOptions = (function() {
 			max.setAttribute("type", "text");
 			max.value = "" + data.value[1];
 			max.onkeypress = e => { if (returnP(e)) this.setmax(max.value); };
-			max.onblur = e => this.setmax(max.value);	/** FIXME: 'e' is declared but its value is never read.ts(6133) */
+			max.onblur = e => this.setmax(max.value);
 			this.max = max;
 			elem.appendChild(max);
 
@@ -744,7 +744,7 @@ window.rulesAssistantOptions = (function() {
 			input.setAttribute("type", "text");
 			input.value = JSON.stringify(data.value);
 			input.onkeypress = e => { if (returnP(e)) this.setValue(input); };
-			input.onblur = e => this.setValue(input);	/** FIXME: 'e' is declared but its value is never read.ts(6133) */
+			input.onblur = e => this.setValue(input);
 			this.input = input;
 			elem.appendChild(input);
 
diff --git a/src/js/slaveSummaryWidgets.js b/src/js/slaveSummaryWidgets.js
index 76be92184a13cb83fbf785a129daec6544bb2955..37657febb457cd48cc71ea0413a1fd53ea09b56c 100644
--- a/src/js/slaveSummaryWidgets.js
+++ b/src/js/slaveSummaryWidgets.js
@@ -22,12 +22,35 @@ window.SlaveSummary = /** @param {App.Entity.SlaveState} slave */ function Slave
 window.SlaveSummaryUncached = (function(){
 	"use strict";
 	let V, r;
+	/*
+	let pronouns;
+	let he;
+	let him;
+	let his;
+	let hers;
+	let himself;
+	let boy;
+	let He;
+	let His;
+	*/
 
 	/** @param {App.Entity.SlaveState} slave
 	 * @returns {string} */
 	function SlaveSummaryUncached(slave) {
 		V = State.variables;
 		r = "";
+		/*
+		pronouns = getPronouns(slave);
+		he = pronouns.pronoun;
+		him = pronouns.object;
+		his = pronouns.possessive;
+		hers = pronouns.possessivePronoun;
+		himself = pronouns.objectReflexive;
+		boy = pronouns.noun;
+		He = capFirstChar(he);
+		His = capFirstChar(his);
+		*/
+
 		if (V.abbreviateDevotion === 1)
 			short_devotion(slave);
 		else if (V.abbreviateDevotion === 2)
@@ -248,7 +271,7 @@ window.SlaveSummaryUncached = (function(){
 			if (V.abbreviateClothes === 2) {
 				r += `&nbsp;&nbsp;&nbsp;&nbsp;`;
 				if (slave.choosesOwnClothes === 1)
-					r += `Dressing herself.`;
+					r += `Dressing herself. `;
 				long_clothes(slave);
 				long_collar(slave);
 				long_belly(slave);
@@ -4782,7 +4805,7 @@ App.UI.PassageSlaveFilers = {
 		(State.variables.Flag === 1 && s.assignment === "work in the dairy") ||
 		(State.variables.Flag !== 0 && State.variables.Flag !== 1 && s.ID === State.variables.Milkmaid.ID))),
 	"Milkmaid Select": s => (s.assignmentVisible === 1 && s.fuckdoll === 0 && s.devotion > 20 && canWalk(s) && canSee(s) && canHear(s)),
-	"Farmyard": s => (s.assignmentVisible === 1 && s.fuckdoll <= 0 && canWalk(s) && (
+	"Farmyard": s => (s.assignmentVisible === 1 && s.fuckdoll <= 0 && (
 		(State.variables.Flag === 0 && s.assignment !== "work as a farmhand") ||
 		(State.variables.Flag === 1 && s.assignment === "work as a farmhand") ||
 		(State.variables.Flag !== 0 && State.variables.Flag !== 1 && s.ID === State.variables.Farmer.ID))),
@@ -4868,7 +4891,7 @@ App.UI.slaveSummaryList = function (passageName) {
 		if ("object" === typeof attributes)
 			attributes = $.map(attributes, (val, key) => key + '="' + val + '"').join(" ");
 		else
-			attributes = 'id="' + String(this.args[0]).trim() + '"'; /** FIXME: If a strict mode function is executed using function invocation, its 'this' value will be undefined. jshint(W040) */
+			attributes = 'id="' + String(this.args[0]).trim() + '"';
 
 		return '<' + htag + ' ' + attributes + '>' + payload + '</' + htag + '>';
 	}
@@ -4995,7 +5018,7 @@ App.UI.slaveSummaryList = function (passageName) {
 
 		const _slaveName = SlaveFullName(_Slave);
 
-		let _tableCount = 0;	/** FIXME: '_tableCount' is declared but its value is never read.ts(6133) */
+		let _tableCount = 0;
 		let slaveImagePrinted = (V.seeImages === 1) && (V.seeSummaryImages === 1);
 
 		res.push('<div id="slave_' + _Slave.ID + '" style="clear:both">');
@@ -5004,7 +5027,7 @@ App.UI.slaveSummaryList = function (passageName) {
 			case "Main":
 				if ((_Slave.choosesOwnClothes === 1) && (_Slave.clothes === "choosing her own clothes")) {
 					const _oldDevotion = _Slave.devotion;
-					const _chosenClothes = saChoosesOwnClothes(_Slave);	/** FIXME: '_chosenClothes' is declared but its value is never read.ts(6133) */
+					const _chosenClothes = saChoosesOwnClothes(_Slave);
 					slaves[_ssi].devotion = _oldDevotion;
 					_Slave = slaves[_ssi]; /* restore devotion value so repeatedly changing clothes isn't an exploit */
 				}
@@ -5013,7 +5036,7 @@ App.UI.slaveSummaryList = function (passageName) {
 				else if ("recruit girls" === _Slave.assignment) res.push('<strong>@@.lightcoral;RC@@</strong> ');
 				else if ("guard you" === _Slave.assignment) res.push('<strong>@@.lightcoral;BG@@</strong> ');
 
-				if (Array.isArray(V.personalAttention) && V.personalAttention.findIndex(s => s.ID === _Slave.ID) !== -1)	/** FIXME: Functions declared within loops referencing an outer scoped variable may lead to confusing semantics. (_Slave) jshint(W083) */
+				if (Array.isArray(V.personalAttention) && V.personalAttention.findIndex(s => s.ID === _Slave.ID) !== -1)
 				{
 					res.push('<strong>@@.lightcoral; PA@@</strong> ');
 				}
diff --git a/src/js/vignettes.js b/src/js/vignettes.js
index b47ce02d1263405100c776bfb233763ed79d0ad7..bc39f1dc80b58204232b5430cec176f8530eafbd 100644
--- a/src/js/vignettes.js
+++ b/src/js/vignettes.js
@@ -3580,7 +3580,7 @@ window.GetVignette = /** @param {App.Entity.SlaveState} slave */ function GetVig
 				type: "trust",
 				effect: -1
 			});
-			if (V.canines.length > 0) {
+			if ((V.canines.length > 0) && (slave.amp === 0)) {
 				vignettes.push({
 					text: `an over-excited dog left scratch marks on ${his} legs,`,
 					type: "health",
@@ -3603,7 +3603,7 @@ window.GetVignette = /** @param {App.Entity.SlaveState} slave */ function GetVig
 			}
 		} else {
 			vignettes.push({
-				text: `TODO: add a vignette here`,
+				text: `${he} worked extra hard, and managed to sell extra produce,`,
 				type: "cash",
 				effect: 1,
 			});
diff --git a/src/js/walkPastJS.js b/src/js/walkPastJS.js
index ca56e19c2cee92cb7f1c22b3b2a073a088c65ffc..3179d7fd04af28ad9a68c0492f63f046a5687940 100644
--- a/src/js/walkPastJS.js
+++ b/src/js/walkPastJS.js
@@ -2607,3 +2607,308 @@ window.buttWatch = function(slave) {
 	}
 	return t;
 };
+
+window.anusWatch = function(slave) {
+
+	/* will be moved up once this becomes a single, contained function. */
+	let t = "";
+	let V = State.variables;
+
+	let pronouns = getPronouns(slave);
+	let he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, boy = pronouns.noun;
+	let He = capFirstChar(he), His = capFirstChar(his);
+
+	V.target = "FAnus";
+
+	t += `<<AnusDescription>>`;
+	if (slave.chastityAnus == 0) {
+		t += ` `;
+		switch (slave.clothes) {
+			case "a Fuckdoll suit":
+				t += `${His} suit is expressly designed to encourage use of ${his} rear hole.`;
+				break;
+			case "uncomfortable straps":
+				t += `The ring over ${his} asshole beckons.`;
+				break;
+			case "shibari ropes":
+				t += `The rope between ${his} buttocks presses lewdly against ${his} anus as ${he} moves.`;
+				break;
+			case "restrictive latex":
+				t += `As one of the only islands in the sea of black latex, ${his} asshole is eye catching.`;
+				break;
+			case "a fallen nuns habit":
+				t += `${His} slutty nun outfit leaves ${his} butthole bare and available for anal sin.`;
+				break;
+			case "a chattel habit":
+				t += `${His} chattel habit covers ${his} anus with a strip of cloth, but it's designed to be lifted readily.`;
+				break;
+			case "a penitent nuns habit":
+				t += `${His} habit chafes ${his} rear end so cruelly that it would probably be a relief to ${him} to have it pulled up for a rough buttfuck.`;
+				break;
+			case "attractive lingerie":
+				if (alave.anus > 1 && slave.amp === 1) {
+					t += `${His} pretty g-string frequently fails to cover ${his} big butthole.`;
+					break;
+				} else if (slave.anus > 1) {
+					t += `As ${he} moves, ${his} pretty g-string frequently fails to cover ${his} big butthole.`;
+					break;
+				} else {
+					t += `As ${he} moves, ${his} pretty g-string draws your attention to ${his} ass.`;
+				}
+				break;
+			case "a succubus outfit":
+				t += `${His} succubus outfit's tail holds ${his} skirt up high in back, inviting a damning buttfuck.`;
+				break;
+			case "a nice maid outfit":
+				t += `${His} long maid's skirt will have to be gotten out of the way to permit access to ${his} ass.`;
+				break;
+			case "a slutty maid outfit":
+				t += `${His} short maid's skirt can be lifted to reveal ${his} bare buttocks.`;
+				break;
+			case "a slutty nurse outfit":
+				t += `${His} tight skirt flatters ${his} ass as ${he} moves.`;
+				break;
+			case "a schoolgirl outfit":
+				if (slave.anus === 0) {
+					t += `This schoolgirl clearly needs to lose ${his} anal virginity.`;
+				} else if (slave.vagina === 0) {
+					t += `This schoolgirl clearly takes it up the ass; that way, ${he} can remain a virgin, and be, like, totally pure and innocent.`;
+				} else {
+					t += `This schoolgirl clearly takes it up the ass.`;
+				}
+				break;
+			case "a kimono":
+				t += ` While ${his} kimono may demurely cover ${his} behind, you know ${his} asshole is bare under it.`;
+				break;
+			case "attractive lingerie for a pregnant woman":
+				t += `${His} silken panties are just begging to be torn off.`;
+				break;
+			case "a maternity dress":
+				t += `${His} dress could easily be slide up over ${his} butt to expose ${his} backdoor.`;
+				break;
+			case "stretch pants and a crop-top":
+				t += `${He} can easily be pantsed to reveal ${his} bare buttocks.`;
+				break;
+			case "a hijab and abaya":
+			case "a niqab and abaya":
+				t += `While ${his} abaya totally covers ${his} behind, it can be easily lifted to reveal ${his} asshole.`;
+				break;
+			case "a klan robe":
+				t += `While ${his} robe totally covers ${his} behind, it can be lifted to reveal ${his} asshole.`;
+				break;
+			case "a burqa":
+				t += `While ${his} burqa totally covers ${his} behind, it can be lifted to reveal ${his} asshole.`;
+				break;
+			case "an oversized t-shirt":
+				t += `${His} t-shirt may be oversized, but it does little to hide ${his} asshole.`;
+				break;
+			case "a tube top and thong":
+			case "a thong":
+			case "a t-shirt and thong":
+				if (alave.anus > 1 && slave.amp === 1) {
+					t += `${His} thong frequently fails to cover ${his} big butthole.`;
+					break;
+				} else if (slave.anus > 1) {
+					t += `As ${he} moves, ${his} thong frequently fails to cover ${his} big butthole.`;
+					break;
+				} else {
+					t += `As ${he} moves, ${his} thong draws your attention to ${his} ass.`;
+				}
+				break;
+			case "a bra":
+			case "a button-up shirt":
+			case "a sweater":
+			case "a tank-top":
+			case "a tube top":
+			case "a striped bra":
+			case "a slutty klan robe":
+			case "a sports bra":
+			case "a t-shirt":
+				t += `${His} outfit exposes ${his} bare butt and vulnerable asshole.`;
+				break;
+			case "an oversized t-shirt and boyshorts":
+			case "boyshorts":
+				t += `${His} boyshorts are tight enough to give hints of ${his} asshole.`;
+				break;
+			case "a button-up shirt and panties":
+			case "a sweater and panties":
+			case "a tank-top and panties":
+			case "panties":
+			case "a t-shirt and panties":
+			case "panties and pasties":
+			case "striped underwear":
+				t += `${His} tightly clinging panties can be pulled aside to reveal ${his} asshole.`;
+				break;
+			case "cutoffs":
+			case "sport shorts and a t-shirt":
+			case "sport shorts":
+			case "a sweater and cutoffs":
+			case "sport shorts and a sports bra":
+				t += `${His} shorts are practically begging to be pulled down to reveal ${his} naked butthole.`;
+				break;
+			case "a police uniform":
+			case "a t-shirt and jeans":
+			case "leather pants":
+			case "jeans":
+			case "leather pants and a tube top":
+			case "leather pants and pasties":
+				t += `${His} pants are practically begging to be pulled down to reveal ${his} naked butthole.`;
+				break;
+			case "a nice pony outfit":
+			case "a slutty pony outfit":
+				t += `${His} leather outfit is practically sculpted to fit ${his} ass, though would need to be undone to reach ${his} butthole.`;
+				break;
+			case "a skimpy loincloth":
+				t += `${His} loincloth gives hints of ${his} bare ass and asshole beneath it.`;
+				break;
+			case "a gothic lolita dress":
+				t += `${His} dress can be lifted easily to reveal ${his} asshole.`;
+				break;
+			case "a hanbok":
+				t += `${His} hanbok can be lifted easily to reveal ${his} asshole.`;
+				break;
+			case "a one-piece swimsuit":
+				t += `${His} swimsuit tightly clings to ${his} rear, but `;
+				if (slave.butt > 3) {
+					t += `${his} butt is too large to easily pull it aside and reach ${his} asshole.`;
+				} else {
+					t += `can be easily pulled aside to reveal ${his} asshole.`;
+				}
+				break;
+			case "a burkini":
+				t += `${His} burkini modestly covers ${his} rear.`;
+				break;
+			case "a hijab and blouse":
+				t += `${His} modest skirt can be easily lifted to reveal ${his} asshole.`;
+				break;
+			case "battledress":
+				t += `${His} fatigue trousers are not particularly flattering to ${his} butt but could be pulled down easily enough.`;
+				break;
+			case "a monokini":
+				t += `The bottom of ${his} monokini is practically sculpted to fit ${his} ass.`;
+				break;
+			case "a cybersuit":
+				t += `As ${his} buttocks work naturally with ${his} movement, ${his} tight bodysuit gives hints of ${his} asshole.`;
+				break;
+			case "a string bikini":
+				if (slave.anus > 1) {
+					t += `As ${he} moves, ${his} big butthole is clearly visible behind ${his} tiny g-string.`;
+				} else {
+					t += `As ${he} moves, ${his} tiny g-string draws your attention to ${his} ass.`;
+				}
+				break;
+			case "a scalemail bikini":
+				t += `${His} scalemail bottom draws attention to ${his} ass cheeks, while concealing ${his} rear hole.`;
+				break;
+			case "striped panties":
+				t += `${His} cute panties draw attention to ${his} ass cheeks, while concealing ${his} rear hole.`;
+				break;
+			case "clubslut netting":
+				t += `As ${he} moves, the hole in ${his} netting right over ${his} butthole looks inviting.`;
+				break;
+			case "a cheerleader outfit":
+				t += `As ${he} moves, ${his} short pleated cheerleader skirt shows off ${his} butt.`;
+				break;
+			case "cutoffs and a t-shirt":
+				t += `As ${he} moves, ${his} tight cutoffs flatter ${his} butt.`;
+				break;
+			case "spats and a tank top":
+				t += `${His} spats show off every curve of ${his} ass.`;
+				break;
+			case "a slutty outfit":
+				t += `For today's slutty outfit ${he}'s chosen `;
+				if (slave.butt > 5) {
+					t += `a leather skirt with zippers that permit ready access to ${his} butt.`;
+				} else {
+					t += `fishnets with a hole cut over ${his} asshole so ${he} can be sodomized without removing or damaging ${his} clothing.`;
+				}
+				break;
+			case "a slave gown":
+				t += `${His} gorgeous dress leaves little to the imagination; there's little doubt ${his} butt is bare beneath it.`;
+				break;
+			case "a halter top dress":
+				t += `${His} dress should slide up over ${his} butt to reveal ${his} backdoor.`;
+				break;
+			case "a ball gown":
+				t += `${His} ballgown and its petticoats could easily be flipped up to bare ${his} butt.`;
+				break;
+			case "slutty business attire":
+				t += `${His} short skirt will easily slide up to bare ${his} asshole.`;
+				break;
+			case "nice business attire":
+				t += `${His} conservative skirt can be slid up over ${his} hips to bare ${his} butthole.`;
+				break;
+			case "a comfortable bodysuit":
+				t += `${His} bodysuit demands attention for ${his} tightly clad backdoor.`;
+				break;
+			case "a latex catsuit":
+				t += `${His} latex catsuit's crotch zipper offers ready access to ${his} backdoor.`;
+				break;
+			case "a military uniform":
+				t += `${His} uniform skirt can be slid up over ${his} hips to bare ${his} butthole.`;
+				break;
+			case "a schutzstaffel uniform":
+				t += `${His} uniform's trousers can be easily slid down to expose ${his} butthole.`;
+				break;
+			case "a slutty schutzstaffel uniform":
+				t += `${His} uniform miniskirt can be easily slid up over ${his} hips to bare ${his} butthole.`;
+				break;
+			case "a red army uniform":
+				t += `${His} uniform skirt can be slid up over ${his} hips to bare ${his} butthole.`;
+				break;
+			case "a long qipao":
+				t += `${His} dress can be slid up over ${his} hips to bare ${his} butthole.`;
+				break;
+			case "battlearmor":
+				t += `${His} armor demands attention for ${his} tightly clad backdoor.`;
+				break;
+			case "a mounty outfit":
+				t += `${His} uniform slacks can be slipped off ${his} hips to bare ${his} butthole.`;
+				break;
+			case "a dirndl":
+				t += `${His} dress can be easily lifted to access ${his} bare ass.`;
+				break;
+			case "lederhosen":
+				t += `${His} tight shorts can be slipped off ${his} hips to bare ${his} butthole.`;
+				break;
+			case "a biyelgee costume":
+				t += `${His} costume can be easily lifted to access ${his} naked butt.`;
+				break;
+			case "a nice nurse outfit":
+				t += `${His} nurse's trousers can be easily slid down to expose ${his} butthole.`;
+				break;
+			case "a mini dress":
+				t += `${His} mini dress can be easily slid up to expose ${his} butthole.`;
+				break;
+			case "an apron":
+				t += `${His} apron leaves ${his} asshole completely exposed.`;
+				break;
+			case "a leotard":
+				t += `As ${his} buttocks work naturally with ${his} movement, ${his} tight leotard gives hints of ${his} asshole.`;
+				break;
+			case "a bunny outfit":
+				t += `${His} fluffy white cottontail draws attention to ${his} butt, inevitably bringing anal to mind.`;
+				break;
+			case "harem gauze":
+				t += `${His} ass is clearly visible through the thin gauze that covers it.`;
+				break;
+			case "a toga":
+				t += `${His} toga is so transparent it can't hide ${his} asscrack, which looks very seductive.`;
+				break;
+			case "a huipil":
+				t += `${His} huipil can be easily lifted to access ${his} naked butt.`;
+				break;
+			case "slutty jewelry":
+				t += `${His} belt of light chain threatens to dip into ${his} asscrack with each step.`;
+				break;
+			default:
+				if (slave.chastityVagina) {
+					t += `${His} chastity belt leaves ${his} ass available.`;
+				} else {
+					t += `You run your eye over ${his} naked ass.`;
+				}
+		}
+	}
+
+	return t;
+};
diff --git a/src/uncategorized/endWeek.tw b/src/uncategorized/endWeek.tw
index c6909755b9a052142dc52a5af79182b0e6337f27..256a00f8a76833581097622b605f1431a88e665f 100644
--- a/src/uncategorized/endWeek.tw
+++ b/src/uncategorized/endWeek.tw
@@ -27,6 +27,20 @@
 	<<set $penetrativeUseWeight++>>
 <</if>>
 
+<<run $slaves.forEach(function(s) {
+	const V = State.variables;
+	if (s.inflationMethod == 1 || s.inflationMethod == 2) {
+		if (s.inflationType == "milk") {
+			V.inflatedSlavesMilk++;
+		} else if (s.inflationType == "cum") {
+			V.inflatedSlavesCum++;
+		}
+	}
+	if (s.assignment == "be a subordinate slave" && s.subTarget == 0) {
+		V.subSlaves++;
+	}
+})>>
+/*
 <<for _i = 0; _i < $slaves.length; _i++>>
 	<<if $slaves[_i].inflationMethod == 1 || $slaves[_i].inflationMethod == 2>>
 		<<if $slaves[_i].inflationType == "milk">>
@@ -39,6 +53,7 @@
 		<<set $subSlaves++>>
 	<</if>>
 <</for>>
+*/
 
 <<if $organs.length > 0>>
 <<for _i = 0; _i < $organs.length; _i++>>
@@ -115,19 +130,20 @@
 <<set $TSS.schoolSale = 0, $GRI.schoolSale = 0, $SCP.schoolSale = 0, $LDE.schoolSale = 0, $TGA.schoolSale = 0, $HA.schoolSale = 0, $TFS.schoolSale = 0, $TCR.schoolSale = 0, $independenceDay = 0, $showEncyclopedia = 0, $racialVarieties = [], $shelterGirlsIDs = [], $oldWeek = $week, $cashLastWeek = $cash, $repLastWeek = $rep, $foodLastWeek = $food>>
 
 <<if $foodMarket > 0>>
-	<<for _f = 0; _f < $slaves.length; _f++>>
-		<<if $slaves[_f].diet == "restricted">>
-			<<set $foodConsumption += 1.8>>
-		<<elseif $slaves[_f].diet == "slimming">>
-			<<set $foodConsumption += 1.9>>
-		<<elseif $slaves[_f].diet == "muscle building">>
-			<<set $foodConsumption += 2.1>>
-		<<elseif $slaves[_f].diet == "fattening">>
-			<<set $foodConsumption += 2.2>>
-		<<else>>
-			<<set $foodConsumption += 2>>
-		<</if>>
-	<</for>>
+	<<run $slaves.forEach(function(s) {
+		const V = State.variables;
+		if (s.diet == "restricted") {
+			V.foodConsumption += 1.8;
+		} else if (s.diet == "slimming") {
+			V.foodConsumption += 1.9;
+		} else if (s.diet == "muscle building") {
+			V.foodConsumption += 2.1;
+		} else if (s.diet == "fattening") {
+			V.foodConsumption += 2.2;
+		} else {
+			V.foodConsumption += 2;
+		}
+	})>>
 
 	<<set $food -= $foodConsumption>>
 	<<if $food < 0>>
diff --git a/src/uncategorized/longSlaveDescription.tw b/src/uncategorized/longSlaveDescription.tw
index 6f19d35da2490cc35dde221daa0929b35a17b12f..b8bad58b19e7778f30e9cccb281c6234bc5b54ae 100644
--- a/src/uncategorized/longSlaveDescription.tw
+++ b/src/uncategorized/longSlaveDescription.tw
@@ -1897,7 +1897,7 @@ $He is
 		$He has plump arms with
 	<<elseif $activeSlave.weight > 97>>
 		$He has chubby arms with
-	<<else>>
+	<<elseif $activeSlave.muscles > 5>>
 		$He has normal arms with
 	<</if>>
 	<<if $activeSlave.muscles > 95>>
@@ -1907,7 +1907,7 @@ $He is
 	<<elseif $activeSlave.muscles > 5>>
 		toned muscles<<if $activeSlave.weight > 30>> hidden beneath $his soft flesh<</if>>.
 	<<else>>
-		little muscle to them.
+		/*little muscle to them.*/
 	<</if>>
 <</if>>
 
@@ -1943,7 +1943,7 @@ $He is
 		$He has fat legs with thick, soft thighs and
 	<<elseif $activeSlave.weight > 95>>
 		$He has normal legs with thick, soft thighs and
-	<<else>>
+	<<elseif $activeSlave.muscles > 5>>
 		$He has relatively normal legs and thighs with
 	<</if>>
 	<<if $activeSlave.muscles > 95>>
@@ -1953,7 +1953,7 @@ $He is
 	<<elseif $activeSlave.muscles > 5>>
 		toned muscles<<if $activeSlave.weight > 30>> hidden beneath $his soft flab<</if>>.
 	<<else>>
-		barely any muscle in them.
+		/*barely any muscle in them.*/
 	<</if>>
 <</if>>
 
diff --git a/src/uncategorized/nextWeek.tw b/src/uncategorized/nextWeek.tw
index 384210fe9d8b5e6897569aa80fb08b4f96223e6b..d03f730accdf303047527ae01b7532970c05313d 100644
--- a/src/uncategorized/nextWeek.tw
+++ b/src/uncategorized/nextWeek.tw
@@ -384,7 +384,7 @@
 /% These are variables that either should be made into _temp vars or should be Zeroed out once done with them instead of here. This can also interfere with debugging or hide NaN's as zeroing things out would clear a NaN. Also could stop from NaN's getting worse? %/
 /% Integer and float variables. No real need to zero them out but doesn't hurt to have them in a known state, though this might mask variables NaN'ing out. Takes up the least amount of Memory besides a "" string. %/
 <<set $i = 0, $j = 0, $x = 0, $r = 0, $opinion = 0, $influenceBonus = 0, $averageProsperity = 0, $beauty = 0, $beautyMultiplier = 0, $FResult = 0, $groomSlave = -1, $brideSlave = -1, $mother = -1, $daughter = -1, $devMother = -1, $devDaughter = -1, $alphaTwin = -1, $betaTwin = -1, $youngerSister = -1, $olderSister = -1, $recruiterSlave = -1>>
-<<set $boobsID = -1, $boobsInterestTargetID = -1, $buttslutID = -1, $buttslutInterestTargetID = -1, $cumslutID = -1, $cumslutInterestTargetID = -1, $humiliationID = -1, $humiliationInterestTargetID = -1, $sadistID = -1, $sadistInterestTargetID = -1, $masochistID = -1, $masochistInterestTargetID = -1, $domID = -1, $dominantInterestID = -1, $subID = -1, $submissiveInterestTargetID = -1>>
+<<set $boobsID = -1, $boobsInterestTargetID = -1, $buttslutID = -1, $buttslutInterestTargetID = -1, $cumslutID = -1, $cumslutInterestTargetID = -1, $humiliationID = -1, $humiliationInterestTargetID = -1, $sadistID = -1, $sadistInterestTargetID = -1, $masochistID = -1, $masochistInterestTargetID = -1, $domID = -1, $dominantInterestTargetID = -1, $subID = -1, $submissiveInterestTargetID = -1>>
 
 /% Other arrays %/
 <<set $events = [], $RESSevent = [], $RESSTRevent = [], $RETSevent = [], $RECIevent = [], $RecETSevent = [], $REFIevent = [], $REFSevent = [], $PESSevent = [], $PETSevent = [], $FSAcquisitionEvents = [], $FSNonconformistEvents = [], $qualifiedNicknames = [], $REAnalCowgirlSubIDs = [], $REButtholeCheckinIDs = [], $recruit = [], $RETasteTestSubIDs = [], $devotedSlaves = [], $rebelSlaves = [], $REBoobCollisionSubIDs = [], $REIfYouEnjoyItSubIDs = [], $RESadisticDescriptionSubIDs = [], $REShowerForceSubIDs = [], $RESimpleAssaultIDs = [], $RECockmilkInterceptionIDs = [], $REInterslaveBeggingIDs = [], $bedSlaves = [], $qualifiedFS = [], $eligibleSlaves = [], $slavesInLine = []>>
diff --git a/src/uncategorized/randomIndividualEvent.tw b/src/uncategorized/randomIndividualEvent.tw
index 3060c064d3a0f9684307f9154b67c65d89e69d07..82bdd1fdd28db77d2e1e4d8a1e45d7c6d4d46612 100644
--- a/src/uncategorized/randomIndividualEvent.tw
+++ b/src/uncategorized/randomIndividualEvent.tw
@@ -4,6 +4,10 @@
 <<if $eventSlave == 0>>
 	<<if $cheatMode == 1>>
 		<<set $nextButton = "Refresh", $nextLink = "Random Individual Event", $returnTo = "Random Individual Event">>
+		
+		<<link "Skip week-end events" "Next Week">><</link>>
+		<br><br>
+
 		''One of the following eligible slaves would have been selected for an individual random event:''
 		<br>
 		<<for $i = 0; $i < $eligibleSlaves.length; $i++>>
diff --git a/src/uncategorized/randomNonindividualEvent.tw b/src/uncategorized/randomNonindividualEvent.tw
index 20e8a6ebf526c0e6728d4e1b7681920f8ceefe67..d85afc345baa3747d54ca7dab343582f0c0bf9ab 100644
--- a/src/uncategorized/randomNonindividualEvent.tw
+++ b/src/uncategorized/randomNonindividualEvent.tw
@@ -5,6 +5,10 @@
 	<<set $eventSlave = $slaves.random()>>
 	<<if $cheatMode == 1>>
 		<<set $nextButton = "Refresh", $nextLink = "Random Nonindividual Event", $returnTo = "Random Nonindividual Event">>
+
+		<<link "Skip week-end events" "Next Week">><</link>>
+		<br><br>
+
 		''Any one of your slaves would have been selected for a random non-individual event:''
 		<br>
 		<<for $i = 0; $i < $slaves.length; $i++>>
diff --git a/src/uncategorized/rieEligibilityCheck.tw b/src/uncategorized/rieEligibilityCheck.tw
index c4a1ea04810ecc16f6173310487155ebb8df0328..238d270059c1ed7671d5d375fd07c0990e0cc94d 100644
--- a/src/uncategorized/rieEligibilityCheck.tw
+++ b/src/uncategorized/rieEligibilityCheck.tw
@@ -1,5 +1,7 @@
 :: RIE Eligibility Check
 
+<<link "Skip week-end events" "Next Week">><</link>>
+
 <<silently>>
 
 <<set $eventSlave = 0, $eligibleSlaves = []>>
diff --git a/src/uncategorized/walkPast.tw b/src/uncategorized/walkPast.tw
index 1c55bfbfaa7896c4280b6917727dfa3bfa444527..2c2cb1e2f651feb10343f1be83ce892ade791c54 100644
--- a/src/uncategorized/walkPast.tw
+++ b/src/uncategorized/walkPast.tw
@@ -2993,180 +2993,9 @@
 	<</if>>
 	<<set $target = "FVagina">>
 <<elseif (_flag > 20)>>
-	<<AnusDescription>>
-	<<switch $activeSlave.clothes>>
-	<<case "a Fuckdoll suit">>
-		$His suit is expressly designed to encourage use of $his rear hole.
-	<<case "uncomfortable straps">>
-		The ring over $his asshole beckons.
-	<<case "shibari ropes">>
-		The rope between $his buttocks presses lewdly against $his anus as $he moves.
-	<<case "restrictive latex">>
-		As one of the only islands in the sea of black latex, $his asshole is eye catching.
-	<<case "a fallen nuns habit">>
-		$His slutty nun outfit leaves $his butthole bare and available for anal sin.
-	<<case "a chattel habit">>
-		$His chattel habit covers $his anus with a strip of cloth, but it's designed to be lifted readily.
-	<<case "a penitent nuns habit">>
-		$His habit chafes $his rear end so cruelly that it would probably be a relief to $him to have it pulled up for a rough buttfuck.
-	<<case "attractive lingerie">>
-		<<if ($activeSlave.anus > 1) && ($activeSlave.amp == 1)>>
-			$His pretty g-string frequently fails to cover $his big butthole.
-		<<elseif ($activeSlave.anus > 1)>>
-			As $he moves, $his pretty g-string frequently fails to cover $his big butthole.
-		<<else>>
-			As $he moves, $his pretty g-string draws your attention to $his ass.
-		<</if>>
-	<<case "a succubus outfit">>
-		$His succubus outfit's tail holds $his skirt up high in back, inviting a damning buttfuck.
-	<<case "a nice maid outfit">>
-		$His long maid's skirt will have to be gotten out of the way to permit access to $his ass.
-	<<case "a slutty maid outfit">>
-		$His short maid's skirt can be lifted to reveal $his bare buttocks.
-	<<case "a slutty nurse outfit">>
-		$His tight skirt flatters $his ass as $he moves.
-	<<case "a schoolgirl outfit">>
-		<<if $activeSlave.anus == 0>>
-			This schoolgirl clearly needs to lose $his anal virginity.
-		<<elseif $activeSlave.vagina == 0>>
-			This schoolgirl clearly takes it up the ass; that way, $he can remain a virgin, and be, like, totally pure and innocent.
-		<<else>>
-			This schoolgirl clearly takes it up the ass.
-		<</if>>
-	<<case "a kimono">>
-		<<if ($activeSlave.butt > 5)>>
-			$His kimono demurely covers $his behind, though it cannot conceal its massive shape.
-		<<else>>
-			$His kimono demurely covers $his behind.
-		<</if>>
-	<<case "attractive lingerie for a pregnant woman">>
-		$His silken panties are just begging to be torn off.
-	<<case "a maternity dress">>
-		<<if $activeSlave.butt > 5>>
-			$His dress covers $his behind, though it cannot conceal its massive size.
-		<<else>>
-			$His dress demurely covers $his behind.
-		<</if>>
-	<<case "stretch pants and a crop-top">>
-		$He can easily be pantsed to reveal $his bare buttocks.
-	<<case "a hijab and abaya" "a niqab and abaya">>
-		While $his abaya totally covers $his behind, it can be easily lifted to reveal $his asshole.
-	<<case "a klan robe">>
-		While $his robe totally covers $his behind, it can be lifted to reveal $his asshole.
-	<<case "a burqa">>
-		While $his burqa totally covers $his behind, it can be lifted to reveal $his asshole.
-	<<case "a tube top and thong" "a bra" "a button-up shirt" "a sweater" "a tank-top" "a thong" "a tube top" "a striped bra" "a slutty klan robe" "a sports bra" "a t-shirt" "a t-shirt and thong" "an oversized t-shirt">>
-		$His clothing leaves $his butt bare, with easy access to $his asshole.
-	<<case "a button-up shirt and panties" "a sweater and panties" "a tank-top and panties" "an oversized t-shirt and boyshorts" "boyshorts" "panties" "a t-shirt and panties" "panties and pasties" "striped underwear">>
-		$His tightly clinging panties can be pulled aside to reveal $his asshole.
-	<<case "cutoffs" "sport shorts and a t-shirt" "sport shorts" "a sweater and cutoffs" "sport shorts and a sports bra">>
-		$His shorts are practically sculpted to fit $his ass.
-	<<case "a police uniform" "a t-shirt and jeans" "leather pants" "jeans" "leather pants and a tube top" "leather pants and pasties">>
-		$His pants are practically sculpted to fit $his ass.
-	<<case "a nice pony outfit" "a slutty pony outfit">>
-		$His leather outfit is practically sculpted to fit $his ass.
-	<<case "a skimpy loincloth">>
-		$his loincloth gives hints of $his bare ass and asshole beneath it.
-	<<case "a gothic lolita dress">>
-		$His dress can be lifted easily to reveal $his asshole.
-	<<case "a hanbok">>
-		$His hanbok can be lifted easily to reveal $his asshole.
-	<<case "a one-piece swimsuit">>
-		$His swimsuit tightly clings to $his rear, but can be easily pulled aside to reveal $his asshole.
-	<<case "a burkini">>
-		$His burkini modestly covers $his rear.
-	<<case "a hijab and blouse">>
-		$His modest skirt can be easily lifted to reveal $his asshole.
-	<<case "battledress">>
-		$His fatigue trousers are not particularly flattering to $his butt.
-	<<case "a monokini">>
-		The bottom of $his monokini is practically sculpted to fit $his ass.
-	<<case "a cybersuit">>
-		As $his buttocks work naturally with $his movement, $his tight bodysuit gives hints of $his asshole.
-	<<case "a string bikini">>
-		<<if ($activeSlave.anus > 1)>>
-			As $he moves, $his big butthole is clearly visible behind $his tiny g-string.
-		<<else>>
-			As $he moves, $his tiny g-string draws your attention to $his ass.
-		<</if>>
-	<<case "a scalemail bikini">>
-		$His scalemail bottom draws attention to $his ass cheeks, while concealing $his rear hole.
-	<<case "striped panties">>
-		$His cute panties draw attention to $his ass cheeks, while concealing $his rear hole.
-	<<case "clubslut netting">>
-		As $he moves, the hole in $his netting right over $his butthole looks inviting.
-	<<case "a cheerleader outfit">>
-		As $he moves, $his short pleated cheerleader skirt shows off $his butt.
-	<<case "cutoffs and a t-shirt">>
-		As $he moves, $his tight cutoffs flatter $his butt.
-	<<case "spats and a tank top">>
-		$His spats show off every curve of $his ass.
-	<<case "a slutty outfit">>
-		<<if ($activeSlave.butt > 5)>>
-			For today's slutty outfit $he's chosen a leather skirt with zippers that permit ready access to $his butt.
-		<<else>>
-			For today's slutty outfit $he's chosen fishnets with a hole cut over $his asshole so $he can be sodomized without removing or damaging $his clothing.
-		<</if>>
-	<<case "a slave gown">>
-		$His gorgeous dress leaves little to the imagination; there's little doubt $his butt is bare beneath it.
-	<<case "a halter top dress">>
-		$His dress should slide up over $his butt to reveal $his backdoor.
-	<<case "a ball gown">>
-		$His ballgown and its petticoats could easily be flipped up to bare $his butt.
-	<<case "slutty business attire">>
-		$His short skirt will easily slide up to bare $his asshole.
-	<<case "nice business attire">>
-		$His conservative skirt can be slid up over $his hips to bare $his butthole.
-	<<case "a comfortable bodysuit">>
-		$His bodysuit demands attention for $his tightly clad backdoor.
-	<<case "a latex catsuit">>
-		$His latex catsuit's crotch zipper offer ready access to $his backdoor.
-	<<case "a military uniform">>
-		$His uniform skirt can be slid up over $his hips to bare $his butthole.
-	<<case "a schutzstaffel uniform">>
-		$His uniform's trousers can be easily slid down to expose $his butthole.
-	<<case "a slutty schutzstaffel uniform">>
-		$His uniform miniskirt can be easily slid up over $his hips to bare $his butthole.
-	<<case "a red army uniform">>
-		$His uniform skirt can be slid up over $his hips to bare $his butthole.
-	<<case "a long qipao">>
-		$His dress can be slid up over $his hips to bare $his butthole.
-	<<case "battlearmor">>
-		$His armor demands attention for $his tightly clad backdoor.
-	<<case "a mounty outfit">>
-		$His uniform slacks can be slipped off $his hips to bare $his butthole.
-	<<case "a dirndl">>
-		$His dress can be easily lifted to access $his bare ass.
-	<<case "lederhosen">>
-		$His tight shorts can be slipped off $his hips to bare $his butthole.
-	<<case "a biyelgee costume">>
-		$His costume can be easily lifted to access $his naked butt.
-	<<case "a nice nurse outfit">>
-		$His nurse's trousers can be easily slid down to expose $his butthole.
-	<<case "a mini dress">>
-		$His mini dress can be easily slid up to expose $his butthole.
-	<<case "an apron">>
-		$His apron leaves $his asshole completely exposed.
-	<<case "a leotard">>
-		As $his buttocks work naturally with $his movement, $his tight leotard gives hints of $his asshole.
-	<<case "a bunny outfit">>
-		$His fluffy white cottontail draws attention to $his butt, inevitably bringing anal to mind.
-	<<case "harem gauze">>
-		$His ass is clearly visible through the thin gauze that covers it.
-	<<case "a toga">>
-		$His toga is so transparent it can't hide $his asscrack, which looks very seductive.
-	<<case "a huipil">>
-		$His huipil can be easily lifted to access $his naked butt.
-	<<case "slutty jewelry">>
-		$His belt of light chain threatens to dip into $his asscrack with each step.
-	<<default>>
-		<<if ($activeSlave.chastityVagina)>>
-			$His chastity belt leaves $his ass available.
-		<<else>>
-			You run your eye over $his naked ass.
-		<</if>>
-	<</switch>>
-	<<set $target = "FAnus">>
+
+	<<= anusWatch($activeSlave)>>
+
 <<elseif (_flag > 0)>>
 	<<faceDescription>>
 	<<mouthDescription>>
diff --git a/src/utility/descriptionWidgetsFlesh.tw b/src/utility/descriptionWidgetsFlesh.tw
index d7d9eaa468a5b791fd4b094c9b2a82ca245bd7e0..b4f18b0df437fb02eea2b1f3e1dbc5b548c78aab 100644
--- a/src/utility/descriptionWidgetsFlesh.tw
+++ b/src/utility/descriptionWidgetsFlesh.tw
@@ -5389,7 +5389,7 @@ $He's got a
 	<</if>>
 <<elseif $activeSlave.earShape == "damaged">>
 	$His outer ears have been severely damaged.
-<<elseif $activeSlave.earShape == "normal" && $activeSlave.earT>> /* Ears are expected, so lets only mention them if we have two sets */
+<<elseif $activeSlave.earShape == "normal" && $activeSlave.earT != "none">> /* Ears are expected, so lets only mention them if we have two sets */
 	$He has perfectly ordinary ears.
 <<elseif $activeSlave.earShape == "robot">>
 	$He has high tech cyber-ears that could be mistaken for headphones. /*not yet implemented*/