code:
App.Events.recFSIntellectualDependencyTwo = class recFSIntellectualDependencyTwo extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.FSAnnounced === 1,
			() => V.arcologies[0].FSIntellectualDependency > random(1, 100) || (V.debugMode > 0 && V.debugModeEventSelection > 0)
		];
	}

	execute(node) {
		let r = [];
		const slave = GenerateNewSlave(null, {
			minAge: 16, maxAge: 20, disableDisability: 1, race: "nonslave"
		});
		generateSalonModifications(slave);
		slave.origin = "$He was voluntarily enslaved after $he overdosed on psychosuppressant-laced aphrodisiacs and fried $his brain.";
		slave.dullIntelligence = 1;
		const geneticInt = slave.intelligence;/* for longSlaveDescription to report what the intelligence will be while keeping the original value safe for ${V.genePool[]} */
		slave.intelligence = -100;
		slave.devotion = random(20, 40);
		slave.trust = random(0, 50);
		setHealth(slave, jsRandom(-60, -40), undefined, undefined, 0, 20);
		slave.weight = random(-40, 0);
		slave.energy = 100;
		slave.attrXX = 100;
		slave.attrXY = 100;
		slave.addict = 50;
		slave.canRecruit = 0;

		const {
			He,
			his, he, him
		} = getPronouns(slave);
		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		r.push(`You receive so many messages, as a noted titan of the new Free Cities world, that ${V.assistant.name} has to be quite draconian in culling them. ${HeA} lets only the most important through to you. One category of message that always gets through regardless of content, though, is requests for voluntary enslavement. As the new world takes shape, they've become less rare than they once were.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`This one, unusually, is voice-only. The caller seems extremely intoxicated as ${he} struggles to explain ${his} situation, and you're not far off on that assumption; ${he} overdosed on illicit drugs at a party and can't think straight any longer. ${He} apparently cannot remember where ${he} came from and is desperate for any sort of support, even if it means enslavement. It's not like ${he} has much freedom left with ${his} mind in tatters anyway.`);

		App.Events.addParagraph(node, r);

		node.append(App.Desc.longSlave(slave, {market: "generic"}));

		const choices = [];

		if (V.cash >= contractCost) {
			choices.push(new App.Events.Result(`Enslave ${him}`, enslave, `This will cost ${cashFormat(contractCost)}`));
			choices.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));
		} else {
			choices.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}.`));
		}
		App.Events.addResponses(node, choices);

		function enslave() {
			const frag = new DocumentFragment();
			r = [];
			slave.intelligence = geneticInt;
			r.push(`It takes several hours to track ${him} down for enslavement and once ${he} arrives it becomes clear that ${his} mental state has broken down even further. ${He} spends the better part of the process masturbating and begging for you to touch ${his} body.`);

			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function sell() {
			cashX(cost, "slaveTransfer");
			return `It takes several hours to track ${him} down for enslavement and once ${he} arrives it becomes clear that ${his} mental state has broken down even further. A purchaser's agent arrives and takes charge of ${him}, and takes hold of ${his} hand. He leads ${him} away, and it's done.`;
		}
	}
};


code:
App.Events.recFSMaturityPreferentialist = class recFSMaturityPreferentialist extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.FSAnnounced === 1,
		];
	}

	actorPrerequisites() {
		return [];
	}

	get weight() {
		return V.arcologies[0].FSMaturityPreferentialist > random(1, 100) ? 1 : 0;
	}

	execute(node) {
		let r = [];
		const slave = GenerateNewSlave(null, {
			minAge: V.retirementAge-4, maxAge: V.retirementAge-2, ageOverridesPedoMode: 1, disableDisability: 1
		});
		slave.origin = "$He offered $himself to you for enslavement after deciding you were $his best hope of a good life as a slave.";
		setHealth(slave, jsRandom(40, 60), undefined, undefined, 0, 0);
		slave.devotion = random(25, 45);
		slave.trust = random(25, 45);
		slave.muscles = 20;
		slave.face = random(0, 20);
		slave.anus = random(2, 3);
		if (slave.vagina !== -1) {
			slave.vagina = random(2, 3);
		}
		slave.weight = 20;
		slave.boobs += 50*random(1, 10);
		slave.butt += random(0, 2);
		slave.lips += random(5, 15);
		slave.skill.entertainment = 35;
		slave.skill.anal = 35;
		slave.skill.oral = 35;
		slave.behavioralFlaw = "none";
		slave.sexualFlaw = "none";
		slave.energy = random(80, 90);
		const {
			He,
			his, he, him, himself, woman, women
		} = getPronouns(slave);
		const {title: Master} = getEnunciation(slave);
		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		r.push(`You receive so many messages, as a noted titan of the new Free Cities world, that ${V.assistant.name} has to be quite draconian in culling them. ${HeA} lets only the most important through to you. One category of message that always gets through regardless of content, though, is requests for voluntary enslavement. As the new world takes shape, they've become less rare than they once were.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`And this one is a rare one indeed. It's a personal file, and you suppress the urge to see whether ${V.assistant.name} is bugged and has misfiled an application for employment. The beautiful older ${woman} depicted has included a resume listing ${his} skills, and a clever selection of photographs: tasteful shots of ${him} in nice makeup and a fashionable business skirt, and fully nude mirror shots, flaws and all. Curious, you place a video call and get an immediate answer. It seems that 'personal circumstances' that ${he} saw coming are forcing ${him} to accept enslavement. ${He} had some weeks of warning, however, and seems to have made use of the time to find an arcology owner that treats ${women} of ${his} age well, and then to make ${himself} as appealing as possible in the hope you'll keep ${him}.`);

		App.Events.addParagraph(node, r);

		node.append(App.Desc.longSlave(slave, {market: "generic"}));

		const choices = [];

		if (V.cash >= contractCost) {
			choices.push(new App.Events.Result(`Enslave ${him}`, enslave, `This will cost ${cashFormat(contractCost)}`));
			choices.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));
		} else {
			choices.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}.`));
		}
		App.Events.addResponses(node, choices);

		function enslave() {
			const frag = new DocumentFragment();
			r = [];
			r.push(`When ${he} arrives, you're impressed again. ${He} elected to appear in black lace lingerie, and stalks into your office on high heels with a calculated sensuality.`);
			r.push(Spoken(slave, `"${Master},"`));
			r.push(`${he} purrs,`);
			r.push(Spoken(slave, `"I've done my very best to get ready to be a good slave. May I show you?"`));
			r.push(`More than a little curious, you nod. ${He} starts to strip slowly and skillfully.`);
			r.push(Spoken(slave, `"Well, ${Master}, I had a month. So I did my best to get in shape."`));
			r.push(`${He} rubs ${his} hands down ${his} toned belly, hooking fingers under ${his} thong.`);
			r.push(Spoken(slave, `"I practiced stripping. I practiced blowjobs."`));
			r.push(`${He} turns slowly, revealing the base of an impressively large buttplug nestling between ${his} cheeks.`);
			r.push(Spoken(slave, `"I even practiced buttsex."`));

			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function sell() {
			cashX(cost, "slaveTransfer");
			return `${He} and the buyer's agent arrive at the same time. ${He} accepts this defeat with good grace, and cooperates with him as best ${he} can. ${He} gives you a single questioning glance, with just a glint of hope; you take pity, and tell ${him} ${he} won't be going far. ${He}'s to be employed in one of the arcology's better MILF brothels. ${He}'ll be fucked ten times tomorrow, it's true, but ${he}'ll be well treated when ${he} doesn't have dicks in ${him}.`;
		}
	}
};

repo_name: Arkerthan/fc

license: mit


