From fdad1ec039dec4bff0351c985ce152ba7d4fd567 Mon Sep 17 00:00:00 2001
From: Svornost <11434-svornost@users.noreply.gitgud.io>
Date: Sat, 15 May 2021 19:38:28 -0700
Subject: [PATCH] Facilities know whether they can get decorated or not.

---
 devTools/types/FC/data.d.ts                   |  1 +
 src/004-base/facility.js                      | 25 +++++++++++++------
 src/facilities/arcade/arcadeFramework.js      |  3 ++-
 src/facilities/armory/armoryFramework.js      |  3 ++-
 src/facilities/brothel/brothelFramework.js    |  3 ++-
 .../cellblock/cellblockFramework.js           |  4 +--
 src/facilities/clinic/clinicFramework.js      |  3 ++-
 src/facilities/club/clubFramework.js          |  3 ++-
 src/facilities/dairy/dairyFramework.js        |  3 ++-
 src/facilities/farmyard/farmyardFramework.js  |  3 ++-
 .../headGirlSuite/headGirlSuiteFramework.js   |  3 ++-
 .../incubator/incubatorFramework.js           |  3 ++-
 .../masterSuite/masterSuiteFramework.js       |  3 ++-
 src/facilities/nursery/nurseryFramework.js    |  3 ++-
 .../penthouse/penthouseFramework.js           |  3 ++-
 src/facilities/pit/pitFramework.js            |  3 ++-
 .../schoolroom/schoolroomFramework.js         |  3 ++-
 .../servantsQuartersFramework.js              |  3 ++-
 src/facilities/spa/spaFramework.js            |  3 ++-
 src/futureSocieties/fsDecoration.js           | 17 ++-----------
 src/futureSocieties/futureSociety.js          | 15 +++--------
 src/npc/agent/agentFramework.js               |  3 ++-
 22 files changed, 59 insertions(+), 54 deletions(-)

diff --git a/devTools/types/FC/data.d.ts b/devTools/types/FC/data.d.ts
index 48e6a8e94a6..eee7fbaa16b 100644
--- a/devTools/types/FC/data.d.ts
+++ b/devTools/types/FC/data.d.ts
@@ -60,6 +60,7 @@ declare namespace FC {
 			jobs: Record<string, JobDesc>;
 			defaultJob: string;
 			manager: ManagerJobDesc | null;
+			decorated: boolean;
 		}
 
 		namespace SlaveSummary {
diff --git a/src/004-base/facility.js b/src/004-base/facility.js
index e2c964b78b2..786753d5c49 100644
--- a/src/004-base/facility.js
+++ b/src/004-base/facility.js
@@ -11,6 +11,7 @@ App.Data.FacilityDesc = class {
 		this.defaultJob = "";
 		/** @type {FC.Data.ManagerJobDesc} */
 		this.manager = null;
+		this.decorated = false;
 	}
 };
 
@@ -384,23 +385,31 @@ App.Entity.Facilities.Facility = class {
 		return this.option("Upgrade" + name);
 	}
 
-	/**
-	 * How is this facility currently decorated?
+	/** Can this facility be decorated? */
+	get isDecorated() {
+		return this.desc.decorated;
+	}
+
+	/** How is this facility currently decorated?
 	 * @returns {FC.FutureSocietyDeco}
 	 */
 	get decoration() {
+		if (!this.isDecorated) {
+			return "standard";
+		}
 		return (typeof V[this.desc.baseName] === "object") ? V[this.desc.baseName].decoration : V[this.desc.baseName + "Decoration"];
 	}
 
-	/**
-	 * Configure facility decoration
+	/** Configure facility decoration
 	 * @param {FC.FutureSocietyDeco} val
 	 */
 	set decoration(val) {
-		if (typeof V[this.desc.baseName] === "object") {
-			V[this.desc.baseName].decoration = val;
-		} else {
-			V[this.desc.baseName + "Decoration"] = val;
+		if (this.isDecorated) {
+			if (typeof V[this.desc.baseName] === "object") {
+				V[this.desc.baseName].decoration = val;
+			} else {
+				V[this.desc.baseName + "Decoration"] = val;
+			}
 		}
 	}
 
diff --git a/src/facilities/arcade/arcadeFramework.js b/src/facilities/arcade/arcadeFramework.js
index 1aefdf6abbc..4093d972395 100644
--- a/src/facilities/arcade/arcadeFramework.js
+++ b/src/facilities/arcade/arcadeFramework.js
@@ -10,7 +10,8 @@ App.Data.Facilities.arcade = {
 		},
 	},
 	defaultJob: "assignee",
