From 58acf5222c2d0c99452685b4fe89fe0957cb0fbe Mon Sep 17 00:00:00 2001
From: lowercasedonkey <lowercasedonkey@gmail.com>
Date: Wed, 23 Jun 2021 21:15:38 -0400
Subject: [PATCH] progress

---
 src/events/scheduled/sec/secExpSmilingMan.js  |  78 ------
 src/events/scheduled/sec/sexExpSmilingMan0.js |   1 -
 src/events/scheduled/sec/sexExpSmilingMan1.js |  25 +-
 src/events/scheduled/sec/sexExpSmilingMan2.js | 253 ++++++------------
 src/events/scheduled/sec/sexExpSmilingMan3.js | 137 ++++++++++
 5 files changed, 238 insertions(+), 256 deletions(-)
 create mode 100644 src/events/scheduled/sec/sexExpSmilingMan3.js

diff --git a/src/events/scheduled/sec/secExpSmilingMan.js b/src/events/scheduled/sec/secExpSmilingMan.js
index d29b85ff2d7..3347f6b1cd5 100644
--- a/src/events/scheduled/sec/secExpSmilingMan.js
+++ b/src/events/scheduled/sec/secExpSmilingMan.js
@@ -10,84 +10,6 @@
 		} else if (V.SecExp.smilingMan.progress === 1) {
 		} else if (V.SecExp.smilingMan.progress === 2) {
 		} else if (V.SecExp.smilingMan.progress === 3) {
-			V.nextButton = " ";
-			V.fcnn.push("...sometimes high-tech problems have low-tech solutions. Back to you in the...");
-			<<setLocalPronouns _activeSlave>>
-			<p>
-				r.push(`The day has come to finally put an end to this story. Your men are ready to go, waiting only on your signal. You quickly don your protective gear and proceed down the busy streets of your arcology.`);
-				r.push(`You carefully planned the day so that nothing could exit the arcology without being scanned at least three times and poked twice. The Smiling Man has no escape.`);
-			</p>
-			<p>
-				r.push(`After a short walk you are in front of the criminal's lair, a rundown old apartment in a scarcely populated part of the arcology. You give the order to breach and your men rush inside without problems.`);
-				r.push(`After a couple of seconds pass without a single noise coming from the apartment, you begin to worry. Then you hear the captain`);
-
-				<span id="continue">
-					<<link "calling you inside.">>
-						<<replace "#continue">>
-							r.push(`calling you inside.`);
-							<p>
-								if (V.seeImages === 1) {
-									<div class="imageRef medImg">
-		<<SlaveArt _activeSlave 2 0>></div>
-								}
-								"So it was you to find me first.
-								if (V.SecExp.smilingMan.relationship > 2) {
-									r.push(`I was hoping you would be the one!`);
-								} else {
-									r.push(`I expected you would be the one.`);
-								}
-								r.push(`Well, I hope I'm everything you expected," you hear a voice say. Despite recognizing it, you struggle to convince yourself that the little ${girl} in front of you is indeed the famous criminal mastermind.`);
-							</p>
-							<p style="margin-bottom: 2em">
-								"As you can see, I have no intention of escaping. I knew my life was over the second my plan went into effect. I accepted my end a long time ago, so feel free to do your worst; my life has already ended in triumph."
-							</p>
-							<p>
-								r.push(`You evaluate the situation: the burning desire of vengeance for all the damage that little twerp caused is hard to ignore, but equally so is the admiration for ${his} skill and determination. Indeed, ${he} would be a great addition to your court, as a free individual or not.`);
-							</p>
-
-							<p id="result">
-								<div>
-									<<link "Offer ${him} a new life">>
-										<<replace "#result">>
-											<div>
-												r.push(`You decide it would be criminally wasteful to throw away such talent. You offer ${him} a new life at your side. ${His} expertise will surely guarantee safety, if not supremacy, to your arcology in cyberspace, while ${he} will have safety and luxury in the physical world.`);
-											</div>
-											<div>
-												[[Continue|secExpSmilingMan][V.SecExp.smilingMan.progress = 10]]
-											</div>
-										<</replace>>
-									<</link>>
-								</div>
-								<div>
-									<<link "Make ${him} pay">>
-										<<replace "#result">>
-											<div>
-												r.push(`You decide to end ${his} pitiful life. ${He} has crossed the wrong master of the new world ${he} worked so hard to create. No mercy was asked for and no mercy will be given.`);
-											</div>
-											<div>
-												[[Continue|secExpSmilingMan][V.SecExp.smilingMan.progress = 20]]
-											</div>
-										<</replace>>
-									<</link>>
-								</div>
-								<div>
-									<<link "Enslave ${him}">>
-										<<replace "#result">>
-											<div>
-											r.push(`You decide to enslave the ${girl}. ${His} skill may be great, but ${his} crimes are equally so, which will make it all the sweeter to turn ${him} into an obedient little toy to play with.`);
-											</div>
-											<div>
-												[[Continue|secExpSmilingMan][V.SecExp.smilingMan.progress = 30]]
-											</div>
-										<</replace>>
-									<</link>>
-								</div>
-							</p>
-						<</replace>>
-			r.push(` /* closes replace "#continue" */`);
-					<</link>>
-				</span> /* closes id="continue" */
-			</p>
 		} else if (V.SecExp.smilingMan.progress > 3) {
 			if (V.SecExp.smilingMan.progress < 30) {
 				/* 000-250-006 */
diff --git a/src/events/scheduled/sec/sexExpSmilingMan0.js b/src/events/scheduled/sec/sexExpSmilingMan0.js
index baaa22c573a..04961e2b24b 100644
--- a/src/events/scheduled/sec/sexExpSmilingMan0.js
+++ b/src/events/scheduled/sec/sexExpSmilingMan0.js
@@ -8,7 +8,6 @@ App.Events.secExpSmilingMan0 = class secExpSmilingMan0 extends App.Events.BaseEv
 		];
 	}
 
