diff --git a/devTools/FC.d.ts b/devTools/FC.d.ts
index ba1ec2ce3a402bfd5001a1b0d38d1824160e5c42..2530ad10fbdbc6647f3d9de67e1b3a5568dcbda1 100644
--- a/devTools/FC.d.ts
+++ b/devTools/FC.d.ts
@@ -54,6 +54,8 @@ declare namespace App {
 
 	namespace Interact {}
 
+	namespace Intro {}
+
 	namespace MainView {}
 
 	namespace RA {
diff --git a/js/002-config/fc-js-init.js b/js/002-config/fc-js-init.js
index c1925ba032bc87ab8266d871aafdb382f069d1f1..bb8f1581c1ba790a8158db46e5b8c710694f6132 100644
--- a/js/002-config/fc-js-init.js
+++ b/js/002-config/fc-js-init.js
@@ -22,6 +22,7 @@ App.UI.SlaveInteract = {};
 App.Update = {};
 App.Utils = {};
 App.Interact = {};
+App.Intro = {};
 App.Desc = {};
 App.Facilities = {
 	Brothel: {},
diff --git a/src/003-assets/CSS/arcologyBuilding.css b/src/003-assets/CSS/arcologyBuilding.css
index c216bd5627c7641390809872a24024176782817c..741851cbffe41e50982924f3f474ad942b0f1b66 100644
--- a/src/003-assets/CSS/arcologyBuilding.css
+++ b/src/003-assets/CSS/arcologyBuilding.css
@@ -35,6 +35,18 @@ div.building div.innerCell:not(.filler) {
     background-color: #111;
 }
 
+/* introduction special formatting */
+/* makes all links unusable */
+.intro div.building a {
+    color: white;
+    pointer-events: none;
+    cursor: default;
+}
+
+.intro div.building .hotkey {
+    display: none;
+}
+
 /* penthouse formatting */
 div.building div.gridWrapper {
     display: grid;
diff --git a/src/arcologyBuilding/base.js b/src/arcologyBuilding/base.js
index c33ece874ae5248f2eb2afab043f5a7c144fb66e..efc4405e9d87156d0fbf698abdb43a95bb090140 100644
--- a/src/arcologyBuilding/base.js
+++ b/src/arcologyBuilding/base.js
@@ -35,14 +35,14 @@ App.Arcology.updateOwnership = function() {
 };
 
 /**
- * @param {string} location
+ * @param {string} terrain
  * @returns {App.Arcology.Building}
  */
-App.Arcology.defaultBuilding = function(location = "default") {
+App.Arcology.defaultBuilding = function(terrain = "default") {
 	/**
 	 * @type {arcologyEnvironment}
 	 */
-	const env = {location: location, established: false, fs: ""};
+	const env = {terrain: terrain, established: false, fs: ""};
 	const candidates = App.Arcology.presets.filter(preset => preset.isAllowed(env));
 	return candidates.pluck().construct(env);
 };
diff --git a/src/arcologyBuilding/presets.js b/src/arcologyBuilding/presets.js
index a120e7e5af480b764dd8137d50fb6741d958aa74..b29ec5306c4f0adc203503f75a8d2266c1f9865c 100644
--- a/src/arcologyBuilding/presets.js
+++ b/src/arcologyBuilding/presets.js
@@ -1,6 +1,6 @@
 /**
  * @typedef {object} arcologyEnvironment
- * @property {string} location
+ * @property {string} terrain
  * @property {boolean} established
  * @property {string} fs
  */
@@ -139,53 +139,53 @@ App.Arcology.presets = (function() {
 	return [
 		/* basic types for controlled start */
 		{
-			isAllowed: env => !env.established && env.location === "default",
+			isAllowed: env => !env.established && env.terrain === "default",
 			construct: () => templateToBuilding(templates.default),
 			apply() {}
 		}, {
-			isAllowed: env => !env.established && env.location === "urban",
+			isAllowed: env => !env.established && env.terrain === "urban",
 			construct: () => templateToBuilding(templates.urban),
 			apply() {}
 		}, {
-			isAllowed: env => !env.established && env.location === "rural",
+			isAllowed: env => !env.established && env.terrain === "rural",
 			construct: () => templateToBuilding(templates.rural),
 			apply() {}
 		}, {
-			isAllowed: env => !env.established && env.location === "ravine",
+			isAllowed: env => !env.established && env.terrain === "ravine",
 			construct: () => templateToBuilding(templates.ravine),
 			apply() {}
 		}, {
-			isAllowed: env => !env.established && env.location === "marine",
+			isAllowed: env => !env.established && env.terrain === "marine",
 			construct: () => templateToBuilding(templates.marine),
 			apply() {}
 		}, {
-			isAllowed: env => !env.established && env.location === "oceanic",
+			isAllowed: env => !env.established && env.terrain === "oceanic",
 			construct: () => templateToBuilding(templates.oceanic),
 			apply() {}
 		},
 		/* crazy presets for established arcologies TODO */
 		{
-			isAllowed: env => env.established && env.location === "default",
+			isAllowed: env => env.established && env.terrain === "default",
 			construct() { return templateToBuilding(templates.default); },
 			apply() {}
 		}, {
-			isAllowed: env => env.established && env.location === "urban",
+			isAllowed: env => env.established && env.terrain === "urban",
 			construct() { return templateToBuilding(templates.urban); },
 			apply() {}
 		}, {
-			isAllowed: env => env.established && env.location === "rural",
+			isAllowed: env => env.established && env.terrain === "rural",
 			construct() { return templateToBuilding(templates.rural); },
 			apply() {}
 		}, {
-			isAllowed: env => env.established && env.location === "ravine",
+			isAllowed: env => env.established && env.terrain === "ravine",
 			construct() { return templateToBuilding(templates.ravine); },
 			apply() {}
 		}, {
-			isAllowed: env => env.established && env.location === "marine",
+			isAllowed: env => env.established && env.terrain === "marine",
 			construct() { return templateToBuilding(templates.marine); },
 			apply() {}
 		}, {
-			isAllowed: env => env.established && env.location === "oceanic",
+			isAllowed: env => env.established && env.terrain === "oceanic",
 			construct() { return templateToBuilding(templates.oceanic); },
 			apply() {}
 		}, {
@@ -217,3 +217,11 @@ App.Arcology.presets = (function() {
 		},
 	];
 }());
+
+/**
+ * @param {arcologyEnvironment} environment
+ * @returns {buildingPreset}
+ */
+App.Arcology.randomPreset = function(environment) {
+	return App.Arcology.presets.filter(p => p.isAllowed(environment)).random();
+};
diff --git a/src/events/intro/arcologySelection.js b/src/events/intro/arcologySelection.js
new file mode 100644
index 0000000000000000000000000000000000000000..ee804bb61e31ba5dfd7e59b20d57b528ccf74eb4
--- /dev/null
+++ b/src/events/intro/arcologySelection.js
@@ -0,0 +1,369 @@
+App.Intro.generateEstablishedArcologies = function() {
+	/* setup */
+	let allowedFS = ["ArabianRevivalist", "AssetExpansionist", "AztecRevivalist", "BodyPurist", "ChattelReligionist", "ChineseRevivalist", "EdoRevivalist", "EgyptianRevivalist", "Eugenics", "HedonisticDecadence", "IntellectualDependency", "MaturityPreferentialist", "Multiculturalist", "Pastoralist", "Paternalist", "PetiteAdmiration", "PhysicalIdealist", "Repopulationist", "RomanRevivalist", "SlaveProfessionalism", "SlimnessEnthusiast", "StatuesqueGlorification", "Subjugationist", "Supremacist", "TransformationFetishist", "YouthPreferentialist"];
+	if (V.seeDicks !== 0) {
+		allowedFS.push("GenderRadicalist");
+	}
+	if (V.seeDicks !== 100) {
+		allowedFS.push("GenderFundamentalist");
+	}
+	if (V.seeExtreme !== 0) {
+		allowedFS.push("Degradationist");
+	}
+	const terrainTypes = ["marine", "marine", "oceanic", "ravine", "rural", "rural", "rural", "urban", "urban"];
+	const continents = ["Africa", "Asia", "Asia", "Australia", "Europe", "Europe", "Japan", "North America", "North America", "South America", "the Middle East"];
+	const races = ["amerindian", "asian", "black", "indo-aryan", "latina", "malay", "middle eastern", "mixed race", "pacific islander", "semitic", "southern european", "white"];
+
+	let targets = 4;
+	if (V.PC.career === "arcology owner") {
+		targets += 2;
+	}
+
+	/* generation */
+	const fragment = document.createDocumentFragment();
+	for (let i = 0; i < targets; i++) {
+		fragment.append(arcologyCard());
+	}
+	return fragment;
+
+	function arcologyCard() {
+		const arcology = generateArcology();
+		const div = document.createElement("div");
+		div.classList.add("card");
+
+		div.append(App.UI.DOM.passageLink(arcology.name, "Intro Summary", () => {
+			V.targetArcology = arcology;
+			V.terrain = arcology.terrain;
+			V.continent = arcology.continent;
+			V.language = arcology.language;
+			arcology.apply();
+		}));
+
+		div.append(" is an established arcology located in a Free City ");
+		if (arcology.terrain === "urban") {
+			div.append(`carved out of an urban area of ${arcology.continent}.`);
+		} else if (arcology.terrain === "rural") {
+			div.append(`built in a rural area of ${arcology.continent}.`);
+		} else if (arcology.terrain === "marine") {
+			div.append(`constructed just offshore of ${arcology.continent}.`);
+		} else if (arcology.terrain === "ravine") {
+			div.append(`constructed in a large canyon of ${arcology.continent}.`);
+		} else {
+			div.append(`in the middle of the ocean.`);
+		}
+
+		function newLine(...content) {
+			const line = document.createElement("div");
+			line.classList.add("indent");
+			line.append(...content);
+			div.append(line);
+		}
+
+		if (arcology.prosperity >= 60) {
+			newLine("It is unusually prosperous for a vulnerable arcology.");
+		} else if (arcology.prosperity <= 40) {
+			newLine("It has little economic prosperity and is vulnerable.");
+		}
+
+		if (arcology.citizens > 0) {
+			newLine("It has an unusually high ratio of citizens to sex slaves, increasing demand for sexual services.");
+		} else if (arcology.citizens < 0) {
+			newLine("It has an unusually low ratio of citizens to sex slaves, reducing demand for sexual services.");
+		}
+
+		let innerDiv = document.createElement("div");
+		innerDiv.classList.add("indent");
+		div.append(innerDiv);
+
+		innerDiv.append("Its society ");
+		if (arcology.FSProgress >= 50) {
+			innerDiv.append("has advanced towards");
+		} else if (arcology.FSProgress >= 30) {
+			innerDiv.append("has devoted resources to");
+		} else {
+			innerDiv.append("has just begun to adopt");
+		}
+		innerDiv.append(" ");
+		switch (arcology.fs) {
+			case "Supremacist":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Supremacy of the ${arcology.race} ${arcology.race !== "mixed race" ? "race" : ""}.`, ["intro", "question"]));
+				break;
+			case "Subjugationist":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Subjugation of the ${arcology.race} ${arcology.race !== "mixed race" ? "race" : ""}.`, ["intro", "question"]));
+				break;
+			case "GenderRadicalist":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Gender Radicalism,`, ["intro", "question"]), " a movement that supports feminization of slavegirls with dicks.");
+				break;
+			case "GenderFundamentalist":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Gender Fundamentalism,`, ["intro", "question"]), " a reaction to modern libertinism that seeks to reinforce gender roles.");
+				break;
+			case "Paternalist":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Paternalism,`, ["intro", "question"]), " an optimistic strain of slavery that protects and improves slaves.");
+				break;
+			case "Degradationist":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Degradationism,`, ["intro", "question"]), " an extreme branch of modern slavery that treats slaves as subhuman.");
+				break;
+			case "AssetExpansionist":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Asset Expansionism,`, ["intro", "question"]), " a societal preoccupation with expansion of body parts, especially breasts.");
+				break;
+			case "SlimnessEnthusiast":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Slimness Enthusiasm,`, ["intro", "question"]), " an aesthetic movement that fetishizes the lithe female form.");
+				break;
+			case "TransformationFetishist":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Transformation Fetishism,`, ["intro", "question"]), " a focus on implants and other kinds of surgical alteration.");
+				break;
+			case "BodyPurist":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Body Purism,`, ["intro", "question"]), " a reaction to extreme surgical fetishism that prefers bodies grown biologically.");
+				break;
+			case "MaturityPreferentialist":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Maturity Preferentialism,`, ["intro", "question"]), " an appetite for mature slaves based on MILF fetishism.");
+				break;
+			case "YouthPreferentialist":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Youth Preferentialism,`, ["intro", "question"]), " which focuses on youth and virginity in slaves.");
+				break;
+			case "Pastoralist":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Pastoralism,`, ["intro", "question"]), " an appetite for products of the human body, especially milk.");
+				break;
+			case "PhysicalIdealist":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Physical Idealism,`, ["intro", "question"]), " an aspirational movement which fetishizes muscle and physical fitness.");
+				break;
+			case "ChattelReligionist":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Chattel Religionism,`, ["intro", "question"]), " a religious revival in the context of modern slavery.");
+				break;
+			case "RomanRevivalist":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Roman Revivalism,`, ["intro", "question"]), " which seeks to recreate the glory that was ancient Rome.");
+				innerDiv.append(App.UI.DOM.makeElement("div", "It has an established lingua franca: Latin."));
+				break;
+			case "AztecRevivalist":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Aztec Revivalism,`, ["intro", "question"]), " which aspires to reach the heights of the Aztec Empire at it's peak.");
+				innerDiv.append(App.UI.DOM.makeElement("div", "It has an established lingua franca: Nahuatl."));
+				break;
+			case "EgyptianRevivalist":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Egyptian Revivalism,`, ["intro", "question"]), " a movement to rebuild the monuments and greatness of ancient Egypt.");
+				innerDiv.append(App.UI.DOM.makeElement("div", "It has an established lingua franca: Ancient Egyptian."));
+				break;
+			case "EdoRevivalist":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Edo Revivalism,`, ["intro", "question"]), " an insular movement with a focus on the cultural superiority of old Japan.");
+				innerDiv.append(App.UI.DOM.makeElement("div", "It has an established lingua franca: Japanese."));
+				break;
+			case "ArabianRevivalist":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Arabian Revivalism,`, ["intro", "question"]), " a melding of Arabian history and recent mythology of the Near East.");
+				innerDiv.append(App.UI.DOM.makeElement("div", "It has an established lingua franca: Arabic."));
+				break;
+			case "ChineseRevivalist":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Chinese Revivalism,`, ["intro", "question"]), " which modernizes the assumed superiority of the Middle Kingdom.");
+				innerDiv.append(App.UI.DOM.makeElement("div", "It has an established lingua franca: Chinese."));
+				break;
+			case "Repopulationist":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Repopulationism,`, ["intro", "question"]), " the belief that the key to humanity's survival is a child in every fertile womb.");
+				break;
+			case "Eugenics":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Eugenics,`, ["intro", "question"]), " the belief that the world's failings were caused by rampant breeding of the inferior, and as such, only society's best should reproduce.");
+				break;
+			case "HedonisticDecadence":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Decadent Hedonism,`, ["intro", "question"]), " a movement to embody life's pleasures, particularly eating and sex.");
+				break;
+			case "IntellectualDependency":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Intellectual Dependency,`, ["intro", "question"]), " an appetite for horny, stupid slaves based on bimbo fetishism.");
+				break;
+			case "SlaveProfessionalism":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Slave Professionalism,`, ["intro", "question"]), " a strain of slavery that seeks smart, skilled, elegant slaves to hone to perfection.");
+				break;
+			case "PetiteAdmiration":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Petite Admiration,`, ["intro", "question"]), " which prefers its slaves to stand heads and shoulders shorter than their masters.");
+				break;
+			case "StatuesqueGlorification":
+				innerDiv.append(App.UI.DOM.makeElement("span", `Statuesque Glorification,`, ["intro", "question"]), " an obsession, both sexual and otherwise, over height.");
+				break;
+			default:
+				innerDiv.append(App.UI.DOM.makeElement("span", `Multiculturalism,`, ["intro", "question"]), " a celebration of the total liberty that was the original purpose of the Free Cities.");
+		}
+		div.append(innerDiv);
+		div.append(App.UI.DOM.makeElement("span", arcology.building.render(), "intro"));
+		return div;
+	}
+
+	function generateArcology() {
+		const arcology = {};
+		arcology.fs = getFS();
+		arcology.name = getName();
+		arcology.FSProgress = either(10, 30, 50);
+		arcology.prosperity = either(40, 50, 60);
+		arcology.citizens = random(-1, 1);
+		arcology.terrain = terrainTypes.random();
+		arcology.continent = continents.random();
+		arcology.language = getLanguage();
+
+		const env = {terrain: arcology.terrain, established: true, fs: arcology.fs};
+		const preset = App.Arcology.randomPreset(env);
+		arcology.building = preset.construct(env);
+		arcology.apply = preset.apply;
+
+		return arcology;
+
+		function getFS() {
+			const type = allowedFS.pluck();
+			if (type === "Supremacist" || type === "Subjugationist") {
+				arcology.race = races.random();
+			}
+			return type;
+		}
+
+		function getName() {
+			switch (arcology.fs) {
+				case "Supremacist":
+					switch (arcology.race) {
+						case "white":
+							return setup.ArcologyNamesSupremacistWhite.random();
+						case "asian":
+							return setup.ArcologyNamesSupremacistAsian.random();
+						case "latina":
+							return setup.ArcologyNamesSupremacistLatina.random();
+						case "middle eastern":
+							return setup.ArcologyNamesSupremacistMiddleEastern.random();
+						case "black":
+							return setup.ArcologyNamesSupremacistBlack.random();
+						case "indo-aryan":
+							return setup.ArcologyNamesSupremacistIndoAryan.random();
+						case "pacific islander":
+							return setup.ArcologyNamesSupremacistPacificIslander.random();
+						case "malay":
+							return setup.ArcologyNamesSupremacistMalay.random();
+						case "amerindian":
+							return setup.ArcologyNamesSupremacistAmerindian.random();
+						case "southern european":
+							return setup.ArcologyNamesSupremacistSouthernEuropean.random();
+						case "semitic":
+							return setup.ArcologyNamesSupremacistSemitic.random();
+						default:
+							return setup.ArcologyNamesSupremacistMixedRace.random();
+					}
+				case "Subjugationist":
+					switch (arcology.race) {
+						case "white":
+							return setup.ArcologyNamesSubjugationistWhite.random();
+						case "asian":
+							return setup.ArcologyNamesSubjugationistAsian.random();
+						case "latina":
+							return setup.ArcologyNamesSubjugationistLatina.random();
+						case "middle eastern":
+							return setup.ArcologyNamesSubjugationistMiddleEastern.random();
+						case "black":
+							return setup.ArcologyNamesSubjugationistBlack.random();
+						case "indo-aryan":
+							return setup.ArcologyNamesSubjugationistIndoAryan.random();
+						case "pacific islander":
+							return setup.ArcologyNamesSubjugationistPacificIslander.random();
+						case "malay":
+							return setup.ArcologyNamesSubjugationistMalay.random();
+						case "amerindian":
+							return setup.ArcologyNamesSubjugationistAmerindian.random();
+						case "southern european":
+							return setup.ArcologyNamesSubjugationistSouthernEuropean.random();
+						case "semitic":
+							return setup.ArcologyNamesSubjugationistSemitic.random();
+						default:
+							return setup.ArcologyNamesSubjugationistMixedRace.random();
+					}
+				case "GenderRadicalist":
+					return setup.ArcologyNamesGenderRadicalist.random();
+				case "GenderFundamentalist":
+					return setup.ArcologyNamesGenderFundamentalist.random();
+				case "Paternalist":
+					return setup.ArcologyNamesPaternalist.random();
+				case "Degradationist":
+					return setup.ArcologyNamesDegradationist.random();
+				case "AssetExpansionist":
+					return setup.ArcologyNamesAssetExpansionist.random();
+				case "SlimnessEnthusiast":
+					return setup.ArcologyNamesSlimnessEnthusiast.random();
+				case "TransformationFetishist":
+					return setup.ArcologyNamesTransformationFetishist.random();
+				case "BodyPurist":
+					return setup.ArcologyNamesBodyPurist.random();
+				case "MaturityPreferentialist":
+					return setup.ArcologyNamesMaturityPreferentialist.random();
+				case "YouthPreferentialist":
+					if (V.pedo_mode === 1 || V.minimumSlaveAge < 6) {
+						return setup.ArcologyNamesYouthPreferentialistLow.random();
+					} else if (V.minimumSlaveAge < 14) {
+						return either(setup.ArcologyNamesYouthPreferentialist, setup.ArcologyNamesYouthPreferentialistLow).random();
+					} else {
+						return setup.ArcologyNamesYouthPreferentialist.random();
+					}
+				case "Pastoralist":
+					return setup.ArcologyNamesPastoralist.random();
+				case "PhysicalIdealist":
+					return setup.ArcologyNamesPhysicalIdealist.random();
+				case "ChattelReligionist":
+					return setup.ArcologyNamesChattelReligionist.random();
+				case "RomanRevivalist":
+					return setup.ArcologyNamesRomanRevivalist.random();
+				case "AztecRevivalist":
+					return setup.ArcologyNamesAztecRevivalist.random();
+				case "EgyptianRevivalist":
+					return setup.ArcologyNamesEgyptianRevivalist.random();
+				case "EdoRevivalist":
+					return setup.ArcologyNamesEdoRevivalist.random();
+				case "ArabianRevivalist":
+					return setup.ArcologyNamesArabianRevivalist.random();
+				case "ChineseRevivalist":
+					return setup.ArcologyNamesChineseRevivalist.random();
+				case "Repopulationist":
+					return setup.ArcologyNamesRepopulationist.random();
+				case "Eugenics":
+					return setup.ArcologyNamesEugenics.random();
+				case "HedonisticDecadence":
+					return setup.ArcologyNamesHedonisticDecadence.random();
+				case "IntellectualDependency":
+					return setup.ArcologyNamesIntellectualDependency.random();
+				case "SlaveProfessionalism":
+					return setup.ArcologyNamesSlaveProfessionalism.random();
+				case "PetiteAdmiration":
+					return setup.ArcologyNamesPetiteAdmiration.random();
+				case "StatuesqueGlorification":
+					return setup.ArcologyNamesStatuesqueGlorification.random();
+				default:
+					return "Arcology X-4";
+			}
+		}
+
+		function getLanguage() {
+			switch (arcology.fs) {
+				case "RomanRevivalist":
+					return "Latin";
+				case "AztecRevivalist":
+					return "Nahuatl";
+				case "EgyptianRevivalist":
+					return "Ancient Egyptian";
+				case "EdoRevivalist":
+					return "Japanese";
+				case "ArabianRevivalist":
+					return "Arabic";
+				case "ChineseRevivalist":
+					return "Chinese";
+				default:
+					switch (arcology.terrain) {
+						case "South America":
+							return "Spanish";
+						case "Brazil":
+							return "Portuguese";
+						case "the Middle East":
+						case "Africa": /* shouldn't that be portuguese, spanish or something? */
+							return "Arabic";
+						case "Asia":
+							return "Chinese";
+						case "Europe":
+							return "German";
+						case "Japan":
+							return "Japanese";
+						case "oceanic":
+						case "North America":
+						case "Australia":
+						default:
+							return "English";
+					}
+			}
+		}
+	}
+};
diff --git a/src/events/intro/initNationalities.tw b/src/events/intro/initNationalities.tw
index 31bd50290d3cfff7f8f853eaf7e312a0343f004b..d5307a26a0cd6bf99fe767b43de7a70fe51d4177 100644
--- a/src/events/intro/initNationalities.tw
+++ b/src/events/intro/initNationalities.tw
@@ -1,6 +1,10 @@
 :: init Nationalities [silently]
 
-<<set $building = App.Arcology.defaultBuilding($terrain)>>
+<<if $targetArcology !== "New">>
+	<<set $building = $targetArcology.building, delete $targetArcology.building>>
+<<else>>
+	<<set $building = App.Arcology.defaultBuilding($terrain)>>
+<</if>>
 <<set _sellable = $building.findCells(cell => cell.canBeSold())>>
 <<set _random12 = jsRandomMany(_sellable, 12)>>
 <<run _random12.forEach(cell => {cell.owner = 0})>>
@@ -172,12 +176,12 @@
 		<<set _newArcology.direction = 0>>
 		<<set _newArcology.name = "Arcology X-4">>
 		<<set _newArcology.FSSupremacistDecoration = 20, _newArcology.FSSubjugationistDecoration = 20, _newArcology.FSGenderRadicalistDecoration = 20, _newArcology.FSGenderFundamentalistDecoration = 20, _newArcology.FSPaternalistDecoration = 20, _newArcology.FSDegradationistDecoration = 20, _newArcology.FSBodyPuristDecoration = 20, _newArcology.FSTransformationFetishistDecoration = 20, _newArcology.FSYouthPreferentialistDecoration = 20, _newArcology.FSMaturityPreferentialistDecoration = 20, _newArcology.FSSlimnessEnthusiastDecoration = 20, _newArcology.FSAssetExpansionistDecoration = 20, _newArcology.FSPastoralistDecoration = 20, _newArcology.FSPhysicalIdealistDecoration = 20, _newArcology.FSChattelReligionistDecoration = 20, _newArcology.FSRomanRevivalistDecoration = 20, _newArcology.FSAztecRevivalistDecoration = 20, _newArcology.FSEgyptianRevivalistDecoration = 20, _newArcology.FSEdoRevivalistDecoration = 20, _newArcology.FSArabianRevivalistDecoration = 20, _newArcology.FSChineseRevivalistDecoration = 20, _newArcology.FSRepopulationFocusDecoration = 20, _newArcology.FSRestartDecoration = 20, _newArcology.FSHedonisticDecadenceDecoration = 20, _newArcology.FSIntellectualDependencyDecoration = 20, _newArcology.FSSlaveProfessionalismDecoration = 20, _newArcology.FSPetiteAdmirationDecoration = 20, _newArcology.FSStatuesqueGlorificationDecoration = 20, _newArcology.FSCummunismDecoration = 20, _newArcology.FSIncestFetishistDecoration = 20>>
-		<<if $targetArcology.type != "New">>
+		<<if $targetArcology.fs != "New">>
 			<<set $FSAnnounced = 1>>
 			<<set $FSGotRepCredits = 1>>
 			<<set _newArcology.name = $targetArcology.name, _newArcology.prosperity = $targetArcology.prosperity, $ACitizens += $targetArcology.citizens*500>>
 			<<set _decoration = $targetArcology.FSProgress + 10>>
-			<<switch $targetArcology.type>>
+			<<switch $targetArcology.fs>>
 			<<case "Supremacist">>
 				<<set _newArcology.FSSupremacist = $targetArcology.FSProgress, _newArcology.FSSupremacistDecoration = _decoration, _newArcology.FSSupremacistRace = $targetArcology.race>>
 			<<case "Subjugationist">>
@@ -372,19 +376,19 @@
 	<<if ndef $customVariety>>
 		<<set $nationalities = arr2obj(setup.baseNationalities)>>
 	<</if>>
-	<<if $targetArcology.type != "Supremacist">>
+	<<if $targetArcology.fs != "Supremacist">>
 		<<set $arcologies[0].FSSupremacistRace = "white">>
 	<</if>>
-	<<if $targetArcology.type != "Subjugationist">>
+	<<if $targetArcology.fs != "Subjugationist">>
 		<<set $arcologies[0].FSSubjugationistRace = "middle eastern">>
 	<</if>>
 <<else>>
 	<<switch $continent>>
 	<<case "North America">>
-		<<if $targetArcology.type != "Supremacist">>
+		<<if $targetArcology.fs != "Supremacist">>
 			<<set $arcologies[0].FSSupremacistRace = "white">>
 		<</if>>
-		<<if $targetArcology.type != "Subjugationist">>
+		<<if $targetArcology.fs != "Subjugationist">>
 			<<set $arcologies[0].FSSubjugationistRace = "black">>
 		<</if>>
 		<<if ndef $customVariety>> /* If non-custom variety, adds regional $nationalities */
@@ -418,10 +422,10 @@
 			<<set hashPush($nationalities, "Vincentian")>>
 		<</if>>
 	<<case "South America">>
-		<<if $targetArcology.type != "Supremacist">>
+		<<if $targetArcology.fs != "Supremacist">>
 			<<set $arcologies[0].FSSupremacistRace = "latina">>
 		<</if>>
-		<<if $targetArcology.type != "Subjugationist">>
+		<<if $targetArcology.fs != "Subjugationist">>
 			<<set $arcologies[0].FSSubjugationistRace = "black">>
 		<</if>>
 		<<if ndef $customVariety>>
@@ -440,10 +444,10 @@
 			<<set hashPush($nationalities, "Venezuelan", "Venezuelan", "Venezuelan")>>
 		<</if>>
 	<<case "Brazil">>
-		<<if $targetArcology.type != "Supremacist">>
+		<<if $targetArcology.fs != "Supremacist">>
 			<<set $arcologies[0].FSSupremacistRace = "white">>
 		<</if>>
-		<<if $targetArcology.type != "Subjugationist">>
+		<<if $targetArcology.fs != "Subjugationist">>
 			<<set $arcologies[0].FSSubjugationistRace = "black">>
 		<</if>>
 		<<if ndef $customVariety>>
@@ -462,10 +466,10 @@
 			<<set hashPush($nationalities, "Venezuelan", "Venezuelan", "Venezuelan")>>
 		<</if>>
 	<<case "the Middle East">>
-		<<if $targetArcology.type != "Supremacist">>
+		<<if $targetArcology.fs != "Supremacist">>
 			<<set $arcologies[0].FSSupremacistRace = "middle eastern">>
 		<</if>>
-		<<if $targetArcology.type != "Subjugationist">>
+		<<if $targetArcology.fs != "Subjugationist">>
 			<<set $arcologies[0].FSSubjugationistRace = "asian">>
 		<</if>>
 		<<if ndef $customVariety>>
@@ -493,10 +497,10 @@
 			<<set hashPush($nationalities, "Yemeni", "Yemeni")>>
 		<</if>>
 	<<case "Africa">>
-		<<if $targetArcology.type != "Supremacist">>
+		<<if $targetArcology.fs != "Supremacist">>
 			<<set $arcologies[0].FSSupremacistRace = "black">>
 		<</if>>
-		<<if $targetArcology.type != "Subjugationist">>
+		<<if $targetArcology.fs != "Subjugationist">>
 			<<set $arcologies[0].FSSubjugationistRace = "white">>
 		<</if>>
 		<<if ndef $customVariety>>
@@ -556,10 +560,10 @@
 			<<set hashPush($nationalities, "Zimbabwean", "Zimbabwean")>>
 		<</if>>
 	<<case "Asia">>
-		<<if $targetArcology.type != "Supremacist">>
+		<<if $targetArcology.fs != "Supremacist">>
 			<<set $arcologies[0].FSSupremacistRace = "asian">>
 		<</if>>
-		<<if $targetArcology.type != "Subjugationist">>
+		<<if $targetArcology.fs != "Subjugationist">>
 			<<set $arcologies[0].FSSubjugationistRace = "indo-aryan">>
 		<</if>>
 		<<if ndef $customVariety>>
@@ -594,10 +598,10 @@
 			<<set hashPush($nationalities, "Vietnamese", "Vietnamese", "Vietnamese")>>
 		<</if>>
 	<<case "Europe">>
-		<<if $targetArcology.type != "Supremacist">>
+		<<if $targetArcology.fs != "Supremacist">>
 			<<set $arcologies[0].FSSupremacistRace = "white">>
 		<</if>>
-		<<if $targetArcology.type != "Subjugationist">>
+		<<if $targetArcology.fs != "Subjugationist">>
 			<<set $arcologies[0].FSSubjugationistRace = "middle eastern">>
 		<</if>>
 		<<if ndef $customVariety>>
@@ -650,10 +654,10 @@
 			<<set hashPush($nationalities, "Vatican")>>
 		<</if>>
 	<<case "Australia">>
-		<<if $targetArcology.type != "Supremacist">>
+		<<if $targetArcology.fs != "Supremacist">>
 			<<set $arcologies[0].FSSupremacistRace = "white">>
 		<</if>>
-		<<if $targetArcology.type != "Subjugationist">>
+		<<if $targetArcology.fs != "Subjugationist">>
 			<<set $arcologies[0].FSSubjugationistRace = "asian">>
 		<</if>>
 		<<if ndef $customVariety>>
@@ -678,10 +682,10 @@
 			<<set hashPush($nationalities, "Tuvaluan")>>
 		<</if>>
 	<<case "Japan">>
-		<<if $targetArcology.type != "Supremacist">>
+		<<if $targetArcology.fs != "Supremacist">>
 			<<set $arcologies[0].FSSupremacistRace = "asian">>
 		<</if>>
-		<<if $targetArcology.type != "Subjugationist">>
+		<<if $targetArcology.fs != "Subjugationist">>
 			<<set $arcologies[0].FSSubjugationistRace = "asian">>
 		<</if>>
 		<<if ndef $customVariety>>
diff --git a/src/events/intro/introSummary.tw b/src/events/intro/introSummary.tw
index 99e33316b8f8fabb12cd6c4c2a3f9202a25d5165..f6b0ade2fd351ec6ad5a26e0c86e383b30fb5811 100644
--- a/src/events/intro/introSummary.tw
+++ b/src/events/intro/introSummary.tw
@@ -489,7 +489,7 @@ All the things you need to run your arcology are getting more expensive
 		City.
 <</options>>
 
-<<if $targetArcology.type == "New">>
+<<if $targetArcology.fs == "New">>
 	<<options $terrain>>
 		The Free City is located on ''$terrain'' terrain.
 		<<option "urban" "Urban">>
@@ -530,7 +530,7 @@ All the things you need to run your arcology are getting more expensive
 	<</if>>
 <</if>>
 
-<<if !["ArabianRevivalist", "AztecRevivalist", "ChineseRevivalist", "EdoRevivalist", "EgyptianRevivalist", "RomanRevivalist"].includes($targetArcology.type)>>
+<<if !["ArabianRevivalist", "AztecRevivalist", "ChineseRevivalist", "EdoRevivalist", "EgyptianRevivalist", "RomanRevivalist"].includes($targetArcology.fs)>>
 	<<options $language>>
 		The lingua franca of your arcology is:
 		<<option "English" "English">>
diff --git a/src/gui/css/mainStyleSheet.css b/src/gui/css/mainStyleSheet.css
index dc0e69c9be39a271a1a2a5f795cb1e9d7110c371..eef848945fb6c02aaf310f6a5f449d4ce59a625d 100644
--- a/src/gui/css/mainStyleSheet.css
+++ b/src/gui/css/mainStyleSheet.css
@@ -195,7 +195,7 @@ span.zeroButton > a:hover { text-decoration: none; }
 .gold, .gold a, .trust.dec, .trust.dec a, .trust.frightened, .trust.frightened a { color: gold }
 .goldenrod, .goldenrod a, .trust.terrified, .trust.terrified a { color: goldenrod }
 .gray, .gray a { color: gray }
-.green, .green a, .reputation.inc, .reputation.inc a, .improvement, .improvement a, .flaw.break, .flaw.break a, .skill.inc, .skill.inc a { color: green }
+.green, .green a, .reputation.inc, .reputation.inc a, .improvement, .improvement a, .flaw.break, .flaw.break a, .skill.inc, .skill.inc a, .positive, .positive a { color: green }
 .hotpink, .hotpink a, .devotion.inc, .devotion.inc a, .devotion.accept, .devotion.accept a { color: hotpink }
 .lawngreen, .lawngreen a { color: lawngreen }
 .lightblue, .lightblue a { color: lightblue }
diff --git a/src/npc/acquisition.tw b/src/npc/acquisition.tw
index 1ee89d8d51523be72bf93696c396c7d2bf68f0ee..40d200935039d412f89836d562c1ebcfa6e805fb 100644
--- a/src/npc/acquisition.tw
+++ b/src/npc/acquisition.tw
@@ -222,12 +222,12 @@ The previous owner seems to have left in something of a hurry.
 	<<include [[Cheatmode Database]]>>
 <<elseif $saveImported == 1>>
 	Since it took some time for you to ensure that your existing stable of slaves were safely moved to $arcologies[0].name, the previous owner had the time to get most of their things away.
-<<elseif ($targetArcology.type != "New") && ($targetArcology.type != "Multiculturalist")>>
+<<elseif ($targetArcology.fs != "New") && ($targetArcology.fs != "Multiculturalist")>>
 	<<for $j = 0; $j < 5; $j++>>
 		<<if _valueOwed - _valueGiven <= 5000>>
 			<<break>>
 		<</if>>
-		<<switch $targetArcology.type>>
+		<<switch $targetArcology.fs>>
 		<<case "Supremacist">>
 			<<set $oneTimeDisableDisability = 1>>
 			<<set $fixedRace = $arcologies[0].FSSupremacistRace>><<set $activeSlave = GenerateNewSlave()>>
@@ -689,7 +689,7 @@ The previous owner seems to have left in something of a hurry.
 		<</switch>>
 		<<set $activeSlave.origin = "You acquired $him along with the arcology.", $activeSlave.career = "a slave">>
 		<<set _slaveCost = slaveCost($activeSlave)>>
-		<<if ["AztecRevivalist", "ChineseRevivalist", "Eugenics", "SlaveProfessionalism"].includes($targetArcology.type)>>
+		<<if ["AztecRevivalist", "ChineseRevivalist", "Eugenics", "SlaveProfessionalism"].includes($targetArcology.fs)>>
 			<<set _valueGiven += _slaveCost*4>>
 		<<else>>
 			<<set _valueGiven += _slaveCost>>
@@ -697,7 +697,7 @@ The previous owner seems to have left in something of a hurry.
 		<<run newSlave($activeSlave)>>
 	<</for>>
 	<<setLocalPronouns $activeSlave>>
-	<<switch $targetArcology.type>>
+	<<switch $targetArcology.fs>>
 	<<case "Supremacist">>
 		They kept a personal stable of fearful $arcologies[0].FSSupremacistRace sex slaves, but their sexual training is incomplete. Several of them are still here.
 	<<case "Subjugationist">>
@@ -758,7 +758,7 @@ The previous owner seems to have left in something of a hurry.
 		ERROR: bad arcology type
 	<</switch>>
 <<else>>
-	They could not get all of their personal effects away. Since they <<if $targetArcology.type == "Multiculturalist">>tried to sample different kinds of sexual slavery<<else>>did not have the time in control of the arcology to develop a specific stable of sex slaves<</if>>, their slaves were quite varied.
+	They could not get all of their personal effects away. Since they <<if $targetArcology.fs == "Multiculturalist">>tried to sample different kinds of sexual slavery<<else>>did not have the time in control of the arcology to develop a specific stable of sex slaves<</if>>, their slaves were quite varied.
 	<<for $j = 0; $j < $heroSlaves.length; $j++>>
 		<<if _valueOwed - _valueGiven <= 5000>>
 			<<break>>
diff --git a/src/npc/takeoverTarget.tw b/src/npc/takeoverTarget.tw
index 52a2a68166a495f88cc3e602101f7406276e7241..231ec44ca006e908742433560d40932fbc75bb2b 100644
--- a/src/npc/takeoverTarget.tw
+++ b/src/npc/takeoverTarget.tw
@@ -33,217 +33,14 @@
 	</span>
 </p>
 
-
-[[A newly constructed arcology|Terrain Intro][$targetArcology.type = "New"]]
+<div class="card">
+[[A newly constructed arcology|Terrain Intro][$targetArcology.fs = "New"]]
 <div class="indent note">
 	With many new arcologies being constructed, you will be able to select which area of the world and type of Free City you'd like your target arcology to be located in.
 </div>
 <div class="indent note">
 	Recommended for new players.
 </div>
-<hr style="margin:0">
-<<set _arcologyTypes = ["ArabianRevivalist", "AssetExpansionist", "AztecRevivalist", "BodyPurist", "ChattelReligionist", "ChineseRevivalist", "EdoRevivalist", "EgyptianRevivalist", "Eugenics", "HedonisticDecadence", "IntellectualDependency", "MaturityPreferentialist", "Multiculturalist", "Pastoralist", "Paternalist", "PetiteAdmiration", "PhysicalIdealist", "Repopulationist", "RomanRevivalist", "SlaveProfessionalism", "SlimnessEnthusiast", "StatuesqueGlorification", "Subjugationist", "Supremacist", "TransformationFetishist", "YouthPreferentialist"]>>
-<<if $seeDicks != 0>><<set _arcologyTypes.push("GenderRadicalist")>><</if>>
-<<if $seeDicks != 100>><<set _arcologyTypes.push("GenderFundamentalist")>><</if>>
-<<if $seeExtreme != 0>><<set _arcologyTypes.push("Degradationist")>><</if>>
-<<set _terrainTypes = ["marine", "marine", "oceanic", "ravine", "rural", "rural", "rural", "urban", "urban"]>>
-<<set _continents = ["Africa", "Asia", "Asia", "Australia", "Europe", "Europe", "Japan", "North America", "North America", "South America", "the Middle East"]>>
-<<set _races = ["amerindian", "asian", "black", "indo-aryan", "latina", "malay", "middle eastern", "mixed race", "pacific islander", "semitic", "southern european", "white"]>>
-<<set _targetArcologies = []>>
-<<set _targets = 4>>
-<<if $PC.career == "arcology owner">><<set _targets += 2>><</if>>
-<<for $i = 0; $i < _targets; $i++>>
-	<<set $targetArcology = {}>>
-	<<set $targetArcology.type = _arcologyTypes.pluck()>>
-	<<switch $targetArcology.type>>
-	<<case "Supremacist">>
-		<<set $targetArcology.race = _races.random()>>
-		<<switch $targetArcology.race>>
-		<<case "white">>
-			<<set $targetArcology.name = setup.ArcologyNamesSupremacistWhite.random()>>
-		<<case "asian">>
-			<<set $targetArcology.name = setup.ArcologyNamesSupremacistAsian.random()>>
-		<<case "latina">>
-			<<set $targetArcology.name = setup.ArcologyNamesSupremacistLatina.random()>>
-		<<case "middle eastern">>
-			<<set $targetArcology.name = setup.ArcologyNamesSupremacistMiddleEastern.random()>>
-		<<case "black">>
-			<<set $targetArcology.name = setup.ArcologyNamesSupremacistBlack.random()>>
-		<<case "indo-aryan">>
-			<<set $targetArcology.name = setup.ArcologyNamesSupremacistIndoAryan.random()>>
-		<<case "pacific islander">>
-			<<set $targetArcology.name = setup.ArcologyNamesSupremacistPacificIslander.random()>>
-		<<case "malay">>
-			<<set $targetArcology.name = setup.ArcologyNamesSupremacistMalay.random()>>
-		<<case "amerindian">>
-			<<set $targetArcology.name = setup.ArcologyNamesSupremacistAmerindian.random()>>
-		<<case "southern european">>
-			<<set $targetArcology.name = setup.ArcologyNamesSupremacistSouthernEuropean.random()>>
-		<<case "semitic">>
-			<<set $targetArcology.name = setup.ArcologyNamesSupremacistSemitic.random()>>
-		<<default>>
-			<<set $targetArcology.name = setup.ArcologyNamesSupremacistMixedRace.random()>>
-		<</switch>>
-	<<case "Subjugationist">>
-		<<set $targetArcology.race = _races.random()>>
-		<<switch $targetArcology.race>>
-		<<case "white">>
-			<<set $targetArcology.name = setup.ArcologyNamesSubjugationistWhite.random()>>
-		<<case "asian">>
-			<<set $targetArcology.name = setup.ArcologyNamesSubjugationistAsian.random()>>
-		<<case "latina">>
-			<<set $targetArcology.name = setup.ArcologyNamesSubjugationistLatina.random()>>
-		<<case "middle eastern">>
-			<<set $targetArcology.name = setup.ArcologyNamesSubjugationistMiddleEastern.random()>>
-		<<case "black">>
-			<<set $targetArcology.name = setup.ArcologyNamesSubjugationistBlack.random()>>
-		<<case "indo-aryan">>
-			<<set $targetArcology.name = setup.ArcologyNamesSubjugationistIndoAryan.random()>>
-		<<case "pacific islander">>
-			<<set $targetArcology.name = setup.ArcologyNamesSubjugationistPacificIslander.random()>>
-		<<case "malay">>
-			<<set $targetArcology.name = setup.ArcologyNamesSubjugationistMalay.random()>>
-		<<case "amerindian">>
-			<<set $targetArcology.name = setup.ArcologyNamesSubjugationistAmerindian.random()>>
-		<<case "southern european">>
-			<<set $targetArcology.name = setup.ArcologyNamesSubjugationistSouthernEuropean.random()>>
-		<<case "semitic">>
-			<<set $targetArcology.name = setup.ArcologyNamesSubjugationistSemitic.random()>>\
-		<<default>>
-			<<set $targetArcology.name = setup.ArcologyNamesSubjugationistMixedRace.random()>>
-		<</switch>>
-	<<case "GenderRadicalist">><<set $targetArcology.name = setup.ArcologyNamesGenderRadicalist.random()>>
-	<<case "GenderFundamentalist">><<set $targetArcology.name = setup.ArcologyNamesGenderFundamentalist.random()>>
-	<<case "Paternalist">><<set $targetArcology.name = setup.ArcologyNamesPaternalist.random()>>
-	<<case "Degradationist">><<set $targetArcology.name = setup.ArcologyNamesDegradationist.random()>>
-	<<case "AssetExpansionist">><<set $targetArcology.name = setup.ArcologyNamesAssetExpansionist.random()>>
-	<<case "SlimnessEnthusiast">><<set $targetArcology.name = setup.ArcologyNamesSlimnessEnthusiast.random()>>
-	<<case "TransformationFetishist">><<set $targetArcology.name = setup.ArcologyNamesTransformationFetishist.random()>>
-	<<case "BodyPurist">><<set $targetArcology.name = setup.ArcologyNamesBodyPurist.random()>>
-	<<case "MaturityPreferentialist">><<set $targetArcology.name = setup.ArcologyNamesMaturityPreferentialist.random()>>
-	<<case "YouthPreferentialist">>
-		<<if $pedo_mode == 1 || $minimumSlaveAge < 6>>
-			<<set $targetArcology.name = setup.ArcologyNamesYouthPreferentialistLow.random()>>
-		<<elseif $minimumSlaveAge < 14>>
-			<<set $targetArcology.name = either(setup.ArcologyNamesYouthPreferentialist, setup.ArcologyNamesYouthPreferentialistLow)>>
-		<<else>>
-			<<set $targetArcology.name = setup.ArcologyNamesYouthPreferentialist.random()>>
-		<</if>>
-	<<case "Pastoralist">><<set $targetArcology.name = setup.ArcologyNamesPastoralist.random()>>
-	<<case "PhysicalIdealist">><<set $targetArcology.name = setup.ArcologyNamesPhysicalIdealist.random()>>
-	<<case "ChattelReligionist">><<set $targetArcology.name = setup.ArcologyNamesChattelReligionist.random()>>
-	<<case "RomanRevivalist">><<set $targetArcology.name = setup.ArcologyNamesRomanRevivalist.random()>>
-	<<case "AztecRevivalist">><<set $targetArcology.name = setup.ArcologyNamesAztecRevivalist.random()>>
-	<<case "EgyptianRevivalist">><<set $targetArcology.name = setup.ArcologyNamesEgyptianRevivalist.random()>>
-	<<case "EdoRevivalist">><<set $targetArcology.name = setup.ArcologyNamesEdoRevivalist.random()>>
-	<<case "ArabianRevivalist">><<set $targetArcology.name = setup.ArcologyNamesArabianRevivalist.random()>>
-	<<case "ChineseRevivalist">><<set $targetArcology.name = setup.ArcologyNamesChineseRevivalist.random()>>
-	<<case "Repopulationist">><<set $targetArcology.name = setup.ArcologyNamesRepopulationist.random()>>
-	<<case "Eugenics">><<set $targetArcology.name = setup.ArcologyNamesEugenics.random()>>
-	<<case "HedonisticDecadence">><<set $targetArcology.name = setup.ArcologyNamesHedonisticDecadence.random()>>
-	<<case "IntellectualDependency">><<set $targetArcology.name = setup.ArcologyNamesIntellectualDependency.random()>>
-	<<case "SlaveProfessionalism">><<set $targetArcology.name = setup.ArcologyNamesSlaveProfessionalism.random()>>
-	<<case "PetiteAdmiration">><<set $targetArcology.name = setup.ArcologyNamesPetiteAdmiration.random()>>
-	<<case "StatuesqueGlorification">><<set $targetArcology.name = setup.ArcologyNamesStatuesqueGlorification.random()>>
-	<<default>><<set $targetArcology.name = "Arcology X-4">>
-	<</switch>>
-	<<set $targetArcology.FSProgress = either(10,30,50)>>
-	<<set $targetArcology.prosperity = either(40,50,60)>>
-	<<set $targetArcology.citizens = random(-1,1)>>
-	<<set $targetArcology.terrain = _terrainTypes.random()>>
-	<<set $targetArcology.continent = _continents.random()>>
-	<<set _targetArcologies.push($targetArcology)>>
-<</for>>
+</div>
 
-<<for $i = 0; $i < _targetArcologies.length; $i++>>
-	<<print "[[_targetArcologies[$i].name|Terrain Intro][$targetArcology = _targetArcologies[" + $i + "]]]">> is an established arcology located in a Free City
-	<<if _targetArcologies[$i].terrain == "urban">>
-		carved out of an urban area of _targetArcologies[$i].continent.
-	<<elseif _targetArcologies[$i].terrain == "rural">>
-		built in a rural area of _targetArcologies[$i].continent.
-	<<elseif _targetArcologies[$i].terrain == "marine">>
-		constructed just offshore of _targetArcologies[$i].continent.
-	<<elseif _targetArcologies[$i].terrain == "ravine">>
-		constructed in a large canyon of _targetArcologies[$i].continent.
-	<<else>>
-		in the middle of the ocean.
-	<</if>>
-	<<if _targetArcologies[$i].prosperity >= 60>>
-		<div class="indent">
-			It is unusually prosperous for a vulnerable arcology.
-		</div>
-	<<elseif _targetArcologies[$i].prosperity <= 40>>
-		<div class="indent">
-			It has little economic prosperity and is vulnerable.
-		</div>
-	<</if>>
-	<<if _targetArcologies[$i].citizens > 0>>
-		<div class="indent">
-			It has an unusually high ratio of citizens to sex slaves, increasing demand for sexual services.
-		</div>
-	<<elseif _targetArcologies[$i].citizens < 0>>
-		<div class="indent">
-			It has an unusually low ratio of citizens to sex slaves, reducing demand for sexual services.
-		</div>
-	<</if>>
-	<div class="indent">
-		Its society
-		<<if _targetArcologies[$i].FSProgress >= 50>>
-			has advanced towards
-		<<elseif _targetArcologies[$i].FSProgress >= 30>>
-			has devoted resources to
-		<<else>>
-			has just begun to adopt
-		<</if>>
-		<<switch _targetArcologies[$i].type>>
-		<<case "Supremacist">>@@.orange;Supremacy of the _targetArcologies[$i].race<<if _targetArcologies[$i].race != "mixed race">> race<</if>>.@@
-		<<case "Subjugationist">>@@.orange;Subjugation of the _targetArcologies[$i].race<<if _targetArcologies[$i].race != "mixed race">> race<</if>>.@@
-		<<case "GenderRadicalist">>@@.orange;Gender Radicalism,@@ a movement that supports feminization of slavegirls with dicks.
-		<<case "GenderFundamentalist">>@@.orange;Gender Fundamentalism,@@ a reaction to modern libertinism that seeks to reinforce gender roles.
-		<<case "Paternalist">>@@.orange;Paternalism,@@ an optimistic strain of slavery that protects and improves slaves.
-		<<case "Degradationist">>@@.orange;Degradationism,@@ an extreme branch of modern slavery that treats slaves as subhuman.
-		<<case "AssetExpansionist">>@@.orange;Asset Expansionism,@@ a societal preoccupation with expansion of body parts, especially breasts.
-		<<case "SlimnessEnthusiast">>@@.orange;Slimness Enthusiasm,@@ an aesthetic movement that fetishizes the lithe female form.
-		<<case "TransformationFetishist">>@@.orange;Transformation Fetishism,@@ a focus on implants and other kinds of surgical alteration.
-		<<case "BodyPurist">>@@.orange;Body Purism,@@ a reaction to extreme surgical fetishism that prefers bodies grown biologically.
-		<<case "MaturityPreferentialist">>@@.orange;Maturity Preferentialism,@@ an appetite for mature slaves based on MILF fetishism.
-		<<case "YouthPreferentialist">>@@.orange;Youth Preferentialism,@@ which focuses on youth and virginity in slaves.
-		<<case "Pastoralist">>@@.orange;Pastoralism,@@ an appetite for products of the human body, especially milk.
-		<<case "PhysicalIdealist">>@@.orange;Physical Idealism,@@ an aspirational movement which fetishizes muscle and physical fitness.
-		<<case "ChattelReligionist">>@@.orange;Chattel Religionism,@@ a religious revival in the context of modern slavery.
-		<<case "RomanRevivalist">>@@.orange;Roman Revivalism,@@ which seeks to recreate the glory that was ancient Rome.
-			<div class="indent">
-				It has an established lingua franca: Latin.
-			</div>
-		<<case "AztecRevivalist">>@@.orange;Aztec Revivalism,@@ which aspires to reach the heights of the Aztec Empire at it's peak.
-			<div class="indent">
-				It has an established lingua franca: Nahuatl.
-			</div>
-		<<case "EgyptianRevivalist">>@@.orange;Egyptian Revivalism,@@ a movement to rebuild the monuments and greatness of ancient Egypt.
-			<div class="indent">
-				It has an established lingua franca: Ancient Egyptian.
-			</div>
-		<<case "EdoRevivalist">>@@.orange;Edo Revivalism,@@ an insular movement with a focus on the cultural superiority of old Japan.
-			<div class="indent">
-				It has an established lingua franca: Japanese.
-			</div>
-		<<case "ArabianRevivalist">>@@.orange;Arabian Revivalism,@@ a melding of Arabian history and recent mythology of the Near East.
-			<div class="indent">
-				It has an established lingua franca: Arabic.
-			</div>
-		<<case "ChineseRevivalist">>@@.orange;Chinese Revivalism,@@ which modernizes the assumed superiority of the Middle Kingdom.
-			<div class="indent">
-				It has an established lingua franca: Chinese.
-			</div>
-		<<case "Repopulationist">>@@.orange;Repopulationism,@@ the belief that the key to humanity's survival is a child in every fertile womb.
-		<<case "Eugenics">>@@.orange;Eugenics,@@ the belief that the world's failings were caused by rampant breeding of the inferior, and as such, only society's best should reproduce.
-		<<case "HedonisticDecadence">>@@.orange;Decadent Hedonism,@@ a movement to embody life's pleasures, particularly eating and sex.
-		<<case "IntellectualDependency">>@@.orange;Intellectual Dependency,@@ an appetite for horny, stupid slaves based on bimbo fetishism.
-		<<case "SlaveProfessionalism">>@@.orange;Slave Professionalism,@@ a strain of slavery that seeks smart, skilled, elegant slaves to hone to perfection.
-		<<case "PetiteAdmiration">>@@.orange;Petite Admiration,@@ which prefers its slaves to stand heads and shoulders shorter than their masters.
-		<<case "StatuesqueGlorification">>@@.orange;Statuesque Glorification,@@ an obsession, both sexual and otherwise, over height.
-		<<default>>@@.orange;Multiculturalism,@@ a celebration of the total liberty that was the original purpose of the Free Cities.
-		<</switch>>
-	</div>
-	<hr style="margin:0">
-<</for>>
\ No newline at end of file
+<<print App.UI.DOM.includeDOM(App.Intro.generateEstablishedArcologies(), "list")>>