code:
App.Events.recFSMaturityPreferentialistTwo = class recFSMaturityPreferentialistTwo extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.FSAnnounced === 1,
			() => V.arcologies[0].FSMaturityPreferentialist > random(1, 100) || (V.debugMode > 0 && V.debugModeEventSelection > 0)
		];
	}

	execute(node) {
		let r = [];
		const slave = GenerateNewSlave(null, {
			minAge: 36, maxAge: 55, ageOverridesPedoMode: 1, disableDisability: 1
		});
		slave.origin = "$He was sold to you by $his son, in order to raise funds for his business.";
		slave.boobs = random(4, 6)*200;
		slave.natural.boobs = slave.boobs - 200;
		slave.weight = 20;
		slave.height = random(130, 150);
		slave.face = random(15, 100);
		slave.butt = random(3, 4);
		slave.lips = 15;
		slave.devotion = random(25, 45);
		slave.trust = random(25, 45);
		slave.career = App.Data.Careers.General.educated.random();
		setHealth(slave, jsRandom(20, 40), undefined, undefined, 0, 0);
		slave.intelligence = random(51, 95);
		slave.intelligenceImplant = 15;
		slave.teeth = "normal";
		slave.pubicHStyle = "waxed";
		slave.behavioralFlaw = "arrogant";
		slave.counter.birthsTotal = 1;
		const {
			His, He,
			his, he, him, himself, woman, girl
		} = getPronouns(slave);
		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		const contractCost = 3000;
		const cost = slaveCost(slave) - contractCost;
		r.push(`You receive so many messages, as a noted titan of the new Free Cities world, that ${V.assistant.name} has to be quite draconian in culling them. ${HeA} lets only the most important through to you. One category of message that always gets through regardless of content, though, is requests for voluntary enslavement. As the new world takes shape, they've become less rare than they once were.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`The call comes in from a middle-class area. It appears that the youthful man placing the call has a failing business, and is leveraging his last remaining asset by selling his stately-looking mother into slavery. Enslaving ${him} will be costlier than usual, but it seems likely to be worth it. From the dossier ${his} son forwarded to you, ${he}'s both educated and intelligent, both relics of ${his} impressive pedigree. Even better, ${he}'s aged like a fine wine, a short, stacked and attractive beauty with a face and rack that must be the envy of ${girl}s half ${his} age. ${He}'s aware of the situation at hand, and peeks in from the corner of the screen to say,`);
		r.push(Spoken(slave, `"I hear you appreciate a mature ${woman}; if I'm going down into slavery, ${(V.PC.title !== 0) ? "sir" : "ma'am"}, I hope for your sake that you know how to treat a ${woman} of my caliber."`));

		App.Events.addParagraph(node, r);

		node.append(App.Desc.longSlave(slave, {market: "generic"}));

		const choices = [];

		if (V.cash >= contractCost) {
			choices.push(new App.Events.Result(`Enslave ${him}`, enslave, `This will cost ${cashFormat(contractCost)}`));
			choices.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));
		} else {
			choices.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}.`));
		}
		App.Events.addResponses(node, choices);

		function enslave() {
			const frag = new DocumentFragment();
			r = [];
			r.push(`${He} arrives apologizing for ${his} fine clothing.`);
			r.push(Spoken(slave, `"I'm sorry,"`));
			r.push(`${he} apologizes sadly,`);
			r.push(Spoken(slave, `"but I wanted to wear my best one last time."`));
			r.push(`${He} sighs, squares ${his} shoulders, and visibly steels ${himself}.`);
			r.push(Spoken(slave, `"My son's a bastard for selling me to you, and all to save that useless store of his."`));
			r.push(`${He} delivers this last with a bitter smile on ${his} lips.`);
			r.push(Spoken(slave, `"At least he had the sense to sell me to someone with exquisite taste, like you. After all, you did buy me."`));

			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function sell() {
			cashX(cost, "slaveTransfer");
			const frag = new DocumentFragment();
			r = [];
			r.push(`${He} arrives apologizing for ${his} fine clothing.`);
			r.push(Spoken(slave, `"I'm sorry,"`));
			r.push(`${he} apologizes sadly,`);
			r.push(Spoken(slave, `"but I wanted to wear my best one last time."`));
			r.push(`${He} sighs, squares ${his} shoulders, and visibly steels ${himself}.`);
			r.push(Spoken(slave, `"My son's a bastard for selling me to you, and all to save that useless store of his."`));
			r.push(`${He} delivers this last with a bitter smile on ${his} lips.`);
			r.push(Spoken(slave, `"At least he had the sense to sell me to someone with exquisite taste, like you. After all, you did buy me."`));
			r.push(`${He}'s about to declaim something else when a purchaser's agent arrives to bundle ${him} off. ${His} face darkens and ${he} mulls something over, probably preparing a really cutting remark, but before ${he} can deliver it the agent fastens a bag over ${his} head and ${he} is heard no more.`);
			App.Events.addParagraph(frag, r);
			return frag;
		}
	}
};


code:
App.Events.recFSNeoImperialist = class recFSNeoImperialist extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.FSAnnounced === 1,
		];
	}

	actorPrerequisites() {
		return [];
	}

	get weight() {
		return V.arcologies[0].FSNeoImperialist > random(1, 100) ? 1 : 0;
	}

	execute(node) {
		let r = [];
		const slave = GenerateNewSlave(null, {minAge: 22, maxAge: 28, disableDisability: 1});
		slave.origin = "A former old world soldier dishonorably discharged for reasons $he refuses to discuss, $he offered $himself to you after romanticizing your martial, Imperial society.";
		slave.devotion = random(5, 20);
		slave.trust = random(0, 5);
		slave.career = "a soldier";
		generateSalonModifications(slave);
		setHealth(slave, jsRandom(-10, 10), undefined, undefined, 0, 0);
		slave.muscles = 60;
		slave.face = random(15, 50);
		slave.skill.whoring = 0;
		slave.skill.entertainment = 0;
		slave.skill.combat = 70;
		slave.intelligence = random(-50, 50);
		slave.intelligenceImplant = 0;
		slave.teeth = "normal";

		const {
			He,
			his, he, him, woman
		} = getPronouns(slave);
		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		r.push(`You receive so many messages, as a noted titan of the new Free Cities world, that ${V.assistant.name} has to be quite draconian in culling them. ${HeA} lets only the most important through to you. One category of message that always gets through regardless of content, though, is requests for voluntary enslavement. As the new world takes shape, they've become less rare than they once were.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`The call comes in from a private old world apartment. The caller is a ${woman} who speaks in a gruff and serious tone, explaining that ${he} was a soldier in an Old World military who served with distinction for years before being dishonorably discharged due to some incident that ${he} refuses to talk about when you ask. ${He} says that there's no room left for tired dogs in the crumbling economy of the old world for those without money, and ${his} only real options are to submit to menial servitude or open slavery. ${He} says that ${he}'s heard that your Imperial society values warriors and honor, and that ${he}'d prefer living somewhere where ${his} skills are worth something — even as a slave. At your request, ${he} sends over a dossier containing ${his} personal data.`);

		App.Events.addParagraph(node, r);

		node.append(App.Desc.longSlave(slave, {market: "generic"}));

		const choices = [];

		if (V.cash >= contractCost) {
			choices.push(new App.Events.Result(`Enslave ${him}`, enslave, `This will cost ${cashFormat(contractCost)}`));
			choices.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));
		} else {
			choices.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}.`));
		}
		App.Events.addResponses(node, choices);

		function enslave() {
			const frag = new DocumentFragment();
			r = [];
			r.push(`${He} arrives gruff and unfazed, or at least well-trained enough to pretend to be gruff and unfazed, at the`);
			if (canSee(slave)) {
				r.push(`bright lights`);
			} else if (canHear(slave)) {
				r.push(`blaring sounds`);
			} else {
				r.push(`strange sensations`);
			}
			r.push(`of your arcology, and the combinations of ultra-high technology and feudal social structure that maintains them. When you tell ${him} to strip, ${his} stoic visage flickers for a moment, but then returns, and ${he} drops ${his} pants to show ${his} muscular body without a further word of protest.`);

			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function sell() {
			cashX(cost, "slaveTransfer");
			return `${He} arrives stoic and gruff, refusing to allow the strange new smells and sounds of the arcology to have any apparent effect on ${his} psyche. It seems as though ${he}'s already made up ${his} mind about the decision to become your slave, and doesn't allow even the slightest trace of doubt to enter — until you order ${him} to hang a price placard over ${his} chest. ${He} stares at you for a moment with cold eyes that communicate a deeply-felt betrayal, then silently leaves, accompanied by one of your slaves. Whether ${his} submission was to deny you the pleasure of a reaction or simple stoicism, you can't tell.`;
		}
	}
};


code:
App.Events.recFSPastoralist = class recFSPastoralist extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.FSAnnounced === 1,
			() => V.arcologies[0].FSPastoralist > random(1, 100) || (V.debugMode > 0 && V.debugModeEventSelection > 0)
		];
	}

	execute(node) {
		let r = [];
		const contractCost = 1000;
		const pram = {disableDisability: 1};
		if (V.pedo_mode === 1) {
			pram.minAge = V.fertilityAge;
			pram.maxAge = 21;
			pram.ageOverridesPedoMode = 1; /* Can lactate. */
		} else {
			pram.minAge = random(14, 16);
		}
		const slave = GenerateNewSlave("XX", pram);
		generateSalonModifications(slave);
		slave.origin = "$He offered $himself for voluntary enslavement, choosing you as $his new owner because you treat lactating girls well.";
		setHealth(slave, jsRandom(-20, 20), undefined, undefined, 0, 0);
		slave.devotion = random(-15, 15);
		slave.trust = random(5, 15);
		slave.preg = random(15, 30);
		slave.pregType = 1;
		slave.pregWeek = slave.preg;
		slave.pregKnown = 1;
		SetBellySize(slave);
		slave.lactation = 1;
		slave.lactationDuration = 2;
		slave.vagina = 1;
		slave.boobs += 200 * random(2, 5);
		const cost = slaveCost(slave) - 1000;
		const {
			His, He,
			his, he, him, himself, woman
		} = getPronouns(slave);
		const {say} = getEnunciation(slave);
		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");

		r.push(`You receive so many messages, as a noted titan of the new Free Cities world, that ${V.assistant.name} has to be quite draconian in culling them. ${HeA} lets only the most important through to you. One category of message that always gets through regardless of content, though, is requests for voluntary enslavement. As the new world takes shape, they've become less rare than they once were.`);

		App.Events.addParagraph(node, r);
		r = [];

		r.push(
			`This call is coming from a public kiosk, which is usually an indication that the person on the other end is a transient individual who has decided to take slavery over homelessness. This proves to be right on the money in this case, though the ${woman} isn't too terribly bedraggled; ${his} situation must be recent. ${He} asks to be enslaved with the crushing sadness most such people experience during their last free hours.`,
			Spoken(slave, `"I'm pregnant,"`),
			`${he} ${say}s through tears.`,
			Spoken(slave, `"I know I'm not that pretty, ${(V.PC.title !== 0) ? "sir" : "ma'am"}. But,"`),
			`and ${he} brings ${his} sizable chest into view,`,
			Spoken(slave, `"I've got pretty big boobs, and I started giving milk yesterday. I was searching the net, and I saw that you milk women, ${(V.PC.title !== 0) ? "sir" : "ma'am"}. It seems like a better life than getting fucked all the time."`)
		);

		App.Events.addParagraph(node, r);

		node.append(App.Desc.longSlave(slave, {market: "generic"}));

		const choices = [];

		if (V.cash >= contractCost) {
			choices.push(new App.Events.Result(`Enslave ${him}`, enslave, `This will cost ${cashFormat(contractCost)}`));
			choices.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));
		} else {
			choices.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}.`));
		}
		App.Events.addResponses(node, choices);

		function enslave() {
			const frag = new DocumentFragment();
			r = [];
			r.push(`${He} drags ${himself} in, but as the enslavement process winds grindingly on, ${he} shakes off ${his} depression. The vast weight of ${his} situation lifts from ${him}. You've seen this before, the perverse internal freedom that comes with the knowledge that ${his} life is in the hands of another now, and that all ${he} has to do or can do is obey. ${His} last words to you as a free ${woman} are an ironic statement that, when ${he} was teased back in school for the size of ${his} boobs, ${he} never thought they'd save ${him} one day.`);
			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function sell() {
			cashX(cost, "slaveTransfer");
			return `${He} drags ${himself} in, but as the enslavement process winds grindingly on, ${he} shakes off ${his} depression. It threatens to descend again when a purchaser's agent comes in to take ${him} away. ${He} begs to know where ${he}'s going, so you tell ${him} ${he}'s to be a cow in a slave dairy. ${He} quails at the term, but you observe that ${he}'ll be well treated and lightly used, if at all, and ${he} seems to take heart at this.`;
		}
	}
};


code:
App.Events.recFSPastoralistTwo = class recFSPastoralistTwo extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.FSAnnounced === 1,
		];
	}

	actorPrerequisites() {
		return [];
	}

	get weight() {
		return V.arcologies[0].FSPastoralist > random(1, 100) ? 1 : 0;
	}

	execute(node) {
		let r = [];
		const contractCost = 1000;
		const slave = GenerateNewSlave("XX", {
			minAge: 32, maxAge: 42, ageOverridesPedoMode: 1, disableDisability: 1
		});
		slave.origin = "$He offered $himself for voluntary enslavement, hoping to become a valuable source of milk for you.";
		setHealth(slave, jsRandom(-20, 20), undefined, undefined, 0, 0);
		slave.devotion = random(-15, 15);
		slave.trust = random(5, 15);
		slave.lactation = 1;
		slave.lactationDuration = 2;
		slave.vagina = 1;
		slave.boobs = Math.max(slave.boobs, 250);
		slave.boobs += 200 * random(2, 5);
		slave.counter.birthsTotal = random(3, 5);
		const cost = slaveCost(slave) - 1000;
		const {
			His, He,
			his, he, him, woman, hers
		} = getPronouns(slave);
		const {say} = getEnunciation(slave);
		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		r.push(`You receive so many messages, as a noted titan of the new Free Cities world, that ${V.assistant.name} has to be quite draconian in culling them. ${HeA} lets only the most important through to you. One category of message that always gets through regardless of content, though, is requests for voluntary enslavement. As the new world takes shape, they've become less rare than they once were.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(
			`This call is coming from a public kiosk, which is usually an indication that the person on the other end is a transient individual who has decided to take slavery over homelessness. You are understandably surprised when this turns out to not be the case; the ${woman} in the video call is modestly dressed, so ${his} newfound situation must be exceedingly recent. Nonetheless, ${he} asks to be enslaved with the same poignant sadness most people experience during their last free hours.`,
			Spoken(slave, `"All my children are gone and my husband left me,"`),
			`${he} ${say}s through tears.`,
			Spoken(slave, `"I know I'm older than most, ${(V.PC.title !== 0) ? "sir" : "ma'am"}. But,"`),
			`${he} ${say}s as ${he} brings ${his} motherly chest into view,`,
			Spoken(slave, `"I've still got pretty big breasts, and they still give milk. One of my friends told me that you milk women, ${(V.PC.title !== 0) ? "sir" : "ma'am"}. I can't do anything else to make a living."`)
		);

		App.Events.addParagraph(node, r);

		node.append(App.Desc.longSlave(slave, {market: "generic"}));

		const choices = [];

		if (V.cash >= contractCost) {
			choices.push(new App.Events.Result(`Enslave ${him}`, enslave, `This will cost ${cashFormat(contractCost)}`));
			choices.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));
		} else {
			choices.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}.`));
		}
		App.Events.addResponses(node, choices);

		function enslave() {
			const frag = new DocumentFragment();
			r = [];
			r.push(`${He} speaks to you as a free ${woman} while working through the enslavement process, perhaps ${he} hasn't quite grasped ${his} new role. Nonetheless, it seems as if a vast weight has been lifted from ${his} shoulders. You've seen this before, the perverse internal freedom that comes with the knowledge that ${his} life is in the hands of another now, and that all ${he} has to do or can do is obey. ${His} last words to you as a free ${woman} are an ironic statement that, while people always praised ${his} milk-filled udders as givers of life, ${he} never thought they'd save ${hers} one day.`);

			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function sell() {
			cashX(cost, "slaveTransfer");
			return `${He} speaks to you as a free ${woman} while working through the enslavement process; perhaps ${he} hasn't quite grasped ${his} new role. Nonetheless, it seems as if a vast weight has been lifted from ${his} shoulders. It threatens to descend again when a purchaser's agent comes in to take ${him} away. ${He} begs to know where ${he}'s going, so you tell ${him} ${he}'s to be a cow in a slave dairy. ${He} quails at the term, but you observe that ${he}'ll be well treated and lightly used, if at all, and ${he} seems to take heart at this.`;
		}
	}
};


