From 9c2113015a3ba4c04ab5352eeb4b78849d476670 Mon Sep 17 00:00:00 2001
From: lowercasedonkey <lowercasedonkey@gmail.com>
Date: Mon, 2 Mar 2020 17:13:08 -0500
Subject: [PATCH] more

---
 src/events/intro/initNationalities.tw |   3 -
 src/init/storyInit.js                 | 360 ++++++++++++++++++++------
 src/init/storyInit.tw                 | 347 ++++++++++++-------------
 src/uncategorized/initRules.tw        |   1 -
 4 files changed, 444 insertions(+), 267 deletions(-)

diff --git a/src/events/intro/initNationalities.tw b/src/events/intro/initNationalities.tw
index 8f15b91fbe2..56162282874 100644
--- a/src/events/intro/initNationalities.tw
+++ b/src/events/intro/initNationalities.tw
@@ -73,9 +73,6 @@
 <<set $minimumSlaveCost = 3000>>
 <<set $enduringRep = $rep>>
 
-<<set $arcologies = []>>
-<<set $leaders = []>>
-
 <<set _seed = ["east", "north", "northeast", "northwest", "south", "southeast", "southwest", "west"]>>
 <<set _govtypes = ["a committee", "a corporation", "an individual", "an oligarchy", "direct democracy", "elected officials"]>>
 
