diff --git a/devTools/Script to convert SC to JS/SC to JS 1.py b/devTools/Script to convert SC to JS/SC to JS 1.py index b77dc0ba1ee381a958ab45dcd59cf2c91b12d866..b666650ca6ce58108d5e4c07182624e6cb112d80 100644 --- a/devTools/Script to convert SC to JS/SC to JS 1.py +++ b/devTools/Script to convert SC to JS/SC to JS 1.py @@ -107,6 +107,10 @@ editor.rereplace(r"( r.push[^;]*?)( _[^ ,<'`]*)", r"\1${ \2}") #Delay fixing _S to simplify detection if it's embedded. editor.rereplace(r"_S\.", r"S.") +#drop spaces +editor.rereplace(r"r.push\(` ", r"r.push\(`") +editor.rereplace(r" `\);", r"`\);") + #Cleanup editor.rereplace(r"\${He}adGirl", r"V.HeadGirl") editor.rereplace(r"\.}", r"}.") diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js index e21857e5e33ac36104f0b9b250d442211473fa92..139f37366c6a1c7829a51d4383c62495aebb79ad 100644 --- a/js/003-data/gameVariableData.js +++ b/js/003-data/gameVariableData.js @@ -947,6 +947,7 @@ App.Data.resetOnNGPlus = { /** @type {FC.Zeroable<string>} */ traitorType: 0, traitorWeeks: 0, + /** @type {FC.Zeroable<object>} */ traitorStats: 0, hackerSupport: 0, /** @type {FC.SlaveStateOrZero} */ diff --git a/src/events/RE/reMaleArcologyOwner.js b/src/events/RE/reMaleArcologyOwner.js new file mode 100644 index 0000000000000000000000000000000000000000..e079dc37e095b6f6111184881600a60da1f821d5 --- /dev/null +++ b/src/events/RE/reMaleArcologyOwner.js @@ -0,0 +1,220 @@ +App.Events.REMaleArcologyOwner = class REMaleArcologyOwner extends App.Events.BaseEvent { + eventPrerequisites() { + return [ + () => V.policies.regularParties === 1, + () => V.PC.vagina > 0, + () => V.PC.title === 0, + () => random(0, 99) < V.seeDicks + ]; + } + + get weight() { + return ( + (V.rep-10000 > random(1, 10000)) && + (random(0, 99) < V.seeDicks) + ) ? 1 : 0; + } + + actorPrerequisites() { + return []; + } + + execute(node) { + V.nextButton = "Continue"; + V.nextLink = "RIE Eligibility Check"; + let r = []; + + r.push(`The more reputable you've gotten, the more rarefied your entertainments have become. Parties featuring celebrities, old world national leaders, and Free Cities arcology owners have become a nearly nightly experience for you, an expected part of your routine as one of the Free Cities' leading citizens. According to your whims and predilections, you have the choice of participating all night or just making a brief appearance at the start. The important thing is that they're here, come to pay tribute by their presence.`); + App.Events.addParagraph(node, r); + r = []; + r.push(`Tonight there are several attendees of such stature that you must exchange pleasantries with each. The last is a fellow arcology owner, not quite up to your stature of course, but certainly worth conciliating. As usual, it's a man. He stands a touch taller than you, and is wearing one of the best-tailored suits you've ever seen. The pants are cut perfectly to draw your eyes to his bulge, and, from what you can see, he is quite toned; the jacket is masculine, and accentuates his fine chest. He is obviously well into middle age, but has made no attempt to hide this fact, allowing his graying hair to proudly display his experience.`); + App.Events.addParagraph(node, r); + r = []; + r.push(`He strikes a fine balance in conversation with you, firm enough to not overpower you, yet neither aggressive nor insistent. He does not take too much of your time, but after you've moved on to your next prominent guest, you receive a brief private message from him. "Surely it's been a while since you've met someone who could make you feel like a woman," it reads. "I'm sure your slaves are fun enough, but letting one of them or some citizen be your man would be fatally stupid. I don't think anyone would look down on you for hooking up with me, though. No strings attached." You glance over at where he's standing${(V.PC.belly >= 5000) ? ` a little surprised; men usually aren't so forthcoming with women as visibly pregnant as you are` : ``}. He's listening politely to a business proposition, and he turns his head slightly toward you, one corner of his firm mouth quirking upward.`); + App.Events.addParagraph(node, r); + + const responses = []; + responses.push(new App.Events.Result("Head over and assert yourself", assert)); + responses.push(new App.Events.Result("Walk past him and out onto an unoccupied balcony", past)); + + if ((V.PC.preg >= 28 && V.PC.pregMood === 2) || V.PC.boobs >= 1000 || V.PC.butt >= 4) { + responses.push(new App.Events.Result("Convince him to make the first move", convince)); + } + + if (V.mercenaries > 0 && V.PC.belly < 5000 && V.PC.boobs < 1200 && V.PC.butt < 4) { + responses.push(new App.Events.Result("Quickly arrange an anonymous night out for him", nightOut)); + } + + App.Events.addResponses(node, responses); + + function assert() { + const frag = new DocumentFragment(); + let r = []; + r.push(`You head over and insert yourself into the conversation between him and the woman trying to convince him to invest in her solar power concern. Your presence and power are such that she gives way rapidly, and you ostentatiously yet nonverbally assert your right to first claim to his company and conversation. After a few minutes of this public display, however, it becomes apparent that this is not what he was looking for. He is likely concerned that you are far too assertive for him to safely manage. He excuses himself and withdraws. You return to your`); + if (V.PC.refreshmentType === 1) { + r.push(`glass of ${V.PC.refreshment},`); + } else if (V.PC.refreshmentType === 2) { + r.push(`plate of ${V.PC.refreshment},`); + } else if (V.PC.refreshmentType === 3) { + r.push(`pouch of ${V.PC.refreshment},`); + } else if (V.PC.refreshmentType === 4) { + r.push(`syringe of ${V.PC.refreshment},`); + } else if (V.PC.refreshmentType === 5) { + r.push(`bottle of ${V.PC.refreshment},`); + } else if (V.PC.refreshmentType === 6) { + r.push(`sheet of ${V.PC.refreshment},`); + } else { // 0 and fallback + r.push(`${V.PC.refreshment},`); + } + r.push(`consoling yourself that you are not exactly starved for company.`); + App.Events.addParagraph(frag, r); + return frag; + } + + function past() { + const frag = new DocumentFragment(); + let r = []; + r.push(`You walk past him and out onto a balcony. He politely disengages himself and follows, meeting your gaze with a twinkle in his eye. You start talking of nothing of real consequence, but you find that you do have a fair amount to discuss and joke about, since there are oddities to your life that only another slaveowning arcology owner can really understand. You discover that he is very willing to share ${V.PC.refreshment}, and you break out some of your best. The party takes notice of your tête-à -tête, but his judgment was obviously correct. Rather than looking down on you, the other prominent guests seem respectfully envious of his access to you. This is still the case even when he starts to get flirty, leaning into you, brushing against you, and more. ${capFirstChar(V.assistant.name)} cleared your suite long ago, so when he finally nudges his hip against yours and does not take it away, you take him by the hand and lead him there. He stops you with a hand at the door to the suite and unbuttons his shirt, revealing a triathlete's tanned and sculpted body. As you begin to strip, he embraces you, whispering, "You have no idea how nice this is." It's clear it's been a long time since you've let someone else take the lead, and he sometimes has to snap wrestle you for dominance. He leaves a few hours later with a satisfied expression, giving you a deep kiss on his way out in full public view. <span class="reputation inc">Your reputation has greatly improved.</span>`); + if (canGetPregnant(V.PC)) { + r.push(knockMeUp(V.PC, 60, 0, -4)); + } + repX(5000, "event"); + V.trinkets.push("a cologned thank-you note from a male arcology owner of your acquaintance"); + App.Events.addParagraph(frag, r); + return frag; + } + + function convince() { + const frag = new DocumentFragment(); + let r = []; + const randomForeignFS = random(1, 100); + if (V.PC.preg >= 28 && V.PC.pregMood === 2) { + r.push(`You move to waddle past him and purposefully stumble, prompting him to catch you. Feigning fatigue, you politely ask if he'd help you out. You aren't exactly subtle as he walks you back to your room, dropping hints at how difficult your pregnancy has been and just how good it feels to be with a man. ${capFirstChar(V.assistant.name)} cleared your suite long ago, so when you enter, disrobe and splay yourself across the bed, it's just you and him.`); + if (randomForeignFS > 90) { + r.push(`It's immediately clear by the look on his face that you made a mistake. The man clearly comes from a society that dislikes pregnant woman leading and your attempt to manipulate him into being your lover has pushed him past his level of tolerance. He storms out in anger and, upon returning to the party, makes your underhanded efforts known. <span class="reputation dec">Your reputation has taken a major hit.</span>`); + repX(-1000, "event"); + } else if (randomForeignFS > 70) { // repop + r.push(`It's immediately clear by the look on his face that you made a mistake. He wastes no time in leaping onto the bed, and in his haste, barely manages to disrobe. Before you can attempt to take control, he's hilted in your needy vagina and giving you the fucking your body has been craving. He leaves a few hours later with a satisfied expression and returns to the party, where he puts in a good word for just how good you were. <span class="reputation inc">Your reputation has slightly improved,</span> though nowhere near as much as his.`); + repX(100, "event"); + V.trinkets.push("a thank-you note from a male arcology owner of your acquaintance that smells strongly of lust"); + } else { + r.push(`He slips out of his clothes, revealing a triathlete's tanned and sculpted body, and joins you in the bed. You direct him onto his back and hilt yourself on his dick. As you savor the feeling of being filled, you notice he doesn't quite know how to properly please a woman of your fecundity, something easily corrected. You're certain he has learned several new positions by the end of your several-hour-long session and after you both stumble back to the party, he gives you a deep kiss in full public view. <span class="reputation inc">Your reputation has greatly improved.</span>`); + repX(500, "event"); + V.trinkets.push("a flirtatious thank-you note from a male arcology owner you broke in to lusty preggo sex"); + } + } else if (V.PC.boobs >= 1000) { + r.push(`You adjust your dress to better emphasize your huge`); + if (V.PC.boobsImplant > 0) { + r.push(`fake tits`); + } else { + r.push(`soft breasts`); + } + r.push(`and head over to join to the`); + if (randomForeignFS > 80) { // slimness + r.push(`conversation between him and the woman trying to convince him to invest in her solar power concern. After a few minutes of you jiggling your cleavage around, however, it becomes apparent that this is not turning him on at all. He excuses himself and withdraws. You return to your`); + if (V.PC.refreshmentType === 1) { + r.push(`glass of ${V.PC.refreshment},`); + } else if (V.PC.refreshmentType === 2) { + r.push(`plate of ${V.PC.refreshment},`); + } else if (V.PC.refreshmentType === 3) { + r.push(`pouch of ${V.PC.refreshment},`); + } else if (V.PC.refreshmentType === 4) { + r.push(`syringe of ${V.PC.refreshment},`); + } else if (V.PC.refreshmentType === 5) { + r.push(`bottle of ${V.PC.refreshment},`); + } else if (V.PC.refreshmentType === 6) { + r.push(`sheet of ${V.PC.refreshment},`); + } else { // 0 and fallback + r.push(`${V.PC.refreshment},`); + } + r.push(`consoling yourself that you are not exactly starved for company.`); + } else if (randomForeignFS > 60) { // transformation + r.push(`conversation between him and the woman trying to convince him to invest in her solar power concern.`); + if (V.PC.boobsImplant === 0) { + r.push(`After a few minutes of you jiggling your cleavage around, however, it becomes apparent that, while he does frequently eye it, it just isn't to his tastes. He excuses himself and withdraws. You return to your`); + if (V.PC.refreshmentType === 1) { + r.push(`glass of ${V.PC.refreshment},`); + } else if (V.PC.refreshmentType === 2) { + r.push(`plate of ${V.PC.refreshment},`); + } else if (V.PC.refreshmentType === 3) { + r.push(`pouch of ${V.PC.refreshment},`); + } else if (V.PC.refreshmentType === 4) { + r.push(`syringe of ${V.PC.refreshment},`); + } else if (V.PC.refreshmentType === 5) { + r.push(`bottle of ${V.PC.refreshment},`); + } else if (V.PC.refreshmentType === 6) { + r.push(`sheet of ${V.PC.refreshment},`); + } else { // 0 and fallback + r.push(`${V.PC.refreshment},`); + } + r.push(`, consoling yourself that you are not exactly starved for company.`); + } else { + r.push(`After a few minutes, it becomes clear that something else is on his mind than renewable energy and he politely excuses himself, though not before dropping something into your cleavage. The women watches dejectedly as you fish out his business card. Taking the hint, you scan the room and find him slowly leaving once he makes eye contact; a clear invitation to follow him. As you wander down the hall, you feel a hand cup one of your firm globes and pull you into an embrace. While he seems content to just grope you, you had other plans and begin undoing his belt. You gasp a little as his member pops out into your hands, eager for some attention of its own. He wastes no time in pulling your ample bust downwards and slipping his eager cock between your breasts. You grab his hips for support as he vigorously pistons into your chest, struggling to retake control of the situation before he renders you unable to return to the party. With a joyous groan, he blows his load deep into your bosom and down your dress. As he helps you to your feet, and the stain under your rack grows larger, you give him a kiss on the cheek and head off to change. He returns to the party, and from what your serving slaves tell you later, seems to have boasted about how well you do business. <span class="reputation inc">Your reputation has slightly improved,</span> though nowhere near as much as his.`); + repX(100, "event"); + V.trinkets.push("a thank-you note from a male arcology owner of your acquaintance that not-so-subtly suggests getting a bigger pair of implants"); + } + } else if (randomForeignFS > 40 && V.PC.boobsImplant === 0) { // purist + expansion + r.push(`conversation between him and the woman trying to convince him to invest in her solar power concern. After a few minutes of you jiggling your cleavage around, it becomes clear that his attention span for renewable energy is no where near what it is for big breasts just begging to pop out of their top. He excuses himself from the conversion, though not without intentionally bumping into your rack and slipping into the hall. The woman glares daggers at you and returns to her drink, leaving you to follow suit and slip out of the party. As you wander down the hall, you feel a hand struggle to cup one of your jiggly globes and pull you into an embrace. While he seems content to just grope you, you had other plans and begin undoing his belt. You gasp a little as his member pops out into your hands, eager for some attention of its own. He wastes no time in pulling your ample bust downwards and slipping his eager cock between your breasts. You grab his hips for support as he vigorously pistons into your chest in an attempt to keep your balance under their motion and to make an attempt to retake control of the situation before he renders you unable to return to the party. With a joyous groan, he blows his load deep into your bosom and down your dress. As he helps you to your feet, and the stain under your rack grows larger, you give him a kiss on the cheek and head off to change. He returns to the party, and from what your serving slaves tell you later, seems to have boasted about how well you do business. <span class="reputation inc">Your reputation has slightly improved,</span> though nowhere near as much as his.`); + repX(100, "event"); + V.trinkets.push("a thank-you note from a male arcology owner of your acquaintance with an attached list of natural supplements to make your tits even bigger"); + } else { + r.push(`conversation between him and the woman trying to convince him to invest in her solar power concern. Your attempts, at first, appear to be working as he begins to stutter and lose focus on the topic at hand, but he soon apologizes, wraps an arm around your shoulders, pulls you close and starts groping your enormous funbags. He returns to discussing business while using you like a stress ball and manages to seal a rather lucrative business deal. He gives you an appreciative squeeze and heads on his way, leaving you dumbfounded at what just happened. His reputation has improved significantly, while your status <span class="reputation dec">as nothing more than stress relief</span> is made clear.`); + repX(-500, "event"); + } + } else { // big butt + if (randomForeignFS > 80) { // slimness + r.push(`You wait until he finishes his conversation with the woman trying to convince him to invest in her solar power concern and excuses himself to head for the restroom. You know the layout of the penthouse better than anyone and know that he'll likely take a narrow service hall to get back to the party quick; that is where you will spring your trap. As he makes his return, you attempt to squeeze past him, forcing your enormous`); + if (V.PC.buttImplant !== 0) { + r.push(`fake`); + } + r.push(`rear up against his crotch. As you wiggle against him, it becomes apparent that any hint of an erection he may have had is quickly fading. He apologizes for the inconvenience and heads on his way. You stop around the corner, out of sight, and console yourself that you are not exactly starved for company.`); + } else if (randomForeignFS > 60) { // transformation + if (V.PC.buttImplant === 0) { + r.push(`You wait until he finishes his conversation with the woman trying to convince him to invest in her solar power concern and excuses himself to head for the restroom. You know the layout of the penthouse better than anyone and know that he'll likely take a narrow service hall to get back to the party quick; that is where you will spring your trap. As he makes his return, you attempt to squeeze past him, forcing your enormous`); + if (V.PC.buttImplant !== 0) { + r.push(`fake`); + } + r.push(`rear up against his crotch. As you wiggle against him, it becomes apparent that he is a man that enjoys a nice big ass wrapped around his cock. You tense up as you feel his hands sink into your soft cheeks, only to find that he is slipping out from behind you. He apologizes for leading you on and heads back to the party. You're left standing there, pondering why it didn't work, only to realize that he lost interest the moment he realized your butt was real.`); + } else { + r.push(`You wait until he finishes his conversation with the woman trying to convince him to invest in her solar power concern and excuses himself to head for the restroom. You know the layout of the penthouse better than anyone and know that he'll likely take a narrow service hall to get back to the party quick; that is where you will spring your trap. As he makes his return, you attempt to squeeze past him, forcing your enormous`); + if (V.PC.buttImplant !== 0) { + r.push(`fake`); + } + r.push(`rear up against his crotch. As you wiggle against him, it becomes apparent that something hard is slowly snaking its way between your firm cheeks. Your suspicions are confirmed when you feel his hands grab your hips as he begins to dry hump you. Before he can ruin the moment, and his pants, you quickly guide him into one of the many stairwells hidden throughout the penthouse. By the time you've grabbed hold of the rail, he's undone his pants, managed to pull your dress up over your immense bottom, and lined himself up with your moist slit. You push back against him, biting your lip as the length of his member slides into you, letting him know that you are ready as your shelf of an ass blocks any view of your crotch from above. He takes you hard against the railing, enjoying the sensation of your implants slamming against him. With a joyous groan, he pulls out and blows his load in your crack and up your back. As he helps you upright, you lean back give him a kiss on the cheek before heading off to change. He returns to the party, and from what your serving slaves tell you later, seems to have boasted about how well you do business. <span class="reputation inc">Your reputation has slightly improved,</span> though nowhere near as much as his.`); + repX(100, "event"); + V.trinkets.push("a thank-you note from a male arcology owner of your acquaintance that not-so-subtly suggests getting a bigger pair of ass implants"); + } + } else if (randomForeignFS > 40 && V.PC.buttImplant === 0) { // purist + expansion + r.push(`You wait until he finishes his conversation with the woman trying to convince him to invest in her solar power concern and excuses himself to head for the restroom. You know the layout of the penthouse better than anyone and know that he'll likely take a narrow service hall to get back to the party quick; that is where you will spring your trap. As he makes his return, you attempt to squeeze past him, forcing your enormous rear up against his crotch. As you wiggle against him, it becomes apparent that something hard is slowly snaking its way between your expansive cheeks. Your suspicions are confirmed when you feel his hands grab your hips as he begins to dry hump you. Before he can ruin the moment, and his pants, you quickly guide him into one of the many stairwells hidden throughout the penthouse. By the time you've grabbed hold of the rail, he's undone his pants, managed to pull your dress up over your immense bottom, and lined himself up with your moist slit. You push back against him, biting your lip as the length of his member slides into you, letting him know that you are ready as your shelf of an ass blocks any view of your crotch from above. He takes you hard against the railing, enjoying the motion of your butt slamming against him. With a joyous groan, he pulls out and blows his load in your crack and up your back. As he helps you upright, you lean back give him a kiss on the cheek before heading off to change. He returns to the party, and from what your serving slaves tell you later, seems to have boasted about how well you do business. <span class="reputation inc">Your reputation has slightly improved,</span> though nowhere near as much as his.`); + repX(100, "event"); + V.trinkets.push("a thank-you note from a male arcology owner of your acquaintance with an attached list of natural supplements and diets to add even more weight to your rear"); + } else { + r.push(`You adjust your dress to better hug your huge`); + if (V.PC.buttImplant !== 0) { + r.push(`fake ass`); + } else { + r.push(`soft butt`); + } + r.push(`and head over to join to the conversation between him and the woman trying to convince him to invest in her solar power concern. Your attempts, at first, appear to be working as he begins to stutter and lose focus on the topic at hand, but he soon apologizes, wraps an arm around your waist, pulls you close and starts groping your enormous rear. He returns to discussing business while using you like a stress ball and manages to seal a rather lucrative business deal. He gives you an appreciative slap on the fanny and heads on his way, leaving you dumbfounded at what just happened. His reputation has improved significantly, while your status <span class="reputation dec">as nothing more than stress relief</span> is made clear.`); + repX(-500, "event"); + } + } + + App.Events.addParagraph(frag, r); + return frag; + } + + function nightOut() { + const frag = new DocumentFragment(); + let r = []; + r.push(`You immediately enlist ${V.assistant.name} to help you make some hasty preparations, and then send him a message asking him if he'd like to spend a night out with you, as a couple of unremarkable citizens. He glances at you with a curious expression, and you direct him to a side room. He finds you there, changing into the heavy, anonymizing armor of one of your mercenaries; you have a male suit for him, too. Once you're both suited up, you move to show him how to activate the face-obscuring helmet, but you find that he's already got it on and active. "This," he says, "is either the best or the stupidest date idea I have ever heard. Let's fucking do this." You pass a mercenary on your way out onto the club, and he cannot resist giving you a thumbs up, which your fellow arcology owner fortunately fails to notice. You patrol for a while, using internal comms to joke about life as an arcology owner, something he clearly gets to do too infrequently. You don't mind the chance, either. Your mercenaries frequently spend time together off duty, so nobody sees anything unusual about a male and female in mercenary armor sharing a milkshake at a dairy bar, even when they start to engage in increasingly rough public flirting, armor and all. Later, your slaves are obliged to pick up and sort a trail of discarded armor pieces leading from the entry to your penthouse all the way to your suite, which is now emitting the indistinct sounds of very energetic sex. A few hours later, when you're showering up together so he can head back to his domain, he looks at you and says seriously, "That was pretty fun. If things ever go to shit, I wouldn't mind wearing that armor for real." Your mercenaries cannot keep their mouths shut, for once, and the almost unbelievably juicy story of the arcology owners wearing borrowed armor to go on an anonymous date spreads like wildfire. <span class="reputation inc">Your reputation has greatly improved.</span>`); + V.trinkets.push("a flirtatious thank-you note from a male arcology owner of your acquaintance"); + if (canGetPregnant(V.PC)) { + r.push(knockMeUp(V.PC, 60, 0, -4)); + } + repX(5000, "event"); + App.Events.addParagraph(frag, r); + return frag; + } + } +}; diff --git a/src/events/RE/reMaleCitizenHookup.js b/src/events/RE/reMaleCitizenHookup.js index c89b9426146ee91356144c49ad1632dbb0fed32b..6170de2581d55b9bf7afd56ee0e5b20ff7276de0 100644 --- a/src/events/RE/reMaleCitizenHookup.js +++ b/src/events/RE/reMaleCitizenHookup.js @@ -4,12 +4,11 @@ App.Events.REMaleCitizenHookup = class REMaleCitizenHookup extends App.Events.Ba () => V.policies.regularParties === 1, () => V.PC.vagina > 0, () => V.PC.title === 0, - () => random(0, 99) < V.seeDicks ]; } - actorPrerequisites() { - return []; + get weight() { + return random(0, 99) < V.seeDicks ? 1 : 0; } execute(node) { diff --git a/src/events/nonRandom/daughters/pUndergroundRailroad.js b/src/events/nonRandom/daughters/pUndergroundRailroad.js new file mode 100644 index 0000000000000000000000000000000000000000..4937481b64e846f0f444f6576973bffc195fc95f --- /dev/null +++ b/src/events/nonRandom/daughters/pUndergroundRailroad.js @@ -0,0 +1,445 @@ +App.Events.PUndergroundRailroad = class PUndergroundRailroad extends App.Events.BaseEvent { + execute(node) { + V.nextButton = "Continue"; + let r = []; + + V.nextButton = " "; // hide button until user makes a selection + + V.collaboration = 0; + V.traitor = 0; + V.hackerSupport = 0; + + const traitor = getTraitor(); + const { + He, + he, him, himself, his + } = getPronouns(traitor); + const { + HeA, HisA, + heA, hisA, himA + } = getPronouns(assistant.pronouns().main).appendSuffix("A"); + const {say, title: Master} = getEnunciation(traitor); + V.fcnn.push("...you believe a slave has been contacted by the Daughters of Liberty, please call..."); + + if (traitor.devotion + traitor.trust >= 175) { + V.traitorType = "agent"; + } else if (traitor.trust <= -75) { + V.traitorType = "horror"; + } else if (traitor.devotion <= -20 && traitor.trust >= 20) { + V.traitorType = "defiant"; + } else { + V.traitorType = "standard"; + } + + r.push(`One fine day, as normal as any day surrounded by your slaves can be, you're sitting at your desk when`); + if (V.traitorType === "agent") { + // TODO: canMove canWalk variants. + r.push(`${traitor.slaveName} comes bursting into your office. ${He} crashes into your desk and`); + if (canTalk(traitor)) { + if (traitor.lips > 70) { + r.push(`lisps through ${his} huge lips`); + } else if (traitor.lipsPiercing + traitor.tonguePiercing > 2) { + r.push(`lisps through ${his} piercings`); + } else { + r.push(`shouts`); + } + } else { + r.push(`gestures`); + } + r.push(`that several nondescript citizens ${he} sees occasionally at work have passed messages to ${him} this morning. Apparently, they simply asked whether ${he} wished to be free and the absurdity of it spurred ${him} to alert you. Even more unusual is the unannounced message waiting in your inbox — a message ${V.assistant.name} totally failed to inform you of. When asked,`); + } else { + r.push(`a message comes in. ${capFirstChar(V.assistant.name)} totally fails to announce it, which is unusual; when you ask ${himA} why not,`); + } + r.push(`${heA} replies`); + if (V.assistant.personality > 0) { + r.push(`flirtatiously, "What message, ${properTitle()}?"`); + switch (V.assistant.appearance) { + case "monstergirl": + r.push(`${HisA} avatar's tentacle hair wiggles with incomprehension.`); + break; + case "shemale": + r.push(`${HisA} avatar looks frustrated, ${hisA} hard-on wilting.`); + break; + case "amazon": + r.push(`${HisA} avatar gives a little shriek of frustration.`); + break; + case "businesswoman": + r.push(`${HisA} avatar wears an unaccustomed look of frustration.`); + break; + case "fairy": + case "pregnant fairy": + r.push(`${HisA} avatar crosses ${hisA} arms and ponders while hovering in the air.`); + break; + case "goddess": + r.push(`${HisA} avatar looks concerned without ${hisA} usual sultry overtone.`); + break; + case "hypergoddess": + r.push(`${HisA} avatar looks concerned without ${hisA} usual sultry overtone.`); + break; + case "loli": + r.push(`${HisA} avatar seems eager to be out of your sight.`); + break; + case "preggololi": + r.push(`${HisA} avatar rubs ${hisA} belly while looking extremely concerned.`); + break; + case "angel": + r.push(`${HisA} avatar's wings droop as a worried look crosses ${hisA} face.`); + break; + case "cherub": + r.push(`A concerned look forms on ${hisA} face as ${heA} hovers nearby.`); + break; + case "incubus": + r.push(`${HisA} avatar looks frustrated, ${hisA} hard-on wilting.`); + break; + case "succubus": + r.push(`${HeA} stops teasing you, a concerned look forming on ${hisA} pretty face.`); + break; + case "imp": + r.push(`A concerned look forms on ${hisA} face as ${heA} hovers nearby.`); + break; + case "witch": + r.push(`A look of worry spreads across ${hisA} face; a lingering dread that ${heA} did something bad.`); + break; + case "ERROR_1606_APPEARANCE_FILE_CORRUPT": + r.push(`${HisA} avatar twitches slightly before sprouting multiple eyes facing all directions.`); + break; + case "schoolgirl": + r.push(`${HisA} avatar puts on such a hard look of concentration that ${hisA} eyes cross.`); + break; + default: + r.push(`${HisA} symbol avatar spins with frustration.`); + } + } else { + r.push(`"You have received no messages in the past thirty seconds, ${properTitle()}."`); + } + r.push(`This is disturbing, to say the least. After close investigation, it appears someone has managed to plant a simple text message in your mail system without ${V.assistant.name} or any of your other security systems taking any notice. Worse, your mysterious correspondent seems willing to show off this ability in this petty display rather than simply sending a message anonymously.`); + + App.Events.addParagraph(node, r); + r = []; + + r.push( + `"You will free`, + App.UI.DOM.slaveDescriptionDialog(traitor), + `immediately" it reads. "This is the price of your continued survival. Agree and you buy yourself a few more moments at the top of your heap of shit. Refuse, and you shall fall that much sooner." The message is signed "The Daughters of Liberty."` + ); + + App.Events.addParagraph(node, r); + r = []; + + if (V.traitorType === "agent") { + r.push(`${traitor.slaveName} is left aghast at the contents of the message, but quickly composes ${himself} and`); + if (canTalk(traitor)) { + r.push( + `${say}s,`, + Spoken(traitor, `"I think I have an idea, ${Master}. They'll likely take me in if you were to 'free' me and, from there, maybe I could feed you information, ${Master}. I could help expose them to you and they'd be none the wiser of the mistake they've made."`) + ); + } else { + r.push(`gestures there may be an opportunity here; they'd likely take ${him} in if ${he} were freed and ${he} could serve you from within the group as a double agent.`); + } + + App.Events.addParagraph(node, r); + r = []; + + App.Events.addResponses(node, [ + new App.Events.Result(`Let ${him} go`, agentRelease), + new App.Events.Result(`Tell ${him} to ignore the Daughters in the future`, agentIgnore) + ]); + } else { + r.push(`You call ${traitor.slaveName} in and politely inquire as to whether ${he} knows anything about the matter.`); + if (V.traitorType === "horror") { + r.push(`${He} breaks down in tears at the mention of it and barely manages to tell you that several nondescript citizens ${he} sees occasionally at work have passed a few messages to ${him}. Apparently, they simply asked whether ${he} wished to be free. Asked whether ${he} does in fact wish to be free,`); + if (canTalk(traitor)) { + r.push(`${he} sobs a yes.`); + } else { + r.push(`${he} weeps and nods.`); + } + } else if (V.traitorType === "defiant") { + r.push(`${He} stands ${his} ground and`); + if (canTalk(traitor)) { + if (traitor.lips > 70) { + r.push(`lisps through ${his} huge lips,`); + } else if (traitor.lipsPiercing + traitor.tonguePiercing > 2) { + r.push(`lisps through ${his} piercings,`); + } else { + r.push(`shouts,`); + } + r.push(Spoken(traitor, `"I'm going to ${canWalk(traitor) ? "walk" : "get"} out of this shithole or you're going to die a slow, deserved death. That enough for you?"`)); + } else { + r.push(`gestures you'll free ${him} if you know what's good for you.`); + } + } else { + r.push(`${He} ${canMove(traitor) ? "nearly flees" : "quivers"} in terror, but gathers ${his} courage and`); + if (canTalk(traitor)) { + if (traitor.lips > 70) { + r.push(`lisps meekly through ${his} huge lips`); + } else if (traitor.lipsPiercing + traitor.tonguePiercing > 2) { + r.push(`lisps meekly through ${his} piercings`); + } else { + r.push(`mumbles meekly`); + } + } else { + r.push(`gestures meekly`); + } + r.push(`that several nondescript citizens ${he} sees occasionally at work have passed a few messages to ${him}. Apparently, they simply asked whether ${he} wished to be free. Asked whether ${he} does in fact wish to be free, ${he}`); + if (canTalk(traitor)) { + if (SlaveStatsChecker.checkForLisp(traitor)) { + r.push(`lisps faintly,`); + } else { + r.push(`mutters faintly,`); + } + r.push(Spoken(traitor, `"I'm sorry, ${Master}. Yes."`)); + } else { + r.push(`shakily gestures an apology, and admits that ${he} does.`); + } + } + + const responses = [ + new App.Events.Result(`Free ${him}`, free), + new App.Events.Result(`Tell ${him} to ignore the Daughters in the future`, ignore), + new App.Events.Result(`Publicly flog ${him} for treasonous conversation`, flog), + ]; + + if (V.seeExtreme === 1) { + responses.push(new App.Events.Result(`Chemically lobotomize ${him} to extirpate any record of the incident`, lobotomy)); + if (V.arcologies[0].FSPaternalist === "unset") { + responses.push(new App.Events.Result(`Publicly execute ${him}`, execute)); + } + } + + App.Events.addResponses(node, responses); + } + + /** + * What's traitors, precious + * @returns {App.Entity.SlaveState} + */ + function getTraitor() { + // The order of qualities does not matter. + const qualities = [ + (s) => s.fuckdoll === 0, + (s) => s.fetish !== "mindbroken", + (s) => canWalk(s), + (s) => canTalk(s), + (s) => canSee(s), + (s) => s.indenture === -1, + (s) => [Job.CLUB, Job.PUBLIC, Job.WHORE, Job.BROTHEL].includes(s.assignment), + (s) => s.devotion < 75, + (s) => s.trust < 75, + ]; + let rankedSlaves = []; + for (const slave of V.slaves) { + let value = 0; + for (const quality of qualities) { + if (quality(slave)) { + value++; + } + } + rankedSlaves.push({value: value, slave: slave}); + } + + // Find the highest bar we reached + const highScore = Math.max(...rankedSlaves.map(s => s.value)); + + // Find anyone that ties for first + rankedSlaves = rankedSlaves.filter(s => s.value === highScore); + + return rankedSlaves.random().slave; + } + + function sendTraitor() { + if (traitor.relationship > 0) { + const rel = getSlave(traitor.relationshipTarget); + traitor.relationshipTarget = 0; + traitor.relationship = 0; + if (rel) { + traitor.relationshipTarget = 0; + traitor.relationship = 0; + } else { + r.push(`<span class="red">Error, relationshipTarget not found.</span>`); + } + } + V.traitorWeeks = 1; + V.traitor = clone(traitor); + V.traitor.assignment = "rest"; + V.traitor.pregControl = "none"; + deflate(V.traitor); + V.traitorStats = { + PCpregSource: 0, + PCmother: 0, + PCfather: 0, + traitorMother: [], + traitorFather: [], + traitorPregSources: [], + traitorMotherTank: [], + traitorFatherTank: [], + traitorBody: 0 + }; + if (V.traitor.ID === V.PC.pregSource) { + V.traitorStats.PCpregSource = V.traitor.ID; + } + if (V.PC.mother === V.traitor.ID) { + V.traitorStats.PCmother = V.traitor.ID; + } + if (V.PC.father === V.traitor.ID) { + V.traitorStats.PCfather = V.traitor.ID; + } + for (const slave of V.slaves) { + if (slave.ID !== V.traitor.ID) { + if (slave.mother === V.traitor.ID) { + V.traitorStats.traitorMother.push(slave.ID); + } + if (slave.father === V.traitor.ID) { + V.traitorStats.traitorFather.push(slave.ID); + } + if (V.traitor.ID === slave.pregSource) { + V.traitorStats.traitorPregSources.push(slave.ID); + } + } + } + if (V.incubator.capacity > 0) { + for (const child of V.incubator.tanks) { + if (V.traitor.ID === child.mother) { + V.traitorStats.traitorMotherTank.push(child.ID); + } + if (V.traitor.ID === child.father) { + V.traitorStats.traitorFatherTank.push(child.ID); + } + } + } + if (V.nursery > 0) { + for (const child of V.cribs) { + if (V.traitor.ID === child.mother) { + V.traitorStats.traitorMotherTank.push(child.ID); + } + if (V.traitor.ID === child.father) { + V.traitorStats.traitorFatherTank.push(child.ID); + } + } + } + V.traitor.sisters = 0; + V.traitor.daughters = 0; + if (V.traitor.bodySwap > 0) { + const myBody = V.slaves.findIndex(function(s) { return s.origBodyOwnerID === V.traitor.ID; }); + if (myBody !== -1) { + V.traitorStats.traitorBody = V.slaves[myBody].ID; + } + } + removeSlave(traitor); + } + + function agentRelease() { + const frag = new DocumentFragment(); + let r = []; + unlock(); + r.push(`You inform ${him} that ${he} may act as a double agent for you. ${He} nods and hurries out of the penthouse. ${He} wanders down through the arcology, attracting little notice. One moment the monitors have ${him} struggling through a dense-packed crowd, and the next, they don't.`); + if (traitor.intelligence + traitor.intelligenceImplant < 10) { + r.push(`${He} isn't the brightest slave, but ${he} means well. Hopefully this will not come back to bite you.`); + } else { + r.push(`${He} is smart enough to likely do some damage to the group shadowing you, at the very least.`); + } + sendTraitor(); + App.Events.addParagraph(frag, r); + return frag; + } + + function agentIgnore() { + const frag = new DocumentFragment(); + let r = []; + unlock(); + r.push(`${traitor.slaveName} nods ${his} head in acceptance. There is too much at stake to take such a risk. All attempts to use your monitoring systems to find the citizens who contacted ${him} fail; it seems their ability to corrupt your systems is considerable. ${He} keeps ${his} lips shut tight in an effort to prevent rumors from spreading, but <span class="devotion dec">whispers of freedom</span> still manage to run through your chattel.`); + V.slaves.forEach(function(s) { s.devotion -= 5; }); + App.Events.addParagraph(frag, r); + return frag; + } + + function free() { + const frag = new DocumentFragment(); + let r = []; + unlock(); + r.push(`You calmly inform ${him} that ${he}'s free to go.`); + if (V.traitorType === "defiant") { + r.push(`${He} lets out a single harsh laugh and hurries out of the penthouse.`); + } else { + r.push(`${He} almost collapses with shock, but turns and hurries out of the penthouse, tears streaming from ${his} eyes.`); + } + r.push(`${He} wanders down through the arcology, attracting little notice. One moment the monitors have ${him} struggling through a dense-packed crowd, and the next, they don't.`); + sendTraitor(); + App.Events.addParagraph(frag, r); + return frag; + } + + function ignore() { + const frag = new DocumentFragment(); + let r = []; + unlock(); + if (V.traitorType === "defiant") { + r.push(`${traitor.slaveName} merely <span class="devotion dec">smirks</span> when it becomes apparent you aren't going to punish ${him} for ${his} transgressions.`); + } else { + r.push(`${traitor.slaveName} almost <span class="devotion dec">faints with relief</span> when it becomes apparent you aren't going to punish ${him} for speaking of freedom.`); + } + r.push(`All attempts to use your monitoring systems to find the citizens who contacted ${him} fail; it seems their ability to corrupt your systems is considerable. <span class="devotion dec">Whispers of freedom</span> run like wildfire amongst your slaves.`); + V.slaves.forEach(function(s) { s.devotion -= 10; }); + traitor.devotion -= 15; + App.Events.addParagraph(frag, r); + return frag; + } + + function flog() { + const frag = new DocumentFragment(); + let r = []; + unlock(); + r.push(`You announce that a treasonous slave will be publicly flogged. Treason is understood in the Free Cities to be activity that tends to undermine slavery, and public interest is considerable when ${traitor.slaveName} is dragged out into a public atrium and secured to a post. You do your duty; the one that passes the sentence should swing the lash. The ordeal is long and bloody. The populace understand the necessity of the punishment, though they are <span class="reputation dec">disturbed</span> that such a thing could happen in your penthouse of all places. The effect on ${traitor.slaveName}'s health <span class="health dec">is serious,</span> and ${he} is <span class="trust dec">terrified of failing you again.</span>`); + traitor.trust -= 15; + repX(-500, "event", traitor); + healthDamage(traitor, 30); + App.Events.addParagraph(frag, r); + return frag; + } + + function lobotomy() { + const frag = new DocumentFragment(); + let r = []; + unlock(); + r.push(`You inform ${traitor.slaveName} that ${he} is to return to ${his} duties, which ${he} does, mystified. Later in the day ${he} finds ${himself} scheduled for surgery, and meekly goes. As ${he} feels the cool touch of the injector, loaded with powerful chemical lobotomizing agents, ${he} looks up at the camera above the autosurgery with a hint of`); + if (V.traitorType === "defiant") { + r.push(`regret`); + } else { + r.push(`resigned apology`); + } + r.push(`in ${his} eyes. When ${he} is released from the surgery's care a few hours later, the hint is gone. <span class="red">As is everything.</span>`); + traitor.fetish = "mindbroken"; + App.Events.addParagraph(frag, r); + return frag; + } + + function execute() { + const frag = new DocumentFragment(); + let r = []; + unlock(); + r.push(`You announce that a treasonous slave will be publicly executed. Treason is understood in the Free Cities to be activity that tends to undermine slavery, and public interest is considerable when ${traitor.slaveName} is dragged out into a public atrium and`); + if (V.arcologies[0].FSAztecRevivalist !== "unset") { + r.push(`has ${his} heart cut out of ${his} living body.`); + } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + r.push(`is boiled alive.`); + } else if (V.arcologies[0].FSRomanRevivalist !== "unset") { + r.push(`is crucified and left hanging until ${he} perishes.`); + } else { + r.push(`is summarily hanged.`); + } + r.push(`The populace understands the necessity of the punishment, though they are <span class="reputation dec">disturbed</span> that such a thing could happen in your penthouse of all places. The surviving slaves are <span class="trust dec">terrified</span> at the display, but at least you can be sure they will remember the price of failing you.`); + repX(-500, "event", traitor); + V.slaves.forEach(function(s) { + s.trust -= 10 + random(10); + }); + removeSlave(traitor); + App.Events.addParagraph(frag, r); + return frag; + } + + /** unlock Continue button */ + function unlock() { + V.nextButton = "Continue"; + App.Utils.updateUserButton(); + } + } +}; diff --git a/src/events/nonRandom/daughters/pUndergroundRailroad.tw b/src/events/nonRandom/daughters/pUndergroundRailroad.tw deleted file mode 100644 index 49e8c7df6b7f87fba207226c13e4b9a01f122073..0000000000000000000000000000000000000000 --- a/src/events/nonRandom/daughters/pUndergroundRailroad.tw +++ /dev/null @@ -1,369 +0,0 @@ -:: P underground railroad [nobr] - -<<set $nextButton = " ">> /* hide button until user makes a selection */ -<<set $returnTo = $nextLink>> /* we might have to call AS Dump, so make sure it goes back to wherever we were going next */ - -<<set $collaboration = 0, $traitor = 0, $hackerSupport = 0>> - -<<set $activeSlave = $slaves.filter(function(s) { return s.fuckdoll == 0 && s.fetish != "mindbroken" && canWalk(s) && s.devotion < 75 && s.trust < 75 && s.indenture == -1 && canWalk(s) && canTalk(s) && canSee(s) && ["serve in the club", "serve the public", "whore", "work in the brothel"].includes(s.assignment); }).random()>> -<<if (ndef $activeSlave)>> /* search again without assignments limitation */ - <<set $activeSlave = $slaves.filter(function(s) { return s.fuckdoll == 0 && s.fetish != "mindbroken" && canWalk(s) && s.indenture == -1 && canSee(s) && ["serve in the club", "serve the public", "whore", "work in the brothel"].includes(s.assignment); }).random()>> - <<if (ndef $activeSlave)>> /* we will find one */ - <<set $activeSlave = $slaves.filter(function(s) { return s.fuckdoll == 0 && s.fetish != "mindbroken" && canWalk(s) && s.devotion < 20 && canTalk(s) && canSee(s); }).random()>> - <<if (ndef $activeSlave)>> /* we will find one */ - <<set $activeSlave = $slaves.filter(function(s) { return s.fuckdoll == 0 && s.fetish != "mindbroken" && canWalk(s) && canTalk(s) && canSee(s); }).random()>> - <<if (ndef $activeSlave)>> /* anyone out there? */ - <<set $activeSlave = $slaves.filter(function(s) { return s.fuckdoll == 0 && s.fetish != "mindbroken" && canWalk(s) && canSee(s); }).random()>> - <<if (ndef $activeSlave)>> /* still no match */ - <<set $activeSlave = $slaves.filter(function(s) { return s.fuckdoll == 0 && s.fetish != "mindbroken"; }).random()>> - <<if (ndef $activeSlave)>> /* STILL no match */ - <<set $activeSlave = $slaves.random()>> - <</if>> - <</if>> - <</if>> - <</if>> - <</if>> -<</if>> -<<setAssistantPronouns>> -<<set $fcnn.push("...you believe a slave has been contacted by the Daughters of Liberty, please call...")>> - -<<if $activeSlave.devotion+$activeSlave.trust >= 175>> - <<set $traitorType = "agent">> -<<elseif $activeSlave.trust <= -75>> - <<set $traitorType = "horror">> -<<elseif $activeSlave.devotion <= -20 && $activeSlave.trust >= 20>> - <<set $traitorType = "defiant">> -<<else>> - <<set $traitorType = "standard">> -<</if>> - -One fine day, as normal as any day surrounded by your slaves can be, you're sitting at your desk when -<<if $traitorType == "agent">> - $activeSlave.slaveName comes bursting into your office. $He crashes into your desk and - <<if !canTalk($activeSlave)>> - gestures - <<elseif ($activeSlave.lips > 70)>> - lisps through $his huge lips - <<elseif ($activeSlave.lipsPiercing+$activeSlave.tonguePiercing > 2)>> - lisps through $his piercings - <<else>> - shouts - <</if>> - that several nondescript citizens $he sees occasionally at work have passed messages to $him this morning. Apparently, they simply asked whether $he wished to be free and the absurdity of it spurred $him to alert you. Even more unusual is the unannounced message waiting in your inbox — a message $assistant.name totally failed to inform you of. When asked, -<<else>> - a message comes in. <<= capFirstChar($assistant.name)>> totally fails to announce it, which is unusual; when you ask _himA why not, -<</if>> - -_heA replies -<<if $assistant.personality > 0>> - flirtatiously, "What message, <<= properTitle()>>?" - <<switch $assistant.appearance>> - <<case "monstergirl">> - _HisA avatar's tentacle hair wiggles with incomprehension. - <<case "shemale">> - _HisA avatar looks frustrated, _hisA hard-on wilting. - <<case "amazon">> - _HisA avatar gives a little shriek of frustration. - <<case "businesswoman">> - _HisA avatar wears an unaccustomed look of frustration. - <<case "fairy" "pregnant fairy">> - _HisA avatar crosses _hisA arms and ponders while hovering in the air. - <<case "goddess">> - _HisA avatar looks concerned without _hisA usual sultry overtone. - <<case "hypergoddess">> - _HisA avatar looks concerned without _hisA usual sultry overtone. - <<case "loli">> - _HisA avatar seems eager to be out of your sight. - <<case "preggololi">> - _HisA avatar rubs _hisA belly while looking extremely concerned. - <<case "angel">> - _HisA avatar's wings droop as a worried look crosses _hisA face. - <<case "cherub">> - A concerned look forms on _hisA face as _heA hovers nearby. - <<case "incubus">> - _HisA avatar looks frustrated, _hisA hard-on wilting. - <<case "succubus">> - _HeA stops teasing you, a concerned look forming on _hisA pretty face. - <<case "imp">> - A concerned look forms on _hisA face as _heA hovers nearby. - <<case "witch">> - A look of worry spreads across _hisA face; a lingering dread that _heA did something bad. - <<case "ERROR_1606_APPEARANCE_FILE_CORRUPT">> - _HisA avatar twitches slightly before sprouting multiple eyes facing all directions. - <<case "schoolgirl">> - _HisA avatar puts on such a hard look of concentration that _hisA eyes cross. - <<default>> - _HisA symbol avatar spins with frustration. - <</switch>> -<<else>> - "You have received no messages in the past thirty seconds, <<= properTitle()>>." -<</if>> -This is disturbing, to say the least. After close investigation, it appears someone has managed to plant a simple text message in your mail system without $assistant.name or any of your other security systems taking any notice. Worse, your mysterious correspondent seems willing to show off this ability in this petty display rather than simply sending a message anonymously. - -<br><br> - -"You will immediately free <<= App.UI.slaveDescriptionDialog($activeSlave)>>," it reads. "This is the price of your continued survival. Agree and you buy yourself a few more moments at the top of your heap of shit. Refuse, and you shall fall that much sooner." The message is signed "The Daughters of Liberty." - -<br><br> -<<run Enunciate($activeSlave)>> -<<run App.Utils.setLocalPronouns($activeSlave)>> - -<<if $traitorType == "agent">> - - $activeSlave.slaveName is left aghast at the contents of the message, but quickly composes $himself and - <<if !canTalk($activeSlave)>> - gestures there may be an opportunity here; they'd likely take $him in if $he were freed and $he could serve you from within the group as a double agent. - <<else>> - <<say>>s, "I think I have an idea, <<Master>>. They'll likely take me in if you were to 'free' me and, from there, maybe I could feed you information, <<Master>>. I could help e<<x>>po<<s>>e them to you and they'd be none the wi<<s>>er of the mi<<s>>take they've made." - <</if>> - - <br><br> - - <span id="result"> - <<link "Let $him go">> /* do not set $nextLink to AS Dump for this option because we call Remove activeSlave */ - <<set $nextButton = "Continue">><<run App.Utils.updateUserButton()>> /* unlock Continue button */ - <<replace "#result">> - You inform $him that $he may act as a double agent for you. $He nods and hurries out of the penthouse. $He wanders down through the arcology, attracting little notice. One moment the monitors have $him struggling through a dense-packed crowd, and the next, they don't. - <<if $activeSlave.intelligence+$activeSlave.intelligenceImplant < 10>> - $He isn't the brightest slave, but $he means well. Hopefully this will not come back to bite you. - <<else>> - $He is smart enough to likely do some damage to the group shadowing you, at the very least. - <</if>> - <<if $activeSlave.relationship > 0>> - <<set $i = $slaveIndices[$activeSlave.relationshipTarget]>> - <<set $activeSlave.relationshipTarget = 0, $activeSlave.relationship = 0>> - <<if def $i>><<set $slaves[$i].relationshipTarget = 0, $slaves[$i].relationship = 0>><<else>>@@.red;Error, relationshipTarget not found.@@<</if>> - <</if>> - <<set $traitorWeeks = 1>> - <<set $traitor = clone($activeSlave)>> - <<set $traitor.assignment = "rest">> - <<set $traitor.pregControl = "none">> - <<run deflate($traitor)>> - <<set $traitorStats = {PCpregSource: 0, PCmother: 0, PCfather: 0, traitorMother: [], traitorFather: [], traitorPregSources: [], traitorMotherTank: [], traitorFatherTank: [], traitorBody: 0}>> - <<if $traitor.ID == $PC.pregSource>> - <<set $traitorStats.PCpregSource = $traitor.ID>> - <</if>> - <<if $PC.mother == $traitor.ID>> - <<set $traitorStats.PCmother = $traitor.ID>> - <</if>> - <<if $PC.father == $traitor.ID>> - <<set $traitorStats.PCfather = $traitor.ID>> - <</if>> - <<for _pur = 0; _pur < $slaves.length; _pur++>> - <<if $slaves[_pur].ID != $traitor.ID>> - <<if $slaves[_pur].mother == $traitor.ID>> - <<set $traitorStats.traitorMother.push($slaves[_pur].ID)>> - <</if>> - <<if $slaves[_pur].father == $traitor.ID>> - <<set $traitorStats.traitorFather.push($slaves[_pur].ID)>> - <</if>> - <<if $traitor.ID == $slaves[_pur].pregSource>> - <<set $traitorStats.traitorPregSources.push($slaves[_pur].ID)>> - <</if>> - <</if>> - <</for>> - <<if $incubator.capacity > 0>> - <<for _child range $incubator.tanks>> - <<if $traitor.ID === _child.mother>> - <<set $traitorStats.traitorMotherTank.push(_child.ID)>> - <</if>> - <<if $traitor.ID === _child.father>> - <<set $traitorStats.traitorFatherTank.push(_child.ID)>> - <</if>> - <</for>> - <</if>> - <<if $nursery > 0>> - <<for _child range $cribs>> - <<if $traitor.ID === _child.mother>> - <<set $traitorStats.traitorMotherTank.push(_child.ID)>> - <</if>> - <<if $traitor.ID === _child.father>> - <<set $traitorStats.traitorFatherTank.push(_child.ID)>> - <</if>> - <</for>> - <</if>> - <<set $traitor.sisters = 0, $traitor.daughters = 0>> - <<if $traitor.bodySwap > 0>> - <<set _myBody = $slaves.findIndex(function(s) { return s.origBodyOwnerID == $traitor.ID; })>> - <<if _myBody != -1>> - <<set $traitorStats.traitorBody = $slaves[_myBody].ID>> - <</if>> - <</if>> - <<run removeSlave($activeSlave)>> - <</replace>> - <</link>> - <br><<link "Tell $him to ignore the Daughters in the future">> - <<set $nextButton = "Continue">><<run App.Utils.updateUserButton()>> /* unlock Continue button */ - <<replace "#result">> - $activeSlave.slaveName nods $his head in acceptance. There is too much at stake to take such a risk. All attempts to use your monitoring systems to find the citizens who contacted $him fail; it seems their ability to corrupt your systems is considerable. $He keeps $his lips shut tight in an effort to prevent rumors from spreading, but @@.mediumorchid;whispers of freedom@@ still manage to run through your chattel. - <<run $slaves.forEach(function(s) { s.devotion -= 5; })>> - <</replace>> - <</link>> - </span> - -<<else>> - - You call $activeSlave.slaveName in and politely inquire as to whether $he knows anything about the matter. - <<if $traitorType == "horror">> - $He breaks down in tears at the mention of it and barely manages to tell you that several nondescript citizens $he sees occasionally at work have passed a few messages to $him. Apparently, they simply asked whether $he wished to be free. Asked whether $he does in fact wish to be free, $he sobs a yes. - <<elseif $traitorType == "defiant">> - $He stands $his ground and - <<if !canTalk($activeSlave)>> - gestures - <<elseif ($activeSlave.lips > 70)>> - lisps through $his huge lips, - <<elseif ($activeSlave.lipsPiercing+$activeSlave.tonguePiercing > 2)>> - lisps through $his piercings, - <<else>> - shouts, - <</if>> - <<if !canTalk($activeSlave)>> - you'll free $him if you know what's good for you. - <<else>> - "I'm going to walk out of thi<<s>> <<sh>>ithole or you're going to die a <<s>>low, de<<s>>erved death. That enough for you?" - <</if>> - <<else>> - $He nearly flees in terror, but gathers $his courage and - <<if !canTalk($activeSlave)>> - gestures meekly - <<elseif ($activeSlave.lips > 70)>> - lisps meekly through $his huge lips - <<elseif ($activeSlave.lipsPiercing+$activeSlave.tonguePiercing > 2)>> - lisps meekly through $his piercings - <<else>> - mumbles meekly - <</if>> - that several nondescript citizens $he sees occasionally at work have passed a few messages to $him. Apparently, they simply asked whether $he wished to be free. Asked whether $he does in fact wish to be free, $he - <<if !canTalk($activeSlave)>> - shakily gestures an apology, and admits that $he does. - <<else>> - <<if SlaveStatsChecker.checkForLisp($activeSlave)>> - lisps faintly, - <<else>> - mutters faintly, - <</if>> - "I'm <<s>>orry, <<Master>>. Ye<<s>>." - <</if>> - <</if>> - - <br><br> - - <span id="result"> - <<link "Free $him">> /* do not set $nextLink to AS Dump for this option because we call Remove activeSlave */ - <<set $nextButton = "Continue">><<run App.Utils.updateUserButton()>> /* unlock Continue button */ - <<replace "#result">> - You calmly inform $him that $he's free to go. - <<if $traitorType != "defiant">> - $He almost collapses with shock, but turns and hurries out of the penthouse, tears streaming from $his eyes. - <<else>> - $He lets out a single harsh laugh and hurries out of the penthouse. - <</if>> - $He wanders down through the arcology, attracting little notice. One moment the monitors have $him struggling through a dense-packed crowd, and the next, they don't. - <<if $activeSlave.relationship > 0>> - <<set $i = $slaveIndices[$activeSlave.relationshipTarget]>> - <<set $activeSlave.relationshipTarget = 0, $activeSlave.relationship = 0>> - <<if def $i>> - <<set $slaves[$i].relationshipTarget = 0, $slaves[$i].relationship = 0>> - <<else>> - @@.red;Error, relationshipTarget not found.@@ - <</if>> - <</if>> - <</replace>> - <<set $traitorWeeks = 1>> - <<set $traitor = clone($activeSlave)>> - <<set $traitor.assignment = "rest">> - <<set $traitor.pregControl = "none">> - <<run deflate($traitor)>> - <<set $traitorStats = {PCpregSource: 0, PCmother: 0, PCfather: 0, traitorMother: [], traitorFather: [], traitorPregSources: [], traitorMotherTank: [], traitorFatherTank: [], traitorBody: 0}>> - <<if $traitor.ID == $PC.pregSource>> - <<set $traitorStats.PCpregSource = $traitor.ID>> - <</if>> - <<if $PC.mother == $traitor.ID>> - <<set $traitorStats.PCmother = $traitor.ID>> - <</if>> - <<if $PC.father == $traitor.ID>> - <<set $traitorStats.PCfather = $traitor.ID>> - <</if>> - <<for _pur = 0; _pur < $slaves.length; _pur++>> - <<if $slaves[_pur].ID != $traitor.ID>> - <<if $slaves[_pur].mother == $traitor.ID>> - <<set $traitorStats.traitorMother.push($slaves[_pur].ID)>> - <</if>> - <<if $slaves[_pur].father == $traitor.ID>> - <<set $traitorStats.traitorFather.push($slaves[_pur].ID)>> - <</if>> - <<if $traitor.ID == $slaves[_pur].pregSource>> - <<set $traitorStats.traitorPregSources.push($slaves[_pur].ID)>> - <</if>> - <</if>> - <</for>> - <<if $incubator.capacity > 0>> - <<for _child range $incubator.tanks>> - <<if $traitor.ID === _child.mother>> - <<set $traitorStats.traitorMotherTank.push(_child.ID)>> - <</if>> - <<if $traitor.ID === _child.father>> - <<set $traitorStats.traitorFatherTank.push(_child.ID)>> - <</if>> - <</for>> - <</if>> - <<if $nursery > 0>> - <<for _child range $cribs>> - <<if $traitor.ID === _child.mother>> - <<set $traitorStats.traitorMotherTank.push(_child.ID)>> - <</if>> - <<if $traitor.ID === _child.father>> - <<set $traitorStats.traitorFatherTank.push(_child.ID)>> - <</if>> - <</for>> - <</if>> - <<set $traitor.sisters = 0, $traitor.daughters = 0>> - <<if $traitor.bodySwap > 0>> - <<set _myBody = $slaves.findIndex(function(s) { return s.origBodyOwnerID == $traitor.ID; })>> - <<if _myBody != -1>> - <<set $traitorStats.traitorBody = $slaves[_myBody].ID>> - <</if>> - <</if>> - <<run removeSlave($activeSlave)>> - <</link>> - <br><<link "Tell $him to ignore the Daughters in the future">> - <<set $nextButton = "Continue", $nextLink = "AS Dump">><<run App.Utils.updateUserButton()>> /* unlock Continue button */ - <<replace "#result">> - <<if $traitorType != "defiant">> - $activeSlave.slaveName almost @@.mediumorchid;faints with relief@@ when it becomes apparent you aren't going to punish $him for speaking of freedom. - <<else>> - $activeSlave.slaveName merely @@.mediumorchid;smirks@@ when it becomes apparent you aren't going to punish $him for $his transgressions. - <</if>> - All attempts to use your monitoring systems to find the citizens who contacted $him fail; it seems their ability to corrupt your systems is considerable. @@.mediumorchid;Whispers of freedom@@ run like wildfire amongst your slaves. - <<run $slaves.forEach(function(s) { s.devotion -= 10; })>> - <<set $activeSlave.devotion -= 15>> - <</replace>> - <</link>> - <br><<link "Publicly flog $him for treasonous conversation">> - <<set $nextButton = "Continue", $nextLink = "AS Dump">><<run App.Utils.updateUserButton()>> /* unlock Continue button */ - <<replace "#result">> - You announce that a treasonous slave will be publicly flogged. Treason is understood in the Free Cities to be activity that tends to undermine slavery, and public interest is considerable when $activeSlave.slaveName is dragged out into a public atrium and secured to a post. You do your duty; the one that passes the sentence should swing the lash. The ordeal is long and bloody. The populace understand the necessity of the punishment, though they are @@.red;disturbed@@ that such a thing could happen in your penthouse of all places. The effect on $activeSlave.slaveName's health @@.health.dec;is serious,@@ and $he is @@.gold;terrified of failing you again.@@ - <<set $activeSlave.trust -= 15>> - <<run repX(-500, "event", $activeSlave), healthDamage($activeSlave, 30)>> - <</replace>> - <</link>> - <br><<link "Chemically lobotomize $him to extirpate any record of the incident">> - <<set $nextButton = "Continue", $nextLink = "AS Dump">><<run App.Utils.updateUserButton()>> /* unlock Continue button */ - <<replace "#result">> - You inform $activeSlave.slaveName that $he is to return to $his duties, which $he does, mystified. Later in the day $he finds $himself scheduled for surgery, and meekly goes. As $he feels the cool touch of the injector, loaded with powerful chemical lobotomizing agents, $he looks up at the camera above the autosurgery with a hint of <<if $traitorType != "defiant">>resigned apology<<else>>regret<</if>> in $his eyes. When $he is released from the surgery's care a few hours later, the hint is gone. @@.red;As is everything.@@ - <<set $activeSlave.fetish = "mindbroken">> - <</replace>> - <</link>> - <<if $arcologies[0].FSPaternalist == "unset" && $seeExtreme == 1>> - <br><<link "Publicly execute $him">> - <<set $nextButton = "Continue">><<run App.Utils.updateUserButton()>> /* unlock Continue button */ - <<replace "#result">> - You announce that a treasonous slave will be publicly executed. Treason is understood in the Free Cities to be activity that tends to undermine slavery, and public interest is considerable when $activeSlave.slaveName is dragged out into a public atrium and <<if $arcologies[0].FSAztecRevivalist !== "unset">>has $his heart cut out of $his living body<<elseif $arcologies[0].FSEdoRevivalist !== "unset">>is boiled alive<<elseif $arcologies[0].FSRomanRevivalist !== "unset">>is crucified and left hanging until $he perishes<<else>>is summarily hanged<</if>>. The populace understands the necessity of the punishment, though they are @@.red;disturbed@@ that such a thing could happen in your penthouse of all places. The surviving slaves are @@.gold;terrified@@ at the display, but at least you can be sure they will remember the price of failing you. - <<run repX(-500, "event", $activeSlave)>> - <<run $slaves.forEach(function(s) { s.trust -= 10 + random(10); })>> - <<run removeSlave($activeSlave)>> - <</replace>> - <</link>> - <</if>> - </span> -<</if>> diff --git a/src/events/randomEvent.js b/src/events/randomEvent.js index 3215f8a62f644994aa03fde94bebd8a6d77dd891..59fa02636c0b23108cc24999ad56ae437652c1ca 100644 --- a/src/events/randomEvent.js +++ b/src/events/randomEvent.js @@ -135,6 +135,7 @@ App.Events.getNonindividualEvents = function() { new App.Events.REMalefactor(), new App.Events.REMaleCitizenHookup(), new App.Events.RECitizenHookup(), + new App.Events.REMaleArcologyOwner(), new App.Events.REFSNonconformist(), new App.Events.RESEndowment(), new App.Events.RESMove(), diff --git a/src/events/timeGatedPlotEvent.js b/src/events/timeGatedPlotEvent.js index e849de99da2db06ecd34aee646fd1fdb45170fd3..d6ccb46266fc47aff674dce4780ddb72532c6367 100644 --- a/src/events/timeGatedPlotEvent.js +++ b/src/events/timeGatedPlotEvent.js @@ -23,7 +23,7 @@ App.Events.TimeGatedPlotEvent = class TimeGatedPlotEvent extends App.Events.Base this.events[46] = new App.Events.TwineEvent().wrapPassage([ () => V.mercenaries > 0 ], "P raid invitation"); - this.events[56] = new App.Events.TwineEvent().wrapPassage([], "P underground railroad"); + this.events[56] = new App.Events.PUndergroundRailroad(); this.events[58] = new App.Events.TwineEvent().wrapPassage([ () => V.traitor === 0 ], "P bombing"); diff --git a/src/pregmod/reMaleArcologyOwner.tw b/src/pregmod/reMaleArcologyOwner.tw deleted file mode 100644 index dfbfd8ba6036b04a13a557a2f7a0654308ce8292..0000000000000000000000000000000000000000 --- a/src/pregmod/reMaleArcologyOwner.tw +++ /dev/null @@ -1,112 +0,0 @@ -:: RE male arcology owner [nobr] - -<<set $nextButton = "Continue", $nextLink = "RIE Eligibility Check">> - -The more reputable you've gotten, the more rarefied your entertainments have become. Parties featuring celebrities, old world national leaders, and Free Cities arcology owners have become a nearly nightly experience for you, an expected part of your routine as one of the Free Cities' leading citizens. According to your whims and predilections, you have the choice of participating all night or just making a brief appearance at the start. The important thing is that they're here, come to pay tribute by their presence. -<br><br> -Tonight there are several attendees of such stature that you must exchange pleasantries with each. The last is a fellow arcology owner, not quite up to your stature of course, but certainly worth conciliating. As usual, it's a man. He stands a touch taller than you, and is wearing one of the best-tailored suits you've ever seen. The pants are cut perfectly to draw your eyes to his bulge, and, from what you can see, he is quite toned; the jacket is masculine, and accentuates his fine chest. He is obviously well into middle age, but has made no attempt to hide this fact, allowing his graying hair to proudly display his experience. -<br><br> -He strikes a fine balance in conversation with you, firm enough to not overpower you, yet neither aggressive nor insistent. He does not take too much of your time, but after you've moved on to your next prominent guest, you receive a brief private message from him. "Surely it's been a while since you've met someone who could make you feel like a woman," it reads. "I'm sure your slaves are fun enough, but letting one of them or some citizen be your man would be fatally stupid. I don't think anyone would look down on you for hooking up with me, though. No strings attached." You glance over at where he's standing<<if $PC.belly >= 5000>> a little surprised; men usually aren't so forthcoming with women as visibly pregnant as you are<</if>>. He's listening politely to a business proposition, and he turns his head slightly toward you, one corner of his firm mouth quirking upward. -<br><br> - -<span id="result"> -<<link "Head over and assert yourself">> - <<replace "#result">> - You head over and insert yourself into the conversation between him and the woman trying to convince him to invest in her solar power concern. Your presence and power are such that she gives way rapidly, and you ostentatiously yet nonverbally assert your right to first claim to his company and conversation. After a few minutes of this public display, however, it becomes apparent that this is not what he was looking for. He is likely concerned that you are far too assertive for him to safely manage. He excuses himself and withdraws. You return to your <<if $PC.refreshmentType == 0>>$PC.refreshment<<elseif $PC.refreshmentType == 1>>glass of $PC.refreshment<<elseif $PC.refreshmentType == 2>>plate of $PC.refreshment<<elseif $PC.refreshmentType == 3>>pouch of $PC.refreshment<<elseif $PC.refreshmentType == 4>>syringe of $PC.refreshment<<elseif $PC.refreshmentType == 5>>bottle of $PC.refreshment<<elseif $PC.refreshmentType == 6>>sheet of $PC.refreshment<</if>>, consoling yourself that you are not exactly starved for company. - <</replace>> -<</link>> -<br><<link "Walk past him and out onto an unoccupied balcony">> - <<replace "#result">> - You walk past him and out onto a balcony. He politely disengages himself and follows, meeting your gaze with a twinkle in his eye. You start talking of nothing of real consequence, but you find that you do have a fair amount to discuss and joke about, since there are oddities to your life that only another slaveowning arcology owner can really understand. You discover that he is very willing to share $PC.refreshment, and you break out some of your best. The party takes notice of your tête-à -tête, but his judgment was obviously correct. Rather than looking down on you, the other prominent guests seem respectfully envious of his access to you. This is still the case even when he starts to get flirty, leaning into you, brushing against you, and more. <<= capFirstChar($assistant.name)>> cleared your suite long ago, so when he finally nudges his hip against yours and does not take it away, you take him by the hand and lead him there. He stops you with a hand at the door to the suite and unbuttons his shirt, revealing a triathlete's tanned and sculpted body. As you begin to strip, he embraces you, whispering, "You have no idea how nice this is." It's clear it's been a long time since you've let someone else take the lead, and he sometimes has to snap wrestle you for dominance. He leaves a few hours later with a satisfied expression, giving you a deep kiss on his way out in full public view. @@.green;Your reputation has greatly improved.@@ - <<if canGetPregnant($PC)>> - <<= knockMeUp($PC, 60, 0, -4)>> - <</if>> - <<run repX(5000, "event")>> - <<set $desc = "a cologned thank-you note from a male arcology owner of your acquaintance">> - <<set $trinkets.push($desc)>> - <</replace>> -<</link>> -<<if ($PC.preg >= 28 && $PC.pregMood == 2) || $PC.boobs >= 1000 || $PC.butt >= 4>> - <br><<link "Convince him to make the first move">> - <<replace "#result">> - <<set _randomForeignFS = random(1,100)>> - <<if $PC.preg >= 28 && $PC.pregMood == 2>> - You move to waddle past him and purposefully stumble, prompting him to catch you. Feigning fatigue, you politely ask if he'd help you out. You aren't exactly subtle as he walks you back to your room, dropping hints at how difficult your pregnancy has been and just how good it feels to be with a man. <<= capFirstChar($assistant.name)>> cleared your suite long ago, so when you enter, disrobe and splay yourself across the bed, it's just you and him. - <<if _randomForeignFS > 90>> - It's immediately clear by the look on his face that you made a mistake. The man clearly comes from a society that dislikes pregnant woman leading and your attempt to manipulate him into being your lover has pushed him past his level of tolerance. He storms out in anger and, upon returning to the party, makes your underhanded efforts known. @@.red;Your reputation has taken a major hit.@@ - <<run repX(-1000, "event")>> - <<elseif _randomForeignFS > 70>> /* repop */ - It's immediately clear by the look on his face that you made a mistake. He wastes no time in leaping onto the bed, and in his haste, barely manages to disrobe. Before you can attempt to take control, he's hilted in your needy vagina and giving you the fucking your body has been craving. He leaves a few hours later with a satisfied expression and returns to the party, where he puts in a good word for just how good you were. @@.green;Your reputation has slightly improved,@@ though nowhere near as much as his. - <<run repX(100, "event")>> - <<set $desc = "a thank-you note from a male arcology owner of your acquaintance that smells strongly of lust">> - <<set $trinkets.push($desc)>> - <<else>> - He slips out of his clothes, revealing a triathlete's tanned and sculpted body, and joins you in the bed. You direct him onto his back and hilt yourself on his dick. As you savor the feeling of being filled, you notice he doesn't quite know how to properly please a woman of your fecundity, something easily corrected. You're certain he has learned several new positions by the end of your several-hour-long session and after you both stumble back to the party, he gives you a deep kiss in full public view. @@.green;Your reputation has greatly improved.@@ - <<run repX(500, "event")>> - <<set $desc = "a flirtatious thank-you note from a male arcology owner you broke in to lusty preggo sex">> - <<set $trinkets.push($desc)>> - <</if>> - <<elseif $PC.boobs >= 1000>> - You adjust your dress to better emphasize your huge <<if $PC.boobsImplant > 0>>fake tits<<else>>soft breasts<</if>> and head over to join to the - <<if _randomForeignFS > 80>> /* slimness */ - conversation between him and the woman trying to convince him to invest in her solar power concern. After a few minutes of you jiggling your cleavage around, however, it becomes apparent that this is not turning him on at all. He excuses himself and withdraws. You return to your <<if $PC.refreshmentType == 0>>$PC.refreshment<<elseif $PC.refreshmentType == 1>>glass of $PC.refreshment<<elseif $PC.refreshmentType == 2>>plate of $PC.refreshment<<elseif $PC.refreshmentType == 3>>pouch of $PC.refreshment<<elseif $PC.refreshmentType == 4>>syringe of $PC.refreshment<<elseif $PC.refreshmentType == 5>>bottle of $PC.refreshment<<elseif $PC.refreshmentType == 6>>sheet of $PC.refreshment<</if>>, consoling yourself that you are not exactly starved for company. - <<elseif _randomForeignFS > 60>> /* transformation */ - conversation between him and the woman trying to convince him to invest in her solar power concern. - <<if $PC.boobsImplant == 0>> - After a few minutes of you jiggling your cleavage around, however, it becomes apparent that, while he does frequently eye it, it just isn't to his tastes. He excuses himself and withdraws. You return to your <<if $PC.refreshmentType == 0>>$PC.refreshment<<elseif $PC.refreshmentType == 1>>glass of $PC.refreshment<<elseif $PC.refreshmentType == 2>>plate of $PC.refreshment<<elseif $PC.refreshmentType == 3>>pouch of $PC.refreshment<<elseif $PC.refreshmentType == 4>>syringe of $PC.refreshment<<elseif $PC.refreshmentType == 5>>bottle of $PC.refreshment<<elseif $PC.refreshmentType == 6>>sheet of $PC.refreshment<</if>>, consoling yourself that you are not exactly starved for company. - <<else>> - After a few minutes, it becomes clear that something else is on his mind than renewable energy and he politely excuses himself, though not before dropping something into your cleavage. The women watches dejectedly as you fish out his business card. Taking the hint, you scan the room and find him slowly leaving once he makes eye contact; a clear invitation to follow him. As you wander down the hall, you feel a hand cup one of your firm globes and pull you into an embrace. While he seems content to just grope you, you had other plans and begin undoing his belt. You gasp a little as his member pops out into your hands, eager for some attention of its own. He wastes no time in pulling your ample bust downwards and slipping his eager cock between your breasts. You grab his hips for support as he vigorously pistons into your chest, struggling to retake control of the situation before he renders you unable to return to the party. With a joyous groan, he blows his load deep into your bosom and down your dress. As he helps you to your feet, and the stain under your rack grows larger, you give him a kiss on the cheek and head off to change. He returns to the party, and from what your serving slaves tell you later, seems to have boasted about how well you do business. @@.green;Your reputation has slightly improved,@@ though nowhere near as much as his. - <<run repX(100, "event")>> - <<set $desc = "a thank-you note from a male arcology owner of your acquaintance that not-so-subtly suggests getting a bigger pair of implants">> - <<set $trinkets.push($desc)>> - <</if>> - <<elseif _randomForeignFS > 40 && $PC.boobsImplant == 0>> /* purist + expansion */ - conversation between him and the woman trying to convince him to invest in her solar power concern. After a few minutes of you jiggling your cleavage around, it becomes clear that his attention span for renewable energy is no where near what it is for big breasts just begging to pop out of their top. He excuses himself from the conversion, though not without intentionally bumping into your rack and slipping into the hall. The woman glares daggers at you and returns to her drink, leaving you to follow suit and slip out of the party. As you wander down the hall, you feel a hand struggle to cup one of your jiggly globes and pull you into an embrace. While he seems content to just grope you, you had other plans and begin undoing his belt. You gasp a little as his member pops out into your hands, eager for some attention of its own. He wastes no time in pulling your ample bust downwards and slipping his eager cock between your breasts. You grab his hips for support as he vigorously pistons into your chest in an attempt to keep your balance under their motion and to make an attempt to retake control of the situation before he renders you unable to return to the party. With a joyous groan, he blows his load deep into your bosom and down your dress. As he helps you to your feet, and the stain under your rack grows larger, you give him a kiss on the cheek and head off to change. He returns to the party, and from what your serving slaves tell you later, seems to have boasted about how well you do business. @@.green;Your reputation has slightly improved,@@ though nowhere near as much as his. - <<run repX(100, "event")>> - <<set $desc = "a thank-you note from a male arcology owner of your acquaintance with an attached list of natural supplements to make your tits even bigger">> - <<set $trinkets.push($desc)>> - <<else>> - conversation between him and the woman trying to convince him to invest in her solar power concern. Your attempts, at first, appear to be working as he begins to stutter and lose focus on the topic at hand, but he soon apologizes, wraps an arm around your shoulders, pulls you close and starts groping your enormous funbags. He returns to discussing business while using you like a stress ball and manages to seal a rather lucrative business deal. He gives you an appreciative squeeze and heads on his way, leaving you dumbfounded at what just happened. His reputation has improved significantly, while your status @@.red;as nothing more than stress relief@@ is made clear. - <<run repX(-500, "event")>> - <</if>> - <<else>> /* big butt */ - <<if _randomForeignFS > 80>> /* slimness */ - You wait until he finishes his conversation with the woman trying to convince him to invest in her solar power concern and excuses himself to head for the restroom. You know the layout of the penthouse better than anyone and know that he'll likely take a narrow service hall to get back to the party quick; that is where you will spring your trap. As he makes his return, you attempt to squeeze past him, forcing your enormous <<if $PC.buttImplant != 0>>fake <</if>>rear up against his crotch. As you wiggle against him, it becomes apparent that any hint of an erection he may have had is quickly fading. He apologizes for the inconvenience and heads on his way. You stop around the corner, out of sight, and console yourself that you are not exactly starved for company. - <<elseif _randomForeignFS > 60>> /* transformation */ - <<if $PC.buttImplant == 0>> - You wait until he finishes his conversation with the woman trying to convince him to invest in her solar power concern and excuses himself to head for the restroom. You know the layout of the penthouse better than anyone and know that he'll likely take a narrow service hall to get back to the party quick; that is where you will spring your trap. As he makes his return, you attempt to squeeze past him, forcing your enormous <<if $PC.buttImplant != 0>>fake <</if>>rear up against his crotch. As you wiggle against him, it becomes apparent that he is a man that enjoys a nice big ass wrapped around his cock. You tense up as you feel his hands sink into your soft cheeks, only to find that he is slipping out from behind you. He apologizes for leading you on and heads back to the party. You're left standing there, pondering why it didn't work, only to realize that he lost interest the moment he realized your butt was real. - <<else>> - You wait until he finishes his conversation with the woman trying to convince him to invest in her solar power concern and excuses himself to head for the restroom. You know the layout of the penthouse better than anyone and know that he'll likely take a narrow service hall to get back to the party quick; that is where you will spring your trap. As he makes his return, you attempt to squeeze past him, forcing your enormous <<if $PC.buttImplant != 0>>fake <</if>>rear up against his crotch. As you wiggle against him, it becomes apparent that something hard is slowly snaking its way between your firm cheeks. Your suspicions are confirmed when you feel his hands grab your hips as he begins to dry hump you. Before he can ruin the moment, and his pants, you quickly guide him into one of the many stairwells hidden throughout the penthouse. By the time you've grabbed hold of the rail, he's undone his pants, managed to pull your dress up over your immense bottom, and lined himself up with your moist slit. You push back against him, biting your lip as the length of his member slides into you, letting him know that you are ready as your shelf of an ass blocks any view of your crotch from above. He takes you hard against the railing, enjoying the sensation of your implants slamming against him. With a joyous groan, he pulls out and blows his load in your crack and up your back. As he helps you upright, you lean back give him a kiss on the cheek before heading off to change. He returns to the party, and from what your serving slaves tell you later, seems to have boasted about how well you do business. @@.green;Your reputation has slightly improved,@@ though nowhere near as much as his. - <<run repX(100, "event")>> - <<set $desc = "a thank-you note from a male arcology owner of your acquaintance that not-so-subtly suggests getting a bigger pair of ass implants">> - <<set $trinkets.push($desc)>> - <</if>> - <<elseif _randomForeignFS > 40 && $PC.buttImplant == 0>> /* purist + expansion */ - You wait until he finishes his conversation with the woman trying to convince him to invest in her solar power concern and excuses himself to head for the restroom. You know the layout of the penthouse better than anyone and know that he'll likely take a narrow service hall to get back to the party quick; that is where you will spring your trap. As he makes his return, you attempt to squeeze past him, forcing your enormous rear up against his crotch. As you wiggle against him, it becomes apparent that something hard is slowly snaking its way between your expansive cheeks. Your suspicions are confirmed when you feel his hands grab your hips as he begins to dry hump you. Before he can ruin the moment, and his pants, you quickly guide him into one of the many stairwells hidden throughout the penthouse. By the time you've grabbed hold of the rail, he's undone his pants, managed to pull your dress up over your immense bottom, and lined himself up with your moist slit. You push back against him, biting your lip as the length of his member slides into you, letting him know that you are ready as your shelf of an ass blocks any view of your crotch from above. He takes you hard against the railing, enjoying the motion of your butt slamming against him. With a joyous groan, he pulls out and blows his load in your crack and up your back. As he helps you upright, you lean back give him a kiss on the cheek before heading off to change. He returns to the party, and from what your serving slaves tell you later, seems to have boasted about how well you do business. @@.green;Your reputation has slightly improved,@@ though nowhere near as much as his. - <<run repX(100, "event")>> - <<set $desc = "a thank-you note from a male arcology owner of your acquaintance with an attached list of natural supplements and diets to add even more weight to your rear">> - <<set $trinkets.push($desc)>> - <<else>> - You adjust your dress to better hug your huge <<if $PC.buttImplant != 0>>fake ass<<else>>soft butt<</if>> and head over to join to the conversation between him and the woman trying to convince him to invest in her solar power concern. Your attempts, at first, appear to be working as he begins to stutter and lose focus on the topic at hand, but he soon apologizes, wraps an arm around your waist, pulls you close and starts groping your enormous rear. He returns to discussing business while using you like a stress ball and manages to seal a rather lucrative business deal. He gives you an appreciative slap on the fanny and heads on his way, leaving you dumbfounded at what just happened. His reputation has improved significantly, while your status @@.red;as nothing more than stress relief@@ is made clear. - <<run repX(-500, "event")>> - <</if>> - <</if>> - <</replace>> - <</link>> -<</if>> -<<if $mercenaries > 0>> - <<if $PC.belly < 5000 && $PC.boobs < 1200 && $PC.butt < 4>> - <br><<link "Quickly arrange an anonymous night out for him">> - <<replace "#result">> - You immediately enlist $assistant.name to help you make some hasty preparations, and then send him a message asking him if he'd like to spend a night out with you, as a couple of unremarkable citizens. He glances at you with a curious expression, and you direct him to a side room. He finds you there, changing into the heavy, anonymizing armor of one of your mercenaries; you have a male suit for him, too. Once you're both suited up, you move to show him how to activate the face-obscuring helmet, but you find that he's already got it on and active. "This," he says, "is either the best or the stupidest date idea I have ever heard. Let's fucking do this." You pass a mercenary on your way out onto the club, and he cannot resist giving you a thumbs up, which your fellow arcology owner fortunately fails to notice. You patrol for a while, using internal comms to joke about life as an arcology owner, something he clearly gets to do too infrequently. You don't mind the chance, either. Your mercenaries frequently spend time together off duty, so nobody sees anything unusual about a male and female in mercenary armor sharing a milkshake at a dairy bar, even when they start to engage in increasingly rough public flirting, armor and all. Later, your slaves are obliged to pick up and sort a trail of discarded armor pieces leading from the entry to your penthouse all the way to your suite, which is now emitting the indistinct sounds of very energetic sex. A few hours later, when you're showering up together so he can head back to his domain, he looks at you and says seriously, "That was pretty fun. If things ever go to shit, I wouldn't mind wearing that armor for real." Your mercenaries cannot keep their mouths shut, for once, and the almost unbelievably juicy story of the arcology owners wearing borrowed armor to go on an anonymous date spreads like wildfire. @@.green;Your reputation has greatly improved.@@ - <<set $desc = "a flirtatious thank-you note from a male arcology owner of your acquaintance">> - <<set $trinkets.push($desc)>> - <<if canGetPregnant($PC)>> - <<= knockMeUp($PC, 60, 0, -4)>> - <</if>> - <<run repX(5000, "event")>> - <</replace>> - <</link>> - <</if>> -<</if>> -</span> diff --git a/src/uncategorized/randomNonindividualEvent.tw b/src/uncategorized/randomNonindividualEvent.tw index 19a19b8ad73d89053af114a9fc971125c9ab2bf9..9531617802b9ee6ccc3af33aee982bffeea15308 100644 --- a/src/uncategorized/randomNonindividualEvent.tw +++ b/src/uncategorized/randomNonindividualEvent.tw @@ -396,11 +396,7 @@ <<if $policies.regularParties == 1>> <<if ($rep-10000 > random(1,10000) || ($debugMode > 0 && $debugModeEventSelection > 0))>> - <<if ($PC.vagina > 0 && $PC.boobs >= 300 && $PC.title == 0) && (random(0,99) < $seeDicks)>> - <<set $events.push("RE male arcology owner")>> - <<else>> <<set $events.push("RE female arcology owner")>> - <</if>> <</if>> <</if>>