code:
App.Events.recFSPaternalist = class recFSPaternalist extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.FSAnnounced === 1,
			() => V.arcologies[0].FSPaternalist > random(1, 100) || (V.debugMode > 0 && V.debugModeEventSelection > 0)
		];
	}

	execute(node) {
		let r = [];
		const slave = GenerateNewSlave(null, {maxAge: 42, disableDisability: 1});
		slave.origin = "$He was voluntarily enslaved after $he decided that your paternalistic arcology was a better place for advancement than the old world.";
		slave.career = App.Data.Careers.General.educated.random();
		setHealth(slave, jsRandom(40, 60), undefined, undefined, 0, 0);
		slave.devotion = random(25, 45);
		slave.trust = random(25, 45);
		slave.intelligence = random(51, 95);
		slave.intelligenceImplant = 15;
		if (slave.physicalAge >= 12) {
			slave.teeth = "normal";
		}
		const {
			He,
			his, he, him, woman
		} = getPronouns(slave);
		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		r.push(`You receive so many messages, as a noted titan of the new Free Cities world, that ${V.assistant.name} has to be quite draconian in culling them. ${HeA} lets only the most important through to you. One category of message that always gets through regardless of content, though, is requests for voluntary enslavement. As the new world takes shape, they've become less rare than they once were.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`This one is interesting, even by the standards of messages from people who want to become slaves. The individual is neither sick nor abused, and speaks with intelligence and directness.`);
		r.push(Spoken(slave, `"I've heard a lot about how ${V.arcologies[0].name} treats slaves,"`));
		r.push(`${he} says.`);
		r.push(Spoken(slave, `"And, well, I don't know how closely you watch the old world from where you are, but it's pretty bad. Being smart and driven out here doesn't always keep you fed and clothed, or even alive. I'm smart and driven, and I understand that might make me a Madam or a DJ or even a Head Girl in ${V.arcologies[0].name}. I'm not dumb enough to rely on that, but I'll take that chance."`));

		App.Events.addParagraph(node, r);

		node.append(App.Desc.longSlave(slave, {market: "generic"}));

		const choices = [];

		if (V.cash >= contractCost) {
			choices.push(new App.Events.Result(`Enslave ${him}`, enslave, `This will cost ${cashFormat(contractCost)}`));
			choices.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));
		} else {
			choices.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}.`));
		}
		App.Events.addResponses(node, choices);

		function enslave() {
			const frag = new DocumentFragment();
			r = [];
			r.push(`${He} speaks to you as a free ${woman} throughout the enslavement process, but as soon as it is completed, ${he} stops and waits for instruction before talking. ${He} does not look directly at your face, but keeps ${his} gaze lower than that, and stands expectant and ready for commands. You are reminded of ${his} intelligence by ${his} precisely correct behavior for a new slave, even before you give any kind of direction.`);

			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function sell() {
			cashX(cost, "slaveTransfer");
			return `${He} speaks to you as a free ${woman} throughout the enslavement process, but as soon as it is completed, ${he} stops and waits for instruction before talking. ${He} does not look directly at your face, but keeps ${his} gaze lower than that, and stands expectant and ready for commands. You are reminded of ${his} intelligence by ${his} presence of mind when a purchaser's agent arrives to take charge of ${him}; ${he} clearly calculates that making a scene will gain ${him} nothing, and cooperates. You reward this by telling ${him} the truth: ${he}'s been sold to a citizen of ${V.arcologies[0].name} who shares paternalistic beliefs; ${he}'ll be fine.`;
		}
	}
};


code:
App.Events.recFSPaternalistTwo = class recFSPaternalistTwo extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.FSAnnounced === 1,
		];
	}

	actorPrerequisites() {
		return [];
	}

	get weight() {
		return V.arcologies[0].FSPaternalist > random(1, 100) ? 1 : 0;
	}

	execute(node) {
		let r = [];
		const slave = GenerateNewSlave(null, {maxAge: 42, disableDisability: 1});
		slave.origin = "$He was voluntarily enslaved after $he decided that your paternalistic arcology was a better place to live than the old world.";
		setHealth(slave, jsRandom(40, 60), undefined, undefined, 0, 0);
		generateSalonModifications(slave);
		slave.devotion = random(25, 45);
		slave.trust = random(25, 45);

		const {
			He,
			his, he, him, woman
		} = getPronouns(slave);
		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;

		r.push(`You receive so many messages, as a noted titan of the new Free Cities world, that ${V.assistant.name} has to be quite draconian in culling them. ${HeA} lets only the most important through to you. One category of message that always gets through regardless of content, though, is requests for voluntary enslavement. As the new world takes shape, they've become less rare than they once were.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`This one is interesting, even by the standards of messages from people who want to become slaves. The individual is a normal looking ${woman}, neither sick nor visibly abused.`);
		r.push(Spoken(slave, `"I've heard a lot about how ${V.arcologies[0].name} treats slaves,"`));
		r.push(`${he} says.`);
		r.push(Spoken(slave, `"And, well, I don't know how closely you watch the old world from where you are, but it's pretty bad. Saving your whole life doesn't always keep you fed and clothed, or even alive. I never had much and now I have even less, and I'd rather live as your slave in ${V.arcologies[0].name} than on the streets back home."`));

		App.Events.addParagraph(node, r);

		node.append(App.Desc.longSlave(slave, {market: "generic"}));

		const choices = [];

		if (V.cash >= contractCost) {
			choices.push(new App.Events.Result(`Enslave ${him}`, enslave, `This will cost ${cashFormat(contractCost)}`));
			choices.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));
		} else {
			choices.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}.`));
		}
		App.Events.addResponses(node, choices);

		function enslave() {
			const frag = new DocumentFragment();
			r = [];
			r.push(`${He} speaks to you as a free ${woman} throughout the enslavement process, but as soon as it is completed, ${he} stops and waits for instruction before talking. ${He} may not have had many prospects in ${his} life back home, but if ${he} remains this obedient ${he}'ll fit right in here in the Free Cities.`);

			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function sell() {
			cashX(cost, "slaveTransfer");
			return `${He} speaks to you as a free ${woman} throughout the enslavement process, but as soon as it is completed, ${he} stops and waits for instruction before talking. ${He} may not have had many prospects in ${his} life back home, but if ${he} remains this obedient ${he}'ll fit right in here in the Free Cities. When the purchasing agent arrives ${he} is momentarily surprised but not alarmed, ${he} figures ${he}'ll been sold to a citizen of ${V.arcologies[0].name} who shares paternalistic beliefs.`;
		}
	}
};


