From 7b97a99c5b67e6f40cef679ce3d82ae7592ee64a Mon Sep 17 00:00:00 2001 From: Pregmodder <pregmodder@gmail.com> Date: Sun, 2 Aug 2020 03:03:30 -0400 Subject: [PATCH] Pregmod v3.6.2 --- Changelog.txt | 7 ++ js/003-data/miscData.js | 15 +++- src/events/RECI/ugly.js | 169 +++++++++++++++++++++++++++++++++++++ src/events/legacy/RECI.tw | 92 ++++++++++++++++++++ src/events/randomEvent.js | 1 + src/js/eventSelectionJS.js | 12 --- src/uncategorized/RECI.tw | 154 --------------------------------- 7 files changed, 283 insertions(+), 167 deletions(-) create mode 100644 src/events/RECI/ugly.js create mode 100644 src/events/legacy/RECI.tw delete mode 100644 src/uncategorized/RECI.tw diff --git a/Changelog.txt b/Changelog.txt index 8c05a7f6db6..986c9fcc644 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -2,6 +2,13 @@ Pregmod 0.10.7.1-3.6.x + 8/01/2020 + + 2 + -sugarcube updated to 2.33.1 + -completion of RECI cleanup + -fixes + 7/31/2020 1 diff --git a/js/003-data/miscData.js b/js/003-data/miscData.js index edbe529ea86..f31f5ea9adf 100644 --- a/js/003-data/miscData.js +++ b/js/003-data/miscData.js @@ -237,7 +237,20 @@ App.Data.misc = { fetusSize: [5000, 11000, 19000, 30000, 45000, 60000, 60000], fetusRate: [4, 4, 4, 4, 4, 4, 4, 4], sizeType: 2 - } + }, + + insect: { + type: "insect", + normalOvaMin: 50, + normalOvaMax: 500, + normalBirth: 2, + minLiveBirth: 1, + drugsEffect: 0.0, + fetusWeek: [0, 1, 2, 3, 4, 99999], + fetusSize: [20, 350, 400, 800, 5000, 5000], + fetusRate: [4, 4, 4, 4, 4, 4], + sizeType: 2 + }, }, /* Source data for canine include CTR (not head to toe size), so CTR do not apply anywhere, always 1.*/ diff --git a/src/events/RECI/ugly.js b/src/events/RECI/ugly.js new file mode 100644 index 00000000000..4a2691d7fce --- /dev/null +++ b/src/events/RECI/ugly.js @@ -0,0 +1,169 @@ +App.Events.RECIUgly = class RECIUgly extends App.Events.BaseEvent { + eventPrerequisites() { + return []; + } + + actorPrerequisites() { + return [ + [ // single event slave + s => s.fetish !== "mindbroken", + s => V.REUglyCheckinIDs.includes(s.ID), + s => s.face >= -10, + s => (s.assignment === Job.PUBLIC || s.assignment === Job.WHORE), + s => s.devotion >= 10, + s => (Beauty(s) >= 50), + s => s.bodySwap === 0, + s => s.porn.prestige === 0, + canSee, + canStand, + canTalk, + canHear, + hasAnyArms, + ] + ]; + } + + execute(node) { + /** @type {Array<App.Entity.SlaveState>} */ + let [eventSlave] = this.actors.map(a => getSlave(a)); + const { + // eslint-disable-next-line no-unused-vars + He, he, His, his, hers, him, himself, girl + } = getPronouns(eventSlave); + const {title: Master, say: say} = getEnunciation(eventSlave); + const freeMovement = (canWalk(eventSlave) || (canMove(eventSlave) && eventSlave.rules.mobility === "permissive")); + + V.nextLink = "Next Week"; + V.REUglyCheckinIDs.deleteWith((s) => s === eventSlave.ID); + + let artDiv = document.createElement("div"); // named container so we can replace it later + App.Events.drawEventArt(artDiv, eventSlave, "no clothing"); + node.appendChild(artDiv); + + let t = []; + t.push(App.UI.DOM.slaveDescriptionDialog(eventSlave)); + if (freeMovement) { + t.push(`comes`); + } else { + t.push(`is walked`); + } + t.push(`in for an inspection. You have a relaxed day scheduled, so you take the time to do an unusually thorough job. On a whim, you pull up ${his} complete file, flipping the virtual pages out across your desk. The induction pictures are particularly striking. ${He} doesn't look much like that, anymore, and that's a good thing. ${He} was not a pretty ${girl} when you got ${him}, though ${he}'s pretty enough now. With a desk control gesture you flip a full frontal shot of ${him} on the day of ${his} enslavement up onto a wallscreen.`); + App.Events.addParagraph(node, t); + + t = []; + t.push(`${His} ${App.Desc.eyesColor(eventSlave)} track your sudden motion, of course, and ${he} follows it to the screen. Suddenly, the ${SlaveTitle(eventSlave)} is eye to eye with a life-size picture of who ${he} used to be, just a few`); + if (V.showInches === 2) { + t.push(`feet`); + } else { + t.push(`meters`); + } + t.push(`away. ${He} gasps with recognition, and then ${his} face clouds inscrutably. ${He}`); + if (freeMovement) { + t.push(`takes a couple of hesitant steps`); + } else { + t.push(`hesitates for a moment before struggling`); + } + t.push(`forward, and then reaches out to touch the cheek of the ${girl} in the picture.`); + if (hasBothArms(eventSlave)) { + t.push(`As ${his} fingertips brush the smooth surface of the wallscreen, ${his} other hand ghosts along ${his} own face.`); + } else { + t.push(`${His} fingertips brush the smooth surface of the wallscreen, before ghosting along ${his} own face.`); + } + t.push(`${His} expression is not sad, so it's surprising when a single tear rolls down ${his} cheek. You order ${him} to tell you how the picture makes ${him} feel.`); + App.Events.addParagraph(node, t); + + t = []; + t.push(`${He} looks pensive, and goes through two false starts before ${he} clears ${his} throat, wrenches ${his} gaze away from ${his} picture, and ${say}s introspectively,`); + t.push(Spoken(eventSlave, `"${Master}, it's strange. We — we don't have pictures of ourselves, from before we were enslaved. I didn't really realize how much I'd changed. Some days being a slave is hard. But seeing that picture, it makes me feel better about it. You — you're really ${V.PC.title === 1 ? "handsome" : "pretty"}, ${Master}. I bet you always were."`)); + t.push(`${He} inclines ${his} head towards the homely ${girl} on the screen.`); + t.push(Spoken(eventSlave, `"It's hard to be ugly, ${Master}. Really hard. I feel sorry for that ${girl}, and I'm glad I don't look like ${him} anymore."`)); + t.push(`${He} laughs suddenly, a little self-consciously.`); + t.push(Spoken(eventSlave, `"The crazy thing is if you'd told that ${girl} that`)); + if (eventSlave.assignment === Job.WHORE) { + t.push(Spoken(eventSlave, `lots and lots of people would pay to fuck ${him}`)); + } else { + t.push(Spoken(eventSlave, `all kinds of people would happily fuck ${him}`)); + } + t.push(Spoken(eventSlave, `someday, ${he} wouldn't have believed you. It's kind of reassuring, actually. Is that weird? That came out weird. Sorry."`)); + App.Events.addParagraph(node, t); + + + App.Events.addResponses(node, [ + new App.Events.Result(`${He}'s pretty enough to decorate your arm for a night out`, nightOut), + new App.Events.Result(`Show ${him} off online`, livestreaming) + ]); + + function nightOut() { + // replace slave art + $(artDiv).empty(); + App.Events.drawEventArt(artDiv, eventSlave, "a mini dress"); + + let frag = document.createDocumentFragment(); + + t = []; + t.push(`You tell ${him} to head down to the wardrobe and put on the outfit that'll be laid out for ${him} there. ${He} obeys promptly, but does not return for some time, having gotten instructions from ${assistant.name} along the way to put extra effort into ${his} grooming. When ${he} finally returns, the effect is striking.`); + if (eventSlave.face > 10) { + t.push(`${He}'s a gorgeous ${girl} with or without makeup, dressed up or naked, but ${he}'s especially luscious tonight.`); + } else { + t.push(`${His} face is not flawless, but ${he}'s conscious of ${his} transformation, and the new confidence in ${his} beauty adds a special glow that cannot be faked.`); + } + t.push(`${His} evening dress is elegant; it's quite slutty by old world standards, but according to Free Cities fashion, it's just about the most conservative gown a slave can be expected to wear, and quite daring in that it isn't immediately obvious whether ${he}'s a slave or not.`); + if (eventSlave.areolae < 3) { + t.push(`The tops of ${his} areolae are hardly even visible.`); + } + App.Events.addParagraph(frag, t); + + t = []; + t.push(`You take ${him} out to a nice lounge, with blue-toned light and soft music. ${He} clings to your arm, pressing ${himself} against you just the right amount: not enough to demand sex right now, but enough to raise the anticipation of it later. ${He}'s a slave, so ${he} does not eat or drink the usual fare on offer, but the establishment is used to slaves and offers flavorful variation on liquid slave food. ${He} drinks the translucent fluid out of a tall glass, carefully maintaining ${his} poise. You circulate, leaving ${him} at the bar when acquaintances appear. ${He} perches on a stool, conscious of and pleased by the discreet admiration of ${his} body, delectably outlined by the tight dress. Once a new arrival who did not see you with ${him} introduces himself to ${him}. He's tall and fit and silver-haired, but he picked ${him} out of the room to approach, and it's with polite disappointment that he reacts to ${his} indication of you, across the room:`); + t.push(Spoken(eventSlave, `"I'm sorry, Sir, that's my ${Master} there."`)); + t.push(`He offers a nonverbal apology without coming over, which you accept with a wave: it's such a common mistake in Free Cities high society that it's universally brushed off without offense. It happens again later in the night, when a slightly tipsy free woman occupies the barstool next to ${eventSlave.slaveName}'s and keeps trying to relax against ${him} until the flattered slave explains ${himself} again. When you bring ${him} home at the end of the night, ${his}`); + if (hasBothEyes(eventSlave)) { + t.push(`eyes are`); + } else { + t.push(`eye is`); + } + t.push(`shining with <span class="trust inc">private assurance,</span> and ${he} presses ${himself} against you more closely than ever.`); + App.Events.addParagraph(frag, t); + + eventSlave.trust += 4; + + return frag; + } + + function livestreaming() { + t = []; + t.push(`You tell ${him} that ${he}'s become a very pretty sex slave, and to prove it, you`); + if (eventSlave.porn.feed > 0) { + t.push(`let ${him} believe you've`); + } + t.push(`set up a live feed for ${him} that's available for free in the old world.`); + if (eventSlave.porn.feed === 0) { + t.push(`The Free Cities produce an utter torrent of hardcore video, so much that there's never any profit to be made off it anymore, but viewers begin to join the channel anyway and by the end of the week`); + } else { + t.push(`${He} already has a growing fanbase, and with the promise of a week of special content, even more join the channel to observe. Before long,`); + } + t.push(`${he} has thousands of eyes watching ${him} as ${he}`); + if (eventSlave.assignment === Job.WHORE) { + t.push(`sells ${his} body`); + } else { + t.push(`has sex with random citizens`); + } + t.push(`in the hallways of ${V.arcologies[0].name}. ${capFirstChar(V.assistant.name)} keeps ${him} constantly informed of how many people are watching ${him} get fucked, how many of them are likely masturbating to ${his} body, and how many inquiries about ${him} ${V.assistant.name} is culling out of your inbox. ${He} slowly gets used to ${his} starring role in an impromptu free hardcore stream, but never quite stops stealing wondering glances at the nearest camera, as though ${he} cannot believe that so many people would sexualize ${him}. This lends ${him} a naughtiness that cannot be faked, garnering ${him} <span class="reputation inc">much attention</span> by the end of the week.`); + if (eventSlave.fetish === "humiliation" && eventSlave.fetishStrength > 60) { + if (eventSlave.fetishKnown === 1) { + t.push(`Of course, since ${he}'s a humiliation fetishist, this experience is like sexual candy for ${him}. ${He} <span class="devotion inc">can't get enough.</span>`); + } else{ + t.push(`Oddly enough, <span class="devotion inc">${he} seems to enjoy it far more than anticipated.</span>`); + } + eventSlave.devotion += 4; + } + if (eventSlave.porn.feed === 0) { + repX(1250, "event", eventSlave); + } else { + repX(500, "event", eventSlave); + eventSlave.porn.viewerCount += 7000; + } + return t; + } + } +}; diff --git a/src/events/legacy/RECI.tw b/src/events/legacy/RECI.tw new file mode 100644 index 00000000000..20a64041d53 --- /dev/null +++ b/src/events/legacy/RECI.tw @@ -0,0 +1,92 @@ +:: RECI [nobr] + +/* This is one of several files that contains and organizes many different events. */ +/* genericPlotEvents.tw */ +/* PESS.tw: Player Event, Single Slave */ +/* PETS.tw: Player Event, Two Slaves */ +/* RECI.tw: Random Event, Check In */ +/* REFI.tw: Random Event, Fetish Interest */ +/* REFS.tw: Random Event, Future Societies */ +/* RESS.tw: Random Event, Single Slave */ +/* RESSTR.tw: Random Event, Single Slave (Test Realm, for debugging events) */ +/* RETS.tw: Random Event, Two Slaves */ +/* */ +/* Events can also be in a dedicated *.tw file, formatted as follows: */ +/* jeXXXXX.tw: Justice Event */ +/* pXXXXXX.tw: Player event */ +/* peXXXXX.tw: Player Event focused on a slave */ +/* reXXXXX.tw: Random Event */ +/* resXXXX.tw: Random Event, School */ +/* seXXXXX.tw: Slave Event, focuses on slaves coming or going */ +/* securityForceXXXXX.tw: Special (Security) Force event */ +/* */ +/* Some scenes are also stored in useGuard.tw, walkPast.tw, and toychest.tw */ + +/* This is a legacy container for whomever may still be using it for events. */ +/* They, if they exist, should strongly consider converting their events to the JS standard. */ + +<<if Array.isArray($RECIevent)>> + <<set $activeSlave = $eventSlave>> + <<if $cheatMode == 1>> + <<set $nextButton = "Back", $nextLink = "Nonrandom Event", $returnTo = "Nonrandom Event">> /* if user just clicks spacebar */ + ''A random check-in event would have been selected from the following:'' + <br> + <<for _i = 0; _i < $RECIevent.length; _i++>> + <<print "[[$RECIevent[_i]|RECI][$RECIevent = $RECIevent[" + _i + "]]]">> + <br> + <</for>> + <br><br>[[Go Back to Random Individual Event|Random Individual Event][$activeSlave = 0]] + <<else>> + <<set $RECIevent = $RECIevent.random()>> + <<goto "RECI">> + <</if>> +<<else>> + +<<set $nextButton = "Continue", $nextLink = "AS Dump", $returnTo = "Next Week">> + +<<set _clothesTemp = $activeSlave.clothes>> +<<switch $RECIevent>> + /*Some events start with the slave naked (any event that starts with the daily inspection, for example). Here we switch their clothing just for the image to load, then switch it back quickly so the player's choice is not messed up.*/ +<<case "placeholder">> + <<set $activeSlave.clothes = "no clothing">> +<</switch>> +<span id="artFrame"> +/* 000-250-006 */ +<<if $seeImages == 1>> + <<if $imageChoice == 1>> + <div class="imageRef lrgVector"><div class="mask"> </div><<= SlaveArt($activeSlave, 2, 0)>></div> + <<else>> + <div class="imageRef lrgRender"><div class="mask"> </div><<= SlaveArt($activeSlave, 2, 0)>></div> + <</if>> +<</if>> +/* 000-250-006 */ +</span> +<<set $activeSlave.clothes = _clothesTemp>> + +<<run Enunciate($activeSlave)>> +<<set $desc = SlaveTitle($activeSlave)>> +<<set _belly = bellyAdjective($activeSlave)>> +<<setLocalPronouns $activeSlave>> +<<setPlayerPronouns>> + +<<switch $RECIevent>> + +<<default>> + <br>ERROR: bad RECI event $RECIevent +<</switch>> + +<br><br> +<span id="result"> +<<switch $RECIevent>> + +<<default>> + <br>ERROR: bad RECI event $RECIevent +<</switch>> + +<<if $cheatMode == 1>> + <br><br>DEBUG: [[Go back to Nonrandom Event|Nonrandom Event][$activeSlave = 0, $eventSlave = 0]] +<</if>> + +</span> + +<</if>> /* CLOSES EVENT SELECTION */ diff --git a/src/events/randomEvent.js b/src/events/randomEvent.js index e16948561bf..244abda7ad8 100644 --- a/src/events/randomEvent.js +++ b/src/events/randomEvent.js @@ -40,6 +40,7 @@ App.Events.getIndividualEvents = function() { new App.Events.RECIFuta(), new App.Events.RECIMilf(), new App.Events.RECIOrientation(), + new App.Events.RECIUgly(), new App.Events.RETSSiblingTussle(), new App.Events.RETSSimpleAssault(), diff --git a/src/js/eventSelectionJS.js b/src/js/eventSelectionJS.js index e059b20a78c..d4aec3982ab 100644 --- a/src/js/eventSelectionJS.js +++ b/src/js/eventSelectionJS.js @@ -335,18 +335,6 @@ globalThis.generateRandomEventPoolStandard = function(eventSlave) { } } - if (canSee(eventSlave)) { - if (eventSlave.face >= -10) { - if (eventSlave.devotion >= 10) { - if ([Job.PUBLIC, Job.WHORE].includes(eventSlave.assignment)) { - if (V.REUglyCheckinIDs.includes(eventSlave.ID)) { - V.RECIevent.push("ugly"); - } - } - } - } - } - /* if(eventSlave.drugs === "breast injections") { if(eventSlave.anus > 0 || eventSlave.vagina > 0) { diff --git a/src/uncategorized/RECI.tw b/src/uncategorized/RECI.tw deleted file mode 100644 index 7226673a369..00000000000 --- a/src/uncategorized/RECI.tw +++ /dev/null @@ -1,154 +0,0 @@ -:: RECI [nobr] - -/* This is one of several files that contains and organizes many different events. */ -/* genericPlotEvents.tw */ -/* PESS.tw: Player Event, Single Slave */ -/* PETS.tw: Player Event, Two Slaves */ -/* RECI.tw: Random Event, Check In */ -/* REFI.tw: Random Event, Fetish Interest */ -/* REFS.tw: Random Event, Future Societies */ -/* RESS.tw: Random Event, Single Slave */ -/* RESSTR.tw: Random Event, Single Slave (Test Realm, for debugging events) */ -/* RETS.tw: Random Event, Two Slaves */ -/* */ -/* Events can also be in a dedicated *.tw file, formatted as follows: */ -/* jeXXXXX.tw: Justice Event */ -/* pXXXXXX.tw: Player event */ -/* peXXXXX.tw: Player Event focused on a slave */ -/* reXXXXX.tw: Random Event */ -/* resXXXX.tw: Random Event, School */ -/* seXXXXX.tw: Slave Event, focuses on slaves coming or going */ -/* securityForceXXXXX.tw: Special (Security) Force event */ -/* */ -/* Some scenes are also stored in useGuard.tw, walkPast.tw, and toychest.tw */ - -<<if Array.isArray($RECIevent)>> - <<set $activeSlave = $eventSlave>> - <<if $cheatMode == 1>> - <<set $nextButton = "Back", $nextLink = "Nonrandom Event", $returnTo = "Nonrandom Event">> /* if user just clicks spacebar */ - ''A random check-in event would have been selected from the following:'' - <br> - <<for _i = 0; _i < $RECIevent.length; _i++>> - <<print "[[$RECIevent[_i]|RECI][$RECIevent = $RECIevent[" + _i + "]]]">> - <br> - <</for>> - <br><br>[[Go Back to Random Individual Event|Random Individual Event][$activeSlave = 0]] - <<else>> - <<set $RECIevent = $RECIevent.random()>> - <<goto "RECI">> - <</if>> -<<else>> - -<<set $nextButton = "Continue", $nextLink = "AS Dump", $returnTo = "Next Week">> - -<<set _clothesTemp = $activeSlave.clothes>> -<<switch $RECIevent>> - /*Some events start with the slave naked (any event that starts with the daily inspection, for example). Here we switch their clothing just for the image to load, then switch it back quickly so the player's choice is not messed up.*/ -<<case "ugly">> - <<set $activeSlave.clothes = "no clothing">> -<</switch>> -<span id="artFrame"> -/* 000-250-006 */ -<<if $seeImages == 1>> - <<if $imageChoice == 1>> - <div class="imageRef lrgVector"><div class="mask"> </div><<= SlaveArt($activeSlave, 2, 0)>></div> - <<else>> - <div class="imageRef lrgRender"><div class="mask"> </div><<= SlaveArt($activeSlave, 2, 0)>></div> - <</if>> -<</if>> -/* 000-250-006 */ -</span> -<<set $activeSlave.clothes = _clothesTemp>> - -<<run Enunciate($activeSlave)>> -<<set $desc = SlaveTitle($activeSlave)>> -<<set _belly = bellyAdjective($activeSlave)>> -<<setLocalPronouns $activeSlave>> -<<setPlayerPronouns>> - -<<switch $RECIevent>> - -<<case "ugly">> - -<<for $i = 0; $i < $REUglyCheckinIDs.length; $i++>> - <<if $REUglyCheckinIDs[$i] == $activeSlave.ID>> - <<set $REUglyCheckinIDs.deleteAt($i)>> - <<break>> - <</if>> -<</for>> - -<<= App.UI.slaveDescriptionDialog($activeSlave)>> comes in for an inspection. You have a relaxed day scheduled, so you take the time to do an unusually thorough job. On a whim, you pull up $his complete file, flipping the virtual pages out across your desk. The induction pictures are particularly striking. $He doesn't look much like that, anymore, and that's a good thing. $He was not a pretty girl when you got here, though $he's pretty enough now. With a desk control gesture you flip a full frontal shot of $him on the day of $his enslavement up onto a wallscreen. -<br><br> -$His <<= App.Desc.eyesColor($activeSlave)>> track your sudden motion, of course, and $he follows it to the screen. Suddenly, the $desc is eye to eye with a life-size picture of who $he used to be, just a few <<if $showInches == 2>>feet<<else>>meters<</if>> away. $He gasps with recognition, and then $his face clouds inscrutably. $He takes a couple of hesitant steps forward, and then reaches out to touch the cheek of the $girl in the picture. As $his fingertips brush the smooth surface of the wallscreen, $his other hand ghosts along $his own face. $His expression is not sad, so it's surprising when a single tear rolls down $his cheek. You order $him to tell you how the picture makes $him feel. -<br><br> -$He looks pensive, and goes through two false starts before $he clears $his throat, wrenches $his gaze away from $his picture, and <<say>>s introspectively, "<<Master>>, it'<<s>> <<s>>trange. We — we don't have picture<<s>> of our<<s>>elve<<s>>, from before we were en<<s>>laved. I didn't really reali<<z>>e how much I'd changed. <<S>>ome day<<s>> being a <<s>>lave i<<s>> hard. But <<s>>eeing that picture, it make<<s>> me feel better about it. You — you're really <<if $PC.title == 1>>hand<<s>>ome<<else>>pretty<</if>>, <<Master>>. I bet you alway<<s>> were." $He inclines $his head towards the homely $girl on the screen. "It'<<s>> hard to be ugly, <<Master>>. Really hard. I feel <<s>>orry for that $girl, and I'm glad I don't look like $him anymore." $He laughs suddenly, a little self-consciously. "The cra<<z>>y thing i<<s>>, if you'd told that $girl that -<<if $activeSlave.assignment == "whore">> - lot<<s>> and lot<<s>> of people would pay to fuck $him -<<else>> - all kind<<s>> of people would happily fuck $him -<</if>> -<<s>>omeday, <<he>> wouldn't have believed you. It'<<s>> kind of rea<<ss>>uring, actually. I<<s>> that weird? That came out weird. <<S>>orry." - -<<default>> - <br>ERROR: bad RECI event $RECIevent -<</switch>> - -<br><br> -<span id="result"> -<<switch $RECIevent>> - -<<case "ugly">> - -<<link "$He's pretty enough to decorate your arm for a night out">> - <<set _clothesTemp = $activeSlave.clothes, $activeSlave.clothes = "a mini dress">> - <<replace "#artFrame">> - /* 000-250-006 */ - <<if $seeImages == 1>> - <<if $imageChoice == 1>> - <div class="imageRef lrgVector"><div class="mask"> </div><<= SlaveArt($activeSlave, 2, 0)>></div> - <<else>> - <div class="imageRef lrgRender"><div class="mask"> </div><<= SlaveArt($activeSlave, 2, 0)>></div> - <</if>> - <</if>> - /* 000-250-006 */ - <</replace>> - <<set $activeSlave.clothes = _clothesTemp>> - - <<replace "#result">> - <p> - You tell $him to head down to the wardrobe and put on the outfit that'll be laid out for $him there. $He obeys promptly, but does not return for some time, having gotten instructions from $assistant.name along the way to put extra effort into $his grooming. When $he finally returns, the effect is striking. - <<if $activeSlave.face > 10>> - $He's a gorgeous $girl with or without makeup, dressed up or naked, but $he's especially luscious tonight. - <<else>> - $His face is not flawless, but $he's conscious of $his transformation, and the new confidence in $his beauty adds a special glow that cannot be faked. - <</if>> - $His evening dress is elegant; it's quite slutty by old world standards, but according to Free Cities fashion, it's just about the most conservative gown a slave can be expected to wear, and quite daring in that it isn't immediately obvious whether $he's a slave or not. The tops of $his areolae are hardly even visible. - </p> - <p> - You take $him out to a nice lounge, with blue-toned light and soft music. $He clings to your arm, pressing $himself against you just the right amount: not enough to demand sex right now, but enough to raise the anticipation of it later. $He's a slave, so $he does not eat or drink the usual fare on offer, but the establishment is used to slaves and offers flavorful variation on liquid slave food. $He drinks the translucent fluid out of a tall glass, carefully maintaining $his poise. You circulate, leaving $him at the bar when acquaintances appear. $He perches on a stool, conscious of and pleased by the discreet admiration of $his body, delectably outlined by the tight dress. Once a new arrival who did not see you with $him introduces himself to $him. He's tall and fit and silver-haired, but he picked $him out of the room to approach, and it's with polite disappointment that he reacts to $his indication of you, across the room: "I'm <<s>>orry, <<S>>ir, that'<<s>> my <<Master>> there." He offers a nonverbal apology without coming over, which you accept with a wave: it's such a common mistake in Free Cities high society that it's universally brushed off without offense. It happens again later in the night, when a slightly tipsy free woman occupies the barstool next to $activeSlave.slaveName's and keeps trying to relax against $him until the flattered slave explains $himself again. When you bring $him home at the end of the night, $his eyes are shining with @@.mediumaquamarine;private assurance,@@ and $he presses $himself against you more closely than ever. - </p> - <<set $activeSlave.trust += 4>> - <</replace>> -<</link>> -<br><<link "Show $him off online">> - <<replace "#result">> - You tell $him that $he's become a very pretty sex slave, and to prove it, you set up a live feed for $him that's available for free in the old world. The Free Cities produce an utter torrent of hardcore video, so much that there's never any profit to be made off it anymore, but viewers begin to join the channel anyway and by the end of the week $he has thousands of eyes watching $him as $he <<if $activeSlave.assignment == "whore">>sells $his body<<else>>has sex with random citizens<</if>> in the hallways of $arcologies[0].name. <<= capFirstChar($assistant.name)>> keeps $him constantly informed of how many people are watching $him get fucked, how many of them are likely masturbating to $his body, and how many inquiries about $him $assistant.name is culling out of your inbox. $He slowly gets used to $his starring role in an impromptu free hardcore stream, but never quite stops stealing wondering glances at the nearest camera, as though $he cannot believe that so many people would sexualize $him. This lends $him a naughtiness that cannot be faked, garnering $him @@.green;much attention@@ by the end of the week. - <<if ($activeSlave.fetish == "humiliation") && ($activeSlave.fetishKnown == 1) && ($activeSlave.fetishStrength > 60)>> - Of course, since $he's a humiliation fetishist, this experience is like sexual candy for $him. $He @@.hotpink;can't get enough.@@ - <<set $activeSlave.devotion += 4>> - <</if>> - <<run repX(1250, "event", $activeSlave)>> - <</replace>> -<</link>> - -<<default>> - <br>ERROR: bad RECI event $RECIevent -<</switch>> - -<<if $cheatMode == 1>> - <br><br>DEBUG: [[Go back to Nonrandom Event|Nonrandom Event][$activeSlave = 0, $eventSlave = 0]] -<</if>> - -</span> - -<</if>> /* CLOSES EVENT SELECTION */ -- GitLab