code:
/**
 * @param {App.Entity.SlaveState} slave
 * @returns {string}
 */
globalThis.minorInjuryResponse = function(slave) {
	const arcology = V.arcologies[0];
	const arcologyUpgrade = V.arcologyUpgrade;
	const {he, himself, He} = getPronouns(slave);

	return responseWithTracking(trackedCategory());

	/**
	 * @returns {keyof App.Data.Records.LastWeeksCash}
	 */
	function trackedCategory() {
		switch (slave.assignment) {
			case Job.WHORE:
				return "slaveAssignmentWhore";
			case Job.MADAM:
				return "slaveAssignmentMadam";
			case Job.BROTHEL:
				return "slaveAssignmentBrothel";
			case Job.PUBLIC:
				return "slaveAssignmentPublic";
			case Job.DJ:
				return "slaveAssignmentDj";
			case Job.CLUB:
				return "slaveAssignmentClub";
			default:
				throw new Error(`Minor injury response requested for unexpected assignment ${slave.assignment}`);
		}
	}

	/**
	 * @param {keyof App.Data.Records.LastWeeksCash} category
	 * @returns {string}
	 */
	function responseWithTracking(category) {
		let o = "";
		if (arcology.FSDegradationist > 20) {
			o += ` ${He} carries on, knowing that in your degradationist arcology, this is accepted behavior.`;
		} else if (arcology.FSPaternalist > 20) {
			if (arcologyUpgrade.drones === 1 && jsRandom(1, 100) > 50) {
				o += ` The security drones successfully detain him and oblige him to pay significant <span class="yellowgreen">compensation,</span> since abusing slaves is discouraged here.`;
				cashX(50, category, slave);
			} else if (arcologyUpgrade.grid === 1 && jsRandom(1, 100) > 50) {
				o += ` The computer systems successfully detain him and require him to pay significant <span class="yellowgreen">compensation,</span> since abusing slaves is discouraged here.`;
				cashX(50, category, slave);
			} else if (slave.skill.whoring > jsRandom(1, 100)) {
				o += ` ${slave.slaveName} is used to this sort of thing, and convinces him to pay significant <span class="yellowgreen">compensation,</span> since abusing slaves is discouraged here.`;
				cashX(50, category, slave);
			} else if (slave.skill.combat > 30) {
				o += ` ${slave.slaveName} can take care of ${himself}, and ${he} successfully forces him to pay significant <span class="yellowgreen">compensation,</span> since abusing slaves is discouraged here.`;
				cashX(50, category, slave);
			}
		} else {
			if (arcologyUpgrade.drones === 1 && jsRandom(1, 100) > 50) {
				o += ` The security drones successfully detain him and oblige him to pay minor <span class="yellowgreen">compensation.</span>`;
				cashX(10, category, slave);
			} else if (arcologyUpgrade.grid === 1 && jsRandom(1, 100) > 50) {
				o += ` The computer systems successfully detain him and require him to pay minor <span class="yellowgreen">compensation.</span>`;
				cashX(10, category, slave);
			} else if (slave.skill.whoring > jsRandom(1, 100)) {
				o += ` ${slave.slaveName} is used to this sort of thing, and convinces him to pay minor <span class="yellowgreen">compensation.</span>`;
				cashX(10, category, slave);
			} else if (slave.skill.combat > 30) {
				o += ` ${slave.slaveName} can take care of ${himself}, and ${he} successfully forces him to pay minor <span class="yellowgreen">compensation.</span>`;
				cashX(10, category, slave);
			}
		}
		return o;
	}
};