-	manager: null
+	manager: null,
+	decorated: true
 };
 
 App.Entity.Facilities.ArcadeJob = class extends App.Entity.Facilities.FacilitySingleJob {
diff --git a/src/facilities/armory/armoryFramework.js b/src/facilities/armory/armoryFramework.js
index c2a595acecf..9e8adb220d5 100644
--- a/src/facilities/armory/armoryFramework.js
+++ b/src/facilities/armory/armoryFramework.js
@@ -19,7 +19,8 @@ App.Data.Facilities.armory = {
 		shouldTalk: false,
 		shouldThink: true,
 		requiredDevotion: 51
-	}
+	},
+	decorated: false
 };
 
 App.Entity.facilities.armory = new App.Entity.Facilities.Facility(App.Data.Facilities.armory);
diff --git a/src/facilities/brothel/brothelFramework.js b/src/facilities/brothel/brothelFramework.js
index 1230827d0d5..394381ad87e 100644
--- a/src/facilities/brothel/brothelFramework.js
+++ b/src/facilities/brothel/brothelFramework.js
@@ -25,7 +25,8 @@ App.Data.Facilities.brothel = {
 		shouldTalk: true,
 		shouldThink: true,
 		requiredDevotion: 50
-	}
+	},
+	decorated: true
 };
 
 App.Entity.Facilities.BrothelJob = class extends App.Entity.Facilities.FacilitySingleJob {
diff --git a/src/facilities/cellblock/cellblockFramework.js b/src/facilities/cellblock/cellblockFramework.js
index 627cf6d9046..4c3edfa4186 100644
--- a/src/facilities/cellblock/cellblockFramework.js
+++ b/src/facilities/cellblock/cellblockFramework.js
@@ -25,8 +25,8 @@ App.Data.Facilities.cellblock = {
 		shouldTalk: false,
 		shouldThink: false,
 		requiredDevotion: 51
-
-	}
+	},
+	decorated: false
 };
 
 App.Entity.Facilities.CellblockJob = class extends App.Entity.Facilities.FacilitySingleJob {
diff --git a/src/facilities/clinic/clinicFramework.js b/src/facilities/clinic/clinicFramework.js
index 23dd472c60d..dbdde301ccf 100644
--- a/src/facilities/clinic/clinicFramework.js
+++ b/src/facilities/clinic/clinicFramework.js
@@ -25,7 +25,8 @@ App.Data.Facilities.clinic = {
 		shouldTalk: false,
 		shouldThink: true,
 		requiredDevotion: 51
-	}
+	},
+	decorated: true
 };
 
 App.Entity.Facilities.ClinicPatientJob = class extends App.Entity.Facilities.FacilitySingleJob {
diff --git a/src/facilities/club/clubFramework.js b/src/facilities/club/clubFramework.js
index e34db004dfc..19bb8d05833 100644
--- a/src/facilities/club/clubFramework.js
+++ b/src/facilities/club/clubFramework.js
@@ -25,7 +25,8 @@ App.Data.Facilities.club = {
 		shouldTalk: true,
 		shouldThink: true,
 		requiredDevotion: 51
-	}
+	},
+	decorated: true
 };
 
 App.Entity.Facilities.ClubSlutJob = class extends App.Entity.Facilities.FacilitySingleJob {
diff --git a/src/facilities/dairy/dairyFramework.js b/src/facilities/dairy/dairyFramework.js
index 36515b4243a..3c3b1db0d80 100644
--- a/src/facilities/dairy/dairyFramework.js
+++ b/src/facilities/dairy/dairyFramework.js
@@ -25,7 +25,8 @@ App.Data.Facilities.dairy = {
 		shouldTalk: false,
 		shouldThink: true,
 		requiredDevotion: 21
-	}
+	},
+	decorated: true
 };
 
 App.Entity.Facilities.DairyCowJob = class extends App.Entity.Facilities.FacilitySingleJob {
diff --git a/src/facilities/farmyard/farmyardFramework.js b/src/facilities/farmyard/farmyardFramework.js
index b79c787e6c8..399caad3194 100644
--- a/src/facilities/farmyard/farmyardFramework.js
+++ b/src/facilities/farmyard/farmyardFramework.js
@@ -25,7 +25,8 @@ App.Data.Facilities.farmyard = {
 		shouldTalk: false,
 		shouldThink: true,
 		requiredDevotion: 51
-	}
+	},
+	decorated: true
 };
 
 App.Entity.Facilities.FarmHandJob = class extends App.Entity.Facilities.FacilitySingleJob {
diff --git a/src/facilities/headGirlSuite/headGirlSuiteFramework.js b/src/facilities/headGirlSuite/headGirlSuiteFramework.js
index cfc1d1c3e3c..ae9d465fd8b 100644
--- a/src/facilities/headGirlSuite/headGirlSuiteFramework.js
+++ b/src/facilities/headGirlSuite/headGirlSuiteFramework.js
@@ -25,7 +25,8 @@ App.Data.Facilities.headGirlSuite = {
 		shouldTalk: true,
 		shouldThink: true,
 		requiredDevotion: 51
-	}
+	},
+	decorated: false
 };
 
 App.Entity.Facilities.HeadGirlSuite = class extends App.Entity.Facilities.SingleJobFacility {
diff --git a/src/facilities/incubator/incubatorFramework.js b/src/facilities/incubator/incubatorFramework.js
index 22d9d4bae20..dce45c6cd6c 100644
--- a/src/facilities/incubator/incubatorFramework.js
+++ b/src/facilities/incubator/incubatorFramework.js
@@ -10,7 +10,8 @@ App.Data.Facilities.incubator = {
 		}
 	},
 	defaultJob: "tank",
