From cdcd1d44f4bee4afac8e8119819e2e369592f1f0 Mon Sep 17 00:00:00 2001
From: Svornost <11434-svornost@users.noreply.gitgud.io>
Date: Sun, 13 Jun 2021 10:59:31 -0700
Subject: [PATCH] - Ensure presence of FSSubjugationistRace and
 FSSupremacistRace arcology member variables during BC. - Improve typechecking
 for races.

---
 js/003-data/miscData.js                       | 34 ++++++++++---------
 .../backwardsCompatibility/datatypeCleanup.js | 16 ++++++---
 2 files changed, 30 insertions(+), 20 deletions(-)

diff --git a/js/003-data/miscData.js b/js/003-data/miscData.js
index c64c7f7fa72..d07b7b4df15 100644
--- a/js/003-data/miscData.js
+++ b/js/003-data/miscData.js
@@ -143,25 +143,27 @@ App.Data.misc = {
 	/* equine: {type: "equine", normalOvaMin:1, normalOvaMax: 1, normalBirth: 48, minLiveBirth: 44, fetusWeek: [0, 4, 7, 9, 10, 12, 17, 21, 25, 34, 38, 48, 192, 99999], fetusSize: [0, 2.5, 3, 4, 6.3, 14, 17.7, 30, 61, 76.2, 92, 121, 235, 235], fetusRate: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] sizeType: 0} */
 
 	/**
-	 * @type {Map<string, string>}
+	 * @type {Map<FC.Race, string>}
 	 */
-	filterRacesBase: new Map([
-		["amerindian", "Amerindian"],
-		["asian", "Asian"],
-		["black", "Black"],
-		["indo-aryan", "Indo-Aryan"],
-		["latina", "Latina"],
-		["malay", "Malay"],
-		["middle eastern", "Middle Eastern"],
-		["mixed race", "Mixed Race"],
-		["pacific islander", "Pacific Islander"],
-		["semitic", "Semitic"],
-		["southern european", "Southern European"],
-		["white", "White"],
-	]),
+	filterRacesBase: (/** @returns {Map<FC.Race, string>} IIFE required to avoid type widening */ function() {
+		return new Map([
+			["amerindian", "Amerindian"],
+			["asian", "Asian"],
+			["black", "Black"],
+			["indo-aryan", "Indo-Aryan"],
+			["latina", "Latina"],
+			["malay", "Malay"],
+			["middle eastern", "Middle Eastern"],
+			["mixed race", "Mixed Race"],
+			["pacific islander", "Pacific Islander"],
+			["semitic", "Semitic"],
+			["southern european", "Southern European"],
+			["white", "White"],
+		]);
+	})(),
 
 	/**
-	 * @returns {Map<string, string>}
+	 * @returns {Map<FC.Race, string>}
 	 */
 	get filterRaces() {
 		const map = new Map(App.Data.misc.filterRacesBase);
diff --git a/src/data/backwardsCompatibility/datatypeCleanup.js b/src/data/backwardsCompatibility/datatypeCleanup.js
index ddafc409417..d9ad4953de8 100644
--- a/src/data/backwardsCompatibility/datatypeCleanup.js
+++ b/src/data/backwardsCompatibility/datatypeCleanup.js
@@ -2562,11 +2562,19 @@ App.Update.arcologiesDatatypeCleanup = function() {
 			}
 		}
 		const raceArray = Array.from(App.Data.misc.filterRaces.keys());
-		if (arc.FSSupremacist !== "unset" && !raceArray.includes(arc.FSSupremacistRace)) {
-			arc.FSSupremacistRace = raceArray.random();
+		if (!raceArray.includes(arc.FSSupremacistRace)) {
+			if (arc.FSSupremacist !== "unset") {
+				arc.FSSupremacistRace = raceArray.random();
+			} else {
+				arc.FSSupremacistRace = 0;
+			}
 		}
-		if (arc.FSSubjugationist !== "unset" && !raceArray.includes(arc.FSSubjugationistRace)) {
-			arc.FSSubjugationistRace = raceArray.random();
+		if (!raceArray.includes(arc.FSSubjugationistRace)) {
+			if (arc.FSSubjugationist !== "unset") {
+				arc.FSSubjugationistRace = raceArray.random();
+			} else {
+				arc.FSSubjugationistRace = 0;
+			}
 		}
 
 		arc.embargo = Number(arc.embargo) || 0;
-- 
GitLab