code:
App.EndWeek.nextWeek = function() {
	V.HackingSkillMultiplier = upgradeMultiplier('hacking');
	V.upgradeMultiplierArcology = upgradeMultiplier('engineering');
	V.upgradeMultiplierMedicine = upgradeMultiplier('medicine');
	V.upgradeMultiplierTrade = upgradeMultiplier('trading');

	const rival = V.arcologies.find(s => s.direction !== 0 && s.rival === 1);
	if (rival && V.rival.prosperity !== 0) {
		V.rival.prosperity = rival.prosperity;
	} else if (!rival) {
		if (V.slaves.filter(s => s.newGamePlus === 0 && s.origin.includes("$He was once an arcology owner like yourself.")).length > 0) {
			V.rival.state = 5;
		} else if (V.plot > 0 && V.rival.prosperity > 0) {
			if (V.arcologies.length > 1) {
				V.rival.state = 2;
			} else if (V.arcologies.length === 1) {
				V.rival.state = 1;
			}
		} else {
			V.rival.state = 4;
		}
	}

	if (V.playerAging !== 0) {
		V.PC.birthWeek += 1;
		if (V.PC.ovaryAge >= 47 && V.PC.ovaries === 1 && (V.PC.preg === -1 || V.PC.preg === 0)) {
			V.PC.preg = -2;
		}
		if (V.PC.birthWeek >= 52) {
			V.PC.birthWeek = 0;
			if (V.playerAging === 2) {
				V.PC.physicalAge++;
				V.PC.actualAge++;
				if (V.PC.geneMods.NCS === 1 || (V.PC.geneticQuirks.neoteny >= 2 && V.PC.geneticQuirks.progeria !== 2)) {
					/* Induced NCS completely takes over visual aging. Additionally, because of the neoteny aspects of NCS, ovaries don't age quite as fast. */
					/* Unsurprisingly, actual neoteny has the same effect as long as progeria isn't in play. */
					V.PC.ovaryAge += either(0.5, 0.6, 0.7, 0.7, 0.8, 0.9, 1.0);
				} else {
					V.PC.visualAge++;
					V.PC.ovaryAge += either(0.8, 0.9, 0.9, 1.0, 1.0, 1.0, 1.1);
				}
				if (V.PC.physicalAge <= 20 && V.loliGrow > 0) {
					App.EndWeek.Shared.physicalDevelopment(V.PC, true);
				}
				if ((V.PC.ovaries > 0 || V.PC.mpreg > 0) && V.PC.ovaryAge < 0) {
					V.PC.ovaryAge = -100; // once PC can have immortal ovaries, this is where it takes effect
				}
				agePCEffects();
			}
		}
	}
	if (V.PC.geneMods.progenitor === 1 && canGetPregnant(V.PC)) { // Progenitor mod causes ovarian burnout if not put to use.
		if (V.PC.geneticQuirks.superfetation === 2 && V.PC.womb.length > 0) {
			V.PC.ovaryAge += 0.1;
		} else {
			V.PC.ovaryAge += 0.4;
		}
	}
	if (V.PC.majorInjury > 0) {
		V.PC.majorInjury--;
	}
	if (V.PC.induceLactation > 0) {
		V.PC.induceLactation--;
	}
	if (V.PC.lactation === 1) {
		if (V.PC.lactationDuration === 1) {
			let boobsMilkIntegrityPC = 0;
			if (V.PC.boobsMilk > 0) {
				boobsMilkIntegrityPC = V.PC.boobsMilk;
				V.PC.boobs -= V.PC.boobsMilk;
				V.PC.boobsMilk = 0;
			}
			// V.PC.boobsMilk = Math.round(10 * V.PC.lactationAdaptation);
			V.PC.boobsMilk = milkAmount(V.PC) * 20;
			V.PC.boobsMilk += boobsMilkIntegrityPC;
			V.PC.boobsMilk = Math.round(V.PC.boobsMilk / 10) * 10;
			V.PC.boobs += V.PC.boobsMilk;
		}
	}
	if (V.menstruation === 1) {
		// TODO
	} else if (V.PC.geneticQuirks.superfetation === 2 && V.PC.womb.length > 0) {
		if (V.PC.fertPeak === 0) {
			V.PC.fertPeak = 1;
		}
		V.PC.fertPeak--;
	} else if (V.PC.fertPeak !== 0) {
		V.PC.fertPeak = 0;
	}
	/* irregular leptin production weight gain/loss setter */
	if (V.PC.geneticQuirks.wGain === 2 && V.PC.geneticQuirks.wLoss === 2) {
		V.PC.weightDirection = either(-1, 1);
	} else if (V.PC.geneticQuirks.wLoss === 2) {
		V.PC.weightDirection = -1;
	} else if (V.PC.geneticQuirks.wGain === 2 || V.PC.geneMods.livestock === 1) {
		V.PC.weightDirection = 1;
	} else {
		V.PC.weightDirection = 0;
	}

	// Adding random changes to the economy
	if (V.difficultySwitch === 1) {
		const globalEconSeed = random(1, 100);
		if (globalEconSeed > 98) {
			V.economy += 2;
		} else if (globalEconSeed > 85) {
			V.economy += 1;
		} else if (globalEconSeed <= 2) {
			V.economy -= 2;
		} else if (globalEconSeed <= 25 + V.econRate * 10) {
			V.economy -= 1;
		}
		if (V.economy < 20) {
			V.economy = 20;
		}
		const localEconSeed = random(1, 100);
		if (V.localEcon <= (V.economy + V.econAdvantage)) {
			if (localEconSeed > 95) {
				V.localEcon += 2;
			} else if (localEconSeed > 50) {
				V.localEcon += 1;
			} else if (localEconSeed <= 1) {
				V.localEcon -= 2;
			} else if (localEconSeed <= 10) {
				V.localEcon -= 1;
			}
		} else if (V.localEcon <= (V.economy + V.econAdvantage + 5)) {
			if (localEconSeed > 98) {
				V.localEcon += 2;
			} else if (localEconSeed > 66) {
				V.localEcon += 1;
			} else if (localEconSeed <= 2) {
				V.localEcon -= 2;
			} else if (localEconSeed <= 33) {
				V.localEcon -= 1;
			}
		} else if (localEconSeed > 99) {
			V.localEcon += 2;
		} else if (localEconSeed > 90) {
			V.localEcon += 1;
		} else if (localEconSeed <= 5) {
			V.localEcon -= 2;
		} else if (localEconSeed <= 50) {
			V.localEcon -= 1;
		}
		if (V.localEcon < 20) {
			V.localEcon = 20;
		}

		if (V.mods.food.enabled && V.mods.food.market) {
			if (V.localEcon > 100) {
				V.mods.food.cost = Math.max(5 / (1 + (Math.trunc(1000 - 100000 / V.localEcon) / 10) / 100), 3.125);
			} else if (V.localEcon === 100) {
				V.mods.food.cost = 5;
			} else {
				V.mods.food.cost = Math.min(5 * (1 + 1.5 * Math.sqrt(Math.trunc(100000 / V.localEcon - 1000) / 10) / 100), 6.5);
			}
		}
		V.mods.food.cost = Math.trunc(2500 / V.localEcon);
		V.drugsCost = Math.trunc(10000 / V.localEcon);
		V.rulesCost = Math.trunc(10000 / V.localEcon);
		V.modCost = Math.trunc(5000 / V.localEcon);
		V.surgeryCost = Math.trunc(30000 / (V.localEcon * ((V.PC.career === "medicine" || V.PC.career === "medical assistant" || V.PC.career === "nurse") ? 2 : 1)));
	}

	V.arcologies[0].prosperity = Math.clamp(V.arcologies[0].prosperity, 1, V.AProsperityCap);

	V.averageTrust = 0;
	V.averageDevotion = 0;
	let slavesContributing = 0;
	let oldHG = -1;
	let newHG = -1;
	if (V.studio === 1) {
		for (const genre of App.Porn.getAllGenres()) {
			V.pornStars[genre.fameVar].p1count = 0;
		}
	}
	for (const slave of V.slaves) {
		ageSlaveWeeks(slave);
		if (slave.indenture > 0) {
			slave.indenture -= 1;
		}
		if (slave.induceLactation > 0) {
			slave.induceLactation--;
		}
		if (slave.lactation === 1) {
			if (slave.lactationDuration === 1) {
				let boobsMilkIntegrity = 0;
				if (slave.boobsMilk > 0) {
					boobsMilkIntegrity = slave.boobsMilk;
					slave.boobs -= slave.boobsMilk;
					slave.boobsMilk = 0;
				}
				// slave.boobsMilk = Math.round(10 * slave.lactationAdaptation);
				slave.boobsMilk = milkAmount(slave) * 20;
				slave.boobsMilk += boobsMilkIntegrity;
				slave.boobsMilk = Math.round(slave.boobsMilk / 10) * 10;
				slave.boobs += slave.boobsMilk;
			}
		}
		if (V.menstruation === 1) {
			// TODO
		} else if (slave.geneticQuirks.superfetation === 2 && slave.womb.length > 0) {
			if (slave.fertPeak === 0) {
				slave.fertPeak = 1;
			}
			slave.fertPeak--;
		} else if (slave.fertPeak !== 0) {
			slave.fertPeak = 0;
		}
		slave.trust = Number(slave.trust.toFixed(1));
		slave.devotion = Number(slave.devotion.toFixed(1));
		slave.oldDevotion = slave.devotion;
		slave.oldTrust = slave.trust;
		slave.minorInjury = 0;
		if (slave.sentence > 1) {
			slave.sentence -= 1;
		} else if (slave.sentence === 1) {
			removeJob(slave, slave.assignment);
		}
		if (slave.relationship === 0) {
			slave.relationshipTarget = 0;
		}
		if (slave.rivalry === 0) {
			slave.rivalryTarget = 0;
		} else if (slave.rivalry < 0) {
			slave.rivalryTarget = 0;
			slave.rivalry = 0;
		}
		if (slave.vagina < 0) {
			slave.vaginalAccessory = "none";
			slave.chastityVagina = 0;
			if (slave.piercing) {
				slave.piercing.vagina.weight = 0;
			}
		}
		if (slave.dick === 0) {
			slave.dickAccessory = "none";
			slave.chastityPenis = 0;
			slave.dickTat = 0;
			if (slave.piercing) {
				slave.piercing.dick.weight = 0;
			}
		}
		if (!hasAnyArms(slave)) {
			slave.armsTat = 0;
			slave.nails = 0;
			slave.armAccessory = "none";
		}
		if (!hasAnyLegs(slave)) {
			slave.heels = 0;
			slave.shoes = "none";
			slave.legAccessory = "none";
			slave.legsTat = 0;
		}
		/* irregular leptin production weight gain/loss setter */
		if (slave.geneticQuirks.wGain === 2 && slave.geneticQuirks.wLoss === 2) {
			slave.weightDirection = either(-1, 1);
		} else if (slave.geneticQuirks.wLoss === 2) {
			slave.weightDirection = -1;
		} else if (slave.geneticQuirks.wGain === 2 || slave.geneMods.livestock === 1) {
			slave.weightDirection = 1;
		} else {
			slave.weightDirection = 0;
		}
		/* Fix some possible floating point rounding errors, and bring precision to one decimal place. */
		V.PC.energy = Math.clamp(V.PC.energy.toFixed(1), 0, 100);
		SlaveStatClamp(slave);
		slave.energy = Math.clamp(slave.energy.toFixed(1), 0, 100);
		slave.attrXY = Math.clamp(slave.attrXY.toFixed(1), 0, 100);
		slave.attrXX = Math.clamp(slave.attrXX.toFixed(1), 0, 100);
		if (slave.fetishStrength > 95) {
			slave.fetishStrength = 100;
		} else {
			slave.fetishStrength = Math.clamp(slave.fetishStrength.toFixed(1), 0, 100);
		}
		slave.weight = Math.clamp(slave.weight.toFixed(1), -100, 200);
		slave.butt = Number(slave.butt.toFixed(1));
		slave.muscles = Math.clamp(slave.muscles.toFixed(1), -100, 100);
		slave.face = Math.clamp(slave.face.toFixed(1), -100, 100);
		slave.lips = Math.clamp(slave.lips.toFixed(1), 0, 100);
		slave.skill.oral = Math.clamp(slave.skill.oral.toFixed(1), 0, 100);
		slave.skill.vaginal = Math.clamp(slave.skill.vaginal.toFixed(1), 0, 100);
		slave.skill.penetrative = Math.clamp(slave.skill.penetrative.toFixed(1), 0, 100);
		slave.skill.anal = Math.clamp(slave.skill.anal.toFixed(1), 0, 100);
		slave.skill.whoring = Math.clamp(slave.skill.whoring.toFixed(1), 0, 100);
		slave.skill.entertainment = Math.clamp(slave.skill.entertainment.toFixed(1), 0, 100);
		slave.skill.combat = Math.clamp(slave.skill.combat.toFixed(1), 0, 100);
		slave.lactationAdaptation = Math.clamp(slave.lactationAdaptation.toFixed(1), 0, 200);
		slave.intelligenceImplant = Math.clamp(slave.intelligenceImplant.toFixed(1), -15, 30);
		slave.prematureBirth = 0;
		if (V.HGSuiteEquality === 1 && V.HeadGirlID !== 0 && slave.devotion > 50) {
			if (slave.assignment === Job.HEADGIRLSUITE) {
				newHG = slave.ID;
			} else if (slave.ID === V.HeadGirlID) {
				oldHG = slave.ID;
			}
		}
		/* AVERAGE VALUES UPDATE */
		if (assignmentVisible(slave)) {
			V.averageTrust += slave.trust;
			V.averageDevotion += slave.devotion;
			slavesContributing++;
		} else if (
			![Job.CELLBLOCK, Job.ARCADE, Job.BABY_FACTORY].includes(slave.assignment) &&
			(slave.assignment !== Job.DAIRY || V.dairyRestraintsSetting < 2)
		) {
			V.averageTrust += slave.trust * 0.5;
			V.averageDevotion += slave.devotion * 0.5;
			slavesContributing += 0.5;
		}
		if (V.studio === 1) {
			const activeGenres = App.Porn.getAllGenres().filter((g) => slave.porn.fame[g.fameVar] > 0);
			for (const genre of activeGenres) {
				V.pornStars[genre.fameVar].p1count++;
			}
		}
		if (slave.choosesOwnAssignment > 0) {
			assignJob(slave, Job.CHOICE);
		}
	}
	if (slavesContributing !== 0) {
		V.averageTrust = V.averageTrust / slavesContributing;
		V.averageDevotion = V.averageDevotion / slavesContributing;
	}
	V.enduringTrust = (V.averageTrust + (V.enduringTrust * 3)) / 4;
	V.enduringDevotion = (V.averageDevotion + (V.enduringDevotion * 3)) / 4;

	if (oldHG !== -1 && newHG !== -1) {
		const oldTimeInGrade = V.HGTimeInGrade;
		// preserve time in grade during HG swaps
		const keepHelpingHG = (V.personalAttention.task === PersonalAttention.SUPPORTHG); // keep removeJob from clearing PC HG supporting.
		removeJob(getSlave(newHG), Job.HEADGIRLSUITE);
		assignJob(getSlave(oldHG), Job.HEADGIRLSUITE);
		assignJob(getSlave(newHG), Job.HEADGIRL);
		getSlave(newHG).diet = Diet.HEALTHY;
		V.HGTimeInGrade = oldTimeInGrade;
		if (keepHelpingHG) {
			V.personalAttention.task = PersonalAttention.SUPPORTHG;
		}
	}

	if (V.PC.refreshment.includes("fertility")) {
		V.PC.forcedFertDrugs = Math.max(+V.PC.forcedFertDrugs, 1);
	} else if (V.PC.forcedFertDrugs > 0) {
		V.PC.forcedFertDrugs--;
	}

	if (V.FCTV.receiver > 0) {
		if (V.FCTV.pcViewership.frequency !== -1) {
			// Count down to 0 for a show
			V.FCTV.pcViewership.count = Math.max((V.FCTV.pcViewership.count - 1), 0);
		}
	}

	V.week++;
	V.arcologies[0].weeks++;

	// Plastic surgeon stuff
	if (V.pSurgery.cooldown > 0) {
		V.pSurgery.cooldown--;
	}
	if (FutureSocieties.isActive('FSRepopulationFocus') || V.pSurgery.nursePreg !== 0) {
		V.pSurgery.nursePreg++;
		if (V.pSurgery.cooldown > 0 && V.pSurgery.nursePreg > 36) {
			V.pSurgery.nursePreg = 0;
		} else if (V.pSurgery.nursePreg > 40) {
			V.pSurgery.nursePreg = -3;
		}
	}

	if (V.doctor.state > 1) {
		V.doctor.state = 1;
	}

	// advance the event queue
	if (V.eventQueue[0] && V.eventQueue[0].length > 0) {
		console.log("These events were queued for this week, but got skipped: ", V.eventQueue[0]);
	}
	V.eventQueue.shift();

	if (V.secExpEnabled > 0) {
		if (V.SecExp.buildings.riotCenter) {
			V.SecExp.buildings.riotCenter.sentUnitCooldown = Math.max(V.SecExp.buildings.riotCenter.sentUnitCooldown - 1, 0);
		}
		V.SecExp.proclamation.cooldown = Math.max(V.SecExp.proclamation.cooldown - 1, 0);
		V.SecExp.war = {};
	}

	App.EndWeek.weather();

	if (V.boomerangWeeks) {
		V.boomerangWeeks++;
	} else {
		V.boomerangSlave = 0;
	}
	if (V.traitorWeeks) {
		V.traitorWeeks++;
	}

	V.thisWeeksFSWares = V.merchantFSWares.randomMany(2);
	V.thisWeeksIllegalWares = V.merchantIllegalWares.randomMany(1);
	V.prisonCircuitIndex++;
	if (V.prisonCircuit[V.prisonCircuitIndex] === "juvenile detention" && (V.minimumSlaveAge >= 16 || V.pedo_mode === 1)) {
		V.prisonCircuitIndex++; // skip juvenile detention if juvenile slaves are not allowed, or we're in pedo mode (where all prisoners are juvenile)
	}
	if (V.prisonCircuitIndex >= V.prisonCircuit.length) {
		V.prisonCircuitIndex = 0;
	}

	V.RIESkip = [];
	V.independenceDay = 1;
	V.coursed = 0;
	V.JFC.reorder = 0;
	V.customSlaveReorder = 0;
	V.prestigeAuctioned = 0;
	V.eliteAuctioned = 0;
	V.shelterSlave = 0;
	V.shelterSlaveBought = 0;
	V.slaveMarketLimit = 10 + (V.rep / 1000);
	V.slavesSeen = 0;
	V.slavesSacrificedThisWeek = 0;

	if (V.pit) {
		V.pit.fought = false;
	}

	V.activeSlave = 0;
	V.returnTo = "";

	if (V.autosave !== 0) {
		// @ts-ignore
		Save.autosave.save("Week Start Autosave");
	}

	if (V.SF.Toggle && V.SF.FS.Tension > 100) {
		App.Mods.SF.fsIntegration.crisis();
	}
	V.NaNArray = findNaN();

	// regenerate old slave images
	if (V.imageChoice === 6 && V.aiAutoGen && V.aiAutoGenFrequency > 0) {
		// executing this between DOM loads still picks up the "temporary-images" tag of the event passages, so we'll queue auto regeneration for a DOM to load without the tag. (We're not calling this from the "Main" passage to ensure it isn't over-called by reloading saves)
		(async () => {
			const sleep = () => new Promise(r => setTimeout(r, 100));
			while (App.Art.GenAI.client.isTemporaryImage()) {
				await sleep();
			}
			V.slaves.forEach(s => {
				if ((V.week - s.weekAcquired) % V.aiAutoGenFrequency === 0){
					App.Art.GenAI.client.updateSlave(s, null, false)
						.catch(error => {
							console.log(error.message || error);
						});
				}
			});
		})();
	}

	function agePCEffects() {
		switch (V.PC.actualAge) {
			case 3:
				V.AgeTrainingLowerBoundPC = 18;
				V.AgeTrainingUpperBoundPC = 20;
				V.AgeEffectOnTrainerPricingPC = .1;
				V.AgeEffectOnTrainerEffectivenessPC = .1;
				break;
			case 4:
				V.AgeTrainingLowerBoundPC = 17;
				V.AgeTrainingUpperBoundPC = 19;
				V.AgeEffectOnTrainerPricingPC = .15;
				V.AgeEffectOnTrainerEffectivenessPC = .15;
				break;
			case 5:
				V.AgeTrainingLowerBoundPC = 16;
				V.AgeTrainingUpperBoundPC = 18;
				V.AgeEffectOnTrainerPricingPC = .35;
				V.AgeEffectOnTrainerEffectivenessPC = .35;
				break;
			case 6:
				V.AgeTrainingLowerBoundPC = 15;
				V.AgeTrainingUpperBoundPC = 17;
				V.AgeEffectOnTrainerPricingPC = .55;
				V.AgeEffectOnTrainerEffectivenessPC = .55;
				break;
			case 7:
				V.AgeTrainingLowerBoundPC = 14;
				V.AgeTrainingUpperBoundPC = 16;
				V.AgeEffectOnTrainerPricingPC = .75;
				V.AgeEffectOnTrainerEffectivenessPC = .75;
				break;
			case 8:
				V.AgeTrainingLowerBoundPC = 13;
				V.AgeTrainingUpperBoundPC = 15;
				V.AgeEffectOnTrainerPricingPC = .85;
				V.AgeEffectOnTrainerEffectivenessPC = .85;
				break;
			case 9:
				V.AgeTrainingLowerBoundPC = 12;
				V.AgeTrainingUpperBoundPC = 14;
				V.AgeEffectOnTrainerPricingPC = 1.00;
				V.AgeEffectOnTrainerEffectivenessPC = 1.00;
				break;
			case 10:
				V.AgeTrainingLowerBoundPC = 11;
				V.AgeTrainingUpperBoundPC = 13;
				V.AgeEffectOnTrainerPricingPC = 1.0005;
				V.AgeEffectOnTrainerEffectivenessPC = 1.0005;
				break;
			case 11:
				V.AgeTrainingLowerBoundPC = 10;
				V.AgeTrainingUpperBoundPC = 12;
				V.AgeEffectOnTrainerPricingPC = 1.01;
				V.AgeEffectOnTrainerEffectivenessPC = 1.01;
				break;
			case 12:
				V.AgeTrainingLowerBoundPC = 9;
				V.AgeTrainingUpperBoundPC = 11;
				V.AgeEffectOnTrainerPricingPC = 1.02;
				V.AgeEffectOnTrainerEffectivenessPC = 1.02;
				break;
			case 13:
				V.AgeTrainingLowerBoundPC = 8;
				V.AgeTrainingUpperBoundPC = 10;
				V.AgeEffectOnTrainerPricingPC = 1.03;
				V.AgeEffectOnTrainerEffectivenessPC = 1.03;
				break;
			case 14:
				V.AgeTrainingLowerBoundPC = 7;
				V.AgeTrainingUpperBoundPC = 9;
				V.AgeEffectOnTrainerPricingPC = 1.04;
				V.AgeEffectOnTrainerEffectivenessPC = 1.04;
				break;
			case 15:
				V.AgeTrainingLowerBoundPC = 6;
				V.AgeTrainingUpperBoundPC = 8;
				V.AgeEffectOnTrainerPricingPC = 1.05;
				V.AgeEffectOnTrainerEffectivenessPC = 1.05;
				break;
			case 16:
				V.AgeTrainingLowerBoundPC = 5;
				V.AgeTrainingUpperBoundPC = 7;
				V.AgeEffectOnTrainerPricingPC = 1.06;
				V.AgeEffectOnTrainerEffectivenessPC = 1.06;
				break;
			case 17:
				V.AgeTrainingLowerBoundPC = 4;
				V.AgeTrainingUpperBoundPC = 6;
				V.AgeEffectOnTrainerPricingPC = 1.07;
				V.AgeEffectOnTrainerEffectivenessPC = 1.07;
				break;
			case 18:
				V.AgeTrainingLowerBoundPC = 3;
				V.AgeTrainingUpperBoundPC = 5;
				V.AgeEffectOnTrainerPricingPC = 1.08;
				V.AgeEffectOnTrainerEffectivenessPC = 1.08;
				break;
		}
	}
};