code:
App.Events.recFSPetiteAdmiration = class recFSPetiteAdmiration extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.FSAnnounced === 1,
			() => V.arcologies[0].FSPetiteAdmiration > random(1, 100) || (V.debugMode > 0 && V.debugModeEventSelection > 0)
		];
	}

	execute(node) {
		let r = [];
		const slave = GenerateNewSlave(null, {minAge: 13, maxAge: 22, disableDisability: 1});
		generateSalonModifications(slave);
		slave.origin = "$He offered $himself for voluntary enslavement to avoid being singled out by ruthless slavers.";
		if (slave.natural.height >= 150) {
			slave.natural.height = Height.randomAdult(slave, {limitMult: [-2, 0]});
			if (slave.natural.height >= 150) {
				slave.natural.height = Height.randomAdult(slave, {limitMult: [-3, -1]});
				if (slave.natural.height >= 150) {
					slave.natural.height = random(90, 130);
					slave.geneticQuirks.dwarfism = 2;
				}
			}
			slave.height = Height.forAge(slave.natural.height, slave);
		}
		setHealth(slave, jsRandom(20, 40), undefined, undefined, 0, 0);
		slave.face = Math.clamp(slave.face+80, -100, 100);
		slave.faceShape = "cute";
		slave.weight = 0;
		slave.waist = -10;
		slave.devotion = random(15, 20);
		slave.trust = random(0, 10);

		const {
			He,
			his, he, him, girl
		} = getPronouns(slave);
		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		r.push(`You receive so many messages, as a noted titan of the new Free Cities world, that ${V.assistant.name} has to be quite draconian in culling them. ${HeA} lets only the most important through to you. One category of message that always gets through regardless of content, though, is requests for voluntary enslavement. As the new world takes shape, they've become less rare than they once were.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`This one, unusually, is voice-only. The caller explains why in a painfully quiet voice: slavers have been scoping out the area for prime catches and ${he} feels like ${he} may be on their list, especially given ${his} small stature and relative inability to escape. The mixed notes of despair, apathy, and fear in ${his} voice are heartrending, even to you. ${He} begs you to make the necessary arrangements to enslave ${him}. ${He}'s heard about you and how you like petite ${girl}s, and ${he}'s also heard about brothels and arcades. There is very little hope discernible in ${his} tone or the pictures ${he} sends you.`);

		App.Events.addParagraph(node, r);

		node.append(App.Desc.longSlave(slave, {market: "generic"}));

		const choices = [];

		if (V.cash >= contractCost) {
			choices.push(new App.Events.Result(`Enslave ${him}`, enslave, `This will cost ${cashFormat(contractCost)}`));
			choices.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));
		} else {
			choices.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}.`));
		}
		App.Events.addResponses(node, choices);

		function enslave() {
			const frag = new DocumentFragment();
			r = [];
			r.push(`Your slaving network gets ${him} out of ${his} difficult situation without trouble, forwarding ${him} the necessary travel documents. When ${he} arrives, ${he} displays the clear signs of someone who has learned to avoid attention: ${he} takes no initiative and does nothing without instructions, just standing dumbly until ordered; when told what to do, ${he} does it quickly and carefully. When ${he} looks at you, it is with the watchful caution of a hunted animal.`);

			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function sell() {
			cashX(cost, "slaveTransfer");
			return `Your slaving network gets ${him} out of ${his} difficult situation without trouble, forwarding ${him} the necessary travel documents. When ${he} arrives, ${he} displays the clear signs of someone who has learned to avoid attention: ${he} takes no initiative and does nothing without instructions, just standing dumbly until ordered; when told what to do, ${he} does it quickly and carefully. When a buyer's agent arrives to take ${him} away, a look of terror flashes across ${his} face. You tell ${him} truthfully that a wealthy citizen bought ${him} as a bed slave; you neglect to mention the competition they encourage amongst their harem. A meek girl like ${him} will likely be the lowest in the pecking order.`;
		}
	}
};


code:
App.Events.recFSPetiteAdmirationTwo = class recFSPetiteAdmirationTwo extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.FSAnnounced === 1,
		];
	}

	actorPrerequisites() {
		return [];
	}

	get weight() {
		return V.arcologies[0].FSPetiteAdmiration > random(1, 100) ? 1 : 0;
	}
	execute(node) {
		let r = [];
		const slave = GenerateNewSlave("XX", {
			minAge: 30, maxAge: 36, ageOverridesPedoMode: 1, disableDisability: 1
		});
		slave.career = "a porn star";
		generateSalonModifications(slave);
		slave.origin = "$He offered $himself to you for enslavement because $he felt your arcology would be a nice place to retire to.";
		slave.natural.height = random(90, 100);
		slave.height = slave.natural.height;
		slave.geneticQuirks.dwarfism = 2;
		slave.boobsImplant += random(4, 6)*200;
		slave.boobs += slave.boobsImplant;
		slave.boobsImplantType = "string";
		if (slave.boobsImplant / slave.boobs >= 0.90) {
			slave.boobShape = "spherical";
			slave.nipples = "flat";
		} else {
			slave.boobShape = "normal";
		}
		slave.buttImplant += 2;
		slave.butt += slave.buttImplant;
		slave.buttImplantType = "normal";
		slave.hips = 2;
		slave.lips = 60;
		slave.lipsImplant = 10;
		slave.face = Math.clamp(slave.face+40, -100, 100);
		slave.faceShape = "sensual";
		slave.devotion = random(40, 65);
		slave.trust = random(45, 65);
		setHealth(slave, jsRandom(20, 40), undefined, undefined, 0, 0);
		slave.anus = 2;
		slave.vagina = 2;
		slave.weight = random(-20, 20);
		slave.piercing.genitals.weight = 1;
		slave.piercing.tongue.weight = 1;
		slave.piercing.ear.weight = 1;
		slave.skill.vaginal = 100;
		slave.skill.oral = 100;
		slave.skill.anal = 100;
		slave.skill.whoring = 100;
		slave.skill.entertainment = 100;
		slave.pubicHStyle = "waxed";
		slave.underArmHStyle = "waxed";
		slave.behavioralFlaw = "arrogant";
		slave.sexualFlaw = "none";

		const {
			He,
			his, he, him
		} = getPronouns(slave);
		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		const contractCost = 3000;
		const cost = slaveCost(slave) - contractCost;
		const {say} = getEnunciation(slave);
		r.push(`You receive so many messages, as a noted titan of the new Free Cities world, that ${V.assistant.name} has to be quite draconian in culling them. ${HeA} lets only the most important through to you. One category of message that always gets through regardless of content, though, is requests for voluntary enslavement. As the new world takes shape, they've become less rare than they once were.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`The person placing the call is physically quite unusual, to the point of looking distinctly unnatural, given that they are a dwarf sporting proportionally massive implants. ${He} crosses ${his} arms under ${his} bust and begins a rather haughty spiel, given ${his} size.`);
		r.push(Spoken(slave, `"Now don't go thinking of calling me a midget, this here is one-hundred percent short <i>and</i> stacked, wouldn't you agree?"`));
		r.push(`${He} flexes back and grabs ${his} fat rear, ${his} blouse practically exploding in the process.`);
		r.push(Spoken(slave, `"What you see here is all yours if you ask nicely. See, I've hard a pretty hard life,"`));
		r.push(`${he} ${say}s while pantomiming sucking dick,`);
		r.push(Spoken(slave, `"and I'm looking to retire into luxury. From what I've heard, a star like me may as well have a pedestal erected in my honor in ${V.arcologies[0].name} so that all can bask in my curvy glory."`));
		r.push(`${He} does a split, giving you a look straight into ${his} shaved pussy.`);
		r.push(Spoken(slave, `"So how about you invite me in so that I can welcome <i>you</i> in?"`));

		App.Events.addParagraph(node, r);

		node.append(App.Desc.longSlave(slave, {market: "generic"}));

		const choices = [];

		if (V.cash >= contractCost) {
			choices.push(new App.Events.Result(`Enslave ${him}`, enslave, `This will cost ${cashFormat(contractCost)}`));
			choices.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));
		} else {
			choices.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}.`));
		}
		App.Events.addResponses(node, choices);

		function enslave() {
			const frag = new DocumentFragment();
			r = [];
			r.push(`${He} arrives unapologetically in ${his} fine clothing.`);
			r.push(Spoken(slave, `"I'm not sorry,"`));
			r.push(`${he} says coyly,`);
			r.push(Spoken(slave, `"but this outfit highlights my goods."`));
			r.push(`Eventually ${he} sighs and sets to work popping ${his} assets out of the straining dress.`);
			r.push(Spoken(slave, `"So, what shall we do first? I'm sure I know some things that could make even you blush, hottie."`));

			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function sell() {
			const frag = new DocumentFragment();
			r = [];
			cashX(cost, "slaveTransfer");
			r.push(`${He} arrives unapologetically in ${his} fine clothing.`);
			r.push(Spoken(slave, `"I'm not sorry," ${he} says coyly,`));
			r.push(Spoken(slave, `"but this outfit highlights my goods."`));
			r.push(`Eventually ${he} sighs and sets to work popping ${his} assets out of the straining dress.`);
			r.push(Spoken(slave, `"So, what shall we do first? I'm sure I know some things that could make even you blush, hottie."`));
			r.push(`As the purchaser's agent appears to take ${him} away, ${he} scoffs and demands to know who's bought ${him}. A breeder, you tell ${him}, who plans to breed to perfect race of servile dwarves.`);
			r.push(Spoken(slave, `"Oh hell no! Do you have any idea how much I spent perfecting my body!? You think I'm just going to let some fuck ruin it with kids?! You can go fuck-"`));
			r.push(`Into a bag and over the agent's shoulder ${he} goes, never to be seen again.`);
			App.Events.addParagraph(frag, r);
			return frag;
		}
	}
};


