code:
App.Events.PMercenaryRomeo = class PMercenaryRomeo extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => App.Events.effectiveWeek() >= 44,
			() => V.mercenaries > 0,
			() => V.mercRomeo !== 1,
		];
	}

	execute(node) {
		V.mercRomeo = 1;
		let r = [];
		V.nextButton = "Continue";
		/** @type {FC.Zeroable<string>} */
		let name = 0;
		let cost;
		let juliet;

		let romeoSlaves = V.slaves.filter(function(s) { return s.fetish !== "mindbroken" && s.fuckdoll === 0 && ["serve in the club", "serve the public", "whore", "work in the brothel"].includes(s.assignment); });
		if (romeoSlaves.length === 0) {
			romeoSlaves = V.slaves.filter(function(s) { return (s.counter.publicUse > 0) && (s.newGamePlus === 0) && (s.relationship > -3) && !["be your Concubine", "serve in the master suite"].includes(s.assignment); });
			if (romeoSlaves.length === 0) {
				name = setup.whiteAmericanSlaveNames.random();
			} else {
				juliet = romeoSlaves.random();
			}
		} else {
			juliet = romeoSlaves.random();
		}
		if (juliet === undefined) {
			name = setup.whiteAmericanSlaveNames.random();
		}

		if (name === 0) {
			cost = slaveCost(juliet);
			cost = (random(60, 70) * Math.trunc(cost / 100));
			cost = 100 * Math.trunc(cost / 100);
		}
		const {
			He, His,
			he, his, him, girl
		} = getPronouns(juliet ? juliet : {pronoun: App.Data.Pronouns.Kind.neutral});
		const {
			heU, hisU, himU, girlU
		} = getNonlocalPronouns(V.seeDicks).appendSuffix("U");

		r.push(`One of your mercenaries requests an interview. He's a worn, grey-haired tank of a man, made bulkier still by heavy ceramic plate armor and lots of ammunition and gear. The murderous submachine gun favored for city fighting looks like a toy in his hands. But as he sits at your invitation and accepts a ${generalRefreshment()} proffered by an attentive slave ${girlU}, he seems almost bashful.`);

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

		r.push(`"${properTitle()}, I'll say this straight. I'd like to buy one of your slaves.`);
		if (name !== 0) {
			r.push(`I've been seeing ${name} a lot, and ${heU} makes the years sit a little lighter on me. I've scraped together what I can, and I can pay ${cashFormat(50000)}." It's a huge sum for a mercenary; it's probably his entire savings, but there is a slight problem; the slave he is looking for isn't one of yours. "Well then," he says in embarrassment, "Have to say this is a little awkward." He gives a fake cough, "You wouldn't happen to, you know, know who ${hisU} owner is?" You shake your head. A run in with a ${girlU} named ${name} isn't much to go by and it really isn't your problem. "Ah well, I'm sure I'll see ${himU} around again. Anyway, that was a fine victory the other day, ${properTitle()}; come down to the bar and join the boys and I. We'll buy you a drink. Devil knows, thanks to you we can afford to. Hell, maybe you'll even get to meet ${name} too, get to see just how much of a looker ${heU} is."`);
		} else {
			if (["serve in the club", "serve the public", "whore", "work in the brothel"].includes(juliet.assignment)) {
				r.push(
					`I've been seeing`,
					App.UI.DOM.slaveDescriptionDialog(juliet),
					`a lot, and ${he} makes the years sit a little lighter on me.`
				);
			} else {
				r.push(
					`I've seen`,
					App.UI.DOM.slaveDescriptionDialog(juliet),
					`here and there and I can't stop thinking about ${him}. I feel ${he}'d make the years sit a little lighter on me.`
				);
			}
			r.push(`I've scraped together what I can, and I can pay ${cashFormat(cost)}." It's a decent price, probably a little less than you could get at auction. It's a huge sum for a mercenary; it's probably his entire savings. You ask what he would do with ${him}. "Well," he says, actually blushing, "I'd free ${him}. And marry ${him}, if ${he}'d have me."`);

			App.Events.addParagraph(node, r);
			const choices = [];
			choices.push(new App.Events.Result(`Decline, and tell ${him} not to see him`, declineAndForbid));
			choices.push(new App.Events.Result(`Politely decline`, declinePolitely));
			choices.push(new App.Events.Result(`Accept`, accept));
			choices.push(new App.Events.Result(`Give ${him} to him as a gift`, gift));

			App.Events.addResponses(node, choices);

			App.UI.DOM.appendNewElement("h3", node, `${His} records...`);
			App.UI.DOM.appendNewElement("div", node, `${His} current task is to ${juliet.assignment}${(V.assignmentRecords[juliet.ID]) ? `, and before that to ${V.assignmentRecords[juliet.ID]}` : ""}.`, "indent");
			node.append(slaveImpactLongTerm(juliet));
		}
		function declineAndForbid() {
			repX(-1000, "event");
			return `${juliet.slaveName} obeys your orders not to see the old mercenary. Though neither he or ${juliet.slaveName} says a word about it, his squadmates are not so closemouthed. Soon the tragic story of The Mercenary and the slave${girl} is being told in bars and brothels across the Free City, with you naturally playing the role of the villain.`;
		}
		function declinePolitely() {
			let r = [];
			r.push(`"Ah well," he says, "didn't think you would, but I had to ask. If you'd be so kind as to keep ${him} assigned so's I can see ${him}, I would be grateful. That was a fine victory, ${properTitle()}; come down to the bar and join the boys and I. We'll buy you a drink. Devil knows, thanks to you we can afford to."`);
			if (juliet.relationship === -3 && juliet.fetish !== "mindbroken" && juliet.devotion + juliet.trust > 190) {
				r.push(`${juliet.slaveName} politely thanks you for not letting him take ${him} away.`);
			}
			return r;
		}

		function accept() {
			let r = [];
			r.push(`The mercenary leaves to collect his purchase. On the video feeds, you see that ${juliet.slaveName} can hardly believe what's`);
			if (juliet.relationship === -3 && juliet.fetish !== "mindbroken" && juliet.devotion + juliet.trust > 190) {
				r.push(`happening. You can't hear what he says as he takes out a ring, but ${his} reaction speaks clearly. ${He} says "No."`);
				if (canWalk(juliet) && hasAnyArms(juliet)) {
					r.push(`${He} points back into your penthouse and returns to ${his} home.`);
				} else {
					r.push(`${He} gestures towards the nearest camera and he helps ${him} back into your penthouse.`);
				}
				r.push(`The only thing ${he} wants after being freed is to return to your side. "I thought I was giving ${him} a better life... But ${he} already had everything ${he} wanted. I'm sorry for putting you in such a position." You can hear the sadness in his voice. "Thank you for your time. I'm sorry to have bothered you." Since ${he} returned to slavery, it's only fair to return the credits he paid for ${him}. He thanks you hollowly before heading on his way.`);
			} else {
				r.push(`happened.`);
				if (hasAnyArms(juliet) && hasBothLegs(juliet)) {
					r.push(`${He} hugs him, sobbing into his shoulder. As they walk hand in hand down towards his quarters,`);
				} else {
					r.push(`As he`);
					if (!isAmputee(juliet)) {
						r.push(`gives`);
					} else {
						r.push(`picks up ${his} limbless form to give`);
					}
					r.push(`${him} a hug,`);
				}
				r.push(`${he} gives the nearest camera a little nod and silently mouths the words "Thank you, ${getWrittenTitle(juliet)}." Soon the romantic story of The Mercenary and the slave${girl} is being told in bars and brothels across the Free City, with you naturally playing a supporting role.`);
				repX(1000, "slaveTransfer");
				cashX(cost, "slaveTransfer");
				removeSlave(juliet);
			}
			return r;
		}

		function gift() {
			let r = [];
			r.push(`The mercenary cannot believe his ears. After you repeat yourself twice, he leaves to collect your gift, thanking you clumsily. On the video feeds, you see that ${juliet.slaveName} can hardly believe what's`);
			if (juliet.relationship === -3 && juliet.fetish !== "mindbroken" && juliet.devotion + juliet.trust > 190) {
				r.push(`happening. You can't hear what he says as he takes out a ring, but ${his} reaction speaks clearly. ${He} says "No."`);
				if (canWalk(juliet) && hasAnyArms(juliet)) {
					r.push(`${He} points back into your penthouse and returns to ${his} home.`);
				} else {
					r.push(`${He} gestures towards the nearest camera and he helps ${him} back into your penthouse.`);
				}
				r.push(`The only thing ${he} wants after being freed is to return to your side. "I thought I was giving ${him} a better life... But ${he} already had everything ${he} wanted. I'm sorry for putting you in such a position." You can hear the sadness in his voice. "Thank you for your time. I'm sorry to have bothered you."`);
			} else {
				r.push(`happened.`);
				if (hasAnyArms(juliet) && hasAnyLegs(juliet)) {
					r.push(`${He} hugs him, sobbing into his shoulder. As they walk hand in hand down towards his quarters,`);
				} else {
					r.push(`As he`);
					if (!isAmputee(juliet)) {
						r.push(`gives`);
					} else {
						r.push(`picks up ${his} limbless form to give`);
					}
					r.push(`${him} a hug,`);
				}
				r.push(`${he} gives the nearest camera a little nod and silently mouths the words "Thank you, ${getWrittenTitle(juliet)}." You smile to yourself; when they get there they'll find flowers and a paid reservation at the arcology's best restaurant. Soon the story is being told in bars and brothels across the Free City, with you naturally playing a starring role. Some days later, you hear a dramatization is being filmed, with an aging action star playing the mercenary, a rising starlet playing ${juliet.slaveName}, and a noted character actor playing you.`);
				repX(15000, "event");
				addTrinket(`a poster for the movie that was made about the love between one of your mercenaries and`, {
					name: juliet.slaveName,
					id: juliet.ID
				});
				removeSlave(juliet);
			}
			return r;
		}
	}
};


