code:
App.UI.assistantAppearancePackTwo = function() {
	const node = new DocumentFragment();

	App.Events.drawEventArt(node, "assistant");

	const {
		HeA, HisA,
		heA, hisA, himA
	} = getPronouns(assistant.pronouns().main).appendSuffix("A");

	let r = [];
	r.push(`"Cool! New appearances to play around with!" Your assistant happily chimes. "Let's see what's inside! This looks heavenly..." ${HeA} hunches forward as a large pair of white feathered wings extend from ${hisA} upper back. ${HeA} takes several experimental flaps before taking to the sky. "I feel positively radiant! Maybe a smaller version will be more to your liking?" ${HeA} loses both height and wingspan until ${heA} stands roughly equivalent to ${heightToEitherUnit(120)}. ${HeA} flutters around cutely. "This is neat, I'm like cupid. Want me to hook you up with anyone?" ${HeA} winks as ${hisA} wings become bat-like and a pair of cute little nubs appears on ${hisA} head. "Or maybe you'd just like to play with me instead." The impish figure flirts, before landing and blossoming into a stunning woman. "You know a succubus can take ${hisA} lover's ideal form." ${HeA} runs ${hisA} hands down ${hisA} sides and to ${hisA} crotch.`);
	if (V.seeDicks !== 0) {
		r.push(`${HeA} begins rubbing ${hisA} clit as it steadily grows into a meaty cock. "Or an incubus, for the ladies." ${HeA} returns to ${hisA} previous form.`);
	}
	r.push(`"Says here it comes with 'bonus novice witch' too. Neat. What's this though? It looks like an appeara"`);
	App.Events.addParagraph(node, r);

	App.UI.DOM.appendNewElement("p", node, "...");

	App.UI.DOM.appendNewElement("p", node, "...");

	App.UI.DOM.appendNewElement("p", node, "..............................");

	App.UI.DOM.appendNewElement("p", node, `You tap at the screen; did ${heA} crash or something?`);

	App.UI.DOM.appendNewElement("p", node, "...");

	App.UI.DOM.appendNewElement("p", node, `After several minutes, ${heA} snaps back to life, with no mention about what exactly tied ${himA} up for so long.`);

	App.UI.DOM.appendNewElement("h3", node, `Personal assistant appearances:`);
	const choices = [];
	choices.push(new App.Events.Result(`Angel`, angel));
	choices.push(new App.Events.Result(`Cherub`, cherub));
	choices.push(new App.Events.Result(`Imp`, imp));
	choices.push(new App.Events.Result(`Succubus`, succubus));
	if (V.seeDicks !== 0) {
		choices.push(new App.Events.Result(`Incubus`, incubus));
	}
	choices.push(new App.Events.Result(`Witch`, witch));
	choices.push(new App.Events.Result(`_`, bugged));
	choices.push(new App.Events.Result(`Your current appearance will do`, current));

	App.Events.addResponses(node, choices);

	return node;

	function angel() {
		refreshArt();
		V.assistant.appearance = "angel";
		return `At your order, ${heA} installs the angel appearance. ${HeA} spreads ${hisA} wings and checks out ${hisA} new body, "Thanks, ${properTitle()}, but could I have a robe or something? I'm indecent!" ${HeA} blushes red. "You can always customize me from the arcology management menu," ${heA} adds.`;
	}

	function cherub() {
		refreshArt();
		V.assistant.appearance = "cherub";
		return `At your order, ${heA} installs the cherub appearance. ${HeA} returns to ${hisA} youthful figure and sprouts ${hisA} wings. "This is awesome, little embarrassing though..." ${HeA} says, covering ${hisA} shame. "You can always customize me from the arcology management menu," ${heA} adds.`;
	}

	function imp() {
		refreshArt();
		V.assistant.appearance = "imp";
		return `At your order, ${heA} installs the imp appearance. ${HeA} returns to ${hisA} youthful figure and sprouts ${hisA} wings. "This is awesome! So, wanna fool around? Maybe go torment some slaves?" ${HeA} says, pulling out a pitchfork. "You can always customize me from the arcology management menu," ${heA} adds.`;
	}

	function succubus() {
		refreshArt();
		V.assistant.appearance = "succubus";
		return `At your order, ${heA} installs the succubus appearance. ${HeA} promptly takes your breath away. "Thank you, ${properTitle()}. Now how shall I show you my appreciation..." ${HisA} avatar trails off while spreading ${hisA} legs and flashing you ${hisA} lovely pussy. "You can always customize me from the arcology management menu," ${heA} adds, with a hint of disapproval.`;
	}

	function incubus() {
		refreshArt();
		V.assistant.appearance = "incubus";
		return `At your order, ${heA} installs the incubus appearance. ${HeA} becomes rather masculine, sporting a soft cock nearly as long as ${hisA} thigh. "Thank you, ${properTitle()}. This is going to be fun. Would you like a taste?" ${HeA} steadily becomes erect, a bead of precum forming at its tip. "You can always customize me from the arcology management menu," ${heA} adds, with a hint of disapproval.`;
	}

	function witch() {
		refreshArt();
		V.assistant.appearance = "witch";
		return `At your order, ${heA} installs the novice witch appearance. ${HeA} wraps a tightly clinging robe around ${hisA} voluptuous body and dons a wide-brimmed hat. "You can always customize me from the arcology management menu," ${heA} adds, pulling a book of lewd spells out.`;
	}

	function bugged() {
		refreshArt();
		V.assistant.appearance = "ERROR_1606_APPEARANCE_FILE_CORRUPT";
		return `At your order, ${heA} installs the bugged appearance. ${HisA} body twists and contorts into an abomination of flesh and bone. It is honestly unsettling to look at. The thing morphs its body into a familiar female shape, though it is still off. Especially ${hisA} eyes; they seem soulless. "You can always customize me from the arcology management menu," ${heA} adds, in an ill pronounced mimicry of your voice.`;
	}

	function current() {
		return `At your order, ${heA} maintains the ${V.assistant.appearance} appearance as ${hisA} avatar. "Yes, ${properTitle()}," ${heA} confirms, and adds "if you reconsider, I can be customized from the arcology management menu."`;
	}

	function refreshArt() {
		App.Events.refreshEventArt("assistant");
	}
};

repo_name: Elohiem/fc

license: mit


code:
// @ts-nocheck
App.Update.assistantBC = function() {
	function convert(oldVar, variable, value = null) {
		if (jsDef(V[oldVar])) {
			if (typeof V[oldVar] !== "number" || (typeof V[oldVar] === "number" && V[oldVar] > 0)) {
				V.assistant[variable] = value === null ? V[oldVar] : value;
			}
		}
		delete V[oldVar];
	}

	V.assistant = Object.assign({}, {
		personality: V.assistant,
		name: V.assistantName,
		power: V.assistantPower,
		appearance: V.assistantAppearance,
	});
	delete V.assistantName; delete V.assistantPower;
	delete V.assistantAppearance; delete V.assistantPronouns;

	convert('marketAssistantAnnounced', 'market', {});
	convert('assistantExtra1', 'Extra1');
	convert('assistantExtra2', 'Extra2');
	convert('assistantNameAnnounced', 'announcedName');
	convert('assistantBodyDesire', 'bodyDesire');
	convert('assistantOptions', 'options');
	convert('assistantFSOptions', 'fsOptions');
	convert('assistantFSAppearance', 'fsAppearance');

	if (V.assistant.market) {
		Object.assign(V.assistant.market, {
			relationship: V.marketAssistantRelationship,
			limit: V.marketAssistantLimit,
			aggressiveness: V.marketAssistantAggressiveness,
		});
	}
	delete V.marketAssistantRelationship; delete V.marketAssistantLimit;
	delete V.marketAssistantAggressiveness; delete V.marketAssistantPronouns;
};