repo_name: Arkerthan/fc

license: mit


code:
App.EndWeek.weather = function() {
	if (V.weatherRemaining === 0) {
		if (V.continent === "Africa") {
			V.weatherType = either(1, 1, 1, 1, 1, 2, 3, 4, 4, 5, 6, 6);
		} else if (V.continent === "Asia") {
			V.weatherType = either(1, 2, 2, 2, 2, 3, 4, 4, 5, 6);
		} else if (V.continent === "Australia") {
			V.weatherType = either(1, 1, 1, 2, 2, 2, 3, 4, 4, 5, 6);
		} else if (V.continent === "Western Europe") {
			V.weatherType = either(1, 2, 2, 3, 4, 5, 5, 6);
		} else if (V.continent === "Central Europe") {
			V.weatherType = either(1, 2, 3, 4, 5, 5, 5, 6);
		} else if (V.continent === "Scandinavia") {
			V.weatherType = either(1, 2, 3, 4, 5, 5, 5, 5, 5, 6);
		} else if (V.continent === "Eastern Europe") {
			V.weatherType = either(1, 2, 3, 4, 4, 5, 5, 5, 6);
		} else if (V.continent === "Southern Europe") {
			V.weatherType = either(1, 1, 1, 2, 2, 3, 4, 4, 5, 6);
		} else if (V.continent === "Brazil") {
			V.weatherType = either(1, 1, 2, 3, 3, 3, 4, 4, 5, 6);
		} else if (V.continent === "Japan") {
			V.weatherType = either(1, 2, 2, 2, 3, 4, 4, 5, 6, 6);
		} else if (V.continent === "the Middle East") {
			V.weatherType = either(1, 1, 1, 1, 1, 2, 3, 4, 4, 5, 6);
		} else if (V.continent === "North America") {
			V.weatherType = either(1, 2, 3, 3, 4, 5, 6, 6, 6);
		} else if (V.continent === "South America") {
			V.weatherType = either(1, 1, 2, 3, 3, 3, 4, 4, 5, 6);
		} else if (V.terrain === "oceanic") {
			V.weatherType = either(1, 2, 2, 2, 2, 2, 3, 4, 5, 6);
		}
		V.weatherRemaining = random(3, 6);
	}

	if (V.weatherLastWeek === 0) {
		V.weatherLastWeek = 1;
	}

	const seed = random(1, 10);
	if (V.weatherType === 1) {
		if (V.week < 25) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.hotNice.random();
				V.weatherLastWeek = 1;
			} else {
				V.weatherToday = App.Data.Weather.hotLight.random();
				V.weatherLastWeek = 2;
			}
		} else if (V.week < 50 && V.weatherLastWeek === 1) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.hotNice.random();
				V.weatherLastWeek = 1;
			} else {
				V.weatherToday = App.Data.Weather.hotLight.random();
				V.weatherLastWeek = 2;
			}
		} else if (V.week < 50 && V.weatherLastWeek === 2) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.hotNice.random();
				V.weatherLastWeek = 1;
			} else if (seed > 2) {
				V.weatherToday = App.Data.Weather.hotLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.hotHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week < 50 && V.weatherLastWeek === 3) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.hotLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.hotHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week < 75 && V.weatherLastWeek === 1) {
			if (seed > 6) {
				V.weatherToday = App.Data.Weather.hotNice.random();
				V.weatherLastWeek = 1;
			} else {
				V.weatherToday = App.Data.Weather.hotLight.random();
				V.weatherLastWeek = 2;
			}
		} else if (V.week < 75 && V.weatherLastWeek === 2) {
			if (seed > 6) {
				V.weatherToday = App.Data.Weather.hotNice.random();
				V.weatherLastWeek = 1;
			} else if (seed > 3) {
				V.weatherToday = App.Data.Weather.hotLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.hotHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week < 75 && V.weatherLastWeek === 3) {
			if (seed > 5) {
				V.weatherToday = App.Data.Weather.hotLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.hotHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week > 75 && V.weatherLastWeek === 1) {
			if (seed > 8) {
				V.weatherToday = App.Data.Weather.hotNice.random();
				V.weatherLastWeek = 1;
			} else {
				V.weatherToday = App.Data.Weather.hotLight.random();
				V.weatherLastWeek = 2;
			}
		} else if (V.week > 75 && V.weatherLastWeek === 2) {
			if (seed > 7) {
				V.weatherToday = App.Data.Weather.hotNice.random();
				V.weatherLastWeek = 1;
			} else if (seed > 5) {
				V.weatherToday = App.Data.Weather.hotLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.hotHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week > 75 && V.weatherLastWeek === 3) {
			if (seed > 6) {
				V.weatherToday = App.Data.Weather.hotLight.random();
				V.weatherLastWeek = 2;
			} else if (seed > 2) {
				V.weatherToday = App.Data.Weather.hotHeavy.random();
				V.weatherLastWeek = 3;
			} else {
				V.weatherToday = App.Data.Weather.hotExtreme.random();
				V.weatherLastWeek = 4;
			}
		} else if (V.week > 75 && V.weatherLastWeek === 4) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.hotHeavy.random();
				V.weatherLastWeek = 3;
			} else {
				V.weatherToday = App.Data.Weather.hotExtreme.random();
				V.weatherLastWeek = 4;
			}
		}
	} else if (V.weatherType === 2) {
		if (V.week < 25) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.windyNice.random();
				V.weatherLastWeek = 1;
			} else {
				V.weatherToday = App.Data.Weather.windyLight.random();
				V.weatherLastWeek = 2;
			}
		} else if (V.week < 50 && V.weatherLastWeek === 1) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.windyNice.random();
				V.weatherLastWeek = 1;
			} else {
				V.weatherToday = App.Data.Weather.windyLight.random();
				V.weatherLastWeek = 2;
			}
		} else if (V.week < 50 && V.weatherLastWeek === 2) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.windyNice.random();
				V.weatherLastWeek = 1;
			} else if (seed > 2) {
				V.weatherToday = App.Data.Weather.windyLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.windyHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week < 50 && V.weatherLastWeek === 3) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.windyLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.windyHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week < 75 && V.weatherLastWeek === 1) {
			if (seed > 6) {
				V.weatherToday = App.Data.Weather.windyNice.random();
				V.weatherLastWeek = 1;
			} else {
				V.weatherToday = App.Data.Weather.windyLight.random();
				V.weatherLastWeek = 2;
			}
		} else if (V.week < 75 && V.weatherLastWeek === 2) {
			if (seed > 6) {
				V.weatherToday = App.Data.Weather.windyNice.random();
				V.weatherLastWeek = 1;
			} else if (seed > 3) {
				V.weatherToday = App.Data.Weather.windyLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.windyHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week < 75 && V.weatherLastWeek === 3) {
			if (seed > 5) {
				V.weatherToday = App.Data.Weather.windyLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.windyHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week > 75 && V.weatherLastWeek === 1) {
			if (seed > 8) {
				V.weatherToday = App.Data.Weather.windyNice.random();
				V.weatherLastWeek = 1;
			} else {
				V.weatherToday = App.Data.Weather.windyLight.random();
				V.weatherLastWeek = 2;
			}
		} else if (V.week > 75 && V.weatherLastWeek === 2) {
			if (seed > 7) {
				V.weatherToday = App.Data.Weather.windyNice.random();
				V.weatherLastWeek = 1;
			} else if (seed > 5) {
				V.weatherToday = App.Data.Weather.windyLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.windyHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week > 75 && V.weatherLastWeek === 3) {
			if (seed > 6) {
				V.weatherToday = App.Data.Weather.windyLight.random();
				V.weatherLastWeek = 2;
			} else if (seed > 2) {
				V.weatherToday = App.Data.Weather.windyHeavy.random();
				V.weatherLastWeek = 3;
			} else {
				V.weatherToday = App.Data.Weather.windyExtreme.random();
				V.weatherLastWeek = 4;
			}
		} else if (V.week > 75 && V.weatherLastWeek === 4) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.windyHeavy.random();
				V.weatherLastWeek = 3;
			} else {
				V.weatherToday = App.Data.Weather.windyExtreme.random();
				V.weatherLastWeek = 4;
			}
		}
	} else if (V.weatherType === 3) {
		if (V.week < 25) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.smokyNice.random();
				V.weatherLastWeek = 1;
			} else {
				V.weatherToday = App.Data.Weather.smokyLight.random();
				V.weatherLastWeek = 2;
			}
		} else if (V.week < 50 && V.weatherLastWeek === 1) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.smokyNice.random();
				V.weatherLastWeek = 1;
			} else {
				V.weatherToday = App.Data.Weather.smokyLight.random();
				V.weatherLastWeek = 2;
			}
		} else if (V.week < 50 && V.weatherLastWeek === 2) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.smokyNice.random();
				V.weatherLastWeek = 1;
			} else if (seed > 2) {
				V.weatherToday = App.Data.Weather.smokyLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.smokyHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week < 50 && V.weatherLastWeek === 3) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.smokyLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.smokyHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week < 75 && V.weatherLastWeek === 1) {
			if (seed > 6) {
				V.weatherToday = App.Data.Weather.smokyNice.random();
				V.weatherLastWeek = 1;
			} else {
				V.weatherToday = App.Data.Weather.smokyLight.random();
				V.weatherLastWeek = 2;
			}
		} else if (V.week < 75 && V.weatherLastWeek === 2) {
			if (seed > 6) {
				V.weatherToday = App.Data.Weather.smokyNice.random();
				V.weatherLastWeek = 1;
			} else if (seed > 3) {
				V.weatherToday = App.Data.Weather.smokyLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.smokyHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week < 75 && V.weatherLastWeek === 3) {
			if (seed > 5) {
				V.weatherToday = App.Data.Weather.smokyLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.smokyHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week > 75 && V.weatherLastWeek === 1) {
			if (seed > 8) {
				V.weatherToday = App.Data.Weather.smokyNice.random();
				V.weatherLastWeek = 1;
			} else {
				V.weatherToday = App.Data.Weather.smokyLight.random();
				V.weatherLastWeek = 2;
			}
		} else if (V.week > 75 && V.weatherLastWeek === 2) {
			if (seed > 7) {
				V.weatherToday = App.Data.Weather.smokyNice.random();
				V.weatherLastWeek = 1;
			} else if (seed > 5) {
				V.weatherToday = App.Data.Weather.smokyLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.smokyHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week > 75 && V.weatherLastWeek === 3) {
			if (seed > 6) {
				V.weatherToday = App.Data.Weather.smokyLight.random();
				V.weatherLastWeek = 2;
			} else if (seed > 2) {
				V.weatherToday = App.Data.Weather.smokyHeavy.random();
				V.weatherLastWeek = 3;
			} else {
				V.weatherToday = App.Data.Weather.smokyExtreme.random();
				V.weatherLastWeek = 4;
			}
		} else if (V.week > 75 && V.weatherLastWeek === 4) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.smokyHeavy.random();
				V.weatherLastWeek = 3;
			} else {
				V.weatherToday = App.Data.Weather.smokyExtreme.random();
				V.weatherLastWeek = 4;
			}
		}
	} else if (V.weatherType === 4) {
		if (V.week < 25) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.toxicNice.random();
				V.weatherLastWeek = 1;
			} else {
				V.weatherToday = App.Data.Weather.toxicLight.random();
				V.weatherLastWeek = 2;
			}
		} else if (V.week < 50 && V.weatherLastWeek === 1) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.toxicNice.random();
				V.weatherLastWeek = 1;
			} else {
				V.weatherToday = App.Data.Weather.toxicLight.random();
				V.weatherLastWeek = 2;
			}
		} else if (V.week < 50 && V.weatherLastWeek === 2) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.toxicNice.random();
				V.weatherLastWeek = 1;
			} else if (seed > 2) {
				V.weatherToday = App.Data.Weather.toxicLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.toxicHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week < 50 && V.weatherLastWeek === 3) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.toxicLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.toxicHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week < 75 && V.weatherLastWeek === 1) {
			if (seed > 6) {
				V.weatherToday = App.Data.Weather.toxicNice.random();
				V.weatherLastWeek = 1;
			} else {
				V.weatherToday = App.Data.Weather.toxicLight.random();
				V.weatherLastWeek = 2;
			}
		} else if (V.week < 75 && V.weatherLastWeek === 2) {
			if (seed > 6) {
				V.weatherToday = App.Data.Weather.toxicNice.random();
				V.weatherLastWeek = 1;
			} else if (seed > 3) {
				V.weatherToday = App.Data.Weather.toxicLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.toxicHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week < 75 && V.weatherLastWeek === 3) {
			if (seed > 5) {
				V.weatherToday = App.Data.Weather.toxicLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.toxicHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week > 75 && V.weatherLastWeek === 1) {
			if (seed > 8) {
				V.weatherToday = App.Data.Weather.toxicNice.random();
				V.weatherLastWeek = 1;
			} else {
				V.weatherToday = App.Data.Weather.toxicLight.random();
				V.weatherLastWeek = 2;
			}
		} else if (V.week > 75 && V.weatherLastWeek === 2) {
			if (seed > 7) {
				V.weatherToday = App.Data.Weather.toxicNice.random();
				V.weatherLastWeek = 1;
			} else if (seed > 5) {
				V.weatherToday = App.Data.Weather.toxicLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.toxicHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week > 75 && V.weatherLastWeek === 3) {
			if (seed > 6) {
				V.weatherToday = App.Data.Weather.toxicLight.random();
				V.weatherLastWeek = 2;
			} else if (seed > 2) {
				V.weatherToday = App.Data.Weather.toxicHeavy.random();
				V.weatherLastWeek = 3;
			} else {
				V.weatherToday = App.Data.Weather.toxicExtreme.random();
				V.weatherLastWeek = 4;
			}
		} else if (V.week > 75 && V.weatherLastWeek === 4) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.toxicHeavy.random();
				V.weatherLastWeek = 3;
			} else {
				V.weatherToday = App.Data.Weather.toxicExtreme.random();
				V.weatherLastWeek = 4;
			}
		}
	} else if (V.weatherType === 5) {
		if (V.week < 25) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.coldNice.random();
				V.weatherLastWeek = 1;
			} else {
				V.weatherToday = App.Data.Weather.coldLight.random();
				V.weatherLastWeek = 2;
			}
		} else if (V.week < 50 && V.weatherLastWeek === 1) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.coldNice.random();
				V.weatherLastWeek = 1;
			} else {
				V.weatherToday = App.Data.Weather.coldLight.random();
				V.weatherLastWeek = 2;
			}
		} else if (V.week < 50 && V.weatherLastWeek === 2) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.coldNice.random();
				V.weatherLastWeek = 1;
			} else if (seed > 2) {
				V.weatherToday = App.Data.Weather.coldLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.coldHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week < 50 && V.weatherLastWeek === 3) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.coldLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.coldHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week < 75 && V.weatherLastWeek === 1) {
			if (seed > 6) {
				V.weatherToday = App.Data.Weather.coldNice.random();
				V.weatherLastWeek = 1;
			} else {
				V.weatherToday = App.Data.Weather.coldLight.random();
				V.weatherLastWeek = 2;
			}
		} else if (V.week < 75 && V.weatherLastWeek === 2) {
			if (seed > 6) {
				V.weatherToday = App.Data.Weather.coldNice.random();
				V.weatherLastWeek = 1;
			} else if (seed > 3) {
				V.weatherToday = App.Data.Weather.coldLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.coldHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week < 75 && V.weatherLastWeek === 3) {
			if (seed > 5) {
				V.weatherToday = App.Data.Weather.coldLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.coldHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week > 75 && V.weatherLastWeek === 1) {
			if (seed > 8) {
				V.weatherToday = App.Data.Weather.coldNice.random();
				V.weatherLastWeek = 1;
			} else {
				V.weatherToday = App.Data.Weather.coldLight.random();
				V.weatherLastWeek = 2;
			}
		} else if (V.week > 75 && V.weatherLastWeek === 2) {
			if (seed > 7) {
				V.weatherToday = App.Data.Weather.coldNice.random();
				V.weatherLastWeek = 1;
			} else if (seed > 5) {
				V.weatherToday = App.Data.Weather.coldLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.coldHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week > 75 && V.weatherLastWeek === 3) {
			if (seed > 6) {
				V.weatherToday = App.Data.Weather.coldLight.random();
				V.weatherLastWeek = 2;
			} else if (seed > 2) {
				V.weatherToday = App.Data.Weather.coldHeavy.random();
				V.weatherLastWeek = 3;
			} else {
				V.weatherToday = App.Data.Weather.coldExtreme.random();
				V.weatherLastWeek = 4;
			}
		} else if (V.week > 75 && V.weatherLastWeek === 4) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.coldHeavy.random();
				V.weatherLastWeek = 3;
			} else {
				V.weatherToday = App.Data.Weather.coldExtreme.random();
				V.weatherLastWeek = 4;
			}
		}
	} else if (V.weatherType === 6) {
		if (V.week < 25) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.tectonicNice.random();
				V.weatherLastWeek = 1;
			} else {
				V.weatherToday = App.Data.Weather.tectonicLight.random();
				V.weatherLastWeek = 2;
			}
		} else if (V.week < 50 && V.weatherLastWeek === 1) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.tectonicNice.random();
				V.weatherLastWeek = 1;
			} else {
				V.weatherToday = App.Data.Weather.tectonicLight.random();
				V.weatherLastWeek = 2;
			}
		} else if (V.week < 50 && V.weatherLastWeek === 2) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.tectonicNice.random();
				V.weatherLastWeek = 1;
			} else if (seed > 2) {
				V.weatherToday = App.Data.Weather.tectonicLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.tectonicHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week < 50 && V.weatherLastWeek === 3) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.tectonicLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.tectonicHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week < 75 && V.weatherLastWeek === 1) {
			if (seed > 6) {
				V.weatherToday = App.Data.Weather.tectonicNice.random();
				V.weatherLastWeek = 1;
			} else {
				V.weatherToday = App.Data.Weather.tectonicLight.random();
				V.weatherLastWeek = 2;
			}
		} else if (V.week < 75 && V.weatherLastWeek === 2) {
			if (seed > 6) {
				V.weatherToday = App.Data.Weather.tectonicNice.random();
				V.weatherLastWeek = 1;
			} else if (seed > 3) {
				V.weatherToday = App.Data.Weather.tectonicLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.tectonicHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week < 75 && V.weatherLastWeek === 3) {
			if (seed > 5) {
				V.weatherToday = App.Data.Weather.tectonicLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.tectonicHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week > 75 && V.weatherLastWeek === 1) {
			if (seed > 8) {
				V.weatherToday = App.Data.Weather.tectonicNice.random();
				V.weatherLastWeek = 1;
			} else {
				V.weatherToday = App.Data.Weather.tectonicLight.random();
				V.weatherLastWeek = 2;
			}
		} else if (V.week > 75 && V.weatherLastWeek === 2) {
			if (seed > 7) {
				V.weatherToday = App.Data.Weather.tectonicNice.random();
				V.weatherLastWeek = 1;
			} else if (seed > 5) {
				V.weatherToday = App.Data.Weather.tectonicLight.random();
				V.weatherLastWeek = 2;
			} else {
				V.weatherToday = App.Data.Weather.tectonicHeavy.random();
				V.weatherLastWeek = 3;
			}
		} else if (V.week > 75 && V.weatherLastWeek === 3) {
			if (seed > 6) {
				V.weatherToday = App.Data.Weather.tectonicLight.random();
				V.weatherLastWeek = 2;
			} else if (seed > 2) {
				V.weatherToday = App.Data.Weather.tectonicHeavy.random();
				V.weatherLastWeek = 3;
			} else {
				V.weatherToday = App.Data.Weather.tectonicExtreme.random();
				V.weatherLastWeek = 4;
			}
		} else if (V.week > 75 && V.weatherLastWeek === 4) {
			if (seed > 4) {
				V.weatherToday = App.Data.Weather.tectonicHeavy.random();
				V.weatherLastWeek = 3;
			} else {
				V.weatherToday = App.Data.Weather.tectonicExtreme.random();
				V.weatherLastWeek = 4;
			}
		}
	}
};


