code:
App.Events.recImmigrant = class recImmigrant extends App.Events.BaseEvent {
	constructor(actors, params) {
		super(actors, params);
	}

	eventPrerequisites() {
		return [
			() => ((V.rep/250) > random(1, 100)) || (V.debugMode > 0 && V.debugModeEventSelection > 0)
		];
	}

	get eventName() {
		return "Immigrant";
	}

	execute(node) {
		const slave = makeSlave();
		const {
			He,
			he, his, him
		} = getPronouns(slave);
		let r = [];

		r.push(`Your desk flags a video message as having potential. It's a desperate refugee from outside the Free Cities, begging you to pay ${his} steep immigration fees. ${He} promises to pay you back with interest. ${He} clearly isn't too well informed; the fees are so high that if you lend ${him} the money so ${he} can immigrate, you'll be able to call ${his} debt in and enslave ${him} immediately.`);

		App.Events.addParagraph(node, r);
		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		const responses = [];
		if (V.cash >= contractCost) {
			responses.push(new App.Events.Result(`Enslave ${him}`, enslave));
		} else {
			responses.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}`));
		}
		responses.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));

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

		App.Events.addResponses(node, responses);

		function enslave() {
			const el = new DocumentFragment();
			let r = [];
			cashX(forceNeg(contractCost), "slaveTransfer", slave);
			r.push(`${He} comes immediately from the immigration center to your arcology. You patiently explain the realities of the situation to ${him}. ${He} isn't too bright and it takes a while for things to sink in. The scanners finally do it, though. ${He} sobs as the biometric scanners scrupulously record ${his} every particular as belonging not to a person but to a piece of human property. ${He} tries to resist placing ${his} biometric signature in testament to the truth of ${his} debt, but when you observe that the alternative is death, ${he} complies. The process is completed with a distinct anticlimax: ${he} is one of your slaves now.`);
			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addNode(el, r);
			return el;
		}

		function sell() {
			const el = new DocumentFragment();
			let r = [];
			cashX(cost, "slaveTransfer");
			r.push(`${He} comes immediately from the immigration center to your arcology. You patiently explain the realities of the situation to ${him}. ${He} isn't too bright and it takes a while for things to sink in. The scanners finally do it, though. ${He} sobs as the biometric scanners scrupulously record ${his} every particular as belonging not to a person but to a piece of human property. ${He} tries to resist placing ${his} biometric signature in testament to the truth of ${his} debt, but when you observe that the alternative is death, ${he} complies. You add that ${he}'s already been purchased by a brothel, and would be well advised to keep obeying. ${He} breaks down entirely at this.`);
			App.Events.addNode(el, r);
			return el;
		}

		function makeSlave() {
			const slave = GenerateNewSlave(null, {race: "nonslave"});
			generateSalonModifications(slave);
			slave.origin = "$He sold $himself into slavery to pay $his immigration costs.";
			slave.devotion = random(-45, -25);
			slave.trust = random(-15, 0);
			return slave;
		}
	}
};


code:
App.Events.recMaleDebtor = class recMaleDebtor extends App.Events.BaseEvent {
	constructor(actors, params) {
		super(actors, params);
	}

	eventPrerequisites() {
		return [
			() => V.seeDicks !== 0
		];
	}

	get eventName() {
		return "Male Debtor";
	}

	execute(node) {
		const slave = makeSlave();
		const {He, he, him, himself} = getPronouns(slave);
		let r = [];

		r.push(`One of the tenants in your arcology has not paid rent in some time. In the Free Cities, debtors may be enslaved once their debt reaches a fair price for their enslavement. Your tenant has reached this point. ${He} comes to see you, despondent. ${He} is male for the moment, but enslavement will change that status, if only by a technicality. More concrete feminization will be up to you.`);

		App.Events.addParagraph(node, r);
		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		const responses = [];
		if (V.cash >= contractCost) {
			responses.push(new App.Events.Result(`Enslave ${him}`, enslave));
		} else {
			responses.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}`));
		}
		responses.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));

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

		App.Events.addResponses(node, responses);

		function enslave() {
			const el = new DocumentFragment();
			let r = [];
			cashX(forceNeg(contractCost), "slaveTransfer", slave);
			r.push(`Once you begin the enslavement process, you, your personal assistant, and the forms you're filling out all begin to refer to the slave using female pronouns. ${He} is clearly tormented, and only barely manages to hold ${himself} together for the moment, but is on the verge of breaking down.`);
			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addNode(el, r);
			return el;
		}

		function sell() {
			const el = new DocumentFragment();
			let r = [];
			cashX(cost, "slaveTransfer");
			r.push(`Once you begin the enslavement process, you, your personal assistant, and the forms you're filling out all begin to refer to the slave using female pronouns. ${He} is clearly tormented, and only barely manages to hold ${himself} together for the moment, but is on the verge of breaking down. When a purchasing agent appears, ${he} loses it entirely, and the agent is obliged to drag ${him} away.`);
			App.Events.addNode(el, r);
			return el;
		}

		function makeSlave() {
			const slave = GenerateNewSlave("XY", {minAge: 15, maxAge: 30, disableDisability: 1, race: "nonslave"});
			slave.origin = "You turned $him into a slave $girl after $he fell into debt to you.";
			slave.devotion = random(-45, -25);
			slave.trust = random(-15, 0);
			slave.anus = 0;
			slave.skill.anal = 0;
			slave.skill.oral = 0;
			slave.skill.whoring = 0;
			slave.hStyle = "neat";
			slave.hLength = random(1, 9);
			return slave;
		}
	}
};

repo_name: DontAskDontTell/fc

license: mit


code:
App.Events.recMaleRecruit = class recMaleRecruit extends App.Events.BaseEvent {
	constructor(actors, params) {
		super(actors, params);
	}

	eventPrerequisites() {
		return [
			() => V.seeDicks > 0,
			() => !!S.HeadGirl,
			() => S.HeadGirl.devotion > 50,
			() => S.HeadGirl.dick > 0,
		];
	}

	get eventName() {
		return "Male Recruit";
	}

	execute(node) {
		const slave = makeSlave();
		const {He, His,
			he, his, him, himself} = getPronouns(slave);
		const {title: Master} = getEnunciation(slave);
		const {he2, him2} = getPronouns(S.HeadGirl || {pronoun: 1}).appendSuffix("2");
		const title = (V.PC.title !== 0) ? `Sir` : `Ma'am`;
		let r = [];
		r.push(`Your Head Girl sends you a discreet message that ${he2} may have found a slave for you. ${S.HeadGirl.slaveName} duly ushers an androgynous young person into your office. ${He}'s dressed as a girl and acts like one. ${He} looks very young, like a dissolute party girl. ${He} bites ${his} lip nervously when ${he} sees you, and looks to ${S.HeadGirl.slaveName} for guidance. ${S.HeadGirl.slaveName} nods at ${him} reassuringly, so ${he} explains ${himself}.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(Spoken(slave, `"${title}, my name is ${slave.slaveName}. I'm, um, bored, I guess. I go to clubs and get drunk and fuck guys and it's just kinda boring. I thought it would be different when I turned ${num(slave.actualAge)}, but that was a couple months ago and, well, nothing's different. I saw ${S.HeadGirl.slaveName} and ${he2} was just so beautiful and has a dick like me and ${he2} seemed so confident in what ${he2} was doing and who he was and I talked to ${him2} and ${he} said ${he2} was your Head Girl and... I want to be like ${him2}. Can I be your slave? I'd be good, I'm good at sucking dicks and stuff."`));
		App.Events.addParagraph(node, r);

		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		const responses = [];
		if (V.cash >= contractCost) {
			responses.push(new App.Events.Result(`Enslave ${him}`, enslave));
		} else {
			responses.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}`));
		}
		responses.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));

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

		App.Events.addResponses(node, responses);

		function enslave() {
			const el = new DocumentFragment();
			let r = [];
			cashX(forceNeg(contractCost), "slaveTransfer", slave);
			r.push(`You complete the legalities and biometric scanning quickly and without fuss. ${slave.slaveName} bounces nervously on ${his} heels. Finally ${he} works up ${his} courage and asks,`);
			if (App.Data.clothes.get(S.HeadGirl.clothes).exposure <= 3) {
				r.push(Spoken(slave, `"Can I have ${S.HeadGirl.clothes} like ${S.HeadGirl.slaveName}?"`));
			} else {
				r.push(Spoken(slave, `"Can I work with ${S.HeadGirl.slaveName}?"`));
			}
			r.push(`Your sternly tell ${him} to call you ${properMaster()}, to ask questions only with permission, and to strip. ${He} looks at ${S.HeadGirl.slaveName}, but ${S.HeadGirl.slaveName} returns ${his} look with no compassion at all and tells ${him} to do what you say. Looking suddenly fearful, ${slave.slaveName} strips. ${His} cock is totally flaccid as ${he} looks at the floor, shivering. Once your inspection of ${his} body reaches ${his} anus, ${he} becomes suddenly nervous.`);
			r.push(Spoken(slave, `"A-am I going to have t-to do butt stuff, ${Master}?"`));
			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addNode(el, r);
			return el;
		}

		function sell() {
			const el = new DocumentFragment();
			let r = [];
			cashX(cost, "slaveTransfer");
			r.push(`You complete the legalities and biometric scanning quickly and without fuss. ${slave.slaveName} bounces nervously on ${his} heels. Finally ${he} works up ${his} courage and asks,`);
			if (App.Data.clothes.get(S.HeadGirl.clothes).exposure <= 3) {
				r.push(Spoken(slave, `"Can I have ${S.HeadGirl.clothes} like ${S.HeadGirl.slaveName}?"`));
			} else {
				r.push(Spoken(slave, `"Can I work with ${S.HeadGirl.slaveName}?"`));
			}
			r.push(`Your answer appears in the form of a purchasing agent, here to take ${him} away. As he restrains the disbelieving bitch, you tell ${him} ${he}'s been purchased by a brothel, so ${he}'s going to be fucked about 70,000 times before ${he} gets to be too old and is retired, so ${he} can be sure ${he} won't be bored. ${He} releases a wail of utter despair, quickly cut off by a sturdy bag being fastened over ${his} head.`);
			App.Events.addNode(el, r);
			return el;
		}

		function makeSlave() {
			const pram = new GenerateNewSlavePram();
			pram.minAge = (V.pedo_mode === 1 ? 11 : 16);
			pram.maxAge = 19;
			pram.ageOverridesPedoMode = 1;
			pram.disableDisability = 1;
			pram.race = "nonslave";
			const slave = GenerateNewSlave("XY", pram);
			slave.origin = "$He offered $himself to you as a slave to escape a life of boredom.";
			slave.career = "a party girl";
			slave.birthWeek = random(8, 16);
			slave.devotion = random(25, 45);
			slave.trust = random(25, 45);
			setHealth(slave, jsRandom(0, 20), undefined, undefined, undefined, 0);
			slave.anus = 0;
			slave.skill.oral = 15;
			slave.skill.anal = 0;
			slave.piercing.ear.weight = 1;
			slave.piercing.nose.weight = 1;
			slave.piercing.eyebrow.weight = 1;
			slave.piercing.navel.weight = 1;
			slave.behavioralFlaw = "arrogant";
			generateSalonModifications(slave);
			slave.hStyle = "fashionable for a Free Cities trap, long, with the right half shaved";
			slave.pubicHStyle = "waxed";
			slave.underArmHStyle = "waxed";
			return slave;
		}
	}
};