code:
App.Events.recFSPhysicalIdealist = class recFSPhysicalIdealist extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.FSAnnounced === 1,
			() => V.arcologies[0].FSPhysicalIdealist > random(1, 100) || (V.debugMode > 0 && V.debugModeEventSelection > 0)
		];
	}

	execute(node) {
		let r = [];
		const slave = GenerateNewSlave(null, {maxAge: 42, disableDisability: 1});
		slave.origin = "$He was voluntarily enslaved after $he decided that your arcology was the best place for $him to get the steroids that $he'd allowed to define $his life.";
		slave.career = App.Data.Careers.General.uneducated.random();
		generateSalonModifications(slave);
		setHealth(slave, jsRandom(20, 40), undefined, undefined, 0, 20);
		slave.muscles = 100;
		slave.addict = 1;
		slave.devotion = random(0, 15);
		slave.trust = random(0, 15);
		slave.intelligence = random(-95, -56);
		slave.intelligenceImplant = 0;

		const {
			His, He,
			his, he, him
		} = getPronouns(slave);
		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		r.push(`You receive so many messages, as a noted titan of the new Free Cities world, that ${V.assistant.name} has to be quite draconian in culling them. ${HeA} lets only the most important through to you. One category of message that always gets through regardless of content, though, is requests for voluntary enslavement. As the new world takes shape, they've become less rare than they once were.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`The subject line of the latest is badly misspelled, but the accompanying profile image is impressive, if trite, depicting the sender's massive bicep flexing, veins playing across the striated muscle. Getting ${his} situation out of ${him} proves to be something of a chore, since ${he} scarcely has two functional neurons to rub together. It seems that ${he}'s on a fair number of drugs, not limited to aphrodisiacs and steroids, that ${he} can't afford them, and that ${he} has a distorted image of ${V.arcologies[0].name} as a sort of muscle-worshipping Valhalla of sex and gains. Hearing ${him} describe ${his} idea of life as one of your slaves, you understand why this idiot wants to be enslaved. If ${his} idea of slave life were accurate, <i>you'd</i> want to be enslaved.`);

		App.Events.addParagraph(node, r);

		node.append(App.Desc.longSlave(slave, {market: "generic"}));

		const choices = [];

		if (V.cash >= contractCost) {
			choices.push(new App.Events.Result(`Enslave ${him}`, enslave, `This will cost ${cashFormat(contractCost)}`));
			choices.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));
		} else {
			choices.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}.`));
		}
		App.Events.addResponses(node, choices);

		function enslave() {
			const frag = new DocumentFragment();
			r = [];
			r.push(`${He} gets through the enslavement process without breaking anything, mostly due to your increasingly exasperated supervision. You wondered whether the destruction of ${his} moronic ideas about life as one of your slaves was going to cause an explosion, but it seems that ${he}'s under fewer illusions than you thought. ${He}'s obviously familiar with getting fucked as a way of earning ${his} keep, and hangs around, flexing idly and clearly wondering when you'll get on with it.`);

			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function sell() {
			cashX(cost, "slaveTransfer");
			return `${He} gets through the enslavement process without breaking anything, mostly due to your increasingly exasperated supervision. ${His} buyer's agent arrives to take ${him} away, and it takes the poor man ten minutes to get the situation through ${his} thick skull. He sees the beginnings of rage building in ${him} as ${he} realizes how ${he}'s been tricked, but he's a quick draw, and before ${he} can do anything he's got his taser unholstered and deployed. The bitch gives off an antediluvian roar as ${he} goes stiff as a board and crashes to the floor.`;
		}
	}
};


code:
App.Events.recFSPhysicalIdealistTwo = class recFSPhysicalIdealistTwo extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.FSAnnounced === 1,
		];
	}

	actorPrerequisites() {
		return [];
	}

	get weight() {
		return V.arcologies[0].FSPhysicalIdealist > random(1, 100) ? 1 : 0;
	}

	execute(node) {
		let r = [];
		const slave = GenerateNewSlave(null, {maxAge: 42, disableDisability: 1});
		generateSalonModifications(slave);
		slave.origin = "$He was voluntarily enslaved after $he decided that your arcology was the best place for $him to get the steroids that $he'd allowed to define $his life.";
		setHealth(slave, jsRandom(20, 40), undefined, undefined, 0, 20);
		slave.muscles = 100;
		slave.addict = 1;
		slave.devotion = random(0, 15);
		slave.trust = random(0, 15);

		const {
			He,
			his, he, him, himself, woman
		} = getPronouns(slave);
		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		const {title: Master} = getEnunciation(slave);
		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		r.push(`You receive so many messages, as a noted titan of the new Free Cities world, that ${V.assistant.name} has to be quite draconian in culling them. ${HeA} lets only the most important through to you. One category of message that always gets through regardless of content, though, is requests for voluntary enslavement. As the new world takes shape, they've become less rare than they once were.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`And this one is a rare one indeed. It's a personal file, and you suppress the urge to see whether ${V.assistant.name} is bugged and has misfiled an application for employment. The muscular ${woman} depicted has included a resume listing ${his} various physical achievements, and a clever selection of photographs: tantalizing shots of ${him} in skimpy workout clothes, and fully nude mirror shots of ${him} flexing and posing. Curious, you place a video call and get an immediate answer. It seems that ${he}'s determined that life as a slave is the easiest means to access the drugs and steroids ${he} needs to continue making massive gains. ${He} had some weeks of planning, however, and seems to have made use of the time to find an arcology owner that values the pursuit of the physical ideal, and then to make ${himself} as appealing as possible in the hope you'll take ${him}.`);

		App.Events.addParagraph(node, r);

		node.append(App.Desc.longSlave(slave, {market: "generic"}));

		const choices = [];

		if (V.cash >= contractCost) {
			choices.push(new App.Events.Result(`Enslave ${him}`, enslave, `This will cost ${cashFormat(contractCost)}`));
			choices.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));
		} else {
			choices.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}.`));
		}
		App.Events.addResponses(node, choices);

		function enslave() {
			const frag = new DocumentFragment();
			r = [];
			r.push(`When ${he} arrives, you're impressed again. ${He}'s even more muscular in person than in ${his} pictures.`);
			r.push(Spoken(slave, `"${Master},"`));
			r.push(`${he} growls,`);
			r.push(Spoken(slave, `"I've done my very best to be the biggest, strongest slave before coming here. May I show you?"`));
			r.push(`More than a little curious, you nod. ${He} reaches down to place a palm on the ground.`);
			r.push(Spoken(slave, `"Well, ${Master}, I had a month. So I did my best to get in shape."`));
			r.push(`${He} suddenly flips as if starting a cartwheel, but stops suspended in midair, holding ${his} entire muscular frame off the ground with just one hand planted on the floor. ${He} turns slowly, revealing the base of an impressively large buttplug nestling between ${his} cheeks. ${He} knows ${his} audience.`);

			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function sell() {
			const frag = new DocumentFragment();
			r = [];
			cashX(cost, "slaveTransfer");
			r.push(`When ${he} arrives, you're impressed again. ${He}'s even more muscular in person than in ${his} pictures.`);
			r.push(Spoken(slave, `"${Master},"`));
			r.push(`${he} growls,`);
			r.push(Spoken(slave, `"I've done my very best to be the biggest, strongest slave before coming here. May I show you?"`));
			r.push(`Though more than a little curious, the arrival of the purchasing agent cuts short any theatrics. Though initially confused, the promise of steroids and other drugs by ${his} new owner has ${him} follow the agent out of your penthouse without fuss.`);
			App.Events.addParagraph(frag, r);
			return frag;
		}
	}
};


code:
App.Events.recFSRepopulationEfforts = class recFSRepopulationEfforts extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.FSAnnounced === 1,
			() => V.arcologies[0].FSRepopulationFocus > random(1, 100) || (V.debugMode > 0 && V.debugModeEventSelection > 0)
		];
	}

	execute(node) {
		let r = [];
		const pram = {disableDisability: 1};
		if (V.pedo_mode === 1) {
			pram.minAge = V.fertilityAge;
			pram.maxAge = 18;
			pram.ageOverridesPedoMode = 1;
		} else {
			pram.minAge = 14;
			pram.maxAge = 30;
		}
		const slave = GenerateNewSlave("XX", pram);
		slave.origin = "$He sold $himself to you in the hopes that $his body would help keep humanity alive.";
		slave.career = App.Data.Careers.General.young.random();
		generateSalonModifications(slave);
		setHealth(slave, jsRandom(40, 60), undefined, undefined, 0, 0);
		slave.devotion = random(25, 35);
		slave.trust = random(20, 25);
		slave.vagina = 0;
		slave.trueVirgin = 1;
		slave.preg = 0;
		slave.pregType = 0;
		slave.fetish = "pregnancy";

		const {
			He,
			his, he, him
		} = getPronouns(slave);
		const {say} = getEnunciation(slave);
		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		r.push(`You receive so many messages, as a noted titan of the new Free Cities world, that your personal assistant has to be quite draconian in culling them. ${HeA} lets only the most important through to you. One category of message that always gets through regardless of content, though, are requests for voluntary enslavement. As the new world takes shape, they've become less rare than they once were.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(
			`This one is interesting, even by the standards of messages from people who want to become slaves. The individual is neither sick nor abused, and speaks with directness.`,
			Spoken(slave, `"I've heard a lot about how your arcology wishes to preserve humanity's place in the future,"`),
			`${he} ${say}s.`,
			Spoken(slave, `"And, well, I don't know how closely you watch the old world from where you are, but things are falling apart. Humanity's future surely rests in the arcologies, and you seem to be the only one who's focusing on that future... As such, I want to become a mother to the future of humanity! Please, take me in and knock me up! I'll carry as many children as my body can take!"`)
		);

		App.Events.addParagraph(node, r);

		node.append(App.Desc.longSlave(slave, {market: "generic"}));

		const choices = [];

		if (V.cash >= contractCost) {
			choices.push(new App.Events.Result(`Enslave ${him}`, enslave, `This will cost ${cashFormat(contractCost)}`));
			choices.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));
		} else {
			choices.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}.`));
		}
		App.Events.addResponses(node, choices);

		function enslave() {
			const frag = new DocumentFragment();
			r = [];
			r.push(`When ${he} arrives, ${he} comes directly to your penthouse for enslavement. ${He} passes many heavily pregnant women along the way, and barely restrains an expression of excited lust as ${he} greets you. When ${he} eagerly strips for inspection, ${his} pussy is visibly moist; it seems ${he} may be more into pregnancy than ${he} let on.`);

			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function sell() {
			cashX(cost, "slaveTransfer");
			return `When ${he} arrives, ${he} comes directly to your penthouse for enslavement. ${He} passes many heavily pregnant women along the way, and barely restrains an expression of excited lust as ${he} greets you. When ${he} eagerly strips for inspection, ${his} pussy is visibly moist; it seems ${he} may be more into pregnancy than ${he} let on. As a purchaser's agent appears to take ${him} away, ${he} asks if ${he}'ll still be impregnated, and the agent nods approvingly. ${He} seems slightly disheartened that ${he} won't be yours, but ${he} accepts the fact that ${he}'ll still be useful to your future.`;
		}
	}
};


code:
App.Events.recFSRepopulationEffortsTwo = class recFSRepopulationEffortsTwo extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.FSAnnounced === 1,
		];
	}

	actorPrerequisites() {
		return [];
	}

	get weight() {
		return V.arcologies[0].FSRepopulationFocus > random(1, 100) ? 1 : 0;
	}

	execute(node) {
		let r = [];
		const pram = {disableDisability: 1};
		if (V.pedo_mode === 1) {
			pram.minAge = V.fertilityAge;
			pram.maxAge = 18;
			pram.ageOverridesPedoMode = 1;
		} else {
			pram.minAge = 18;
			pram.maxAge = 30;
		}
		const slave = GenerateNewSlave("XX", pram);
		slave.origin = "$He sold $himself to you in the hope of someday bearing children.";
		setHealth(slave, jsRandom(40, 60), undefined, undefined, 0, 0);
		slave.devotion = random(25, 35);
		slave.trust = random(20, 25);
		slave.vagina = 2;
		slave.trueVirgin = 1;
		slave.preg = -2;

		const {
			He, His,
			his, he, him
		} = getPronouns(slave);
		const {say} = getEnunciation(slave);
		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		r.push(`You receive so many messages, as a noted titan of the new Free Cities world, that your personal assistant has to be quite draconian in culling them. ${HeA} lets only the most important through to you. One category of message that always gets through regardless of content, though, are requests for voluntary enslavement. As the new world takes shape, they've become less rare than they once were.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(
			`This call is coming from a public kiosk, which is usually an indication that the person on the other end is a transient individual who has decided to take slavery over homelessness. You are understandably surprised when this turns out to not be the case; the young woman in the video call is reasonably well dressed, if rather upset over something.`,
			Spoken(slave, `"I... can't have children,"`),
			`${he} ${say}s through building tears.`,
			Spoken(slave, `"I've always dreamed of being a mother, but I was born sterile... I heard rumors that ${V.arcologies[0].name} had cures for infertility, and if you'd help me, I would love to ${(V.PC.title === 1) ? "have your children" : "get pregnant for you"}. Even if the rest of my life was devoted to motherhood... I'd like that..."`)
		);

		App.Events.addParagraph(node, r);

		node.append(App.Desc.longSlave(slave, {market: "generic"}));

		const choices = [];

		if (V.cash >= contractCost) {
			choices.push(new App.Events.Result(`Enslave ${him}`, enslave, `This will cost ${cashFormat(contractCost)}`));
			choices.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));
		} else {
			choices.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}.`));
		}
		App.Events.addResponses(node, choices);

		function enslave() {
			const frag = new DocumentFragment();
			r = [];
			r.push(`When ${he} arrives, ${he} is the very picture of someone who has seen the light at the end of a very dark tunnel. ${He} can't wait to get started making babies for you.`);

			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function sell() {
			cashX(cost, "slaveTransfer");
			return `When ${he} arrives, ${he} is the very picture of a someone who has seen the light at the end of a very dark tunnel. ${He} can't wait to get started making babies for you. A purchaser's agent arrives to take charge of ${him} and ${he} pleads not to leave ${him} infertile. You abate ${his} fears, ${his} fertility will be restored. ${His} new owner likes to experiment with fertility agents; ${he}'ll quickly be pregnant with ${(V.seeHyperPreg === 1) ? "dozens of children" : "multiples"}. ${His} face alights at the thought. ${He}'ll finally have all the children ${he}'d dreamed of.`;
		}
	}
};