-	manager: null
+	manager: null,
+	decorated: false
 };
 
 App.Entity.Facilities.IncubatorTankJob = class extends App.Entity.Facilities.Job {
diff --git a/src/facilities/masterSuite/masterSuiteFramework.js b/src/facilities/masterSuite/masterSuiteFramework.js
index cdcc7d5f28a..83e67a77324 100644
--- a/src/facilities/masterSuite/masterSuiteFramework.js
+++ b/src/facilities/masterSuite/masterSuiteFramework.js
@@ -26,7 +26,8 @@ App.Data.Facilities.masterSuite = {
 		shouldTalk: false,
 		shouldThink: false,
 		requiredDevotion: 51
-	}
+	},
+	decorated: true
 };
 
 App.Entity.Facilities.MasterSuiteFuckToyJob = class extends App.Entity.Facilities.FacilitySingleJob {
diff --git a/src/facilities/nursery/nurseryFramework.js b/src/facilities/nursery/nurseryFramework.js
index daa83f65cee..94597390d5e 100644
--- a/src/facilities/nursery/nurseryFramework.js
+++ b/src/facilities/nursery/nurseryFramework.js
@@ -25,7 +25,8 @@ App.Data.Facilities.nursery = {
 		shouldTalk: true,
 		shouldThink: true,
 		requiredDevotion: 51
-	}
+	},
+	decorated: true
 };
 
 App.Entity.Facilities.NurseryNannyJob = class extends App.Entity.Facilities.FacilitySingleJob {
diff --git a/src/facilities/penthouse/penthouseFramework.js b/src/facilities/penthouse/penthouseFramework.js
index b7fa25023b6..de971b63f50 100644
--- a/src/facilities/penthouse/penthouseFramework.js
+++ b/src/facilities/penthouse/penthouseFramework.js
@@ -85,7 +85,8 @@ App.Data.Facilities.penthouse = {
 		shouldTalk: true,
 		shouldThink: true,
 		requiredDevotion: 51
-	}
+	},
+	decorated: false
 };
 
 App.Entity.Facilities.PenthouseJobs = {
diff --git a/src/facilities/pit/pitFramework.js b/src/facilities/pit/pitFramework.js
index 88c32bb2f2f..9401caf98b6 100644
--- a/src/facilities/pit/pitFramework.js
+++ b/src/facilities/pit/pitFramework.js
@@ -11,7 +11,8 @@ App.Data.Facilities.pit = {
 		}
 	},
 	defaultJob: "fighter",