code:
App.Events.recMaleSD = class recMaleSD extends App.Events.BaseEvent {
	constructor(actors, params) {
		super(actors, params);
	}

	eventPrerequisites() {
		return [
			() => V.seeDicks !== 0,
		];
	}

	get eventName() {
		return "Male Sold Debt";
	}

	execute(node) {
		const slave = makeSlave();
		const {
			He, His,
			he, his, him
		} = getPronouns(slave);
		let r = [];

		r.push(`Your desk flags a report of the arcology security service for your immediate attention. As it turns out, a number of pretty liberal students from`);
		if (slave.actualAge >= 18) {
			r.push(`a college`);
		} else if (slave.actualAge >= 14) {
			r.push(`a high school`);
		} else if (slave.actualAge >= 11) {
			r.push(`a junior high school`);
		} else {
			r.push(`an elementary school`);
		}
		r.push(`in your arcology led a protest earlier today in the financial district several levels up from their institution. Seems to have been against slavery, for environmentalism, or some other nonsense that you skip over reading. The really interesting thing is what happened during the protest anyways. Things became a bit unruly between protesters and some counter-protesters — and at some point rocks started to fly... all of which would barely be worth a mention, if the vintage sports car of a prominent resident hadn't been parked on the same street.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`One dented hood and smashed windshield later, someone was in big trouble. The ever-present camera surveillance in your arcology made it easy to track the rock to the hand of the person who threw it — a good-looking young man, well-muscled too, who immediately got arrested and is awaiting sentencing in the lock-up right now. The video of ${him} getting booked — complete with a thorough strip-search (since all the officers agreed ${he} 'had to be hiding something') does make you think about the potential this guy would have as a slave with some training, and maybe a little surgical work to improve ${his} femininity.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`Given the damage to an expensive classic car and the meager balance of ${his} bank accounts, this student is definitively up for enslavement. There's no way ${he} or even anyone related to ${him} could come up with the cash. All of which leaves you with an opportunity... the car's owner hasn't seen the arrested student yet, so you could conceivably approach him and buy the debt for this young buck off him. Better be quick, or the owner might just choose to keep such a promising slave himself.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(App.UI.DOM.makeElement("span", `${His} debt will cost ${cashFormat(5000)} to pay off, with the usual ${cashFormat(1000)} in registration fees, and the option to make a satisfactory dickgirl out of ${him} afterward. Alternatively, you could buy ${him} and after just a little work with the remote surgery sell a newly made dickgirl.`, "note"));

		App.Events.addParagraph(node, r);
		const contractCost = 6000;
		const cost = slaveCost(slave) - contractCost;
		const responses = [];
		if (V.cash >= contractCost) {
			responses.push(new App.Events.Result(`Enslave ${him}`, enslave));
			responses.push(new App.Events.Result(`Enslave ${him} and arrange immediate feminization surgery`, feminize));
		} else {
			responses.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}`));
		}
		responses.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));

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

		App.Events.addResponses(node, responses);

		function enslave() {
			const el = new DocumentFragment();
			let r = [];
			cashX(forceNeg(contractCost), "slaveTransfer", slave);
			r.push(`Contacting the wealthy resident, you apologize for his inconvenience and offer to 'deal with' the matter personally. He is content with not having the hassle and agrees with little thought, leaving you owning the debt of the unfortunate student. Making your way to the guard station where ${he} is being kept, you tell the young man ${he}'s getting out of jail right away. ${He} cooperates with having ${his} biometric readings taken and logged, only later realizing this isn't for a release, but to register ${him} as a slave. In shock and with tears in ${his} eyes, ${he} gets angry and tries to fight, only to be overwhelmed by your guards and dragged off to the slave quarters.`);
			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addNode(el, r);
			return el;
		}

		function feminize() {
			const node = new DocumentFragment();
			let r = [];
			cashX(forceNeg(contractCost), "slaveTransfer", slave);
			r.push(`Contacting the wealthy resident, you apologize for his inconvenience and offer to 'deal with' the matter personally. He is content with not having the hassle and agrees with little thought, leaving you owning the debt of the unfortunate student. Making your way to the guard station where he is being kept, you tell the young man ${he}'s getting out of jail right away. ${He} cooperates with having his biometric readings taken and logged, only later realizing this isn't for a release, but to register ${him} as a slave. In shock and with tears in ${his} eyes, ${he} gets angry and tries to fight, only to be overwhelmed by your guards and dragged off to the remote surgery. It doesn't take long at all to add a pretty dickgirl to your slave quarters after that.`);
			slave.faceImplant = 15;
			slave.face = Math.clamp(slave.face + slave.faceImplant, -100, 100);
			slave.faceShape = "normal";
			surgeryDamage(slave, 10);
			slave.devotion = Math.clamp(slave.devotion - 5, -100, 100);
			slave.trust = Math.clamp(slave.trust - 10, -100, 100);
			App.Events.addNode(node, r);
			node.append(App.UI.newSlaveIntro(slave));
			return node;
		}

		function sell() {
			const el = new DocumentFragment();
			let r = [];
			cashX(cost, "slaveTransfer");
			r.push(`Contacting the wealthy resident, you apologize for his inconvenience and offer to 'deal with' the matter personally. He is content with not having the hassle and agrees with little thought, leaving you owning the debt of the unfortunate student. Making your way to the guard station where he is being kept, you tell the young man ${he}'s getting out of jail right away. ${He} cooperates with having ${his} biometric readings taken and logged, only later realizing this isn't for a release, but to register ${him} as a slave. In shock and with tears in ${his} eyes, ${he} gets angry and tries to fight, only to be overwhelmed by your guards and dragged off to the remote surgery. It doesn't take long at all before the student is transported to the office of the slave broker you sold ${him} to.`);
			App.Events.addNode(el, r);
			return el;
		}

		function makeSlave() {
			const slave = GenerateNewSlave("XY", {
				minAge: 13, maxAge: 20, disableDisability: 1, race: "nonslave"
			});
			generateSalonModifications(slave);
			slave.origin = "$He got into debt for damaging someone's property during a student protest and you bought out $his debt.";
			slave.devotion = random(-30, -5);
			slave.trust = random(-25, -5);
			setHealth(slave, jsRandom(20, 40), undefined, undefined, undefined, 10);
			slave.face = random(5, 45);
			slave.skill.vaginal = 0;
			slave.skill.anal = random(0, 40);
			slave.skill.oral = random(0, 40);
			slave.skill.whoring = 0;
			slave.boobs = 150;
			slave.vagina = -1;
			slave.labia = 0;
			slave.ovaries = 0;
			slave.preg = 0;
			slave.anus = random(0, 1);
			slave.dick = random(3, 5);
			slave.balls = random(2, 4);
			slave.scrotum = slave.balls;
			slave.weight = 0;
			slave.muscles = 50;
			slave.intelligence = random(15, 90);
			slave.intelligenceImplant = 15;
			slave.teeth = "normal";
			slave.career = "a student";
			slave.behavioralFlaw = "liberated";
			return slave;
		}
	}
};