-
 	execute(node) {
 		let r = [];
 		V.nextButton = "Continue";
diff --git a/src/events/scheduled/sec/sexExpSmilingMan1.js b/src/events/scheduled/sec/sexExpSmilingMan1.js
index 92c8ef01fe9..ad2ed23c30e 100644
--- a/src/events/scheduled/sec/sexExpSmilingMan1.js
+++ b/src/events/scheduled/sec/sexExpSmilingMan1.js
@@ -8,7 +8,6 @@ App.Events.secExpSmilingMan1 = class secExpSmilingMan1 extends App.Events.BaseEv
 		];
 	}
 
-
 	execute(node) {
 		let r = [];
 		V.nextButton = "Continue";
@@ -16,11 +15,13 @@ App.Events.secExpSmilingMan1 = class secExpSmilingMan1 extends App.Events.BaseEv
 
 		const {hisA, heA, himA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
 		V.fcnn.push("...cybersecurity market is booming thanks to a series of recent high-profile attacks...");
-		r.push(`You have just reached your penthouse when your faithful assistant appears in front of you, evidently excited.`);
-		r.push(`"${properTitle()}, I have just received news of a new attack by the Smiling Man. It appears a few hours ago he infiltrated another arcology and caused a catastrophic failure of its power plant.`);
-		r.push(`Between old debts and the loss of value for his shares, the owner went bankrupt in minutes. It seems the Smiling Man managed to keep a small auxiliary generator functioning enough to project a giant holographic picture of his symbol on the arcology's walls.`);
-		r.push(`Say what you will about his actions, but you can't deny he has style... Anyways, this opens up a great opportunity to gain control of the structure for ourselves."`);
-		r.push(`It is indeed a great opportunity, one you cannot resist. You quickly organize the affair and in a few minutes a message reaches your assistant.`);
+		r.push(
+			`You have just reached your penthouse when your faithful assistant appears in front of you, evidently excited.`,
+			`"${properTitle()}, I have just received news of a new attack by the Smiling Man. It appears a few hours ago he infiltrated another arcology and caused a catastrophic failure of its power plant.`,
+			`Between old debts and the loss of value for his shares, the owner went bankrupt in minutes. It seems the Smiling Man managed to keep a small auxiliary generator functioning enough to project a giant holographic picture of his symbol on the arcology's walls.`,
+			`Say what you will about his actions, but you can't deny he has style... Anyways, this opens up a great opportunity to gain control of the structure for ourselves."`,
+			`It is indeed a great opportunity, one you cannot resist. You quickly organize the affair and in a few minutes a message reaches your assistant.`
+		);
 		App.Events.addParagraph(node, r);
 		r = [];
 		r.push(`"Should I open it?" your assistant asks. You silently nod.`);
@@ -29,7 +30,11 @@ App.Events.secExpSmilingMan1 = class secExpSmilingMan1 extends App.Events.BaseEv
 		r.push(`Suddenly the room flashes red, while your assistant fades for half a second. When ${heA} reappears, ${hisA} face has been replaced by a stylized smiling face.`);
 		App.Events.addParagraph(node, r);
 		r = [];
-		r.push(`"Hello, my dear ${V.PC.birthName}. I can call you ${V.PC.birthName}, right? I've been keeping an eye on you for so long now, it feels like we're friends! I am terribly sorry for my unannounced visit, but I wanted to meet face to face... well, face to hologram." it says, letting out a childlike giggle. "I'm sure you're aware of my recent activities around this rock of ours, and, well, to put it simply, it's your turn to contribute to my great project! You'll love it when you see it, I'm sure! By the way, thanks for the offer — it's so nice to see people contribute to a worthy cause so generously! Well, I've taken enough of your time, see you soon!"`);
+		r.push(
+			`"Hello, my dear ${V.PC.birthName}. I can call you ${V.PC.birthName}, right? I've been keeping an eye on you for so long now, it feels like we're friends! I am terribly sorry for my unannounced visit, but I wanted to meet face to face... well, face to hologram."`,
+			`it says, letting out a childlike giggle.`,
+			`"I'm sure you're aware of my recent activities around this rock of ours, and, well, to put it simply, it's your turn to contribute to my great project! You'll love it when you see it, I'm sure! By the way, thanks for the offer — it's so nice to see people contribute to a worthy cause so generously! Well, I've taken enough of your time, see you soon!"`
+		);
 		App.Events.addParagraph(node, r);
 		r = [];
 		r.push(`The lights flicker once more and an instant later your assistant returns to ${hisA} usual self.`);
@@ -103,11 +108,5 @@ App.Events.secExpSmilingMan1 = class secExpSmilingMan1 extends App.Events.BaseEv
 			V.SecExp.smilingMan.progress++;
 			return `You take no further action. Hopefully this ordeal is over.`;
 		}
-
-		function unlock() {
-			V.nextButton = "Continue";
-			V.nextLink = "Random Nonindividual Event";
-			App.Utils.scheduleSidebarRefresh();
-		}
 	}
 };