code:
App.Events.PMercsHelpCorp = class PMercsHelpCorp extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.corp.Incorporated > 0,
			() => V.rivalOwnerEnslaved > 0,
			() => V.mercenaries >= 3,
			() => V.mercenariesHelpCorp === 0,
			() => V.corp.DivExtra > 0,
			() => App.Events.effectiveWeek() > 70,
		];
	}

	execute(node) {
		let r = [];
		V.nextButton = "Decline"; /* hide button until user makes a selection */
		V.mercenariesHelpCorp = -1;

		r.push(`Your weekly meeting with your ${V.mercenariesTitle} commander finishes with unusual speed. With the arcology owner who set the Daughters on you enslaved, all other immediate threats defused or smashed,`);
		if (V.arcologies[0].FSRomanRevivalistLaw > 0) {
			r.push(`your citizens serving in the urban cohorts with enthusiasm,`);
		}
		if (V.arcologies[0].FSNeoImperialistLaw1 > 0) {
			r.push(`your Knights vigilantly watching the streets for any possible threat,`);
		}
		r.push(`and the ${V.mercenariesTitle} in excellent fighting condition, there just weren't enough concerns from either of your perspectives to fill the time. You sit across your desk from each other, discussing the global situation over ${V.PC.refreshment}.`);

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

		r.push(`"You know, ${properTitle()}," the scarred man says thoughtfully. "Threat board's pretty sparse these days. I mean, not for those poor bastards." He`);
		if (V.PC.refreshmentType === 0) {
			r.push(`waves his ${V.PC.refreshment}`);
		} else if (V.PC.refreshmentType === 1) {
			r.push(`uses his glass to point`);
		} else if (V.PC.refreshmentType === 2) {
			r.push(`points a piece of ${V.PC.refreshment}`);
		} else if (V.PC.refreshmentType === 3) {
			r.push(`finishes arranging a line before pointing`);
		} else if (V.PC.refreshmentType === 4) {
			r.push(`using his syringe to point`);
		} else if (V.PC.refreshmentType === 5) {
			r.push(`shaking the bottle of ${V.PC.refreshment}`);
		} else if (V.PC.refreshmentType === 6) {
			r.push(`using the sheet of ${V.PC.refreshment} to point`);
		}
		r.push(`at a screen showing a live news feed from a war on the other side of the world. A huge cloud in an unmistakable, malevolent shape, a broad rising head atop a dirty column of vapor, is towering above a large city.`);

		App.Events.addParagraph(node, r);
		App.Events.addParagraph(node, [`"But in our immediate area, there's just not much that can threaten us. Most trouble on the horizon's going to come from economics and supply and the climate, but that stuff doesn't shoot back. I think we can afford a little dispersal of military effort. Why don't I second squads to your corporation, when we've got the availability? Your corporate guys are already pulling meat out of the conflict zones. No offense to them, they're pretty good, but they're not quite at the level of my boys and girls. And don't worry, I'd keep 'em clear of shit like that." He indicates the on-screen mushroom cloud again.`]);
		r = [];

		r.push(
			App.UI.DOM.makeElement("span", "This is a unique opportunity", "bold"),
			`and will not reoccur.`
		);
		App.Events.addParagraph(node, r);

		App.Events.addResponses(node, [
			new App.Events.Result(`Decline`, decline),
			new App.Events.Result(`Make it so`, makeItSo)
		]);

		function decline() {
			return `Best to keep the ${V.mercenariesTitle} in reserve. You decline, and the commander chuckles. "Well ${properTitle()}, if you insist, I suppose we could find ways to keep busy around the arcology. I mean, we're a little starved for ${V.seeDicks !== 0 ? "female" : "intimate"} company here, but we can make do."`;
		}

		function makeItSo() {
			V.nextButton = "Continue";
			App.Utils.updateUserButton();
			const {girlU, heU} = getNonlocalPronouns(V.seeDicks).appendSuffix("U");
			V.mercenariesHelpCorp = 1;
			return `It's a fine idea, and you agree. The commander looks so enthused that you feel obliged to ask that he not risk himself unduly. He laughs. "There are no old, bold mercs, ${properTitle()}, and I am sure as hell old. I'll be sure to grow even older under contract with you. Now, unless there's anything else, I've just bought a nice ${girlU} to add to the commander's suite, and ${heU} makes me feel a bit younger."`;
		}
	}
};

repo_name: Pecanus/fc

license: mit


code:
App.Events.PRaidInvitation = class PRaidInvitation extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.mercenaries > 0
		];
	}

	execute(node) {
		V.nextButton = "Continue";

		App.Events.addParagraph(node, [
			`The former country whose citizens launched the ultimately futile attack on the arcology has continued to degenerate. After a series of civil disturbances and minor natural disasters, the nearest major city is being abandoned by its few remaining residents. A regional warlord is threatening the area, so they are streaming in small parties towards another city that is not yet under his shadow.`
		]);

		App.Events.addParagraph(node, [
			`The citizens of ${V.arcologies[0].name} view their discomfiture without much pity. These people almost certainly would have abused them just as much as they are now in danger of being abused themselves, had the attack on the Free City been a success. There would be little to no criticism if you and your mercenary contingent were to take this unique opportunity to corral one of the refugee groups. They are refugees, after all; no one will miss them.`
		]);

		const raidCost = 5000;
		App.Events.addParagraph(node, [`Fund a quick raid on the refugees with ${cashFormat(raidCost)}, targeting:`]);

		const choices = [];
		if (V.cash > raidCost) {
			choices.push(new App.Events.Result(`Ex-soldiers`, exSoldiers));
			choices.push(new App.Events.Result(`Healthy civilians`, healthyCiv));
			choices.push(new App.Events.Result(`The largest possible group of slaves`, slaveDotMax));
		} else {
			choices.push(new App.Events.Result(null, null, `You can't even afford ${cashFormat(raidCost)}`));
		}
		choices.push(new App.Events.Result(`Or, just let them go`, free));
		App.Events.addResponses(node, choices);

		function exSoldiers() {
			cashX(-raidCost, "war");
			App.Events.queueEvent(1, new App.Events.PRaidResult(), {raidTarget: 1});
			return `Your mercenaries probably would have been enthusiastic even before the recent combat, but now they're positively eager. The split agreed upon is that they keep the proceeds from the sale of anything that isn't sex slave material, while you keep anything that is.`;
		}

		function healthyCiv() {
			cashX(-raidCost, "war");
			App.Events.queueEvent(1, new App.Events.PRaidResult(), {raidTarget: 2});
			return `Your mercenaries probably would have been enthusiastic even before the recent combat, but now they're positively eager. The split agreed upon is that they keep the proceeds from the sale of anything that isn't sex slave material, while you keep anything that is.`;
		}

		function slaveDotMax() {
			cashX(-raidCost, "war");
			App.Events.queueEvent(1, new App.Events.PRaidResult(), {raidTarget: 3});
			return `Your mercenaries probably would have been enthusiastic even before the recent combat, but now they're positively eager. The split agreed upon is that they keep the proceeds from the sale of anything that isn't sex slave material, while you keep anything that is.`;
		}

		function free() {
			return `Some of the refugees make it to safety. Some do not.`;
		}
	}
};


code:
App.Events.PRaidResult = class PRaidResult extends App.Events.BaseEvent {
	execute(node) {
		let r = [];

		V.nextButton = "Continue";

		App.Events.addParagraph(node, [`As your VTOL craft carries you and your mercenaries out towards an area ideal for a quick raid on the refugee bands, the sensors begin to reveal that there are actually many more bands than you originally suspected. The single aircraft does not carry enough mercenaries to target more than one group, or have the cargo capacity to haul more than one back to the arcology before they disperse. Your mercenary commander makes a selection based on your instructions.`]);

		App.Events.addParagraph(node, [`Out ahead of the main body of refugees there is a small knot moving quickly and in good order, carrying weapons. Farther back, there is a larger group separated from the main body who could be easily isolated. And finally, it seems a group of sick and injured refugees have clustered around a tent where there must be medical assistance of some kind.`]);

		const newSlaves = [];
		if (this.params.raidTarget === 1) {
			r.push(`Under orders to target resistance, your mercenaries target the leading group. They even manage to direct a little small arms fire at the VTOL craft as it circles them, dropping mercenaries and plying its nonlethal weapons, but they are of course rapidly defeated. Your share is two slaves in good physical condition, who prove to have been survivors of the defeated attack on the arcology. The mercenaries find after a data search that one of the prisoners whose part of their share was a minor leader in the anti-Free Cities movement. After a quick consultation over their radios, the mercenaries decide that a summary execution out here would be too quick for the wretch, and bring their prize back to the arcology for more thorough punishment. Between the successful raid and the capture of this public enemy, the citizens are quite impressed by you.`);
			repX(2500, "event");
			for (let prr = 0; prr < 3; prr++) {
				if (V.seeDicks > 0) {
					const slave = GenerateNewSlave("XY");
					slave.origin = "$He is an enslaved refugee who participated in the defeated attack on your arcology.";
					newSlaves.push(slave);
				} else {
					const slave = GenerateNewSlave("XX");
					slave.origin = "$He is an enslaved refugee who participated in the defeated attack on your arcology.";
					newSlaves.push(slave);
				}
			}
		} else if (this.params.raidTarget === 2) {
			r.push(`Under orders to target civilians, your mercenaries head for the isolated group. When the VTOL descends to circle around the large group of refugees, it becomes obvious that it won't even be necessary to expend nonlethal ammunition. A few of the refugees throw themselves down in bitterness, but most just subside into the catatonia of helplessness. They stand quiescent as they are searched, tagged, and loaded onto the VTOL like the wretched human refuse they are. The successful raid is the talk of the Free City.`);
			repX(1000, "event");
			for (let prr = 0; prr < 4; prr++) {
				const slave = GenerateNewSlave();
				slave.origin = "$He is an enslaved refugee.";
				newSlaves.push(slave);
			}
		} else {
			const {
				heU, hisU, himU
			} = getNonlocalPronouns(V.seeDicks === 100 ? 100 : 0).appendSuffix("U"); /* nurse gender is female unless seeDicks is 100 */
			r.push(`Under orders to target the largest possible group of people, your mercenaries head for the sick and injured. As the VTOL settles, it becomes apparent that most of the injuries are from combat, almost certainly in the defeat at ${V.arcologies[0].name}. The tent proves to contain a harassed nurse, almost without medical supplies and at the end of ${hisU} rope. When ${heU} sees the mercenaries push through the tent flap, ${heU} heaves a sigh of mixed defeat and relief and wordlessly offers ${hisU} wrists. The mercenaries give you a larger share of the other slaves in return for ${himU}: they tell you in confidence that ${heU}'ll be a medical asset to them as well as the usual amusement. The successful raid is the talk of the Free City.`);
			App.Events.queueEvent(1, new App.Events.PSlaveMedic());
			repX(1000, "event");
			for (let prr = 0; prr < 5; prr++) {
				const slave = GenerateNewSlave();
				slave.origin = "$He is an enslaved refugee who was wounded in the defeated attack on your arcology.";
				setHealth(slave, jsRandom(-50, 40), normalRandInt(20, 3), normalRandInt(15, 3), Math.max(normalRandInt(0, 1), 0), jsRandom(40, 80));
				newSlaves.push(slave);
			}
		}
		App.Events.addParagraph(node, r);

		const choices = [];
		choices.push(new App.Events.Result(`Sell your prisoners immediately`, sell));
		choices.push(new App.Events.Result(`Give your prisoners to citizens injured in the recent invasion`, give));
		choices.push(new App.Events.Result(`Enslave all of the refugees`, enslave));
		App.Events.addResponses(node, choices);

		function sell() {
			for (const slave of newSlaves) {
				cashX(slaveCost(slave), "slaveTransfer");
			}
			return `Prisoners sold.`;
		}

		function give() {
			for (const slave of newSlaves) {
				const cost = slaveCost(slave);
				repX(Math.trunc(cost / 10), "event");
			}
			return `Prisoners <span class="reputation inc">given away.</span>`;
		}

		function enslave() {
			for (const slave of newSlaves) {
				newSlave(slave);
			}
			return `You simply enslave all of the refugees yourself. They would have been worse off had you not intervened.`;
		}
	}
};