-	manager: null
+	manager: null,
+	decorated: false
 };
 
 App.Entity.Facilities.PitFighterJob = class extends App.Entity.Facilities.FacilitySingleJob {
diff --git a/src/facilities/schoolroom/schoolroomFramework.js b/src/facilities/schoolroom/schoolroomFramework.js
index 2770017ce38..0c22037161a 100644
--- a/src/facilities/schoolroom/schoolroomFramework.js
+++ b/src/facilities/schoolroom/schoolroomFramework.js
@@ -25,7 +25,8 @@ App.Data.Facilities.schoolroom = {
 		shouldTalk: true,
 		shouldThink: true,
 		requiredDevotion: 51
-	}
+	},
+	decorated: true
 };
 
 App.Entity.Facilities.SchoolroomStudentJob = class extends App.Entity.Facilities.FacilitySingleJob {
diff --git a/src/facilities/servantsQuarters/servantsQuartersFramework.js b/src/facilities/servantsQuarters/servantsQuartersFramework.js
index e908720753a..48a10fbb637 100644
--- a/src/facilities/servantsQuarters/servantsQuartersFramework.js
+++ b/src/facilities/servantsQuarters/servantsQuartersFramework.js
@@ -25,7 +25,8 @@ App.Data.Facilities.servantsQuarters = {
 		shouldTalk: true,
 		shouldThink: true,
 		requiredDevotion: 51
-	}
+	},
+	decorated: true
 };
 
 App.Entity.Facilities.ServantsQuartersServantJob = class extends App.Entity.Facilities.FacilitySingleJob {
diff --git a/src/facilities/spa/spaFramework.js b/src/facilities/spa/spaFramework.js
index 02d9f7f0e8f..95012872750 100644
--- a/src/facilities/spa/spaFramework.js
+++ b/src/facilities/spa/spaFramework.js
@@ -25,7 +25,8 @@ App.Data.Facilities.spa = {
 		shouldTalk: false,
 		shouldThink: true,
 		requiredDevotion: 51
-	}
+	},
+	decorated: true
 };
 
 App.Entity.Facilities.SpaAssigneeJob = class extends App.Entity.Facilities.FacilitySingleJob {
diff --git a/src/futureSocieties/fsDecoration.js b/src/futureSocieties/fsDecoration.js
index e55d8887e3c..9547267c3e3 100644
--- a/src/futureSocieties/fsDecoration.js
+++ b/src/futureSocieties/fsDecoration.js
@@ -11,20 +11,7 @@ App.UI.facilityRedecoration = function() {
 	const applicableFS = FutureSocieties.activeFSes(arc).filter(name => (arc[name] > 20));
 	const decorationNames = Array.from(applicableFS, FS => FutureSocieties.decorationName(FS)).filter(Boolean);
 
-	const activeFacilities = [
-		App.Entity.facilities.brothel,
-		App.Entity.facilities.club,
-		App.Entity.facilities.dairy,
-		App.Entity.facilities.farmyard,
-		App.Entity.facilities.spa,
-		App.Entity.facilities.nursery,
-		App.Entity.facilities.clinic,
-		App.Entity.facilities.schoolroom,
-		App.Entity.facilities.cellblock,
-		App.Entity.facilities.servantsQuarters,
-		App.Entity.facilities.arcade,
-		App.Entity.facilities.masterSuite
-	].filter(f => f.established);
+	const activeFacilities = Object.values(App.Entity.facilities).filter(f => f.isDecorated && f.established);
 
 	// dummy variable to make sure the first option is selected by default
 	const currentSelected = {value: "none"};
@@ -64,7 +51,7 @@ App.UI.facilityRedecoration = function() {
 	}).pulldown();
 
 	for (const facility of activeFacilities) {
-		options.addOption(`The decoration style of ${facility.nameCaps} is`, "decoration", facility)
+		options.addOption(`The decoration style of ${facility.name} is`, "decoration", facility)
 			.addValue("Standard", "standard")
 			.addValueList(decorationNames)
 			.addCallbackToEach(value => {
diff --git a/src/futureSocieties/futureSociety.js b/src/futureSocieties/futureSociety.js
index a170f1a7a5d..be020a5b198 100644
--- a/src/futureSocieties/futureSociety.js
+++ b/src/futureSocieties/futureSociety.js
@@ -406,18 +406,9 @@ globalThis.FutureSocieties = (function() {
 
 	/* call as FutureSocieties.DecorationCleanup() */
 	function DecorationCleanup() {
-		ValidateFacilityDecoration(App.Entity.facilities.brothel);
-		ValidateFacilityDecoration(App.Entity.facilities.dairy);
-		ValidateFacilityDecoration(App.Entity.facilities.club);
-		ValidateFacilityDecoration(App.Entity.facilities.servantsQuarters);
-		ValidateFacilityDecoration(App.Entity.facilities.schoolroom);
-		ValidateFacilityDecoration(App.Entity.facilities.spa);
-		ValidateFacilityDecoration(App.Entity.facilities.clinic);
-		ValidateFacilityDecoration(App.Entity.facilities.arcade);
-		ValidateFacilityDecoration(App.Entity.facilities.cellblock);
-		ValidateFacilityDecoration(App.Entity.facilities.masterSuite);
-		ValidateFacilityDecoration(App.Entity.facilities.nursery);
-		ValidateFacilityDecoration(App.Entity.facilities.farmyard);
+		for (const facility of Object.values(App.Entity.facilities).filter(f => f.isDecorated)) {
+			ValidateFacilityDecoration(facility);
+		}
 	}
 
 	/** helper function, not callable externally
diff --git a/src/npc/agent/agentFramework.js b/src/npc/agent/agentFramework.js
index e2511101340..4b40cc95255 100644
--- a/src/npc/agent/agentFramework.js
+++ b/src/npc/agent/agentFramework.js
@@ -25,7 +25,8 @@ App.Data.Facilities.arcologyAgent = {
 		shouldTalk: true,
 		shouldThink: true,
 		requiredDevotion: 21
-	}
+	},
+	decorated: false
 };
 
 App.Entity.Facilities.AgentJob = class extends App.Entity.Facilities.ManagingJob {
-- 
GitLab