From d40f161436a90f7d43170d06b013ab7adc9cc477 Mon Sep 17 00:00:00 2001
From: Svornost <11434-svornost@users.noreply.gitgud.io>
Date: Mon, 12 Sep 2022 18:39:48 -0400
Subject: [PATCH] Remove direction bias from neighbor FS adoption.

---
 src/endWeek/economics/neighborsDevelopment.js | 59 ++++++++++---------
 1 file changed, 32 insertions(+), 27 deletions(-)

diff --git a/src/endWeek/economics/neighborsDevelopment.js b/src/endWeek/economics/neighborsDevelopment.js
index aaeba25ae78..8081f9f1480 100644
--- a/src/endWeek/economics/neighborsDevelopment.js
+++ b/src/endWeek/economics/neighborsDevelopment.js
@@ -2531,52 +2531,57 @@ App.EndWeek.neighborsDevelopment = function() {
 			}
 
 			/* NEIGHBOR ADOPTION*/
+			const influencedBy = [];
+			const aligned = [];
+			const opposed = [];
+			const usableCandidates = [];
 			for (const arc2 of V.arcologies) {
 				if (arc.direction !== arc2.direction) {
 					let influenceBonus = 0;
 					if (arc.direction === arc2.influenceTarget) {
-						r.push(`${arc2.name}'s directed cultural influence gives it some input over ${arc.name}'s choice of direction.`);
+						influencedBy.push(arc2.name);
 						influenceBonus = 20;
 					}
 
 					const opinion = App.Neighbor.opinion(arc, arc2);
 					if (opinion >= 50) {
-						r.push(`${arc.name} is aligned with ${arc2.name} socially, encouraging it to consider adopting all its cultural values.`);
+						aligned.push(arc2.name);
 						influenceBonus += opinion - 50;
 					} else if (opinion <= -50) {
-						r.push(`${arc.name} is culturally opposed to ${arc2.name}, encouraging it to resist adopting its cultural values.`);
+						opposed.push(arc2.name);
 						influenceBonus += opinion + 50;
 					}
 
 					for (const candidate of validFSes) {
-						if (candidate === "FSSubjugationist") {
-							if ((arc.FSSupremacist === "unset") || (arc.FSSupremacistRace !== arc2.FSSubjugationistRace)) {
-								if (arc2.FSSubjugationist > random(0, 200) - influenceBonus) {
-									r.push(`It <span class="yellow">adopts ${arc2.FSSubjugationistRace} Subjugation</span> due to influence from its trading partner ${arc2.name}.`);
-									arc.FSSubjugationist = 5;
-									arc.FSSubjugationistRace = arc2.FSSubjugationistRace;
-									return;
-								}
-							}
-						} else if (candidate === "FSSupremacist") {
-							if ((arc.FSSubjugationist === "unset") || (arc.FSSubjugationistRace !== arc2.FSSupremacistRace)) {
-								if (arc2.FSSupremacist > random(0, 200) - influenceBonus) {
-									r.push(`It <span class="yellow">adopts ${arc2.FSSupremacistRace} Supremacy</span> due to influence from its trading partner ${arc2.name}.`);
-									arc.FSSupremacist = 5;
-									arc.FSSupremacistRace = arc2.FSSupremacistRace;
-									return;
-								}
-							}
-						} else {
-							if (arc2[candidate] > random(0, 200) - influenceBonus) {
-								r.push(`It <span class="yellow">adopts ${FutureSocieties.displayName(candidate)}</span> due to influence from its trading partner ${arc2.name}.`);
-								arc[candidate] = 5;
-								return;
-							}
+						if (arc2[candidate] > random(0, 200) - influenceBonus) {
+							usableCandidates.push({arc2, candidate});
 						}
 					}
 				}
 			}
+			if (influencedBy.length > 0) {
+				r.push(`Directed cultural influence from ${toSentence(influencedBy)} gives ${influencedBy.length > 1 ? 'them' : 'it'} some input over ${arc.name}'s choice of direction.`);
+			}
+			if (aligned.length > 0) {
+				r.push(`${arc.name} is aligned with ${toSentence(aligned)} socially, encouraging it to consider adopting more of ${aligned.length > 1 ? 'their' : 'its'} cultural values.`);
+			}
+			if (opposed.length > 0) {
+				r.push(`${arc.name} is culturally opposed with ${toSentence(opposed)} socially,  encouraging it to resist adopting ${opposed.length > 1 ? 'their' : 'its'} cultural values.`);
+			}
+			const chosen = usableCandidates.random();
+			if (chosen.candidate === "FSSubjugationist") {
+				r.push(`It <span class="yellow">adopts ${chosen.arc2.FSSubjugationistRace} Subjugation</span> due to influence from its trading partner ${chosen.arc2.name}.`);
+				arc.FSSubjugationist = 5;
+				arc.FSSubjugationistRace = chosen.arc2.FSSubjugationistRace;				
+			} else if (chosen.candidate === "FSSupremacist") {
+				r.push(`It <span class="yellow">adopts ${chosen.arc2.FSSupremacistRace} Supremacy</span> due to influence from its trading partner ${chosen.arc2.name}.`);
+				arc.FSSupremacist = 5;
+				arc.FSSupremacistRace = chosen.arc2.FSSupremacistRace;
+			} else {
+				r.push(`It <span class="yellow">adopts ${FutureSocieties.displayName(chosen.candidate)}</span> due to influence from its trading partner ${chosen.arc2.name}.`);
+				arc[chosen.candidate] = 5;
+				return;
+			}
 
 			/* RANDOM ADOPTION*/
 			if (random(0, 4) === 1) {
-- 
GitLab