code:
// I'm thinking of tearing this out of the pregnancy breast growth and instead taking a start point and an end point and then reporting a summation of any noteworthy changes after the physical block of the week.
// Weight would also be relevant for this.
// Maybe even height on growth drugs?
App.EndWeek.Player.bustUp = function(PC, oldCupSize) {
	let outcome = "";

	if (oldCupSize >= 10000) {
		// do nothing
	} else if (oldCupSize >= 9000) {
		if (PC.boobs >= 10000) {
			// wip
		}
	} else if (oldCupSize >= 8500) {
		if (PC.boobs >= 9000) {
			// wip
		}
	} else if (oldCupSize >= 8000) {
		if (PC.boobs >= 8500) {
			// wip
		}
	} else if (oldCupSize >= 7500) {
		if (PC.boobs >= 8000) {
			// wip
		}
	} else if (oldCupSize >= 7000) {
		if (PC.boobs >= 7500) {
			// wip
		}
	} else if (oldCupSize >= 6500) {
		if (PC.boobs >= 7000) {
			// wip
		}
	} else if (oldCupSize >= 5500) {
		if (PC.boobs >= 6500) {
			// wip
		}
	} else if (oldCupSize >= 5100) {
		if (PC.boobs >= 5500) {
			// wip
		}
	} else if (oldCupSize >= 4700) {
		if (PC.boobs >= 5100) {
			// wip
		}
	} else if (oldCupSize >= 4300) {
		if (PC.boobs >= 4700) {
			// wip
		}
	} else if (oldCupSize >= 3950) {
		if (PC.boobs >= 4300) {
			// wip
		}
	} else if (oldCupSize >= 3600) {
		if (PC.boobs >= 3950) {
			// wip
		}
	} else if (oldCupSize >= 3250) {
		if (PC.boobs >= 3600) {
			// wip
		}
	} else if (oldCupSize >= 2900) {
		if (PC.boobs >= 3250) {
			// wip
		}
	} else if (oldCupSize >= 2600) {
		if (PC.boobs >= 2900) {
			// wip
		}
	} else if (oldCupSize >= 2300) {
		if (PC.boobs >= 2600) {
			// wip
		}
	} else if (oldCupSize >= 2050) {
		if (PC.boobs >= 2300) {
			// wip
		}
	} else if (oldCupSize >= 1800) {
		if (PC.boobs >= 2050) {
			// wip
		}
	} else if (oldCupSize >= 1600) {
		if (PC.boobs >= 1800) {
			// wip
		}
	} else if (oldCupSize >= 1400) {
		if (PC.boobs >= 1600) {
			// wip
		}
	} else if (oldCupSize >= 1200) {
		if (PC.boobs >= 1400) {
			outcome = `Your desk is steadily starting to disappear; <span class="change positive">H-cups will do that.</span>`;
		}
	} else if (oldCupSize >= 1000) {
		if (PC.boobs >= 1200) {
			outcome = `Nothing fits comfortably now; your tailor says <span class="change positive">it's your G-cup knockers.</span> Your back agrees.`;
		}
	} else if (oldCupSize >= 800) {
		if (PC.boobs >= 1000) {
			outcome = `You popped your bra when you put it on; <span class="change positive">time to order some F-cups.</span>`;
		}
	} else if (oldCupSize >= 650) {
		if (PC.boobs >= 800) {
			outcome = `Their prominence, and a quick measuring, reveals <span class="change positive">you now sport DDs.</span>`;
		}
	} else if (oldCupSize >= 500) {
		if (PC.boobs >= 650) {
			outcome = `They're big, sensitive, <span class="change positive">and now a D-cup.</span>`;
		}
	} else if (oldCupSize >= 400) {
		if (PC.boobs >= 500) {
			outcome = `They spill dramatically out of your bra now, which means <span class="change positive">you've graduated to a C-cup.</span>`;
		}
	} else if (oldCupSize >= 300) {
		if (PC.boobs >= 400) {
			outcome = `A quick measuring after your top started to feel too constricting reveals <span class="change positive">you are now a B-cup!</span>`;
		}
	} else {
		if (PC.boobs >= 300) {
			outcome = `They've gotten so big that <span class="change positive">you can now fill an A-cup bra.</span>`;
		}
	}
	return outcome;
};