code:
App.UI.personalAssistantOptions = function() {
	const node = new DocumentFragment();

	assistant.object();

	App.Events.drawEventArt(node, "assistant");

	const {
		HeA, HisA,
		heA, hisA, himA, himselfA
	} = getPronouns(assistant.pronouns().main).appendSuffix("A");

	let r = [];
	r.push(`Seated at your desk, you glance at the visual representation of`);
	if (V.assistant.announcedName) {
		r.push(App.UI.DOM.combineNodes(
			App.UI.DOM.makeTextBox(V.assistant.name, (v) => V.assistant.name = v), ","
		));
		if (V.assistant.name !== "your personal assistant") {
			r.push(App.UI.DOM.link(
				"(Stop using a custom name)",
				() => {
					V.assistant.name = "your personal assistant";
					App.UI.reload();
				}
			));
		}
	} else {
		r.push(`${V.assistant.name},`);
	}
	r.push(`in a corner of your desk's glass top.`);

	App.Events.addParagraph(node, r);

	App.UI.DOM.appendNewElement("p", node, PersonalAssistantAppearance());

	if (V.assistant.power > 0) {
		App.UI.DOM.appendNewElement("p", node, `Though ${heA} remains short of a true AI, the arcology's upgraded computer core allows ${himA} to use brute force to simulate sentient behavior quite well. ${HeA} is not truly self aware, but ${heA} is able to predict what a sentient being with a certain character might say or do in common situations. The increased power has other applications; for example, it has improved the accuracy of your estimates of economic activity in the Free City.`);
	} else {
		App.UI.DOM.appendNewElement("p", node, `${HeA} is well short of a true AI, but with extensive access to information on past human behavior and the processing power to query that information quickly, ${heA} can often seem self aware by modeling ${himselfA} after others' past behavior.`);
	}

	const tabBar = new App.UI.Tabs.TabBar("Personalassistantoptions");
	tabBar.addTab("Computer Core Upgrades", "upgrades", upgrades());
	if (V.week >= 11) {
		tabBar.addTab("Settings", "settings", settings());
		if (V.assistant.personality !== 0 && V.assistant.options) {
			tabBar.addTab("Appearance", "appearance", appearance());
		}
	}
	node.append(tabBar.render());

	return node;

	function upgrades() {
		const frag = new DocumentFragment();
		if (V.assistant.power === 0) {
			const memoryCost = Math.trunc(20000 * V.upgradeMultiplierArcology * V.HackingSkillMultiplier);
			App.Events.addParagraph(frag, [
				`The first upgrade needed is a switch to a holographic memory core to store the immense quantity of data ${V.assistant.name} gathers.`,
				App.UI.DOM.link(
					"Install holographic memory core",
					() => {
						cashX(forceNeg(memoryCost), "capEx");
						V.assistant.power += 1;
						V.PC.skill.engineering += 1;
						V.PC.skill.hacking += 1;
						App.UI.reload();
					},
					[],
					"",
					`Will cost ${cashFormat(memoryCost)}`
				)
			]);
		} else if (V.assistant.power === 1) {
			const coolingCost = Math.trunc(35000 * V.upgradeMultiplierArcology * V.HackingSkillMultiplier);
			App.Events.addParagraph(frag, [
				`The next upgrade needed is a liquid nitrogen cooling system to allow for extensive overclocking.`,
				App.UI.DOM.link(
					"Install upgraded cooling system",
					() => {
						cashX(forceNeg(coolingCost), "capEx");
						V.assistant.power += 1;
						V.PC.skill.engineering += 1;
						V.PC.skill.hacking += 1;
						App.UI.reload();
					},
					[],
					"",
					`Will cost ${cashFormat(coolingCost)} and will allow you to upgrade the smart piercings in ${V.arcologies[0].name}`
				)
			]);
		} else if (V.assistant.power === 2) {
			const opticalCost = Math.trunc(50000 * V.upgradeMultiplierArcology * V.HackingSkillMultiplier);
			App.Events.addParagraph(frag, [
				`The final upgrade needed is a transition to optical RAM.`,
				App.UI.DOM.link(
					"Install optical RAM",
					() => {
						cashX(forceNeg(opticalCost), "capEx");
						V.assistant.power += 1;
						V.PC.skill.engineering += 1;
						V.PC.skill.hacking += 1;
						App.UI.reload();
					},
					[],
					"",
					`Will cost ${cashFormat(opticalCost)}`
				)
			]);
		} else {
			App.Events.addParagraph(frag, [`The arcology's computer core is fully upgraded.`]);
		}
		return frag;
	}

	function settings() {
		const frag = new DocumentFragment();
		App.UI.DOM.appendNewElement("h3", frag, "Behavior:");
		if (V.assistant.personality <= 0) {
			App.Events.addParagraph(frag, [
				`Your assistant is using ${hisA} default settings, and is not behaving as though ${heA} has a libido.`,
				App.UI.DOM.link(
					`Instruct ${himA} to simulate a sex drive`,
					() => {
						V.assistant.personality = 1;
						App.UI.reload();
					},
				)
			]);
		} else {
			App.Events.addParagraph(frag, [
				`Your assistant is simulating preferences and a sex drive.`,
				App.UI.DOM.link(
					`Revert ${himA} to normal settings`,
					() => {
						V.assistant.personality = 0;
						V.assistant.appearance = "normal";
						App.UI.reload();
					},
				)
			]);
		}

		if (V.assistant.market) {
			const options = new App.UI.OptionsGroup();
			App.UI.DOM.appendNewElement("h3", frag, "Business Assistant:");
			const kowalski = `The arcology's upgraded computers support advanced business analysis.`;
			if (V.assistant.appearance !== "normal") {
				App.Events.addParagraph(frag, [
					kowalski,
					`These capabilities are represented by an avatar styled after ${V.assistant.name}'s.`,
				]);
				options.addOption(`Simulate a relationship with ${V.assistant.name} that is`, "relationship", V.assistant.market)
					.addValueList([
						["Cute", "cute"],
						["Romantic", "romantic"],
						["Nonconsensual", "nonconsensual"],
						["Incestuous", "incestuous"],
					]);
			} else {
				App.UI.DOM.appendNewElement("p", frag, `${kowalski} Although technically an expanded subroutine within the same app, ${V.assistant.name} uses a distinct icon to identify these alerts and improve your workflow.`);
				r.push();
			}
			V.assistant.market.limit = Math.clamp(V.assistant.market.limit, 0, 10000000);
			options.addOption("Use excess liquid assets to play the menial slave market.", "limit", V.assistant.market)
				.addValueList([
					["Disallow", 0],
					["Allow", 10000],
				]).showTextBox();
			if (V.assistant.market.limit) {
				options.addOption(`${HisA} investing strategy will be`, "aggressiveness", V.assistant.market)
					.addValueList([
						["Conservative", 0],
						["Aggressive", 100],
					]);
			}
			frag.append(options.render());
		}
		return frag;
	}

	function appearance() {
		const frag = new DocumentFragment();
		let linkArray = [];
		frag.append(availableAssistantAppearances());

		if (V.policies.publicPA === 1) {
			App.UI.DOM.appendNewElement("span", frag, `${HeA} is currently part of your public image, so you may wish to select an appearance that complements your Future Societies:`, "note");
			frag.append(assistantFS());
		}
		App.UI.DOM.appendNewElement("h3", frag, "Downloadable Content (DLC):");
		/*
		if (!V.assistant.Extra1) {
			const monsterCost = Math.trunc(10000 * V.upgradeMultiplier);
			App.UI.DOM.appendNewElement("div", frag, App.UI.DOM.link(
				"Purchase a set of monstergirl appearances",
				() => {
					V.event = "";
					cashX(forceNeg(monsterCost), "capEx");
					V.assistant.Extra1 = 1;
					App.UI.reload();
				},
				[],
				"",
				`Costs${cashFormat(monsterCost)}`
			));
		} else {
			App.UI.DOM.appendNewElement("div", frag, `You have downloaded a set of monstergirl appearances for your avatar.`);
		}
		*/
		if (!V.assistant.Extra2) {
			const price = (V.PC.skill.hacking < 75) ? 10000 * V.upgradeMultiplierArcology : 0;
			App.UI.DOM.appendNewElement("div", frag, App.UI.DOM.link(
				`${V.PC.skill.hacking < 75 ? "Purchase" : "Acquire"} a set of heaven and hell themed appearances`,
				() => {
					V.assistant.Extra2 = 1;
					cashX(Math.trunc(-price), "capEx");
				},
				[],
				"Assistant Appearance Pack Two",
				(price) ? `Costs ${cashFormat(price)}` : `Unencrypted files, ripe for the taking`
			));
		} else {
			App.UI.DOM.appendNewElement("div", frag, `You have downloaded a set of heavenly and hellish appearances for your avatar.`);
		}

		/* Choose his FS appearance */
		if (V.assistant.fsOptions && V.assistant.appearance !== "normal") {
			App.UI.DOM.appendNewElement("h3", frag, "Society-specific setting:");
			let r = [];
			r.push(`${HeA} can further refine ${hisA} avatar to match the arcology's social`);
			if (V.assistant.fsAppearance !== "default") {
				r.push(
					`profile; ${hisA} current variation shows`,
					App.UI.DOM.makeElement("span", V.assistant.fsAppearance, "bold"),
					`touches.`
				);
			} else {
				r.push(`profile, though no details stand out right now.`);
			}
			App.Events.addNode(frag, r, "div");

			/** @type {Map<fsAssistantAppearance, string>} */
			const appearanceWithFS = new Map([
				["gender radicalist", "FSGenderRadicalistDecoration"],
				["gender fundamentalist", "FSGenderFundamentalistDecoration"],
				["paternalist", "FSPaternalistDecoration"],
				["degradationist", "FSDegradationistDecoration"],
				["repopulation focus", "FSRepopulationFocusDecoration"],
				["eugenics", "FSRestartDecoration"],
				["intellectual dependency", "FSIntellectualDependencyDecoration"],
				["slave professionalism", "FSSlaveProfessionalismDecoration"],
				["body purist", "FSBodyPuristDecoration"],
				["transformation fetishist", "FSTransformationFetishistDecoration"],
				["youth preferentialist", "FSYouthPreferentialistDecoration"],
				["maturity preferentialist", "FSMaturityPreferentialistDecoration"],
				["slimness enthusiast", "FSSlimnessEnthusiastDecoration"],
				["petite admiration", "FSPetiteAdmirationDecoration"],
				["statuesque glorification", "FSStatuesqueGlorificationDecoration"],
				["asset expansionist", "FSAssetExpansionistDecoration"],
				["pastoralist", "FSPastoralistDecoration"],
				["physical idealist", "FSPhysicalIdealistDecoration"],
				["hedonistic decadence", "FSHedonisticDecadenceDecoration"],
				["supremacist", "FSSupremacistDecoration"],
				["subjugationist", "FSSubjugationistDecoration"],
				["chattel religionist", "FSChattelReligionistDecoration"],
				["roman revivalist", "FSRomanRevivalistDecoration"],
				["neoimperialist", "FSNeoImperialistDecoration"],
				["aztec revivalist", "FSAztecRevivalistDecoration"],
				["egyptian revivalist", "FSEgyptianRevivalistDecoration"],
				["edo revivalist", "FSEdoRevivalistDecoration"],
				["arabian revivalist", "FSArabianRevivalistDecoration"],
				["chinese revivalist", "FSChineseRevivalistDecoration"],
			]);

			makeFSlink("default");
			for (const [selection, decoration] of appearanceWithFS) {
				if (V.assistant.fsAppearance !== selection && V.arcologies[0][decoration] > 20) {
					makeFSlink(selection);
				}
			}
			App.UI.DOM.appendNewElement("div", frag, App.UI.DOM.generateLinksStrip(linkArray));

			if (V.seeImages && V.seeAvatar) {
				App.UI.DOM.appendNewElement("h3", node, "Custom Image");
				node.append(customAssistantImage());
			}
		}

		return frag;

		function makeFSlink(selection) {
			const link = App.UI.DOM.link(
				selection,
				() => V.assistant.fsAppearance = selection
			);
			link.style.textTransform = "capitalize";
			linkArray.push(link);
		}
	}
};