code:
App.Events.PSnatchAndGrab = class PSnatchAndGrab extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.mercenaries > 0
		];
	}

	execute(node) {
		let r = [];
		V.nextButton = "Continue";
		V.eventResults.snatch = 0;

		App.Events.addParagraph(node, [`${capFirstChar(V.assistant.name)} forwards a discreet message from the leader of your mercenaries.`]);
		App.Events.addParagraph(node, [`"${properTitle()}, I've just become aware of a... business opportunity through some old friends. There's an unregistered lab doing illegal gene therapy work. At least two agencies are onto them, which is how I heard of it. Word is, they're packing up and moving out. I believe me and my people can appropriate that shipment. Catch is, to make this work I need to pay some serious bribes, and I need to pay them today. We'll cut you in as an equal partner for ${cashFormat(10000)} cash, right now. One share should come to one of the lab rats, more or less. Are you in or out?"`]);
		if (V.assistant.personality === 1) {
			const {
				HeA,
				heA, hisA, himselfA
			} = getPronouns(assistant.pronouns().main).appendSuffix("A");
			r.push(`${capFirstChar(V.assistant.name)}'s ${V.assistant.appearance} avatar appears on your desk next to the message.`);
			switch (V.assistant.appearance) {
				case "monstergirl":
					r.push(`"I vote yes. Even though whatever that lab is producing can't possibly be as interesting as me," ${heA} says haughtily, and twirls a strand of tentacle hair.`);
					break;
				case "shemale":
					r.push(`"I vote yes," ${heA} says sweetly. "Whatever they're doing, it's probably interesting. I'd love to fuck something interesting."`);
					break;
				case "amazon":
					r.push(`"I vote yes!" ${heA} shouts. "Whatever they're doing, their girls are probably valuable. And everything's more fun if you loot it instead of buying it."`);
					break;
				case "businesswoman":
					r.push(`"I vote yes," ${heA} says. "The likelihood that the lab is producing something valuable is overwhelming. The potential profits are," and ${heA} pauses to fan ${himselfA}, "exciting."`);
					break;
				case "fairy":
				case "pregnant fairy":
					r.push(`"I vote yes," ${heA} says. "They could be up to something really cool!"`);
					break;
				case "goddess":
					r.push(`"I vote yes," ${heA} says. "Whatever is in that lab deserves some loving attention and... more variety is always appreciated."`);
					break;
				case "hypergoddess":
					r.push(`"I vote yes," ${heA} says. "Whatever is in that lab deserves some loving attention and... more variety is always appreciated."`);
					break;
				case "loli":
					r.push(`"I vote yeah," ${heA} says. "I wanna see what's inside!"`);
					break;
				case "preggololi":
					r.push(`"I vote yeah," ${heA} says. "I wanna see what's inside!"`);
					break;
				case "schoolgirl":
					r.push(`"I vote yeah," ${heA} says. "I just wanna see what that lab is doing. Could be cool!"`);
					break;
				case "angel":
					r.push(`"I vote yes," ${heA} says. "Whatever is in that lab deserves a better life under your care."`);
					break;
				case "cherub":
					r.push(`"I vote yeah," ${heA} says. "I'm really curious what could be inside."`);
					break;
				case "incubus":
					r.push(`"I vote yes," ${heA} says. "I can't wait to get my dick in it!"`);
					break;
				case "succubus":
					r.push(`"I vote no," ${heA} says. "You're all mine!"`);
					break;
				case "imp":
					r.push(`"I vote yeah," ${heA} says. "I can't wait to tease and torment whatever's inside!"`);
					break;
				case "witch":
					r.push(`"I vote yes," ${heA} says. "It can't be worse than some of my fuckups."`);
					break;
				case "ERROR_1606_APPEARANCE_FILE_CORRUPT":
					r.push(`${HeA} doesn't comment, though a large, toothy grin spreads across the entirety of ${hisA} head revealing ${hisA} thoughts on the subject.`);
					break;
				default:
					r.push(`"I would suggest agreement," ${heA} says. "Even if the prize does not appeal to you personally, it's likely to be quite valuable. Selling it could net you quite a profit."`);
			}
			App.Events.addParagraph(node, r);
		}

		const choices = [
			new App.Events.Result(`Bankroll the snatch and grab`, bankroll),
			new App.Events.Result(`Politely decline`, decline)
		];
		App.Events.addResponses(node, choices);

		function bankroll() {
			cashX(-10000, "slaveTransfer");
			V.eventResults.snatch = 1;
			App.Events.queueEvent(1, new App.Events.PSnatchAndGrabResult());
			return `You receive no response whatsoever. Twenty minutes later, however, a liaison VTOL aircraft that the mercenaries sometimes hire arrives, loads a party of armed men and women, and leaves.`;
		}

		function decline() {
			return `You receive no response whatsoever. That's how it is with professionals: the offer was never made, you never declined, and no further discussion is necessary or desired.`;
		}
	}
};


