From 897d94b5fc3e5f3e4d83c1ce7220c43a5eb84490 Mon Sep 17 00:00:00 2001
From: Empress Sela <empresssela@cock.li>
Date: Wed, 8 Jul 2020 16:29:04 -0400
Subject: [PATCH] Add COI to NGP

---
 src/data/newGamePlus.js | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/src/data/newGamePlus.js b/src/data/newGamePlus.js
index f5a569ea612..506bf21159e 100644
--- a/src/data/newGamePlus.js
+++ b/src/data/newGamePlus.js
@@ -69,15 +69,32 @@ App.Data.NewGamePlus = (function() {
 
 		const ngUpdateMissingTable = function(missingTable) {
 			const newTable = {};
+			let needed = [];
 
 			(V.slaves || [])
 				.forEach(s => ([s.pregSource + NGPOffset, s.mother + NGPOffset, s.father + NGPOffset]
 					.filter(i => (i in missingTable))
 					.forEach(i => {
-						newTable[i - NGPOffset] = missingTable[i];
-						newTable[i - NGPOffset].ID -= NGPOffset;
+						if (needed.index(i) === -1)
+							needed.push(i);
 					})));
 
+			while (needed.length > 0) {
+				let s = needed.shift();
+				newTable[i - NGPOffset] = s;
+				s.ID -= NGPOffset;
+				if (s.mother in missingTable) {
+					s.mother -= NGPOffset;
+					if (!(s.mother in newTable) && needed.indexOf(s.mother + NGPOffset) === -1)
+						needed.push(s.mother + NGPOffset);
+				} 
+				if (s.father in missingTable) {
+					s.father -= NGPOffset;
+					if (!(s.father in newTable) && needed.indexOf(s.father + NGPOffset) === -1)
+						needed.push(s.father + NGPOffset);
+				}
+			}
+
 			return newTable;
 		};
 
-- 
GitLab