diff --git a/src/js/assayJS.tw b/src/js/assayJS.tw
new file mode 100644
index 0000000000000000000000000000000000000000..392e847f410727af0610b0a780db93089b12972c
--- /dev/null
+++ b/src/js/assayJS.tw
@@ -0,0 +1,168 @@
+:: AssayJS [script]
+
+window.slimCount = function(slaves) {
+	var slim = 0;
+	var ArcologyZero = State.variables.arcologies[0];
+	
+	for (var i = 0; i < slaves.length; i++) {
+		var slave = slaves[i];
+		if ((slave.boobs < 500) && (slave.butt < 3)) {
+			if ((slave.muscles <= 30) && (ArcologyZero.FSPhysicalIdealist == "unset") && (slave.weight <= 10) && (ArcologyZero.FSHedonisticDecadence == "unset")) {
+				slim += 1;
+			} else if (ArcologyZero.FSPhysicalIdealist != "unset") {
+				if ((ArcologyZero.FSPhysicalIdealistStrongFat == 1) && (slave.weight <= 30)) { 
+					slim += 1;
+				} 
+			} else if ((ArcologyZero.FSHedonisticDecadence != "unset") && (slave.weight <= 30)) { 
+				if (ArcologyZero.FSHedonisticDecadenceStrongFat == 1) { 
+					slim += 1;
+				} else if (slave.muscles <= 30) {
+					slim += 1;
+				}
+			}
+		}
+	}
+	
+	return slim;
+}
+
+window.stackedCount = function(slaves) {
+	var stacked = 0;
+	
+	for (var i = 0; i < slaves.length; i++) {
+		var slave = slaves[i];
+		if ((slave.butt > 4) && (slave.boobs > 800)) {
+			stacked += 1;
+		}
+	}
+	
+	return stacked;
+}
+
+window.moddedCount = function(slaves) {
+	var modded = 0;
+	
+	for (var i = 0; i < slaves.length; i++) {
+		var slave = slaves[i];
+		var modScore = ModScore(slave);
+		var tatScore = TatScore(slave);
+		var piercingScore = PiercingScore(slave);
+		if ((modScore > 15) || (piercingScore > 8) && (tatScore > 5)) {
+			modded += 1;
+		}
+	}
+	return modded;
+}
+
+window.unmoddedCount = function(slaves) {
+	var unmodded = 0;
+	
+	for (var i = 0; i < slaves.length; i++) {
+		var slave = slaves[i];
+		var modScore = ModScore(slave);
+		var tatScore = TatScore(slave);
+		var piercingScore = PiercingScore(slave);
+		if ((modScore > 15) || (piercingScore > 8) && (tatScore > 5))
+		; else {
+			unmodded += 1;
+		}
+	}
+	
+	return unmodded;
+}
+
+window.XYCount = function(slaves) {
+	var XY = 0;
+	
+	for (var i = 0; i < slaves.length; i++) {
+		var slave = slaves[i];
+		if (slave.vagina == -1) {
+			XY += 1;
+		} 
+	}
+	return XY;
+}
+
+window.XXCount = function(slaves) {
+	var XX = 0;
+
+	for (var i = 0; i < slaves.length; i++) {
+		var slave = slaves[i];
+		if (slave.vagina != -1) {
+			State.variables.XX += 1;
+		}
+	}
+	return XX;
+}
+
+window.youngCount = function(slaves) {
+	var young = 0;
+
+	for (var i = 0; i < slaves.length; i++) {
+		var slave = slaves[i];
+		if (slave.visualAge < 30) {
+			State.variables.young += 1;
+		}
+	}
+	return young;
+}
+
+window.oldCount = function(slaves) {
+	var old = 0;
+
+	for (var i = 0; i < slaves.length; i++) {
+		var slave = slaves[i];
+		if (slave.visualAge >= 30) {
+			State.variables.old += 1;
+		}
+	}
+	return old;
+}
+
+window.pregYesCount = function(slaves) {
+	var pregYes = 0;
+	
+	for (var i = 0; i < slaves.length; i++) {
+		var slave = slaves[i];
+		if ((slave.bellyPreg >= 5000) || (slave.bellyImplant >= 5000)) {
+			pregYes += 1;
+		}
+	}
+	return pregYes;
+}
+
+window.pregNoCount = function(slaves) {
+	var pregNo = 0;
+	
+	for (var i = 0; i < slaves.length; i++) {
+		var slave = slaves[i];
+		if ((slave.bellyPreg >= 5000) || (slave.bellyImplant >= 5000))
+		; else if ((slave.belly < 100) && (slave.weight < 30) && (!setup.fakeBellies.includes(slave.bellyAccessory))) {
+			pregNo += 1;
+		}
+	}
+	return pregNo;
+}
+
+window.implantedCount = function(slaves) {
+	var implanted = 0;
+	for (var i = 0; i < slaves.length; i++) {
+		var slave = slaves[i];
+		if ((slave.boobsImplant == 0) && (slave.buttImplant == 0) && (slave.waist >= -95) && (slave.lipsImplant == 0) && (slave.faceImplant < 30) && (slave.bellyImplant == -1) && (Math.abs(slave.shouldersImplant) < 2) && (Math.abs(slave.hipsImplant) < 2))
+		; else {
+			implanted += 1;
+		}
+	}
+	return implanted;
+}
+
+window.pureCount = function(slaves) {
+	var pure = 0;
+	for (var i = 0; i < slaves.length; i++) {
+		var slave = slaves[i];
+		if ((slave.boobsImplant == 0) && (slave.buttImplant == 0) && (slave.waist >= -95) && (slave.lipsImplant == 0) && (slave.faceImplant < 30) && (slave.bellyImplant == -1) && (Math.abs(slave.shouldersImplant) < 2) && (Math.abs(slave.hipsImplant) < 2)) {
+			pure += 1;
+		} 
+	}
+	return pure;
+}