code:
App.Events.PSnatchAndGrabResult = class PSnatchAndGrabResult extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.eventResults.snatch === 1
		];
	}

	execute(node) {
		let r = [];

		V.nextButton = "Continue";
		V.eventResults.snatch = 2;

		const snatched = GenerateNewSlave("XX", {maxAge: (V.pedo_mode === 1 ? V.minimumSlaveAge : 18), disableDisability: 1});
		if (V.pedo_mode === 1) {
			snatched.boobShape = "saggy";
			snatched.nipples = "partially inverted";
			snatched.areolae = 3;
			snatched.lips = 15;
			snatched.voice = 2;
			snatched.weight = 60;
			snatched.muscles = 0;
			snatched.shoulders = -2;
			snatched.hips = 0;
			snatched.waist = 10;
		} else {
			if (snatched.lips < 10) {
				snatched.lips += 5;
			}
			snatched.height = Height.random(snatched, {skew: 1, limitMult: [0, 2]});
			snatched.weight = 0;
			snatched.muscles = 20;
			snatched.waist = -75;
		}

		snatched.faceShape = (V.pedo_mode === 1 ? "exotic" : "androgynous");
		snatched.anus = 0;
		if (V.seeDicks !== 100) {
			snatched.vagina = 0;
			snatched.ovaries = 1;
		}
		if (V.seeDicks === 0) {
			snatched.dick = 0;
			snatched.balls = 0;
			snatched.scrotum = 0;
		} else if (V.seeDicks > 75) {
			snatched.dick = (V.pedo_mode === 1 ? 2 : 6);
			if (snatched.foreskin > 0) {
				snatched.foreskin = snatched.dick;
			}
			snatched.balls = 1;
			snatched.scrotum = snatched.balls;
		} else {
			snatched.dick = 1;
			snatched.foreskin = 1;
			snatched.balls = 1;
			snatched.scrotum = snatched.balls;
		}

		snatched.boobs += (V.pedo_mode === 1 ? 6000 : 200);
		snatched.butt += (V.pedo_mode === 1 ? 1 : 2);
		snatched.origin = "$He is your share of a raid on an illegal laboratory by your mercenaries.";
		snatched.career = "a slave";
		snatched.devotion = 100;
		snatched.trust = 100;
		setHealth(snatched, 250, 0, 0, 0, 0);
		snatched.face = 15;
		snatched.skill.vaginal = 0;
		snatched.skill.oral = 0;
		snatched.skill.anal = 0;
		snatched.skill.whoring = 0;
		snatched.skill.entertainment = 0;
		snatched.birthWeek = 0;
		snatched.hStyle = "shaved";
		snatched.hLength = 0;
		snatched.custom.desc = "$His skin is unnaturally perfect, totally without blemishes. $He radiates unnatural health and resilience.";
		snatched.custom.tattoo = "$He has a barcode tattooed on the top of $his head.";
		snatched.behavioralFlaw = "odd";
		snatched.fetish = "none";
		snatched.energy = 100;
		snatched.fetishKnown = 1;
		snatched.attrKnown = 1;
		if (snatched.physicalAge >= 12) {
			snatched.teeth = "normal";
		}
		snatched.pubicHStyle = "hairless";
		snatched.underArmHStyle = "hairless";

		snatched.slaveCost = -10000;

		const {
			he, himself
		} = getPronouns(snatched);

		r.push(`In the middle of the night, there is a polite knock on your penthouse door. You are alerted by ${V.assistant.name}, who observes`);
		if (V.assistant.personality === 1) {
			r.push(`with some irritation`);
		}
		r.push(`that the mercenary who knocked has gone, has left a large case outside the door, and has satisfied the security systems that the case contains nothing hazardous.`);

		r.push(`The case prompts you for a handprint code; your hand works just fine. It contains a naked, hairless, perfectly healthy young body in the fetal position. This person awakens as the case opens, looks you confidently in the eye, and says "Are you my`);
		if (V.PC.title !== 0) {
			r.push(`Master?"`);
		} else {
			r.push(`Mistress?"`);
		}

		r.push(`When you state that, apparently, you are, ${he} climbs out of the case, prostrates ${himself} in the hall before you, and says reverentially into the floor, "I love you,`);
		if (V.PC.title !== 0) {
			r.push(`Master."`);
		} else {
			r.push(`Mistress."`);
		}

		App.Events.addParagraph(node, r);
		node.append(App.Desc.longSlave(snatched));
		node.append(App.UI.newSlaveIntro(snatched));
	}
};


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

	get eventName() {
		return "Militia";
	}

	execute(node) {
		let r = [];
		const dronesTooCost = 5000;
		const selfAloneCost = 2000;
		r.push(`The outside world continues to deteriorate. The Free Cities are a popular target for old world demagogues looking for a convenient scapegoat for the restive populate to hate. The Free Cities were originally founded without much thought towards how they might be defended, should it come to that. But recently, the leading citizens have begun to worry that there might one day be barbarians at the gates. It has been suggested that citizens of means should form a militia.`);
		App.Events.addParagraph(node, r);
		r = [];

		r.push(`This is a less ludicrous suggestion than it might sound. Your arcology's security drones alone could form a formidable means of defense if adapted for that purpose. However, it's not likely that the anarchic Free Cities are going to ever make this anything more than a polite suggestion.`);
		App.Events.addParagraph(node, r);
		r = [];

		r.push(App.UI.DOM.makeElement("span", `This is a unique opportunity.`, "bold"));
		r.push(`Without this security scare, it's unlikely you could convince any of your free-spirited tenants to even stay near lethally armed drones.`);
		App.Events.addParagraph(node, r);

		const responses = [];
		if (V.arcologyUpgrade.drones === 1) {
			responses.push(new App.Events.Result(`Arm yourself and your drones`, armDrones, `This will cost ${cashFormat(dronesTooCost)}`));
		}
		responses.push(new App.Events.Result(`Arm yourself`, armOnlySelf, `This will cost ${cashFormat(selfAloneCost)}`));
		responses.push(new App.Events.Result(`Ignore this foolishness`, ignore));

		App.Events.addResponses(node, responses);

		function armDrones() {
			let r = [];
			r.push(`In a time of uncertainty, the public adores people who protect them. So, in addition to publicly procuring yourself the latest weapons and armor, you update the arcology's drone systems. The security drones' riot cannons can be replaced for easy maintenance, so it's rather easy to provide them with alternate, lethal weaponry that they can switch to if it becomes necessary. ${V.arcologies[0].name} becomes known as one of the best-protected in the Free Cities. Your reputation has greatly improved.`);
			unlock();
			repX(4000, "event");
			cashX(-dronesTooCost, "event");
			V.personalArms = 3;
			return r;
		}

		function armOnlySelf() {
			let r = [];
			r.push(`In a time of uncertainty, the public looks up to people who project strength. So, you purchase yourself some of the latest armor and weapons, and make sure they are visible in a glass-walled cabinet in your office. Many of your wealthier tenants follow suit. A few of them even emulate your example and practice using these implements once a week. Your reputation has improved.`);
			unlock();
			repX(1500, "event");
			cashX(-selfAloneCost, "event");
			V.personalArms = 1;
			return r;
		}

		function ignore() {
			let r = [];
			r.push(`No doubt this panicky fad will pass. You ignore the controversy. In a few days, the subject of a militia passes from the public mind.`);
			unlock();
			V.personalArms = 0;
			return r;
		}

		function unlock() {
			V.nextButton = "Continue";
			App.Utils.scheduleSidebarRefresh();
		}
	}
};


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

	eventPrerequisites() {
		return [
			() => App.Events.effectiveWeek() === 12,
			() => V.raped === -1,
			() => V.arcologyUpgrade.drones !== 1,
			() => V.BodyguardID === 0,
			() => V.PC.career !== "arcology owner",
			() => V.PC.visualAge < 14
		];
	}

	execute(node) {
		// disable Continue
		V.nextButton = " ";

		let r = [];
		const {
			girlP
		} = getPronouns(V.PC).appendSuffix("P");
		V.raped = 1;

		const contractCost = 1000;
		const genParam = {minAge: 22, race: "nonslave", disableDisability: 1};
		const abductor = GenerateNewSlave("XY", genParam);
		abductor.boobs = 100;
		abductor.skill.oral = 0;
		abductor.skill.anal = 0;
		abductor.muscles = Math.max(abductor.muscles, 40);
		abductor.origin = `You sentenced $him to enslavement for the attempted abduction of a child.`;
		abductor.devotion = -100;
		abductor.trust = -100;
		setHealth(abductor, jsRandom(-40, -20), normalRandInt(15, 3), undefined, 1, random(30, 80));
		abductor.anus = 0;
		abductor.behavioralFlaw = "arrogant";
		abductor.sexualFlaw = "judgemental";

		const {
			He,
			his, he, him
		} = getPronouns(abductor);

		r.push(`While returning from a meeting with a prospective investor, an unfortunate wrong turn has led you into a rather seedy area of your arcology. You feel distinctly uncomfortable for some reason. You suspicions are quickly confirmed as a bag is swung over your head. Your grab your assailant's wrists and struggle to keep them from completely engulfing you,`);

		if (overpowerCheck(abductor, V.PC) >= random(1, 100)) {
			r.push(`only to find that you're quite capable of keeping them at bay.`);
			V.raped = 0;
		} else {
			r.push(`only to find that you're far too outmatched to be able to hold them back.`);
		}
		if (V.raped === 0) { // fought back and got stabbed
			App.Events.addParagraph(node, r);
			r = [];
			V.fcnn.push("...is stable after altercation and plans for increased security measures following...");

			r.push(`You quickly manage to gain the upper hand, pulling yourself out of the bag and getting a good look at the would-be kidnapper. Being bested by a child was not in his plans and, short of options, draws a knife and drives it into your stomach. Realizing what he just did, he panics and flees, leaving you bleeding, his blade still stuck in you.`);
			if (V.PC.skill.medicine < 0) {
				r.push(`You cry out as you yank the weapon from your body, and clutching the gushing wound, hobble back the way you came — the way back to safety. The world spins as you lose consciousnesses.`);
				App.Events.addParagraph(node, r);
				r = [];
				r.push(`You awaken on a hard cot, staring face to face with a rather haggard looking man. You leap in shock, sending the man swearing and tearing your stitches open. As you regain composure, and get restitched, you realize that you are in a particularly shitty clinic known for their outrageous treatment fees. The wound was minor and should heal readily, but it will keep you out of commission for a little. `);
				if (V.PC.preg > 2 && V.PC.pregKnown) {
					r.push(`You're just glad it didn't harm your womb. This could have been a lot worse.`);
				}
				App.Events.addParagraph(node, r);
				r = [];
				r.push(`It would be prudent to up security in your arcology. That or take a guard along when you leave the penthouse. Your wallet might actually hurt more than your injury does, ${cashFormatColor(5000, true)} for crappy stitches, but at least you'll be on your feet again in a week.`);
				App.Events.addParagraph(node, r);
				cashX(-5000, "event");
			} else {
				r.push(`As much as it hurts, you steel yourself and apply pressure to the wound around the weapon before slowly hobbling back the way you came. It doesn't take long before someone comes rushing to your aid, and you've managed to keep your composure long enough to convey where you should be taken for medical treatment.`);
				App.Events.addParagraph(node, r);
				r = [];
				r.push(`You awaken in a nice, warm bed and are immediately greeted by a lovely buxom nurse; both familiar aspects of the clinic you've chosen for any serious medical emergencies. The wound was minor, only requiring some stitches, and should heal readily, but it will keep you out of commission for a little. At least the bill of ${cashFormatColor(1000, true)} isn't that bad.`);
				if (V.PC.preg > 2 && V.PC.pregKnown) {
					r.push(`You're just glad it didn't harm your womb. This could have been a lot worse.`);
				}
				App.Events.addParagraph(node, r);
				r = [];
				r.push(`It would be prudent to up security in your arcology. That or take a guard along when you leave the penthouse. You are undeniably a high-value target for wealthy collectors and would rather avoid any future attempts and or stabbings. Even with a full description of them, your assailant got away; there was just nobody interested in tracking him down.`);
				App.Events.addParagraph(node, r);
				cashX(-1000, "event");
			}
			node.append(App.UI.DOM.passageLink("Continue", V.nextLink));
			V.nextButton = "Continue";
			App.Utils.scheduleSidebarRefresh();
			V.PC.health.shortDamage = 2;
			V.PC.health.longDamage = 1;
		} else {
			r.push(`Once your vision is obscured, your attacker sweeps your legs and tosses you into a waiting crate.`);
			r.push(Spoken(abductor, `"Be a good little ${girlP} and keep quiet. Wouldn't want anything bad to happen to ya, eh? I'd really hate to damage the merchandise."`));
			r.push(`With nothing holding you, you slip the bag off yourself and assess the situation. Peeking from an airhole, you can see that you're being loaded on a dolly destined for the loading docks.`);
			App.Events.addParagraph(node, r);

			App.Events.addResponses(node, [
				new App.Events.Result("Scream for help", badEnd),
				new App.Events.Result("Remain calm", scream),
			]);
		}

		function badEnd() {
			const node = new DocumentFragment();
			let r = [];
			r.push(`You let loose a deafening shriek, desperate for someone to hear you.`);
			r.push(Spoken(abductor, `"I said SHUT IT you little bitch!"`));
			r.push(`Your head is bashed into the side of the box as your kidnapper kicks it, sending it and you tumbling to the floor.`);
			r.push(Spoken(abductor, `"Shit!"`));
			r.push(`Your abductor cursing and spitting is the last thing you hear before you lose consciousness.`);
			App.Events.addParagraph(node, r);

			r = [];
			r.push(`Once the realization strikes that you've gone missing, your arcology descends into lawlessness as the less than reputable clash to see who can seize control of building, at least until a new owner arrives to clean them out. An indeterminate amount of time later, a slave that looks a lot like the lost owner of ${V.arcologies[0].name} is seen; who's to say if it is you, or somebody else though? The story of your new life may be worth telling, but it must be told elsewhere.`);
			App.Events.addParagraph(node, r);

			App.Events.addParagraph(node, ["GAME OVER"]);
			V.ui = "start";
			App.Utils.scheduleSidebarRefresh();
			return node;
		}

		function scream() {
			const node = new DocumentFragment();
			let bounty = 500 * random(3, 6);
			let r = [];
			r.push(`Calling for help when it's just you and your abductor is nothing short of an invitation for trouble, so you keep your mouth shut and wait for an opportunity. There's only so many ways in and out of the arcology, and there's bound to be people going about their business through them at this hour. After an uncomfortably cramped ride and having to put up with your captive merrily humming to himself and arriving at a suitably populated loading dock, the thought occurs to you; what if they don't believe you are anything more than an unbroken slave?`);
			if (V.PC.actualAge < V.minimumSlaveAge) {
				r.push(`Fortunately, you are actually underage, so your screams for help quickly attract concerned workers. They corner the man and pry the lid off your box, allowing you to clamber back onto solid ground. Your would-be captor makes a short lived escape attempt straight into a fist once he realizes his plans are ruined. He's quickly tied up and presented to you for revenge.`);
				abductor.minorInjury = "black eye";
			} else {
				r.push(`Sometimes simple is better, so you scream out that you're being kidnapped and will give ${cashFormat(500)} to anyone that assures your return to safety. The prospect of easy money quickly has your captor tackled and you freed and helped to your feet. It may have costed you ${cashFormatColor(bounty, true)}, but the sight of the man groveling at your feet for mercy is worth it.`);
				cashX(-bounty, "event");
			}
			App.Events.addParagraph(node, r);
			r = [];
			r.push(`It would be prudent to up security in your arcology. That or take a guard along when you leave the penthouse. You are undeniably a high-value target for wealthy collectors and would rather avoid the indignity of being crammed in a box again.`);
			App.Events.addParagraph(node, r);
			V.nextButton = "Continue";
			App.Utils.scheduleSidebarRefresh();
			V.fcnn.push("...plans for increased security measures following the unsuccessful abduction of...");

			App.UI.DOM.appendNewElement("div", node, `Now the only remaining question is what to do with the would-be kidnapper. You could toss them out of the arcology, but it might be more fun to turn the tables on ${him}.`);

			let slaveCosts = slaveCost(abductor);
			slaveCosts -= contractCost;
			App.UI.DOM.appendNewElement("div", node, `Applying enslavement as punishment will cost ${cashFormat(contractCost)}. Doing so and then selling ${him} immediately will bring in approximately ${cashFormat(slaveCosts)}.`, "note");

			node.append(App.Desc.longSlave(abductor, {market: "generic"}));
			const choices = [];
			if (V.cash >= contractCost) {
				choices.push(new App.Events.Result(`Enslave ${him}`, enslave));
				choices.push(new App.Events.Result(`Sentence ${him} to a day in the stocks, then enslave ${him}`, stocks));
				if (V.arcade > 0) {
					choices.push(new App.Events.Result(`Enslave ${him} and sentence ${him} to a month in the arcade`, arcade));
				}
				if (V.dairy > 0 && V.dairyRestraintsSetting > 1) {
					choices.push(new App.Events.Result(`Enslave ${him} and send ${him} straight to the industrial dairy`, dairy));
				}
				if (V.farmyard > 0) {
					choices.push(new App.Events.Result(`Enslave ${him} and send ${him} straight to the farmyard`, farmyard));
				}
				if (V.seeExtreme > 0) {
					choices.push(new App.Events.Result(`Punitively amputate ${his} limbs, and then enslave ${him}`, amputate));
				}
			} else {
				choices.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave ${him}.`));
			}
			choices.push(new App.Events.Result(`Publicly flog the criminal`, flog));
			App.Events.addResponses(node, choices);
			return node;

			function enslave() {
				const el = new DocumentFragment();
				cashX(forceNeg(contractCost), "slaveTransfer", abductor);
				el.append(`You complete the legalities and biometric scanning quickly and without fuss. The idiot will regret crossing you when ${he} wakes in the penthouse for basic slave induction.`);
				el.append(App.UI.newSlaveIntro(abductor));
				return el;
			}

			function stocks() {
				const el = new DocumentFragment();
				const r = [];
				healthDamage(abductor, 10);
				abductor.behavioralFlaw = "odd";
				abductor.sexualFlaw = "hates penetration";
				abductor.anus = 2;
				seX(abductor, "oral", "public", "penetrative", 23);
				seX(abductor, "anal", "public", "penetrative", 12);
				if (abductor.vagina > -1) {
					abductor.vagina = 2;
					seX(abductor, "vaginal", "public", "penetrative", 12);
					if (random(1, 100) > 60 && isFertile(abductor)) {
						knockMeUp(abductor, 100, 0, -2);
					}
				} else {
					seX(abductor, "anal", "public", "penetrative", 12);/* even more anal */
				}
				cashX(forceNeg(contractCost), "slaveTransfer", abductor);

				r.push(`You declare ${his} holes fair game for the entire arcology. ${He} spends a torturous day in the stocks before being hauled in for enslavement, somewhat the worse for wear and acting oddly due to ${his} ordeal, bruises all over ${his} body, cum leaking from ${his} loosened anus${(abductor.vagina > -1) ? ` and <span class="lime">fucked-out</span> pussy` : ``}. The public enjoys the fun.`);
				repX(500, "event");
				V.arcologies[0].prosperity += 2;
				r.push(App.UI.newSlaveIntro(abductor));
				App.Events.addParagraph(el, r);
				return el;
			}

			function arcade() {
				assignJob(abductor, "be confined in the arcade");
				abductor.sentence = 4;
				cashX(forceNeg(contractCost), "slaveTransfer", abductor);
				newSlave(abductor);/* skip New Slave Intro */
				return `You complete the legalities and biometric scanning quickly and cautiously. The idiot will be in for a surprise when ${he} awakes to find ${he} can't move and a dick is in ${his} ass.`;
			}

			function dairy() {
				const el = new DocumentFragment();
				const r = [];
				assignJob(abductor, "work in the dairy");
				cashX(forceNeg(contractCost), "slaveTransfer", abductor);
				r.push(`You complete the legalities and biometric scanning quickly and cautiously. The idiot will wake up`);
				if (V.dairyStimulatorsSetting > 1) {
					r.push(`in agony as ${his} anus takes the rectal hydration dildo.`);
				} else {
					r.push(`to find ${his} chest has begun swelling with milk.`);
				}
				abductor.boobs += 300;
				newSlave(abductor); /* skip New Slave Intro */
				App.Events.addNode(el, r);
				return el;
			}

			function farmyard() {
				const el = new DocumentFragment();
				const r = [];
				assignJob(abductor, "work as a farmhand");
				cashX(forceNeg(contractCost), "slaveTransfer", abductor);
				r.push(`You complete the legalities and biometric scanning quickly and cautiously. The idiot will wake up in ${V.farmyardName}, where ${he} will spend the rest of ${his} days working the fields`);
				if (V.farmyardShows === 1) {
					r.push(`and`);
					if (V.seeBestiality === 1) {
						r.push(`getting fucked by animals.`);
					} else {
						r.push(`putting on shows with animals.`);
					}
				}
				newSlave(abductor);/* skip New Slave Intro */
				App.Events.addNode(el, r);
				return el;
			}

			function amputate() {
				const el = new DocumentFragment();
				const r = [];
				healthDamage(abductor, 20);
				removeLimbs(abductor, "all");
				abductor.behavioralFlaw = "odd";
				cashX(forceNeg(contractCost), "slaveTransfer", abductor);
				r.push(`You want ${him} to suffer for what ${he} tried to pull on you. You make sure ${he} is fully awake as ${he} is strapped into the autosurgery. You take great pleasure in watching ${him} struggle as ${his} limbs are taken, one by one. Of course, ${his} health is affected and the horrible experience has left ${him} acting oddly. After ${he} has stabilized, it's off to the penthouse for basic slave induction. You'd like to see ${him} try and carry you off again without arms and legs.`);
				if (abductor.balls > 0) {
					const geld = function() {
						const el = new DocumentFragment();
						const r = [];
						healthDamage(abductor, 20);
						abductor.balls = 0;
						abductor.devotion -= 25;
						abductor.trust -= 25;
						cashX(forceNeg(contractCost), "slaveTransfer", abductor);
						r.push(`You want ${him} to suffer for what ${he} tried to pull on you. You make sure ${he} is fully awake as ${he} is strapped into the autosurgery, taking the time to roughly fondle ${his} balls. You take great pleasure in watching ${him} struggle as ${his} testicles are removed. Once ${he} can stand again, it's off to the penthouse for basic slave induction.`);
						r.push(App.UI.newSlaveIntro(abductor));
						App.Events.addNode(el, r);
						return el;
					};
					App.Events.addResponses(el, [new App.Events.Result(`Enslave the criminal and geld ${him}`, geld)]);
				}
				App.Events.addNode(el, r);
				return el;
			}

			function flog() {
				const el = new DocumentFragment();
				const r = [];
				r.push(`Naturally, the wretch will be thrown out of the arcology, but an example must first be made. Free people must understand that criminals who commit outrages against them will be severely punished. The protesting malefactor is stripped and flogged on the promenade before being escorted bleeding from the arcology. The public approves of this harshness.`);
				repX(500, "event");
				App.Events.addNode(el, r);
				return el;
			}
		}
	}
};


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

	actorPrerequisites() {
		return [];
	}

	eventPrerequisites() {
		return [
			() => V.plot === 1,
			() => V.week >= 29,
			() => !V.eventResults.hasOwnProperty("aid")
		];
	}

	execute(node) {
		const trapped = [];
		let r = [];
		V.eventResults.aid = 0; // Mark event as seen.
		if (V.seeDicks <= 75) {
			trapped.push("convent");
			trapped.push("school");
			trapped.push("housewives");
			trapped.push("volleyballTeam");
			if (V.seePreg !== 0) {
				trapped.push("maternity");
				if (V.continent === "Africa") {
					trapped.push("seizedMission");
				}
			}
		}
		if (V.seeDicks >= 25) {
			trapped.push("conversion");
		}
		trapped.push("gradeSchool");
		V.eventResults.aidTarget = trapped.random();

		r.push(`A small old world country near the arcology is experiencing serious unrest. Its corrupt government is doing an even poorer job than most of addressing chronic joblessness and general malaise. Thus far, it's been a fertile source of people in poverty for slavers to target, and little else. Lately, though, it's been showing signs worse may be to come. You've instructed ${V.assistant.name} to flag communications from the area; there's always a possibility that business opportunities may arise from the benighted country, and the situation is becoming so unstable it's prudent to keep a personal eye on it anyway. You receive just such a call from`);
		if (V.eventResults.aidTarget === "convent") {
			r.push(`the leader of a female-oriented religious retreat`);
		} else if (V.eventResults.aidTarget === "school") {
			r.push(`the principal of a preparatory school for girls`);
		} else if (V.eventResults.aidTarget === "housewives") {
			r.push(`the queen bee of a small group of suburban housewives`);
		} else if (V.eventResults.aidTarget === "maternity") {
			r.push(`the maternity ward of a hospital`);
		} else if (V.eventResults.aidTarget === "conversion") {
			r.push(`the owner of a religious sexual orientation therapy camp`);
		} else if (V.eventResults.aidTarget === "gradeSchool") {
			r.push(`a student stranded`);
		} else if (V.eventResults.aidTarget === "volleyballTeam") {
			r.push(`a student athlete`);
		} else if (V.eventResults.aidTarget === "seizedMission") {
			r.push(`the leader of a group of missionaries`);
		}
		r.push(`in the capital city.`);
		App.Events.addParagraph(node, r);
		r = [];
		if (V.eventResults.aidTarget !== "seizedMission") {
			r.push(`They are deeply worried by the situation. There have been large riots over the past week, and yesterday they became seriously violent. The unrest is targeting`);
			if (V.eventResults.aidTarget === "convent") {
				r.push(`better-off citizens, including the caller. Though most of the nuns have already left, the leader and a few of her women are now stuck in the area and are running out of options as the riots lock down transportation.`);
			} else if (V.eventResults.aidTarget === "school") {
				r.push(`better-off citizens, including the caller. Though most of the students and faculty have already made it out, the principal and a few students are now stuck in the area and are running out of options as the riots lock down transportation.`);
			} else if (V.eventResults.aidTarget === "housewives") {
				r.push(`better-off citizens, including the caller. Though most of them have taken flights out, the leader and a few of them are now stuck in the area and are running out of options as the riots lock down transportation.`);
			} else if (V.eventResults.aidTarget === "maternity") {
				r.push(`better-off citizens, including the caller. Though most of the patients have already left, several of the most pregnant are now stuck in the area and are running out of options as the riots lock down transportation.`);
			} else if (V.eventResults.aidTarget === "conversion") {
				r.push(`better-off citizens, including the caller. Though most of the camp's inmates have already left, a few of them and the owner are now stuck in the area and are running out of options as the riots lock down transportation.`);
			} else if (V.eventResults.aidTarget === "gradeSchool") {
				r.push(`better-off citizens, including the caller. Though most of the other students and faculty escaped, a few of the students are now stuck in the school and are running out of options as the riots steadily creep closer to the grounds.`);
			} else if (V.eventResults.aidTarget === "volleyballTeam") {
				r.push(`vulnerable citizens, including the caller. Their bus broke down on the way to the championship game and all those that have left to get help have not returned. She and her several remaining teammates are running out of options as those looking for easy targets creep ever closer.`);
			}
		} else {
			r.push(`After years of constant rape and abuse, an opening finally arrived for escape when a rival faction raided the decaying church they were stored in, however the situation outside isn't much better. Violent riots are taking place and the mobs are eagerly snatching up what ever loot and women they can get their hands on. She and the remaining women are trapped and in no condition to run; most particularly the youngest of the group who is ripe with child, though she herself and one of the others are also carrying their rapists' babies. They are completely out of options as the looters work their way down the city streets.`);
		}
		r.push(`They beg you to help evacuate them, and promise to pay you once they're out.`);
		App.Events.addParagraph(node, r);
		const price = 10000;

		App.Events.addResponses(node, [
			new App.Events.Result(`Agree`, agree),
			new App.Events.Result(`Do it for free`, free),
			new App.Events.Result(`Airlift them into slavery`, enslave, `This will cost ${cashFormat(price)}`),
		]);

		function agree() {
			const r = [];
			const el = new DocumentFragment();
			cashX(2000, "event");
			repX(1000, "event");
			r.push(`You dispatch your personal VTOL bird immediately. It lands`);
			if (V.eventResults.aidTarget === "volleyballTeam") {
				r.push(`beside the bus`);
			} else {
				r.push(`on the roof of the building`);
			}
			r.push(`they're sheltering in, and brings them across the closest border and into a more functional country. You receive a call expressing their heartfelt thanks and promising to spread the word about how you helped them escape, and a wire transfer of their payment for the airlift.`);
			V.eventResults.aid = -1;
			App.Events.addParagraph(el, r);
			return el;
		}

		function free() {
			const r = [];
			const el = new DocumentFragment();
			repX(2500, "event");
			r.push(`You dispatch your personal VTOL bird immediately. It lands`);
			if (V.eventResults.aidTarget === "volleyballTeam") {
				r.push(`beside the bus`);
			} else {
				r.push(`on the roof of the building`);
			}
			r.push(`they're sheltering in, and brings them across the closest border and into a more functional country. You receive a call expressing their heartfelt thanks, and when you refuse their payment for the airlift, they tearfully promise to tell the story of how you extended charity to those in need, belying the rumors about slaveowners.`);
			V.eventResults.aid = -1;
			App.Events.addParagraph(el, r);
			return el;
		}

		function enslave() {
			const r = [];
			const el = new DocumentFragment();
			r.push(`You send your personal VTOL bird to the shop for some immediate and very expensive modifications to its cargo and passenger area. Since this will take several days, you stall the supplicants.`);
			if (V.eventResults.aidTarget === "volleyballTeam") {
				r.push(`A few of the girls decide to leave, but the sight of them pushed against the wall of a nearby building, toned bodies glistening with sweat and seed as their captors rape them into submission, keep the rest happy to stay on the bus. Those that remained`);
			} else {
				r.push(`Their situation isn't truly dire yet, and they can wait. They`);
			}
			r.push(`are extremely grateful, though they would be less hopeful if they knew the true nature of the aircraft coming to retrieve them.`);
			V.eventResults.aid = 1;
			App.Events.queueEvent(1, new App.Events.pAidResult());
			cashX(forceNeg(price), "event");
			App.Events.addParagraph(el, r);
			return el;
		}
		return node;
	}
};


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

	eventPrerequisites() {
		return []; // always run if queued
	}

	execute(node) {
		let r = [];
		V.eventResults.aid = 2;
		V.nationHate += 2;
		r.push(`You watch on the feeds from your VTOL craft as it settles`);
		if (V.eventResults.aidTarget === "volleyballTeam") {
			r.push(`beside`);
		} else {
			r.push(`onto the roof of`);
		}
		r.push(`the`);
		if (V.eventResults.aidTarget === "convent") {
			r.push(`convent whose remaining women`);
		} else if (V.eventResults.aidTarget === "school") {
			r.push(`girls' school whose remaining students and principal`);
		} else if (V.eventResults.aidTarget === "housewives") {
			r.push(`mansion of the leader of the group of housewives`);
		} else if (V.eventResults.aidTarget === "maternity") {
			r.push(`maternity ward whose remaining patients`);
		} else if (V.eventResults.aidTarget === "conversion") {
			r.push(`religious sexual orientation therapy camp whose inmates and owner`);
		} else if (V.eventResults.aidTarget === "gradeSchool") {
			r.push(`school whose students`);
		} else if (V.eventResults.aidTarget === "volleyballTeam") {
			r.push(`bus whose athletes`);
		} else if (V.eventResults.aidTarget === "seizedMission") {
			r.push(`building the raped missionaries`);
		}
		r.push(`you promised to rescue${(V.eventResults.aidTarget === "seizedMission") ? ` were holed up in` : ``}. Its side doors retract, allowing the escapees to hustle aboard with their bundles of personal possessions. Once they're on board and strapped into their seats, the turbofans howl and the craft peels smoothly off the roof, the hot jet wash setting it alight. Once it transitions fully into level flight, the true plan goes into operation. At a carefully selected moment, injectors concealed within each seat lance into the passengers' buttocks, knocking them out. It works flawlessly, the drugs precisely calibrated to each body based on the weight added to the VTOL as each climbed aboard. This avoids the potential for over- or under-dosage present when using gas or darts to subdue groups. In perfect unison, the passengers slump against the harnesses holding them against the seats.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`When the aircraft lands at your penthouse pad, the would-be escapees are still unconscious. This makes putting them through enslavement physically laborious, though it does cut down on the usual whining; fortunately, you reserved the credits necessary to obscure their questionably legitimate enslavement. By the time they awake, they'll be indistinguishable from any other new slave in the arcology. The possibility remains, however that rumor of the incident will leak out. Your VTOL bird's entry and exit from the capital city was likely noticed and remarked upon.`);
		App.Events.addParagraph(node, r);
		r = [];
		const newSlaves = [];
		let slave;
		if (V.eventResults.aidTarget === "convent") {
			slave = GenerateNewSlave("XX", {minAge: 30, maxAge: 42, disableDisability: 1});
			slave.origin = "$He was the head of a religious community of women you enslaved.";
			slave.career = "a nun";
			slave.devotion = -20;
			slave.trust = random(-90, -75);
			setHealth(slave, jsRandom(-10, 10), undefined, undefined, undefined, 0);
			slave.face = 15;
			slave.anus = 0;
			slave.vagina = 0;
			slave.weight = random(20, 140);
			slave.attrXX = random(60, 90);
			slave.attrXY = random(10, 50);
			slave.energy = random(60, 80);
			slave.skill.vaginal = 0;
			slave.skill.oral = 35;
			slave.skill.anal = 0;
			slave.skill.whoring = 0;
			slave.skill.entertainment = 0;
			slave.pubicHStyle = "bushy";
			slave.fetish = "dom";
			slave.behavioralFlaw = "devout";
			slave.sexualFlaw = "repressed";
			slave.sexualQuirk = "perverted";
			newSlaves.push(slave);
			const {His} = getPronouns(slave);
			r.push(`In any case, you've enslaved a fine group. The leader is on the older side, but not unattractive. ${His} girls are younger, and probably have all sorts of delightful repressed tendencies to be manipulated.`);
			for (let i = 0; i < 3; i++) {
				slave = GenerateNewSlave("XX", {minAge: 18, maxAge: 24});
				slave.origin = "$He was an initiate in a religious community of women you enslaved.";
				slave.career = "a nun";
				slave.devotion = random(-90, -75);
				slave.trust = -20;
				setHealth(slave, jsRandom(-10, 10), undefined, undefined, undefined, 20);
				slave.anus = 0;
				slave.vagina = 0;
				slave.weight = random(-20, -100);
				slave.attrXX = random(10, 50);
				slave.attrXY = random(10, 50);
				slave.energy = random(5, 20);
				slave.skill.vaginal = 0;
				slave.skill.oral = 15;
				slave.skill.anal = 0;
				slave.skill.whoring = 0;
				slave.skill.entertainment = 0;
				slave.pubicHStyle = "bushy";
				slave.behavioralFlaw = "devout";
				slave.sexualFlaw = "repressed";
				newSlaves.push(slave);
			}
		} else if (V.eventResults.aidTarget === "school") {
			slave = GenerateNewSlave("XX", {minAge: 26, maxAge: 42, disableDisability: 1});
			slave.origin = "$He was the principal of a girls' school whose remnants you enslaved. A strap-on and a large quantity of personal lubricant were found in $his possession when $he was enslaved.";
			slave.intelligence = random(16, 80);
			slave.intelligenceImplant = 15;
			slave.teeth = "normal";
			slave.career = "a principal";
			slave.devotion = -20;
			slave.trust = random(-90, -75);
			setHealth(slave, jsRandom(-10, 10), undefined, undefined, undefined, 0);
			slave.anus = 1;
			slave.vagina = 1;
			slave.weight = random(20, 80);
			slave.attrXX = random(60, 90);
			slave.attrXY = random(10, 50);
			slave.energy = random(60, 80);
			slave.skill.vaginal = 15;
			slave.skill.oral = 15;
			slave.skill.anal = 15;
			slave.skill.whoring = 0;
			slave.skill.entertainment = 15;
			slave.pubicHStyle = "waxed";
			slave.fetish = "dom";
			slave.behavioralFlaw = either("arrogant", "bitchy", "hates men", "hates men", "liberated");
			slave.sexualFlaw = "shamefast";
			newSlaves.push(slave);
			const {his} = getPronouns(slave);
			r.push(`In any case, you've enslaved a fine group. The principal is on the older side, and seems to have paid unusually close attention to ${his} appearance, for the female principal of a girls' school. And for whatever reason, the school's uniform skirt seems to have been rather short in back.`);
			for (let i = 0; i < 3; i++) {
				slave = GenerateNewSlave("XX", {maxAge: 18, disableDisability: 1});
				slave.origin = "$He was a student at a girls' school whose remnants you enslaved.";
				slave.career = "a student";
				generateSalonModifications(slave);
				slave.devotion = random(-90, -75);
				slave.trust = -20;
				setHealth(slave, jsRandom(-10, 10), undefined, undefined, undefined, 10);
				slave.anus = 1;
				slave.vagina = either(0, 0, 1);
				slave.weight = random(-50, 0);
				slave.attrXX = 70;
				slave.attrXY = random(10, 70);
				slave.energy = random(50, 70);
				slave.skill.vaginal = 0;
				slave.skill.oral = 0;
				slave.skill.anal = 15;
				slave.skill.whoring = 0;
				slave.skill.entertainment = 0;
				slave.fetish = "buttslut";
				slave.behavioralFlaw = either("anorexic", "arrogant", "bitchy");
				slave.sexualFlaw = either("hates anal", "idealistic", "shamefast");
				newSlaves.push(slave);
			}
		} else if (V.eventResults.aidTarget === "maternity") {
			for (let i = 0; i < 4; i++) {
				const pram = {mature: 0, disableDisability: 1, ageOverridesPedoMode: 1};
				if (V.pedo_mode === 1) {
					pram.minAge = V.fertilityAge;
				} else {
					pram.minAge = 20;
					pram.maxAge = 39;
				}
				slave = GenerateNewSlave("XX", pram);
				slave.origin = "$He was an expectant mother you enslaved when you evacuated $him from a threatened old world hospital.";
				slave.career = "a housewife";
				slave.devotion = random(-90, -75);
				slave.trust = -20;
				slave.preg = random(28, 40);
				slave.pregType = either(1, 1, 1, 1, 1, 1, 2);
				slave.pregKnown = 1;
				slave.pregWeek = slave.preg;
				SetBellySize(slave);
				setHealth(slave, jsRandom(-10, 10), undefined, undefined, undefined, 50);
				slave.vagina = random(1, 3);
				slave.boobs += 100 * random(0, 2);
				slave.lactation = 1;
				slave.lactationDuration = 2;
				slave.nipples = either("cute", "inverted", "partially inverted", "puffy");
				newSlaves.push(slave);
			}
			r.push(`In any case, you've enslaved a fine group. The expectant mothers vary widely; the only thing they have in common is their gravid bellies. None of them are in really serious condition, either, and they should bear the transition to slave life reasonably well despite their pregnancies.`);
		} else if (V.eventResults.aidTarget === "gradeSchool") {
			r.push(`In any case, you've enslaved a fine group. The girls are all within a similar age range, young, and healthy. Their youth and vigor should make them quite popular.`);
			for (let i = 0; i < 4; i++) {
				const pram = {disableDisability: 1, ageOverridesPedoMode: 1};
				if (V.minimumSlaveAge <= 7) {
					pram.minAge = 7;
					pram.maxAge = 10;
				} else if (V.minimumSlaveAge <= 11) {
					pram.minAge = 11;
					pram.maxAge = 14;
				} else if (V.minimumSlaveAge <= 15) {
					pram.minAge = 15;
					pram.maxAge = 18;
				} else {
					pram.minAge = 18;
					pram.maxAge = 18;
				}
				slave = GenerateNewSlave(null, pram);
				slave.origin = "$He was a student you enslaved when you evacuated $him from a threatened old world grade school.";
				slave.career = "a student";
				generateSalonModifications(slave);
				slave.devotion = random(-90, -75);
				slave.trust = random(-90, -75);
				setHealth(slave, jsRandom(-10, 10), undefined, undefined, 0, jsRandom(40, 70));
				newSlaves.push(slave);
			}
		} else if (V.eventResults.aidTarget === "conversion") {
			r.push(`In any case, you've enslaved a fine group. Certain religious groups persist in the hilarious delusion that it's possible to alter sexual orientation through prayer. In your experience, hormones, drugs, and compliance training are far more effective.`);
			slave = GenerateNewSlave("XY", {disableDisability: 1, minAge: 26, maxAge: 42});
			slave.origin = "$He was the owner of a religious orientation conversion therapy camp whose remnants you enslaved.";
			slave.career = "a business owner";
			slave.devotion = -20;
			slave.trust = random(-90, -75);
			setHealth(slave, jsRandom(-10, 10), undefined, undefined, undefined, 0);
			slave.anus = random(2, 3);
			slave.weight = random(20, 80);
			slave.attrXX = random(10, 50);
			slave.attrXY = 90;
			slave.energy = random(30, 80);
			slave.skill.oral = random(50, 100);
			slave.skill.anal = random(50, 100);
			slave.skill.whoring = 0;
			slave.skill.entertainment = random(15, 40);
			slave.pubicHStyle = "waxed";
			slave.fetish = either("submissive", "cumslut", "buttslut");
			slave.fetishStrength = random(1, 2);
			slave.behavioralFlaw = either("arrogant", "bitchy", "hates women", "odd", "liberated");
			slave.sexualFlaw = either("repressed", "shamefast");
			newSlaves.push(slave);
			for (let i = 0; i < 3; i++) {
				slave = GenerateNewSlave("XY", {disableDisability: 1, minAge: 16, maxAge: 18});
				slave.origin = "$He was an inmate at a religious orientation conversion therapy camp whose remnants you enslaved.";
				slave.career = "a student";
				slave.devotion = random(-90, -75);
				slave.trust = -20;
				setHealth(slave, jsRandom(-10, 10), undefined, undefined, undefined, 20);
				slave.anus = 1;
				slave.weight = random(-50, 0);
				slave.attrXX = random(10, 50);
				slave.attrXY = random(60, 90);
				slave.energy = random(30, 70);
				slave.skill.oral = random(15, 40);
				slave.skill.anal = random(15, 40);
				slave.skill.whoring = 0;
				slave.skill.entertainment = 0;
				slave.fetish = "buttslut";
				slave.behavioralFlaw = either("anorexic", "bitchy", "devout", "odd");
				slave.sexualFlaw = either("apathetic", "repressed", "shamefast");
				newSlaves.push(slave);
			}
		} else if (V.eventResults.aidTarget === "volleyballTeam") {
			r.push(`In any case, you've enslaved a fine group. The girls are in fine health, fit and just past their majority, likely the reason any that stepped off the bus were promptly abducted. Their youth and vigor should make them quite popular, as will their experience with handling balls.`);
			for (let i = 0; i < 4; i++) {
				slave = GenerateNewSlave("XX", {
					disableDisability: 1, ageOverridesPedoMode: 1, minAge: 18, maxAge: 18
				});
				slave.height = Height.random(slave, {skew: 1, limitMult: [0, 2]});
				slave.origin = "$He was a volleyball player you enslaved when you evacuated $him from a broken down bus.";
				slave.career = "a student athlete";
				generateSalonModifications(slave);
				slave.devotion = random(-90, -75);
				slave.trust = random(-90, -75);
				setHealth(slave, jsRandom(20, 60), 0, 0, undefined, 90);
				slave.muscles = random(20, 40);
				slave.weight = random(-10, 5);
				slave.waist = random(-40, 0);
				slave.boobs = random(3, 5) * 100;
				slave.butt = random(1, 2);
				newSlaves.push(slave);
			}
		} else if (V.eventResults.aidTarget === "seizedMission") {
			/* leader */
			let pram = new GenerateNewSlavePram();
			pram.mature = 0;
			pram.disableDisability = 1;
			pram.ageOverridesPedoMode = 1;
			pram.race = "white";
			if (V.pedo_mode === 1) {
				pram.minAge = 18;
				pram.maxAge = 24;
			} else {
				pram.minAge = 25;
				pram.maxAge = 39;
			}
			let missLeader = GenerateNewSlave("XX", pram);
			missLeader.origin = "$He was the head nun of a conquered mission. Once claimed, $he was reduced to nothing more than a cum dump for $his black masters.";
			missLeader.career = "a nun";
			missLeader.intelligence = random(16, 80);
			missLeader.intelligenceImplant = 15;
			missLeader.devotion = 40;
			missLeader.trust = random(0, 40);
			setHealth(missLeader, jsRandom(-50, 10), normalRandInt(15, 3), undefined, undefined, 60);
			missLeader.anus = 3;
			missLeader.vagina = 5;
			missLeader.weight = random(-80, -20);
			missLeader.muscles = random(-20, 0);
			missLeader.waist = random(-40, 0);
			missLeader.attrXY = random(0, 10);
			missLeader.energy = random(0, 20);
			missLeader.skill.vaginal = 50;
			missLeader.skill.oral = 75;
			missLeader.skill.anal = 25;
			missLeader.pubicHStyle = "bushy";
			missLeader.underArmHStyle = "bushy";
			missLeader.preg = random(15, 25);
			missLeader.pregType = 1;
			missLeader.pregKnown = 1;
			missLeader.pregWeek = missLeader.preg;
			SetBellySize(missLeader);
			WombFatherRace(missLeader, "black");
			missLeader.counter.birthsTotal = 3;
			missLeader.bellySag = 5;
			missLeader.bellySagPreg = 5;
			missLeader.boobs += 100 * random(1, 3);
			missLeader.lactation = 1;
			missLeader.lactationDuration = 2;
			missLeader.boobShape = "saggy";
			missLeader.nipples = "huge";
			newSlaves.push(missLeader);

			/* preggo */
			pram = {disableDisability: 1, ageOverridesPedoMode: 1, race: "white"};
			if (V.pedo_mode === 1) {
				pram.minAge = 16;
				pram.maxAge = 18;
			} else {
				pram.minAge = 18;
				pram.maxAge = 24;
			}
			slave = GenerateNewSlave("XX", pram);
			slave.origin = "$He was a nun in a felled mission. Once claimed, $he was reduced to nothing more than a cum dump for $his black masters.";
			slave.career = "a nun";
			slave.intelligenceImplant = 15;
			slave.devotion = 30;
			slave.trust = random(-20, 20);
			setHealth(slave, jsRandom(-60, -10), normalRandInt(15, 3), undefined, undefined, 40);
			slave.anus = 3;
			slave.vagina = 4;
			slave.weight = random(-90, -20);
			slave.muscles = random(-50, -20);
			slave.waist = random(-40, 0);
			slave.attrXY = random(0, 10);
			slave.energy = random(0, 20);
			slave.skill.vaginal = 50;
			slave.skill.oral = 75;
			slave.skill.anal = 25;
			slave.pubicHStyle = "bushy";
			slave.underArmHStyle = "bushy";
			slave.preg = random(30, 35);
			slave.pregType = 1;
			slave.pregKnown = 1;
			slave.pregWeek = slave.preg;
			SetBellySize(slave);
			WombFatherRace(slave, "black");
			slave.counter.birthsTotal = 3;
			slave.bellySag = 5;
			slave.bellySagPreg = 5;
			slave.boobs += 100 * random(0, 2);
			slave.lactation = 1;
			slave.lactationDuration = 2;
			slave.boobShape = "saggy";
			slave.nipples = either("cute", "puffy");
			newSlaves.push(slave);

			/* post preggo */
			pram = {disableDisability: 1, ageOverridesPedoMode: 1, race: "white"};
			if (V.pedo_mode === 1) {
				pram.minAge = 16;
				pram.maxAge = 18;
			} else {
				pram.minAge = 19;
				pram.maxAge = 22;
			}
			slave = GenerateNewSlave("XX", pram);
			slave.origin = "$He was a nun in a felled mission. Once claimed, $he was reduced to nothing more than a cum dump for $his black masters.";
			slave.career = "a nun";
			slave.devotion = 50;
			slave.trust = random(0, 50);
			setHealth(slave, jsRandom(-90, -50), normalRandInt(15, 3), undefined, undefined, 80);
			slave.anus = 3;
			slave.vagina = 5;
			slave.weight = random(-90, -60);
			slave.muscles = random(-70, -20);
			slave.waist = random(-10, 0);
			slave.attrXY = random(0, 10);
			slave.energy = random(0, 20);
			slave.skill.vaginal = 50;
			slave.skill.oral = 75;
			slave.skill.anal = 25;
			slave.pubicHStyle = "bushy";
			slave.underArmHStyle = "bushy";
			slave.preg = 0;
			slave.pregWeek = -3;
			slave.counter.birthsTotal = 2;
			slave.bellySag = 5;
			slave.bellySagPreg = 5;
			slave.boobs += 100 * random(1, 3);
			slave.lactation = 1;
			slave.lactationDuration = 1;
			slave.boobsMilk = 200;
			slave.boobs += slave.boobsMilk;
			slave.boobShape = "saggy";
			slave.nipples = either("cute", "puffy");
			newSlaves.push(slave);

			/* young preggo*/
			pram = {disableDisability: 1, ageOverridesPedoMode: 1, race: "white"};
			if (V.minimumSlaveAge < V.fertilityAge) {
				if (V.minimumSlaveAge < 8) {
					pram.minAge = 8;
					pram.maxAge = 8;
				} else {
					pram.minAge = V.fertilityAge;
					pram.maxAge = V.fertilityAge;
				}
			} else {
				if (V.fertilityAge < 8) {
					pram.minAge = 8;
					pram.maxAge = 8;
				} else {
					pram.minAge = V.minimumSlaveAge;
					pram.maxAge = V.minimumSlaveAge;
				}
			}
			const missLoli = GenerateNewSlave("XX", pram);
			missLoli.origin = "$He was a fucktoy held in a felled mission. $He was nothing more than a cum dump to $his black masters.";
			missLoli.career = "an orphan";
			missLoli.devotion = -20;
			missLoli.trust = random(-100, -80);
			setHealth(missLoli, jsRandom(-90, -70), normalRandInt(25, 3), undefined, undefined, 100);
			missLoli.anus = 3;
			missLoli.vagina = 5;
			missLoli.pubertyXX = 1;
			missLoli.weight = random(-100, -60);
			missLoli.muscles = random(-100, -80);
			missLoli.waist = random(-40, -10);
			missLoli.attrXY = random(0, 10);
			missLoli.energy = random(0, 20);
			missLoli.skill.vaginal = 75;
			missLoli.skill.oral = 75;
			missLoli.skill.anal = 50;
			missLoli.pubicHStyle = "bushy";
			missLoli.underArmHStyle = "bushy";
			missLoli.preg = 40;
			missLoli.pregType = 1;
			missLoli.pregKnown = 1;
			missLoli.pregWeek = missLoli.preg;
			SetBellySize(missLoli);
			WombFatherRace(missLoli, "black");
			missLoli.counter.birthsTotal = 0;
			missLoli.bellySag = 5;
			missLoli.bellySagPreg = 5;
			if (missLoli.boobs < 300) {
				missLoli.boobs = 400;
			} else {
				missLoli.boobs += 100;
			}
			missLoli.lactation = 1;
			missLoli.lactationDuration = 2;
			missLoli.boobShape = either("perky", "torpedo-shaped");
			missLoli.nipples = either("cute", "puffy");
			newSlaves.push(missLoli);
			const {he, his, him} = getPronouns(missLeader);
			const {he2, his2, him2, girl2} = getPronouns(missLoli).appendSuffix("2");
			r.push(`In any case, you've enslaved a fine group. The women will clean up nicely and are already accustomed to being raped and abused, so they should bear the transition to slave life reasonably well. The leader is a little older than the rest and clearly has been pregnant several times given the sag to ${his} breasts and the stretch marks coating ${his} swollen belly; it's clear ${he} has a rape baby growing inside ${him}. The next two are younger, but no better off; one is hugely pregnant and the other shows signs of a recent birth. The last, however, is the most eye-catching;`);
			if (V.minimumSlaveAge < 8 && V.fertilityAge < 8) {
				r.push(`${he2} is just a little ${girl2} and a massively pregnant one at that. The leader was right to worry about ${his2} well-being, there is no way ${he2} would survive giving birth.`);
			} else if (V.fertilityAge < 18 && V.minimumSlaveAge < 18) {
				r.push(`${he2} is in no way prepared to be as pregnant as ${he2} is. The leader was right to worry about ${his2} well-being, birth is going to be a struggle for ${him2}.`);
			} else {
				r.push(`${his2} stomach has already dropped and ${he2} clearly has no experience with pregnancy. The leader was right to worry about ${his2} well-being, ${his2} body is ill-suited for childbirth.`);
			}
		} else {
			r.push(`In any case, you've enslaved a fine group. The women seem to have banded together when they were left to fend for themselves in their suburban neighborhood. They're older than many slaves, but they seem to have had rich husbands; they're conventionally pretty, and have lived soft lives that have left them healthy.`);
			for (let i = 0; i < 4; i++) {
				slave = GenerateNewSlave("XX", {disableDisability: 1, minAge: 26, maxAge: 42});
				slave.origin = "$He was a wealthy housewife who you enslaved as $he fled societal collapse.";
				slave.career = "a housewife";
				slave.devotion = -20;
				slave.trust = random(-10, 10);
				setHealth(slave, jsRandom(30, 50), 0, 0, 0);
				slave.anus = 1;
				slave.vagina = random(1, 2);
				slave.weight = random(-20, 20);
				slave.boobs += 100 * random(0, 3);
				slave.butt += random(0, 2);
				slave.attrXX = random(10, 50);
				slave.attrXY = random(60, 90);
				slave.energy = random(20, 80);
				slave.skill.vaginal = 15;
				slave.skill.oral = 15;
				slave.skill.anal = 0;
				slave.skill.whoring = 0;
				slave.skill.entertainment = 15;
				slave.behavioralFlaw = either("anorexic", "arrogant", "bitchy", "liberated");
				slave.sexualFlaw = either("apathetic", "hates anal", "hates oral", "idealistic", "shamefast");
				newSlaves.push(slave);
			}
		}
		App.Events.addParagraph(node, r);

		App.Events.addResponses(node, [
			new App.Events.Result(`Sell your captures immediately`, sell),
			new App.Events.Result(`Enslave them all`, enslave),
		]);
		return node;

		function sell() {
			for (const s of newSlaves) {
				cashX(slaveCost(s), "slaveTransfer");
			}
			return `Prisoners <span class="green">sold.</span>`;
		}

		function enslave() {
			for (const s of newSlaves) {
				newSlave(s); // skip New Slave Intro — TODO: use Bulk Slave Intro
			}
			return `You simply enslave all of the escapees yourself. These slaves will more than make up for the costs you expended, in the long run.`;
		}
	}
};


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

	actorPrerequisites() {
		return [[
			(s) => ["breast injections", "intensive breast injections", "hyper breast injections"].includes(s.drugs)
		]];
	}

	eventPrerequisites() {
		return [
			() => V.plot === 1,
			() => V.badB !== 1,
			() => App.Events.effectiveWeek() >= 52,
			() => V.seeHyperPreg === 1,
			() => V.seePreg !== 0,
		];
	}

	execute(node) {
		const [slave] = this.actors.map(a => getSlave(a));
		const {He, him} = getPronouns(slave);

		cashX(500 * V.slaves.length, "event");
		V.badB = 1;
		V.slaves.forEach(function(s) {
			if (["breast injections", "hyper breast injections", "intensive breast injections"].includes(s.drugs)) {
				healthDamage(s, Math.floor(Math.random() * 2 + 1));
			}
		});
		let r = [];
		r.push(`Early one morning, you hear heaving coming from one of the bathrooms. On investigation, it seems that ${slave.slaveName} woke up feeling terribly nauseous. ${He}'s in no danger, but you've hardly checked ${him} over before more slaves stagger in. Every one of your slaves on breast focused A-HGH has been struck by the mysterious malady and has sickened.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`It doesn't take much investigation before you find other slaveowners reporting the same thing. Elementary detective work fingers a particular drug supplier as the culprit, and before long the unfortunate pharmaceutical concern is drowning under a rain of harsh public comment and harsher private contract warfare. As the day wears on, the poor slaves feel much better, and appear positively glowing. However, their breasts swell slightly and their bellies bulge, pointing to the issue being the contamination of the A-HGH production line with fertility agents.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`The firm promptly pays  a large compensation for potentially ruining your slaves. However, you're left with the matter of all the growing bellies to deal with. Over the week, all of your slaves on breast injections show signs of early pregnancy, and hyper pregnancy at that, save those who aren't fertile. They just experienced some hip and ass growth. You have no idea how much fertility agent was in the enhancers but you feel they may become a problem if left alone!`);
		App.Events.addParagraph(node, r);

		App.Events.addResponses(node, [
			new App.Events.Result(`The emotional distress isn't worth the trouble`, keepPreg),
			new App.Events.Result(`Demand further compensation`, wantMoney),
			new App.Events.Result(`Force surgical repairs and compensation`, repair),
		]);

		return node;

		function keepPreg() {
			for (const slave of V.slaves) {
				if (slave.drugs.includes("breast injections")) {
					const isIntense = slave.drugs.includes("intensive");
					const isHyper = slave.drugs.includes("hyper");
					if (canGetPregnant(slave) && slave.vagina !== 0) {
						slave.preg = 1;
						if (isIntense) {
							slave.pregType = random(15, 35);
						} else if (isHyper) {
							slave.pregType = random(20, 45);
						} else {
							slave.pregType = random(10, 25);
						}
						slave.pregKnown = 1;
						slave.pregWeek = 1;
						SetBellySize(slave);
					} else {
						slave.lactation = 1;
						slave.lactationDuration = 2;
						if (slave.geneMods.NCS === 0 && slave.hips < 1) {
							slave.hips++;
							if (isHyper) {
								slave.butt += 2;
							} else {
								slave.butt++;
							}
						}
						if (V.precociousPuberty === 1) {
							if (slave.pubertyXX === 0 && (slave.ovaries === 1 || slave.mpreg === 1)) {
								if (isIntense) {
									slave.pubertyAgeXX -= 1.5;
								} else if (isHyper) {
									slave.pubertyAgeXX -= 2;
								} else {
									slave.pubertyAgeXX--;
								}
								if (slave.geneMods.NCS === 1) {
									if (isIntense) {
										slave.pubertyAgeXX -= 0.75;
									} else if (isHyper) {
										slave.pubertyAgeXX -= 1;
									} else {
										slave.pubertyAgeXX -= 0.5;
									}
								}
							}
							if (slave.pubertyXY === 0 && slave.balls > 0) {
								if (isIntense) {
									slave.pubertyAgeXY += 1.5;
								} else if (isHyper) {
									slave.pubertyAgeXY += 2;
								} else {
									slave.pubertyAgeXY += 1;
								}
								// NCS reduces the male puberty slowing affects
								if (slave.geneMods.NCS === 1) {
									if (isIntense) {
										slave.pubertyAgeXY -= 0.75;
									} else if (isHyper) {
										slave.pubertyAgeXY -= 1;
									} else {
										slave.pubertyAgeXY -= 0.5;
									}
								}
							}
						}
						if (slave.geneMods.NCS === 0) {
							slave.boobs += 300;
						} else {
							slave.boobs += 150;
						}
					}
				}
			}
			return `Since subjecting all the affected slaves to abortions would cause you severe losses, you've decided to let them keep the pregnancies. You hope you are prepared for all the children you'll be producing. Those who couldn't become pregnant gained some breast, hip and ass size, as well as began lactating.`;
		}

		function wantMoney() {
			cashX(2000 * V.slaves.length, "event");
			return `You muster all the contractual remedies available to you and join the crowd of slaveowners laying into the hapless manufacturer. Of course, with so many attackers, there is as much infighting between them as conflict with the helpless enemy, since everyone knows the business will go bankrupt before everyone gets paid. Nevertheless you approximately double the money you make out of the situation, plenty to deal with the pregnancies.`;
		}

		function repair() {
			for (const s of V.slaves) {
				if (canGetPregnant(s)) {
					if (s.drugs === "breast injections") {
						if (s.geneMods.NCS > 0) {
							s.boobs += Math.floor(Math.random() * 10 + 1) * 50;
						} else {
							s.boobs += Math.floor(Math.random() * 10 + 1) * 100;
						}
					} else if (s.drugs === "intensive breast injections") {
						if (s.geneMods.NCS > 0) {
							s.boobs += Math.floor(Math.random() * 10 + 1) * 100;
						} else {
							s.boobs += Math.floor(Math.random() * 10 + 1) * 150;
						}
					} else if (s.drugs === "hyper breast injections") {
						if (s.geneMods.NCS > 0) {
							s.boobs += Math.floor(Math.random() * 10 + 1) * 200;
						} else {
							s.boobs += Math.floor(Math.random() * 10 + 1) * 300;
						}
					}
				}
			}

			return `The hapless manufacturer eventually goes bankrupt. However, you do manage to force surgical correction of the pregnancies before they do. As additional compensation, they agree to naturally enhance your afflicted slaves' busts knowing full well that most buyers are not interested in slaves that have been knocked up. At the managers expense, your slaves move through a top-flight surgeons care and are pregnancy free and sporting larger breasts.`;
		}
	}
};


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

	actorPrerequisites() {
		return [[
			(s) => { return s.curatives > 1 || s.inflationType === "curative"; }
		]];
	}

	eventPrerequisites() {
		return [
			() => V.plot === 1,
			() => V.badC !== 1,
			() => App.Events.effectiveWeek() >= 14
		];
	}

	execute(node) {
		const [slave] = this.actors.map(a => getSlave(a));
		const {He, him} = getPronouns(slave);

		cashX(500 * V.slaves.length, "event");
		V.badC = 1;
		let r = [];
		r.push(`Early one morning, you hear convulsive dry heaving coming from one of the bathrooms. On investigation, it seems that ${slave.slaveName} woke up feeling terribly nauseous. ${He}'s in no danger, but you've hardly checked ${him} over before more slaves stagger in. Every one of your slaves on curatives has been struck by the mysterious malady and has sickened.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`It doesn't take much investigation before you find other slaveowners reporting the same thing. Elementary detective work fingers a particular drug supplier as the culprit, and before long the unfortunate pharmaceutical concern is drowning under a rain of harsh public comment and harsher private contract warfare. As the day wears on, the poor slaves feel a bit better, but begin to report discomfort in their breasts. Apparently the problem has to do with contamination of the curative production line with A-HGH production reactants.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`The firm promptly pays fair compensation for the minor damage to your slaves' health. However, you're left with the matter of the boobs to deal with. Over the week, all your slaves on curatives experience at least a little breast growth, and some gain several cup sizes.${(V.boughtItem.toys.medicalEnema === 1) ? ` Those with bellies full of curative mixture, on the other hand, have not stopped growing yet and won't until they've completely absorb their load. They will likely end up sporting enormous tits by the end of this.` : ``}`);
		App.Events.addParagraph(node, r);

		App.Events.addResponses(node, [
			new App.Events.Result(`Free breast growth is acceptable`, freeGrowth),
			new App.Events.Result(`Demand further compensation`, wantMoney),
			new App.Events.Result(`Force surgical repairs`, repair),
		]);

		return node;

		function freeGrowth() {
			for (const s of V.slaves) {
				if (s.curatives > 1) {
					if (s.geneMods.NCS > 0) {
						s.boobs += Math.floor(Math.random() * 10 + 1) * 50;
					} else {
						s.boobs += Math.floor(Math.random() * 10 + 1) * 100;
					}
				}
				if (s.inflationType === "curative") {
					if (s.geneMods.NCS > 0) {
						s.boobs += Math.floor(Math.random() * 10 + 1) * 150 * s.inflation;
					} else {
						s.boobs += Math.floor(Math.random() * 10 + 1) * 300 * s.inflation;
					}
				}
				if (s.geneticQuirks.macromastia === 3) {
					s.geneticQuirks.macromastia = 2;
				}
				if (s.geneticQuirks.gigantomastia === 3) {
					s.geneticQuirks.gigantomastia = 2;
				}
			}
			return `Since you're not displeased with the breast expansion, you accept the health compensation and even make discreet inquiries to see of the effect can perhaps be replicated. Unfortunately, it seems that the result that occurred was as much due to luck as anything else. The process cannot be safely marketed.`;
		}

		function wantMoney() {
			cashX(500 * V.slaves.length, "event");
			return `You muster all the contractual remedies available to you and join the crowd of slaveowners laying into the hapless manufacturer. Of course, with so many attackers, there is as much infighting between them as conflict with the helpless enemy, since everyone knows the business will go bankrupt before everyone gets paid. Nevertheless you approximately double the money you make out of the situation.`;
		}

		function repair() {
			return `The hapless manufacturer eventually goes bankrupt. However, you do manage to force surgical repair of the breast expansion before they do. At the manager's expense, your slaves move through a top-flight surgeon's care and are reduced to their former sizes.`;
		}
	}
};