code:
App.Events.recFSArabianRevivalist = class recFSArabianRevivalist extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.FSAnnounced === 1,
			() => V.arcologies[0].FSArabianRevivalist > random(1, 100) || (V.debugMode > 0 && V.debugModeEventSelection > 0)
		];
	}
	execute(node) {
		let r = [];
		V.nextLink = "RIE Eligibility Check";
		const slave = GenerateNewSlave(null, {
			minAge: 25, maxAge: Math.max(25, V.retirementAge-5), ageOverridesPedoMode: 1, disableDisability: 1
		});
		slave.origin = "$He offered $himself to you for enslavement because $he thought your harem $his best hope for good treatment.";
		slave.devotion = random(30, 35);
		slave.trust = random(30, 35);
		slave.career = "a professor";
		generateSalonModifications(slave);
		setHealth(slave, jsRandom(10, 30), undefined, undefined, 0, 0);
		slave.face = random(15, 100);
		slave.skill.oral = 35;
		slave.skill.anal = 15;
		slave.skill.whoring = 0;
		slave.skill.entertainment = 100;
		slave.intelligence = random(51, 95);
		slave.intelligenceImplant = 15;
		slave.teeth = "normal";
		slave.sexualFlaw = either("idealistic");

		const {
			He,
			his, he, him, girl, 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, surprisingly, is a beautiful ${woman} in ${his} thirties who speaks with a richly lilting accent and a literary vocabulary.`);
		r.push(Spoken(slave, `"I'm afraid,"`));
		r.push(`${he} says sadly,`);
		r.push(Spoken(slave, `"it's come to slavery, for me. I am no longer a ${girl}, but I can make some claim to beauty. I know many stories and can tell them cleverly; I can sing and dance well. I know you are not looking for a Scheherazade, but I could play her part. Nor am I naïve; I know the Sultan enjoyed her body as well as her wit, and I am not unskilled in those respects, either."`));
		r.push(`${He} looks you straight in the eye.`);
		r.push(Spoken(slave, `"May I come into your harem? I will do my best to brighten it."`));

		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 estimation of ${him} rises through the enslavement process: ${he} doffs and discards ${his} conservative business wear without complaint, and stands nude before you, obeying instructions without fuss. There is an indecipherable glint in ${his} ${App.Desc.eyesColor(slave)}: nerves? Excitement? Challenge, even? Perhaps ${he} even feels this is an adventure. And that, it will certainly be.`);

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

		function sell() {
			cashX(cost, "slaveTransfer");
			return `${He} arrives and works ${his} way through the enslavement process without fuss. When a buyer's agent arrives, ${he} immediately understands that ${he} has been sold. ${He} looks rueful for a moment, obviously realizing that you made no commitment not to do this, and that such a commitment would have been worthless in any case. ${He} flawlessly performs the only successful insult available to ${him}, ignoring you utterly from that moment on, but obeying the agent faultlessly.`;
		}
	}
};


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

	actorPrerequisites() {
		return [];
	}

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

	execute(node) {
		let r = [];
		V.nextLink = "RIE Eligibility Check";
		const slave = GenerateNewSlave(null, {minAge: 16, maxAge: 19, disableDisability: 1});
		slave.birthWeek = random(1, 8);
		generateSalonModifications(slave);
		slave.origin = "$He offered $himself to you for enslavement after following a dangerous, illegal growth hormone regimen.";
		slave.boobs += random(10, 20)*200;
		slave.nipples = "puffy";
		slave.areolae = 3;
		slave.weight = 50;
		slave.butt += random(2, 4);
		slave.lips = 35;
		slave.devotion = random(-15, 15);
		slave.trust = random(-15, 15);
		setHealth(slave, jsRandom(-40, -30), undefined, normalRandInt(10, 3), Math.max(normalRandInt(1, 0.5), 0));
		slave.intelligence = random(0, 90);
		slave.pubicHStyle = "waxed";
		slave.underArmHStyle = "waxed";
		slave.behavioralFlaw = either("anorexic", "odd");

		const {
			His, He,
			his, he, him, himself
		} = 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 person placing the call is physically quite unusual, to the point of looking distinctly unnatural. ${He} has absolutely enormous tits, an ass to match, and is generally plush all over; yet despite being able to compete with the lushest mother in the curves department, ${he} appears to be very young. ${He} explains ${himself} quickly.`);
		r.push(Spoken(slave, `"${(V.PC.title !== 0) ? "Sir" : "Ma'am"}, I just turned ${slave.actualAge}. Where I'm from, that means I'm very likely to be enslaved one way or another. So, I've been taking off-market hormones for a couple of years to raise myself out of the gutter as far as who might take me. I hear life is better if you're a valuable slave."`));
		r.push(`${He} leans into the camera, displaying a solid acre of cleavage.`);
		r.push(Spoken(slave, `"Can I be your valuable slave?"`));

		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, it's clear ${he}'s nobody's fool. ${He} comes without personal effects of any kind, and is wearing cheap, sturdy clothes to travel in, since ${he} knows ${he}'ll be taking them off immediately. ${He} does, without being told, just as soon as the enslavement formalities are out of the way. ${His} breasts are capped by titanic, puffy nipples; ${he} notices you appreciating them and gives you a hesitant little smile, swaying ${his} shoulders back and forth a little to set ${his} flesh deliciously into motion.`);

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

		function sell() {
			cashX(cost, "slaveTransfer");
			return `When ${he} arrives, it's clear ${he}'s nobody's fool. ${He} comes without personal effects of any kind, and is wearing cheap, sturdy clothes to travel in, since ${he} knows ${he}'ll be taking them off immediately. ${He} does, without being told, just as soon as the enslavement formalities are out of the way. ${His} breasts are capped by titanic, puffy nipples; ${he} notices you appreciating them and gives you a hesitant little smile, swaying ${his} shoulders back and forth a little to set ${his} flesh deliciously into motion. ${His} playfulness vanishes when a purchaser's agent arrives to take ${him} away. ${He} looks at you desperately, begging to know who's purchased ${him}. You tell ${him} truthfully that a wealthy citizen one arcology over bought ${him} as a house slave; you neglect to mention that he likes big tits.`;
		}
	}
};

repo_name: Elohiem/fc

license: mit


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

	execute(node) {
		let r = [];
		V.nextLink = "RIE Eligibility Check";
		const slave = GenerateNewSlave(null, {
			minAge: 28, maxAge: 44, ageOverridesPedoMode: 1, disableDisability: 1
		});
		generateSalonModifications(slave);
		slave.origin = "$He offered $himself to you to escape enslavement in $his homeland for being older and unmarried.";
		slave.boobs += random(6, 15)*200;
		slave.nipples = "inverted";
		slave.areolae = 3;
		slave.weight = random(50, 150);
		slave.butt += random(2, 4);
		slave.lips = 35;
		slave.devotion = random(-15, 15);
		slave.trust = random(-15, 15);
		setHealth(slave, jsRandom(20, 40), undefined, undefined, 0, 0);
		slave.intelligence = random(0, 90);
		slave.pubicHStyle = "waxed";

		const {
			His, 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 person placing the call is physically quite unusual, to the point of looking distinctly unnatural. ${He} has absolutely enormous tits, an ass to match, and is generally plush all over; perhaps one of the lushest mothers in the curves department you've ever seen. ${He} explains ${himself} quickly.`);
		r.push(Spoken(slave, `"${(V.PC.title !== 0) ? "Sir" : "Ma'am"}, I'm not a young ${woman}. Where I'm from, being this old and unmarried means I'm very likely to be enslaved one way or another. But I've always had big breasts. Well, big everything really. I hear life is better if you're a plush slave."`));
		r.push(`${He} leans into the camera, displaying a solid acre of cleavage.`);
		r.push(Spoken(slave, `"Can I be your plush slave?"`));

		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, it's clear ${he}'s nobody's fool. ${He} comes without personal effects of any kind, and is wearing cheap, sturdy clothes to travel in, since ${he} knows ${he}'ll be taking them off immediately. ${He} does, without being told, just as soon as the enslavement formalities are out of the way. ${His} breasts are capped by titanic, puffy nipples; ${he} notices you appreciating them and gives you a hesitant little smile, swaying ${his} shoulders back and forth a little to set ${his} flesh deliciously into motion.`);

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

		function sell() {
			cashX(cost, "slaveTransfer");
			return `When ${he} arrives, it's clear ${he}'s nobody's fool. ${He} comes without personal effects of any kind, and is wearing cheap, sturdy clothes to travel in, since ${he} knows ${he}'ll be taking them off immediately. ${He} does, without being told, just as soon as the enslavement formalities are out of the way. ${His} breasts are capped by titanic, puffy nipples; ${he} notices you appreciating them and gives you a hesitant little smile, swaying ${his} shoulders back and forth a little to set ${his} flesh deliciously into motion. ${His} playfulness vanishes when a purchaser's agent arrives to take ${him} away. ${He} looks at you desperately, begging to know who's purchased ${him}. You tell ${him} truthfully that a wealthy citizen one arcology over bought ${him} as a house slave; you neglect to mention that he likes big tits.`;
		}
	}
};


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

	actorPrerequisites() {
		return [];
	}

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

	execute(node) {
		let r = [];
		V.nextLink = "RIE Eligibility Check";
		const slave = GenerateNewSlave("XX", {minAge: 22, maxAge: 28, disableDisability: 1});
		slave.origin = "$He offered $himself to you for enslavement because $he needs to feel a higher call.";
		slave.devotion = random(25, 50);
		slave.trust = random(25, 50);
		slave.career = "a merchant";
		setHealth(slave, jsRandom(-20, 20), undefined, undefined, 0, 0);
		slave.face = random(-20, 0);
		slave.anus = 0;
		if (slave.vagina !== -1) {
			slave.vagina = 0;
		}
		slave.skill.vaginal = 1;
		slave.skill.anal = 1;
		slave.skill.oral = 1;
		slave.skill.whoring = 0;
		slave.skill.entertainment = 0;
		slave.intelligence = random(16, 95);
		slave.intelligenceImplant = 15;
		slave.teeth = "normal";

		const {
			His, 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 trading colony. The caller is a ${woman} who humbly explains how tired ${he} is from all the godless people and terrible conditions, and expresses interest to join the old empires. ${He} probably knows only of the incredible architecture and the military accomplishments that are advertised in vids. Though the sacrifice and collaring of slaves is no secret, most people never find out the real truth to what you do. Nevertheless ${he}'s incredibly willing, so much so that ${he} almost signs ${himself} off to you by accident. ${His} file is displayed in front if you, pending your reaction.`);

		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 awestruck by`);
			if (canSee(slave)) {
				r.push(`all the sights`);
			} else {
				r.push(`everything`);
			}
			r.push(`${he} passed through to get to your abode. ${He} probably didn't see anything too extreme, but ${he} will soon. Feeling your gaze on ${his} body, ${he} quickly abandons all fears from ${his} past life, strips off ${his} clothes, and submits to you fully. Only time will tell if ${he} made a mistake.`);

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

		function sell() {
			cashX(cost, "slaveTransfer");
			return `${He} arrives so terrified, ${he} can't stop shaking and won't acknowledge most of your commands. It seems ${he} realized what really goes on in this arcology. The blood and gruesome mutilation is very far from ${he} envisioned for ${his} future; ${V.arcologies[0].name} is a close reproduction of the miasma of death that accompanied the Aztecs. ${He}'s currently too shaken to realize what awaits ${him}. Whether good or bad, ${he} can't back out. ${He}'s yours.`;
		}
	}
};


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

	execute(node) {
		let r = [];
		V.nextLink = "RIE Eligibility Check";
		const slave = GenerateNewSlave(null, {maxAge: 42, disableDisability: 1, race: "nonslave"});
		slave.origin = "$He offered $himself for voluntary enslavement to get to an arcology in which implants are uncommon, since $he has a fear of surgery.";
		setHealth(slave, jsRandom(-20, 20), undefined, undefined, 0, 0);
		slave.devotion = random(-15, 15);
		slave.trust = random(-15, 15);

		const {
			He,
			his, he, him, himself
		} = 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 rather normal-looking, if obviously poor, free citizen. ${He} says dejectedly,`);
		r.push(Spoken(slave, `"I'm on my last few ¤ here, ${V.PC.title !== 0 ? "sir" : "ma'am"}. The owner here, he's planning to enslave me later today. I just know it. He fills his slaves up with silicone until they look like fucking Barbie dolls."`));
		r.push(`${He} shivers fearfully.`);
		r.push(Spoken(slave, `"You don't do that, right? If I have to be a fucktoy, I don't want to be cut up first."`));

		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, it's obvious that ${he} isn't particularly happy with the situation, but there is some evident relief to ${him}. When asked about it, ${he} says,`);
			r.push(Spoken(slave, `"I really hate the idea of surgery, especially implant surgery, ${getWrittenTitle(slave)}. Just — the idea of having fake shit in here —"`));
			r.push(`${he} rubs ${his} chest a little`);
			r.push(Spoken(slave, `"— Ugh."`));
			r.push(`${He} laughs bitterly at ${himself}, and then rubs ${his} chest again, looking at you with mixed fear and invitation.`);

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

		function sell() {
			cashX(cost, "slaveTransfer");
			return `When ${he} arrives, it's obvious that ${he} isn't particularly happy with the situation, but there is some evident relief to ${him}. It vanishes when a purchaser's agent arrives to take ${him} away. ${He} looks at you desperately, begging to know who's purchased ${him}. You tell ${him} truthfully that a wealthy citizen one arcology over bought ${him} as a house slave; you neglect to mention that he likes big tits, and he isn't particular about whether they're natural.`;
		}
	}
};


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

	actorPrerequisites() {
		return [];
	}

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

	execute(node) {
		let r = [];
		V.nextLink = "RIE Eligibility Check";
		const slave = GenerateNewSlave(null, {
			minAge: 18, maxAge: 24, ageOverridesPedoMode: 1, disableDisability: 1
		});
		slave.origin = "$He offered $himself for voluntary enslavement after graduating from a slave school and passing $his majority, because $he heard you treat slaves without implants well.";
		slave.career = "a student";
		setHealth(slave, jsRandom(-20, 20), 0, 0, 0, jsRandom(10, 30));
		slave.devotion = random(-15, 15);
		slave.trust = random(-15, 15);

		const {
			He, His,
			his, he, him, himself, women, girl
		} = getPronouns(slave);
		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		const {title: Master} = 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 one is from one of the less prestigious slave schools, which is not in itself unusual, save that it comes directly from one of the graduating students. You are presented with a rather normal-looking slave${girl}.`);
		r.push(Spoken(slave, `"I'm past my majority," ${he} says happily. "I know I'm not that pretty, ${(V.PC.title !== 0) ? "sir" : "ma'am"}. But,"`));
		r.push(`and ${he} pulls the camera back to reveal ${his} fully nude body,`);
		r.push(Spoken(slave, `"I've never had any plastic in me, the school couldn't afford it anyways. I was searching the net, and I saw that you like ${women} without surgery, ${(V.PC.title !== 0) ? "sir" : "ma'am"}. If I'm to be owned, I'd like it to be by someone like you who won't cut me open."`));

		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, it's obvious that ${he}'s fairly happy. After all, the slave school trained ${him} for this. When asked about it, ${he} says,`);
			r.push(Spoken(slave, `"Some of the ${girl}s who graduated before me were given implants, ${Master}. Just — the idea of having fake shit in here —"`));
			r.push(`${he} rubs ${his} chest a little`);
			r.push(Spoken(slave, `"— ugh. I'm glad you're not into that"`));
			r.push(`${He} laughs bitterly at ${himself}, and then rubs ${his} chest again, looking at you with mixed fear and invitation.`);

			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, it's obvious that ${he}'s fairly happy. After all, the slave school trained ${him} for this. When asked about it, ${he} says,`);
			r.push(Spoken(slave, `"Some of the ${girl}s who graduated before me were given implants, ${Master}. Just — the idea of having fake shit in here —"`));
			r.push(`${he} rubs ${his} chest a little`);
			r.push(Spoken(slave, `"— Ugh. I'm glad you're not into that"`));
			r.push(`${He} laughs bitterly at ${himself}, and then rubs ${his} chest again, looking at you with mixed fear and invitation. ${His} playfulness vanishes when a purchaser's agent arrives to take ${him} away. ${He} looks at you desperately, begging to know who's purchased ${him}. You tell ${him} truthfully that a wealthy citizen one arcology over bought ${him} as a house slave; you neglect to mention that he likes big tits, and he isn't particular about whether they're natural.`);
			App.Events.addParagraph(frag, r);
			return frag;
		}
	}
};


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

	execute(node) {
		let r = [];
		V.nextLink = "RIE Eligibility Check";
		const slave = GenerateNewSlave(null, {minAge: 16, maxAge: 42, disableDisability: 1});
		slave.origin = "$He offered $himself for enslavement out of religious conviction.";
		generateSalonModifications(slave);
		setHealth(slave, jsRandom(10, 30), undefined, undefined, 0, 0);
		slave.devotion = random(15, 45);
		slave.trust = random(60, 75);
		slave.behavioralFlaw = "devout";
		slave.sexualFlaw = "repressed";

		const {
			He,
			his, he, him, himself, 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 is a little odd; it merely begs you for an in person audience and offers you the sender's "unworthy body" as payment for granting it. You surreptitiously scan ${him} when ${he} arrives to make sure this isn't an attack of some kind, but ${he}'s just a normal ${girl} wearing conservative clothing. When admitted to your office, ${he} immediately strips off ${his} clothing, gets down before your desk, and presses ${his} forehead to the floor.`);
		r.push(Spoken(slave, `"${(V.PC.title !== 0) ? "Sir" : "Ma'am"},"`));
		r.push(`${he} says,`);
		r.push(Spoken(slave, `"please accept me as your slave. I am a wretched whore, filled with sin, and freedom is a burden to me. Please free me from this torment and take me into your service."`));

		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} lets out a convulsive sob when you accept ${his} servitude, and is painfully obsequious as you complete the formalities of enslavement. Your exam reveals several minor indications of self-harm — chewed nails, bitten lips, and such. But for all that, a remarkable look of peace has settled on the poor woman's face. ${He} waits patiently for a hint of your will,`);
			if (canAchieveErection(slave)) {
				r.push(`${his} cock painfully erect`);
			} else if (slave.dick > 0) {
				r.push(`precum dripping from ${his} soft dick`);
			} else {
				r.push(`${his} pussy visibly moist`);
			}
			r.push(`at the prospect of the servile sex ${he} is convinced is ${his} duty.`);

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

		function sell() {
			cashX(cost, "slaveTransfer");
			return `${He} lets out a convulsive sob when you accept ${his} servitude, and is painfully obsequious as you complete the formalities of enslavement. When ${his} buyer arrives to take ${him} away, the realization agonizes ${him}, but ${he} snuffs out ${his} saddened reaction almost as soon as it dawns on ${his} face. ${He} visibly draws ${himself} up, obviously telling ${himself} that service under one master is as righteous as service under another.`;
		}
	}
};


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

	actorPrerequisites() {
		return [];
	}

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

	execute(node) {
		let r = [];
		V.nextLink = "RIE Eligibility Check";
		const slave = GenerateNewSlave(null, {maxAge: 42, disableDisability: 1});
		slave.origin = "$He was offered to you by a group of Chattel Religionists eager to be rid of $his blasphemous old world beliefs.";
		setHealth(slave, jsRandom(-10, 10), undefined, undefined, 0, 50);
		slave.devotion = -100;
		slave.trust = -100;
		if (slave.anus > 0) {
			slave.anus = 0;
		}
		if (slave.vagina > 0) {
			slave.vagina = 0;
			slave.trueVirgin = 1;
			slave.career = "a nun";
		} else {
			slave.career = "a priest";
			slave.boobs = 100;
		}
		slave.behavioralFlaw = "devout";
		slave.sexualFlaw = "repressed";

		const {him} = getPronouns(slave);
		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		r.push(`Ever since you have been steering ${V.arcologies[0].name} towards a belief in chattel religionism, you've been receiving increasingly useful communications from groups that share your ideals. With much of the old world in freefall, many groups with particularly vehement religious beliefs are expanding unchecked by the mores of big government, and by taking the chattel religionist side, you've automatically inserted yourself into a worldwide network of like-minded organizations. You receive a message from one such group.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`It seems that the Chattel Religionists have all but taken over their town and driven out or converted the local worshippers of old world religions, save for a single religious building and its clergy who continue in defiance. This group has stepped in to put an end to this impiety. However, though they may be ruthless vigilantes, they don't consider themselves murderers. They're interested in fencing a member of the clergy to you, no questions asked, on a flat fee basis. Included in the message is a slave dossier detailing the piece of human chattel they're offering:`);
		if (slave.genes === "XX") {
			r.push(`a lovely virgin nun.`);
		} else {
			r.push(`a rather stuck up priest.`);
		}
		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 complete the legalities and a clearly improvised VTOL craft arrives at ${V.arcologies[0].name}, broadcasting an erratic array of IFF codes. It seems this group hasn't quite mastered the intricacies of air travel. The aircraft doesn't seem capable of the delicate feat of landing on the pad it had been directed to: it simply hovers`);
			if (V.showInches === 2) {
				r.push(`six feet`);
			} else {
				r.push(`two meters`);
			}
			r.push(`off the pad for the five seconds it takes to shove a canvas bag that obviously contains a struggling human form out of the side door. The condemned prays tirelessly throughout the biometric scanning process, utterly shocked and disgusted by what they've witnessed in just the few minutes they've been in your arcology. Then it's off to the penthouse for basic slave induction.`);

			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(`You complete the legalities and a clearly improvised VTOL craft arrives at ${V.arcologies[0].name}, broadcasting an erratic array of IFF codes. It seems this group hasn't quite mastered the intricacies of air travel. The aircraft doesn't seem capable of the delicate feat of landing on the pad it had been directed to: it simply hovers`);
			if (V.showInches === 2) {
				r.push(`six feet`);
			} else {
				r.push(`two meters`);
			}
			r.push(`off the pad for the five seconds it takes to shove a canvas bag that obviously contains a struggling human form out of the side door. The condemned prays tirelessly they're unpacked, utterly shocked and disgusted by what they've witnessed in just the few minutes they've been in your arcology. You tell them to cheer up — they're off to a nice little brothel where they'll learn the joys of their new religion. You make out a single word as they are hauled away, "Blasphemer!" Seems someone wants you to patron them in their new career.`);
			App.Events.addParagraph(frag, r);
			return frag;
		}
	}
};


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

	execute(node) {
		let r = [];
		V.nextLink = "RIE Eligibility Check";
		const slave = GenerateNewSlave(null, {
			minAge: 26, maxAge: 42, disableDisability: 1, ageOverridesPedoMode: 1
		});
		slave.origin = "$He offered $himself to you for enslavement because $he thought $he would have prospects of advancement among your slaves.";
		slave.devotion = random(30, 35);
		slave.trust = random(30, 35);
		slave.career = "a businesswoman";
		setHealth(slave, jsRandom(10, 30), undefined, undefined, 0, 0);
		slave.face = 15;
		slave.skill.oral = random(15, 40);
		slave.skill.anal = random(15, 40);
		slave.skill.whoring = random(15, 40);
		slave.skill.entertainment = random(15, 40);
		slave.intelligence = random(51, 95);
		slave.intelligenceImplant = 15;
		slave.teeth = "normal";
		slave.behavioralFlaw = either("arrogant");
		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 office, and you suppress the urge to check whether ${V.assistant.name} has misidentified a business communication. The caller is a middle-aged ${woman}, not unattractive, whose face is lined with stress and worry. ${He} draws ${himself} up and says,`);
		r.push(Spoken(slave, `"I would like to apply to be your slave."`));
		r.push(`There is a flash of bitter amusement at the absurd statement, but ${he} continues,`);
		r.push(Spoken(slave, `"Business circumstances make it inevitable. I have considerable skills and experience, and it is my understanding that you value such things."`));
		r.push(`${He} forwards ${his} qualifications: they are comprehensive and open, including ${his} sexual skills as if they were merely another business asset. Which, in a way, they are.`);

		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 in a simple, sturdy suit, which ${he} obviously wore in the correct anticipation of immediately removing and never seeing again. ${He} cooperates with the enslavement process as best ${he} can, ${his} glance confident and watchful. ${He}'s obviously calculating how to get ahead within this new place, and ${he} pays particularly close attention as the ebb and flow of business through your office brings your various slaves into ${his} view for the first time.`);

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

		function sell() {
			cashX(cost, "slaveTransfer");
			return `${He} arrives and works ${his} way through the enslavement process, doing ${his} best to ingratiate ${himself}. When a buyer's agent arrives, ${he} immediately understands that ${he} has been sold. ${He} looks rueful for a moment, obviously realizing that you made no commitment not to do this, and that such a commitment would have been worthless in any case. ${He} transfers ${his} focus to the agent without hesitation, doing ${his} best to improve ${his} rapidly changing position.`;
		}
	}
};


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

	actorPrerequisites() {
		return [];
	}

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

	execute(node) {
		let r = [];
		V.nextLink = "RIE Eligibility Check";
		const slave = GenerateNewSlave("XX", {minAge: 11, maxAge: 42, disableDisability: 1});
		slave.origin = "$He was sold to you by an anonymous person who wanted $him to suffer.";
		generateSalonModifications(slave);
		slave.boobsImplant += random(4, 6)*200;
		slave.boobs += slave.boobsImplant;
		slave.boobsImplantType = "normal";
		if (slave.boobsImplant / slave.boobs >= 0.90) {
			slave.boobShape = "spherical";
			slave.nipples = "flat";
		} else {
			slave.boobShape = "normal";
			slave.nipples = "huge";
		}
		slave.nipples = "huge";
		slave.areolae = 1;
		slave.butt++;
		slave.buttImplant++;
		slave.buttImplantType = "normal";
		slave.lips += 10;
		slave.lipsImplant += 10;
		slave.face = Math.clamp(slave.face+20, -100, 100);
		slave.faceImplant += 40;
		slave.devotion = random(-45, -25);
		slave.trust = random(-45, -25);
		setHealth(slave, jsRandom(20, 40), undefined, undefined, 0, 40);
		slave.anus = 2;
		slave.vagina = 2;
		slave.weight = 0;
		slave.clitPiercing = 1;
		slave.tonguePiercing = 1;
		slave.nipplesPiercing = 1;
		slave.nosePiercing = 1;
		slave.earPiercing = 1;
		slave.skill.vaginal = random(50, 100);
		slave.skill.oral = random(50, 100);
		slave.skill.anal = random(50, 100);
		slave.skill.whoring = random(50, 100);
		slave.skill.entertainment = random(50, 100);
		slave.pubicHStyle = "waxed";
		slave.underArmHStyle = "waxed";
		slave.behavioralFlaw = either("anorexic", "arrogant", "bitchy");

		const {
			He,
			his, he, him
		} = getPronouns(slave);
		const {HeA, himA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		const {womanP} = getPronouns(V.PC).appendSuffix("P");
		const contractCost = 2000;
		const cost = slaveCost(slave) - contractCost;
		r.push(`${capFirstChar(V.assistant.name)} does not typically permit anonymous messages through to you. If someone wishes to speak to you, they can do so under their own name and with their own face. ${HeA} makes an exception, however, for a message offering you a slave so long as you pay the costs of enslavement, nothing else.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`The face and voice are obscured by a petty anonymization program, the sort that can be obtained with five minutes' work in the shadier parts of the net. ${capFirstChar(V.assistant.name)} could crack it nearly instantaneously, but you hold ${himA} back a moment to avoid spooking your correspondent. You are rewarded with video of the subject of the proposed enslavement, and the simple statement "I hate this fucking bitch, and I want ${him} to suffer. Can't do it myself. You seem like the right ${womanP} to break the cunt."`);

		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 as part of the anonymous slave transfers that make up a good part of the inter-arcology commerce, ${he} has clearly had some time to mull over ${his} situation. As soon as ${he} sees you, ${he} blurts out, "Whatever that fucker told you, it isn't true. I'll be your little bitch bimbo, whatever you want. Just don't — just don't fucking hurt me." ${He} sticks out ${his} chest in a clear attempt to entice you with ${his} fake tits.`);

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

		function sell() {
			cashX(cost, "slaveTransfer");
			return `When ${he} arrives as part of the anonymous slave transfers that make up a good part of the inter-arcology commerce, ${he} has clearly had some time to mull over ${his} situation. As soon as ${he} sees you, ${he} blurts out, "Whatever that fucker told you, it isn't true. I'll be your little bitch bimbo, whatever you want. Just don't — just don't fucking hurt me." ${He} sticks out ${his} chest in a clear attempt to entice you with ${his} fake tits, and is rewarded with a bag over ${his} head, courtesy of the purchaser's agent who arrived in the meantime. The agent clearly felt that ${he} would be a handful worth corralling quickly, and this proves correct. ${He} goes limp after being tased, though.`;
		}
	}
};


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

	execute(node) {
		let r = [];
		V.nextLink = "RIE Eligibility Check";
		const slave = GenerateNewSlave("XX", {
			minAge: 32, maxAge: 42, ageOverridesPedoMode: 1, disableDisability: 1
		});
		slave.origin = "$He was sold to you by an anonymous slave breaking group.";
		generateSalonModifications(slave);
		slave.boobsImplant += random(3, 6)*200;
		slave.boobs += slave.boobsImplant;
		slave.boobsImplantType = "normal";
		slave.areolae = 1;
		slave.butt++;
		slave.buttImplant++;
		slave.buttImplantType = "normal";
		slave.lips += 10;
		slave.lipsImplant += 10;
		slave.face = Math.clamp(slave.face+20, -100, 100);
		slave.devotion = random(-75, -55);
		slave.trust = random(-65, -45);
		setHealth(slave, jsRandom(-40, 20), normalRandInt(10, 3), normalRandInt(10, 3), undefined, jsRandom(30, 80));
		slave.anus = 2;
		slave.vagina = 2;
		slave.weight = 0;
		slave.clitPiercing = 1;
		slave.tonguePiercing = 1;
		slave.nipplesPiercing = 1;
		slave.nosePiercing = 1;
		slave.earPiercing = 1;
		slave.pubicHStyle = "waxed";
		slave.behavioralFlaw = either("arrogant", "bitchy");

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

		r.push(`${capFirstChar(V.assistant.name)} does not typically permit anonymous messages through to you. If someone wishes to speak to you, they can do so under their own name and with their own face. ${HeA} makes an exception, however, for a message offering you a slave so long as you pay the costs of enslavement, nothing else.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`In lieu of a face, a plain page of mostly text and a scant few pictures fills the screen and details a number of potential slaves for sale, though most of the merchandise seems visibly too damaged to be worthy of purchase. Yet, one of the slaves catches your eye — an older ${woman} covered in lashes, bruises and marks yet absent the dead-eyed expression of ${his} peers. The document claims ${he} has been in their possession longer than any of the other slaves, but has proven resistant to their breaking methods.`);

		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 as part of the anonymous slave transfers that make up a good part of the inter-arcology commerce, ${he} has clearly had some time to mull over ${his} situation. As soon as ${he} sees you, ${he} glares deep into your eyes and addresses you directly,`);
			r.push(Spoken(slave, `"Those fuckers threw everything they could at me; you can't break me. No one can."`));

			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 as part of the anonymous slave transfers that make up a good part of the inter-arcology commerce, ${he} has clearly had some time to mull over ${his} situation. As soon as ${he} sees you, ${he} glares deep into your eyes and addresses you directly,`);
			r.push(Spoken(slave, `"Those fuckers threw everything they could at me, you can't break me. No one can."`));
			r.push(`${He} is rewarded with a bag over ${his} head, courtesy of the purchaser's agent who arrived in the meantime. The agent clearly felt that ${he} would be a handful worth corralling quickly, and this proves correct. ${He} goes limp after being tased, though.`);
			App.Events.addParagraph(frag, r);
			return frag;
		}
	}
};


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

	actorPrerequisites() {
		return [];
	}

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

	execute(node) {
		let r = [];
		V.nextLink = "RIE Eligibility Check";
		const slave = GenerateNewSlave(null, {maxAge: 24, disableDisability: 1, race: "nonslave"});
		slave.origin = "$He offered $himself to you for enslavement because $he had a disgustingly naïve view of medieval Japanese culture.";
		slave.devotion = random(-15, -5);
		slave.trust = random(5, 15);
		slave.career = "a student";
		generateSalonModifications(slave);
		setHealth(slave, jsRandom(-20, 0), undefined, undefined, 0, 0);
		slave.face = random(-60, 10);
		slave.weight = random(20, 100);
		slave.vagina = 0;
		slave.trueVirgin = 1;
		slave.skill.vaginal = 0;
		slave.skill.whoring = 0;
		slave.skill.entertainment = 0;
		slave.intelligence = random(-50, 50);
		slave.intelligenceImplant = 15;
		if (slave.physicalAge >= 12) {
			slave.teeth = "normal";
		}
		slave.behavioralFlaw = either("gluttonous", "liberated");
		slave.sexualFlaw = either("apathetic", "idealistic", "none", "none", "shamefast");

		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 caller is a young ${woman} who struggles to stop ${himself} from peppering ${his} socially awkward babble with poorly pronounced Japanese colloquialisms. Insofar as you can parse ${his} nonsense, ${he} seems to have gotten a hilariously romanticized version of feudal Japan from somewhere, and is willing to submit to enslavement in order to join your revivalist arcology. Whoever's out there spreading this rubbish, you owe them one; this serf is in for an extremely rude awakening.`);

		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 with doubt already clouding ${his} eyes. It seems ${he} passed one of the arcology's seedier bars on ${his} way up to your penthouse; the sight of roaring patrons swilling cheap sake and manhandling whores in loose kimonos does not seem to have been part of ${his} expectations. As the enslavement process winds on, ${he} reflexively begins to look around for a means of escape, and slowly collapses into ${himself} as ${he} realizes there is none.`);

			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} passed one of the arcology's seedier bars on ${his} way up to your penthouse; the sight of roaring patrons swilling cheap sake and manhandling whores in loose kimonos does not seem to have been part of ${his} expectations. When a buyer's agent arrives to take charge of ${his} low-value body, ${he} manages to spit out a last bit of bad Japanese (a childish insult) before he bags ${him}. The body in the bag struggles spastically until he knuckles it hard in the kidney, slings it over his shoulder, and carries the package out, grinning at you in commiseration.`;
		}
	}
};


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

	execute(node) {
		/* Written and coded by Boney M */
		V.nextButton = "Continue";
		V.nextLink = "RIE Eligibility Check";
		V.returnTo = "RIE Eligibility Check";
		V.encyclopedia = "Enslaving People";
		V.market = Object.assign(App.Markets.GlobalVariable(), {introType: "egyptian", newSlavesDone: 0, newSlaveIndex: 0});

		const contractCost = 3000;
		const slave = GenerateNewSlave(null, {minAge: Math.max(16, V.minimumSlaveAge + 3), maxAge: 29, disableDisability: 1});
		generateSalonModifications(slave);
		slave.origin = "$He offered $himself to you for enslavement hoping you would preserve $his incestuous relationship with $his sibling.";
		slave.devotion = random(5, 15);
		slave.trust = random(-15, -5);
		setHealth(slave, jsRandom(-20, 0), undefined, undefined, undefined, 35);
		setMissingParents(slave);
		slave.canRecruit = 0;
		if (slave.dick > 0 && slave.balls === 0) {
			slave.balls = random(1, 5);
		}

		const oppositeSex = V.seeDicks.isBetween(0, 100) && (random(1, 4) <= 3);
		const secondSlave = generateRelatedSlave(slave, "younger sibling", oppositeSex);

		secondSlave.relationship = 4;
		secondSlave.relationshipTarget = slave.ID;
		slave.relationship = 4;
		slave.relationshipTarget = secondSlave.ID;

		/* they've been fucking, obviously, so no virginity */
		if (secondSlave.dick > 0) {
			if (slave.vagina === 0) {
				slave.vagina = secondSlave.dick > 4 ? 2 : 1;
			}
			slave.anus = Math.max(slave.anus, secondSlave.dick > 4 ? 2 : 1);
			if (slave.preg >= 1) {
				slave.pregSource = secondSlave.ID;
			}
		}
		if (slave.dick > 0) {
			if (secondSlave.vagina === 0) {
				secondSlave.vagina = slave.dick > 4 ? 2 : 1;
			}
			secondSlave.anus = Math.max(secondSlave.anus, slave.dick > 4 ? 2 : 1);
			if (secondSlave.preg >= 1) {
				secondSlave.pregSource = slave.ID;
			}
		}

		const newSlaves = [slave, secondSlave];
		const {
			HeA,
		} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		App.Events.addParagraph(node, [
			`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, [
			`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. In this case, however, the story is more unusual — the callers seem stressed, but otherwise normal. They haltingly and quietly explain, with many nervous glances off-camera to ensure they are not overheard, that they are both siblings and lovers, and their attempts to keep the truth of the nature of their relationship from their friends, family, and society at large have failed. They had heard of ${V.arcologies[0].name}'s reverence for incestuous relationships, and have managed to talk themselves into the questionable conclusion that their only chance to be together was for them to sell themselves to someone who would not just accept but encourage their incest — namely, you.`
		]);
		App.Events.addParagraph(node, [
			`${capFirstChar(V.assistant.name)} assembles a dossier of information and photos from information they've sent describing their bodies and skills, to be used as a substitute for an in-person inspection.`
		]);

		const totalValue = slaveCost(slave) + slaveCost(secondSlave);
		App.UI.DOM.appendNewElement("div", node, `Enslaving them will cost ${cashFormat(contractCost)}. Selling them immediately will bring in approximately ${cashFormat(totalValue-contractCost)}.`, "note");
		node.append(App.UI.MultipleInspect(newSlaves, true));

		const choices = [];
		if (V.cash >= contractCost) {
			choices.push(new App.Events.Result(`Enslave the pair`, enslave));
		} else {
			choices.push(new App.Events.Result(null, null, "You lack the necessary funds to enslave them."));
		}
		App.Events.addResponses(node, choices);

		function enslave() {
			V.market.newSlaves = newSlaves;
			V.market.newSlaves.forEach((s) => cashX(forceNeg(contractCost/V.market.newSlaves.length), "slaveTransfer", s));
			return App.Markets.bulkSlaveIntro();
		}
	}
};


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

	actorPrerequisites() {
		return [];
	}

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

	execute(node) {
		let r = [];
		V.nextLink = "RIE Eligibility Check";
		const slave = GenerateNewSlave("XX", {
			minAge: Math.min(16, V.fertilityAge), maxAge: 19, ageOverridesPedoMode: 1, disableDisability: 1
		});
		slave.origin = "$He was sold to you as a way of disposing of an inconveniently pregnant young $woman.";
		slave.career = App.Data.Careers.General.young.random();
		generateSalonModifications(slave);
		setHealth(slave, jsRandom(-20, 20), undefined, undefined, 0, 10);
		slave.devotion = random(-45, -25);
		slave.trust = random(-45, -25);
		slave.preg = random(20, 40);
		slave.pregType = 1;
		slave.pregWeek = slave.preg;
		slave.pregKnown = 1;
		SetBellySize(slave);
		slave.vagina = 1;
		slave.trueVirgin = 1;
		const {
			He,
			he, his, him, daughter, girl
		} = getPronouns(slave);
		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		r.push(`The sexual and moral revolution taking place in the Free Cites has spread back into the old world, producing an inevitable reaction. Thus there are still many places in the world where it is socially embarrassing for one's young female relatives to appear pregnant and unmarried, and where direct solutions to this unfortunate situation are frowned upon. You receive a communication from one such place, from a traditionalist family whose ${daughter} has dishonored them in this way.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`Having ${him} disappear discreetly into ${V.arcologies[0].name} would be a convenient and face-saving way of resolving the situation. Your society's respect for slave pregnancy gives them a plausible way to salve their own consciences where the baby is concerned. As for the ${girl}, having ${him} out of the way is what matters to them.`);

		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 lost and very pregnant young waif. ${He} clearly feels some hope at leaving ${his} traditionalist home for a more modern society, but ${he} has just as clearly heard enough about the Free Cities to know that ${he}'s likely to buy ${his} presence here through long years of sexual labor. ${He} sighs with relief at getting off ${his} feet when the enslavement process finally allows ${him} to sit.`);
			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 lost and very pregnant young waif. ${He} clearly feels some hope at leaving ${his} traditionalist home for a more modern society, but ${he} has just as clearly heard 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 prefers stock proven to be fertile. ${He}'ll probably manage 20 pregnancies or so, before ${he}'s retired.`;
		}
	}
};


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

	execute(node) {
		let r = [];
		V.nextLink = "RIE Eligibility Check";
		const slave = GenerateNewSlave("XX", {
			minAge: 32, maxAge: 43, ageOverridesPedoMode: 1, disableDisability: 1
		});
		slave.origin = "$He was raped and impregnated, then sold to you as a way of disposing of an inconveniently pregnant mother.";
		setHealth(slave, jsRandom(-20, 20), undefined, undefined, 0, 10);
		slave.devotion = random(-45, -25);
		slave.trust = random(-45, -25);
		slave.preg = random(20, 40);
		slave.pregType = 1;
		slave.pregWeek = slave.preg;
		slave.pregKnown = 1;
		SetBellySize(slave);
		slave.vagina = 1;
		slave.counter.birthsTotal = random(1, 3);

		const {
			He,
			he, his, him, woman
		} = getPronouns(slave);
		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		r.push(`The sexual and moral revolution taking place in the Free Cites has spread back into the old world, producing an inevitable reaction. Thus there are still many places in the world where it is socially embarrassing for one's female relatives to be pregnant as a result of rape, and where direct solutions to this unfortunate situation are frowned upon. You receive a communication from one such place, from a traditionalist family whose mother was dishonored in this way.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`Having ${him} disappear discreetly into ${V.arcologies[0].name} would be a convenient and face-saving way of resolving the situation. Your society's respect for slave pregnancy gives them a plausible way to salve their own consciences where the baby is concerned. As for the mother, having ${him} out of the way is what matters to them.`);

		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 distraught and very pregnant mature ${woman}. ${He} clearly feels some resentment at ${his} traditionalist home and family for selling ${him} into slavery, but ${he} has just as clearly heard enough about the Free Cities to know that ${he}'s likely traded one form of marginalization for another.`);

			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 distraught and very pregnant mature ${woman}. ${He} clearly feels some resentment at ${his} traditionalist home and family for selling ${him} into slavery, but ${he} has just as clearly heard enough about the Free Cities to know that ${he}'s likely traded one form of marginalization for another. A purchaser's agent appears to take ${him} away, and ${he} quietly asks who's bought ${him}. A breeder, you tell ${him}, who prefers to squeeze a few pregnancies out of mature women. ${He}'ll probably manage a few pregnancies before ${he}'s retired.`;
		}
	}
};


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

	actorPrerequisites() {
		return [];
	}

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

	execute(node) {
		let r = [];
		V.nextLink = "RIE Eligibility Check";
		const slave = GenerateNewSlave("XY", {disableDisability: 1});
		generateSalonModifications(slave);
		slave.origin = "$He offered $himself for voluntary enslavement to escape life in an area that disapproved of $his sexual tendencies.";
		setHealth(slave, jsRandom(-20, 20), undefined, undefined, 0, 0);
		slave.devotion = random(15, 20);
		slave.trust = random(0, 10);
		slave.anus = random(1, 2);
		slave.behavioralFlaw = "hates women";
		const {
			He,
			his, he, him, himself
		} = 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 a rather abused individual from one of the more traditionalist areas of the old world. It seems ${he}'s heard of the new and interesting way gender is thought of in the Free Cities, and in ${V.arcologies[0].name} in particular.`);
		r.push(Spoken(slave, `"Being your slave has to be better than being a subhuman here,"`));
		r.push(`${he} says.`);
		r.push(Spoken(slave, `"Being your sex slave is more accepted in your city than being me is here."`));

		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} wears an expression of doubt, fear, and wonder as ${he} takes in the sights and sounds of the magnificent beast that is the new society taking shape in ${V.arcologies[0].name}. The enslavement process requires ${him} to be nude, of course, so ${he} doesn't need to strip to offer ${himself} to you when it's over. ${He} doesn't even have to be prompted: ${he} just gets down on the floor in front of your desk and offers you ${his} fuckhole.`);
			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} wears an expression of doubt, fear, and wonder as ${he} takes in the sights and sounds of the magnificent beast that is the new society taking shape in ${V.arcologies[0].name}. A purchaser's agent arrives to take charge of ${him}, and ${he} asks politely who bought ${him}. A salon, you tell ${him}; ${he}'ll be trained to ${he} tables, serve drinks, and entertain customers with ${his} mouth and anus.`;
		}
	}
};


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

	execute(node) {
		let r = [];
		V.nextLink = "RIE Eligibility Check";
		const slave = GenerateNewSlave("XY", {
			minAge: 32, maxAge: 42, ageOverridesPedoMode: 1, disableDisability: 1
		});
		generateSalonModifications(slave);
		slave.origin = "$He offered $himself for voluntary enslavement after a lifetime as an outcast due to $his sexual tendencies.";
		setHealth(slave, jsRandom(-20, 20), undefined, undefined, 0, 0);
		slave.devotion = random(15, 20);
		slave.trust = random(0, 10);
		slave.anus = random(1, 2);
		slave.behavioralFlaw = "hates women";

		const {
			He,
			his, he, him, himself
		} = 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 a rather mature but otherwise visibly well-to-do individual from one of the more traditionalist areas of the old world. It seems ${he}'s heard of the new and interesting way gender is thought of in the Free Cities, and in ${V.arcologies[0].name} in particular.`);
		r.push(Spoken(slave, `"I've lived my whole life as a subhuman here,"`));
		r.push(`${he} says.`);
		r.push(Spoken(slave, `"Being your sex slave is more accepted in your city than being me is here."`));

		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} wears an expression of doubt, fear, and wonder as ${he} takes in the sights and sounds of the magnificent beast that is the new society taking shape in ${V.arcologies[0].name}. The enslavement process requires ${him} to be nude, of course, so ${he} doesn't need to strip to offer ${himself} to you when it's over. ${He} doesn't even have to be prompted: ${he} just gets down on the floor in front of your desk and offers you ${his} fuckhole.`);
			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} wears an expression of doubt, fear, and wonder as ${he} takes in the sights and sounds of the magnificent beast that is the new society taking shape in ${V.arcologies[0].name}. A purchaser's agent arrives to take charge of ${him}, and ${he} asks politely who bought ${him}. A salon, you tell ${him}; ${he}'ll be trained to wait tables, serve drinks, and entertain customers with ${his} mouth and anus.`;
		}
	}
};


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

	actorPrerequisites() {
		return [];
	}

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

	execute(node) {
		let r = [];
		V.nextLink = "RIE Eligibility Check";
		const slave = GenerateNewSlave(null, {maxAge: 24, disableDisability: 1, race: "nonslave"});
		slave.origin = "$He sold $himself to you to escape those who condemned $his lifestyle.";
		generateSalonModifications(slave);
		slave.career = "a shut-in";
		setHealth(slave, jsRandom(-40, 20), undefined, undefined, undefined, 35);
		slave.devotion = random(35, 45);
		slave.trust = random(20, 25);
		if (slave.vagina > -1) {
			slave.vagina = 4;
		}
		slave.anus = 4;
		if (slave.ovaries === 1) {
			slave.preg = -1;
		}
		slave.weight = -15;
		slave.underArmHStyle = "bushy";
		slave.pubicHStyle = "bushy";
		slave.behavioralFlaw = "gluttonous";
		slave.sexualQuirk = "size queen";
		slave.tonguePiercing = 2;
		slave.nipplesPiercing = 2;
		slave.nosePiercing = 2;
		slave.earPiercing = 2;
		slave.lipsPiercing = 2;
		slave.vaginaPiercing = 2;
		slave.anusPiercing = 2;
		slave.eyebrowPiercing = 2;
		slave.navelPiercing = 2;
		slave.corsetPiercing = 1;
		slave.areolaePiercing = 1;
		slave.clothes = "a slutty outfit";
		slave.shoes = "heels";
		slave.inflation = 3;
		slave.inflationType = "food";
		slave.inflationMethod = 1;
		SetBellySize(slave);
		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 is coming from inside your own arcology, from a tourist interested in permanent residence even if it means enslavement. You have them bought to your office to hear them out. A heavily pregnant ${girl} waddles into your office, ${his} distended belly a stark contrast to ${his} relative thinness. ${He} smiles, ${his} many piercings clicking against each other in the process, and pats ${his} middle.`);
		r.push(Spoken(slave, `"It's food, not a baby. I really enjoyed staying in your arcology, I mean, I live like this back home, but everyone always picks on me for eating so much and never getting off my ass to work. I can't find a lover either, no one can satisfy me anymore..."`));
		r.push(`${He} exposes ${his} gaping asshole to you.`);
		r.push(Spoken(slave, `"I overdid it with the toys. It felt so good, I couldn't stop going bigger. Once I realized that, I started getting piercings and eating, anything to make me feel better. But once I arrived here, I never felt so accepted before, everyone was enjoying themselves however they wanted. So please, let me stay, I'll do everything you can think of."`));

		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} becomes elated when ${he}`);
			if (canHear(slave)) {
				r.push(`hears`);
			} else {
				r.push(`discovers`);
			}
			r.push(`${he}'ll be allowed to stay. Even if ${he} doesn't get to fulfill all ${his} desires, ${his} new life is more welcome than ${his} rapidly ending prior one. ${He} revealed as ${he} is escorted to the slave quarters that ${he} blew the last of ${his} money on ${his} visit here.`);

			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(`You inform ${him} that ${he} will be staying in your arcology, but not under you. ${He} has been purchased by a feeding trainer interested in slim ${girl}s with massive stomach capacities for entry into the eating competitions that have become so popular lately. ${He} seems elated at the news,`);
			r.push(Spoken(slave, `"Stuffing is one of my favorite perversions..."`));
			r.push(`You cut ${him} off and inform ${him} that ${his} current belly pales in comparison to ${his} new owner's previous champion. ${He} should expect to be tied up and force-fed until ${his} entire body is filled to capacity with slave food. ${He} gulps nervously as ${he} escorted out by the portly purchasing agent to ${his} new home.`);
			App.Events.addParagraph(frag, r);
			return frag;
		}
	}
};


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

	execute(node) {
		let r = [];
		V.nextLink = "RIE Eligibility Check";
		const slave = GenerateNewSlave(null, {maxAge: 24, disableDisability: 1});
		slave.origin = "$He offered $himself for enslavement in hope of being less dull.";
		setHealth(slave, jsRandom(0, 10), undefined, undefined, 0, 0);
		slave.devotion = random(0, 15);
		slave.trust = random(10, 25);
		slave.behavioralFlaw = "none";
		slave.behavioralQuirk = "none";
		slave.sexualFlaw = "none";
		slave.sexualQuirk = "none";
		slave.fetish = "none";
		slave.fetishStrength = 0;
		slave.attrXX = 30;
		slave.attrXY = 30;
		slave.vagina = 0;
		slave.trueVirgin = 1;
		slave.anus = 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(`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.`);
		r.push(Spoken(slave, `"I'm what you'd call 'vanilla',"`));
		r.push(`${he} sighs.`);
		r.push(Spoken(slave, `"And, well, I want to expand my horizons and I heard how much fun people have in your arcology. I'm yours to experiment with.`));

		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} wears an expression of doubt, fear, and wonder as ${he} takes in the sights and sounds of the magnificent beast that is the new society taking shape in ${V.arcologies[0].name}. The enslavement process requires ${him} to be nude, of course, and it reveals ${he} has no idea how to be sexy. ${He} really is as boring as ${he} said ${he} was.`);

			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} wears an expression of doubt, fear, and wonder as ${he} takes in the sights and sounds of the magnificent beast that is the new society taking shape in ${V.arcologies[0].name}. A purchaser's agent arrives to take charge of ${him}, and ${he} asks politely who bought ${him}. A man with an oviposition fetish, you tell ${him}. ${He} fails to grasp the meaning. You explain to ${him} that eggs will be stuck into all ${his} holes until ${he} can't stomach any more. ${He} turns beat red at the description, so you carry on. ${His} new owner will likely remodel ${his} cervix to allow eggs to be pumped straight into ${his} womb; ${he}'ll be lucky if ${he} can stand once he's done with ${him}. Then ${he}'ll have to look forward to laying them all for his amusement. ${His} hands have since moved to ${his} crotch, it seems ${he}'s getting into the fantasy.`;
		}
	}
};


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

	actorPrerequisites() {
		return [];
	}

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

	execute(node) {
		let r = [];
		V.nextLink = "RIE Eligibility Check";
		const slave = GenerateNewSlave(null, {minAge: V.minimumSlaveAge, maxAge: 20, disableDisability: 1});
		slave.career = "a shut-in";
		slave.origin = "$He was sold to you by $his exhausted mother, unable to continue dealing with $his mental handicap.";
		slave.accent = 3;
		slave.intelligence = -100;
		slave.intelligenceImplant = 0;
		slave.face = Math.clamp(slave.face+20, -100, 100);
		slave.devotion = random(-100, -50);
		slave.trust = random(-100, -80);
		setHealth(slave, jsRandom(-20, 20), undefined, undefined, 0, 0);
		slave.weight = random(-10, 90);
		slave.behavioralFlaw = "odd";
		slave.canRecruit = 0;

		const {
			He,
			his, he, him
		} = getPronouns(slave);
		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		const contractCost = 2000;
		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 tired looking woman placing the call has a special needs child and can no longer continue to provide the care ${he} requires. Having ${him} disappear discreetly into ${V.arcologies[0].name} would be a convenient way of resolving the situation. Your society's tastes for the mentally slow gives them a plausible way to salve their own consciences on abandoning their child, while, at the same time, giving ${him} a home where ${he} can thrive.`);

		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() {
			r = [];
			r.push(`When ${he} arrives, ${he} is lead directly to your penthouse for enslavement. ${He} wears an expression of avid wonder as ${he} takes in the sights and sounds of the magnificent beast that is the new society taking shape in ${V.arcologies[0].name}. The enslavement process requires ${him} to be nude which, of course, goes about as well as ${his} mother alluded to. By the time you get ${him} undressed, ${he}'s passed out on your floor with ${his} bare ass up in the air. After getting a taste for sex, and an obedience lesson, ${he}'ll fit right in.`);
			r.push(App.UI.newSlaveIntro(slave));
			return r;
		}

		function sell() {
			cashX(cost, "slaveTransfer");
			return `When ${he} arrives, ${he} is lead directly to your penthouse for enslavement. ${He} wears an expression of avid wonder as ${he} takes in the sights and sounds of the magnificent beast that is the new society taking shape in ${V.arcologies[0].name}. The purchaser's agent's bag slipping over ${his} head, however, sours ${his} mood. Mustering all of ${his} strength, ${he} breaks into a run, collides with the now closed door, and collapses into a heap, leaving the swearing agent to carry ${him} off.`;
		}
	}
};


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 = [];
		V.nextLink = "RIE Eligibility Check";
		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 = [];
		V.nextLink = "RIE Eligibility Check";
		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}.`;
		}
	}
};