code:
App.Events.recFSRestart = class recFSRestart extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.FSAnnounced === 1,
			() => V.arcologies[0].FSRestart > random(1, 100) || (V.debugMode > 0 && V.debugModeEventSelection > 0)
		];
	}

	execute(node) {
		let r = [];
		const slave = GenerateNewSlave("XX", {
			minAge: 10, maxAge: 18, disableDisability: 1, race: "nonslave"
		});
		slave.origin = "$He thought $he was important; $he was not.";
		slave.career = "a student from a private school";
		slave.intelligence = random(16, 95);
		slave.intelligenceImplant = 30;
		setHealth(slave, jsRandom(20, 40), 0, 0, 0, 0);
		slave.devotion = random(-100, -90);
		slave.trust = random(-100, -90);
		slave.vagina = 0;
		slave.trueVirgin = 1;
		slave.preg = 0;
		slave.behavioralFlaw = "arrogant";

		const {
			He,
			his, he, him
		} = getPronouns(slave);
		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		r.push(`You receive so many messages, as a noted titan of the new Free Cities world, that your personal assistant has to be quite draconian in culling them. ${HeA} lets only the most important through to you. One category of message that always gets through are potential applicants for the Societal Elite. As the new world takes shape, they've become more rare than they once were.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`This one is most mundane, a student with top grades wanting to be part of the top of society. Upon arriving for ${his} evaluation, ${he} begins droning on about ${his} unimpressive achievements and pointless accomplishments. You review information on ${his} lineage and connections, while feigning interest in ${his} prattling. It would seem ${he} is worth far less than ${he} thinks ${he} is.`);

		App.Events.addParagraph(node, r);

		node.append(App.Desc.longSlave(slave, {market: "generic"}));

		const choices = [];

		if (V.cash >= contractCost) {
			choices.push(new App.Events.Result(`Enslave ${him}`, enslave, `This will cost ${cashFormat(contractCost)}`));
			choices.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));
		} else {
			choices.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}.`));
		}
		App.Events.addResponses(node, choices);

		function enslave() {
			const frag = new DocumentFragment();
			r = [];
			r.push(`You interrupt ${his} rambling and bluntly inform ${him} that ${he} is useless to society. ${He} steps back, insulted, and attempts a rebuttal. You cut ${him} off again and tell ${him} ${he}'s much more useful as your personal toy. ${He} takes another step back and is promptly restrained before being dragged off to the autosurgery.`);
			slave.preg = -2;
			slave.ovaries = 0;
			slave.balls = 0;

			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function sell() {
			cashX(cost, "slaveTransfer");
			return `You interrupt ${his} rambling and bluntly inform ${him} that ${he} is useless to society. ${He} steps back, insulted, and attempts a rebuttal. You cut ${him} off again and tell ${him} another of the Societal Elite has taken interest in making ${him} his pet. ${He} takes another step back and is promptly restrained before being dragged off to ${his} new owner.`;
		}
	}
};


code:
App.Events.recFSRestartTwo = class recFSRestartTwo extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.FSAnnounced === 1,
		];
	}

	actorPrerequisites() {
		return [];
	}

	get weight() {
		return V.arcologies[0].FSRestart > random(1, 100) ? 1 : 0;
	}

	execute(node) {
		let r = [];
		const slave = GenerateNewSlave(null, {maxAge: 42, disableDisability: 1});
		slave.origin = "$He considered $himself ugly and wished to stay out of your gene pool.";
		setHealth(slave, jsRandom(0, 60), undefined, undefined, 0, 0);
		slave.trust = random(25, 45);
		slave.devotion = random(25, 45);
		slave.anus = random(1, 2);
		slave.face = random(-40, 0);
		slave.boobShape = "perky";
		slave.boobs = random(2, 5)*100;
		slave.natural.boobs = slave.boobs;
		slave.weight = 5;
		slave.waist = random(-60, 0);
		if (slave.physicalAge >= 12) {
			slave.teeth = "normal";
		}

		const {
			His, He,
			his, he, him
		} = getPronouns(slave);
		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		r.push(`You receive so many messages, as a noted titan of the new Free Cities world, that your personal assistant has to be quite draconian in culling them. ${HeA} lets only the most important through to you. One category of message that always gets through regardless of content, though, are requests for voluntary enslavement. As the new world takes shape, they've become less rare than they once were.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`This call is coming from a public kiosk, which is usually an indication that the person on the other end is a transient individual who has decided to take slavery over homelessness. A rather homely face greets you, much to your displeasure.`);
		r.push(Spoken(slave, `"I know I'm not much to look at, so I don't even want you to consider me more than just a slave. With the way things are going, I figured just getting it over with is the way to go."`));

		App.Events.addParagraph(node, r);

		node.append(App.Desc.longSlave(slave, {market: "generic"}));

		const choices = [];

		if (V.cash >= contractCost) {
			choices.push(new App.Events.Result(`Enslave ${him}`, enslave, `This will cost ${cashFormat(contractCost)}`));
			choices.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));
		} else {
			choices.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}.`));
		}
		App.Events.addResponses(node, choices);

		function enslave() {
			const frag = new DocumentFragment();
			r = [];
			r.push(`When ${he} arrives, ${he} comes directly to your to your penthouse for enslavement. ${His} face may painful to look at, but ${his} body is not all bad; with a little work, ${he} can be quite the catch. When`);
			if (canHear(slave)) {
				r.push(`${he} hears`);
			} else {
				r.push(`${he}'s given`);
			}
			r.push(`the news, ${his} spirits are visibly lifted; ${he} never thought ${he}'d be so lucky.`);

			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function sell() {
			cashX(cost, "slaveTransfer");
			return `When ${he} arrives, ${he} comes directly to your to your penthouse for enslavement. ${His} face may painful to look at, but ${his} body is not all bad; with a little work, ${he} can be quite the catch. A purchaser's agent appears to take ${him} away, and ${he} quietly asks who's bought ${him}. A plastic surgeon, you tell ${him}, who sees a diamond in the rough. ${He}'s speechless.`;
		}
	}
};


code:
App.Events.recFSRomanRevivalist = class recFSRomanRevivalist extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.FSAnnounced === 1,
			() => V.arcologies[0].FSRomanRevivalist > random(1, 100) || (V.debugMode > 0 && V.debugModeEventSelection > 0)
		];
	}

	execute(node) {
		let r = [];
		const slave = GenerateNewSlave("XX", {minAge: 22, maxAge: 28, disableDisability: 1});
		slave.origin = "$He offered $himself to you for enslavement because $he was swept up in the romanticism of a revival of Rome.";
		slave.devotion = random(-15, -5);
		slave.trust = random(5, 15);
		slave.career = "a student";
		generateSalonModifications(slave);
		setHealth(slave, jsRandom(-10, 10), undefined, undefined, 0, 0);
		slave.face = random(-20, 0);
		slave.anus = 0;
		if (slave.vagina !== -1) {
			slave.vagina = 0;
		}
		slave.skill.vaginal = 0;
		slave.skill.anal = 0;
		slave.skill.oral = 0;
		slave.skill.whoring = 0;
		slave.skill.entertainment = 0;
		slave.intelligence = random(16, 95);
		slave.intelligenceImplant = 15;
		slave.teeth = "normal";

		const {
			He,
			his, he, him, himself, woman
		} = getPronouns(slave);
		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		r.push(`You receive so many messages, as a noted titan of the new Free Cities world, that ${V.assistant.name} has to be quite draconian in culling them. ${HeA} lets only the most important through to you. One category of message that always gets through regardless of content, though, is requests for voluntary enslavement. As the new world takes shape, they've become less rare than they once were.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`The call comes in from an old world university. The caller is a young ${woman} who explains that ${he}'s struggling with extreme student debt, and has recently graduated with a history degree that ${he} can't seem to turn into gainful employment. ${He} gushes at length about how much ${he} enjoyed ancient history, and how ${he}'s heard all about your ideas about reviving ancient culture in the Free Cities. ${He} sees joining your household as a romantic way out of ${his} difficult situation. Apparently ${he} read all the idyllic parts of history and somehow missed out on learning about the salt mines and slave galleys. ${He}'s not terribly pretty and seems socially awkward, but that's likely to have its side benefits. ${He} nervously sends you a complete dossier on ${himself}.`);

		App.Events.addParagraph(node, r);

		node.append(App.Desc.longSlave(slave, {market: "generic"}));

		const choices = [];

		if (V.cash >= contractCost) {
			choices.push(new App.Events.Result(`Enslave ${him}`, enslave, `This will cost ${cashFormat(contractCost)}`));
			choices.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));
		} else {
			choices.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}.`));
		}
		App.Events.addResponses(node, choices);

		function enslave() {
			const frag = new DocumentFragment();
			r = [];
			r.push(`${He} arrives wide-eyed and enthusiastic about the historical style ${he}`);
			if (canSee(slave)) {
				r.push(`saw`);
			} else if (canHear(slave)) {
				r.push(`heard`);
			} else {
				r.push(`felt`);
			}
			r.push(`on the way in. ${He} swallows nervously throughout the enslavement process and even cries a little at the end. ${He}'s slow to undress, and when ${he}'s finished, ${he} covers ${his} modest breasts with one arm and ${his} mons with the other. It seems that ${he}'s about to have a rude awakening about the realities of being a house slave.`);

			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function sell() {
			cashX(cost, "slaveTransfer");
			return `${He} arrives with doubt already clouding ${his} eyes. It seems ${he} got an introduction to the reality of Roman Revivalism on ${his} way up the arcology to your villa. The violence it did to ${his} vision of Rome is deeply ironic; ${V.arcologies[0].name} is a fair reproduction of the decadence and vigor of imperial Rome. If ${he}'s shocked by the screams of a slave dying in gladiatorial combat or the spectacle of prisoners from the provinces being sold at auction, that's ${his} ignorance. When you cause a price placard to be affixed to ${his} chest so ${he} can be sold at auction, the reality of ${his} future finally comes home to ${him}.`;
		}
	}
};