code:
App.EndWeek.Player.diet = function(PC = V.PC) {
	const r = [];

	let growthGoal;
	let roll;
	let target;
	let weightShift;
	let weightLoss;
	let weightGain;
	const gigantomastiaMod = PC.geneticQuirks.gigantomastia === 2 ? (PC.geneticQuirks.macromastia === 2 ? 3 : 2) : 1;
	const rearQuirk = PC.geneticQuirks.rearLipedema === 2 ? 2 : 0;
	const boobSize = App.Medicine.fleshSize(PC, 'boobs');
	const buttSize = App.Medicine.fleshSize(PC, 'butt');
	const ballSize = PC.balls - PC.ballsImplant;

	if (canEatFood(PC)) {
		playerFoodEffects();
	} else {
		slaveFood();
		slaveFoodEffects();
	}
	outsideEffects();

	return r.join(" ");

	function playerFoodEffects() {
		switch (PC.diet) {
			case PCDiet.HEALTHY:
				r.push(`You keep to a healthy, high-quality diet befitting your station.`);
				break;
			case PCDiet.RESTRICTED:
				weightLoss = 4;
				if (PC.weightDirection === -1) {
					PC.weight -= (weightLoss + 3);
					r.push(`You stick to a strict diet, <span class="change positive">losing a lot of weight.</span>`);
				} else if (PC.weightDirection === 1) {
					PC.weight -= (weightLoss - 3);
					r.push(`Despite sticking to a strict diet, <span class="change positive">you barely lose any weight.</span>`);
				} else {
					PC.weight -= weightLoss;
					r.push(`You stick to a strict diet and <span class="change positive">lose some weight.</span>`);
				}
				PC.weight = Math.max(PC.weight, -100);
				sharedAssetLoss(weightLoss);
				if (PC.weight < -95) {
					r.push(`You cannot physically lose any more weight, so you will <span class="noteworthy">resume a normal diet</span> starting next week.`);
					PC.diet = PCDiet.HEALTHY;
				}
				break;
			case PCDiet.FATTEN: // weight gain
				weightGain = 7;
				if (PC.weightDirection === -1) {
					PC.weight += (weightGain - 3);
					r.push(`Despite gorging yourself constantly during your day, you <span class="change positive">only put on a little weight.</span>`);
				} else if (PC.weightDirection === 1) {
					PC.weight += (weightGain + 3);
					r.push(`You eat near constantly during your waking hours, gorging yourself and <span class="change positive">putting on a lot of weight.</span>`);
				} else {
					PC.weight += weightGain;
					r.push(`You eat near constantly during your waking hours, gorging yourself to <span class="change positive">put on weight.</span>`);
				}
				sharedAssetGain(weightGain);
				if (PC.weight > 200) {
					r.push(`Getting any fatter will just put your health at greater risk, so you will <span class="noteworthy">resume a normal diet</span> starting next week.`);
					PC.diet = PCDiet.HEALTHY;
				}
				PC.weight = Math.min(PC.weight, 200);
				break;
			case PCDiet.MUSCLE: // Muscle Gain
				gainMuscle();
				break;
			case PCDiet.SLIM: // Muscle Loss
				loseMuscle();
				break;
			case PCDiet.EXOTIC:
				r.push(`You stick to an unusual diet full of exotic foods and drinks, both rumored and proven, to boost your sexual energy.`);
				if (PC.dick.isBetween(0, 3) && random(1, 100) > 95) {
					r.push(`You feel like you're a bit bigger down there. A quick measuring confirms <span class="change positive">your dick has gotten fatter.</span>`);
					PC.dick += 1;
				}
				if ((PC.geneMods.NCS === 0 && PC.balls.isBetween(0, 6) && random(1, 100) > 95) || (PC.geneMods.NCS === 1 && PC.balls.isBetween(0, 3) && random(1, 100) > 99)) {
					r.push(`The <span class="change positive">added heft to your balls</span> is a pleasant side-effect.`);
					PC.balls += 1;
				}
				if (PC.vagina >= 0 && PC.vaginaLube < 2) {
					if (PC.vagina >= 0 && PC.vaginaLube === 0 && PC.energy > 20 && random(1, 100) > (100 - (PC.energy / 4))) {
						r.push(`It also gets the juices flowing; <span class="change positive">your pussy is no longer so dry.</span>`);
						PC.vaginaLube = 1;
					} else if (PC.energy > 95 && random(1, 100) > 40 + ((100 - PC.energy) * 10)) {
						r.push(`It also gets the juices really flowing; <span class="change positive">your pussy has become so wet</span> that you're soaked with arousal by the end of your meal.`);
						PC.vaginaLube = 2;
					}
				}
				break;
			case PCDiet.MEDICINAL:
				r.push(`You stick to an unusual diet full of exotic foods and drinks known for <span class="health inc">fortifying health, healing ailments, and cleansing the body.</span>`);
				if (canTaste(PC)) {
					r.push(`It is surprisingly pleasant, if a bit on the expensive side.`);
				} else {
					r.push(`It is rather expensive, so you wish you could actually taste it.`);
				}
				if (PC.health.condition <= 90) {
					improveCondition(PC, 2);
				}
				if (PC.chem > 1) {
					PC.chem--;
				}
				break;
		}
	}

	function slaveFood() {
		r.push(`Since you are only capable of eating slave food, you take extra precautions to make sure you only ever consume a blend free of any manipulative additives.`);
		if (V.feeder === 1 && ![PCDiet.FEMALE, PCDiet.MALE, PCDiet.FUTA, PCDiet.WEANING].includes(PC.diet)) {
			r.push(`The upgraded kitchen closely monitoring your diet helps in this regard.`);
		}
	}

	function slaveFoodEffects() {
		let superFetKnown;

		switch (PC.diet) {
			case PCDiet.RESTRICTED: // weight loss
				weightLoss = 5 + (V.feeder * 2);
				if (PC.weightDirection === -1) {
					PC.weight -= (weightLoss + 3);
					r.push(`You stick to a strict diet, <span class="change positive">losing a lot of weight.</span>`);
				} else if (PC.weightDirection === 1) {
					PC.weight -= (weightLoss - 3) - (V.feeder);
					r.push(`Despite sticking to a strict diet, <span class="change positive">you barely lose any weight.</span>`);
				} else {
					PC.weight -= weightLoss;
					r.push(`You stick to a strict diet and <span class="change positive">lose weight.</span>`);
				}
				PC.weight = Math.max(PC.weight, -100);
				sharedAssetLoss(weightLoss);
				if (PC.weight < -95) {
					r.push(`You cannot physically lose any more weight, so you will <span class="noteworthy">resume a normal diet</span> starting next week.`);
					PC.diet = PCDiet.HEALTHY;
				}
				break;
			case PCDiet.FATTEN: // weight gain
				weightGain = 5 + (V.feeder * 2);
				if (PC.weightDirection === -1) {
					PC.weight += Math.max((weightGain - 3) - (V.feeder), 1);
					r.push(`Despite gorging yourself on extra food throughout the day, you <span class="change positive">only put on a little weight.</span>`);
				} else if (PC.weightDirection === 1) {
					PC.weight += weightGain + 3;
					r.push(`You take extra meals throughout the day, gorging yourself and <span class="change positive">putting on a lot of weight.</span>`);
				} else {
					PC.weight += weightGain;
					r.push(`You take extra meals throughout the day, gorging yourself to <span class="change positive">put on weight.</span>`);
				}
				sharedAssetGain(weightGain);
				if (PC.weight > 200) {
					r.push(`Getting any fatter will just put your health at greater risk, so you will <span class="noteworthy">resume a normal diet</span> starting next week.`);
					PC.diet = PCDiet.HEALTHY;
				}
				PC.weight = Math.min(PC.weight, 200);
				break;
			case PCDiet.CORRECTIVE: // normalizes weight towards 0
				weightShift = 0;
				r.push(`You make an effort to eat better and get yourself back to a healthy weight.`);
				if (PC.weight < -10) {
					weightShift = V.feeder + 1;
				} else if (PC.weight > 10) {
					weightShift = -(V.feeder + 1);
				}
				if (PC.weightDirection === -1) {
					PC.weight += (weightShift - random(0, 1));
				} else if (PC.weightDirection === 1) {
					PC.weight += (weightShift + random(0, 1));
				} else {
					PC.weight += weightShift;
				}
				if (weightShift < 0) {
					if (PC.hormoneBalance > 30 && PC.geneMods.NCS !== 0) { // 'Expected' breast size based on weight for feminine-bodied slaves
						growthGoal = Math.trunc((100 + (PC.weight + 100) * 5 + 2 * PC.lactationAdaptation) * (0.85 + PC.hormoneBalance / 400) * gigantomastiaMod);
						roll = 600;
						target = Math.trunc(Math.clamp(weightShift * 20 + (boobSize - growthGoal) / 5, 0, 270));
					} else { // For masculine- and childish-bodied slaves
						growthGoal = ((PC.weight + 100) * 2 + PC.lactationAdaptation) * gigantomastiaMod;
						roll = 200;
						target = Math.trunc(Math.clamp(weightShift * 2 + (boobSize - growthGoal) / 20, 0, 68));
					}
					if (random(1, roll) <= target && gigantomastiaMod !== 3 && boobSize > 100) {
						r.push(`<span class="change negative">Your chest has gotten a little smaller.</span>`);
						if (random(1, 2) === 1) {
							PC.boobs -= 20;
						} else {
							PC.boobs -= 10 * (1 + PC.geneMods.NCS);
						}
					}
					if (PC.hormoneBalance > 30) { // 'Expected' butt size based on weight for feminine-bodied slaves, scaled up by 1000 */
						growthGoal = Math.trunc((PC.weight + 100) * 25 * (0.9 + PC.hormoneBalance / 600) * (rearQuirk / 2 + 1));
						roll = 60000;
						target = Math.trunc(Math.clamp(weightShift * 1000 + (buttSize * 1000 - growthGoal) * 2, 0, 36000));
					} else { // For masculine- and childish-bodied slaves, likewise scaled up
						growthGoal = Math.trunc((PC.weight + 100) * 12.5) * (rearQuirk / 2 + 1);
						roll = 100000;
						target = Math.trunc(Math.clamp(weightShift * 1000 + (buttSize * 1000 - growthGoal) * 4, 0, 72000));
					}
					if (random(1, roll) <= target && buttSize > 0) {
						r.push(`<span class="change negative">Your butt has shrunk a little.</span>`);
						PC.butt -= 1;
					}
				} else if (weightShift > 0) {
					if (PC.hormoneBalance > 30 && PC.geneMods.NCS !== 1) { // 'Expected' breast size based on weight for feminine-bodied slaves */
						growthGoal = Math.trunc((100 + (PC.weight + 100) * 5 + 2 * PC.lactationAdaptation) * (0.85 + PC.hormoneBalance / 400) * gigantomastiaMod);
						roll = 600;
						target = Math.trunc(Math.clamp(weightShift * 20 - (boobSize - growthGoal) / 5, 0, 270));
					} else { // For masculine- and childish-bodied slaves */
						growthGoal = ((PC.weight + 100) * 2 + PC.lactationAdaptation) * gigantomastiaMod;
						roll = 200;
						target = Math.trunc(Math.clamp(weightShift * 2 - (boobSize - growthGoal) / 20, 0, 68));
					}
					if (PC.geneMods.NCS === 1) {
						roll *= 2;
					}
					if (random(1, roll) <= target) {
						r.push(`Some of the fat <span class="change positive">finds its way to your chest.</span>`);
						if (random(1, 2) === 1) {
							PC.boobs += 40 / (1 + PC.geneMods.NCS);
						} else {
							PC.boobs += 20 / (1 + PC.geneMods.NCS);
						}
					}
					if (PC.hormoneBalance > 30) { // 'Expected' butt size based on weight for feminine-bodied slaves, scaled up by 1000
						growthGoal = Math.trunc((PC.weight + 100) * 25 * (0.9 + PC.hormoneBalance / 600) * (rearQuirk / 2 + 1));
						roll = 60000;
						target = Math.trunc(Math.clamp(weightShift * 1000 - (buttSize * 1000 - growthGoal) * 2, 0, 36000));
					} else { // For masculine- and childish-bodied slaves, likewise scaled up
						growthGoal = Math.trunc((PC.weight + 100) * 12.5) * (rearQuirk / 2 + 1);
						roll = 100000;
						target = Math.trunc(Math.clamp(weightShift * 1000 - (buttSize * 1000 - growthGoal) * 4, 0, 72000));
					}
					if (PC.geneMods.NCS === 1) {
						roll *= 2;
					}
					if (random(1, roll) <= target) {
						r.push(`<span class="change positive">Your butt has gotten softer.</span>`);
						PC.butt += 1;
					}
				}
				if (PC.weight >= -10 && PC.weight <= 10) {
					r.push(`Since you have now accomplished your goal, you're going <span class="noteworthy">back to a normal diet.</span>`);
					PC.diet = PCDiet.HEALTHY;
				}
				break;
			case PCDiet.MUSCLE: // Muscle Gain
				gainMuscle();
				break;
			case PCDiet.SLIM: // Muscle Loss
				loseMuscle();
				break;
			case PCDiet.CUM:
				if (PC.balls === 0) {
					r.push(`Staying on a diet to enhance cum production is a waste of credits when you don't produce any to start with, so you're going <span class="noteworthy">back to a normal diet.</span>`);
				} else {
					r.push(`Your modified diet has had a definite effect on your cum production; your loads are larger and thicker than unusual.`);
					if ((PC.geneMods.NCS === 0 && PC.balls < 6 && random(1, 100) > 90) || (PC.geneMods.NCS === 1 && PC.balls < 3 && random(1, 100) > 95)) {
						r.push(`In addition, your <span class="change positive">balls have grown slightly</span> to better meet the demand.`);
						PC.balls += 1;
					}
				}
				break;
			case PCDiet.FEMALE: // Female Hormones
				r.push(`You make an exception for female hormones to be added to your diet, however${V.feeder === 1 ? ", with support from the upgraded kitchen" : ""}.`);
				if ((PC.ovaries === 1 || PC.mpreg === 1) && PC.balls > 0) { // herm
					if (PC.weight < (30 - (V.feeder * 20)) && PC.weightDirection !== -1) {
						r.push(`You <span class="change positive">gain a little weight</span> in all the right places.`);
						PC.weight += 1;
						if (PC.weightDirection === 1) {
							PC.weight += 2;
						}
					}
					if (PC.geneMods.NCS === 0 && PC.boobs < ((500 * gigantomastiaMod) + (V.feeder * 300))) {
						r.push(`You experience <span class="change positive">slight breast growth</span> from the extra estrogen.`);
						PC.boobs += 10;
					}
					if (PC.geneMods.NCS === 0 && PC.butt < 4 && random(1, 100) > (75 - (rearQuirk * 20))) {
						r.push(`Your developing femininity <span class="change positive">pads out</span> your rear.`);
						PC.butt += 1;
					}
					if (PC.waist > -20) {
						r.push(`Your waist <span class="change positive">slims a little</span> with your hormonal changes.`);
						PC.waist--;
					}
					if (PC.dick > 1 && (((PC.geneMods.NCS === 0) && (random(1, 100) > 95)) || ((PC.geneMods.NCS === 1) && (random(1, 100) > 43)))) {
						r.push(`Your altered body chemistry causes <span class="change negative">penile reduction.</span>`);
						PC.dick -= 1;
					}
					if (ballSize > 1 && (((PC.geneMods.NCS === 0) && (random(1, 100) > 95)) || ((PC.geneMods.NCS === 1) && (random(1, 100) > 43)))) {
						r.push(`Your altered body chemistry causes <span class="change negative">testicular shrinkage.</span>`);
						PC.balls -= 1;
					}
				} else if (PC.ovaries === 1 || PC.mpreg === 1) { // female
					if (PC.weight < (40 - (V.feeder * 15)) && PC.weightDirection !== 1) {
						r.push(`You <span class="change positive">gain a little weight</span> in all the right places.`);
						PC.weight += 1;
						if (PC.weightDirection === 1) {
							PC.weight += 2;
						}
					}
					if (PC.geneMods.NCS === 0 && PC.boobs < (600 * gigantomastiaMod) + (V.feeder * 200)) {
						r.push(`You experience <span class="change positive">slight breast growth</span> from the extra estrogen.`);
						PC.boobs += 10;
					}
					if (PC.waist > -30) {
						r.push(`Your waist <span class="change positive">slims a little</span> with your hormonal changes.`);
						PC.waist--;
					}
					if (PC.geneMods.NCS === 0 && PC.butt < 5 && random(1, 100) > (75 - (rearQuirk * 20))) {
						r.push(`Your developing femininity <span class="change positive">pads out</span> your rear.`);
						PC.butt += 1;
					}
				} else if (PC.balls > 0) { // male
					if (PC.weight < (30 - (V.feeder * 10)) && PC.weightDirection !== 1) {
						r.push(`You <span class="change positive">gain a little weight</span> in all the right places.`);
						PC.weight += 1;
						if (PC.weightDirection === 1) {
							PC.weight += 2;
						}
					}
					if (PC.geneMods.NCS === 0 && PC.boobs < (400 * gigantomastiaMod) + (V.feeder * 150)) {
						r.push(`You experience <span class="change positive">slight breast growth</span> from the extra estrogen.`);
						PC.boobs += 10;
					}
					if (PC.waist > -10) {
						r.push(`Your waist <span class="change positive">slims a little</span> with your hormonal changes.`);
						PC.waist--;
					}
					if (PC.geneMods.NCS === 0 && PC.butt < 3 && random(1, 100) > (75 - (rearQuirk * 20))) {
						r.push(`Your developing femininity <span class="change positive">pads out</span> your rear.`);
						PC.butt += 1;
					}
					if (PC.dick > 1 && (((PC.geneMods.NCS === 0) && (random(1, 100) > 99)) || ((PC.geneMods.NCS === 1) && (random(1, 100) > 48)))) {
						r.push(`Your altered body chemistry causes <span class="change negative">penile reduction.</span>`);
						PC.dick -= 1;
					}
					if (ballSize > 1 && (((PC.geneMods.NCS === 0) && (random(1, 100) > 99)) || ((PC.geneMods.NCS === 1) && (random(1, 100) > 48)))) {
						r.push(`Your altered body chemistry causes <span class="change negative">testicular shrinkage.</span>`);
						PC.balls -= 1;
					}
				}
				if (PC.energy < 70) {
					r.push(`The hormones stir your sex drive up, leaving you <span class="change positive">a little more energetic</span> in bed.`);
					PC.energy += 1;
				}
				if (PC.geneticQuirks.galactorrhea === 2 && random(1, 100) < PC.hormoneBalance && PC.lactation === 0) {
					if (V.geneticMappingUpgrade >= 1) {
						r.push(`The female hormones spur your galactorrhea into <span class="change positive">triggering your milk production.</span>`);
					} else {
						r.push(`The female hormones apparently come with <span class="change positive">a side-effect of lactation</span> that you were not informed about.`);
					}
					PC.lactation = 1;
					PC.lactationDuration = 2;
				}
				break;
			case PCDiet.MALE: // Male Hormones
				r.push(`You make an exception for male hormones to be added to your diet, however${V.feeder === 1 ? ", with support from the upgraded kitchen" : ""}.`);
				if ((PC.ovaries === 1 || PC.mpreg === 1) && PC.balls > 0) { // herm
					if (PC.muscles < 30) {
						r.push(`You feel stronger, an observation supported by your <span class="change positive">growing muscles.</span>`);
						PC.muscles += 1 + V.feeder + PC.geneticQuirks.mGain;
					}
					if (PC.geneMods.NCS === 0 && PC.dick < 4 && random(1, 100) > 95 - (V.feeder * 5)) {
						if (canAchieveErection(PC)) {
							r.push(`You notice that your <span class="change positive">erection is a little bigger than usual.</span>`);
						} else {
							r.push(`Your dick, while still limp, has gotten <span class="change positive">fatter</span> from your diet.`);
						}
						PC.dick += 1;
					}
					if (PC.geneMods.NCS === 0 && PC.balls < 3 && random(1, 100) > 95 - (V.feeder * 5)) {
						r.push(`Your balls feel heavy and full; further inspection reveals they've <span class="change positive">grown</span> under your diet.`);
						PC.balls += 1;
					}
					if ((PC.geneMods.NCS === 0 && boobSize > 400 - (V.feeder * 100)) || (PC.geneMods.NCS === 1 && boobSize > 200) && gigantomastiaMod !== 3) {
						r.push(`Your chest <span class="change negative">slims down slightly.</span>`);
						PC.boobs -= 10;
						if (PC.geneMods.NCS === 1) {
							PC.boobs -= 10;
						}
					}
					if (PC.waist < 15) {
						r.push(`The added testosterone <span class="change negative">thickens your feminine waist.</span>`);
						PC.waist++;
					}
				} else if (PC.ovaries === 1 || PC.mpreg === 1) { // female
					if (PC.muscles < 15) {
						r.push(`You feel stronger, an observation supported by your <span class="change positive">growing muscles.</span>`);
						PC.muscles += 1 + V.feeder + PC.geneticQuirks.mGain;
					}
					if ((PC.geneMods.NCS === 0 && boobSize > 500) || (PC.geneMods.NCS === 1 && boobSize > 200) && gigantomastiaMod !== 3) {
						r.push(`Your breasts <span class="change negative">lose some mass</span> from the masculinizating effects of your diet.`);
						PC.boobs -= 10;
						if (PC.geneMods.NCS === 1) {
							PC.boobs -= 10;
						}
					}
					if (PC.waist < 0) {
						r.push(`The added testosterone <span class="change negative">thickens your waist.</span>`);
						PC.waist++;
					}
				} else if (PC.balls > 0) { // male
					if (PC.muscles < 60) {
						r.push(`You feel stronger, an observation supported by your <span class="change positive">growing muscles.</span>`);
						PC.muscles += 1 + V.feeder + PC.geneticQuirks.mGain;
					}
					if (PC.geneMods.NCS === 0 && PC.dick < 4 && random(1, 100) > 95 - (V.feeder * 5)) {
						if (canAchieveErection(PC)) {
							r.push(`You notice that your <span class="change positive">erection is a little bigger than usual.</span>`);
						} else {
							r.push(`Your dick, while still limp, has gotten <span class="change positive">fatter</span> from your diet.`);
						}
						PC.dick += 1;
					}
					if (PC.geneMods.NCS === 0 && PC.balls < 3 && random(1, 100) > 95 - (V.feeder * 5)) {
						r.push(`Your balls feel heavy and full; further inspection reveals they've <span class="change positive">grown</span> under your diet.`);
						PC.balls += 1;
					}
					if (PC.waist < 30) {
						r.push(`The added testosterone <span class="change negative">thickens your waist.</span>`);
						PC.waist++;
					}
					if (boobSize > 300 && gigantomastiaMod !== 3) {
						r.push(`Your chest <span class="change negative">slims down slightly.</span>`);
						PC.boobs -= 10;
						if (PC.geneMods.NCS === 1) {
							PC.boobs -= 10;
						}
					}
				}
				if (PC.energy < 70) {
					r.push(`The hormones stir your sex drive up, leaving you <span class="change positive">a little more energetic</span> in bed.`);
					PC.energy += 1;
				}
				break;
			case PCDiet.FUTA: // Futa Hormones
				r.push(`You make an exception for a blend of sex hormones to be added to your diet, however${V.feeder === 1 ? ", with support from the upgraded kitchen" : ""}.`);
				if (PC.muscles < 90) {
					r.push(`You feel stronger, an observation supported by your <span class="change positive">growing muscles.</span>`);
					PC.muscles += 1 + V.feeder + PC.geneticQuirks.mGain;
				}
				if (PC.weight < 50 && PC.weightDirection !== -1) {
					r.push(`You <span class="change positive">gain a little weight</span> in all the right places.`);
					PC.weight += 1;
					if (PC.weightDirection === 1) {
						PC.weight += 2;
					}
				}
				if (PC.geneMods.NCS === 0 && (PC.boobs < 800 * gigantomastiaMod) + (V.feeder * 400)) {
					r.push(`You experience <span class="change positive">slight breast growth</span> from the extra estrogen.`);
					PC.boobs += 10;
				}
				if (PC.geneMods.NCS === 0 && PC.butt < 5 && random(1, 100) > (75 - (rearQuirk * 20))) {
					r.push(`Your developing femininity <span class="change positive">pads out</span> your rear.`);
					PC.butt += 1;
				}
				if (PC.geneMods.NCS === 0 && PC.dick < 5 && random(1, 100) > 90 - (V.feeder * 10)) {
					if (canAchieveErection(PC)) {
						r.push(`You notice that your <span class="change positive">erection is a little bigger than usual.</span>`);
					} else {
						r.push(`Your dick, while still limp, has gotten <span class="change positive">fatter</span> from your diet.`);
					}
					PC.dick += 1;
				}
				if (PC.geneMods.NCS === 0 && PC.balls < 5 && random(1, 100) > 90 - (V.feeder * 10)) {
					r.push(`Your balls feel heavy and full; further inspection reveals they've <span class="change positive">grown</span> under your diet.`);
					PC.balls += 1;
				}
				if (PC.waist < 0) {
					r.push(`Hormonal changes <span class="change negative">thicken your waist.</span>`);
					PC.waist++;
				} else if (PC.waist > 0) {
					r.push(`Hormonal changes <span class="change positive">thin your waist.</span>`);
					PC.waist--;
				}
				if (PC.energy < 90) {
					r.push(`All the hormones stir your sex drive up, leaving you <span class="change positive">horny and eager for sex.</span>`);
					PC.energy += 1;
				}
				if (PC.geneticQuirks.galactorrhea === 2 && random(1, 100) < PC.hormoneBalance && PC.lactation === 0) {
					if (V.geneticMappingUpgrade >= 1) {
						r.push(`Unsurprisingly, all the hormones spur your galactorrhea into <span class="change positive">triggering your milk production.</span>`);
					} else {
						r.push(`It doesn't really come as a surprise when you <span class="change positive">start lactating;</span> you are on a lot of hormones after all.`);
					}
					PC.lactation = 1;
					PC.lactationDuration = 2;
				}
				break;
			case PCDiet.CLEANSE: // chem reduce and health plus
				if (!canSmell(PC) && !canTaste(PC)) {
					r.push(`<span class="health inc">You feel spectacular</span> on this health-focused diet, even if you find other people try to avoid you, and that your slaves hold their breath when in your presence.`);
				} else if (!canSmell(PC) || !canTaste(PC)) {
					r.push(`Your specialized diet ${canTaste(PC) ? "tastes" : "smells"} awful, but leaves you <span class="health inc">feeling well</span> once you get over it.`);
				} else {
					r.push(`Your specialized diet tastes and smells awful, but leaves you <span class="health inc">feeling well</span> once you get over it.`);
				}
				if (PC.health.condition <= 90) {
					improveCondition(PC, 2);
				}
				if (PC.chem > 2) {
					PC.chem -= 2;
				}
				if (PC.health.condition > 90 && PC.chem < 10) {
					r.push(`You are in peak health now, bringing <span class="noteworthy">your cleansing diet to a close.</span>`);
					PC.diet = PCDiet.HEALTHY;
				}
				break;
			case PCDiet.FERTILITY: // + ovum and small boosts to energy and attrXY
				superFetKnown = (PC.geneticQuirks.superfetation === 2 && (V.geneticMappingUpgrade >= 1 || PC.counter.birthsTotal > 0 || PC.pregWeek > 3));
				if (!isFertile(PC) || (PC.preg !== 0 && !superFetKnown)) {
					if (PC.pregKnown === 0 && PC.preg > 0) {
						r.push(`You're on a modified diet that promotes multiples during impregnation that has suddenly stopped working for you. A quick test reveals <span class="pregnant">you're going to be a mother!</span> With it no longer having any further benefits, `);
						PC.pregKnown = 1;
					} else {
						r.push(`You're on a modified diet that promotes multiples during impregnation, but not able to actually get pregnant. With it having no benefits, `);
					}
					r.push(`<span class="noteworthy">your fertility diet is over.</span>`);
					PC.diet = PCDiet.HEALTHY;
				} else {
					if (superFetKnown && PC.pregKnown && PC.preg > 0) {
						r.push(`You're on a modified diet that promotes multiples during impregnation; needless to say, it's hard to tell if it is working or not given your state.`);
					} else {
						r.push(`You're on a modified diet that promotes multiples during impregnation, so until you get yourself knocked up you really can't say if it's working or not.`);
					}
					if (PC.energy < 45 && PC.energy > 20) {
						r.push(`That said, <span class="libido inc">you really could use a good fucking</span> right about now.`);
						PC.energy++;
					}
				}
				break;
			case PCDiet.WEANING:
				r.push(`You stick to your prescription diet with the intent to free yourself from slave food dependency.`);
				if (!PC.weaningDuration) {
					PC.weaningDuration = 0; // ugly hack, probably shouldn't initialize this here
				}
				if (PC.weaningDuration < 5) {
					healthDamage(PC, 100);
					r.push(`It gels into a dense paste in your stomach, giving you <span class="health dec">intense cramps</span> as it slowly digests.`);
				} else if (PC.weaningDuration < 14) {
					r.push(`It gels into a dense paste in your stomach, <span class="health dec">causing cramping</span> as it slowly digests.`);
					healthDamage(PC, Math.max(100 - (PC.weaningDuration * 10), 10));
				}
				if (PC.weaningDuration < 10) {
					const wombLength = PC.preg > 0 ? PC.womb.length : 0;
					r.push(`Your body has such a hard time absorbing nutrients from it that it undergoes catabolysis, <span class="change negative">breaking down fat and muscle tissue</span> in order to keep you alive. In such a desperate state, <span class="libido dec">there is just no energy left for sex.</span>`);
					PC.weight -= 10 + (wombLength * 4);
					sharedAssetLoss(20 + (wombLength * 5));
					PC.muscles -= 10 + (wombLength * 2);
					PC.energy -= 10;
					r.push(`On top of all your other problems, the undigested food has nowhere to go as your body relearns how to properly move it all the way through your gastrointestinal tract. <span class="change negative">It is steadily building up inside you,</span> adding to your discomfort as it distends your belly a little more with each passing day.`);
					PC.inflation = 1;
					PC.inflationType = "undigested food";
					PC.inflationMethod = 1;
					PC.belly += 300;
					PC.bellyFluid += 300;
					SetBellySize(PC);
				} else if (PC.weaningDuration < 14) {
					r.push(`Your body is improving at absorbing nutrients from it, but still <span class="change negative">breaks down some fat and muscle tissue</span> to make up for what it can't.`);
					PC.weight -= (-2 * PC.weaningDuration) + 28;
					PC.muscles -= (-2 * PC.weaningDuration) + 28;
					r.push(`More importantly, it is now <span class="change positive">regularly coming out the other end.</span> You're not far off from a healthy gastrointestinal tract.`);
					PC.bellyFluid = 0; // needed because deflate() and SetBellySize() don't handle undigested food
					deflate(PC);
				} else {
					r.push(`Your body is now capable of fully digesting your food and getting rid of its waste.`);
					if (PC.weaningDuration <= 19) {
						r.push(`The remainder of the diet is intended to help strengthen it further so that you may cleanly transition to eating real food once it concludes.`);
					}
				}
				// cripple .tired
				// miscarriage!
				PC.weaningDuration += 1;
				if (PC.weaningDuration === 20) {
					r.push(`You've finished your weaning diet and are <span class="change positive">now able to eat whatever you want.</span> Considering how famished you are, you'll start with everything in the kitchen; after starving for months, you deserve it. You'll worry about healthy portions next week.`);
					PC.digestiveSystem = "normal";
					PC.diet = PCDiet.FATTEN;
					PC.weaningDuration = 0;
				}
				break;
		}
	}

	function gainMuscle() {
		if (onBedRest(PC)) {
			r.push(`You aren't capable of actively working out, so you're <span class="noteworthy">back on a normal diet.</span>`);
			PC.diet = PCDiet.HEALTHY;
		} else if (isAmputee(PC)) {
			r.push(`You can't work out with no limbs, so you're <span class="noteworthy">back on a normal diet.</span>`);
			PC.diet = PCDiet.HEALTHY;
		} else {
			r.push(`You focus hard on lifting,`);
			if (PC.geneticQuirks.mGain === 2) {
				if (V.geneticMappingUpgrade >= 1) {
					r.push(`and since you have myotonic hypertrophy,`);
				} else {
					r.push(`and despite run-of-the-mill routines,`);
				}
				r.push(`<span class="change positive">rapidly bulk up.</span>`);
				PC.muscles += 10;
			} else if (PC.drugs === Drug.STEROID) {
				r.push(`and since you're on so much gear, <span class="change positive">rapidly bulk up.</span>`);
				PC.muscles += 8 + PC.geneticQuirks.mGain;
			} else if (PC.geneticQuirks.mLoss === 2) {
				if (V.geneticMappingUpgrade >= 1) {
					r.push(`but with myotonic dystrophy,`);
				} else {
					r.push(`but despite your effort,`);
				}
				r.push(`barely <span class="change positive">gain any muscle.</span>`);
				PC.muscles += 2;
			} else if (PC.balls > 0 && PC.ballType !== "sterile" && PC.hormoneBalance >= 100) {
				r.push(`but with the natural testosterone and artificial female hormones clashing in your system, <span class="change positive">gain muscle slowly.</span>`);
				PC.muscles += 3 + PC.geneticQuirks.mGain;
			} else if (PC.balls > 0 && PC.ballType !== "sterile" && PC.hormoneBalance <= -100) {
				r.push(`and with the natural testosterone and artificial male hormones in your system, <span class="change positive">rapidly bulk up.</span>`);
				PC.muscles += 8;
			} else if (PC.balls > 0 && PC.ballType !== "sterile") {
				r.push(`and with the natural testosterone in your system, <span class="change positive">efficiently bulk up.</span>`);
				PC.muscles += 5 + PC.geneticQuirks.mGain;
			} else if (PC.balls > 0) {
				r.push(`but with your useless balls making little testosterone for you to use, barely <span class="change positive">gain muscle.</span>`);
				PC.muscles += 2 + PC.geneticQuirks.mGain;
			} else if (PC.hormoneBalance <= -100) {
				r.push(`and with the artificial testosterone in your system, <span class="change positive">gain muscle.</span>`);
				PC.muscles += 5 + PC.geneticQuirks.mGain;
			} else if (PC.hormoneBalance >= 100) {
				r.push(`but with lots of female hormones in your system, barely <span class="change positive">gain muscle.</span>`);
				PC.muscles += 2 + PC.geneticQuirks.mGain;
			} else {
				r.push(`<span class="change positive">slowly bulking up.</span>`);
				PC.muscles += 3 + PC.geneticQuirks.mGain;
			}
			if ((PC.geneMods.NCS === 0 && random(1, 100) > 90) || (PC.geneMods.NCS === 1 && random(1, 100) > 45)) {
				if ((PC.geneMods.NCS === 0 && boobSize >= 200) || (PC.geneMods.NCS === 1 && boobSize > 100)) {
					if (PC.geneMods.NCS === 0) {
						r.push(`All the exercise <span class="change negative">cuts a little fat from your chest.</span>`);
						PC.boobs -= 50;
					} else {
						r.push(`All the exercise <span class="change negative">cuts some fat off your chest.</span>`);
						PC.boobs -= 100;
					}
				} else if (buttSize > 1 && (PC.geneticQuirks.rearLipedema !== 2 || (buttSize > 10 && random(1, 100) > 80))) {
					if (PC.geneMods.NCS === 0 || buttSize === 1) {
						r.push(`<span class="change negative">Your butt shrinks from your efforts.</span>`);
						PC.butt -= 1;
					} else {
						r.push(`<span class="change negative">Your butt shrinks a little from your efforts.</span>`);
						PC.butt -= 2;
					}
				}
			}
			if (random(1, 100) > 80) {
				r.push(`You <span class="health inc">feel better</span> after a successful workout.`);
				improveCondition(PC, 10);
			}
			if (PC.weight > 10 && PC.weightDirection !== 1) {
				r.push(`Unsurprisingly, the heavy workouts also <span class="change positive">burn off some excess fat.</span>`);
				PC.weight -= 2;
				if (PC.weightDirection === -1) {
					PC.weight -= 2;
				}
			}
			PC.muscles = Math.clamp(PC.muscles, -100, 100);
			if (PC.muscles >= 100) {
				r.push(`There is just no more room for muscle on your frame, so you will be <span class="noteworthy">resuming a normal diet</span> next week.`);
				PC.diet = PCDiet.HEALTHY;
			}
		}
	}

	function loseMuscle() {
		if (onBedRest(PC) || !canWalk(PC)) {
			r.push(`You aren't capable of actively working out, so you're <span class="noteworthy">back on a normal diet.</span>`);
			PC.diet = PCDiet.HEALTHY;
		} else if (PC.muscles > 0) {
			r.push(`Your workouts are centered around cardio,`);
			if (PC.geneticQuirks.mLoss === 2) {
				if (V.geneticMappingUpgrade >= 1) {
					r.push(`and since you have myotonic dystrophy,`);
				} else {
					r.push(`and despite run-of-the-mill routines,`);
				}
				r.push(`you <span class="change positive">rapidly lose musculature.</span>`);
				PC.muscles -= 10;
			} else if (PC.geneticQuirks.mGain === 2) {
				if (V.geneticMappingUpgrade >= 1) {
					r.push(`but with myotonic hypertrophy,`);
				} else {
					r.push(`but despite your effort,`);
				}
				r.push(`you <span class="change positive">barely lose any muscle.</span>`);
				PC.muscles -= 2;
			} else if (PC.drugs === Drug.STEROID) {
				r.push(`but since you're still shooting gear, you <span class="change positive">lose mass slowly.</span>`);
				PC.muscles -= 3 + PC.geneticQuirks.mLoss;
			} else if (PC.balls > 0 && PC.ballType !== "sterile" && PC.hormoneBalance <= -100) {
				r.push(`but since there's so much natural and artificial testosterone in your system, you <span class="change positive">lose mass slowly.</span>`);
				PC.muscles -= 3 + PC.geneticQuirks.mLoss;
			} else if (PC.balls > 0 && PC.ballType !== "sterile" && PC.hormoneBalance >= 100) {
				r.push(`and with your natural testosterone production counteracted by hormone treatment, you <span class="change positive">readily lose musculature.</span>`);
				PC.muscles -= 5 + PC.geneticQuirks.mLoss;
			} else if (PC.balls > 0 && PC.ballType !== "sterile") {
				r.push(`but with your natural testosterone production, you <span class="change positive">lose muscle slowly.</span>`);
				PC.muscles -= 3 + PC.geneticQuirks.mLoss;
			} else if (PC.balls > 0) {
				r.push(`and with your useless balls not producing much testosterone, you <span class="change positive">easily lose musculature.</span>`);
				PC.muscles -= 5 + PC.geneticQuirks.mLoss;
			} else if (PC.hormoneBalance >= 100) {
				r.push(`and with the female hormone treatments, your <span class="change positive">rapidly lose musculature.</span>`);
				PC.muscles -= 8 + PC.geneticQuirks.mLoss;
			} else if (PC.hormoneBalance <= -100) {
				r.push(`but under male hormone treatment, you <span class="change positive">lose muscle slowly.</span>`);
				PC.muscles -= 3 + PC.geneticQuirks.mLoss;
			} else {
				r.push(`so you <span class="change positive">steadily lose musculature.</span>`);
				PC.muscles -= 5 + PC.geneticQuirks.mLoss;
			}
			if ((PC.geneMods.NCS === 0 && random(1, 100) > 90) || (PC.geneMods.NCS === 1 && random(1, 100) > 45)) {
				if ((PC.geneMods.NCS === 0 && boobSize >= 200) || (PC.geneMods.NCS === 1 && boobSize > 100) && gigantomastiaMod !== 3) {
					if (PC.geneMods.NCS === 0) {
						r.push(`All the exercise <span class="change negative">cuts a little fat from your chest.</span>`);
						PC.boobs -= 50;
					} else {
						r.push(`All the exercise <span class="change negative">cuts some fat off your chest.</span>`);
						PC.boobs -= 100;
					}
				} else if (buttSize > 1 && (PC.geneticQuirks.rearLipedema !== 2 || (buttSize > 10 && random(1, 100) > 80))) {
					if (PC.geneMods.NCS === 0 || buttSize === 1) {
						r.push(`<span class="change negative">Your butt shrinks from your efforts.</span>`);
						PC.butt -= 1;
					} else {
						r.push(`<span class="change negative">Your butt shrinks a little from your efforts.</span>`);
						PC.butt -= 2;
					}
				}
			}
			if (random(1, 100) > 80) {
				r.push(`You <span class="health inc">feel better</span> after a successful workout.`);
				improveCondition(PC, 10);
			}
			if (PC.weight > 10 && PC.weightDirection !== 1) {
				r.push(`Unsurprisingly, the workouts also <span class="change positive">burn off some excess fat.</span>`);
				PC.weight -= 2;
				if (PC.weightDirection === -1) {
					PC.weight -= 2;
				}
			}
			PC.muscles = Math.clamp(PC.muscles, 0, 100);
			if (PC.muscles <= 0) {
				r.push(`You've finally shed the last of your visible muscles, so you will be <span class="noteworthy">resuming a normal diet</span> next week.`);
				PC.diet = PCDiet.HEALTHY;
			}
		} else {
			r.push(`You're focused on a cardio regimen to keep yourself lithe.`);
			if (PC.muscles < -10) {
				r.push(`Since you are rather weak, this routine helps build you up.`);
				PC.muscles++;
			}
			if (((PC.geneMods.NCS === 0 && boobSize >= 200) || (PC.geneMods.NCS === 1 && (boobSize > 100))) && gigantomastiaMod !== 3) {
				if (PC.geneMods.NCS === 0) {
					r.push(`All the exercise <span class="change negative">cuts a little fat from your chest.</span>`);
					PC.boobs -= 50;
				} else {
					r.push(`All the exercise <span class="change negative">cuts some fat off your chest.</span>`);
					PC.boobs -= 100;
				}
			}
			if (random(1, 100) > 50) {
				if (buttSize > 1 && (PC.geneticQuirks.rearLipedema !== 2 || (buttSize > 10 && random(1, 100) > 80))) {
					r.push(`<span class="change negative">Your butt shrinks from your efforts.</span>`);
					PC.butt -= 1;
				}
			}
			if (random(1, 100) > 50 && PC.health.condition <= 90 && PC.health.condition >= -20) {
				r.push(`You <span class="health inc">feel better</span> after a successful workout.`);
				improveCondition(PC, 5);
			}
			if (PC.weight > 10 && PC.weightDirection !== 1) {
				r.push(`Unsurprisingly, the workouts also <span class="change positive">burn off some excess fat.</span>`);
				PC.weight -= 2;
				if (PC.weightDirection === -1) {
					PC.weight -= 2;
				}
			}
		}
	}

	function sharedAssetLoss(weightMod) {
		if (PC.hormoneBalance > 30 && PC.geneMods.NCS !== 0) { // 'Expected' breast size based on weight for feminine-bodied slaves
			growthGoal = Math.trunc((100 + ((PC.weight + 100) * 5) + (2 * PC.lactationAdaptation)) * (0.85 + (PC.hormoneBalance / 400)) * gigantomastiaMod);
			roll = 300;
			target = Math.trunc(Math.clamp((weightMod * 20) + (boobSize - growthGoal) / 5, 0, 270));
		} else { // For masculine and childish-bodied slaves
			growthGoal = ((PC.weight + 100) * 2 + PC.lactationAdaptation) * gigantomastiaMod;
			roll = 75;
			target = Math.trunc(Math.clamp(weightMod * 2 + (boobSize - growthGoal) / 20, 0, 68));
		}
		if (random(1, roll) <= target && (gigantomastiaMod !== 3 && boobSize > 100)) {
			if (random(1, 2) === 1) {
				r.push(`<span class="change negative">Your chest has gotten smaller.</span>`);
				PC.boobs -= 100;
			} else {
				r.push(`<span class="change negative">Your chest has gotten a little smaller.</span>`);
				PC.boobs -= 50 * (1 + PC.geneMods.NCS);
			}
		}
		if (PC.hormoneBalance > 30) { // 'Expected' butt size based on weight for feminine-bodied slaves, scaled up by 1000
			growthGoal = Math.trunc((PC.weight + 100) * 25 * (0.9 + PC.hormoneBalance / 600) * (rearQuirk / 2 + 1));
			roll = 40000;
			target = Math.trunc(Math.clamp(weightMod * 1000 + (buttSize * 1000 - growthGoal) * 2, 0, 36000));
		} else { // For masculine- and childish-bodied slaves, likewise scaled up
			growthGoal = Math.trunc((PC.weight + 100) * 12.5) * (rearQuirk / 2 + 1);
			roll = 80000;
			target = Math.trunc(Math.clamp(weightMod * 1000 + (buttSize * 1000 - growthGoal) * 4, 0, 72000));
		}
		if (random(1, roll) <= target && buttSize > 0) {
			if (PC.geneMods.NCS === 1 && buttSize > 2) {
				r.push(`<span class="change negative">Your butt has shrunk.</span>`);
				PC.butt -= 2;
			} else {
				r.push(`<span class="change negative">Your butt has shrunk a little.</span>`);
				PC.butt -= 1;
			}
		}
	}

	function sharedAssetGain(weightMod) {
		if (PC.hormoneBalance > 30 && PC.geneMods.NCS !== 1) { // 'Expected' breast size based on weight for feminine-bodied slaves */
			growthGoal = Math.trunc((100 + (PC.weight + 100) * 5 + 2 * PC.lactationAdaptation) * (0.85 + PC.hormoneBalance / 400) * gigantomastiaMod);
			roll = 300;
			target = Math.trunc(Math.clamp(weightMod * 20 - (boobSize - growthGoal) / 5, 0, 270));
		} else { // For masculine and childish-bodied slaves
			growthGoal = ((PC.weight + 100) * 2 + PC.lactationAdaptation) * gigantomastiaMod;
			roll = 75;
			target = Math.trunc(Math.clamp(weightMod * 2 - (boobSize - growthGoal) / 20, 0, 68));
		}
		if (PC.geneMods.NCS === 1 || (V.arcologies[0].FSSlimnessEnthusiastFoodLaw === 1 && !canEatFood(PC))) {
			roll *= 2;
		}
		// PC food is not laced with hormones normally, so galactorrhea is not triggered here.
		if (random(1, roll) <= target) {
			r.push(`Some of the fat <span class="change positive">finds its way to your chest.</span>`);
			PC.boobs += (100 / random(1, 2)) / (1 + PC.geneMods.NCS);
		}
		if (PC.hormoneBalance > 30) { // 'Expected' butt size based on weight for feminine-bodied slaves, scaled up by 1000
			growthGoal = Math.trunc((PC.weight + 100) * 25 * (0.9 + PC.hormoneBalance / 600) * (rearQuirk / 2 + 1));
			roll = 40000;
			target = Math.trunc(Math.clamp(weightMod * 1000 - (buttSize * 1000 - growthGoal) * 2, 0, 36000));
		} else { // For masculine and childish-bodied slaves, likewise scaled up
			growthGoal = Math.trunc((PC.weight + 100) * 12.5) * (rearQuirk / 2 + 1);
			roll = 80000;
			target = Math.trunc(Math.clamp(weightMod * 1000 - (buttSize * 1000 - growthGoal) * 4, 0, 72000));
		}
		if (PC.geneMods.NCS === 1 || (V.arcologies[0].FSSlimnessEnthusiastFoodLaw === 1 && !canEatFood(PC))) {
			roll *= 2;
		}
		if (random(1, roll) <= target) {
			r.push(`Your butt <span class="change positive">feels bigger and softer.</span>`);
			PC.butt += 1;
		}
	}

	function outsideEffects() {
		if (![PCDiet.MUSCLE, PCDiet.SLIM].includes(PC.diet)) {
			if (PC.geneticQuirks.mLoss === 2 && PC.muscles > -100) {
				if (V.geneticMappingUpgrade >= 1) {
					r.push(`You have myotonic dystrophy, so your body <span class="lime">constantly loses muscle mass</span> unless you spend extra time in the gym.`);
				}
				PC.muscles = Math.clamp(PC.muscles - 3, -100, 100);
			} else if (PC.geneticQuirks.mGain === 2 && PC.muscles < 100 && PC.weight >= -95) {
				if (V.geneticMappingUpgrade >= 1) {
					r.push(`You have myotonic hypertrophy, so your body <span class="lime">constantly builds muscle mass</span> unless you starve yourself.`);
				}
				PC.muscles = Math.clamp(PC.muscles + 3, -100, 100);
			}
		}
		if (![PCDiet.FATTEN, PCDiet.RESTRICTED, PCDiet.SLIM].includes(PC.diet)) {
			if (PC.weightDirection === -1 && PC.weight > -100) {
				if (V.geneticMappingUpgrade >= 1) {
					r.push(`Your body <span class="lime">aggressively burns fat</span> due to your`);
					if (PC.geneticQuirks.wGain === 2 && PC.geneticQuirks.wLoss === 2) {
						r.push(`irregular leptin production.`);
					} else {
						r.push(`hypoleptinemia.`);
					}
				}
				PC.weight = Math.clamp(PC.weight - 3, -100, 200);
			} else if (PC.weightDirection === 1 && PC.geneticQuirks.wGain === 2 && PC.weight < 200) {
				if (V.geneticMappingUpgrade >= 1) {
					r.push(`Your body <span class="lime">aggressively stores fat</span> due to your`);
					if (PC.geneticQuirks.wGain === 2 && PC.geneticQuirks.wLoss === 2) {
						r.push(`irregular leptin production.`);
					} else {
						r.push(`hyperleptinemia.`);
					}
				}
				PC.weight = Math.clamp(PC.weight + 3, -100, 200);
			} else if (V.arcologies[0].FSHedonisticDecadenceDecoration >= 40 && canEatFood(PC) && PC.weight < 120 && !onBedRest(PC)) {
				r.push(`There is too much delicious food, and little of it healthy, available to you as you tour your domain. A little snacking here and there isn't a problem, but to do so to this extent <span class="lime">pads out your waistline</span> and can get out of hand fast if not kept tabs on.`);
				PC.weight++;
			}
		}
		if (PC.geneMods.livestock === 1) {
			if ([PCDiet.FATTEN, PCDiet.RESTRICTED, PCDiet.SLIM, PCDiet.CORRECTIVE, PCDiet.FEMALE, PCDiet.FUTA].includes(PC.diet)) {
				r.push(`The gene therapy to boost your productivity has a side effect of weight gain, but it really feels like it's just trying to <class="lime">fatten you up for wholesale.</span>`);
			} else if ([PCDiet.RESTRICTED, PCDiet.SLIM].includes(PC.diet)) {
				r.push(`The gene therapy to boost your productivity has a side effect of weight gain, but it really feels like it's just trying to <class="orange">keep you fat for wholesale.</span>`);
			}
		}
	}
};