diff --git a/Changelog.txt b/Changelog.txt index 56fe960da8203e46d29ceb63c6f93810cd85245f..05605ba94948bb7603f80a9df2424982bbf4b014 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -2,6 +2,12 @@ Pregmod 0.10.7.1-3.8.x + 7 + -completed belly descriptions + -new one legged shoe descriptions + -couple more event conversions + -fixes + 01/25/2021 6 diff --git a/src/events/reUnderageConcubine.js b/src/events/PE/UnderageConcubine.js similarity index 86% rename from src/events/reUnderageConcubine.js rename to src/events/PE/UnderageConcubine.js index aedf2223666f3a27479d789b73b05b97a697f5e0..dd784c6c5421ac6697f3834617bdc77a73bc1767 100644 --- a/src/events/reUnderageConcubine.js +++ b/src/events/PE/UnderageConcubine.js @@ -3,7 +3,7 @@ App.Events.PEUnderageConcubine = class PEUnderageConcubine extends App.Events.Ba return [ () => !V.eventResults.youngConcubine, // only once () => V.minimumSlaveAge < 18, // underage content visible - () => V.PC.actualAge > 18, // underage PC is a totally different controversy + () => V.PC.visualAge > 18, // underage PC is a totally different controversy () => !!S.Concubine, // must have concubine () => V.arcologies[0].FSMaturityPreferentialist === "unset" // failure should not benefit the player ]; @@ -13,9 +13,9 @@ App.Events.PEUnderageConcubine = class PEUnderageConcubine extends App.Events.Ba return [ [ // one actor, must be able-bodied, devoted, hearing/speaking, underaged concubine; eyes not necessary (s) => s.ID === V.ConcubineID, (s) => s.actualAge < 18, // it's in the name of the event + (s) => s.visualAge < 18, // so they must also look it (s) => s.actualAge > 6, // event text assumes fluent speech, inductive reasoning, etc (s) => s.devotion > 50, // you took her to an external event with you, so you must be able to count on her obedience - canWalk, canTalk, (s) => hasAnyArms(s), canHear @@ -58,16 +58,16 @@ App.Events.PEUnderageConcubine = class PEUnderageConcubine extends App.Events.Ba const haveSmilingMan = V.SecExp && V.SecExp.smilingMan.progress === 10; App.Events.addResponses(node, [ - new App.Events.Result("Ignore the controversy...what can they do about it anyway?", ignore), + new App.Events.Result("Ignore the controversy... What can they do about it anyway?", ignore), new App.Events.Result("Contact an old-world talk show and schedule an interview", interview), - V.PC.skill.hacking > 25 || haveSmilingMan ? new App.Events.Result("Hack the social media conversation to favor your point of view", hack) : new App.Events.Result(), - V.PC.skill.hacking > 25 || haveSmilingMan ? new App.Events.Result("Take down the videos and silence the conversation", silence) : new App.Events.Result() + V.PC.skill.hacking >= 40 || haveSmilingMan ? new App.Events.Result("Hack the social media conversation to favor your point of view", hack) : new App.Events.Result(), + V.PC.skill.hacking >= 60 || haveSmilingMan ? new App.Events.Result("Take down the videos and silence the conversation", silence) : new App.Events.Result() ]); function ignore() { let frag = document.createDocumentFragment(); t = []; - t.push(`Your days of caring what the Old World has to say are long over. You tell both ${V.assistant.name} and ${concubine.slaveName} to ignore the fuss and go back to what they were doing, and you reach over to play with ${concubine.slaveName}'s pretty ${num(concubine.actualAge)}-year-old ${concubine.toyHole === "all her holes" ? "body" : concubine.toyHole}.`); + t.push(`Your days of caring what the Old World has to say are long over. You tell both ${V.assistant.name} and ${concubine.slaveName} to ignore the fuss and go back to what they were doing as you reach over to play with ${concubine.slaveName}'s pretty ${num(concubine.actualAge)}-year-old ${concubine.toyHole === "all her holes" ? "body" : concubine.toyHole}.`); App.Events.addParagraph(frag, t); // doesn't matter, huh? let's see about that... @@ -81,7 +81,7 @@ App.Events.PEUnderageConcubine = class PEUnderageConcubine extends App.Events.Ba } function arcologyGoesMature() { - const vulnerableArcologies = V.arcologies.filter((arc) => arc.direction !== 0 && arc.government !== "your agent" && arc.government !== "your trustees"); + const vulnerableArcologies = V.arcologies.filter((arc) => arc.direction !== 0 && arc.government !== "your agent" && arc.government !== "your trustees" && arc.rival !== 1); let arcology = vulnerableArcologies.find((arc) => arc.FSYouthPreferentialist !== "unset"); // if there's a YP arcology, we'll replace it with MP for maximum effect if (!arcology) { arcology = vulnerableArcologies.find((arc) => FutureSocieties.activeCount(arc) < V.FSCreditCount); // adopt another FS prematurely...hopefully doesn't cause problems @@ -110,7 +110,7 @@ App.Events.PEUnderageConcubine = class PEUnderageConcubine extends App.Events.Ba t = []; t.push(`The interviewer clears her throat.`); if (concubine.porn.feed) { - t.push(`"And that's just the beginning...I'm told that our producers have seen some substantially more explicit content featuring the two of you available on the dark web."`); + t.push(`"And that's just the beginning. I'm told that our producers have seen some substantially more explicit content featuring the two of you available on the dark web."`); if (concubine.porn.fameType === "underage") { t.push(`You begin to wonder whether ${concubine.slaveName}'s fame in explicitly underaged pornography in the Free Cities is going to end up making this interview more difficult.`); } @@ -128,7 +128,7 @@ App.Events.PEUnderageConcubine = class PEUnderageConcubine extends App.Events.Ba t.push("extraordinarily cute"); break; case "normal": - t.push("cute young"); + t.push("cute, young"); break; case "masculine": t.push("young, handsome"); @@ -143,7 +143,7 @@ App.Events.PEUnderageConcubine = class PEUnderageConcubine extends App.Events.Ba App.Events.addParagraph(frag, t); t = []; - t.push(`The interviewer blushes but maintains a straight face. "I see...and would you say that this kind of relationship is common in ${V.arcologies[0].name}?"`); + t.push(`The interviewer blushes but maintains a straight face. "I see... And would you say that this kind of relationship is common in ${V.arcologies[0].name}?"`); App.Events.addParagraph(frag, t); const puberty = concubine.genes === "XX" ? !!concubine.pubertyXX : !!concubine.pubertyXY; @@ -151,7 +151,7 @@ App.Events.PEUnderageConcubine = class PEUnderageConcubine extends App.Events.Ba new App.Events.Result(`We have a special relationship`, specialRelationship), new App.Events.Result(`Slaves should always see to their ${getWrittenTitle(concubine)}'s happiness, regardless of age`, slavesDuty), puberty ? new App.Events.Result(`Sex with teens is common, as it has been historically`, ephebephile) : new App.Events.Result(), - new App.Events.Result(`We encourage children to explore their sexuality`, pedophile) + new App.Events.Result(`We encourage everyone to explore their sexuality, even children`, pedophile) ], "result2"); return frag; @@ -167,7 +167,7 @@ App.Events.PEUnderageConcubine = class PEUnderageConcubine extends App.Events.Ba t = []; switch (concubine.relationship) { case -3: { // married - t.push(`${concubine.slaveName} shows the camera her wedding ring.`); + t.push(`${concubine.slaveName} shows the camera ${his} wedding ring.`); t.push(Spoken(concubine, `"We're married! And quite happily, too, thank you!"`)); t.push(`${He} gives you a quick kiss on the cheek, and you (and the camera) can see the <span class="trust inc">trust</span> and <span class="devotion inc">devotion</span>`); if (canSee(concubine)) { @@ -191,10 +191,11 @@ App.Events.PEUnderageConcubine = class PEUnderageConcubine extends App.Events.Ba default: { t.push(`${concubine.slaveName} looks momentarily confused.`); if (concubine.intelligence + concubine.intelligenceImplant > 50) { - t.push(`${He} recovers quickly, smiling at the camera and hugging you, but you and the interviewer both know that <span class="devotion dec">wasn't what ${he} expected</span>, and ${he}'ll have questions for you later.`); + t.push(`${He} recovers quickly, smiling at the camera and hugging you, but you and the interviewer both know that <span class="devotion dec">wasn't what ${he} expected,</span> and that ${he}'ll expect <span class="trust dec">repercussions</span> from you later.`); concubine.devotion--; + concubine.trust--; } else { - t.push(`"We do?", ${he} asks cautiously. You give a noncommittal reply for the camera, but you know it <span class="devotion dec">didn't go over well</span>, either with the audience or with ${concubine.slaveName}.`); + t.push(`"We do?", ${he} asks cautiously. You give a noncommittal reply for the camera, but you know it <span class="devotion dec">didn't go over well,</span> either with the audience or with ${concubine.slaveName}.`); interviewPoints--; concubine.devotion -= 5; } @@ -211,14 +212,14 @@ App.Events.PEUnderageConcubine = class PEUnderageConcubine extends App.Events.Ba let frag2 = document.createDocumentFragment(); t = []; - t.push(`"Slaves should always see to their ${getWrittenTitle(concubine)}'s happiness, regardless of age," you reply.`); + t.push(`"Slaves should always see to their ${properMaster()}'s happiness, regardless of age," you reply.`); App.Events.addParagraph(frag2, t); // remember your audience...this is NOT the answer the old world wants to hear! interviewPoints--; t = []; - t.push(`The interviewer looks taken aback momentarily...she didn't expect such a direct answer to that question. It's not going to endear you to the Old World's moralizers.`); + t.push(`The interviewer looks taken aback momentarily; she didn't expect such a direct answer to that question. It's not going to endear you to the Old World's moralizers.`); App.Events.addParagraph(frag2, t); // let's see if your concubine is fast enough and motivated enough to make up the difference (or make it worse) @@ -226,7 +227,7 @@ App.Events.PEUnderageConcubine = class PEUnderageConcubine extends App.Events.Ba if (concubine.behavioralQuirk === "advocate") { t = []; t.push(`${capFirstChar(concubine.slaveName)} knows why you agreed to this interview, and wants to make sure the Old World ends up with a positive impression of the Free Cities.`); - t.push(Spoken(concubine, `"So many people have no sense of purpose in this world, but we're lucky...as slaves, we know exactly what we're here to do, and we love the assurance and security that brings. I love to serve ${Master}."`)); + t.push(Spoken(concubine, `"So many people have no sense of purpose in this world, but we're lucky. As slaves, we know exactly what we're here to do, and we love the assurance and security that brings. I love to serve ${Master}."`)); App.Events.addParagraph(frag2, t); interviewPoints++; } else if (concubine.behavioralFlaw === "liberated") { @@ -234,10 +235,10 @@ App.Events.PEUnderageConcubine = class PEUnderageConcubine extends App.Events.Ba t.push(`${capFirstChar(concubine.slaveName)} <span class="devotion dec">bristles visibly</span> at your mention of slaves' duty; you've had many conversations with ${him} about the institution of slavery, and you know ${he}'s an idealistic ${girl} who strongly opposes it.`); if (concubine.trust > 50) { // doesn't expect to be punished t.push(`But the audience doesn't, until ${he} speaks up:`); - t.push(Spoken(concubine, `"I serve ${Master} because I love him, but not everyone is so lucky. It's just the reality of slavery in the Free Cities."`)); + t.push(Spoken(concubine, `"I serve ${Master} because I love him, but not everyone is so lucky. It's just the reality of slavery in the Free Cities."`)); concubine.devotion--; // even subtle venting helps } else { - t.push(`${He}'s well-broken and keeps ${his} mouth shut, but the audience can sense ${he}'s <span class="devotion dec">disturbed and angry</span>.`); + t.push(`${He}'s well-broken and keeps ${his} mouth shut, but the audience can sense ${he}'s <span class="devotion dec">disturbed and angry.</span>`); concubine.devotion -= 5; } App.Events.addParagraph(frag2, t); @@ -256,11 +257,11 @@ App.Events.PEUnderageConcubine = class PEUnderageConcubine extends App.Events.Ba t = []; t.push(`"Sex with teens is common, as it has been historically," you reply, proceeding to explain in detail that the modern aversion to sex with adolescents is a historical aberration, and that even in modern times sexual attraction to teens has not been considered abnormal by trained physcologists.`); // don't try this line of reasoning with NCS youthening, obviously... - if (concubine.physicalAge > V.fertilityAge) { + if (concubine.visualAge >= 13) { t.push(`You also point out that physical characteristics of teens like ${concubine.slaveName} are really very similar to those of adults, and cast "age of consent" as an arbitrary social construct that the Free Cities' very different society has not chosen to retain.`); interviewPoints++; } else { - t.push(`Your efforts to illustrate that teens and adults are physcially similar, though, fall flat because of ${concubine.slaveName}'s extremely youthful appearance...there's no way ${he} could even remotely pass as a young adult.`); + t.push(`Your efforts to illustrate that teens and adults are physcially similar, though, fall flat because of ${concubine.slaveName}'s extremely youthful appearance; there's no way ${he} could even remotely pass as a young adult.`); interviewPoints--; } App.Events.addParagraph(frag2, t); @@ -274,7 +275,7 @@ App.Events.PEUnderageConcubine = class PEUnderageConcubine extends App.Events.Ba let frag2 = document.createDocumentFragment(); t = []; - t.push(`"We encourage children to explore their sexuality," you reply, proceeding to explain that, far from being asexual, children like ${concubine.slaveName} are naturally curious about their bodies and sex. Although you do your best to explain sex with children in your arcology as an educational excercise, you can tell that the interviewer remains skeptical. It seems the old world just isn't ready for interactive sex ed.`); + t.push(`"We encourage everyone to explore their sexuality, even children," you reply, proceeding to explain that, far from being asexual, kids like ${concubine.slaveName} are naturally curious about their bodies and sex. Although you do your best to explain underaged sex in your arcology as an educational excercise, you can tell that the interviewer remains skeptical. It seems the old world just isn't ready for interactive sex ed.`); App.Events.addParagraph(frag2, t); // remember your audience...this is NOT the answer the old world wants to hear! @@ -296,7 +297,7 @@ App.Events.PEUnderageConcubine = class PEUnderageConcubine extends App.Events.Ba t = []; if (interviewPoints > 0) { const womanP = getPronouns(V.PC).woman; - t.push(`Furthermore, by the end of the interview you can tell you've made some signficiant progress getting the interviewer, and hopefully the audience, more receptive towards your point of view. Recordings find their way back into the Free Cities and you're <span class="reputation inc">hailed as a spokes${womanP}</span>.`); + t.push(`Furthermore, by the end of the interview you can tell you've made some signficiant progress getting the interviewer, and hopefully the audience, more receptive towards your point of view. Recordings find their way back into the Free Cities and you're <span class="reputation inc">hailed as a spokes${womanP}.</span>`); App.Events.addParagraph(frag2, t); V.eventResults.youngConcubine = 2; // record persuasive success in case we want to use it in the future repX(1000, "event"); @@ -321,12 +322,12 @@ App.Events.PEUnderageConcubine = class PEUnderageConcubine extends App.Events.Ba function hack() { t = []; - if (V.PC.skill.hacking >= 50) { - t.push(`You know the old adage about nothing ever really being gone from the internet, so you decide to take the smarter approach and, through a series of sock puppets and social engineering, push the conversation away from outrage and toward envy. The resulting influx of trade and migration to the Free Cities <span class="green">increases your prosperity</span>.`); + if (V.PC.skill.hacking >= 80) { + t.push(`You know the old adage about nothing ever really being gone from the internet, so you decide to take the smarter approach and, through a series of sock puppets and social engineering, push the conversation away from outrage and toward envy. The resulting influx of trade and migration to the Free Cities <span class="green">increases your prosperity.</span>`); V.eventResults.youngConcubine = 2; // record persuasive success in case we want to use it in the future V.arcologies[0].prosperity += 2; } else if (haveSmilingMan) { - t.push(`Although you know your hacking expertise isn't up to the job, you know someone who can accomplish the impossible. The Smiling Man, through a series of sock puppets, selective moderation, and social engineering, guides the conversation towards more envy and less outrage. The resulting influx of trade and migration to the Free Cities <span class="green">increases your prosperity</span>.`); + t.push(`Although you know your hacking expertise isn't up to the job, you know someone who can accomplish the impossible. The Smiling Man, through a series of sock puppets, selective moderation, and social engineering, guides the conversation towards more envy and less outrage. The resulting influx of trade and migration to the Free Cities <span class="green">increases your prosperity.</span>`); V.eventResults.youngConcubine = 2; // record persuasive success in case we want to use it in the future V.arcologies[0].prosperity += 2; } else { diff --git a/src/pregmod/reMaleCitizenHookup.tw b/src/pregmod/reMaleCitizenHookup.tw index 5e0cb31a24fbfcacb322853e4f7dc690f1ba094d..8a7c68f1e8e3aacf43fdf44284ec90a359509141 100644 --- a/src/pregmod/reMaleCitizenHookup.tw +++ b/src/pregmod/reMaleCitizenHookup.tw @@ -226,9 +226,15 @@ He's clearly attracted to you; even the most consummate actor would have difficu You pull his arm around your waist. <</if>> You hear a slight gasp from him as he realizes that his gambit has succeeded with more immediate effect than he expected. He shivers with anticipation as you steer him back through a side door, grabbing a pair of glasses of <<if $PC.refreshmentType == 1>>$PC.refreshment<<else>>liquor<</if>> on the way, and making a discreet exit towards your private suite. - <<if _S.Concubine && _S.Concubine.intelligence+_S.Concubine.intelligenceImplant > 50>> + <<if _S.Concubine>> <<setLocalPronouns _S.Concubine>> - _S.Concubine.slaveName is there, of course, and $he instantly <<if canSee(_S.Concubine)>>sees<<else>>realizes<</if>> that $his continued presence for a ménage à trois is wanted by both you and your guest. + <<if _S.Concubine.intelligence+_S.Concubine.intelligenceImplant > 50>> + _S.Concubine.slaveName is there, of course, and $he instantly <<if canSee(_S.Concubine)>>sees<<else>>realizes<</if>> that $his continued presence for a ménage à trois is wanted by both you and your guest. + <<elseif _S.Concubine.intelligence+_S.Concubine.intelligenceImplant < -50>> + _S.Concubine.slaveName is there, of course, absentmindly doing whatever it is $he does when you are not around, and unsurprisingly fails to <<if canSee(_S.Concubine)>>see<<else>>realize<</if>> that $his presence might not be wanted. + <<elseif _S.Concubine.fetish == "mindbroken">> + _S.Concubine.slaveName is there, of course, completely indifferent to you or your guest's presence. + <</if>> <</if>> Your guest restrains his eager praise now that you're in private, but his wide-eyed appreciation of your domain is compliment enough. Once in your suite, you undress him, revealing <<switch _FS>> @@ -331,12 +337,11 @@ He's clearly attracted to you; even the most consummate actor would have difficu a hot young body, and gently push him back onto your bed. You tease him as you remove your evening dress, crawl over him and impale yourself on his eager shaft, fully taking its length, before beginning to ride him. Even a female arcology owner like yourself appreciates a good hard fuck, since regular submission to a pounding from sex slaves would be a scandal. There's little opprobrium waiting for you if it's known he had you, though, and he is eagerly thrusting into your pussy. You shift into a slightly more comfortable position<<if $PC.belly >= 5000>> (one that forces him to bear the weight of your heavy middle) <</if>>and ride him to orgasm. You follow shortly after, feeling the heat of his seed in the depths of your pussy as it clamps down around his dick. Thankfully, he isn't spent yet and begins anew, quickly carrying your climax to a second orgasm and drawing an adorable moan out of you. <</switch>> <<if _FS == "Asset Expansionist">> - <<if _S.Concubine && !isAmputee(_S.Concubine)>> + <<if _S.Concubine && canMove(_S.Concubine) && _S.Concubine.fetish != "mindbroken">> _S.Concubine.slaveName eagerly joins the two of you to help clean the massive cumshot up. <</if>> <<elseif _FS != "Youth Preferentialist">> - <<if _S.Concubine && !isAmputee(_S.Concubine)>> - <<setLocalPronouns _S.Concubine>> + <<if _S.Concubine && canMove(_S.Concubine) && _S.Concubine.fetish != "mindbroken">> The <<if canSee(_S.Concubine)>>view of your bouncing tits<<elseif canHear(_S.Concubine)>>sound of lusty sex<<else>>vibrations from your bed bouncing up and down<</if>> is too much for _S.Concubine.slaveName to resist and so $he crawls over to kiss and caress you as your lover finishes. <</if>> <</if>> diff --git a/src/uncategorized/reCitizenHookup.tw b/src/uncategorized/reCitizenHookup.tw index 7e093372abc867e1409210e5f277a21937b64b54..b4ec8768d4937033574da5645f214d3282b2699c 100644 --- a/src/uncategorized/reCitizenHookup.tw +++ b/src/uncategorized/reCitizenHookup.tw @@ -241,8 +241,15 @@ She's clearly attracted to you; even the most consummate actress would have diff <br><<link "To them that hath, it shall be given">> <<replace "#result">> You're not exactly starved for casual sex, but you've never thought there was any such thing as too much of a good thing. You place a <<if $PC.title == 1>>masculine<<else>>feminine<</if>> hand against the small of her back, feeling the warmth of her through the material of her evening wear. You hear a slight gasp from her as she realizes that her gambit has succeeded with more immediate effect than she expected. She shivers with anticipation as you steer her back through a side door, making a discreet exit towards your private suite. - <<if _S.Concubine && _S.Concubine.intelligence+_S.Concubine.intelligenceImplant > 50>> - _S.Concubine.slaveName is there, of course, and she instantly sees that her continued presence for a ménage à trois is wanted by both you and your guest. + <<if _S.Concubine>> + <<setLocalPronouns _S.Concubine>> + <<if _S.Concubine.intelligence+_S.Concubine.intelligenceImplant > 50>> + _S.Concubine.slaveName is there, of course, and $he instantly <<if canSee(_S.Concubine)>>sees<<else>>realizes<</if>> that $his continued presence for a ménage à trois is wanted by both you and your guest. + <<elseif _S.Concubine.intelligence+_S.Concubine.intelligenceImplant < -50>> + _S.Concubine.slaveName is there, of course, absentmindly doing whatever it is $he does when you are not around, and unsurprisingly fails to <<if canSee(_S.Concubine)>>see<<else>>realize<</if>> that $his presence might not be wanted. + <<elseif _S.Concubine.fetish == "mindbroken">> + _S.Concubine.slaveName is there, of course, completely indifferent to you or your guest's presence. + <</if>> <</if>> Your guest restrains her eager praise now that you're in private, but her wide-eyed appreciation of your domain is compliment enough. Once in your suite, she strips, revealing <<switch _FS>> @@ -319,9 +326,15 @@ She's clearly attracted to you; even the most consummate actress would have diff a hot young body. <</switch>> Citizens like her often appreciate a good hard fuck, since regular submission to a pounding from sex slaves would be a scandal. There's little opprobrium waiting for you if it's known you had her, though, and she's deliciously eager as you press her down onto the bed<<if $PC.dick == 0>> and pull on your usual harness<</if>>. She ruts herself hard back against you as you thrust into her, moaning, and after a short while she begs for it even harder, so you flip her over and mount her like a bitch, making her scream. - <<if _S.Concubine && _S.Concubine.intelligence > 1>> - <<setLocalPronouns _S.Concubine>> - The view of your conquest's rutting back is nice, of course, but after enjoying it for a few moments you pull _S.Concubine.slaveName in and kiss your favorite deeply, playing with $him as you fuck. + <<if _S.Concubine>> + The view of your conquest's rutting back is nice, of course, but after enjoying it for a few moments you pull _S.Concubine.slaveName in + <<if _S.Concubine.intelligence+_S.Concubine.intelligenceImplant > 50>> + and kiss your favorite deeply, playing with $him as you fuck. + <<elseif _S.Concubine.intelligence+_S.Concubine.intelligenceImplant < -50>> + and kiss your favorite idiot deeply, keeping $him from feeling left out as you fuck. + <<elseif _S.Concubine.fetish == "mindbroken">> + and play with $his body as you fuck. + <</if>> <</if>> When your guest is finally spent, she showers, dresses, and leaves discreetly, offering you a proper thank you. This is the kind of thing that @@.green;builds a lasting reputation@@ in the Free Cities. <<run repX(5000, "event")>>