code:
App.Events.recFSSlaveProfessionalism = class recFSSlaveProfessionalism extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.FSAnnounced === 1,
		];
	}

	actorPrerequisites() {
		return [];
	}

	get weight() {
		return V.arcologies[0].FSSlaveProfessionalism > random(1, 100) ? 1 : 0;
	}

	execute(node) {
		let r = [];
		const slave = GenerateNewSlave("XX", {minAge: 18, maxAge: 30, disableDisability: 1});
		slave.career = "a porn star";
		generateSalonModifications(slave);
		slave.origin = "$He offered $himself for voluntary enslavement after realizing $his career was over.";
		slave.boobsImplant += random(4, 6)*200;
		slave.boobs += slave.boobsImplant;
		slave.boobsImplantType = "fillable";
		slave.boobShape = "normal";
		slave.lips = 60;
		slave.face = Math.clamp(slave.face+20, -100, 100);
		slave.devotion = random(20, 45);
		slave.trust = random(25, 65);
		slave.intelligence = random(75, 100);
		slave.intelligenceImplant = 15;
		setHealth(slave, jsRandom(20, 40), undefined, undefined, 0, 0);
		slave.anus = 2;
		slave.vagina = 2;
		slave.weight = random(-40, 10);
		slave.piercing.genitals.weight = 1;
		slave.piercing.tongue.weight = 1;
		slave.piercing.nipple.weight = 1;
		slave.piercing.nose.weight = 1;
		slave.piercing.ear.weight = 1;
		slave.skill.vaginal = 100;
		slave.skill.oral = 100;
		slave.skill.anal = 100;
		slave.skill.whoring = 100;
		slave.skill.entertainment = 100;
		slave.behavioralFlaw = "none";
		slave.sexualFlaw = "none";
		slave.pubicHStyle = "waxed";
		slave.underArmHStyle = "waxed";
		const {
			He,
			his, he, him
		} = getPronouns(slave);
		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		const {say} = getEnunciation(slave);
		const contractCost = 3000;
		const cost = slaveCost(slave) - contractCost;
		r.push(`You receive so many messages, as a noted titan of the new Free Cities world, that ${V.assistant.name} has to be quite draconian in culling them. ${HeA} lets only the most important through to you. One category of message that always gets through regardless of content, though, is requests for voluntary enslavement. As the new world takes shape, they've become less rare than they once were.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`This one is interesting, even by the standards of messages from people who want to become slaves. The individual is neither sick nor abused, and speaks with intelligence and directness.`);
		r.push(Spoken(slave, `"I've heard a lot about how ${V.arcologies[0].name} values experience,"`));
		r.push(`${he} ${say}s.`);
		r.push(Spoken(slave, `"And, well, people are getting tired of seeing my ass in videos and money is drying up fast. If I'm going to end up enslaved, it would be best if it were someone that could make use of the skills I've learned over my career that owned me. It would be such a waste of my talents otherwise. Of course, you may just lock me in a box and call it a day, but life's a gamble some times and my system says this is a winner."`));

		App.Events.addParagraph(node, r);

		node.append(App.Desc.longSlave(slave, {market: "generic"}));

		const choices = [];

		if (V.cash >= contractCost) {
			choices.push(new App.Events.Result(`Enslave ${him}`, enslave, `This will cost ${cashFormat(contractCost)}`));
			choices.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));
		} else {
			choices.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}.`));
		}
		App.Events.addResponses(node, choices);

		function enslave() {
			const frag = new DocumentFragment();
			r = [];
			r.push(`When ${he} arrives, ${he} gracefully enters while stripping down to ${his} birthday suit in an erotic display of ${his} talents. It's clear ${he} feels some relief in your gaze, but ${he} knows enough about the Free Cities to know that ${he}'s likely going to be continuing ${his} career in sexual labor. Only this time, ${he}'ll be more appreciated for ${his} talents rather than ${his} body.`);

			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function sell() {
			cashX(cost, "slaveTransfer");
			return `When ${he} arrives, ${he} gracefully enters and starts to strip before you can stop ${him}. A growing look of concern spreads across ${his} face when a purchaser's agent arrives to take ${him} away. ${He} looks at you desperately, begging to know who's purchased ${him}. You let ${him} know ${he} still has a fan here and they weren't about to let this chance slip by. ${He} seems elated by this.`;
		}
	}
};


code:
App.Events.recFSSlaveProfessionalismTwo = class recFSSlaveProfessionalismTwo extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.FSAnnounced === 1,
			() => V.arcologies[0].FSSlaveProfessionalism > random(1, 100) || (V.debugMode > 0 && V.debugModeEventSelection > 0)
		];
	}

	execute(node) {
		let r = [];
		const slave = GenerateNewSlave(null, {minAge: 20, maxAge: 36, disableDisability: 1});
		slave.career = "a servant";
		slave.origin = "$He offered $himself for voluntary enslavement after being freed by $his deceased master's next of kin.";
		slave.face = Math.clamp(slave.face+20, -100, 100);
		slave.devotion = random(60, 80);
		slave.trust = random(60, 80);
		slave.intelligence = 100;
		slave.intelligenceImplant = 30;
		setHealth(slave, jsRandom(40, 60), undefined, undefined, 0, 0);
		slave.anus = 2;
		if (slave.vagina >= 0) {
			slave.vagina = 2;
			slave.skill.vaginal = 100;
		} else {
			slave.skill.penetrative = 100;
		}
		slave.weight = random(-10, 10);
		slave.skill.oral = 100;
		slave.skill.anal = 100;
		slave.skill.whoring = 100;
		slave.skill.entertainment = 100;
		slave.skill.combat = 40;
		slave.behavioralFlaw = "none";
		slave.sexualFlaw = "none";

		const {
			He,
			he, him
		} = getPronouns(slave);
		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		r.push(`You receive so many messages, as a noted titan of the new Free Cities world, that ${V.assistant.name} has to be quite draconian in culling them. ${HeA} lets only the most important through to you. One category of message that always gets through regardless of content, though, is requests for voluntary enslavement. As the new world takes shape, they've become less rare than they once were.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`This one is from another arcology, which is rather unusual. You are presented with a humble, though clearly well raised, free citizen. ${He} says directly,`);
		r.push(Spoken(slave, `"I'm a slave through and through. I won't waste your time, so long story short, my Master passed away recently and his successor freed me. I was trained to be a slave, I was bred to serve my owner, and now I have no purpose in life. I offer myself to you, please save me from this so-called <i>freedom</i>."`));

		App.Events.addParagraph(node, r);

		node.append(App.Desc.longSlave(slave, {market: "generic"}));

		const choices = [];

		if (V.cash >= contractCost) {
			choices.push(new App.Events.Result(`Enslave ${him}`, enslave, `This will cost ${cashFormat(contractCost)}`));
			choices.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));
		} else {
			choices.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}.`));
		}
		App.Events.addResponses(node, choices);

		function enslave() {
			const frag = new DocumentFragment();
			r = [];
			r.push(`From the first moment you see ${him}, ${he} is acting the part of an ideal slave. Re-enslaving ${him} is a near effortless affair. As much as ${he} tries to politely conceal it, you can feel the joy radiating off of ${him}.`);

			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function sell() {
			cashX(cost, "slaveTransfer");
			return `From the first moment you see ${him}, ${he} is acting the part of an ideal slave. Even when a purchaser's agent arrives to take ${him} away, you can still feel a sense of joy radiating from ${him}.`;
		}
	}
};