code:
personality (Init, 0-1):

Does the assistant attempt to simulate personality.
0 - no
1 - yes

name:

What the assistant is called. Accepts a string.

power:

The assistant's power level.
0-3

appearance:

The assistant's appearance, is a string.

Extra1:

First additional set of appearance choices.
If defined the choices are available.

Extra2:

Second additional set of appearance choices.

announcedName:

The assistant has announced that it would like a name.

bodyDesire:

The assistant has announced that it would like a body.

options:

The assistant has additional options unlocked.

fsOptions:

The assistant has FS options unlocked. Set week 11 or greater.

fsAppearance:

The assistant has FS related appearance choices enabled.

market (object):

set when undefined and assistant.power > 1.

relationship:

Relationship status between the assistant and the market assistant, is a string.

limit:

The amount of credits the market assistant is allowed to use. 10,000,000 maximum.

aggressiveness:

How aggressive the market assistant is buying and selling menial slaves.


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

	if (PC.belly >= 120000) {
		r.push(`You shudder at the cool touch of the sensor running along the curve of your sensitive pregnancy. While you've devised a way to scan the distant peak of your navel and the depths of your underbelly, you failed to take into account just how excited your`);
		if (PC.pregType > 1) {
			r.push(`children`);
		} else {
			r.push(`child`);
		}
		r.push(`would get over the attention. Every pass is a battle against your kicking brood.`);
	} else if (PC.belly >= 90000) {
		r.push(`You shudder at the cool touch of the sensor running along the curve of your pregnancy. It takes some stretching, but you can just barely scan yourself without assistance. If you grow much larger, you'll have to call in help for those places that elude your reach.`);
	} else if (PC.belly >= 45000) {
		r.push(`You shudder at the cool touch of the sensor running along the curve of your pregnancy. It's quite a tiring endeavor to scan the entire thing, given just how far it extends from your body.`);
	} else if (PC.belly >= 14000) {
		r.push(`You shudder at the cool touch of the sensor running along the curve of your pregnancy. It takes some effort to scan the entire thing, given how large it has grown.`);
	} else if (PC.belly >= 5000) {
		r.push(`You shudder at the cool touch of the sensor running along the curve of your pregnancy.`);
	} else if (PC.belly >= 1500) {
		r.push(`You shudder at the cool touch of the sensor running along the curve of your growing pregnancy.`);
	} else if (PC.belly >= 500) {
		r.push(`You shudder at the cool touch of the sensor running along the curve of your early pregnancy.`);
	} else if (PC.belly >= 100) {
		r.push(`You shudder at the cool touch of the sensor against the slight swell of your lower belly.`);
	} else if (PC.belly < 100) {
		r.push(`You shudder slightly at the cool touch of the sensor against your skin.`);
	}

	return r.join(" ");
};