code:
App.Events.recOrphanRebelliousFemale = class recOrphanRebelliousFemale extends App.Events.BaseEvent {
	constructor(actors, params) {
		super(actors, params);
	}

	eventPrerequisites() {
		return [
			() => V.seeDicks !== 100
		];
	}

	get eventName() {
		return "Orphan Rebellious Female";
	}

	execute(node) {
		const slave = makeSlave();
		const {he, his, him, woman} = getPronouns(slave);
		let r = [];

		r.push(`An invitation to a 'visitation day' at an orphanage in the arcology pops up in your in-box, prompting you to make some room in your schedule to go have a look. Run by a well-meaning non-profit organization active in numerous of the Free Cities, the facility does house quite a few orphans (both local and saved from the chaos of the old world), doing excellent work in teaching them and finding new homes. Still, with times being what they are, the people running things do have a... realistic outlook, in the end. And so, in order to keep the orphanage going, those living there who aren't adopted till they reach maturity are sold as slaves. Legally this practice is easily arranged, as the life-debt for any of the orphans builds up over the years, pretty much automatically putting them over the limit for enslavement.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`Knowing what's coming, the teachers in the facility do train their pupils accordingly and try to instill obedience and acceptance into those soon reaching eighteen years of age, but there are always those with whom the lessons don't quite take hold. The young ${woman} that catches your eye from among the newly of age orphans is such a case... from all accounts, ${he}'s rather headstrong and doesn't bend ${his} will to anyone really — for example having long lost ${his} virginities one way or another. Still, a young slave at a fairly low price could be worth the investment for anyone who likes breaking them in...`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(App.UI.DOM.makeElement("span", `A short discussion with an administrator establishes the young ${woman}'s asking price at ${cashFormat(1500)}.`, "note"));

		App.Events.addParagraph(node, r);

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

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

		function enslave() {
			const el = new DocumentFragment();
			let r = [];
			cashX(forceNeg(contractCost), "slaveTransfer", slave);
			r.push(`Transferring the money with a few clicks on your smartphone, you have your new acquisition brought to your penthouse. ${slave.slaveName} reacts sullenly to an order to strip, so the guardsmen's assistance is required to peel ${his} clothes off ${him}, followed by the young ${woman} sticking out ${his} tongue as ${he} is scanned and registered as your property.`);
			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addNode(el, r);
			return el;
		}

		function makeSlave() {
			const slave = GenerateNewSlave("XX", {
				minAge: 18,
				maxAge: 18,
				ageOverridesPedoMode: 1,
				disableDisability: 1
			});
			generateSalonModifications(slave);
			slave.origin = "$He was in an orphanage until reaching maturity, at which point $he was sold to you.";
			slave.devotion = random(-45, -25);
			slave.trust = random(-25, 0);
			setHealth(slave, jsRandom(10, 40), undefined, undefined, undefined, 0);
			slave.face = random(-30, 30);
			slave.skill.vaginal = 15;
			slave.skill.anal = 15;
			slave.skill.oral = 15;
			slave.skill.entertainment = 0;
			slave.skill.whoring = 15;
			slave.boobs = random(4, 8) * 100;
			slave.vagina = 1;
			slave.vaginaLube = 1;
			slave.labia = 2;
			slave.ovaries = 1;
			slave.pubicHStyle = "waxed";
			slave.underArmHStyle = "waxed";
			slave.hips = random(-1, 2);
			slave.butt = random(1, 3);
			slave.anus = 1;
			slave.weight = random(-80, 20);
			slave.muscles = random(0, 40);
			slave.shoulders = random(-1, 2);
			slave.intelligence = random(-50, 50);
			slave.career = "an orphan";
			slave.fetish = "pregnancy";
			slave.behavioralFlaw = either("bitchy", "hates men", "hates women");
			slave.sexualFlaw = either("apathetic", "crude", "hates anal", "hates oral", "judgemental");
			return slave;
		}
	}
};


code:
App.Events.recOverwhelmedFarmgirl = class recOverwhelmedFarmgirl extends App.Events.BaseEvent {
	constructor(actors, params) {
		super(actors, params);
	}

	eventPrerequisites() {
		return [
			() => V.seeDicks !== 100,
			() => V.seePreg !== 0,
			() => V.seeHyperPreg === 1,
			() => (V.debugMode > 0 && V.debugModeEventSelection > 0),
		];
	}

	get eventName() {
		return "Overwhelmed Farmgirl";
	}

	execute(node) {
		const slave = makeSlave();
		const {He, His,
			he, his, him, girl} = getPronouns(slave);
		const title = (V.PC.title !== 0) ? `Sir` : `Ma'am`;
		let r = [];

		r.push(`Your desk flags a video message as having potential. It's a rather homely farmer begging for you to enslave ${him}, not truly unusual given the ever-increasing droughts and dangerous weather patterns. Given the huge stomach rounding out ${his} worn clothing, ${he} is likely ready to drop quints and desperately seeking any sort of future for them. You allow ${him} to speak ${his} plea.`);
		r.push(Spoken(slave, `"Please ${title.toLowerCase()}, I just can't go on out here. I'm always hungry and can barely even work with this belly in the way. I swear, it gets heavier every day and a life of physical labor just won't let me get by. I don't know what I'll do if you say no, so please, have mercy on a poor farmer."`));

		App.Events.addParagraph(node, r);
		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		const responses = [];
		if (V.cash >= contractCost) {
			responses.push(new App.Events.Result(`Enslave ${him}`, enslave));
		} else {
			responses.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}`));
		}
		responses.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));

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

		App.Events.addResponses(node, responses);

		function enslave() {
			const el = new DocumentFragment();
			let r = [];
			cashX(forceNeg(contractCost), "slaveTransfer", slave);
			r.push(`${He} barely manages to waddle into your penthouse before crashing onto your couch with permission. ${He} willingly places ${his} biometric signature in testament to the truth of ${his} voluntary enslavement. ${He} looks almost relieved.`);
			r.push(Spoken(slave, `"I traded my virginity for bread and look what it got me. I'm so glad you took me in, I don't know how I would have carried on in a few months, I mean look at me."`));
			r.push(`${He} gestures to ${his} gravid bulge. 'A few months'? You probe further.`);
			r.push(Spoken(slave, `"Huh? Oh, yes... I'm only four months along... You can see why I needed this now, right? I'm bigger than every other girl I've ever seen and I'm not even halfway there. You saved my life, even if you, um, get rid of them, you still saved me. So thank you."`));
			r.push(`You can't believe what you are hearing, but a quick sonogram confirms it. Both you and ${him} stare in shock at the sheer number of children growing in ${his} womb. A rough estimate places their count at a staggering one-hundred-and-fifty.`);
			r.push(Spoken(slave, `"...No way... There can't be that many in me..."`));
			slave.geneticQuirks.fertility = 2;
			slave.geneticQuirks.hyperFertility = 2;
			slave.preg = 16;
			slave.pregType = 150;
			slave.pregWeek = slave.preg;
			SetBellySize(slave);
			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addNode(el, r);
			return el;
		}

		function sell() {
			const el = new DocumentFragment();
			let r = [];
			cashX(cost, "slaveTransfer");
			r.push(`${He} barely manages to waddle into your penthouse before asking to have a seat on your couch. You decline, since ${he} is clearly so skilled at carrying children, ${he} will spend the rest of ${his} enslavement as a volume breeder. ${His} gaze falls to the floor, this at least means ${he}'ll be fed and get to have ${his} children. ${He} cooperates to having ${his} biometric readings taken and logged, before being seated in a wheelchair and taken to ${his} new home.`);
			r.push(`Hours later, you receive a brief message from the facility that purchased ${him}. "150. One hundred and fifty babies. That is how many are crammed into that ${girl}. ${He} was a mere sixteen weeks along. If ${he} lives through this, we may have a record breaking breeder on our hands. Felt the need to pass that along, you might have made us quite a profit this year."`);
			App.Events.addNode(el, r);
			return el;
		}

		function makeSlave() {
			const slave = GenerateNewSlave("XX", {
				minAge: 16, maxAge: 24,
				ageOverridesPedoMode: 1, disableDisability: 1
			});
			slave.origin = "$He sold $himself into slavery to feed $himself and $his growing brood.";
			slave.career = "a farm laborer";
			generateSalonModifications(slave);
			setHealth(slave, jsRandom(-35, 10), -1, -1, -1, 50);
			slave.devotion = random(35, 45);
			slave.trust = random(15, 25);
			slave.oldDevotion = slave.devotion;
			slave.preg = 40;
			slave.pregType = 5;
			slave.pregKnown = 1;
			slave.pregWeek = slave.preg;
			slave.belly = 80000;
			slave.bellyPreg = 80000; // bait and switch!
			slave.pregAdaptation = 750;
			slave.ovaries = 1;
			slave.face = -15;
			slave.vagina = 1;
			slave.anus = 0;
			slave.weight = random(-80, -50);
			slave.muscles = 20;
			slave.underArmHStyle = "bushy";
			slave.pubicHStyle = "bushy";
			slave.boobs = 700;
			slave.boobShape = "torpedo-shaped";
			slave.nipples = "puffy";
			slave.lactation = 1;
			slave.lactationDuration = 2;
			slave.vaginaLube = 1;
			slave.butt = 3;
			slave.sexualQuirk = "caring";
			slave.bellySag = 20;
			slave.bellySagPreg = 20;
			slave.pubertyXX = 1;
			slave.waist = 5;
			if (slave.accent > 2) {
				slave.accent = 2;
			}
			return slave;
		}
	}
};


code:
App.Events.recPrincelyBetrayal = class recPrincelyBetrayal extends App.Events.BaseEvent {
	constructor(actors, params) {
		super(actors, params);
	}

	eventPrerequisites() {
		return [
			() => V.seeDicks !== 0,
			() => V.rep > 16000,
			() => ((random(1, 100) < V.rep/1000) || (V.debugMode > 0 && V.debugModeEventSelection > 0)),
			() => V.cash >= 100000
		];
	}

	get eventName() {
		return "Princely Betrayal";
	}

	execute(node) {
		const slave = makeSlave();
		const {
			he, his, him, sister
		} = getPronouns(slave);
		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		let r = [];

		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, are lucrative deals with powerful individuals.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`This call is coming from a public kiosk, which is usually an indication that the person on the other end is a transient individual who has decided to take slavery over homelessness and not someone of high society. This call, as you would expect, is different. The moment the person on the other end introduces themselves you immediately recognize why your assistant brought this to your attention. The caller is the prince of an old world kingdom, contacting you by an untraceable means due of the conspiratorial nature of his proposal.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`He explains that he is the younger of two princes, and is about to carry out a plan to poison his father and take the throne for himself. However, his older ${sister} is standing in the way of his plan simply by virtue of being next in line for the throne. He sees selling his ${sister} to you as a more humane method of disposing of ${him}, not wanting to have to kill any more family than he has to. It doesn't hurt that he stands to make a lot of money either.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(App.UI.DOM.makeElement("span", `His offer stands at a firm ${cashFormat(100000)}, but you've seen his ${sister}; you stand to gain quite the addition to your chattel should you take the offer.`, "note"));

		App.Events.addParagraph(node, r);

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

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

		function enslave() {
			const el = new DocumentFragment();
			let r = [];
			cashX(forceNeg(contractCost), "slaveTransfer", slave);
			r.push(`You agree to purchase the prince and wire the money. The next day, a rather expensive-looking VTOL comes and drops off an angry slave wearing fine clothing and a pair of shackles on each set of limbs. Despite ${his} bindings, ${he} puts up quite the fight before the legalities and biometric scanning are complete.`);
			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addNode(el, r);
			return el;
		}

		function makeSlave() {
			const slave = GenerateNewSlave("XY", {
				minAge: (V.pedo_mode === 1 ? 16 : 20),
				maxAge: (V.pedo_mode === 1 ? 20 : 35),
				ageOverridesPedoMode: 1, disableDisability: 1
			});
			slave.face = random(80, 100);
			slave.intelligence = random(60, 100);
			slave.intelligenceImplant = 30;
			slave.origin = "You purchased $him in order to pave the way for $his brother to take the throne.";
			slave.career = "a prince";
			slave.prestige = 2;
			slave.prestigeDesc = "$He was once the crown prince of an old world kingdom up until you aided $his brother in making $him 'disappear'.";
			slave.teeth = "normal";
			slave.devotion = random(-100, -90);
			slave.trust = random(25, 85);
			setHealth(slave, jsRandom(0, 20), undefined, undefined, 0, 0);
			slave.weight = random(-10, 10);
			slave.muscles = random(10, 40);
			slave.anus = 0;
			slave.balls = Math.max(slave.balls, 2);
			slave.scrotum = slave.balls;
			slave.boobs = 100;
			slave.skill.oral = 0;
			slave.skill.anal = 0;
			slave.skill.whoring = 0;
			slave.skill.entertainment = random(5, 9) * 5;
			slave.behavioralFlaw = "arrogant";
			slave.hStyle = "luxurious";
			slave.hLength = 2;
			slave.pubicHStyle = "waxed";
			slave.underArmHStyle = "waxed";
			slave.accent = 0;
			slave.canRecruit = 0;
			return slave;
		}
	}
};


code:
App.Events.recRepoHousekeeper = class recRepoHousekeeper extends App.Events.BaseEvent {
	constructor(actors, params) {
		super(actors, params);
	}

	eventPrerequisites() {
		return [
			() => V.seeDicks !== 100
		];
	}

	get eventName() {
		return "Repo Housekeeper";
	}

	execute(node) {
		const slave = makeSlave();
		const {He, he, his, him, girl, woman} = getPronouns(slave);
		const {title: Master} = getEnunciation(slave);
		let r = [];

		r.push(`Coming to your desk in the morning, you see that your assistant has flagged an interesting offer for you to check out in the newsletter of a professional repossession company. Life in the Free Cities being what it is, there are winners and losers of the ever-changing local and global realities... and when someone falls upon hard times, the repo-men and repo-women start their work. Grim-faced and unmoved by sympathy, they go in to seize the debtor's assets to pay off their debts — which does at times include some quite interesting pieces of merchandise, like a nice slave or two.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`The current sale offer by the company was taken from a college frat-house — apparently being enrolled at a rather prestigious university in your arcology doesn't mean that the guys know their asses from their elbows in money-management. A few too many parties and frivolous purchases sent an asset reclamation officer to their door, soon leaving with one of those recent purchases — a pretty female slave who doubled as both a housekeeper and fuckhole for the whole bunch of horny students. ${He}'s cute and apparently well-trained, if a bit exhausted right now after the numerous gangbangs ${his} former owners put ${him} through.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(App.UI.DOM.makeElement("span", `The repo-company doesn't hold on to assets long, they just want to get new cash pretty quickly — which makes this a nice opportunity, as the price for the young ${woman} is set pretty low. It'll just take ${cashFormat(2500)} to buy ${him} off their hands.`, "note"));

		App.Events.addParagraph(node, r);

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

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

		function enslave() {
			const el = new DocumentFragment();
			let r = [];
			cashX(forceNeg(contractCost), "slaveTransfer", slave);
			r.push(`With a few keystrokes, you wire the payment to the repo company, then wait for ${his} delivery. After being brought into your penthouse by security, the legalities and biometric scanning with ${him} are taken care off fairly quickly and without fuss. Stepping towards you after the chime announcing a successful registration as your property, ${slave.slaveName} lowers ${his} head obediently and asks,`);
			r.push(Spoken(slave, `"${Master}, what will my new tasks in your household be? Shall I just clean or will there be... other things for me to do?"`));
			r.push(`The eager tremble in ${his} voice tells you that ${he}'s more than a little aroused by the thought of being used, so you tell ${him} it'll all depend on if ${he}'s a good ${girl}...`);
			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addNode(el, r);
			return el;
		}

		function makeSlave() {
			const slave = GenerateNewSlave("XX", {minAge: 18, maxAge: 23, disableDisability: 1});
			generateSalonModifications(slave);
			slave.origin = "$He was the housekeeper and fucktoy of a frat house before being collected by repo-men and sold to you.";
			slave.devotion = random(25, 50);
			slave.trust = random(25, 50);
			setHealth(slave, jsRandom(30, 60), undefined, undefined, 0, 10);
			slave.face = random(0, 60);
			slave.skill.vaginal = 15;
			slave.skill.anal = 15;
			slave.skill.oral = 15;
			slave.skill.entertainment = 15;
			slave.skill.whoring = 15;
			slave.boobs = random(3, 8) * 100;
			slave.vagina = random(1, 2);
			slave.vaginaLube = 1;
			slave.labia = 1;
			slave.ovaries = 1;
			slave.preg = -1;
			slave.pubicHStyle = "waxed";
			slave.underArmHStyle = "waxed";
			slave.hips = random(-1, 0);
			slave.butt = 0;
			slave.anus = random(1, 2);
			slave.weight = random(-50, 0);
			slave.muscles = random(0, 15);
			slave.shoulders = random(-1, 1);
			slave.intelligence = random(-50, 50);
			slave.career = "a slave";
			slave.fetish = "submissive";
			slave.behavioralQuirk = "insecure";
			slave.sexualQuirk = "caring";
			return slave;
		}
	}
};