diff --git a/src/init/storyInit.js b/src/init/storyInit.js
index 0a825c198bd..082c7646bdb 100644
--- a/src/init/storyInit.js
+++ b/src/init/storyInit.js
@@ -1,3 +1,17 @@
+App.Update.autoshred = function() {
+	const defaultGameStateVariables = new Set(Object.getOwnPropertyNames(App.Data.defaultGameStateVariables));
+
+	// instead of schredList:
+	for (const v in V) {
+		if (!defaultGameStateVariables.has(v)) {
+			console.log("would have removed", v, V[v]);
+			delete V[v];
+		} else {
+			// console.log("kept", v, V[v]);
+		}
+	}
+};
+
 App.Update.setNonexistantProperties = function(obj, props) {
 	for (const p of Object.getOwnPropertyNames(props)) {
 		if (typeof obj[p] === "undefined") {
@@ -7,7 +21,272 @@ App.Update.setNonexistantProperties = function(obj, props) {
 	return console.log("done!");
 };
 
-App.Data.cleanGameStateVariables = {
+App.Data.defaultGameStateVariables = {
+	returnTo: "init",
+	nextButton: "Continue",
+	nextLink: "Alpha disclaimer",
+
+	ver: 0,
+	pmodVer: 0,
+	releaseID: 0,
+	lastWeeksCashIncome: {},
+	lastWeeksCashExpenses: {},
+	lastWeeksCashProfits: {},
+	lastWeeksRepIncome: {},
+	lastWeeksRepExpenses: {},
+	lastWeeksRepProfits: {},
+	PC: {},
+	currentRule: {},
+	costs: 0,
+	seeBuilding: 0,
+	slaveOneTimeMinAge: 0,
+	slaveOneTimeMaxAge: 0,
+	FCTVenable: 0,
+	purchasedSagBGone: 0,
+	eliteFail: 0,
+	eliteFailTimer: 0,
+	nurseryGrowthStimsSetting: 0,
+	subsidyChurch: 0,
+	liveTargets: 0,
+	slaveWatch: 0,
+	martialSchool: 0,
+	pregExemption: 0,
+	eliteOfficers: 0,
+	noSubhumansInArmy: 0,
+	MadamIgnoresFlaws: 0,
+	farmyardBreeding: 0,
+	farmyardShows: 0,
+	DJignoresFlaws: 0,
+	slaveFightingBG: 0,
+	secBots: {},
+	SecExp: {},
+	childSex: 0,
+	HGEnergy: 0,
+	HGCum: 0,
+	HGSlaveSuccess: 0,
+	HeadGirl: 0,
+	Recruiter: 0,
+	Madam: 0,
+	unMadam: 0,
+	madamCashBonus: 0,
+	whorePriceAdjustment: {},
+	DJ: 0,
+	unDJ: 0,
+	DJRepBonus: 0,
+	Milkmaid: 0,
+	Farmer: 0,
+	Collectrix: 0,
+	Stewardess: 0,
+	Schoolteacher: 0,
+	Wardeness: 0,
+	Concubine: 0,
+	Attendant: 0,
+	Matron: 0,
+	Nurse: 0,
+	Bodyguard: 0,
+	fuckSlaves: 0,
+	freeSexualEnergy: 0,
+	publicServants: 0,
+	cumSlaves: 0,
+	averageDick: 0,
+	slavesWithWorkingDicks: 0,
+	slaveJobValues: {},
+
+	goodImageCampaign: 0,
+	sexualOpeness: 0,
+	CulturalOpenness: 0,
+	alwaysSubsidizeRep: 0,
+	alwaysSubsidizeGrowth: 0,
+	ProImmigrationCash: 0,
+	ProImmigrationRep: 0,
+	AntiImmigrationCash: 0,
+	AntiImmigrationRep: 0,
+	ProEnslavementCash: 0,
+	ProEnslavementRep: 0,
+	AntiEnslavementCash: 0,
+	AntiEnslavementRep: 0,
+	BasicSMR: 1,
+	HealthInspectionSMR: 0,
+	EducationSMR: 0,
+	FrigiditySMR: 0,
+	BasicBeautySMR: 0,
+	QualityBeautySMR: 0,
+	BasicWeightSMR: 0,
+	BasicIntelligenceSMR: 0,
+	QualityIntelligenceSMR: 0,
+	BasicHeightSMR: 0,
+	AdvancedHeightSMR: 0,
+	IntelligenceEugenicsSMR: 0,
+	HeightEugenicsSMR: 0,
+	FaceEugenicsSMR: 0,
+	HonestySMR: 0,
+	ProRefugees: 0,
+	ProRecruitment: 0,
+	OralEncouragement: 0,
+	VaginalEncouragement: 0,
+	AnalEncouragement: 0,
+	OralDiscouragement: 0,
+	VaginalDiscouragement: 0,
+	AnalDiscouragement: 0,
+	CashForRep: 0,
+	RepForCash: 0,
+	Cash4Babies: 0,
+	PAPublic: 0,
+	CoursingAssociation: 0,
+	Lurcher: 0,
+	coursed: 0,
+	MixedMarriage: 0,
+	retirementAge: 45,
+	customRetirementAge: 45,
+	customMenialRetirementAge: 65,
+	retirementCum: 500000,
+	CustomRetirementAgePolicy: 0,
+	PhysicalRetirementAgePolicy: 0,
+	CumMilestoneRetirement: 0,
+	BioreactorRetirement: 0,
+	ArcadeRetirement: 0,
+	CitizenRetirement: 0,
+	citizenRetirementMenials: 0,
+	FSSupLawTrigger: 0,
+	FSSubLawTrigger: 0,
+	FSSlaveProfLawTrigger: 0,
+
+	fluid: 0,
+	cumSale: 0,
+	showClothingErection: true,
+	revivalistLanguage: 0,
+	corpAssetsDev: 0,
+	corpAssetsDevOld: 0,
+	corpAssetsSlave: 0,
+	corpAssetsSlaveOld: 0,
+	corpCash: 0,
+	corpDiv: 0,
+	corpDivArcadeFromMarket: 0,
+	corpDivArcadeSlaves: 0,
+	corpDivBreakFromMarket: 0,
+	corpDivBreakSlaves: 0,
+	corpDivBreakSlaves2: 0,
+	corpDivBreakToMarket: 0,
+	corpDivBreakToMenial: 0,
+	corpDivBreakToSurgery: 0,
+	corpDivBreakToTrain: 0,
+	corpDivDairyFromMarket: 0,
+	corpDivDairySlaves: 0,
+	corpDivExtraSlaves: 0,
+	corpDivExtraToArcade: 0,
+	corpDivExtraToBreak: 0,
+	corpDivExtraToMarket: 0,
+	corpDividend: 0,
+	corpDivLegalSlaves: 0,
+	corpDivLegalToMarket: 0,
+	corpDivLegalToMenial: 0,
+	corpDivLegalToSurgery: 0,
+	corpDivLegalToTrain: 0,
+	corpDivMenialFromMarket: 0,
+	corpDivMenialSlaves: 0,
+	corpDivSurgeryFromMarket: 0,
+	corpDivSurgerySlaves: 0,
+	corpDivSurgerySlaves2: 0,
+	corpDivSurgeryToDairy: 0,
+	corpDivSurgeryToMarket: 0,
+	corpDivSurgeryToTrain: 0,
+	corpDivTrainFromMarket: 0,
+	corpDivTrainSlaves: 0,
+	corpDivTrainSlaves2: 0,
+	corpDivTrainToMarket: 0,
+	corpDivTrainToWhore: 0,
+	corpDivWhoreFromMarket: 0,
+	corpDivWhoreSlaves: 0,
+	corpOpCostOld: 0,
+	corpOverheadOld: 0,
+	corpProfitOld: 0,
+	corpRev: 0,
+	corpRevOld: 0,
+	corpSpecAccent: 0,
+	corpSpecAge: 0,
+	corpSpecAmputee: 0,
+	corpSpecBalls: 0,
+	corpSpecDevotion: 0,
+	corpSpecDick: 0,
+	corpSpecEducation: 0,
+	corpSpecGender: 0,
+	corpSpecGenitalia: 0,
+	corpSpecHeight: 0,
+	corpSpecHormones: 0,
+	corpSpecImplants: 0,
+	corpSpecInjection: 0,
+	corpSpecIntelligence: 0,
+	corpSpecMilk: 0,
+	corpSpecMuscle: 0,
+	corpSpecPussy: 0,
+	corpSpecSexEd: 0,
+	corpSpecTrust: 0,
+	corpSpecVirgin: 0,
+	corpSpecWeight: 0,
+	dividendTimer: 0,
+	personalShares: 0,
+	publicShares: 0,
+	corpOpCost: 0,
+	corpNeighborBonus: 0,
+	corpOverhead: 0,
+	corpEconBonus: 0,
+	corpNeighborBonusOld: 0,
+	corpEconBonusOld: 0,
+	corpEconOld: 0,
+	assignmentRecords: {},
+	assistant: {},
+	localEcon: 0,
+	econRate: 0,
+	drugsCost: 0,
+	rulesCost: 0,
+	modCost: 0,
+	surgeryCost: 0,
+	arcologies: [],
+	leaders: [],
+	HackingSkillMultiplier: 0,
+	upgradeMultiplierArcology: 0,
+	upgradeMultiplierMedicine: 0,
+	upgradeMultiplierTrade: 0,
+	nationalities: {},
+	heroSlaves: [],
+	baseHeroSlave: {},
+	desc: 0,
+	piercingScore: 0,
+	tatScore: 0,
+	brandScore: 0,
+	scarScore: 0,
+	modScore: 0,
+	bellyAccessory: 0,
+	skinDesc: 0,
+	JobIDArray: {},
+	averageTrust: 0,
+	averageDevotion: 0,
+	enduringTrust: 0,
+	enduringDevotion: 0,
+	pornStars: {},
+	defaultRules: [],
+	slaves: [],
+	genePool: [],
+	slaveIndices: {},
+	missingTable: {},
+	showMissingSlaves: false,
+	showMissingSlavesSD: false,
+	saveImported: 0,
+	marrying: [], /* array of slave being married this week*/
+	organs: [],
+	ArcadeiIDs: [],
+	BrothiIDs: [],
+	CellBiIDs: [],
+	CliniciIDs: [],
+	ClubiIDs: [],
+	DairyiIDs: [],
+	FarmyardiIDs: [],
+	HGSuiteiIDs: [],
+	MastSiIDs: [],
+	SchlRiIDs: [],
+	ServQiIDs: [],
+	SpaiIDs: [],
+	NurseryiIDs: [],
 	freshPC: 0,
 	cheater: 0,
 	cash: 0,
@@ -147,9 +426,6 @@ App.Data.cleanGameStateVariables = {
 	AgePenalty: 1,
 	precociousPuberty: 0,
 	loliGrow: 0,
-	retirementAge: 45,
-	customRetirementAge: 45,
-	customMenialRetirementAge: 65,
 	FSCreditCount: 5,
 	disableLisping: 0,
 	weightAffectsAssets: 1,
@@ -157,9 +433,6 @@ App.Data.cleanGameStateVariables = {
 	verboseDescriptions: 0,
 	makeDicks: 0,
 	showEconomicDetails: 0,
-};
-
-App.Data.defaultGameStateVariables = {
 	activeSlave: 0,
 	activeChild: 0,
 	boomerangSlave: 0,
@@ -218,7 +491,6 @@ App.Data.defaultGameStateVariables = {
 	dairyName: "the Dairy",
 	dairyNameCaps: "The Dairy",
 	dairy: 0,
-	cumSlaves: 0,
 	clubDecoration: "standard",
 	clubUpgradePDAs: 0,
 	clubAdsSpending: 0,
@@ -399,7 +671,6 @@ App.Data.defaultGameStateVariables = {
 	vanillaShareSplit: 1,
 	corpEcon: 0,
 	corpCashDividend: 0,
-	corpDiv: 0,
 	corpExpandToken: 0,
 	corpSpec: 0,
 	corpSpecToken: 0,
@@ -495,7 +766,6 @@ App.Data.defaultGameStateVariables = {
 	playerBred: 0,
 	propOutcome: 0,
 	startingPoint: -1,
-	PhysicalRetirementAgePolicy: 0,
 	raped: -1,
 	missingParentID: -10000,
 	startingSlaveRelative: 0,
@@ -539,32 +809,15 @@ App.Data.defaultGameStateVariables = {
 	week: 1,
 	weddingPlanned: 0,
 	personalAttention: "sex",
-	HeadGirl: 0,
 	HGTimeInGrade: 0,
-	HGEnergy: 0,
-	HGCum: 0,
-	Recruiter: 0,
 	recruiterTarget: "desperate whores",
 	recruiterProgress: 0,
 	recruiterIdleRule: "number",
 	recruiterIdleNumber: 20,
 	recruiterIOUs: 0,
 	bodyguardTrains: 1,
-	Bodyguard: 0,
-	Madam: 0,
-	DJ: 0,
-	Milkmaid: 0,
 	milkmaidImpregnates: 0,
-	Farmer: 0,
-	Collectrix: 0,
-	Stewardess: 0,
 	stewardessImpregnates: 0,
-	Schoolteacher: 0,
-	Attendant: 0,
-	Matron: 0,
-	Nurse: 0,
-	Wardeness: 0,
-	Concubine: 0,
 	economicUncertainty: 10,
 	fixedNationality: 0,
 	fixedRace: 0,
@@ -710,73 +963,20 @@ App.Data.defaultGameStateVariables = {
 	citizenOrphanageTotal: 0,
 	privateOrphanageTotal: 0,
 	breederOrphanageTotal: 0,
-	alwaysSubsidizeRep: 0,
-	alwaysSubsidizeGrowth: 0,
-	ProImmigrationCash: 0,
-	ProImmigrationRep: 0,
-	AntiImmigrationCash: 0,
-	AntiImmigrationRep: 0,
-	ProEnslavementCash: 0,
-	ProEnslavementRep: 0,
-	AntiEnslavementCash: 0,
-	AntiEnslavementRep: 0,
-	BasicSMR: 1,
-	HealthInspectionSMR: 0,
-	EducationSMR: 0,
-	FrigiditySMR: 0,
-	BasicBeautySMR: 0,
-	QualityBeautySMR: 0,
-	BasicWeightSMR: 0,
-	BasicIntelligenceSMR: 0,
-	QualityIntelligenceSMR: 0,
-	BasicHeightSMR: 0,
-	AdvancedHeightSMR: 0,
-	IntelligenceEugenicsSMR: 0,
-	HeightEugenicsSMR: 0,
-	FaceEugenicsSMR: 0,
-	HonestySMR: 0,
-	ProRefugees: 0,
-	ProRecruitment: 0,
-	OralEncouragement: 0,
-	VaginalEncouragement: 0,
-	AnalEncouragement: 0,
-	OralDiscouragement: 0,
-	VaginalDiscouragement: 0,
-	AnalDiscouragement: 0,
-	CashForRep: 0,
-	RepForCash: 0,
-	Cash4Babies: 0,
 	RegularParties: 0,
-	PAPublic: 0,
-	CoursingAssociation: 0,
-	Lurcher: 0,
-	coursed: 0,
 	RaidingMercenaries: 0,
 	raided: 0,
-	MixedMarriage: 0,
-	CulturalOpenness: 0,
-	goodImageCampaign: 0,
-	sexualOpeness: 0,
 	policyCost: 5000,
 	expiree: 0,
 	retiree: 0,
 	birthee: 0,
-	CustomRetirementAgePolicy: 0,
-	BioreactorRetirement: 0,
-	ArcadeRetirement: 0,
-	CitizenRetirement: 0,
-	citizenRetirementMenials: 0,
 	citizenRetirementTrigger: 0,
-	FSSupLawTrigger: 0,
-	FSSubLawTrigger: 0,
 	SexMilestoneRetirement: 0,
 	MilkMilestoneRetirement: 0,
-	CumMilestoneRetirement: 0,
 	BirthsMilestoneRetirement: 0,
 	KillsMilestoneRetirement: 0,
 	retirementSex: 10000,
 	retirementMilk: 50000,
-	retirementCum: 500000,
 	retirementBirths: 5,
 	retirementKills: 3,
 	nicaea: 0,
diff --git a/src/init/storyInit.tw b/src/init/storyInit.tw
index 225e4be639b..489567efbf2 100644
--- a/src/init/storyInit.tw
+++ b/src/init/storyInit.tw
@@ -12,204 +12,188 @@ This program is distributed in the hope that it will be useful, but WITHOUT ANY
 You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
 
-<<set $returnTo = "init", $nextButton = "Continue", $nextLink = "Alpha disclaimer">>
+<<run App.Update.setNonexistantProperties(V, App.Data.defaultGameStateVariables)>>
 
 <<set $ver = App.Version.base, $pmodVer = App.Version.pmod, $releaseID = App.Version.release>>
 
-/* This needs to be broken down into individual files that can be added to StoryInit instead. */
-
 <<set _NGPOffset = 1200000>>
-<<if def $slaves>>
-	<<set _SL = $slaves.length>>
-	<<for _i = 0; _i < _SL; _i++>>
-		<<if $slaves[_i].assignment != "be imported">>
-			<<run removeNonNGPSlave($slaves[_i])>>
-			<<set _i--, _SL-->>
+
+<<set _SL = $slaves.length>>
+<<for _i = 0; _i < _SL; _i++>>
+	<<if $slaves[_i].assignment != "be imported">>
+		<<run removeNonNGPSlave($slaves[_i])>>
+		<<set _i--, _SL-->>
+	<</if>>
+<</for>>
+<<for _i = 0; _i < _SL; _i++>>
+	<<if $slaves[_i].assignment == "be imported">>
+		<<set $slaves[_i].ID += _NGPOffset>>
+		<<set $slaves[_i].assignment = "rest">>
+		<<set $slaves[_i].weekAcquired = 0>>
+		<<set $slaves[_i].newGamePlus = 1>>
+		<<if $slaves[_i].mother > 0>>
+			<<set $slaves[_i].mother += _NGPOffset>>
+		<<elseif $freshPC == 1 && $slaves[_i].mother == -1>>
+			<<set $slaves[_i].mother = -_NGPOffset>>
+		<<elseif $slaves[_i].mother < -1>>
+			<<set $slaves[_i].mother -= _NGPOffset>>
 		<</if>>
-	<</for>>
-	<<for _i = 0; _i < _SL; _i++>>
-		<<if $slaves[_i].assignment == "be imported">>
-			<<set $slaves[_i].ID += _NGPOffset>>
-			<<set $slaves[_i].assignment = "rest">>
-			<<set $slaves[_i].weekAcquired = 0>>
-			<<set $slaves[_i].newGamePlus = 1>>
-			<<if $slaves[_i].mother > 0>>
-				<<set $slaves[_i].mother += _NGPOffset>>
-			<<elseif $freshPC == 1 && $slaves[_i].mother == -1>>
-				<<set $slaves[_i].mother = -_NGPOffset>>
-			<<elseif $slaves[_i].mother < -1>>
-				<<set $slaves[_i].mother -= _NGPOffset>>
-			<</if>>
-			<<if $slaves[_i].father > 0>>
-				<<set $slaves[_i].father += _NGPOffset>>
-			<<elseif $freshPC == 1 && $slaves[_i].father == -1>>
-				<<set $slaves[_i].father = -_NGPOffset>>
-			<<elseif $slaves[_i].father < -1>>
-				<<set $slaves[_i].father -= _NGPOffset>>
-			<</if>>
-			<<set $slaves[_i].daughters = 0>>
-			<<set $slaves[_i].sisters = 0>>
-			<<set $slaves[_i].canRecruit = 0>>
-			<<set $slaves[_i].breedingMark = 0>>
-			<<if $arcologies[0].FSRomanRevivalist > 90>>
-				<<set $slaves[_i].nationality = "Roman Revivalist">>
-			<<elseif $arcologies[0].FSAztecRevivalist > 90>>
-				<<set $slaves[_i].nationality = "Aztec Revivalist">>
-			<<elseif $arcologies[0].FSEgyptianRevivalist > 90>>
-				<<set $slaves[_i].nationality = "Ancient Egyptian Revivalist">>
-			<<elseif $arcologies[0].FSEdoRevivalist > 90>>
-				<<set $slaves[_i].nationality = "Edo Revivalist">>
-			<<elseif $arcologies[0].FSArabianRevivalist > 90>>
-				<<set $slaves[_i].nationality = "Arabian Revivalist">>
-			<<elseif $arcologies[0].FSChineseRevivalist > 90>>
-				<<set $slaves[_i].nationality = "Ancient Chinese Revivalist">>
-			<</if>>
-			<<if $slaves[_i].relationTarget != 0>>
-				<<set $slaves[_i].relationTarget += _NGPOffset>>
-			<</if>>
-			<<if $slaves[_i].relationshipTarget != 0>>
-				<<set $slaves[_i].relationshipTarget += _NGPOffset>>
-			<</if>>
-			<<if $slaves[_i].cloneID != 0>>
-				<<set $slaves[_i].cloneID += _NGPOffset>>
-			<</if>>
-			<<set $slaves[_i].rivalry = 0, $slaves[_i].rivalryTarget = 0, $slaves[_i].subTarget = 0>>
-			<<set $slaves[_i].drugs = "no drugs">>
-			<<set $slaves[_i].porn.spending = 0>>
-			<<set $slaves[_i].rules.living = "spare">>
-			<<set $slaves[_i].diet = "healthy">>
-			<<set $slaves[_i].pregControl = "none">>
+		<<if $slaves[_i].father > 0>>
+			<<set $slaves[_i].father += _NGPOffset>>
+		<<elseif $freshPC == 1 && $slaves[_i].father == -1>>
+			<<set $slaves[_i].father = -_NGPOffset>>
+		<<elseif $slaves[_i].father < -1>>
+			<<set $slaves[_i].father -= _NGPOffset>>
 		<</if>>
-	<</for>>
-	<<set $slaveIndices = slaves2indices()>>
-	<<for _k = 0; _k < _SL; _k++>>
-		<<for _i = 0; _i < _SL; _i++>>
-			<<if $slaves[_k].mother == $slaves[_i].ID || $slaves[_k].father == $slaves[_i].ID>>
-				<<set $slaves[_i].daughters += 1>>
-			<</if>>
-			<<if areSisters($slaves[_k], $slaves[_i]) > 0>>
-				<<set $slaves[_i].sisters += 1>>
-			<</if>>
-		<</for>>
-		<<if $slaves[_k].pregSource > 0>>
-			<<set $slaves[_k].pregSource += _NGPOffset>>
-			<<set _getFather = $slaveIndices[$slaves[_k].pregSource]>>
-			<<if ndef _getFather>>
-				<<set $slaves[_k].pregSource = 0>>
-			<</if>>
+		<<set $slaves[_i].daughters = 0>>
+		<<set $slaves[_i].sisters = 0>>
+		<<set $slaves[_i].canRecruit = 0>>
+		<<set $slaves[_i].breedingMark = 0>>
+		<<if $arcologies[0].FSRomanRevivalist > 90>>
+			<<set $slaves[_i].nationality = "Roman Revivalist">>
+		<<elseif $arcologies[0].FSAztecRevivalist > 90>>
+			<<set $slaves[_i].nationality = "Aztec Revivalist">>
+		<<elseif $arcologies[0].FSEgyptianRevivalist > 90>>
+			<<set $slaves[_i].nationality = "Ancient Egyptian Revivalist">>
+		<<elseif $arcologies[0].FSEdoRevivalist > 90>>
+			<<set $slaves[_i].nationality = "Edo Revivalist">>
+		<<elseif $arcologies[0].FSArabianRevivalist > 90>>
+			<<set $slaves[_i].nationality = "Arabian Revivalist">>
+		<<elseif $arcologies[0].FSChineseRevivalist > 90>>
+			<<set $slaves[_i].nationality = "Ancient Chinese Revivalist">>
 		<</if>>
-		<<for _sInit = 0; _sInit < $slaves[_k].womb.length; _sInit++>>
-			<<if $slaves[_k].womb[_sInit].fatherID > 0>>
-				<<set $slaves[_k].womb[_sInit].fatherID += _NGPOffset>>
-			<<elseif $freshPC == 1 && $slaves[_k].womb[_sInit].fatherID == -1>>
-				<<set $slaves[_k].womb[_sInit].fatherID = -_NGPOffset>>
-			<<elseif $slaves[_k].womb[_sInit].fatherID < -20>>
-				<<set $slaves[_k].womb[_sInit].fatherID -= _NGPOffset>>
-			<</if>>
-			<<if $slaves[_k].womb[_sInit].genetics.father > 0>>
-				<<set $slaves[_k].womb[_sInit].genetics.father += _NGPOffset>>
-			<<elseif $freshPC == 1 && $slaves[_k].womb[_sInit].genetics.father == -1>>
-				<<set $slaves[_k].womb[_sInit].genetics.father = -_NGPOffset>>
-			<<elseif $slaves[_k].womb[_sInit].genetics.father < -20>>
-				<<set $slaves[_k].womb[_sInit].genetics.father -= _NGPOffset>>
-			<</if>>
-			<<if $slaves[_k].womb[_sInit].genetics.mother > 0>>
-				<<set $slaves[_k].womb[_sInit].genetics.mother += _NGPOffset>>
-			<<elseif $freshPC == 1 && $slaves[_k].womb[_sInit].genetics.mother == -1>>
-				<<set $slaves[_k].womb[_sInit].genetics.mother = -_NGPOffset>>
-			<<elseif $slaves[_k].womb[_sInit].genetics.mother < -20>>
-				<<set $slaves[_k].womb[_sInit].genetics.mother -= _NGPOffset>>
-			<</if>>
-		<</for>>
-		<<if $slaves[_k].cloneID != 0>>
-			<<set _getClone = $slaveIndices[$slaves[_k].cloneID]>>
-			<<if ndef _getClone>>
-				<<set $slaves[_k].cloneID = 0>>
-			<</if>>
+		<<if $slaves[_i].relationTarget != 0>>
+			<<set $slaves[_i].relationTarget += _NGPOffset>>
 		<</if>>
-	<</for>>
-	<<set $genePool = ngUpdateGenePool($genePool)>>
-	<<if ndef $missingTable || $showMissingSlaves == false>>
-		<<set $missingTable = {}>>
-	<<else>>
-		<<set $missingTable = ngUpdateMissingTable($missingTable)>>
+		<<if $slaves[_i].relationshipTarget != 0>>
+			<<set $slaves[_i].relationshipTarget += _NGPOffset>>
+		<</if>>
+		<<if $slaves[_i].cloneID != 0>>
+			<<set $slaves[_i].cloneID += _NGPOffset>>
+		<</if>>
+		<<set $slaves[_i].rivalry = 0, $slaves[_i].rivalryTarget = 0, $slaves[_i].subTarget = 0>>
+		<<set $slaves[_i].drugs = "no drugs">>
+		<<set $slaves[_i].porn.spending = 0>>
+		<<set $slaves[_i].rules.living = "spare">>
+		<<set $slaves[_i].diet = "healthy">>
+		<<set $slaves[_i].pregControl = "none">>
 	<</if>>
+<</for>>
+<<set $slaveIndices = slaves2indices()>>
+<<for _k = 0; _k < _SL; _k++>>
 	<<for _i = 0; _i < _SL; _i++>>
-		<<if $slaves[_i].relation != 0>>
-			<<set _seed = 0, _rt = $slaves[_i].relationTarget, _ID = $slaves[_i].ID>>
-			<<set _j = $slaveIndices[_rt]>>
-			<<if (def _j) && $slaves[_j].relationTarget == _ID>>
-				<<set _seed = 1>>
-			<</if>>
-			<<if _seed == 0>>
-				<<set $slaves[_i].relation = 0, $slaves[_i].relationTarget = 0>>
-			<</if>>
+		<<if $slaves[_k].mother == $slaves[_i].ID || $slaves[_k].father == $slaves[_i].ID>>
+			<<set $slaves[_i].daughters += 1>>
 		<</if>>
-		<<if $slaves[_i].relationship > 0>>
-			<<set _seed = 0, _rt = $slaves[_i].relationshipTarget, _ID = $slaves[_i].ID>>
-			<<set _j = $slaveIndices[_rt]>>
-			<<if (def _j) && $slaves[_j].relationshipTarget == _ID>>
-				<<set _seed = 1>>
-			<</if>>
-			<<if _seed == 0>>
-				<<set $slaves[_i].relationship = 0, $slaves[_i].relationshipTarget = 0>>
-			<</if>>
+		<<if areSisters($slaves[_k], $slaves[_i]) > 0>>
+			<<set $slaves[_i].sisters += 1>>
 		<</if>>
 	<</for>>
-	<<for _i = 0; _i < _SL; _i++>>
-		<<if $familyTesting == 1>>
-			<<if $slaves[_i].canRecruit == 1>>
-				/*<<set $recruiters.push($slaves[_i])>>*/
-			<</if>>
-		<<else>>
-			<<if $slaves[_i].relation == 0>>
-				<<if random(1,100) <= 5>>
-					<<set $slaves[_i].recruiter = "twin">>
-				<<elseif ($slaves[_i].actualAge > 32) && (random(1,100) <= 41)>>
-					<<set $slaves[_i].recruiter = "mother">>
-				<<elseif ($slaves[_i].actualAge < 24) && (random(1,100) <= 40)>>
-					<<set $slaves[_i].recruiter = "daughter">>
-				<<elseif ($slaves[_i].actualAge < 43) && (random(1,100) <= 20)>>
-					<<set $slaves[_i].recruiter = "older sister">>
-				<<elseif ($slaves[_i].actualAge < 25) && ($slaves[_i].actualAge > 18) && (random(1,100) <= 20)>>
-					<<set $slaves[_i].recruiter = "young sister">>
-				<</if>>
-			<<else>>
-				<<set $slaves[_i].recruiter = 0>>
-			<</if>>
-		<</if>> /*closes family mode */
-		<<set $slaves[_i].counter.milk = 0>>
-		<<set $slaves[_i].counter.cum = 0>>
-		<<set $slaves[_i].counter.births = 0>>
-		<<set $slaves[_i].counter.mammary = 0>>
-		<<set $slaves[_i].counter.penetrative = 0>>
-		<<set $slaves[_i].counter.oral = 0>>
-		<<set $slaves[_i].counter.anal = 0>>
-		<<set $slaves[_i].counter.vaginal = 0>>
-		<<set $slaves[_i].lifetimeCashExpenses = 0>>
-		<<set $slaves[_i].lifetimeCashIncome = 0>>
-		<<set $slaves[_i].lastWeeksCashIncome = 0>>
-		<<set $slaves[_i].lifetimeRepExpenses = 0>>
-		<<set $slaves[_i].lifetimeRepIncome = 0>>
-		<<set $slaves[_i].lastWeeksRepExpenses = 0>>
-		<<set $slaves[_i].lastWeeksRepIncome = 0>>
+	<<if $slaves[_k].pregSource > 0>>
+		<<set $slaves[_k].pregSource += _NGPOffset>>
+		<<set _getFather = $slaveIndices[$slaves[_k].pregSource]>>
+		<<if ndef _getFather>>
+			<<set $slaves[_k].pregSource = 0>>
+		<</if>>
+	<</if>>
+	<<for _sInit = 0; _sInit < $slaves[_k].womb.length; _sInit++>>
+		<<if $slaves[_k].womb[_sInit].fatherID > 0>>
+			<<set $slaves[_k].womb[_sInit].fatherID += _NGPOffset>>
+		<<elseif $freshPC == 1 && $slaves[_k].womb[_sInit].fatherID == -1>>
+			<<set $slaves[_k].womb[_sInit].fatherID = -_NGPOffset>>
+		<<elseif $slaves[_k].womb[_sInit].fatherID < -20>>
+			<<set $slaves[_k].womb[_sInit].fatherID -= _NGPOffset>>
+		<</if>>
+		<<if $slaves[_k].womb[_sInit].genetics.father > 0>>
+			<<set $slaves[_k].womb[_sInit].genetics.father += _NGPOffset>>
+		<<elseif $freshPC == 1 && $slaves[_k].womb[_sInit].genetics.father == -1>>
+			<<set $slaves[_k].womb[_sInit].genetics.father = -_NGPOffset>>
+		<<elseif $slaves[_k].womb[_sInit].genetics.father < -20>>
+			<<set $slaves[_k].womb[_sInit].genetics.father -= _NGPOffset>>
+		<</if>>
+		<<if $slaves[_k].womb[_sInit].genetics.mother > 0>>
+			<<set $slaves[_k].womb[_sInit].genetics.mother += _NGPOffset>>
+		<<elseif $freshPC == 1 && $slaves[_k].womb[_sInit].genetics.mother == -1>>
+			<<set $slaves[_k].womb[_sInit].genetics.mother = -_NGPOffset>>
+		<<elseif $slaves[_k].womb[_sInit].genetics.mother < -20>>
+			<<set $slaves[_k].womb[_sInit].genetics.mother -= _NGPOffset>>
+		<</if>>
 	<</for>>
+	<<if $slaves[_k].cloneID != 0>>
+		<<set _getClone = $slaveIndices[$slaves[_k].cloneID]>>
+		<<if ndef _getClone>>
+			<<set $slaves[_k].cloneID = 0>>
+		<</if>>
+	<</if>>
+<</for>>
+<<set $genePool = ngUpdateGenePool($genePool)>>
+<<if ndef $missingTable || $showMissingSlaves == false>>
+	<<set $missingTable = {}>>
 <<else>>
-	<<set $slaves = []>>
-	<<set $genePool = []>>
-	<<set $slaveIndices = slaves2indices()>>
-		<<set $missingTable = {}>>
-	<<set $showMissingSlaves = false>>
-	<<set $showMissingSlavesSD = false>>
+	<<set $missingTable = ngUpdateMissingTable($missingTable)>>
 <</if>>
+<<for _i = 0; _i < _SL; _i++>>
+	<<if $slaves[_i].relation != 0>>
+		<<set _seed = 0, _rt = $slaves[_i].relationTarget, _ID = $slaves[_i].ID>>
+		<<set _j = $slaveIndices[_rt]>>
+		<<if (def _j) && $slaves[_j].relationTarget == _ID>>
+			<<set _seed = 1>>
+		<</if>>
+		<<if _seed == 0>>
+			<<set $slaves[_i].relation = 0, $slaves[_i].relationTarget = 0>>
+		<</if>>
+	<</if>>
+	<<if $slaves[_i].relationship > 0>>
+		<<set _seed = 0, _rt = $slaves[_i].relationshipTarget, _ID = $slaves[_i].ID>>
+		<<set _j = $slaveIndices[_rt]>>
+		<<if (def _j) && $slaves[_j].relationshipTarget == _ID>>
+			<<set _seed = 1>>
+		<</if>>
+		<<if _seed == 0>>
+			<<set $slaves[_i].relationship = 0, $slaves[_i].relationshipTarget = 0>>
+		<</if>>
+	<</if>>
+<</for>>
+<<for _i = 0; _i < _SL; _i++>>
+	<<if $familyTesting == 1>>
+		<<if $slaves[_i].canRecruit == 1>>
+			/*<<set $recruiters.push($slaves[_i])>>*/
+		<</if>>
+	<<else>>
+		<<if $slaves[_i].relation == 0>>
+			<<if random(1,100) <= 5>>
+				<<set $slaves[_i].recruiter = "twin">>
+			<<elseif ($slaves[_i].actualAge > 32) && (random(1,100) <= 41)>>
+				<<set $slaves[_i].recruiter = "mother">>
+			<<elseif ($slaves[_i].actualAge < 24) && (random(1,100) <= 40)>>
+				<<set $slaves[_i].recruiter = "daughter">>
+			<<elseif ($slaves[_i].actualAge < 43) && (random(1,100) <= 20)>>
+				<<set $slaves[_i].recruiter = "older sister">>
+			<<elseif ($slaves[_i].actualAge < 25) && ($slaves[_i].actualAge > 18) && (random(1,100) <= 20)>>
+				<<set $slaves[_i].recruiter = "young sister">>
+			<</if>>
+		<<else>>
+			<<set $slaves[_i].recruiter = 0>>
+		<</if>>
+	<</if>> /*closes family mode */
+	<<set $slaves[_i].counter.milk = 0>>
+	<<set $slaves[_i].counter.cum = 0>>
+	<<set $slaves[_i].counter.births = 0>>
+	<<set $slaves[_i].counter.mammary = 0>>
+	<<set $slaves[_i].counter.penetrative = 0>>
+	<<set $slaves[_i].counter.oral = 0>>
+	<<set $slaves[_i].counter.anal = 0>>
+	<<set $slaves[_i].counter.vaginal = 0>>
+	<<set $slaves[_i].lifetimeCashExpenses = 0>>
+	<<set $slaves[_i].lifetimeCashIncome = 0>>
+	<<set $slaves[_i].lastWeeksCashIncome = 0>>
+	<<set $slaves[_i].lifetimeRepExpenses = 0>>
+	<<set $slaves[_i].lifetimeRepIncome = 0>>
+	<<set $slaves[_i].lastWeeksRepExpenses = 0>>
+	<<set $slaves[_i].lastWeeksRepIncome = 0>>
+<</for>>
 
-<<set $marrying = []>> /* array of slave being married this week*/
-<<set $organs = []>>
-<<set $ArcadeiIDs = [], $BrothiIDs = [], $CellBiIDs = [], $CliniciIDs = [], $ClubiIDs = [], $DairyiIDs = [], $FarmyardiIDs = [], $HGSuiteiIDs = [], $MastSiIDs = [], $SchlRiIDs = [], $ServQiIDs = [], $SpaiIDs = [], $NurseryiIDs = []>>
 
-<<if ndef $saveImported>>
-	<<set $saveImported = 0>>
-<</if>>
 
 /* 0 out the record books as we start a new game */
 <<setupLastWeeksCash>>
@@ -219,7 +203,6 @@ You should have received a copy of the GNU General Public License along with thi
 
 	<<set $PC = basePlayer()>>
 	<<run WombInit($PC)>>
-	<<run App.Update.setNonexistantProperties(V, App.Data.cleanGameStateVariables)>>
 	<<set $assignmentRecords = {}>>
 	<<run cashX(10000, "personalBusiness")>>
 	<<include "Init Rules">>
@@ -290,12 +273,10 @@ You should have received a copy of the GNU General Public License along with thi
 	<<unset $corpAssetsDev, $corpAssetsDevOld, $corpAssetsSlave, $corpAssetsSlaveOld, $corpCash, $corpDiv, $corpDivArcadeFromMarket, $corpDivArcadeSlaves, $corpDivBreakFromMarket, $corpDivBreakSlaves, $corpDivBreakSlaves2, $corpDivBreakToMarket, $corpDivBreakToMenial, $corpDivBreakToSurgery, $corpDivBreakToTrain, $corpDivDairyFromMarket, $corpDivDairySlaves, $corpDivExtraSlaves, $corpDivExtraToArcade, $corpDivExtraToBreak, $corpDivExtraToMarket, $corpDividend, $corpDivLegalSlaves, $corpDivLegalToMarket, $corpDivLegalToMenial, $corpDivLegalToSurgery, $corpDivLegalToTrain, $corpDivMenialFromMarket, $corpDivMenialSlaves, $corpDivSurgeryFromMarket, $corpDivSurgerySlaves, $corpDivSurgerySlaves2, $corpDivSurgeryToDairy, $corpDivSurgeryToMarket, $corpDivSurgeryToTrain, $corpDivTrainFromMarket, $corpDivTrainSlaves, $corpDivTrainSlaves2, $corpDivTrainToMarket, $corpDivTrainToWhore, $corpDivWhoreFromMarket, $corpDivWhoreSlaves, $corpOpCostOld, $corpOverheadOld, $corpProfitOld, $corpRev, $corpRevOld, $corpSpecAccent, $corpSpecAge, $corpSpecAmputee, $corpSpecBalls, $corpSpecDevotion, $corpSpecDick, $corpSpecEducation, $corpSpecGender, $corpSpecGenitalia, $corpSpecHeight, $corpSpecHormones, $corpSpecImplants, $corpSpecInjection, $corpSpecIntelligence, $corpSpecMilk, $corpSpecMuscle, $corpSpecPussy, $corpSpecSexEd, $corpSpecTrust, $corpSpecVirgin, $corpSpecWeight, $dividendTimer, $personalShares, $publicShares>>
 
 <</if>>
-<<run App.Update.setNonexistantProperties(V, App.Data.defaultGameStateVariables)>>
 <<run $cribs.forEach(function(c) {
 	App.Facilities.Nursery.childInit(c);
 })>>
 /* Porn star counts (prestige 1) and ID's (prestige 3) */
-<<set $pornStars = {}>>
 <<for _genre range App.Porn.getAllGenres()>>
 	<<set $pornStars[_genre.fameVar] = { p1count: 0, p3ID: 0 }>>
 <</for>>
diff --git a/src/uncategorized/initRules.tw b/src/uncategorized/initRules.tw
index 6c38817e0aa..bf4b5a1d76a 100644
--- a/src/uncategorized/initRules.tw
+++ b/src/uncategorized/initRules.tw
@@ -1,7 +1,6 @@
 :: Init Rules
 
 <<silently>>
-<<set $defaultRules = []>>
 
 <<set _activeRule = emptyDefaultRule()>>
 <<set _activeRule.name = "Obedient Slaves">>
-- 
GitLab