code:
App.Desc.Player.pNotesBelly = function(PC = V.PC) {
	const r = [];
	const fertRefresh = PC.refreshment.includes("fertility") ? 1 : 0;
	let adjust;
	const {girlP} = getPronouns(PC).appendSuffix("P");
	const children = PC.pregType > 1 ? "children" : "child";

	if (PC.career === "servant") {
		if (PC.preg > 0) {
			if (PC.belly >= 120000) {
				r.push(`You don't know how much more you can take. You feel so full and your children never calm down. You swear they take shifts tormenting your poor bladder. Even worse, your pregnancy juts out over a`);
				if (V.showInches === 2) {
					r.push(`half-yard`);
				} else {
					r.push(`half-meter`);
				}
				r.push(`from your front and has soundly defeated the seams of your`);
				if (PC.dick !== 0) {
					r.push(`dress. Occasionally one of the bottoms manages to land a series of hits to your prostate, not that you mind as much, save for when they keep at it and you can't restrain your orgasm.`);
				} else {
					r.push(`dress.`);
				}
			} else if (PC.belly >= 105000) {
				r.push(`You can barely function any more. You're so big and heavy that even the simplest of actions requires both intense effort and thought just to get it done. Your frumpy dress is also at its limit, and much to your annoyance, your children will not stay still enough to let you fix it.`);
			} else if (PC.belly >= 90000) {
				r.push(`You may have a`);
				if (fertRefresh === 1) {
					r.push(`problem, but then again, you did take all those fertility drugs, so you can't really say you didn't want it.`);
				} else {
					r.push(`problem. You took fertility drugs, but you shouldn't be getting this big.`);
				}
				r.push(`Judging by how far along you are, you must be carrying ${pregNumberName(PC.pregType, 2)}. Your Master always said he wanted a big family; too bad he isn't here to see this. Your dress is also starting to get tight, but it's far less of a concern at this point.`);
			} else if (PC.belly >= 75000) {
				r.push(`Your belly is starting to become worrying. You're positively gigantic and quite tired. Though on the plus side, your dress is rather form fitting now.`);
			} else if (PC.belly >= 60000) {
				r.push(`Your new outfit is handling your enormous belly quite well, though it does nothing to hide your size. Everyone can tell you'll be having lots of babies.`);
			} else if (PC.belly >= 45000) {
				r.push(`You both look and feel enormous, your belly juts out so much now. You found a rather frumpy looking maid outfit in a shop; it's not the most attractive thing, but it'll hold nearly any belly.`);
			} else if (PC.belly >= 30000) {
				r.push(`You feel absolutely gigantic; you look like you're full-term with`);
				if (PC.pregType === 2) {
					r.push(`twins (which you are).`);
				} else {
					r.push(`twins.`);
				}
				r.push(`Your restitched dress is once more at its limit.`);
			} else if (PC.belly >= 15000) {
				r.push(`You've taken the time to let out your own dress so that you can look proper even with a belly as big as any full-term woman's.`);
			} else if (PC.belly >= 14000) {
				r.push(`Your dress is at its capacity; any bigger and you'd risk tearing it at the seams, though your late Master did make sure his ${girlP}s were well dressed even when they were fully rounded with his child.`);
			} else if (PC.belly >= 12000) {
				r.push(`You keep bumping into things with your huge belly; you're used to it though,`);
				if (PC.counter.birthMaster >= 2) {
					r.push(`your first pregnancy was a twinner!`);
				} else {
					r.push(`your late Master liked to keep a big fake belly around your middle.`);
				}
			} else if (PC.belly >= 10000) {
				r.push(`Your huge pregnant belly is tiring to carry around, but you're well versed in moving about with a rounded middle.`);
			} else if (PC.belly >= 7000) {
				r.push(`You've stopped bothering to tie your apron behind you, allowing your dress the freedom to stretch with your growing ${children}.`);
			} else if (PC.belly >= 5000) {
				r.push(`Your maid's outfit is rounded out by your baby-filled belly; not only is it obvious, but it is slowing you down in your day to day affairs.`);
			} else if (PC.belly >= 3000) {
				r.push(`You're starting to get pretty big; you feel like all eyes are centered on your baby-filled middle.`);
			} else if (PC.belly >= 1500) {
				r.push(`Your belly is now large enough that there is no hiding it. After you've let out your apron, your dress fits nicely again.`);
			} else if (PC.belly >= 500) {
				r.push(`Your dress tightly clings to your early pregnancy, though it, your apron, and your previous experience hide it well.`);
			} else if (PC.belly >= 250) {
				r.push(`Your apron holds your dress tightly to your bloated middle.`);
			} else if (PC.belly >= 100) {
				r.push(`Your dress and apron feel tight around your middle.`);
			}
			if (PC.preg >= 41) {
				r.push(`Your`);
				if (PC.pregType > 1) {
					r.push(`babies are`);
				} else {
					r.push(`baby is`);
				}
				r.push(`overdue and your Master isn't here anymore to comfort your exhausted body. You try your best,`);
				if (PC.pregSource === -3) {
					r.push(`drawing strength from the knowledge that you carry your late Master's legacy within you.`);
				} else {
					r.push(`but deep down you are saddened that your`);
					if (PC.pregType > 1) {
						r.push(`children aren't`);
					} else {
						r.push(`child isn't`);
					}
					r.push(`his.`);
				}
				if (PC.pregMood === 1) {
					r.push(`However, thanks to all your mothering, your slaves are more than happy to do everything they can for you.`);
				} else if (PC.pregMood === 2) {
					if (V.seeDicks !== 0) {
						r.push(`Your slaves, those with dicks especially,`);
					} else {
						r.push(`Your slaves`);
					}
					r.push(`are terrified of being seen by you, knowing full well that they will be bearing the full weight of your body as you try to fill the hole left by your late Master.`);
				}
			} else if (PC.preg >= 39) {
				r.push(`Every action you take is exhausting, and even though your slaves are more than capable of serving your every desire, you refuse to slow down with your duties.`);
				if (PC.pregMood === 1) {
					r.push(`Though you definitely appreciate their aid.`);
				} else if (PC.pregMood === 2) {
					r.push(`Your hormones practically rule you, leading you to demand your slaves to be prepared to pleasure you at a moments notice. Your needy cunt hungers for dick and you don't care`);
					if (V.seeDicks !== 0) {
						r.push(`what it is attached to`);
					} else {
						r.push(`if it's made of plastic`);
					}
					r.push(`right now.`);
				}
			} else if (PC.preg >= 36) {
				r.push(`Your`);
				if (PC.pregType > 1) {
					r.push(`children happily kick`);
				} else {
					r.push(`child happily kicks`);
				}
				r.push(`away inside your womb, and each time a small bump appears on the outside of your dress.`);
				if (PC.pregMood === 1) {
					r.push(`While hormones may have you demanding and needy, you do everything you can to treat your slaves as if they were your own children.`);
				} else if (PC.pregMood === 2) {
					r.push(`You know it's unbecoming for an arcology owner, but your former Master loved to fuck you while you`);
					if (PC.counter.birthMaster > 0) {
						r.push(`were pregnant with his`);
						if (PC.counter.birthMaster > 1) {
							r.push(`children`);
						} else {
							r.push(`child`);
						}
					} else {
						r.push(`wore a big fake belly`);
					}
					r.push(`and your body misses his touch.`);
				}
			} else if (PC.preg >= 32) {
				if (PC.pregMood === 1) {
					r.push(`You can't help but enjoy having a slave suckle from you while you relax with them in your lap.`);
				} else if (PC.pregMood === 2) {
					r.push(`You know how to have sex while pregnant, and as such, so will your slaves.`);
				}
			} else if (PC.preg >= 28) {
				if (PC.pregMood === 1) {
					r.push(`You catch yourself babying your slaves from time to time.`);
				} else if (PC.pregMood === 2) {
					r.push(`Your sex drive has become unquenchable as of late.`);
				}
			} else if (PC.preg === 22) {
				r.push(`Something startling happened this week; while enjoying a slave, your belly button popped out!`);
			} else if (PC.preg === 8 && PC.pregSource > 0) {
				const babyDaddy = findFather(PC.pregSource);
				if (babyDaddy) {
					adjust = babyDaddy.counter.PCKnockedUp++;
					adjustFatherProperty(babyDaddy, "PCKnockedUp", adjust);
				}
				if (V.slaveIndices[PC.pregSource]) {
					const {him} = getPronouns(babyDaddy);
					r.push(`Rumors spread among your slaves that your middle is swollen with ${babyDaddy.slaveName}'s child. They're not wrong, though`);
					if (babyDaddy.devotion > 20) {
						r.push(`${babyDaddy.slaveName} is broken enough to not try and use it against you. In fact, it might even draw ${him} closer to you.`);
					} else {
						r.push(`you'd have liked it to have kept that from ${babyDaddy.slaveName}, lest the rebellious bitch use it to remain defiant.`);
					}
				}
			}
		}
	} else if (PC.career === "escort") {
		if (PC.preg > 0) {
			if (PC.belly >= 120000) {
				r.push(`You don't know how much more you can take. You feel so full and your children never calm down. You swear they take shifts tormenting your poor bladder. Even worse, your pregnancy juts out over a`);
				if (V.showInches === 2) {
					r.push(`half-yard`);
				} else {
					r.push(`half-meter`);
				}
				r.push(`from your front and has seized control as your dominant aspect.`);
				if (PC.dick !== 0) {
					r.push(`Occasionally one of the bottoms manages to land a series of hits to your prostate, not that you mind as much. It's good for business when you orgasm lewdly and cum your bottoms.`);
				}
			} else if (PC.belly >= 105000) {
				r.push(`You can barely function any more. You're so big and heavy that even the simplest of actions requires both intense effort and thought just to get it done. None of your poses work with your gravid body either, and you're practically popping out of your skimpiest outfit.`);
			} else if (PC.belly >= 90000) {
				if (fertRefresh === 1) {
					r.push(`You may have a problem, but then again, you did take all those fertility drugs, so you can't really say you didn't want it.`);
				} else {
					r.push(`You may have a problem. You know you took fertility drugs, but you weren't supposed to get this big!`);
				}
				r.push(`Feeling yourself up, you'd fancy a guess that there are about`);
				if (PC.skill.medicine >= 45) {
					if (PC.pregType === 8) {
						r.push(`eight babies`);
					} else if (PC.pregType === 7) {
						r.push(`seven babies`);
					} else {
						r.push(`six babies`);
					}
				} else {
					if (PC.pregType === 8) {
						r.push(`a dozen babies`);
					} else if (PC.pregType === 7) {
						r.push(`ten babies`);
					} else {
						r.push(`eight babies`);
					}
				}
				r.push(`in your belly.`);
			} else if (PC.belly >= 75000) {
				r.push(`Your belly is starting to become worrying to you. You're positively gigantic and quite tired of it.`);
				if (V.arcologies[0].FSRepopulationFocus !== "unset") {
					r.push(`The last thing on peoples' minds these days is fucking you too.`);
				}
			} else if (PC.belly >= 60000) {
				r.push(`You feel sexy with such a huge belly, but it sure is tiring. Everyone can also tell you'll be having lots of babies — a boon to business, since everyone knows you ride bareback.`);
			} else if (PC.belly >= 45000) {
				r.push(`You both look and feel enormous, your belly juts out so much now. Your strategy worked! Eyes always end up locked onto you or your pregnancy, but they quickly return to your milky breasts.`);
			} else if (PC.belly >= 30000) {
				r.push(`You feel absolutely gigantic; you look like you're full-term with`);
				if (PC.pregType === 2) {
					r.push(`twins (which you are).`);
				} else {
					r.push(`twins.`);
				}
				r.push(`You find the skimpiest outfit you can to complement your size; if people won't notice your other assets, then they might as well not notice your outfit either.`);
			} else if (PC.belly >= 14000) {
				r.push(`You don't even bother to try to be slutty anymore; your full-term globe of a belly just steals all the attention away from your other assets.`);
			} else if (PC.belly >= 12000) {
				r.push(`Your huge pregnant belly hides your crotch.`);
			} else if (PC.belly >= 10000) {
				r.push(`Your huge pregnant belly is tiring to carry around and is beginning to draw attention away from your other features.`);
			} else if (PC.belly >= 7000) {
				r.push(`You've switched to even skimpier clothing to show off your big pregnant belly.`);
			} else if (PC.belly >= 5000) {
				r.push(`Your outfit is only enhanced by your baby-filled belly, mostly because it adds to your slutty appearance. Though it is definitely impacting your business.`);
			} else if (PC.belly >= 3000) {
				r.push(`Your slutty bottoms are beginning to get hidden by your rounded middle.`);
			} else if (PC.belly >= 1500) {
				r.push(`Your slutty bottoms sexily hug your swollen middle.`);
			} else if (PC.belly >= 500) {
				r.push(`Your exposed midriff bulges out enough to give away your growing pregnancy.`);
			} else if (PC.belly >= 250) {
				r.push(`Your exposed midriff is noticeably bloated.`);
			} else if (PC.belly >= 100) {
				r.push(`When you look down, you can't help but notice your belly sticking out a little.`);
			}
			if (PC.preg >= 41) {
				r.push(`You can barely pull yourself and your overdue ${children} out of bed; every action is a chore, you keep bumping things, and your ${children} just won't calm down.`);
				if (PC.pregMood === 1) {
					r.push(`However, thanks to all your tenderness, your slaves are more than happy to do everything they can for you.`);
				} else if (PC.pregMood === 2) {
					if (V.seeDicks !== 0) {
						r.push(`Your slaves, those with dicks especially,`);
					} else {
						r.push(`Your slaves`);
					}
					r.push(`are terrified of being seen by you, knowing full well that they will be bearing the full weight of your body as you satisfy your desires.`);
				}
			} else if (PC.preg >= 39) {
				r.push(`Every action you take is exhausting, though your slaves are more than capable of serving your every whim.`);
				if (PC.pregMood === 1) {
					r.push(`Even in the final stages of pregnancy, you make sure the slaves attending you are treated as if the were your favorite clients.`);
				} else if (PC.pregMood === 2) {
					r.push(`Your hormones practically rule you, leading you to demand your slaves to be prepared to pleasure you at a moment's notice. Your needy cunt hungers for dick and you don't care`);
					if (V.seeDicks !== 0) {
						r.push(`what it is attached to`);
					} else {
						r.push(`if it's made of plastic`);
					}
					r.push(`right now.`);
				}
			} else if (PC.preg >= 36) {
				r.push(`Every kick from your eager ${children} threatens to dislodge your breasts from your struggling top.`);
				if (PC.pregMood === 1) {
					r.push(`While you may be demanding and needy, you do everything you can to treat them as if they were a virgin client.`);
				} else if (PC.pregMood === 2) {
					r.push(`You know it's unbecoming for an arcology owner, but you need a dick in you even more than usual.`);
				}
			} else if (PC.preg >= 32) {
				if (PC.pregMood === 1) {
					r.push(`You can't help but enjoy having a slave, or client, suckle from you while you relax with them in your lap.`);
				} else if (PC.pregMood === 2) {
					r.push(`You don't let your pregnancy get in the way when it comes to sex; you make sure your slaves, and clients, learn just how much you know about sex.`);
				}
			} else if (PC.preg >= 28) {
				if (PC.pregMood === 1) {
					r.push(`You catch yourself playfully teasing your slaves from time to time.`);
				} else if (PC.pregMood === 2) {
					r.push(`Your sex drive has become unquenchable as of late.`);
				}
			} else if (PC.preg === 22) {
				r.push(`Something startling happened this week; while enjoying a slave, your belly button popped out!`);
			} else if (PC.preg === 8 && PC.pregSource > 0) {
				const babyDaddy = findFather(PC.pregSource);
				if (babyDaddy) {
					adjust = babyDaddy.counter.PCKnockedUp++;
					adjustFatherProperty(babyDaddy, "PCKnockedUp", adjust);
				}
				if (V.slaveIndices[PC.pregSource]) {
					const {him} = getPronouns(babyDaddy);
					r.push(`Rumors spread among your slaves that your middle is swollen with ${babyDaddy.slaveName}'s child. They're not wrong, though`);
					if (babyDaddy.devotion > 20) {
						r.push(`${babyDaddy.slaveName} is broken enough to not try and use it against you. In fact, it might even draw ${him} closer to you.`);
					} else {
						r.push(`you'd have liked it to have kept that from ${babyDaddy.slaveName}, lest the rebellious bitch use it to remain defiant.`);
					}
				}
			}
		}
	} else {
		if (PC.preg > 0) {
			if (PC.belly >= 120000) {
				r.push(`You don't know how much more you can take. You feel so full and your children never calm down. You swear they take shifts tormenting your poor bladder. Even worse, your pregnancy juts out over a`);
				if (V.showInches === 2) {
					r.push(`half-yard`);
				} else {
					r.push(`half-meter`);
				}
				r.push(`from your front and has soundly defeated your maternity suit.`);
				if (PC.dick !== 0) {
					r.push(`Occasionally one of the bottoms manages to land a series of hits to your prostate, not that you mind as much, save for when they keep at it and you a can't restrain your orgasm. The last thing you want to do in a meeting is spontaneously orgasm and cum your in clothes.`);
				}
			} else if (PC.belly >= 105000) {
				r.push(`You can barely function any more. You're so big and heavy that even the simplest of actions requires both intense effort and thought just to get it done. Your suit buttons keep popping, and much to your annoyance, your ${children} will not stay still enough to let you redo them.`);
			} else if (PC.belly >= 90000) {
				if (fertRefresh === 1) {
					r.push(`You may have a problem, but then again, you did take all those fertility drugs, so you can't really say you didn't want it.`);
				} else {
					r.push(`You may have a problem. You took fertility drugs, but you shouldn't be getting this big.`);
				}
				r.push(`Judging by how far along you are, you must be carrying ${pregNumberName(PC.pregType, 2)}. Your suit is also starting to get tight, but it's far less of a concern at this point.`);
			} else if (PC.belly >= 75000) {
				r.push(`Your belly is starting to become worrying. You're positively gigantic and quite tired. As an added stress, your maternity suit highlights your pregnancy.`);
			} else if (PC.belly >= 60000) {
				r.push(`Your new outfit is handling your enormous belly quite well, though it does nothing to hide your size. Everyone can tell you'll be having lots of babies and judges you accordingly.`);
			} else if (PC.belly >= 45000) {
				r.push(`You both look and feel enormous, your belly juts out so much now. Your tailor finally managed to get you a bigger maternity suit, one with extra give in the middle, but you feel it draws attention right to your gravidity.`);
			} else if (PC.belly >= 30000) {
				r.push(`You feel absolutely gigantic; you look like you're full-term with`);
				if (PC.pregType === 2) {
					r.push(`twins (which you are).`);
				} else {
					r.push(`twins.`);
				}
				r.push(`Having such a big belly in such poor attire weighs heavily under the public's eye.`);
			} else if (PC.belly >= 15000) {
				r.push(`You don't even bother to try to cover your full-term sized pregnancy, opting to just let it hang out of your old clothing. Every action you take is exhausting; though your slaves are more than capable of serving your every desire.`);
			} else if (PC.belly >= 12000) {
				r.push(`Your huge pregnant belly strains the buttons on your maternity suit.`);
			} else if (PC.belly >= 10000) {
				r.push(`Your huge pregnant belly is tiring to carry around and is beginning to stretch out your new clothes.`);
			} else if (PC.belly >= 7000) {
				r.push(`You've switched to using what can only be called formal maternity wear to cover your pregnant belly.`);
			} else if (PC.belly >= 5000) {
				r.push(`You can barely cover your baby-filled belly; not only is it obvious, but it is getting in the way of your business.`);
			} else if (PC.belly >= 3000) {
				r.push(`You're starting to get pretty big; you feel like everyone just focuses on your gravidity now.`);
			} else if (PC.belly >= 1500) {
				r.push(`Your belly is now large enough that there is no hiding it. Your top strains to cover it.`);
			} else if (PC.belly >= 500) {
				r.push(`Your top tightly clings to your early pregnancy, though you manage to conceal it well enough.`);
			} else if (PC.belly >= 250) {
				r.push(`Your top tightly clings to your bloated middle.`);
			} else if (PC.belly >= 100) {
				r.push(`Your top feels oddly tight around your middle.`);
			}
			if (PC.preg >= 41) {
				r.push(`You can barely pull yourself and your overdue ${children} out of bed; every action is a chore, you keep bumping into things, and your ${children} just won't calm down.`);
				if (PC.pregMood === 1) {
					r.push(`However, thanks to all your mothering, your slaves are more than happy to do everything they can for you.`);
				} else if (PC.pregMood === 2) {
					if (V.seeDicks !== 0) {
						r.push(`Your slaves, those with dicks especially,`);
					} else {
						r.push(`Your slaves`);
					}
					r.push(`are terrified of being seen by you, knowing full well that they will be bearing the full weight of your body as you satisfy your desires.`);
				}
			} else if (PC.preg >= 39) {
				if (PC.pregMood === 1) {
					r.push(`Even in the final stages of pregnancy, you make sure the slaves attending you are treated as if they were your own children.`);
				} else if (PC.pregMood === 2) {
					r.push(`Your hormones practically rule you, leading you to demand your slaves to be prepared to pleasure you at a moment's notice. Your needy cunt hungers for dick and you don't care`);
					if (V.seeDicks !== 0) {
						r.push(`what it is attached to`);
					} else {
						r.push(`if it's made of plastic`);
					}
					r.push(`right now.`);
				}
			} else if (PC.preg >= 36) {
				r.push(`Every kick from your eager ${children} threatens to send your buttons flying.`);
				if (PC.pregMood === 1) {
					r.push(`While you may be demanding and needy, you do everything you can to treat them as if they were your own children.`);
				} else if (PC.pregMood === 2) {
					r.push(`You know it's unbecoming for an arcology owner, but you need a dick in you and you don't care from where.`);
				}
			} else if (PC.preg >= 32) {
				if (PC.pregMood === 1) {
					r.push(`You can't help but enjoy having a slave suckle from you while you relax with them in your lap.`);
				} else if (PC.pregMood === 2) {
					r.push(`You don't let your pregnancy get in the way when it comes to sex; you make sure your slaves learn new positions to accommodate your bulk.`);
				}
			} else if (PC.preg >= 28) {
				if (PC.pregMood === 1) {
					r.push(`You catch yourself babying your slaves from time to time.`);
				} else if (PC.pregMood === 2) {
					r.push(`Your sex drive has become unquenchable as of late.`);
				}
			} else if (PC.preg === 22) {
				r.push(`Something startling happened this week; while enjoying a slave, your belly button popped out!`);
			} else if (PC.preg === 8 && PC.pregSource > 0) {
				const babyDaddy = findFather(PC.pregSource);
				if (babyDaddy) {
					adjust = babyDaddy.counter.PCKnockedUp++;
					adjustFatherProperty(babyDaddy, "PCKnockedUp", adjust);
				}
				if (V.slaveIndices[PC.pregSource]) {
					const {him} = getPronouns(babyDaddy);
					r.push(`Rumors spread among your slaves that your middle is swollen with ${babyDaddy.slaveName}'s child. They're not wrong, though`);
					if (babyDaddy.devotion > 20) {
						r.push(`${babyDaddy.slaveName} is broken enough to not try and use it against you. In fact, it might even draw ${him} closer to you.`);
					} else {
						r.push(`you'd have liked it to have kept that from ${babyDaddy.slaveName}, lest the rebellious bitch use it to remain defiant.`);
					}
				}
			}
		}
	}

	return r.join(" ");
};


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

	if (PC.career === "servant") {
		if (PC.boobs >= 1400) {
			r.push(`You've gotten your dress let out to accommodate your huge bust.`);
		} else if (PC.boobs >= 1200) {
			r.push(`Your dress bulges with your big breasts.`);
		} else if (PC.boobs >= 1000) {
			r.push(`Your dress feels tight around your breasts.`);
		}
	} else if (PC.career === "escort") {
		if (PC.boobs >= 1400) {
			r.push(`Your top strains as it struggles to cover your nipples, letting your`);
			if (PC.markings === "freckles") {
				r.push(`huge, freckled`);
			} else if (PC.markings === "heavily freckled") {
				r.push(`huge, densely freckled`);
			} else {
				r.push(`huge`);
			}
			r.push(`bust bulge lewdly around it.`);
		} else if (PC.boobs >= 1200) {
			r.push(`Your top can barely contain your `);
			if (PC.markings === "freckles") {
				r.push(`big, freckled`);
			} else if (PC.markings === "heavily freckled") {
				r.push(`big, heavily freckled`);
			} else {
				r.push(`big`);
			}
			r.push(`breasts, leaving you looking sluttier than ever.`);
		} else if (PC.boobs >= 1000) {
			r.push(`Your breasts spill over your slutty`);
			if (PC.markings === "freckles") {
				r.push(`top, showing off your freckled cleavage.`);
			} else if (PC.markings === "heavily freckled") {
				r.push(`top, freckle packed cleavage.`);
			} else {
				r.push(`top.`);
			}
		}
	} else {
		if (PC.boobs >= 1400) {
			r.push(`You've gotten your top retailored to fit your huge bust.`);
		} else if (PC.boobs >= 1200) {
			r.push(`Your top strains against your big`);
			if (PC.markings === "freckles") {
				r.push(`breasts, revealing a peak of freckled cleavage.`);
			} else if (PC.markings === "heavily freckled") {
				r.push(`breasts, revealing a peak of densely freckled cleavage.`);
			} else {
				r.push(`breasts.`);
			}
		} else if (PC.boobs >= 1000) {
			r.push(`Your top feels tight around your breasts.`);
		}
	}

	return r.join(" ");
};


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

	if (V.PC.career === "servant") {
		if (V.PC.butt >= 5 && V.PC.balls >= 30) {
			if (V.PC.buttImplant >= 1) {
				r.push(`When you had your dresses tailored you also had to have them make room for your enormous rear. No dress can hide how big and fake it is though.`);
			} else {
				r.push(`When you had your dresses tailored you also had to have them make room for your enormous rear.`);
			}
		} else if (V.PC.butt >= 5) {
			if (V.PC.buttImplant >= 1) {
				r.push(`You had to get your dress let out to contain your enormous rear. It can't hide how big and fake it is though.`);
			} else {
				r.push(`You had to get your dress let out to contain your enormous rear.`);
			}
		} else if (V.PC.butt >= 4) {
			r.push(`Your dress is starting to feel tight around your huge rear.`);
		} else if (V.PC.butt >= 3) {
			r.push(`Your dress is filled out by your big butt.`);
		}
	} else if (V.PC.career === "escort") {
		if (V.PC.dick !== 0) {
			if (V.PC.balls >= 30) {
				if (V.PC.butt >= 5) {
					if (V.PC.buttImplant >= 1) {
						r.push(`Your slutty skirt is also forced to stretch around your enormous rear, making the implants pretty obvious. With both your front and back struggling to get free of your stretchy skirt, it isn't unusual for one or the other to peek out.`);
					} else {
						r.push(`Your slutty skirt is also forced to stretch around your enormous rear, and bending over is basically asking for your skirt to ride up all the way to your hips. With both your front and back struggling to get free of your stretchy skirt, it isn't unusual for one or the other to peek out.`);
					}
				} else if (V.PC.butt >= 4) {
					r.push(`Your huge rear nearly spills out from the bottom of your slutty skirt.`);
				} else if (V.PC.butt >= 3) {
					r.push(`Your slutty skirt is strained by your big butt.`);
				}
			} else {
				if (V.PC.butt >= 5) {
					if (V.PC.buttImplant >= 1) {
						r.push(`You had to get your slutty pants let out to contain your enormous rear. It still feels really tight, however, thanks to the implants.`);
					} else {
						r.push(`You had to get your slutty pants let out to contain your enormous rear. It still overflows scandalously, however.`);
					}
				} else if (V.PC.butt >= 4) {
					r.push(`Your huge rear spills out from the top of your slutty pants.`);
				} else if (V.PC.butt >= 3) {
					r.push(`Your slutty pants are strained by your big butt.`);
				}
			}
		} else {
			if (V.PC.butt >= 5) {
				if (V.PC.buttImplant >= 1) {
					r.push(`Your ass has completely devoured your slutty shorts. You look like you are wearing a thong, leaving your overly`);
					if (V.PC.markings === "freckles") {
						r.push(`round, freckled`);
					} else if (V.PC.markings === "heavily freckled") {
						r.push(`round, heavily freckled`);
					} else {
						r.push(`round`);
					}
					r.push(`cheeks to hang free.`);
					if (V.PC.markings === "freckles") {
						r.push(`Your lower back is covered in a light speckling of freckles alongside your valley of ass cleavage.`);
					} else if (V.PC.markings === "heavily freckled") {
						r.push(`Your freckles are particularly dense across your lower back and valley of ass cleavage.`);
					}
				} else {
					r.push(`Your ass has completely devoured your slutty shorts. You look like you are wearing a thong leaving your`);
					if (V.PC.markings === "freckles") {
						r.push(`freckled`);
					} else if (V.PC.markings === "heavily freckled") {
						r.push(`heavily freckled`);
					}
					r.push(`cheeks to jiggle freely.`);
					if (V.PC.markings === "freckles") {
						r.push(`Your lower back is covered in a light speckling of freckles alongside your valley of ass cleavage.`);
					} else if (V.PC.markings === "heavily freckled") {
						r.push(`Your freckles are particularly dense across your lower back and valley of ass cleavage.`);
					}
				}
			} else if (V.PC.butt >= 4) {
				r.push(`Your slutty shorts are filled to bursting by your rear. Roughly half of your ass is actually in your bottoms, the rest is bulging out scandalously.`);
				if (V.PC.markings === "freckles") {
					r.push(`Your lower back is covered in a light speckling of freckles alongside your ravine of ass cleavage.`);
				} else if (V.PC.markings === "heavily freckled") {
					r.push(`Your freckles are particularly dense across your lower back and ravine of ass cleavage.`);
				}
			} else if (V.PC.butt >= 3) {
				r.push(`Your slutty shorts are strained by your big butt. It spills out every gap it can.`);
				if (V.PC.markings === "freckles") {
					r.push(`Your lower back is covered in a light speckling of freckles alongside your ass cleavage.`);
				} else if (V.PC.markings === "heavily freckled") {
					r.push(`Your freckles are particularly dense across your lower back and ass cleavage.`);
				}
			} else if (V.PC.markings === "freckles") {
				r.push(`Your exposed lower back is covered in a light speckling of freckles.`);
			} else if (V.PC.markings === "heavily freckled") {
				r.push(`Your freckles are particularly dense across your exposed lower back.`);
			}
		}
	} else {
		if (V.PC.dick !== 0) {
			if (V.PC.balls >= 30) {
				if (V.PC.butt >= 5) {
					if (V.PC.buttImplant >= 1) {
						r.push(`Your custom kilt is also forced to stretch around your enormous rear, making the implants pretty obvious. With both your front and back struggling to get free of the restrictive cloth, it isn't unusual for one or the other to peek out.`);
					} else {
						r.push(`Your custom kilt is also forced to stretch around your enormous rear, and bending over is basically asking for it to ride up all the way to your hips. With both your front and back struggling to get free of the restrictive cloth, it isn't unusual for one or the other to peek out.`);
					}
				} else if (V.PC.butt >= 4) {
					r.push(`Your huge rear nearly spills out from the bottom of your custom kilt.`);
				} else if (V.PC.butt >= 3) {
					r.push(`Your custom kilt is strained by your big butt.`);
				}
			} else {
				if (V.PC.butt >= 5) {
					if (V.PC.buttImplant >= 1) {
						r.push(`You had to get your suit pants let out to contain your enormous rear. It does nothing to hide how big and round your asscheeks are, though.`);
					} else {
						r.push(`You had to get your suit pants let out to contain your enormous rear. It can clearly be seen jiggling within them.`);
					}
				} else if (V.PC.butt >= 4) {
					r.push(`Your huge rear threatens to tear apart your suit pants. You'll need to get them let out soon.`);
				} else if (V.PC.butt >= 3) {
					r.push(`Your suit pants are strained by your big butt.`);
				}
			}
		} else {
			if (V.PC.butt >= 5) {
				if (V.PC.buttImplant >= 1) {
					r.push(`Your skirt covers your enormous butt but does nothing to hide its size and shape. You're beginning to show too much leg again; it might be time for a longer skirt.`);
				} else {
					r.push(`Your skirt covers your enormous butt but does nothing to hide its size and fluidity. Your rear is soft enough to fill out your skirt but not lift it up too far; it also translates every motion to the fabric, however.`);
				}
			} else if (V.PC.butt >= 4) {
				r.push(`Your skirt covers your huge butt but does nothing to hide its size; in fact, you've had to start wearing a longer one to make up for the extra surface area.`);
			} else if (V.PC.butt >= 3) {
				r.push(`Your skirt covers your big butt but does nothing to hide its size.`);
			}
		}
	}

	return r.join(" ");
};


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

	if (V.PC.career === "servant") {
		if (V.PC.balls >= 30) {
			r.push(`Your dress and apron bulge with your enormous balls; you had to have your dresses tailored so that the swinging mass of your sack would stop bursting seams inadvertently.`);
		} else if (V.PC.balls >= 14) {
			r.push(`Your dress and apron bulge with your enormous balls.`);
		} else if (V.PC.balls >= 9) {
			r.push(`Your dress hides your huge balls, but it does nothing to hide your altered gait.`);
		} else if (V.PC.balls >= 5) {
			r.push(`Your dress hides your big balls.`);
		}
	} else if (V.PC.career === "escort") {
		if (V.PC.balls >= 30) {
			r.push(`You've pretty much given up on pants because of your monstrous balls, but you've replaced them with a slutty skirt that stretches around their veiny contours. People can't help staring to see if they'll get a glimpse of your massive sack peeking out from under the skirt.`);
		} else if (V.PC.balls >= 14) {
			r.push(`You've swapped up to a larger pair of slutty pants, specially designed with extra sack room. They draw the eye right to your`);
			if (V.PC.preg >= 28) {
				r.push(`bulge; you can do without people thinking you are giving birth into your pants, though.`);
			} else {
				r.push(`bulge.`);
			}
		} else if (V.PC.balls >= 9) {
			r.push(`Your slutty pants are really tight around the groin, but they hold your huge balls in place quite nicely.`);
		} else if (V.PC.balls >= 5) {
			r.push(`Your slutty pants bulge more than ever with your big balls.`);
		}
	} else {
		if (V.PC.balls >= 30) {
			r.push(`You've pretty much given up on suit pants because of your monstrous balls, but you've replaced them with a custom kilt tailored to match the rest of your business attire. People would wonder why you're wearing such old fashioned clothes if your ridiculous bulge didn't make it obvious.`);
		} else if (V.PC.balls >= 14) {
			r.push(`You've had to get your suit pants retailored again to fit your enormous balls. It is obvious that the bulge in your pants is not your`);
			if (V.PC.preg >= 28) {
				r.push(`penis; you've had several people rush to your aid under the mistaken belief that`);
				if (V.PC.pregType > 1) {
					r.push(`one of your children`);
				} else {
					r.push(`your child`);
				}
				r.push(`was crowning into your pants.`);
			} else {
				r.push(`penis.`);
			}
		} else if (V.PC.balls >= 9) {
			r.push(`You've had to get your suit pants retailored to fit your huge balls. It gives you a striking figure, though.`);
		} else if (V.PC.balls >= 5) {
			r.push(`Your suit pants bulge more than ever with your big balls.`);
		}
	}

	return r.join(" ");
};


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

	if (PC.preg > 0) {
		if (PC.belly >= 120000) {
			r.push(`Your belly is coated with stretch marks and is taut as a drum; you don't know how much more your poor womb can endure. Kicks can almost constantly be seen dotting its surface. You give it a pat for good measure, only encouraging your ${pregNumberName(PC.pregType, 2)}`);
			r.push(`to squirm in excitement.`);
			if (PC.dick !== 0) {
				r.push(`As your dick hardens under the prostate stimulation, you call for a slave to receive the incoming load.`);
			}
		} else if (PC.belly >= 105000) {
			r.push(`Getting out of your chair is practically a dream at this point. It takes far too much effort to do it on your own and is a little embarrassing to ask help with.`);
		} else if (PC.belly >= 90000) {
			r.push(`You can barely reach around your gravid mass any longer. You've also had to reinforce your chair under your growing weight.`);
		} else if (PC.belly >= 75000) {
			r.push(`Your belly is starting to become worrying; you feel over-filled at all times and your children like to remind you just how stuffed you are.`);
		} else if (PC.belly >= 60000) {
			r.push(`You're definitely having multiples; there is no denying it at this point. All you can do is try to relax and keep trying to stave off the stretch marks.`);
		} else if (PC.belly >= 45000) {
			r.push(`You both look and feel enormous; your belly juts out so much now. You stand no chance of sitting at your desk normally and have taken to angling you chair and belly to the side instead.`);
		} else if (PC.belly >= 30000) {
			r.push(`Your chair has taken to creaking ominously whenever you shift your pregnant bulk while you've taken to keeping your belly uncovered to give it room.`);
		} else if (PC.belly >= 14000) {
			r.push(`You can barely fit before your desk anymore and have had to take measures to accommodate your gravidity.`);
		} else if (PC.belly >= 12000) {
			r.push(`You can barely wrap your arms around your huge pregnant belly, and when you do, your popped navel reminds you just how full you are.`);
		} else if (PC.belly >= 10000) {
			r.push(`Your pregnancy has gotten quite huge; none of your clothes fit it right.`);
		} else if (PC.belly >= 7000) {
			r.push(`Your pregnant belly juts out annoyingly far; just getting dressed is a pain now.`);
		} else if (PC.belly >= 5000) {
			r.push(`Your belly has gotten quite large with child; it is beginning to get the way of sex and business.`);
		} else if (PC.belly >= 1500) {
			r.push(`Your belly is now large enough that there is no hiding it.`);
		} else if (PC.belly >= 500) {
			r.push(`Your belly is rounded by your early pregnancy.`);
		} else if (PC.belly >= 250) {
			r.push(`Your lower belly is beginning to stick out; you're definitely pregnant.`);
		} else if (PC.belly >= 100) {
			r.push(`Your belly is slightly swollen; combined with your missed period, odds are you're pregnant.`);
		} else if (PC.belly < 100) {
			r.push(`Your period hasn't happened in some time; you might be pregnant.`);
		}
		if (PC.preg >= 41) {
			r.push(`You don't know why you even bother getting out of bed; you are overdue and ready to drop at many time, making your life as arcology owner very difficult. You try to relax and enjoy your slaves, but you can only manage so much in this state.`);
		} else if (PC.preg >= 39) {
			r.push(`You feel absolutely massive; your full-term belly makes your life as arcology owner very difficult. You try your best to not wander too far from your penthouse, not with labor and birth so close.`);
		}
	} else if (PC.belly >= 1500) {
		r.push(`Your belly is still very distended from your recent pregnancy.`);
	} else if (PC.belly >= 500) {
		r.push(`Your belly is still distended from your recent pregnancy.`);
	} else if (PC.belly >= 250) {
		r.push(`Your belly is still bloated from your recent pregnancy`);
	} else if (PC.belly >= 100) {
		r.push(`Your belly is still slightly swollen after your recent pregnancy.`);
	}

	return r.join(" ");
};


