From 5b712207c9377441d29bda41880fb552c0c90c63 Mon Sep 17 00:00:00 2001
From: Arkerthan <arkerthan@gmail.com>
Date: Thu, 12 Mar 2020 20:12:14 +0100
Subject: [PATCH] convert established arc selection to DOM

---
 devTools/FC.d.ts                        |   2 +
 js/002-config/fc-js-init.js             |   1 +
 src/003-assets/CSS/arcologyBuilding.css |  12 +
 src/arcologyBuilding/base.js            |   6 +-
 src/arcologyBuilding/presets.js         |  34 ++-
 src/events/intro/arcologySelection.js   | 369 ++++++++++++++++++++++++
 src/events/intro/initNationalities.tw   |  50 ++--
 src/events/intro/introSummary.tw        |   4 +-
 src/gui/css/mainStyleSheet.css          |   2 +-
 src/npc/acquisition.tw                  |  10 +-
 src/npc/takeoverTarget.tw               | 211 +-------------
 11 files changed, 447 insertions(+), 254 deletions(-)
 create mode 100644 src/events/intro/arcologySelection.js

diff --git a/devTools/FC.d.ts b/devTools/FC.d.ts
index ba1ec2ce3a4..2530ad10fbd 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 c1925ba032b..bb8f1581c1b 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 c216bd5627c..741851cbffe 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 c33ece874ae..efc4405e9d8 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 a120e7e5af4..b29ec5306c4 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 00000000000..ee804bb61e3
--- /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 31bd50290d3..d5307a26a0c 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 99e33316b8f..f6b0ade2fd3 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 dc0e69c9be3..eef848945fb 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 1ee89d8d515..40d20093503 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 52a2a68166a..231ec44ca00 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")>>
-- 
GitLab