diff --git a/src/events/scheduled/sec/sexExpSmilingMan2.js b/src/events/scheduled/sec/sexExpSmilingMan2.js
index b3b2b720c7d..5233ff9fcf8 100644
--- a/src/events/scheduled/sec/sexExpSmilingMan2.js
+++ b/src/events/scheduled/sec/sexExpSmilingMan2.js
@@ -8,187 +8,112 @@ App.Events.secExpSmilingMan2 = class secExpSmilingMan2 extends App.Events.BaseEv
 		];
 	}
 
-
 	execute(node) {
 		let r = [];
 		V.nextButton = "Continue";
 		V.nextLink = "Random Nonindividual Event";
 
-		let _activeSlave;
-		if (V.seeDicks !== 100) {
-			_activeSlave = GenerateNewSlave("XX",{minAge: 16, maxAge: 18, ageOverridesPedoMode: 1, disableDisability: 1, race: "asian", nationality: "Japanese"});
-			_activeSlave.faceShape = "cute";
-			_activeSlave.boobs = 450;
-			_activeSlave.vagina = 0;
-			_activeSlave.ovaries = 1;
+		const {hisA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
+		V.fcnn.push("...my money safe the old-fashioned way: I store it all underneath my mattress...");
+		// <p style="margin-bottom: 2em">
+		r.push(`When ${V.assistant.name} violently wakes you up, ${hisA} worried expression can mean only one thing: the Smiling Man had been back. "We were anonymously sent a link to a new website: it's a very simple site, no visuals, no text; only a countdown ticking away. It will reach zero this evening." your assistant says.`);
+		r.push(`This is troubling, yet somewhat exciting. The Smiling Man never failed to cause damage, but his ego had gotten the best of him this time — having time to prepare before their attack will give you a chance to find them. For the rest of the day you do your best to plan, prepare and focus.`);
+		App.Events.addParagraph(node, r);
+		r = [];
+		r.push(`Evening came faster than you anticipated. Your security team was already at full alert, waiting for any signal on the horizon. The die was cast.`);
+		App.Events.addParagraph(node, r);
+		r = [];
+		r.push(`Suddenly all the computers in the room begin to act strangely, and then it happened. On all of the screens across the arcology the Smiling Man's icon appears, then every speaker begins broadcasting the same voice, one that you have already heard once before:`);
+		App.Events.addParagraph(node, r);
+		r = [];
+		r.push(`"Hello citizens of V.arcologies[0].name! I am here on this special day to relay to you a very important message: we find ourselves in very peculiar times, times of strife and suffering! But these are also times of change and regeneration! Indeed, I say humanity itself is regenerating, turning into a new being for which the ideals of the old world no longer hold meaning. A new blank page from which humanity can begin to prosper again.`);
+		App.Events.addParagraph(node, r);
+		r = [];
+		r.push(`Alas, my friends, not all is good, as in this rebirth a great injustice is being perpetrated. If we truly want to ascend to this new form of humanity the old must give way to the new. If we must cleanse our mind of old ideas, our world must cleanse itself of them as well.`);
+		r.push(`It's to fix this injustice, that I worked so hard all this time! To cleanse the world of the old, we must get rid of our precious, precious data. At the end of this message every digital device will see its memory erased, every archive cleaned, every drive deleted.`);
+		App.Events.addParagraph(node, r);
+		r = [];
+		r.push(`It will be a true rebirth! A true new beginning! No longer will the chains of the past keep humanity anchored!"`);
+		App.Events.addParagraph(node, r);
+		r = [];
+		r.push(`The voice stopped for a second.`);
+		App.Events.addParagraph(node, r);
+		r = [];
+		r.push(`"Have a good day," it simply concluded.`);
+		App.Events.addParagraph(node, r);
+		r = [];
+		r.push(`Then it happened.`);
+		App.Events.addParagraph(node, r);
+		r = [];
+		r.push(`In little more than seconds all the data collected in the years past vanished. It's a disaster.`);
+		r.push(`The vast majority of currency is digital, so the actions of the Smiling Man have a devastating effect on the money supply.`);
+		if (V.cash < 0) {
+			r.push(`Luckily for you this means that your <span class="cash inc">debt is reduced.</span>`);
 		} else {
-			_activeSlave = GenerateNewSlave("XY",{minAge: 16, maxAge: 18, ageOverridesPedoMode: 1, disableDisability: 1, race: "asian", nationality: "Japanese"});
-			_activeSlave.boobs = 250;
-			_activeSlave.faceShape = "androgynous";
+			r.push(`Unfortunately this means that your <span class="cash dec">cash reserves are gutted.</span>`);
 		}
-		_activeSlave.boobShape = "perky";
-		_activeSlave.nipples = "cute";
-		_activeSlave.origin = "$He was a criminal mastermind, captured shortly after completing $his master plan.";
-		_activeSlave.career = "a student from a private school";
-		_activeSlave.intelligence = 100;
-		_activeSlave.intelligenceImplant = 30;
-		_activeSlave.slaveSurname = "Yamadera";
-		_activeSlave.birthSurname = "Yamadera";
-		_activeSlave.origSkin = "pale";
-		applyGeneticColor(_activeSlave);
-		_activeSlave.devotion = 5 * V.SecExp.smilingMan.relationship;
-		_activeSlave.trust = 5 * V.SecExp.smilingMan.relationship;
-		_activeSlave.face = random(10,50);
-		setHealth(_activeSlave, 70, 0, 0, 0, 0);
-		_activeSlave.teeth = "normal";
-		_activeSlave.areolae = 0;
-		_activeSlave.anus = 0;
-		_activeSlave.butt = 3;
-		_activeSlave.lips = 15;
-		_activeSlave.behavioralFlaw = "odd";
-		_activeSlave.skill.vaginal = 0;
-		_activeSlave.skill.oral = 0;
-		_activeSlave.skill.anal = 0;
-		_activeSlave.skill.whoring = 0;
-		_activeSlave.skill.entertainment = 0;
-		_activeSlave.birthWeek = random(0,50);
-		_activeSlave.voice = 2;
-		_activeSlave.weight = -20;
-		_activeSlave.muscles = 0;
-		_activeSlave.shoulders = -1;
-		_activeSlave.hips = 0;
-		_activeSlave.clit = 0;
-		_activeSlave.labia = 0;
-		_activeSlave.waist = 10;
-		_activeSlave.preg = 0;
-		_activeSlave.prestige = 3;
-		_activeSlave.prestigeDesc = "$He was the famous Smiling Man.";
-		_activeSlave.clothes = "a military uniform"; //closest thing to commie/punk we have at the moment
-		
-		const {
-			His, He,
-			his, he, him, himself, woman
-		} = getPronouns(slave);
-		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
-		V.fcnn.push("...my money safe the old-fashioned way: I store it all underneath my mattress...");
-		<p style="margin-bottom: 2em">
-			r.push(`When ${V.assistant.name} violently wakes you up,${  _hisA} worried expression can mean only one thing: the Smiling Man had been back. "We were anonymously sent a link to a new website: it's a very simple site, no visuals, no text; only a countdown ticking away. It will reach zero this evening." your assistant says.`);
-			r.push(`This is troubling, yet somewhat exciting. The Smiling Man never failed to cause damage, but his ego had gotten the best of him this time — having time to prepare before their attack will give you a chance to find them. For the rest of the day you do your best to plan, prepare and focus.`);
-		</p>
+		cashX((V.cash * 0.2) - V.cash, "event");
+		r.push(`You are not the only one affected by this however. <span class="red">The economy of the entire world is severely affected</span> by the loss of vast quantities of currency. Who knows how long will it take for the global economy to recover.`);
+		V.SecExp.smilingMan.globalCrisisWeeks = random(8, 16);
+		r.push(`Trade is <span class="red">severely affected.</span>`);
+		V.SecExp.core.trade *= 0.2;
+		r.push(`With the loss of so much information, most of your accomplishments are simply forgotten, so <span class="reputation dec">your reputation suffers.</span>`);
+		repX((V.rep * 0.6) - V.rep, "event");
 
-		<p>
-			r.push(`Evening came faster than you anticipated. Your security team was already at full alert, waiting for any signal on the horizon. The die was cast.`);
-		</p>
-		<p>
-			r.push(`Suddenly all the computers in the room begin to act strangely, and then it happened. On all of the screens across the arcology the Smiling Man's icon appears, then every speaker begins broadcasting the same voice, one that you have already heard once before:`);
-		</p>
-		<p>
-			"Hello citizens of V.arcologies[0].name! I am here on this special day to relay to you a very important message: we find ourselves in very peculiar times, times of strife and suffering! But these are also times of change and regeneration! Indeed, I say humanity itself is regenerating, turning into a new being for which the
-		r.push(`ideals of the old world no longer hold meaning. A new blank page from which humanity can begin to prosper again.`);
-		</p>
-		<p>
-			r.push(`Alas, my friends, not all is good, as in this rebirth a great injustice is being perpetrated. If we truly want to ascend to this new form of humanity the old must give way to the new. If we must cleanse our mind of old ideas, our world must cleanse itself of them as well.`);
-			r.push(`It's to fix this injustice, that I worked so hard all this time! To cleanse the world of the old, we must get rid of our precious, precious data. At the end of this message every digital device will see its memory erased, every archive cleaned, every drive deleted.`);
-		</p>
-		<p>
-			r.push(`It will be a true rebirth! A true new beginning! No longer will the chains of the past keep humanity anchored!"`);
-		</p>
-		<p>
-			r.push(`The voice stopped for a second.`);
-		</p>
-		<p>
-			"Have a good day," it simply concluded.
-		</p>
-		<p>Then it happened.</p>
-		<p>
-			r.push(`In little more than seconds all the data collected in the years past vanished. It's a disaster.`);
-			r.push(`The vast majority of currency is digital, so the actions of the Smiling Man have a devastating effect on the money supply.`);
-			if (V.cash < 0) {
-				r.push(`Luckily for you this means that your <span class="cash inc">debt is reduced.</span>`);
+		if (V.arcologies[0].ownership >= 60) {
+			if (V.SecExp.core.authority <= 10000) {
+				const _cells = V.building.findCells(cell => cell.canBeSold());
+				jsEither(_cells).owner = 0;
+				r.push(`Vast amount of data relative to the ownership of the arcology is lost. You lost all legal claims to one of the sectors.`);
 			} else {
-				r.push(`Unfortunately this means that your <span class="cash dec">cash reserves are gutted.</span>`);
+				r.push(`Vast amount of data relative to the ownership of the arcology is lost. You would've run the risk of losing ownership of one of the sectors, but fortunately your authority is so high your citizens do not dare question your claims even in the absence of a valid legal case.`);
 			}
-			cashX((V.cash * 0.2)-V.cash, "event");
-			r.push(`You are not the only one affected by this however. <span class="red">The economy of the entire world is severely affected</span> by the loss of vast quantities of currency. Who knows how long will it take for the global economy to recover.`);
-			V.SecExp.smilingMan.globalCrisisWeeks = random(8,16);
-			r.push(`Trade is <span class="red">severely affected.</span>`);
-			V.SecExp.core.trade *= 0.2;
-			r.push(`With the loss of so much information, most of your accomplishments are simply forgotten, so <span class="reputation dec">your reputation suffers.</span>`);
-			repX((V.rep * 0.6)-V.rep, "event");
-
-			if (V.arcologies[0].ownership >= 60) {
-				if (V.SecExp.core.authority <= 10000) {
-					_cells = V.building.findCells(cell => cell.canBeSold());
-					jsEither(_cells).owner = 0;
-					r.push(`Vast amount of data relative to the ownership of the arcology is lost. You lost all legal claims to one of the sectors.`);
-				} else {
-					r.push(`Vast amount of data relative to the ownership of the arcology is lost. You would've run the risk of losing ownership of one of the sectors, but fortunately your authority is so high your citizens do not dare question your claims even in the absence of a valid legal case.`);
-				}
-			}
-			if (V.SecExp.buildings.secHub) {
-				if (V.SecExp.buildings.secHub.coldstorage > 3) {
-					r.push(`Your cold storage facility has ensured that the Smiling Man's destruction of the primary archives was unable to damage the security of your arcology.`);
-				} else if (V.SecExp.buildings.secHub.coldstorage === 0) {
-					r.push(`Your security department sees its archives butchered by the Smiling Man. Almost all data on criminals, citizens, and operations are lost. The <span class="red">security of the arcology is greatly reduced.</span> Criminals, on the other hand, with their past erased, cannot wait to join this new world, so <span class="red">crime will inevitably increase.</span>`);
-					V.SecExp.core.security = Math.clamp(V.SecExp.core.security * 0.2,0,100);
-					V.SecExp.core.crimeLow = Math.clamp(V.SecExp.core.crimeLow * 1.5, 20,100);
-				}
+		}
+		if (V.SecExp.buildings.secHub) {
+			if (V.SecExp.buildings.secHub.coldstorage > 3) {
+				r.push(`Your cold storage facility has ensured that the Smiling Man's destruction of the primary archives was unable to damage the security of your arcology.`);
+			} else if (V.SecExp.buildings.secHub.coldstorage === 0) {
+				r.push(`Your security department sees its archives butchered by the Smiling Man. Almost all data on criminals, citizens, and operations are lost. The <span class="red">security of the arcology is greatly reduced.</span> Criminals, on the other hand, with their past erased, cannot wait to join this new world, so <span class="red">crime will inevitably increase.</span>`);
+				V.SecExp.core.security = Math.clamp(V.SecExp.core.security * 0.2, 0, 100);
+				V.SecExp.core.crimeLow = Math.clamp(V.SecExp.core.crimeLow * 1.5, 20, 100);
 			}
-		</p>
-		<p>
-			r.push(`A short, meek man approaches you with a weak smile. "Not all is lost, `);
-	V.properTitle()
-		r.push(`. We have a lead on him — he is here, in ${V.arcologies[0].name."}`);
-		</p>
-		<p>Despite the bleak situation, you cannot help but smile back.</p>
-		<p id="result">
-			<div>
-				<<link "&quot;Eliminate the threat, once and for all.&quot;">>
-					V.SecExp.smilingMan.relationship--, V.SecExp.smilingMan.progress++;
-					<<replace "#result">>
-						r.push(`You command your loyal operatives to prepare for a manhunt./replace>>
-				<</link>>
-			</div>
-			<div>
-				<<link "&quot;Bring him to me.&quot;">>
-					V.SecExp.smilingMan.relationship++, V.SecExp.smilingMan.progress++;
-					<<replace "#result">>
-						r.push(`You command your loyal operatives to prepare for a manhunt.`);
-					<</replace>>
-				<</link>>
-			</div>
-			<div>
-				<<link "&quot;Such skill on my side would be a great boon. Find him.&quot;">>
-					V.SecExp.smilingMan.relationship += 2, V.SecExp.smilingMan.progress++;
-					<<replace "#result">>
-						r.push(`You command your loyal operatives to prepare for a manhunt.`);
-					<</replace>>
-				<</link>>
-			</div>
-			<div>
-				<<link "&quot;He finally got what he always wanted. Let him have his victory, we have better things to do.&quot;">>
-					V.SecExp.smilingMan.progress++;
-					V.nextButton = "Continue", V.nextLink = "Random Nonindividual Event";
-					<<replace "#result"You take no further action. Hopefully this ordeal is finally over.`);
-					<</replace>>
-				<</link>>
-			</div>
-		</p>
-
+		}
 		App.Events.addParagraph(node, r);
 		r = [];
-		
+		r.push(`A short, meek man approaches you with a weak smile. "Not all is lost, ${properTitle()}. We have a lead on him — he is here, in ${V.arcologies[0].name}."`);
 		App.Events.addParagraph(node, r);
+		r = [];
+		r.push(`Despite the bleak situation, you cannot help but smile back.`);
 
-		const choices = [];
 
-		if (V.cash >= contractCost) {
-			choices.push(new App.Events.Result(`Enslave ${him}`, enslave, `This will cost in ${contractCost}`));
-			choices.push(new App.Events.Result(`Sell ${him} immediately`, sell, `This will bring in ${cost}`));
-		} else {
-			choices.push(new App.Events.Result(null, null, `You lack the necessary funds to enslave $${him}.`));
+		App.Events.addResponses(node, [
+			new App.Events.Result(`"Eliminate the threat, once and for all."`, kill),
+			new App.Events.Result(`"Bring him to me."`, find),
+			new App.Events.Result(`"Such skill on my side would be a great boon. Find him."`, findFast),
+			new App.Events.Result(`"He finally got what he always wanted. Let him have his victory, we have better things to do."`, peace),
+		]);
+
+		function kill() {
+			V.SecExp.smilingMan.relationship--;
+			V.SecExp.smilingMan.progress++;
+			return `You command your loyal operatives to prepare for a manhunt.`;
+		}
+
+		function find() {
+			V.SecExp.smilingMan.relationship++;
+			V.SecExp.smilingMan.progress++;
+			return `You command your loyal operatives to prepare for a manhunt.`;
+		}
+
+		function findFast() {
+			V.SecExp.smilingMan.relationship += 2;
+			V.SecExp.smilingMan.progress++;
+			return `You command your loyal operatives to prepare for a manhunt.`;
 		}
-		App.Events.addResponses(node, choices);
 
+		function peace() {
+			V.SecExp.smilingMan.progress++;
+			return `You take no further action. Hopefully this ordeal is finally over.`;
+		}
 	}
 };
diff --git a/src/events/scheduled/sec/sexExpSmilingMan3.js b/src/events/scheduled/sec/sexExpSmilingMan3.js
new file mode 100644
index 00000000000..10019b924f3
--- /dev/null
+++ b/src/events/scheduled/sec/sexExpSmilingMan3.js
@@ -0,0 +1,137 @@
+App.Events.secExpSmilingMan2 = class secExpSmilingMan2 extends App.Events.BaseEvent {
+	eventPrerequisites() {
+		return [
+			() => V.rivalOwner === 0,
+			() => V.secExpEnabled > 0,
+			() => V.SecExp.smilingMan.progress === 3,
+		];
+	}
+
+	execute(node) {
+		let r = [];
+		V.nextButton = "Continue";
+		V.nextLink = "Random Nonindividual Event";
+
+		let _activeSlave;
+		if (V.seeDicks !== 100) {
+			_activeSlave = GenerateNewSlave("XX", {
+				minAge: 16, maxAge: 18, ageOverridesPedoMode: 1, disableDisability: 1, race: "asian", nationality: "Japanese"
+			});
+			_activeSlave.faceShape = "cute";
+			_activeSlave.boobs = 450;
+			_activeSlave.vagina = 0;
+			_activeSlave.ovaries = 1;
+		} else {
+			_activeSlave = GenerateNewSlave("XY", {
+				minAge: 16, maxAge: 18, ageOverridesPedoMode: 1, disableDisability: 1, race: "asian", nationality: "Japanese"
+			});
+			_activeSlave.boobs = 250;
+			_activeSlave.faceShape = "androgynous";
+		}
+		_activeSlave.boobShape = "perky";
+		_activeSlave.nipples = "cute";
+		_activeSlave.origin = "$He was a criminal mastermind, captured shortly after completing $his master plan.";
+		_activeSlave.career = "a student from a private school";
+		_activeSlave.intelligence = 100;
+		_activeSlave.intelligenceImplant = 30;
+		_activeSlave.slaveSurname = "Yamadera";
+		_activeSlave.birthSurname = "Yamadera";
+		_activeSlave.origSkin = "pale";
+		applyGeneticColor(_activeSlave);
+		_activeSlave.devotion = 5 * V.SecExp.smilingMan.relationship;
+		_activeSlave.trust = 5 * V.SecExp.smilingMan.relationship;
+		_activeSlave.face = random(10, 50);
+		setHealth(_activeSlave, 70, 0, 0, 0, 0);
+		_activeSlave.teeth = "normal";
+		_activeSlave.areolae = 0;
+		_activeSlave.anus = 0;
+		_activeSlave.butt = 3;
+		_activeSlave.lips = 15;
+		_activeSlave.behavioralFlaw = "odd";
+		_activeSlave.skill.vaginal = 0;
+		_activeSlave.skill.oral = 0;
+		_activeSlave.skill.anal = 0;
+		_activeSlave.skill.whoring = 0;
+		_activeSlave.skill.entertainment = 0;
+		_activeSlave.birthWeek = random(0, 50);
+		_activeSlave.voice = 2;
+		_activeSlave.weight = -20;
+		_activeSlave.muscles = 0;
+		_activeSlave.shoulders = -1;
+		_activeSlave.hips = 0;
+		_activeSlave.clit = 0;
+		_activeSlave.labia = 0;
+		_activeSlave.waist = 10;
+		_activeSlave.preg = 0;
+		_activeSlave.prestige = 3;
+		_activeSlave.prestigeDesc = "$He was the famous Smiling Man.";
+		_activeSlave.clothes = "a military uniform"; // closest thing to commie/punk we have at the moment
+
+		const {
+			His, He,
+			his, he, him, girl
+		} = getPronouns(_activeSlave);
+		V.nextButton = " ";
+		V.fcnn.push("...sometimes high-tech problems have low-tech solutions. Back to you in the...");
+
+		r.push(`The day has come to finally put an end to this story. Your men are ready to go, waiting only on your signal. You quickly don your protective gear and proceed down the busy streets of your arcology.`);
+		r.push(`You carefully planned the day so that nothing could exit the arcology without being scanned at least three times and poked twice. The Smiling Man has no escape.`);
+		App.Events.addParagraph(node, r);
+		r = [];
+		r.push(`After a short walk you are in front of the criminal's lair, a rundown old apartment in a scarcely populated part of the arcology. You give the order to breach and your men rush inside without problems.`);
+		r.push(`After a couple of seconds pass without a single noise coming from the apartment, you begin to worry. Then you hear the captain calling you inside.`);
+		App.Events.addParagraph(node, r);
+
+		App.Events.addResponses(node, [
+			new App.Events.Result(`Enter`, inside),
+		]);
+
+		function inside() {
+			const frag = new DocumentFragment();
+			let r = [];
+			// <<link "calling you inside.">>
+			// <<replace "#continue">>
+			// <p>
+			if (V.seeImages === 1) {
+				App.Events.drawEventArt(frag, _activeSlave);
+			}
+			r.push(`"So it was you to find me first.`);
+			if (V.SecExp.smilingMan.relationship > 2) {
+				r.push(`I was hoping you would be the one!`);
+			} else {
+				r.push(`I expected you would be the one.`);
+			}
+			r.push(`Well, I hope I'm everything you expected," you hear a voice say. Despite recognizing it, you struggle to convince yourself that the little ${girl} in front of you is indeed the famous criminal mastermind.`);
+			App.Events.addParagraph(frag, r);
+			r = [];
+			r.push(`"As you can see, I have no intention of escaping. I knew my life was over the second my plan went into effect. I accepted my end a long time ago, so feel free to do your worst; my life has already ended in triumph."`);
+			App.Events.addParagraph(frag, r);
+			r = [];
+			r.push(`You evaluate the situation: the burning desire of vengeance for all the damage that little twerp caused is hard to ignore, but equally so is the admiration for ${his} skill and determination. Indeed, ${he} would be a great addition to your court, as a free individual or not.`);
+			App.Events.addParagraph(frag, r);
+
+			App.Events.addResponses(frag, [
+				new App.Events.Result(`Offer ${him} a new life`, offer),
+				new App.Events.Result(`Make ${him} pay`, punish),
+				new App.Events.Result(`Enslave ${him}`, enslave),
+			]);
+
+			return frag;
+
+			function offer() {
+				V.SecExp.smilingMan.progress = 10;
+				return `You decide it would be criminally wasteful to throw away such talent. You offer ${him} a new life at your side. ${His} expertise will surely guarantee safety, if not supremacy, to your arcology in cyberspace, while ${he} will have safety and luxury in the physical world.`;
+			}
+
+			function punish() {
+				V.SecExp.smilingMan.progress = 20;
+				return `You decide to end ${his} pitiful life. ${He} has crossed the wrong master of the new world ${he} worked so hard to create. No mercy was asked for and no mercy will be given.`;
+			}
+
+			function enslave() {
+				V.SecExp.smilingMan.progress = 30;
+				return `You decide to enslave the ${girl}. ${His} skill may be great, but ${his} crimes are equally so, which will make it all the sweeter to turn ${him} into an obedient little toy to play with.`;
+			}
+		}
+	}
+};
-- 
GitLab