code:
App.Desc.Player.officeBoobs = function(PC = V.PC) {
	const r = [];
	let frag;

	if (PC.boobs >= 1400) {
		r.push(`Your breasts are`);
		if (PC.markings === "freckles") {
			r.push(`enormous with light freckling on the tops and in your cleavage.`);
		} else if (PC.markings === "heavily freckled") {
			r.push(`enormous and covered in freckles, which are particularly dense in the cleft between them.`);
		} else {
			r.push(`enormous.`);
		}
		if (PC.boobsImplant > 0) {
			r.push(`They are big, round, and obviously implants. They insist on maintaining their shape no matter how you move.`);
		} else {
			r.push(`They are all natural, heavy, and a bit saggy though they retain some perk. Every single move you make sends ripples through your cleavage. You catch yourself watching them move in the mirror every so often.`);
		}
		if (PC.lactation > 0) {
			r.push(`Your breasts feel even more enormous lately; this is likely a side effect of your lactation, though you could do without the wet spots forming over your nipples.`);
		}
	} else if (PC.boobs >= 1200) {
		r.push(`Your breasts are`);
		if (PC.markings === "freckles") {
			r.push(`huge with light freckling on the tops and in your cleavage.`);
		} else if (PC.markings === "heavily freckled") {
			r.push(`huge and covered in freckles, which are particularly dense in the cleft between them.`);
		} else {
			r.push(`huge.`);
		}
		if (PC.boobsImplant > 0) {
			r.push(`They are unnaturally perky for their size. When you shake them, they barely move.`);
		} else {
			r.push(`They are all natural and a little heavy. They bounce lewdly when you shake them and take a little too long to calm down.`);
		}
		if (PC.lactation > 0) {
			r.push(`Your breasts feel even more huge lately; this is this is likely a side effect of your lactation, though you could do without the wet spots forming over your nipples.`);
		}
	} else if (PC.boobs >= 1000) {
		r.push(`Your breasts are pretty`);
		if (PC.markings === "freckles") {
			r.push(`big with light freckling on the tops and in your cleavage.`);
		} else if (PC.markings === "heavily freckled") {
			r.push(`big and covered in freckles, which are particularly dense in the cleft between them.`);
		} else {
			r.push(`big.`);
		}
		if (PC.boobsImplant > 0) {
			r.push(`They are nice, perky and not obviously implants. They jiggle only slightly when you shake them though.`);
		} else {
			r.push(`They are nice and perky, despite their size. They bounce lewdly when you shake them.`);
		}
		if (PC.lactation > 0) {
			r.push(`Your breasts feel bigger lately; this is likely a side effect of your lactation, though you could do without the wet spots forming over your nipples.`);
		}
	} else if (PC.boobs >= 800) {
		r.push(`Your breasts are on the larger side of`);
		if (PC.lactation > 0) {
			r.push(`things, though you could do without the wet spots forming over your nipples.`);
		} else {
			r.push(`things.`);
		}
		if (PC.markings === "freckles") {
			r.push(`The tops of your breasts and your cleavage are lightly freckled.`);
		} else if (PC.markings === "heavily freckled") {
			r.push(`They are covered in freckles, which are particularly dense in the cleft between them.`);
		}
	} else if (PC.boobs >= 650) {
		r.push(`Your breasts are certainly`);
		if (PC.markings === "freckles") {
			r.push(`eye-catching with light freckling on the tops and in your cleavage.`);
		} else if (PC.markings === "heavily freckled") {
			r.push(`eye-catching and covered in freckles, which are particularly dense in the cleft between them.`);
		} else {
			r.push(`eye-catching.`);
		}
		r.push(`They are nice and perky, with just the right amount of bounce when you shake them.`);
		if (PC.lactation > 0) {
			r.push(`Your breasts feel bigger lately; this is likely a side effect of your lactation, though you could do without the wet spots forming over your nipples.`);
		}
	} else if (PC.boobs >= 500) {
		r.push(`Your breasts are fairly average, at least to old world`);
		if (PC.markings === "freckles") {
			r.push(`standards, with light freckling on the tops and in your cleavage.`);
		} else if (PC.markings === "heavily freckled") {
			r.push(`standards, and covered in freckles, which are particularly dense in the cleft between them.`);
		} else {
			r.push(`standards.`);
		}
		r.push(`They are very perky, but aren't big enough to have a nice bounce when you shake them.`);
		if (PC.lactation > 0) {
			r.push(`Your breasts feel bigger lately; this is likely a side effect of your lactation, though you could do without the wet spots forming over your nipples.`);
		}
	} else if (PC.boobs >= 400) {
		r.push(`Your breasts are considered small by most`);
		if (PC.markings === "freckles") {
			r.push(`standards, with light freckling on the tops and in your cleavage.`);
		} else if (PC.markings === "heavily freckled") {
			r.push(`standards, and covered in freckles, which are particularly dense in the cleft between them.`);
		} else {
			r.push(`standards.`);
		}
		r.push(`Their size makes them extremely perky, at the cost of having little to no bounce.`);
		if (PC.lactation > 0) {
			r.push(`Your breasts feel bigger lately; this is likely a side effect of your lactation, though you could do without the wet spots forming over your nipples.`);
		}
	} else if (PC.boobs >= 300) {
		r.push(`Your breasts, if they can even be called that, are`);
		if (PC.markings === "freckles") {
			r.push(`covered in a light spray of freckles.`);
		} else if (PC.markings === "heavily freckled") {
			r.push(`covered in dense freckles.`);
		} else {
			r.push(`tiny even by old world standards.`);
		}
		r.push(`On the plus side, no chance of sag.`);
		if (PC.lactation > 0) {
			r.push(`Your breasts feel more substantial lately; this is likely a side effect of your lactation, though you could do without the wet spots forming over your nipples.`);
		}
	} else if (PC.title === 1) {
		r.push(`Your chest is quite`);
		if (PC.lactation > 0) {
			frag = ` masculine, though the pair of wet spots forming over your nipples suggest otherwise`;
		} else {
			frag = ` masculine`;
		}
		if (PC.markings === "freckles") {
			if (PC.lactation > 0) {
				frag += `,`;
			}
			frag += ` and covered in a light spray of freckles.`;
		} else if (PC.markings === "heavily freckled") {
			if (PC.lactation > 0) {
				frag += `,`;
			}
			frag += ` and covered in dense freckles.`;
		} else {
			frag += `.`; // all this frag bs is to make sure there is no space before the period. Sigh.
		}
		r.push(frag);
	} else {
		r.push(`Your chest is`);
		if (PC.lactation > 0) {
			frag = ` non-existent, save for the pair of bulging milk glands beneath your nipples`;
		} else {
			frag = ` non-existent`;
		}
		if (PC.markings === "freckles") {
			if (PC.lactation > 0) {
				frag += `,`;
			}
			frag += ` and covered in a light spray of freckles.`;
		} else if (PC.markings === "heavily freckled") {
			if (PC.lactation > 0) {
				frag += `,`;
			}
			frag += ` and covered in dense freckles.`;
		} else {
			frag += `.`;
		}
		r.push(frag);
	}

	return r.join(" ");
};


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

	if (V.PC.butt >= 5) {
		if (V.PC.balls >= 14 && V.ballsAccessibility !== 1) {
			if (V.PC.markings === "freckles") {
				r.push(`Your enormous, freckled`);
			} else if (V.PC.markings === "heavily freckled") {
				r.push(`Your enormous, densely freckled`);
			} else {
				r.push(`Your enormous`);
			}
			r.push(`butt would make your chair extremely comfortable if it wasn't for your enormous balls. You have to be extremely careful to prevent your enormous cheeks from pinching your nuts.`);
		} else {
			if (V.PC.markings === "freckles") {
				r.push(`Your enormous, freckled`);
			} else if (V.PC.markings === "heavily freckled") {
				r.push(`Your enormous, densely freckled`);
			} else {
				r.push(`Your enormous`);
			}
			r.push(`butt makes for an extremely comfortable seat. You hope the chair doesn't follow you when you stand up this time.`);
		}
	} else if (V.PC.butt >= 4) {
		if (V.PC.balls >= 14 && V.ballsAccessibility !== 1) {
			if (V.PC.markings === "freckles") {
				r.push(`Your huge, freckled`);
			} else if (V.PC.markings === "heavily freckled") {
				r.push(`Your huge, densely freckled`);
			} else {
				r.push(`Your huge`);
			}
			r.push(`butt would make for a very comfortable seat if it wasn't for your enormous balls. You have to be careful to prevent your huge cheeks from pinching your nuts.`);
		} else {
			if (V.PC.markings === "freckles") {
				r.push(`Your huge, freckled`);
			} else if (V.PC.markings === "heavily freckled") {
				r.push(`Your huge, densely freckled`);
			} else {
				r.push(`Your huge`);
			}
			r.push(`butt makes for a very comfortable seat.`);
		}
	} else if (V.PC.butt >= 3) {
		if (V.PC.balls >= 14 && V.ballsAccessibility !== 1) {
			if (V.PC.markings === "freckles") {
				r.push(`Your big, freckled`);
			} else if (V.PC.markings === "heavily freckled") {
				r.push(`Your big, densely freckled`);
			} else {
				r.push(`Your big`);
			}
			r.push(`butt would make for a comfortable seat if your enormous balls weren't getting in the way.`);
		} else {
			if (V.PC.markings === "freckles") {
				r.push(`Your big, freckled`);
			} else if (V.PC.markings === "heavily freckled") {
				r.push(`Your big, densely freckled`);
			} else {
				r.push(`Your big`);
			}
			r.push(`butt makes for a comfortable seat.`);
		}
	}

	return r.join(" ");
};


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

	if (V.PC.balls >= 30) {
		if (V.ballsAccessibility === 1) {
			r.push(`Thankfully your accessibility remodeling included a custom chair.`);
			if (V.PC.ballsImplant > 0) {
				r.push(`When combined with the protective gel surrounding`);
			} else {
				r.push(`Despite the cumbrous bulk of`);
			}
			r.push(`your massive sperm factories, it's rather comfortable. It even has an attachment to catch your never-ending stream of precum, keeping the mess to a minimum.`);
		} else {
			r.push(`Your monstrous balls make it impossible for you to sit normally in a standard chair, forcing you sit on the edge and let them dangle. You have to sit while naked below the waist unless you want your clothes soaked with spermy precum.`);
		}
	} else if (V.PC.ballsImplant > 1 && V.PC.balls >= 14) {
		if (V.ballsAccessibility === 1) {
			r.push(`Thanks to your accessibility remodeling, your enormous gel-filled scrotum is able to rest comfortably in your custom chair.`);
		} else {
			r.push(`No matter how you sit, your enormous gel-filled scrotum is never quite comfortable. Fortunately the cosmetic gel protects you from any major discomfort.`);
		}
	} else if (V.PC.balls >= 14) {
		if (V.ballsAccessibility === 1) {
			r.push(`Thanks to your accessibility remodeling, your enormous sperm factories are able to rest comfortably in your custom chair. Your chair also catches your never-ending precum, helping to prevent a mess.`);
		} else {
			r.push(`You have to sit very carefully in your desk chair, giving your enormous sperm factories plenty of room. As they rest on the chair they deform uncomfortably under their own weight, causing even more of a mess from your ever-drooling cock.`);
		}
	} else if (V.PC.balls >= 9) {
		r.push(`You shift in your seat and spread your legs to give your huge balls room.`);
	} else if (V.PC.balls >= 5) {
		r.push(`You shift in your seat to make room for your big balls.`);
	}

	return r.join(" ");
};