code:
App.Events.recRepoMilfHousekeeper = class recRepoMilfHousekeeper extends App.Events.BaseEvent {
	constructor(actors, params) {
		super(actors, params);
	}

	eventPrerequisites() {
		return [
			() => V.seeDicks !== 100
		];
	}

	get eventName() {
		return "Repo MILF Housekeeper";
	}

	execute(node) {
		const slave = makeSlave();
		const {He, he, his, him, woman} = getPronouns(slave);
		const {title: Master} = getEnunciation(slave);
		let r = [];

		r.push(`Coming to your desk in the morning, you see that your assistant has flagged an interesting offer for you to check out in the newsletter of a local university. Life in the Free Cities being what it is, there are winners and losers of the ever-changing local and global realities. In a novel change of pace, it seems this offer comes from one of the Free Cities' rare winners.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`The current sale offer comes from one of the arcology's oldest college frat-houses — apparently a wealthy alumnus of the fraternity has bestowed a significant donation on the current brothers of the frat house. A few visits to the slave market later, the frat house is practically flush with fresh, nubile, slavegirls. Yet, all these new slaves have left little room for one of the frat house's oldest fixtures — an older female slave who doubled as both a housekeeper and fuckhole for a few generations of horny students. ${He}'s pretty and has been well-trained over the years, if a bit exhausted from ${his} decades of serving as a sexual outlet to a house of frat brothers.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(App.UI.DOM.makeElement("span", `The brothers don't want to hold onto ${him} for long, having already been entranced by their multitude of new purchases — which makes this a nice opportunity, as the price for the middle-aged ${woman} is set pretty low. It'll just take ${cashFormat(2500)} to buy ${him} off their hands.`, "note"));

		App.Events.addParagraph(node, r);

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

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

		function enslave() {
			const el = new DocumentFragment();
			let r = [];
			cashX(forceNeg(contractCost), "slaveTransfer", slave);
			r.push(`With a few keystrokes, you wire the payment to the frat house, then wait for ${his} delivery. After being brought into your penthouse by security, the legalities and biometric scanning with ${him} are taken care off fairly quickly and without fuss. Stepping towards you after the chime announcing a successful registration as your property, ${slave.slaveName} lowers ${his} head obediently and asks,`);
			r.push(Spoken(slave, `"${Master}, what will my new tasks in your household be? Shall I just clean or will there be... other things for me to do?"`));
			r.push(`The eager tremble in ${his} voice tells you that ${he}'s more than a little aroused by the thought of being used, so you tell ${him} it'll all depend on if ${he}'s a good MILF.`);
			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addNode(el, r);
			return el;
		}

		function makeSlave() {
			const slave = GenerateNewSlave(null, {
				minAge: 35, maxAge: 43,
				ageOverridesPedoMode: 1, disableDisability: 1
			});
			slave.origin = "$He was the housekeeper and fucktoy of a frat house before being replaced in favor of fresher slaves and sold to you.";
			slave.devotion = random(25, 50);
			slave.trust = random(25, 50);
			setHealth(slave, jsRandom(30, 60), undefined, undefined, 0, 20);
			slave.face = random(0, 60);
			slave.skill.vaginal = 15;
			slave.skill.anal = 25;
			slave.skill.oral = 25;
			slave.skill.entertainment = 25;
			slave.skill.whoring = 25;
			slave.boobs = random(3, 8) * 100;
			slave.vagina = random(1, 2);
			slave.vaginaLube = 1;
			slave.labia = 1;
			slave.ovaries = 1;
			slave.preg = -1;
			slave.hips = random(-1, 0);
			slave.butt = 0;
			slave.anus = random(1, 2);
			slave.weight = random(-50, 0);
			slave.muscles = random(0, 15);
			slave.shoulders = random(-1, 1);
			slave.intelligence = random(-50, 50);
			slave.career = "a slave";
			slave.fetish = "submissive";
			slave.behavioralQuirk = "insecure";
			slave.sexualQuirk = "caring";
			return slave;
		}
	}
};


code:
App.Events.recRepoNanny = class recRepoNanny extends App.Events.BaseEvent {
	constructor(actors, params) {
		super(actors, params);
	}

	eventPrerequisites() {
		return [
			() => V.seeDicks !== 100
		];
	}

	get eventName() {
		return "Repo Nanny";
	}

	execute(node) {
		const slave = makeSlave();
		const {he, his, him, woman} = getPronouns(slave);
		const {title: Master} = getEnunciation(slave);
		let r = [];

		r.push(`Coming to your desk in the morning, you see that your assistant has flagged an interesting offer for you to check out in the newsletter of a professional repossession company. Life in the Free Cities being what it is, there are winners and losers of the ever-changing local and global realities... and when someone falls upon hard times, the repo-men and repo-women start their work. Grim-faced and unmoved by sympathy, they go in to seize the debtor's assets to pay off their debts — which does at times include some quite interesting pieces of merchandise, like a nice slave or two.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`The current sale offer by the company was taken from a businesswoman's apartment — one of the higher income strata of the arcology, she's recently had fortune turn from her due to some unfortunate occurrences outside your demesne of the Free Cities. The file doesn't say exactly which — some natural catastrophe, raiders, competing business or whatnot — one thing is for sure though, she's in a financial pinch right now. All of which meant that her slave nanny was fair game to be taken and is now awaiting re-sale. As ${his} mistress never had any sexual interest in the slave, the young ${woman} is actually a virgin and used to the relatively cushy life of just watching children. The fact that all of that ended from one day to the next has made ${him} quite afraid for ${his} future...`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(App.UI.DOM.makeElement("span", `The repo-company doesn't hold on to assets long, they just want to get new cash pretty quickly — which makes this a nice opportunity, as the price for the young ${woman} is set pretty low. It'll just take ${cashFormat(2500)} to buy ${him} off their hands.`, "note"));

		App.Events.addParagraph(node, r);

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

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

		function enslave() {
			const el = new DocumentFragment();
			let r = [];
			cashX(forceNeg(contractCost), "slaveTransfer", slave);
			r.push(`With a few keystrokes, you wire the payment to the repo company, then wait for ${his} delivery. After being brought into your penthouse by security, the legalities and biometric scanning with ${him} are taken care off fairly quickly and without fuss. Stepping towards you after the chime announcing a successful registration as your property, ${slave.slaveName} lowers ${his} head obediently and asks,`);
			r.push(Spoken(slave, `"${Master}, I — umm... what will be required of me? I'm really good with children and... and I can sing. Also, I've —"`));
			r.push(`The fearful tremble in ${his} voice tells you that ${he}'s more than a little afraid of what you might have planned for ${him}. Waving off the slave's frightened babbling, you tell ${him} that you'll decide what to do with ${him} when you feel like it.`);
			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addNode(el, r);
			return el;
		}

		function makeSlave() {
			const slave = GenerateNewSlave("XX", {minAge: 20, maxAge: 25, disableDisability: 1});
			slave.origin = "$He was a nanny before being sold to you.";
			slave.devotion = random(25, 50);
			slave.trust = random(-50, -25);
			setHealth(slave, jsRandom(30, 60), undefined, undefined, 0, 20);
			slave.face = random(0, 60);
			slave.skill.vaginal = 0;
			slave.skill.anal = 0;
			slave.skill.oral = 0;
			slave.skill.entertainment = random(15, 40);
			slave.skill.whoring = 0;
			slave.boobs = random(3, 8) * 100;
			slave.vagina = 0;
			slave.vaginaLube = 1;
			slave.labia = 1;
			slave.ovaries = 1;
			slave.preg = -1;
			slave.pubicHStyle = "waxed";
			slave.underArmHStyle = "waxed";
			slave.hips = random(-1, 0);
			slave.butt = 0;
			slave.anus = 0;
			slave.weight = random(-80, 20);
			slave.muscles = random(0, 15);
			slave.shoulders = random(-1, 1);
			slave.intelligence = random(-50, 50);
			slave.career = "a nanny";
			slave.fetish = "submissive";
			slave.behavioralQuirk = "adores women";
			slave.sexualQuirk = "caring";
			return slave;
		}
	}
};


code:
App.Events.recRogueCyborg = class recRogueCyborg extends App.Events.BaseEvent {
	constructor(actors, params) {
		super(actors, params);
	}

	eventPrerequisites() {
		return [
			() => V.seeDicks !== 100,
			() => V.PC.skill.hacking >= 100,
			() => (random(0, 100) > 95) || (V.debugMode > 0 && V.debugModeEventSelection > 0),
			() => V.cash >= 100000
		];
	}

	get eventName() {
		return "Rogue Cyborg";
	}

	execute(node) {
		const slave = makeSlave();
		const {him, loli} = getPronouns(slave);
		let r = [];

		r.push(`While digging through the highest security and clearance level database of a powerful old government for anything of value, you discover the existence of an ultra top secret project to develop the most powerful and effective child cyborg ever created. The entire notion is absurd, but it seems they succeeded in creating something. During field testing it was discovered that it retained far too much humanity, resulting in the death of its handler. Unsure of what to do with the project, it has been placed on ice in the bowels of a black site. With a few simple commands, you could release it and order it to your arcology.`);

		App.Events.addParagraph(node, r);

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

		const contractCost = 100000;
		const cost = slaveCost(slave) - contractCost + 300000; // Cyborg very expensive!
		const responses = [];
		if (V.cash >= contractCost) {
			responses.push(new App.Events.Result(`Enslave ${him}`, enslave));
		} else {
			responses.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}`));
		}
		responses.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));
		App.Events.addResponses(node, responses);

		function enslave() {
			const el = new DocumentFragment();
			let r = [];
			cashX(forceNeg(contractCost), "slaveTransfer", slave);
			r.push(`With your order received the target quickly seeks you out. After a huge sum of credits changes hands to render it penthouse safe, the legalities and biometric scanning are complete and you are now the proud owner of a cyber${loli}.`);
			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addNode(el, r);
			return el;
		}

		function sell() {
			const el = new DocumentFragment();
			let r = [];
			cashX(cost, "slaveTransfer");
			r.push(`With your order received the target quickly seeks you out. After a huge sum of credits changes hands to render it safe, the legalities and biometric scanning are complete and it is sold off to a very eager robophile.`);
			App.Events.addNode(el, r);
			return el;
		}

		function makeSlave() {
			const slave = GenerateNewSlave("XX", {maxAge: 24, ageOverridesPedoMode: 1});
			slave.career = App.Data.Careers.Leader.bodyguard.random();
			slave.origin = "$He is an unsuccessful cyborg experiment that was set free.";
			slave.devotion = random(0, 20);
			slave.trust = random(0, 20);
			setHealth(slave, 100);
			slave.weight = random(-11 - 30);
			slave.waist = random(-11, -40);
			slave.skill.combat = 70;
			configureLimbs(slave, "all", 6);
			slave.teeth = "pointy";
			slave.muscles = random(30, 70);
			slave.height = Height.random(slave, {skew: 3, spread: .2, limitMult: [1, 4]});
			slave.face = 100;
			slave.vagina = -1;
			slave.ovaries = 0;
			slave.anus = 0;
			slave.chem = 1500;
			slave.clothes = "a comfortable bodysuit";
			slave.intelligence = 100;
			slave.intelligenceImplant = 30;
			slave.energy = 0;
			slave.attrXX = 0;
			slave.attrXY = 0;
			slave.custom.label = "Z-23series";
			slave.behavioralFlaw = "none";
			slave.behavioralQuirk = "none";
			slave.sexualFlaw = "none";
			slave.sexualQuirk = "none";
			slave.fetish = "none";
			slave.fetishStrength = 96;
			slave.fetishKnown = 0;
			slave.piercing.genitals.weight = 0;
			slave.piercing.genitals.smart = false;
			slave.boobsTat = "$He has the characters 'z-23' printed across $his left breast.";
			return slave;
		}
	}
};


code:
App.Events.recSchoolSale = class recSchoolSale extends App.Events.BaseEvent {
	constructor(actors, params) {
		super(actors, params);
	}

	eventPrerequisites() {
		return [
			() => V.seeDicks !== 100,
			() => V.cash > 20000
		];
	}

	get eventName() {
		return "School Sale";
	}

	execute(node) {
		const slave = makeSlave();
		const {He, he, his, him, himself, girl} = getPronouns(slave);
		const title = (V.PC.title !== 0) ? `Sir` : `Ma'am`;
		let r = [];
		V.encyclopedia = "Slave Schools";
		r.push(`A young slave is going door to door offering ${himself} for sale on behalf of ${his} owner. It's rare to see a slave obedient enough to be entrusted with ${his} own sale, and ${he}'s interesting, so you let ${him} up. ${He} stands in front of your desk and waits for instructions. ${He}'s wearing a very skimpy schoolgirl skirt and a white blouse so tight and brief that the tops of ${his} areolae are visible. The badge on ${his} blouse identifies ${him} as a product of one of the Free Cities' legal slave orphanages. You instruct ${him} to tell you about ${himself}.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(Spoken(slave, `"I was raised and trained by a slave orphanage, ${title.toLowerCase()}. It is not legal to own underage ${girl}s, but it is legal to charge an orphan for the costs of raising ${him} when ${he} reaches ${V.minimumSlaveAge}, and those debts are always high enough to enslave ${him}. My ${ordinalSuffix(slave.actualAge)} birthday was yesterday, ${(slave.actualAge === V.minimumSlaveAge) ? `so I am a slave and for sale now` : `so I'm too old to stay at the orphanage any longer`}."`));
		App.Events.addParagraph(node, r);
		r = [];
		r.push(Spoken(slave, `"I have been trained for obedience since I came to the orphanage. At ${Math.min(14, slave.actualAge - 4)} they put me on drugs to make sure I'd grow nice T&A. On my ${ordinalSuffix(Math.min(16, slave.actualAge - 2))} birthday I got my first set of implants. Every time my boobs got used to the implants, I got sent in for a bigger set. I'm on my second set."`));
		r.push(`${He} unbuttons ${his} blouse and displays a pair of big fake tits.`);
		r.push(Spoken(slave, `"I've also had my lips done."`));
		r.push(`${He} blows you a wet kiss.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`${He} hikes up ${his} skirt and spins around slowly.`);
		r.push(Spoken(slave, `"The drugs also made my butt bigger, and I've had my butt done too. ${(slave.actualAge === V.minimumSlaveAge) ? `Since it wasn't okay to fuck me before I had turned ${V.minimumSlaveAge} and been made a slave` : `Since my owner thought it would make me more desirable`}, I'm a virgin and my anus has never had anything up it, ${title.toLowerCase()}."`));
		r.push(`${He} pulls ${his} buttocks apart to prove it.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(Spoken(slave, `"I cost ${cashFormat(2500)}, ${title.toLowerCase()}."`));

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

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

		function enslave() {
			const el = new DocumentFragment();
			let r = [];
			cashX(forceNeg(contractCost), "slaveTransfer", slave);
			r.push(`${He} thanks you profusely for purchasing ${him}, and ${he} means it. ${He}'s happy to have been bought by a real master, and to go by the hardness of ${his} nipples, looking forward to finally losing ${his} virginity.`);
			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addNode(el, r);
			return el;
		}

		function makeSlave() {
			const pram = new GenerateNewSlavePram();
			pram.minAge = Math.max(V.minimumSlaveAge, 10);
			pram.maxAge = 16;
			pram.ageOverridesPedoMode = 1;
			pram.disableDisability = 1;
			const slave = GenerateNewSlave("XX", pram);
			slave.origin = "$He was raised in a radical slave school that treated $him with drugs and surgery from a very young age.";
			slave.career = "a slave";
			slave.devotion = random(25, 45);
			slave.trust = random(25, 45);
			setHealth(slave, jsRandom(50, 60), undefined, undefined, 0, 0);
			slave.weight = 0;
			slave.lips = 35;
			slave.face = 15;
			slave.butt = random(4, 5);
			slave.buttImplant = 1;
			slave.buttImplantType = "normal";
			slave.boobsImplant = 400;
			slave.boobsImplantType = "normal";
			slave.boobs = random(8, 10) * 100;
			slave.lipsImplant = 10;
			slave.anus = 0;
			slave.vagina = 0;
			slave.trueVirgin = 1;
			slave.skill.vaginal = 0;
			slave.skill.oral = 0;
			slave.skill.anal = 0;
			slave.hLength = 5 * random(10, 18); // 50-90cm
			slave.hStyle = "tails"; // custom hairstyle replaced with dictionary item, original dummied out for record-keeping
			// slave.hStyle = "long and in twin schoolgirl tails";
			slave.pubicHStyle = "waxed";
			slave.underArmHStyle = "waxed";
			slave.birthWeek = 0;
			return slave;
		}
	}
};


code:
App.Events.recSchoolTrap = class recSchoolTrap extends App.Events.BaseEvent {
	constructor(actors, params) {
		super(actors, params);
	}

	eventPrerequisites() {
		return [
			() => V.seeDicks !== 0,
			() => V.cash > 20000
		];
	}

	get eventName() {
		return "School Trap";
	}

	execute(node) {
		const slave = makeSlave();
		const {He, he, his, him, himself, girl} = getPronouns(slave);
		const title = (V.PC.title !== 0) ? `Sir` : `Ma'am`;
		let r = [];
		V.encyclopedia = "Slave Schools";
		r.push(`A young slave is going door to door offering ${himself} for sale on behalf of ${his} owner. It's rare to see a slave obedient enough to be entrusted with ${his} own sale, and ${he}'s interesting, so you let ${him} up. ${He} stands in front of your desk and waits for instructions. ${He}'s wearing a very skimpy schoolgirl skirt and a white blouse so tight and brief that the tops of ${his} areolae are visible. Something is tenting the front of ${his} skirt slightly. The badge on ${his} blouse identifies ${him} as a product of one of the Free Cities' legal slave orphanages. You instruct ${him} to tell you about ${himself}.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(Spoken(slave, `"I was raised and trained by a slave orphanage, ${title.toLowerCase()}. It is not legal to own underage ${girl}s, but it is legal to charge an orphan for the costs of raising ${him} when ${he} reaches ${V.minimumSlaveAge}, and those debts are always high enough to enslave ${him}. My ${ordinalSuffix(slave.actualAge)} birthday was yesterday, ${(slave.actualAge === V.minimumSlaveAge) ? `so I am a slave and for sale now` : `so I'm too old to stay at the orphanage any longer`}."`));
		App.Events.addParagraph(node, r);
		r = [];
		r.push(Spoken(slave, `"I have been trained for obedience since I came to the orphanage. I came as a male, but they reassigned me to female right away. At ${Math.min(14, slave.actualAge - 4)} they put me on drugs to make sure I'd grow nice T&A and look more feminine. Those drugs also stopped my penis from growing much, so it's small, ${title.toLowerCase()}. On my ${ordinalSuffix(Math.min(16, slave.actualAge - 2))} birthday I got my first set of implants. Every time my chest got used to the implants, I got sent in for a bigger set. I'm on my third set."`));
		r.push(`${He} unbuttons ${his} blouse and displays a pair of fake tits.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`${He} hikes up ${his} skirt and spins around slowly, displaying a petite, half-hard cock.`);
		r.push(Spoken(slave, `"The drugs also made my butt bigger and my hips wider. ${(slave.actualAge === V.minimumSlaveAge) ? `Since it wasn't okay to fuck me before I had turned ${V.minimumSlaveAge} and been made a slave` : `Since my owner thought it would make me more desirable`}, my anus has never had anything up it, ${title.toLowerCase()}."`));
		r.push(`${He} pulls ${his} buttocks apart to prove it.`);
		r.push(Spoken(slave, `"I... I would be happy to serve you like I am now ${title.toLowerCase()}, or you could send me for surgery to give me a pussy instead, I would like that too, ${title.toLowerCase()}."`));
		App.Events.addParagraph(node, r);
		r = [];
		r.push(Spoken(slave, `"I cost ${cashFormat(2500)}, ${title.toLowerCase()}."`));

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

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

		function enslave() {
			const el = new DocumentFragment();
			let r = [];
			cashX(forceNeg(contractCost), "slaveTransfer", slave);
			r.push(`${He} thanks you profusely for purchasing ${him}, and ${he} means it. ${He}'s happy to have been bought by a real master, and to go by the stiffness of ${his} little dick, looking forward to finally taking it up the ass.`);
			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addNode(el, r);
			return el;
		}

		function makeSlave() {
			const slave = GenerateNewSlave("XY", {
				minAge: Math.max(V.minimumSlaveAge, 10), maxAge: 16, disableDisability: 1, ageOverridesPedoMode: 1
			});
			slave.origin = "$He was raised in a radical slave school that treated $him from a very young age, up to the point that $he never experienced male puberty.";
			slave.career = "a slave";
			slave.devotion = random(25, 45);
			slave.trust = random(25, 45);
			setHealth(slave, jsRandom(50, 60), undefined, undefined, 0, 0);
			slave.weight = 0;
			slave.face = 15;
			slave.boobs = random(5, 6) * 100;
			slave.boobsImplant = 400;
			slave.boobsImplantType = "normal";
			slave.butt = random(2, 3);
			slave.buttImplant = 1;
			slave.buttImplantType = "normal";
			slave.dick = 1;
			if (slave.foreskin > 0) {
				slave.foreskin = slave.dick;
			}
			if (slave.balls > 0) {
				slave.scrotum = slave.balls;
			}
			slave.balls = 1;
			slave.anus = 0;
			slave.clit = 0;
			slave.skill.oral = 0;
			slave.skill.anal = 0;
			slave.hLength = 5 * random(10, 18); // 50-90cm
			slave.hStyle = "tails"; // custom hairstyle replaced with dictionary item, original dummied out for record-keeping
			// slave.hStyle = "long and in twin schoolgirl tails";
			slave.pubicHStyle = "waxed";
			slave.underArmHStyle = "waxed";
			slave.pubertyXY = 0;
			slave.pubertyAgeXY = 50;
			slave.birthWeek = 0;
			return slave;
		}
	}
};


code:
App.Events.recShemalePC = class recShemalePC extends App.Events.BaseEvent {
	constructor(actors, params) {
		super(actors, params);
	}

	eventPrerequisites() {
		return [
			() => V.PC.dick !== 0,
			() => V.PC.boobs >= 300,
			() => ((V.rep/250) > random(1, 100)) || (V.debugMode > 0 && V.debugModeEventSelection > 0)
		];
	}

	get eventName() {
		return "Shemale PC";
	}

	get weight() { return 2; }

	execute(node) {
		const slave = makeSlave();
		const {He, he, his, him, himself, girl} = getPronouns(slave);
		const {himselfA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		let r = [];
		r.push(`${capFirstChar(V.assistant.name)} alerts you that a supplicant has arrived at the door to the penthouse. A constant stream of hopefuls appear at your door, and ${V.assistant.name} makes ${himselfA} invaluable by filtering them. One of the few categories of applicant that is always admitted is people willing to be enslaved for some reason; this is just such a ${girl}.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(Spoken(slave, `"Hi",`));
		r.push(`${he} says hesitantly. ${He}'s a pretty convincing girl; ${his} voice is the only giveaway. You tell ${him} that if ${he} wishes to be considered for enslavement, you need to inspect ${him} naked. To ${his} credit, ${he} obeys, undressing quickly to reveal a body that's clearly seen a good deal of hormone therapy. ${He}'s not unhealthy and isn't too shabby, so you ask ${him} why ${he}'s here.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(Spoken(slave, `"I don't make very much money,"`));
		r.push(`${he} says, and you manage not to laugh at the absurdity.`);
		r.push(Spoken(slave, `"I really want to be a prettier girl. I'm — I'm not really comfortable yet. But all the modern surgeries and drugs are so expensive. And I can't afford it, and I won't be able to before I'm old unless I decide to be a whore. So I decided if I was going to do that I might as well do it here, for you. You're,"`));
		r.push(`${he} blushes,`);
		r.push(Spoken(slave, `"you're very pretty. I would love to look like you."`));
		App.Events.addParagraph(node, r);
		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		const responses = [];
		if (V.cash >= contractCost) {
			responses.push(new App.Events.Result(`Enslave ${him}`, enslave));
		} else {
			responses.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}`));
		}
		responses.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));

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

		App.Events.addResponses(node, responses);

		function enslave() {
			const el = new DocumentFragment();
			let r = [];
			cashX(forceNeg(contractCost), "slaveTransfer", slave);
			r.push(`You put ${him} through the enslavement procedures. ${He}'s almost excited. Though ${he} knows ${he}'s signed ${himself} over to a life of sexual slavery, the anticipation of becoming more feminine is clearly more important to ${him} than any kind of fear.`);
			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addNode(el, r);
			return el;
		}

		function sell() {
			const el = new DocumentFragment();
			let r = [];
			cashX(cost, "slaveTransfer");
			r.push(`You put ${him} through the enslavement procedures. ${He} only realizes the true situation when ${his} purchaser's agent appears to take ${him} away. ${He} looks at you with a faint hopefulness.`);
			r.push(Spoken(slave, `"Do you think they'll pay for surgery and drugs for me?"`));
			r.push(`${he} asks plaintively. You observe that they probably will; ${he}'s been sold to a boutique trainer that produces high-class gelded escorts. ${He} quails a little at hearing about the castration, but squares ${his} shoulders and accompanies the agent willingly.`);
			App.Events.addNode(el, r);
			return el;
		}

		function makeSlave() {
			const slave = GenerateNewSlave("XY", {
				minAge: 13, maxAge: 20, disableDisability: 1, race: "nonslave"
			});
			generateSalonModifications(slave);
			slave.origin = "$He asked to be enslaved since $he felt you were $his only hope of becoming a prettier woman.";
			slave.devotion = random(10, 15);
			slave.trust = random(-15, -10);
			setHealth(slave, jsRandom(0, 20), undefined, undefined, 0, 0);
			slave.voice = 1;
			slave.dick = random(1, 2);
			slave.balls = random(1, 2);
			slave.scrotum = slave.balls;
			slave.anus = 1;
			slave.attrXX = Math.max(slave.attrXX, 70);
			slave.attrXY = Math.max(slave.attrXY, 70);
			slave.skill.anal = 15;
			slave.skill.oral = 15;
			slave.boobs += 400;
			slave.boobsImplant = 400;
			slave.boobsImplantType = "normal";
			slave.butt++;
			slave.buttImplant = 1;
			slave.buttImplantType = "normal";
			slave.lips += 10;
			slave.lipsImplant = 10;
			slave.face = Math.clamp(slave.face + 20, -100, 100);
			slave.faceImplant = 15;
			slave.piercing.ear.weight = either(0, 1);
			slave.piercing.navel.weight = either(0, 1);
			slave.piercing.nose.weight = either(0, 1);
			slave.piercing.eyebrow.weight = either(0, 1);
			slave.piercing.lips.weight = either(0, 1);
			slave.piercing.genitals.weight = either(0, 1);
			slave.piercing.nipple.weight = either(0, 1);
			slave.stampTat = either("advertisements", "degradation", "flowers", "rude words", "tribal patterns", 0, 0);
			slave.anusTat = either("bleached");
			slave.pubicHStyle = "waxed";
			return slave;
		}
	}
};


code:
App.Events.recSpoiledDaughter = class recSpoiledDaughter extends App.Events.BaseEvent {
	constructor(actors, params) {
		super(actors, params);
	}

	eventPrerequisites() {
		return [
			() => V.seeDicks !== 100
		];
	}

	get eventName() {
		return "Spoiled Daughter";
	}

	execute(node) {
		const slave = makeSlave();
		const {He, he, his, him, girl, daughter} = getPronouns(slave);
		let r = [];

		r.push(`Your desk flags a video message as coming from an influential old world businessman. To your surprise, rather than the portly visage you were expecting, a pretty young face appears on your screen.`);
		r.push(Spoken(slave, `"Oh. My. God. How long does it take to answer a call?"`));
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`The ${girl} speaks in a ridiculously high, bubblegum voice and bounces indignantly around ${his} father's luxurious office as ${he} rants, barely acknowledging your presence on the other end of the call.`);
		r.push(Spoken(slave, `"Daddy says that I'm spending too much of his money but what the hell is all of his money for if he's not spending it on his little ${girl}?"`));
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`${He} pauses, looking directly at you for the first time, though you get the sense that ${he} seems more interested in your own luxurious surroundings.`);
		r.push(Spoken(slave, `"Daddy told me all about you arcology types, so I know what you're all about. Anyways, I don't care about freedom and stuff if you treat me like the perfect princess I am."`));
		App.Events.addParagraph(node, r);
		r = [];
		r.push(Spoken(slave, `"So, could you enslave me or whatever?"`));

		App.Events.addParagraph(node, r);
		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		const responses = [];
		if (V.cash >= contractCost) {
			responses.push(new App.Events.Result(`Enslave ${him}`, enslave));
		} else {
			responses.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}`));
		}
		responses.push(new App.Events.Result(`Contact ${his} father`, father));
		responses.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));

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

		App.Events.addResponses(node, responses);

		function enslave() {
			const el = new DocumentFragment();
			let r = [];
			cashX(forceNeg(contractCost), "slaveTransfer", slave);
			r.push(`A few days after granting your assent to the ${girl}'s offer, ${he} appears at your penthouse laden with luggage and handbags. Much to your relief, ${he} gets through the legalities and biometric scanning with little more than a pout.`);
			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addNode(el, r);
			return el;
		}

		function father() {
			const el = new DocumentFragment();
			let r = [];
			repX(1000, "event");
			r.push(`Hanging up, you decide to inform the brat's father of the ${girl}'s suicidally stupid scheme. The grateful businessman thanks you for your kindness and promises to ground ${him} for "two weeks", seemingly sharing his ${daughter}'s naïveté. Although people will gossip as to whether you did this out of the goodness of your heart, or out of recognition of his daughter's allegedly poor value as human property, the businessman will be sure to tell his associates it was the former.`);
			App.Events.addNode(el, r);
			return el;
		}

		function sell() {
			const el = new DocumentFragment();
			let r = [];
			cashX(cost, "slaveTransfer");
			r.push(`A few days after granting your assent to the ${girl}'s offer, ${he} appears at your penthouse laden with luggage and handbags. ${slave.slaveName} bounces happily in ${his} heels and eagerly explains ${his} expectations regarding ${his} new life with you. Your response appears in the form of a purchasing agent, here to take ${him} away. As he restrains the disbelieving ${girl}, you tell ${him} ${he}'s been purchased by a brothel, so ${he}'s soon going to have more sugar daddies than ${his} holes can take. ${He} releases a wail of utter despair, quickly cut off by a sturdy bag being fastened over ${his} head.`);
			App.Events.addNode(el, r);
			return el;
		}

		function makeSlave() {
			const slave = GenerateNewSlave("XX", {
				minAge: 12, maxAge: 18,
				disableDisability: 1
			});
			generateSalonModifications(slave);
			slave.origin = "$He sold $himself into slavery to spite $his father.";
			slave.devotion = 20;
			slave.trust = 0;
			setHealth(slave, 80, 0, 0, 0, jsRandom(0, 20));
			slave.face = random(15, 70);
			slave.skill.vaginal = 0;
			slave.skill.anal = 0;
			slave.skill.oral = 0;
			slave.skill.entertainment = 0;
			slave.skill.whoring = 0;
			slave.boobs = random(3, 10) * 100;
			slave.vagina = 1;
			slave.vaginaLube = random(1, 2);
			slave.labia = 1;
			slave.ovaries = 1;
			slave.pubicHStyle = "waxed";
			slave.hips = random(0, 2);
			slave.butt = random(1, 4);
			slave.anus = 1;
			slave.weight = random(-20, 0);
			slave.muscles = 0;
			slave.shoulders = random(-2, 0);
			slave.intelligence = random(-50, -16);
			slave.career = "from an upper class family";
			slave.behavioralFlaw = "arrogant";
			slave.voice = 3;
			slave.teeth = "normal";
			slave.prestige = 1;
			slave.prestigeDesc = "$He is the spoiled $daughter of a wealthy old world businessman. Many will pay well to use $him to discredit $his father and family.";

			return slave;
		}
	}
};


code:
App.Events.recStarvingArtist = class recStarvingArtist extends App.Events.BaseEvent {
	constructor(actors, params) {
		super(actors, params);
	}

	eventPrerequisites() {
		return [
			() => V.rep > 500
		];
	}

	get eventName() {
		return "Starving Artist";
	}

	execute(node) {
		const slave = makeSlave();
		const {He, he, his, him, woman} = getPronouns(slave);
		const {himselfA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		let r = [];

		r.push(`${capFirstChar(V.assistant.name)} alerts you that a supplicant has arrived at the door to the penthouse. A constant stream of hopefuls appear at your door, and ${V.assistant.name} makes ${himselfA} invaluable by filtering them. One of the few categories of applicant that is always admitted is people willing to be enslaved for some reason; the odd individual standing before you is just such a ${woman}.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(Spoken(slave, `"What we're going to do together will be recorded in the annals of history,"`));
		r.push(`${he} says expansively, sweeping about your office in a series of twirls and pirouettes. Though when you enquire as to what exactly you'll be doing together, all ${he} can give you is a torrent of vague artistic prattle. In the end, all you can get out of ${him} is an understanding that ${he} sees enslavement as the ultimate form of creative self-expression.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`${He} seems more than a little odd, but not unattractive. At the very least, ${he}'s not likely to be a boring slave to have around the penthouse.`);

		App.Events.addParagraph(node, r);

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

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

		function enslave() {
			const el = new DocumentFragment();
			let r = [];
			cashX(forceNeg(contractCost), "slaveTransfer", slave);
			r.push(`${He} twirls and poses artistically as the biometric scanners scrupulously record ${his} every particular as belonging not to a person but to a piece of human property. ${He} seems a little disappointed that ${he} won't have the opportunity to practice ${his} penmanship but nonetheless places ${his} biometric signature in testament to the truth of ${his} voluntary enslavement.`);
			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addNode(el, r);
			return el;
		}

		function makeSlave() {
			const slave = GenerateNewSlave(null, {
				minAge: 18, maxAge: 42, disableDisability: 1, race: "nonslave"
			});
			generateSalonModifications(slave);
			slave.origin = "$He offered $himself to you for enslavement out of devotion to $his artistic 'craft'.";
			slave.boobs = random(4, 6) * 50;
			slave.weight = -20;
			slave.height = Height.forAge(random(160, 200), slave);
			slave.face = random(15, 100);
			slave.butt = random(1, 2);
			slave.lips = 0;
			slave.devotion = random(25, 45);
			slave.trust = random(25, 45);
			slave.career = "an artist";
			setHealth(slave, jsRandom(-60, -50), undefined, undefined, undefined, 0);
			slave.intelligence = random(16, 50);
			slave.skill.entertainment = 40;
			slave.intelligenceImplant = 0;
			slave.behavioralFlaw = "odd";
			slave.fetish = "humiliation";
			return slave;
		}
	}
};


code:
App.Events.recStarvingMigrant = class recStarvingMigrant extends App.Events.BaseEvent {
	constructor(actors, params) {
		super(actors, params);
	}

	eventPrerequisites() {
		return [
			() => V.week > 46,
			() => ((V.rep/100) > random(1, 100)) || (V.debugMode > 0 && V.debugModeEventSelection > 0)
		];
	}

	get eventName() {
		return "Starving Migrant";
	}

	execute(node) {
		const slave = makeSlave();
		const {He, he, his, him, girl} = getPronouns(slave);
		const title = (V.PC.title !== 0) ? `Sir` : `Ma'am`;
		let r = [];

		r.push(`Your desk flags a video message as having potential. This call is coming from a public kiosk outside the Free City, which is usually an indication that the person on the other end is a transient individual or refugee who has decided to take slavery over the alternatives. This appears to be exactly the case; the ${girl} is skeletally gaunt, dressed in tattered rags, and shakes miserably as ${he}`);
		if (!canTalk(slave)) {
			r.push(`gestures ${his} desperate deprivation and willingness to be enslaved to escape it, though ${his} appearance alone communicates ${his} situation quite sufficiently.`);
		} else {
			r.push(`explains ${his} situation.`);
			r.push(Spoken(slave, `"Please, ${title.toLowerCase()}, let me be your slave. I'll do anything you want, I just need food... it took everything I had to get here. A few more days like this and I'll die."`));
		}
		r.push(`Famines have become common as the old world collapses; you surmise ${he} came from a recently stricken region near your arcology.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`You look over the prospective slave. While bone-thin, obviously unhealthy, and barely strong enough to stand, ${he} was resourceful enough to make it to your arcology despite ${his} dire circumstances, and ${his} emaciated face would be`);
		if (slave.face > 80) {
			r.push(`drop-dead gorgeous`);
		} else if (slave.face > 50) {
			r.push(`beautiful`);
		} else {
			r.push(`rather pretty`);
		}
		r.push(`in better health. ${He} would be costly to rehabilitate, but could become a valuable asset.`);

		App.Events.addParagraph(node, r);
		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		const responses = [];
		if (V.cash >= contractCost) {
			responses.push(new App.Events.Result(`Enslave ${him}`, enslave));
		} else {
			responses.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}`));
		}
		responses.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));

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

		App.Events.addResponses(node, responses);

		function enslave() {
			const el = new DocumentFragment();
			let r = [];
			cashX(forceNeg(contractCost), "slaveTransfer", slave);
			r.push(`You have ${him} let into the arcology and brought up to your penthouse, and ${he} wearily submits to biometric scanning to be registered as your slave. ${He} is visibly relieved at the sudden reality of ${his} survival, even at the price of ${his} freedom.`);
			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addNode(el, r);
			return el;
		}

		function sell() {
			const el = new DocumentFragment();
			let r = [];
			cashX(cost, "slaveTransfer");
			r.push(`You have ${him} let into the arcology and brought up to your penthouse, and ${he} wearily submits to biometric scanning to be registered as your slave. When the purchasing agent arrives, you reassure ${him} that ${his} buyer is a charitable slaveowner who will take care of ${him}; you neglect to mention his notorious fetish for fattening up lean slaves.`);
			App.Events.addNode(el, r);
			return el;
		}

		function makeSlave() {
			const slave = GenerateNewSlave("");
			generateSalonModifications(slave);
			slave.origin = "$He begged to be enslaved to avoid starvation.";
			slave.career = "a refugee";
			slave.devotion = random(21, 40);
			slave.trust = random(-20, 20);
			setHealth(slave, random(-80, -40));
			slave.weight = -100;
			slave.muscles = random(-80, -40);
			slave.intelligence = random(0, 100);
			if (slave.behavioralFlaw === "anorexic") {
				slave.behavioralFlaw = "none";
			}
			slave.face = random(20, 100);
			slave.boobs = Math.min(slave.boobs, 300);
			slave.butt = Math.min(slave.butt, 2);
			slave.hStyle = "messy";
			slave.pubicHStyle = "bushy";
			slave.underArmHStyle = "bushy";
			return slave;
		}
	}
};