code:
App.Events.recFSSlimnessEnthusiast = class recFSSlimnessEnthusiast extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.FSAnnounced === 1,
		];
	}

	actorPrerequisites() {
		return [];
	}

	get weight() {
		return V.arcologies[0].FSSlimnessEnthusiast > random(1, 100) ? 1 : 0;
	}

	execute(node) {
		let r = [];
		const slave = GenerateNewSlave(null, {
			minAge: 25, maxAge: V.retirementAge, ageOverridesPedoMode: 1, disableDisability: 1
		});
		generateSalonModifications(slave);
		slave.origin = "$He offered $himself to you for enslavement because $he felt your arcology was the best place for a $woman of $his appearance.";
		slave.boobs = random(4, 6)*50;
		slave.natural.boobs = slave.boobs;
		slave.weight = -20;
		slave.natural.height = random(160, 200);
		slave.height = slave.natural.height;
		slave.face = random(15, 100);
		slave.butt = random(1, 2);
		slave.lips = 0;
		slave.devotion = random(25, 45);
		slave.trust = random(25, 45);
		slave.career = App.Data.Careers.General.educated.random();
		setHealth(slave, jsRandom(20, 40), undefined, undefined, 0, 0);
		slave.intelligence = random(51, 95);
		slave.intelligenceImplant = 15;
		slave.teeth = "normal";
		slave.pubicHStyle = "waxed";
		slave.underArmHStyle = "waxed";
		slave.behavioralFlaw = "arrogant";

		const {
			His, He,
			his, he, him, himself, woman, girl
		} = getPronouns(slave);
		const {say} = getEnunciation(slave);
		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		const contractCost = 3000;
		const cost = slaveCost(slave) - contractCost;
		r.push(`You receive so many messages, as a noted titan of the new Free Cities world, that ${V.assistant.name} has to be quite draconian in culling them. ${HeA} lets only the most important through to you. One category of message that always gets through regardless of content, though, is requests for voluntary enslavement. As the new world takes shape, they've become less rare than they once were.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`The call comes in from an unusually well-to-do area. It appears that the aristocratic-looking ${woman} placing the call has fallen on hard times, and is doing the intelligent thing and staying ahead of ${his} creditors by offering ${himself} into slavery. Enslaving ${him} will be costlier than usual, but it seems likely to be worth it. ${He}'s well-spoken and seems both educated and intelligent. Even better, despite being middle-aged, ${he}'s extremely well-preserved, a tall, slim and graceful beauty with a face that must be the envy of ${girl}s half ${his} age. ${He} knows all this ${himself}, and ${say}s,`);
		r.push(Spoken(slave, `"I hear you appreciate a slender ${woman}; if I'm going down into slavery, ${(V.PC.title !== 0) ? "sir" : "ma'am"}, I'd be happy to avoid too many implants. I understand ${V.arcologies[0].name} is a fine place for someone in my situation."`));

		App.Events.addParagraph(node, r);

		node.append(App.Desc.longSlave(slave, {market: "generic"}));

		const choices = [];

		if (V.cash >= contractCost) {
			choices.push(new App.Events.Result(`Enslave ${him}`, enslave, `This will cost ${cashFormat(contractCost)}`));
			choices.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));
		} else {
			choices.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}.`));
		}
		App.Events.addResponses(node, choices);

		function enslave() {
			const frag = new DocumentFragment();
			r = [];
			r.push(`${He} arrives apologizing for ${his} fine clothing.`);
			r.push(Spoken(slave, `"I'm sorry," ${he} apologizes sadly,`));
			r.push(Spoken(slave, `"but I wanted to wear my best one last time."`));
			r.push(`${He} sighs, squares ${his} shoulders, and visibly steels ${himself}.`);
			r.push(Spoken(slave, `"I'll say as a free ${woman}, since it's my last chance to say anything as a free ${woman}, you're good-looking, for an evil slaveholding oligarch."`));
			r.push(`${He} delivers this last with a little smile on ${his} lips and rich turn of humor in ${his} voice.`);
			r.push(Spoken(slave, `"If we'd met at a nice party last week I might have made a pass at you. I suppose that's beside the point now."`));

			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function sell() {
			const frag = new DocumentFragment();
			r = [];
			cashX(cost, "slaveTransfer");
			r.push(`${He} arrives apologizing for ${his} fine clothing.`);
			r.push(Spoken(slave, `"I'm sorry,"`));
			r.push(`${he} apologizes sadly,`);
			r.push(Spoken(slave, `"but I wanted to wear my best one last time."`));
			r.push(`${He} sighs, squares ${his} shoulders, and visibly steels ${himself}. ${He}'s about to declaim something when a purchaser's agent arrives to bundle ${him} off. ${His} face darkens and ${he} mulls something over, probably preparing a really cutting remark, but before ${he} can deliver it the agent fastens a bag over ${his} head and ${he} is heard no more.`);
			App.Events.addParagraph(frag, r);
			return frag;
		}
	}
};


code:
App.Events.recFSSlimnessEnthusiastTwo = class recFSSlimnessEnthusiastTwo extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.FSAnnounced === 1,
			() => V.arcologies[0].FSSlimnessEnthusiast > random(1, 100) || (V.debugMode > 0 && V.debugModeEventSelection > 0)
		];
	}

	execute(node) {
		let r = [];
		const slave = GenerateNewSlave(null, {maxAge: 24, disableDisability: 1});
		generateSalonModifications(slave);
		slave.origin = "$He offered $himself to you for enslavement to escape having plastic surgery foisted on $him.";
		slave.boobs = random(4, 6)*50;
		slave.natural.boobs = slave.boobs;
		slave.weight = -20;
		slave.natural.height = random(160, 200);
		slave.height = slave.natural.height;
		slave.face = random(15, 100);
		slave.butt = random(1, 2);
		slave.lips = 0;
		slave.devotion = random(25, 45);
		slave.trust = random(25, 45);
		setHealth(slave, jsRandom(20, 40), undefined, undefined, 0, 0);
		if (slave.physicalAge >= 12) {
			slave.teeth = "normal";
		}
		slave.pubicHStyle = "waxed";

		const {
			He,
			his, he, him, woman, women
		} = getPronouns(slave);
		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		const contractCost = 3000;
		const cost = slaveCost(slave) - contractCost;
		const sir = (V.PC.title !== 0) ? `sir` : `ma'am`;
		const {say} = getEnunciation(slave);
		r.push(`You receive so many messages, as a noted titan of the new Free Cities world, that ${V.assistant.name} has to be quite draconian in culling them. ${HeA} lets only the most important through to you. One category of message that always gets through regardless of content, though, is requests for voluntary enslavement. As the new world takes shape, they've become less rare than they once were.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`This call is coming from a public kiosk, which is usually an indication that the person on the other end is a transient individual who has decided to take slavery over homelessness. You are understandably surprised when this turns out to not be the case; the young ${woman} in the video call is reasonably well dressed, so ${his} newfound situation must be exceedingly recent. Without hesitation ${he} immediately asks to be enslaved.`);
		r.push(Spoken(slave, `"My boyfriend wants to turn me into some sort of bimbo,"`));
		r.push(`${he} ${say}s through ${his} tears.`);
		r.push(Spoken(slave, `"I found all the surgery brochures that he hid, ${sir}. But,"`));
		r.push(`and ${he} brings ${his} slender chest, though covered by ${his} top, into view,`);
		r.push(Spoken(slave, `"I don't want to be cut up and filled with plastic. One of my friends told me that you care about a ${woman} with a good figure, ${sir}. I should have never sold myself to that bastard."`));

		App.Events.addParagraph(node, r);

		node.append(App.Desc.longSlave(slave, {market: "generic"}));

		const choices = [];

		if (V.cash >= contractCost) {
			choices.push(new App.Events.Result(`Enslave ${him}`, enslave, `This will cost ${cashFormat(contractCost)}`));
			choices.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));
		} else {
			choices.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}.`));
		}
		App.Events.addResponses(node, choices);

		function enslave() {
			const frag = new DocumentFragment();
			r = [];
			r.push(`When ${he} arrives, ${he} is the very picture of a young waif out of ${his} depth. It's clear ${he} feels relief and escaping going under the knife, but ${he} knows enough about the Free Cities to know that ${he}'s likely to buy ${his} presence here through long years of sexual labor.`);

			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function sell() {
			cashX(cost, "slaveTransfer");
			return `When ${he} arrives, ${he} is the very picture of a young waif out of ${his} depth. It's clear ${he} feels relief and escaping going under the knife, but ${he} knows enough about the Free Cities to know that ${he}'s likely to buy ${his} presence here through long years of sexual labor. A purchaser's agent appears to take ${him} away, and ${he} quietly asks who's bought ${him}. A citizen, you tell ${him}, who prefers his ${women} slender and unimplanted. ${He} seems relieved by this.`;
		}
	}
};


code:
App.Events.recFSStatuesqueGlorification = class recFSStatuesqueGlorification extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.FSAnnounced === 1,
		];
	}

	actorPrerequisites() {
		return [];
	}

	get weight() {
		return V.arcologies[0].FSStatuesqueGlorification > random(1, 100) ? 1 : 0;
	}

	execute(node) {
		let r = [];
		const slave = GenerateNewSlave(null, {disableDisability: 1});
		generateSalonModifications(slave);
		slave.origin = "$He offered $himself for voluntary enslavement to avoid being singled out by ruthless slavers.";
		slave.natural.height = random(200, 264);
		slave.height = Height.forAge(slave.natural.height, slave);
		setHealth(slave, jsRandom(20, 40), undefined, undefined, 0, 0);
		slave.geneticQuirks.gigantism = 2;
		slave.devotion = random(15, 20);
		slave.trust = random(0, 10);
		const {
			He,
			his, he, him, girl
		} = getPronouns(slave);
		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		r.push(`You receive so many messages, as a noted titan of the new Free Cities world, that ${V.assistant.name} has to be quite draconian in culling them. ${HeA} lets only the most important through to you. One category of message that always gets through regardless of content, though, is requests for voluntary enslavement. As the new world takes shape, they've become less rare than they once were.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`This one, unusually, is voice-only. The caller explains why in a painfully quiet voice: slavers have been scoping out the area for prime catches and, as a genetic giant, ${he} knows they'll be gunning for ${him}. The mixed notes of despair, apathy, and fear in ${his} voice are heartrending, even to you. ${He} begs you to make the necessary arrangements to enslave ${him}. ${He}'s heard about you and how you like tall ${girl}s, and ${he}'s also heard about brothels and arcades. There is very little hope discernible in ${his} tone or the pictures ${he} sends you.`);
		App.Events.addParagraph(node, r);

		node.append(App.Desc.longSlave(slave, {market: "generic"}));

		const choices = [];

		if (V.cash >= contractCost) {
			choices.push(new App.Events.Result(`Enslave ${him}`, enslave, `This will cost ${cashFormat(contractCost)}`));
			choices.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));
		} else {
			choices.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}.`));
		}
		App.Events.addResponses(node, choices);

		function enslave() {
			const frag = new DocumentFragment();
			r = [];
			r.push(`When ${he} arrives, ${he} is the very picture of someone out of ${his} depth. It's clear ${he} feels some relief over not being at the mercy of the slavers, but ${he} knows enough about the Free Cities to know that ${he}'s likely to buy ${his} presence here through long years of sexual labor.`);

			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function sell() {
			const frag = new DocumentFragment();
			r = [];
			cashX(cost, "slaveTransfer");
			r.push(`When ${he} arrives, ${he} is the very picture of someone out of ${his} depth. It's clear ${he} feels some relief over not being at the mercy of the slavers, but ${he} knows enough about the Free Cities to know that ${he}'s likely to buy ${his} presence here through long years of sexual labor. A purchaser's agent appears to take ${him} away, and ${he} quietly asks who's bought ${him}. A breeder, you tell ${him}, who plans to breed the ideal line of giants.`);
			if (slave.dick > 0) {
				r.push(`${He}'ll be the center of ${his} own little harem for as long as ${he} can keep them swollen with children.`);
			} else {
				r.push(`${He}'ll probably manage 20 pregnancies or so before ${he}'s retired, but during that time ${he}'ll be pampered, if not a little sore.`);
			}
			App.Events.addParagraph(frag, r);
			return frag;
		}
	}
};