code:
App.Events.recTgAddict = class recTgAddict extends App.Events.BaseEvent {
	constructor(actors, params) {
		super(actors, params);
	}

	eventPrerequisites() {
		return [
			() => V.seeDicks !== 0
		];
	}

	get eventName() {
		return "Transgender Addict";
	}

	execute(node) {
		const slave = makeSlave();
		const {he, his, him} = getPronouns(slave);
		let r = [];
		r.push(`One of your tenants asks for an interview. He's an effeminate young man; it seems he's a surgical addict. He has heard that you have a remote surgical unit, and offers to pay well over a fair price to rent its use. Intrigued, you investigate, and find that he has been banned from the regular hospitals for unpaid bills. You could easily reprogram the surgery to ignore his input and instead gender reassign him into a saleable young woman, driving him into enslaveable debt at the same time. 'She'll' be slim, inexperienced, and very unhappy.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(App.UI.DOM.makeElement("span", `You could agree and then reprogram the remote surgery for transformation into a female once he's unconscious. Alternatively, you could transform him and then sell ${him}.`, "note"));
		App.Events.addParagraph(node, r);

		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		const responses = [];
		if (V.cash >= contractCost) {
			responses.push(new App.Events.Result(`Enslave ${him}`, enslave));
		} else {
			responses.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}`));
		}
		responses.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));

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

		App.Events.addResponses(node, responses);

		function enslave() {
			const el = new DocumentFragment();
			let r = [];
			cashX(forceNeg(contractCost), "slaveTransfer", slave);
			r.push(`When ${he} awakes from surgery, ${he} slowly realizes that whatever ${he} programmed the remote surgery to do wasn't done; instead, ${he}'s a young woman with a flat chest and a new virgin pussy. It takes a while for you to get ${him} to understand, through ${his} tears, that ${he} is now obliged to accept enslavement due to ${his} extreme debts. Eventually ${he} figures it out and glares daggers at you as ${he} signs ${his} life away.`);
			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addNode(el, r);
			return el;
		}

		function sell() {
			const el = new DocumentFragment();
			let r = [];
			cashX(cost, "slaveTransfer");
			r.push(`When ${he} awakes from surgery, ${he} slowly realizes that whatever ${he} programmed the remote surgery to do wasn't done; instead, ${he}'s a young woman with a flat chest and a new virgin pussy. It takes a while for you to get ${him} to understand, through ${his} tears, that ${he} is now obliged to accept enslavement due to ${his} extreme debts. Eventually ${he} figures it out, assisted by a purchasing agent, who restrains ${him} for transportation despite ${his} grief.`);
			App.Events.addNode(el, r);
			return el;
		}

		function makeSlave() {
			const slave = GenerateNewSlave("XY", {maxAge: 25, disableDisability: 1, race: "nonslave"});
			slave.origin = "You tricked $him into enslavement, manipulating $him based on $his surgical addiction.";
			slave.devotion = random(-75, -60);
			slave.trust = random(-15, 0);
			slave.hStyle = either("neat");
			slave.hLength = random(10, 30);
			generateSalonModifications(slave);
			slave.weight = random(-40, 5);
			slave.vagina = 0;
			slave.skill.vaginal = 0;
			slave.dick = 0;
			slave.foreskin = 0;
			slave.balls = 0;
			slave.face = 0;
			slave.preg = -2;
			slave.skill.vaginal = 0;
			return slave;
		}
	}
};


code:
App.Events.recWanderingHomeless = class recWanderingHomeless extends App.Events.BaseEvent {
	constructor(actors, params) {
		super(actors, params);
	}

	eventPrerequisites() {
		return [
			() => V.seeDicks !== 100,
			() => V.seePreg !== 0,
			() => (random(1, 1000) < 5) || (V.debugMode > 0 && V.debugModeEventSelection > 0),
		];
	}

	get eventName() {
		return "Wandering Homeless";
	}

	execute(node) {
		const slave = makeSlave();
		const {He, he, his, him, girl} = getPronouns(slave);
		let r = [];
		r.push(`As you are heading back to your penthouse from overseeing a promising new store's opening, you noticed a feminine face peeking around a nearby corner. It quickly darts out of sight before a hand beckons you in. The alley isn't particularly out of sight, so no harm looking in. The ${girl} is young, with silver hair, blue eyes, dark skin and`);
		if (slave.preg > 0) {
			r.push(`is enormously pregnant;`);
		} else {
			r.push(`a waifish build;`);
		}
		r.push(`certainly an eye-catching display. ${He} doesn't seem to speak much ${V.language} at all, and judging by ${his} gesturing, is trying to ask you to purchase ${him}.`);
		App.Events.addParagraph(node, r);

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

		const contractCost = 1000;
		const responses = [];
		if (V.cash >= contractCost) {
			responses.push(new App.Events.Result(`Enslave ${him}`, enslave));
		} else {
			responses.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}`));
		}
		responses.push(new App.Events.Result(`A quick fuck couldn't hurt`, quickFuck));
		App.Events.addResponses(node, responses);

		function enslave() {
			const el = new DocumentFragment();
			let r = [];
			cashX(forceNeg(contractCost), "slaveTransfer", slave);
			r.push(`You always keep a few slave contracts handy for just such an occasion. ${He} eyes it suspiciously before marking it and dropping ${his} skirt and bending over. As you inform ${him} this is not the place for a proper inspection and move to pull ${him} upright does the realization of what happened sink in. ${He} breaks down in tears, pleading in some language you don't understand for what you can only guess is ${his} freedom back. ${He} doesn't look to be in the best of health, so ${he}'ll learn to appreciate the hand that fate dealt ${him} soon enough.`);
			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addNode(el, r);
			return el;
		}

		function quickFuck() {
			const el = new DocumentFragment();
			let r = [];
			cashX(forceNeg(1), "personalBusiness");
			r.push(`You take ${him} up on ${his} offer,`);
			if (V.PC.dick !== 0) {
				r.push(`grab ${his} wiggling hips, and hilt your dick in ${his} tight ass. ${He}'s clueless when it comes to anal, so the experience isn't too enjoyable for you. You leave ${him} with a ${cashFormat(1)} tip, a load of cum in ${his} butt, and a smile on ${his} face over getting any money at all.`);
			} else {
				r.push(`pull out a strap-on you carry for just such an occasion, grab ${his} wiggling hips, and hilt yourself in ${his} tight ass. ${He}'s clueless when it comes to anal, so the experience isn't too enjoyable for you. You leave ${him} with a ${cashFormat(1)} tip, a sore rear, and a smile on ${his} face over getting any money at all.`);
			}

			App.Events.addNode(el, r);
			return el;
		}

		function makeSlave() {
			const slave = GenerateNewSlave("XX", {
				minAge: 6, maxAge: 12, disableDisability: 1, race: "asian", nationality: "Stateless"
			});
			slave.origin = "$He offered to sell you $his body and you graciously accepted.";
			slave.devotion = random(-45, -25);
			slave.trust = random(-15, 0);
			slave.weight = -70;
			slave.boobs = 100;
			slave.origHColor = "silver";
			slave.eye.origColor = "blue";
			slave.origSkin = "dark";
			applyGeneticColor(slave);
			if (slave.actualAge < 13) {
				slave.career = "a child prostitute";
			} else {
				slave.career = "a prostitute";
			}
			slave.vagina = 2;
			slave.anus = 1;
			slave.skill.oral = 30;
			slave.skill.vaginal = 20;
			slave.accent = 3;
			slave.preg = 0;
			if (canGetPregnant(slave)) {
				slave.lactation = 1;
				slave.lactationDuration = 2;
				slave.preg = 30;
				slave.pregType = 3;
				slave.pregWeek = 30;
				slave.pregKnown = 1;
				SetBellySize(slave);
			}
			return slave;
		}
	}
};


code:
App.Events.recWhoreRecruit = class recWhoreRecruit extends App.Events.BaseEvent {
	constructor(actors, params) {
		super(actors, params);
	}

	eventPrerequisites() {
		return [
			() => !!S.HeadGirl,
			() => S.HeadGirl.devotion > 50,
			() => S.HeadGirl.skill.whoring >= 100,
		];
	}

	get eventName() {
		return "Whore Recruit";
	}

	execute(node) {
		const slave = makeSlave();
		const {
			He, His,
			he, his, him, himself, girl
		} = getPronouns(slave);
		const {say: say} = getEnunciation(slave);
		const {he2, him2} = getPronouns(S.HeadGirl || {pronoun: 1}).appendSuffix("2");
		const title = (V.PC.title !== 0) ? `Sir` : `Ma'am`;
		let r = [];
		r.push(`Your Head Girl sends you a discreet message that ${he2} may have found a slave for you. ${S.HeadGirl.slaveName} duly ushers a working ${girl} into your office. ${He} looks like a classic street hooker, and ${he}'s clearly had a rough time recently. ${He} needs no prompting to explain ${himself}, and ${he} does so without embarrassment.`);
		App.Events.addParagraph(node, r);
		r = [];

		r.push(Spoken(slave, `"${title}, my name is ${slave.slaveName}. I'm a street whore. Working ${girl}s get to know each other, so I know ${S.HeadGirl.slaveName} pretty well. I've been having a bad time on the streets, and last night a john beat on me pretty good. I'm broke and I'm sick of this. Being free isn't worth shit. ${S.HeadGirl.slaveName} likes you and ${he2} seems to do OK. So, can I be your slave? I'm a good bet, ${title.toLowerCase()}. I'd be happy enough working for you as a slave whore if you keep me healthy and safe, and I'm a good fuck."`));
		App.Events.addParagraph(node, r);

		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		const responses = [];
		if (V.cash >= contractCost) {
			responses.push(new App.Events.Result(`Enslave ${him}`, enslave));
		} else {
			responses.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}`));
		}
		responses.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));

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

		App.Events.addResponses(node, responses);

		function enslave() {
			const el = new DocumentFragment();
			let r = [];
			cashX(forceNeg(contractCost), "slaveTransfer", slave);
			r.push(`You complete the legalities and biometric scanning quickly and without fuss. ${slave.slaveName} participates matter-of-factly, and there's a certain sense of relief about ${him}. ${His} fate is out of ${his} hands now, and you get the impression ${he} isn't sorry about that at all.`);
			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addNode(el, r);
			return el;
		}

		function sell() {
			const el = new DocumentFragment();
			let r = [];
			cashX(cost, "slaveTransfer");
			r.push(`When the purchasing agent appears to take ${him} away, ${he} looks rueful.`);
			r.push(Spoken(slave, `"God fucking damn it,"`));
			r.push(`${he} ${say}s, less angrily than you expected.`);
			r.push(Spoken(slave, `"I should have known. ${S.HeadGirl.slaveName} played me good. Treat ${him2} right, ${he2}'s got skills."`));
			App.Events.addNode(el, r);
			return el;
		}

		function makeSlave() {
			const pram = new GenerateNewSlavePram();
			pram.disableDisability = 1;
			pram.race = "nonslave";
			if (V.minimumSlaveAge < 14 && V.pedo_mode === 0) {
				pram.minAge = random(V.minimumSlaveAge, 14);
			}
			const slave = GenerateNewSlave("XX", pram);
			slave.origin = "$He offered $himself to you as a slave to escape the hard life of a free whore.";
			slave.career = "a prostitute";
			slave.devotion = random(25, 45);
			slave.trust = random(25, 45);
			setHealth(slave, jsRandom(-40, -20), undefined, undefined, undefined, 40);
			slave.anus = 2;
			slave.vagina = 2;
			slave.skill.vaginal = 35;
			slave.skill.oral = 35;
			slave.skill.anal = 35;
			slave.skill.whoring = 35;
			slave.boobs += 600;
			slave.boobsImplant = 600;
			slave.boobsImplantType = "normal";
			slave.butt++;
			slave.buttImplant = 1;
			slave.buttImplantType = "normal";
			slave.lips += 10;
			slave.lipsImplant = 10;
			slave.piercing.lips.weight = 1;
			slave.piercing.tongue.weight = 1;
			slave.piercing.ear.weight = 1;
			slave.piercing.nose.weight = 1;
			slave.piercing.eyebrow.weight = 1;
			slave.piercing.navel.weight = 1;
			slave.piercing.nipple.weight = 1;
			slave.piercing.genitals.weight = 1;
			generateSalonModifications(slave);
			slave.hStyle = "strip";
			slave.pubicHStyle = "waxed";
			slave.underArmHStyle = "waxed";
			slave.custom.tattoo = "$He has a tear tattooed under each eye.";
			return slave;
		}
	}
};


code:
App.Events.recWomanlyPC = class recWomanlyPC extends App.Events.BaseEvent {
	constructor(actors, params) {
		super(actors, params);
	}

	eventPrerequisites() {
		return [
			() => V.PC.dick === 0,
			() => V.PC.boobs >= 300,
			() => V.PC.title === 0,
			() => ((V.rep/250) > random(1, 100)) || (V.debugMode > 0 && V.debugModeEventSelection > 0)
		];
	}

	get eventName() {
		return "Womanly PC";
	}

	get weight() { return 2; }

	execute(node) {
		const slave = makeSlave();
		const {He, he, his, him, woman} = getPronouns(slave);
		const {himselfA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		let r = [];

		r.push(`${capFirstChar(V.assistant.name)} alerts you that a supplicant has arrived at the door to the penthouse. A constant stream of hopefuls appear at your door, and ${V.assistant.name} makes ${himselfA} invaluable by filtering them. One of the few categories of applicant that is always admitted is people willing to be enslaved for some reason; this is just such a ${woman}.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(Spoken(slave, `"It's my husband,"`));
		r.push(`${he} says forthrightly.`);
		r.push(Spoken(slave, `"I'm pretty sure the bastard is going to enslave me."`));
		r.push(`${He} pours out the trite story; it's terrifically boring, but it pays to hear people who want to be enslaved out. It's the only forbearance you'll need to show ${him}, ever, if you manage things correctly.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(Spoken(slave, `"So,"`));
		r.push(`${he} sums up, sighing and dabbing at tears,`);
		r.push(Spoken(slave, `"I know you're a slaveowner. I don't really have anywhere else to go, so I'll be your slave. I'm not stupid, and I'm not ugly, so I know that means I'd be a sex slave. But it's better than the open market."`));
		r.push(`Left unsaid is ${his} obvious expectation that you'll be sympathetic to ${his} plight.`);

		App.Events.addParagraph(node, r);
		const contractCost = 1000;
		const cost = slaveCost(slave) - contractCost;
		const responses = [];
		if (V.cash >= contractCost) {
			responses.push(new App.Events.Result(`Enslave ${him}`, enslave));
		} else {
			responses.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}`));
		}
		responses.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cashFormat(cost)}`));

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

		App.Events.addResponses(node, responses);

		function enslave() {
			const el = new DocumentFragment();
			let r = [];
			cashX(forceNeg(contractCost), "slaveTransfer", slave);
			r.push(`You put ${him} through the enslavement procedures. ${He} looks relieved, as though ${he} thinks ${he} no longer has anything to worry about. ${He}'s certainly more complacent than the average inductee.`);
			r.push(App.UI.newSlaveIntro(slave));
			App.Events.addNode(el, r);
			return el;
		}

		function sell() {
			const el = new DocumentFragment();
			let r = [];
			cashX(cost, "slaveTransfer");
			r.push(`You put ${him} through the enslavement procedures. ${He} only realizes the true situation when ${his} purchaser's agent appears to take ${him} away. ${He} looks at you in total unwillingness to believe you'd do such a thing; you observe politely that ${he}'s been purchased by a brothel, but is old enough ${he}'ll probably only work there for ten years or so. During that time ${he}'ll only be fucked 30,000 times, give or take. ${He} releases a wail of utter despair, quickly cut off by a sturdy bag being fastened over ${his} head.`);
			App.Events.addNode(el, r);
			return el;
		}

		function makeSlave() {
			const slave = GenerateNewSlave("XX", {
				minAge: 28, maxAge: 32, disableDisability: 1, race: "nonslave"
			});
			generateSalonModifications(slave);
			slave.origin = "$He asked to be enslaved in the hope you'd treat a fellow woman well.";
			slave.devotion = random(10, 15);
			slave.trust = random(-15, -10);
			setHealth(slave, jsRandom(0, 20), undefined, undefined, 0, 0);
			slave.face = random(0, 20);
			slave.anus = 1;
			slave.skill.anal = 0;
			slave.skill.oral = 15;
			slave.vagina = 1;
			slave.behavioralFlaw = "hates men";
			slave.skill.vaginal = 15;
			slave.piercing.ear.weight = either(0, 1);
			slave.piercing.navel.weight = either(0, 1);
			slave.piercing.nose.weight = either(0, 1);
			slave.piercing.genitals.weight = either(0, 1);
			slave.piercing.nipple.weight = either(0, 1);
			slave.shouldersTat = either("flowers", "tribal patterns", 0, 0);
			slave.stampTat = either("flowers", "tribal patterns", 0, 0);
			return slave;
		}
	}
};