diff --git a/js/003-data/constants.js b/js/003-data/constants.js index e2f7fa48033bdac494569a8fd93b4126c1152238..758933ca182820c50a839a8e98c4d7b3cf676f1b 100644 --- a/js/003-data/constants.js +++ b/js/003-data/constants.js @@ -1,8 +1,17 @@ -/** @type {FC.Rules.LivingFreezed} */ +/** + * @type {FC.Rules.LivingFreezed} + * @enum {string} + */ globalThis.LivingRule = Object.freeze({LUXURIOUS: 'luxurious', NORMAL: 'normal', SPARE: 'spare'}); -/** @type {FC.Rules.RestFreezed} */ +/** + * @type {FC.Rules.RestFreezed} + * @enum {string} + */ globalThis.RestRule = Object.freeze({MANDATORY: 'mandatory', MAX: 'permissive', MID: 'restrictive', MIN: 'cruel', NONE: 'none'}); -/** @type {FC.AssignmentFreeze} */ +/** + * @type {FC.AssignmentFreeze} + * @enum {string} + */ globalThis.Job = Object.freeze({ // Penthouse Assignments REST: 'rest', @@ -57,6 +66,9 @@ globalThis.Job = Object.freeze({ TANK: '@lay in tank' }); +/** + * @enum {string} + */ globalThis.PersonalAttention = Object.freeze({ TRADE: 'trading', WAR: 'warfare', diff --git a/src/events/RESS/devotedVirgin.js b/src/events/RESS/devotedVirgin.js index df6c6ac84471e9d4bd5257626484e8ebff2b48b5..1d51bc5697940b2e1efe4cda355c4695238348c2 100644 --- a/src/events/RESS/devotedVirgin.js +++ b/src/events/RESS/devotedVirgin.js @@ -45,7 +45,7 @@ App.Events.RESSDevotedVirgin = class RESSDevotedVirgin extends App.Events.BaseEv } else { t.push(Spoken(eventSlave, "Learning about so many of the other slaves getting fucked makes it seem like so much fun.")); } - t.push(Spoken(eventSlave, `"I'm so turned on by it. I can't be a proper sex slave without using my pussy. Please take my virginity, ${Master}."`)); + t.push(Spoken(eventSlave, `I'm so turned on by it. I can't be a proper sex slave without using my pussy. Please take my virginity, ${Master}."`)); } else { t.push(`${He} points to ${his} pussy and comically pantomimes having sex, and then uses gestures to ask if ${he} can serve you with ${his} pussy.`); } diff --git a/src/events/RESS/lazyEvening.js b/src/events/RESS/lazyEvening.js index 49e046dca051f738dc75f450afbca905fbde290b..283c49dd12cab7be2ffed19dfae870259cfce0f6 100644 --- a/src/events/RESS/lazyEvening.js +++ b/src/events/RESS/lazyEvening.js @@ -126,7 +126,7 @@ App.Events.RESSLazyEvening = class RESSLazyEvening extends App.Events.BaseEvent if (eventSlave.belly >= 5000) { t.push(`Between the two, there is little ${he} can do to cover ${his} exposed ${eventSlave.bellyPreg >= 3000 ? "pregnancy" : "middle"}.`); } - t.push(`${He}'s the perfect picture of an attentive little old world ${girl}friend ${eventSlave.height > 185 ? ` (though, of course, ${he}'s anything but physically small)` : ""}.`); + t.push(`${He}'s the perfect picture of an attentive little old world ${girl}friend${eventSlave.height > 185 ? ` (though, of course, ${he}'s anything but physically small)` : ""}.`); } App.Events.addParagraph(node, t); diff --git a/src/interaction/main/walkPast.js b/src/interaction/main/walkPast.js index 7c308cbc41f0c099a4d2bbb29cb9252f8925d5e9..512c0f0950ba6da3dfea24604f229c5314722932 100644 --- a/src/interaction/main/walkPast.js +++ b/src/interaction/main/walkPast.js @@ -9298,6 +9298,8 @@ globalThis.walkPast = (function() { } } + t += ` `; + return t; } diff --git a/src/js/storyJS.js b/src/js/storyJS.js index 824539a773b48fa24fde7b56586ec8d5ec53485a..b2a89cadc6606761587d14c51aeb082f6324b25a 100644 --- a/src/js/storyJS.js +++ b/src/js/storyJS.js @@ -566,7 +566,7 @@ globalThis.generatePlayerPronouns = function(PC) { } }; -globalThis.printTrinkets = function() { +globalThis.printTrinkets = function() { // TODO: move these out of global scope function trinketPluralReplacer(desc) { let r; switch (desc) { diff --git a/src/neighbor/neighborInteract.js b/src/neighbor/neighborInteract.js index 450494514f0868b38c91c18da9adc09bcfb21343..85b8f77f57046793841670212a2c1d185f0d4033 100644 --- a/src/neighbor/neighborInteract.js +++ b/src/neighbor/neighborInteract.js @@ -101,7 +101,7 @@ App.Neighbor.Interact = (function() { } const div = App.UI.DOM.appendNewElement("div", frag, App.UI.DOM.generateLinksStrip(links)); if (links.length > 1) { - App.UI.DOM.appendNewElement("span", div, "Transaction costs will only be paid once.", "detail"); + App.UI.DOM.appendNewElement("span", div, " Transaction costs will only be paid once.", "detail"); } } diff --git a/src/npc/descriptions/crotch/dick.js b/src/npc/descriptions/crotch/dick.js index 69275681cd968ac69d51e4d69225e11fa66d0906..1ecbe0a4ab7258c9a515acb0c434dc0c9d1a4768 100644 --- a/src/npc/descriptions/crotch/dick.js +++ b/src/npc/descriptions/crotch/dick.js @@ -2185,7 +2185,7 @@ App.Desc.dick = function(slave, {market, eventDescription} = {}) { } r.push(`giving ${his} ejaculations less`); if (slave.anus !== 0) { - r.push(`body and reducing the stimulation ${he} feels during anal sex`); + r.push(`body and reducing the stimulation ${he} feels during anal sex.`); } else { r.push(`body.`); } diff --git a/src/npc/generate/newSlaveIntro.js b/src/npc/generate/newSlaveIntro.js index a298ca6164d8819ad7ea407dc3493c0223a9d894..8086c27d61561fffb51554d06ba251b686f22963 100644 --- a/src/npc/generate/newSlaveIntro.js +++ b/src/npc/generate/newSlaveIntro.js @@ -2741,7 +2741,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = lineBreak(); if (slave.vagina === 0) { choice({ - // TODO tankBorn + // TODO: tankBorn get linkName() { return (tankBorn) ? `Take ${his} virginity` : `Tie ${him} up and take ${his} virginity`; }, result(slave) { const r = []; diff --git a/src/npc/interaction/fAnimal.js b/src/npc/interaction/fAnimal.js index c7968e9983d23431261f778deefb4d82ac47190d..d56550acdb62f5c6634dd54498e340cc30fe5bee 100644 --- a/src/npc/interaction/fAnimal.js +++ b/src/npc/interaction/fAnimal.js @@ -23,10 +23,12 @@ App.Interact.fAnimal = function(slave, type) { const animal = V.active[type]; + const stretches = App.UI.DOM.makeElement("span", `stretches`, ["lime"]); + let fetishDesc; let act; let hole; - let orifice = []; + let orifice; const anAnimal = animal.articleAn ? `an ${animal.name}` : `a ${animal.name}`; @@ -64,14 +66,14 @@ App.Interact.fAnimal = function(slave, type) { switch (act) { case oral: - orifice = ["mouth", "throat"]; + orifice = () => either("mouth", "throat"); break; case vaginal: - orifice = ["pussy", "cunt"]; + orifice = () => either("pussy", "cunt"); hole = 0; break; case anal: - orifice = ["asshole", "rectum"]; + orifice = () => either("asshole", "rectum"); hole = 1; break; default: @@ -129,7 +131,7 @@ App.Interact.fAnimal = function(slave, type) { r.push(`${slave.slaveName} nods ${his} head dumbly, ${his} eyes vacant${!canSee(slave) ? ` as always` : ``}. `); } - mainSpan.append(r.join(' ')); + App.Events.addNode(mainSpan, r); if (slave.fetish !== "mindbroken") { if (slave.devotion > 50) { @@ -297,10 +299,10 @@ App.Interact.fAnimal = function(slave, type) { if (canWalk(slave)) { r.push(`The canine clambers up to mount ${slave.slaveName}, eliciting a squeal from the ${girl} as its claws dig into ${his} flesh. `); } else { - r.push(`The canine takes a few curious sniffs, then lines up its large cock with ${slave.slaveName}'s ${act === vaginal ? `pussy` : `asshole`}. `); + r.push(`The canine takes a few curious sniffs, then lines up its large cock with ${slave.slaveName}'s ${orifice()}. `); } - r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === vaginal ? `wet ` : ``}${act === vaginal ? `cunt` : `asshole`} and begin to hammer away in the way that only canines can. `); + r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === vaginal ? `wet ` : ``}${orifice()} and begin to hammer away in the way that only canines can. `); } } @@ -312,7 +314,7 @@ App.Interact.fAnimal = function(slave, type) { r.push(`The slave visibly gags as the unfamiliar texture of ${anAnimal}'s cock fills it, then gives a groan as the beast thrusts, stretching ${his} poor throat to the limit. `); } } else { - r.push(`${slave.slaveName} gives a long, drawn-out moan as the huge phallus fills ${his} ${act === vaginal ? `pussy` : `asshole`} nearly to its breaking point. `); + r.push(`${slave.slaveName} gives a long, drawn-out moan as the huge phallus `, slave.vagina < 4 ? stretches : `fills`, ` ${his} ${orifice()} nearly to its breaking point. `); } } @@ -324,11 +326,11 @@ App.Interact.fAnimal = function(slave, type) { r.push(`The slave visibly gags as the unfamiliar texture of ${anAnimal}'s cock fills it, then gives a groan as the beast thrusts, the barbs on its cock rubbing the inside of ${his} mouth raw. `); } } else { - r.push(`${slave.slaveName} gives a squeal of pain as the barbed cock makes its way into ${his} ${act === vaginal ? `pussy` : `asshole`}. `); + r.push(`${slave.slaveName} gives a squeal of pain as the barbed cock makes its way into ${his} ${orifice()}. `); } } - mainSpan.append(r.join(' ')); + App.Events.addNode(mainSpan, r); return mainSpan; } @@ -373,10 +375,10 @@ App.Interact.fAnimal = function(slave, type) { if (canWalk(slave)) { r.push(`The canine clambers up to mount ${slave.slaveName}, eliciting a squeal from the ${girl} as its claws dig into ${his} flesh. `); } else { - r.push(`The canine takes a few curious sniffs, then lines up its large cock with ${slave.slaveName}'s ${act === vaginal ? `pussy` : `asshole`}. `); + r.push(`The canine takes a few curious sniffs, then lines up its large cock with ${slave.slaveName}'s ${orifice()}. `); } - r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === vaginal ? `wet ` : ``}${act === vaginal ? `cunt` : `asshole`} and begin to hammer away in the way that only canines can. `); + r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === vaginal ? `wet ` : ``}${orifice()} and begin to hammer away in the way that only canines can. `); } } @@ -388,7 +390,7 @@ App.Interact.fAnimal = function(slave, type) { r.push(`The slave visibly gags as the unfamiliar texture of ${anAnimal}'s cock fills it, and you get the feeling ${he} is beginning to reevaluate just how much ${he} wants to avoid punishment. `); } } else { - r.push(`${slave.slaveName} gives a long, drawn-out groan as the huge phallus fills ${his} ${act === vaginal ? `pussy` : `asshole`} nearly to its breaking point. `); + r.push(`${slave.slaveName} gives a long, drawn-out groan as the huge phallus `, slave.vagina < 4 ? stretches : `fills`, ` ${his} ${orifice()} nearly to its breaking point. `); } } @@ -400,11 +402,11 @@ App.Interact.fAnimal = function(slave, type) { r.push(`The slave visibly gags as the unfamiliar texture of ${anAnimal}'s barbed dick fills it, and you get the feeling ${he} is beginning to reevaluate just how much ${he} wants to avoid punishment. `); } } else { - r.push(`${slave.slaveName} gives a squeal of pain as the barbed cock makes its way into ${his} ${act === vaginal ? `pussy` : `asshole`}. `); + r.push(`${slave.slaveName} gives a squeal of pain as the barbed cock makes its way into ${his} ${orifice()}. `); } } - mainSpan.append(r.join(' ')); + App.Events.addNode(mainSpan, r); return mainSpan; } @@ -449,10 +451,10 @@ App.Interact.fAnimal = function(slave, type) { if (canWalk(slave)) { r.push(`The canine clambers up to mount ${slave.slaveName}, eliciting a squeal from the ${girl} as its claws dig into ${his} flesh. `); } else { - r.push(`The canine takes a few curious sniffs, then lines up its large cock with ${slave.slaveName}'s ${act === vaginal ? `pussy` : `asshole`}. `); + r.push(`The canine takes a few curious sniffs, then lines up its large cock with ${slave.slaveName}'s ${orifice()}. `); } - r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === vaginal ? `wet ` : ``}${act === vaginal ? `cunt` : `asshole`} and begin to hammer away in the way that only canines can. `); + r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === vaginal ? `wet ` : ``}${orifice()} and begin to hammer away in the way that only canines can. `); } } @@ -464,7 +466,7 @@ App.Interact.fAnimal = function(slave, type) { r.push(`The slave visibly gags as the unfamiliar texture of ${anAnimal}'s cock fills it, and you get the feeling ${he} is beginning to reevaluate just how much ${he} wants to avoid punishment. `); } } else { - r.push(`${slave.slaveName} gives a long, drawn-out groan as the huge phallus fills ${his} ${act === vaginal ? `pussy` : `asshole`} nearly to its breaking point. `); + r.push(`${slave.slaveName} gives a long, drawn-out groan as the huge phallus `, slave.vagina < 4 ? stretches : `fills`, ` ${his} ${orifice()} nearly to its breaking point. `); } } @@ -476,11 +478,11 @@ App.Interact.fAnimal = function(slave, type) { r.push(`The slave visibly gags as the unfamiliar texture of ${anAnimal}'s barbed dick fills it, and you get the feeling ${he} is beginning to reevaluate just how much ${he} wants to avoid punishment. `); } } else { - r.push(`${slave.slaveName} gives a squeal of pain as the barbed cock makes its way into ${his} ${act === vaginal ? `pussy` : `asshole`}. `); + r.push(`${slave.slaveName} gives a squeal of pain as the barbed cock makes its way into ${his} ${orifice()}. `); } } - mainSpan.append(r.join(' ')); + App.Events.addNode(mainSpan, r); return mainSpan; } @@ -532,10 +534,10 @@ App.Interact.fAnimal = function(slave, type) { if (canWalk(slave)) { r.push(`The canine clambers up to mount ${slave.slaveName}, eliciting a squeal from the ${girl} as its claws dig into ${his} flesh. `); } else { - r.push(`The canine takes a few curious sniffs, then lines up its large cock with ${slave.slaveName}'s ${act === vaginal ? `pussy` : `asshole`}. `); + r.push(`The canine takes a few curious sniffs, then lines up its large cock with ${slave.slaveName}'s ${orifice()}. `); } - r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === vaginal ? `wet ` : ``}${act === vaginal ? `cunt` : `asshole`} and begin to hammer away in the way that only canines can. `); + r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === vaginal ? `wet ` : ``}${orifice()} and begin to hammer away in the way that only canines can. `); } } @@ -554,7 +556,7 @@ App.Interact.fAnimal = function(slave, type) { r.push(`The slave visibly gags as the unfamiliar texture of ${anAnimal}'s cock fills it, and you get the feeling ${he} would have run away a long time ago if ${he} wasn't a little tied up at the moment. `); } } else { - r.push(`${slave.slaveName} lets out a blood-curdling scream as the huge phallus fills ${his} ${act === vaginal ? `pussy` : `asshole`} nearly to its breaking point. `); + r.push(`${slave.slaveName} lets out a blood-curdling scream as the huge phallus `, slave.vagina < 4 ? stretches : `fills`, ` ${his} ${orifice()} nearly to its breaking point. `); } } @@ -573,11 +575,11 @@ App.Interact.fAnimal = function(slave, type) { r.push(`The slave visibly gags as the unfamiliar texture of ${anAnimal}'s barbed dick fills it, and you get the feeling ${he} would have run away a long time ago if ${he} wasn't a little tied up at the moment .`); } } else { - r.push(`${slave.slaveName} lets out a blood-curdling scream as the barbed cock makes its way into ${his} ${act === vaginal ? `pussy` : `asshole`}. `); + r.push(`${slave.slaveName} lets out a blood-curdling scream as the barbed cock makes its way into ${his} ${orifice()}. `); } } - mainSpan.append(r.join(' ')); + App.Events.addNode(mainSpan, r); return mainSpan; } @@ -612,11 +614,11 @@ App.Interact.fAnimal = function(slave, type) { function completionCanine() { if (act === oral) { - r.push(`The ${animal.species === "dog" ? `hound` : animal.name} wastes no time in beginning to hammer away at ${his} ${orifice[0]}, causing ${slave.slaveName} to moan uncontrollably as its thick, veiny member probes the depths of ${his} ${orifice[1]}. A few short minutes later, ${he} gives a loud groan ${slaveApproves() ? `and shakes in orgasm ` : ``}as the ${animal.name}'s knot begins to swell and its dick begins to erupt a thick stream of jizz down ${his} abused throat. Soon enough, the ${animal.name} finally finishes cumming and its knot is sufficiently small enough to slip out of ${slave.slaveName}'s mouth, causing ${him} to immediately begin coughing and retching uncontrollably. Having finished its business, the ${animal.name} runs off, presumably in search of food. `); + r.push(`The ${animal.species === "dog" ? `hound` : animal.name} wastes no time in beginning to hammer away at ${his} ${orifice()}, causing ${slave.slaveName} to moan uncontrollably as its thick, veiny member probes the depths of ${his} ${orifice()}. A few short minutes later, ${he} gives a loud groan ${slaveApproves() ? `and shakes in orgasm ` : ``}as the ${animal.name}'s knot begins to swell and its dick begins to erupt a thick stream of jizz down ${his} abused throat. Soon enough, the ${animal.name} finally finishes cumming and its knot is sufficiently small enough to slip out of ${slave.slaveName}'s mouth, causing ${him} to immediately begin coughing and retching uncontrollably. Having finished its business, the ${animal.name} runs off, presumably in search of food. `); } else { - r.push(`The ${animal.species === "dog" ? `hound` : animal.name} wastes no time in beginning to hammer away at ${his} ${orifice[0]}, causing ${slave.slaveName} to moan uncontrollably as its thick, veiny member probes the depths of ${his} ${orifice[1]}. A few short minutes later, ${he} gives a loud groan ${slaveApproves() ? `and shakes in orgasm ` : ``}as the ${animal.name}'s knot begins to swell and its dick begins to erupt a thick stream of jizz into ${his} ${orifice[0]}. Soon enough, the ${animal.name} finally finishes cumming and its knot is sufficiently small enough to slip out of ${slave.slaveName}'s ${act === vaginal && slave.vagina < 3 || act === anal && slave.anus < 2 ? - `now-gaping ${orifice[0]}` : - orifice[0]}, causing a thick stream of cum to slide out of it. Having finished its business, the ${animal.name} runs off, presumably in search of food. `); + r.push(`The ${animal.species === "dog" ? `hound` : animal.name} wastes no time in beginning to hammer away at ${his} ${orifice()}, causing ${slave.slaveName} to moan uncontrollably as its thick, veiny member probes the depths of ${his} ${orifice()}. A few short minutes later, ${he} gives a loud groan ${slaveApproves() ? `and shakes in orgasm ` : ``}as the ${animal.name}'s knot begins to swell and its dick begins to erupt a thick stream of jizz into ${his} ${orifice()}. Soon enough, the ${animal.name} finally finishes cumming and its knot is sufficiently small enough to slip out of ${slave.slaveName}'s ${act === vaginal && slave.vagina < 3 || act === anal && slave.anus < 2 ? + `now-gaping ${orifice()}` : + orifice()}, causing a thick stream of cum to slide out of it. Having finished its business, the ${animal.name} runs off, presumably in search of food. `); } switch (act) { @@ -640,7 +642,7 @@ App.Interact.fAnimal = function(slave, type) { if (act === oral) { r.push(`The ${animal.species === "horse" ? `stallion` : animal.name} begins to thrust faster and faster, causing ${him} to moan and groan past the huge ${animal.species} cock stretching ${his} poor throat to its limits. Before too long, the ${animal.name}'s movements begin to slow, and you can see its large testicles contract as its begins to erupt and pour its thick semen down ${his} throat and into ${his} stomach, filling it to the brim. After what seems like an impossibly long time, the ${animal.name}'s dick finally begins to soften and pull out, causing ${slave.slaveName} to begin coughing and retching uncontrollably. You have another slave lead the ${animal.name} away, with a fresh apple as a treat for its good performance. `); } else { - r.push(`The ${animal.species === "horse" ? `stallion` : animal.name} begins to thrust faster and faster, causing ${him} to moan and groan as the huge ${animal.species} cock ${act === vaginal ? `batters ${his} cervix` : `fills ${him} completely`}. Before too long, the ${animal.name}'s movements begin to slow, and you can see its large testicles contract as its begins to erupt and fill ${his} ${orifice[1]} with its thick baby batter. After what seems like an impossibly long time, the ${animal.name}'s dick finally begins to soften and pull out, leaving ${slave.slaveName} panting and covered in sweat. You have another slave lead the ${animal.name} away, with a fresh apple as a treat for its good performance. `); + r.push(`The ${animal.species === "horse" ? `stallion` : animal.name} begins to thrust faster and faster, causing ${him} to moan and groan as the huge ${animal.species} cock ${act === vaginal ? `batters ${his} cervix` : `fills ${him} completely`}. Before too long, the ${animal.name}'s movements begin to slow, and you can see its large testicles contract as its begins to erupt and fill ${his} ${orifice()} with its thick baby batter. After what seems like an impossibly long time, the ${animal.name}'s dick finally begins to soften and pull out, leaving ${slave.slaveName} panting and covered in sweat. You have another slave lead the ${animal.name} away, with a fresh apple as a treat for its good performance. `); } switch (act) { @@ -656,7 +658,7 @@ App.Interact.fAnimal = function(slave, type) { slave.anus = slave.anus < 3 ? 3 : slave.anus; break; default: - throw new Error(`Unexpected act type '${act} in completionHooved().`); + throw new Error(`Unexpected act type '${act}' in completionHooved().`); } } @@ -664,7 +666,7 @@ App.Interact.fAnimal = function(slave, type) { if (act === oral) { r.push(`The ${animal.name} begins to move, thrusting faster and faster. The ${girl} underneath it can't stop a groan of pain from escaping ${his} lips as the ${animal.species}'s barbed dick rubs the inside of ${his} mouth and throat raw. After a few minutes of painful coupling, the ${animal.species}'s thrusts finally slow, then stop completely as its ${animal.species !== "cat" ? `large` : ``} cock erupts down ${slave.slaveName}'s throat. With a ${animal.species !== "cat" ? `deep bellow` : `loud meow`}, he finally dismounts, gives you a long look, then stalks off. `); } else { - r.push(`The ${animal.name} begins to move, thrusting faster and faster. The ${girl} underneath it can't stop a groan of pain from escaping ${his} lips as the ${animal.species}'s barbed dick rubs the inside of ${his} ${orifice[0]} raw. After a few minutes of painful coupling, the ${animal.species}'s thrusts finally slow, then stop completely as its ${animal.species !== "cat" ? `large` : ``} cock erupts, filling ${slave.slaveName} with its sperm. With a ${animal.species !== "cat" ? `deep bellow` : `loud meow`}, he finally dismounts, gives you a long look, then stalks off. `); + r.push(`The ${animal.name} begins to move, thrusting faster and faster. The ${girl} underneath it can't stop a groan of pain from escaping ${his} lips as the ${animal.species}'s barbed dick rubs the inside of ${his} ${orifice()} raw. After a few minutes of painful coupling, the ${animal.species}'s thrusts finally slow, then stop completely as its ${animal.species !== "cat" ? `large` : ``} cock erupts, filling ${slave.slaveName} with its sperm. With a ${animal.species !== "cat" ? `deep bellow` : `loud meow`}, he finally dismounts, gives you a long look, then stalks off. `); } healthDamage(slave, 1); @@ -686,7 +688,7 @@ App.Interact.fAnimal = function(slave, type) { } } - mainSpan.append(r.join(' ')); + App.Events.addNode(mainSpan, r); return mainSpan; } @@ -815,7 +817,7 @@ App.Interact.fAnimal = function(slave, type) { } } - mainSpan.append(r.join(' ')); + App.Events.addNode(mainSpan, r); return mainSpan; } diff --git a/src/pregmod/FCTV/FCTVshows.js b/src/pregmod/FCTV/FCTVshows.js index c7f0116fd1bb45323ef203518dceb71ee60e5116..9a69c562ac6bec7906264c3ce5b0ae9102e67934 100644 --- a/src/pregmod/FCTV/FCTVshows.js +++ b/src/pregmod/FCTV/FCTVshows.js @@ -616,7 +616,7 @@ App.Data.FCTV.channels = { if (V.PC.skill.medicine === 100) { r.push(`You vaguely recognize both of them from your time studying medicine.`); } - r.push(`</p><p>One of them continues the conversation, apparently answering a question. "That's right, the results of our research tell us what everyone already suspected, but now with an indisputable weight of evidence behind it." The other nods and continues, "our meta analysis examines over two decades of data, and nearly 6000 independent studies. We can safely say that free city slaves are healthier than the average person living anywhere in the old world. While a few of the wealthiest countries of the old world may surpass one or two areas, our slaves have better nutrition, standard of living, are more psychologically stable, have longer lives, and are happier on average as well." The first gentleman interjects, "We even found strong evidence that the higher sexual tempo and libido-stimulating training given to sex slaves greatly contributes to their life span; they live even longer than the average slave, and even look younger than their age."</p>`); + r.push(`</p><p>One of them continues the conversation, apparently answering a question. "That's right, the results of our research tell us what everyone already suspected, but now with an indisputable weight of evidence behind it." The other nods and continues, "our meta analysis examines over two decades of data, and nearly 6,000 independent studies. We can safely say that free city slaves are healthier than the average person living anywhere in the old world. While a few of the wealthiest countries of the old world may surpass one or two areas, our slaves have better nutrition, standard of living, are more psychologically stable, have longer lives, and are happier on average as well." The first gentleman interjects, "We even found strong evidence that the higher sexual tempo and libido-stimulating training given to sex slaves greatly contributes to their life span; they live even longer than the average slave, and even look younger than their age."</p>`); r.push(`<p>The camera switches back to the two anchors, showing an excited Jules hefting and bouncing her tits. "They've barely sagged at all since they stopped growing, now I know why!"</p>`); r.push(`<p>As the AnchorSlave continues to squeeze, one of the researchers answers from off camera. "That's right, it can be rather amazing. To tell you the truth, we didn't believe it at first, but the evidence made it too hard to ignore." Jules starts looking toward the backstage area trying to signal someone as the other researcher continues. "It's also important not to wear a bra unless you're doing high-impact cardio. We've known since the mid 20th century that wearing bras causes sagging; bras devastate the breasts of`); if (V.seePreg === 0) { @@ -1780,7 +1780,7 @@ App.Data.FCTV.channels = { r.push(`<p>Scott patted her head and pulled her into a hug. "Honesty is to be rewarded." Her body shuddered with suppressed sobs. June caught his eye over Cathy's shoulder and gave him an uncertain look. He shook his head slightly and gave her a thumbs up. She nodded slightly and quietly left the aisle. Cathy sniffed and mumbled into his chest, "I miss my mom." He rubbed slow circles in back and said softly, "I know, I know."</p>`); r.push(`<p>After her sobs subsided, the pair continued hugging in silence for a moment before separating. Cathy rubbed her eyes and sniffed, attempting to regain her composure. "So what happens now?" Scott quirked an eyebrow, "For now, we finish shopping and head on home." He looked up and down the aisle. "Provided that we can find where June wandered off to." A soft sigh escaped her throat. "That's not what I meant." She gave him a steady look. "What's the next step to getting my mom back?"</p>`); r.push(`<p>Scott considered her for a moment before responding. "For now, you'll continue your drug regimen and etiquette lessons." He gave her breasts a poke. "Your milk hasn't come in so we can't start that training or begin selling your milk, but there are things you can do." He drummed out a little beat on her breasts. "Now that you're big enough to not get stopped when you walk down the street, you could start working here." An impish grin spread over his face. "I'm sure Martha would enjoy having you around." Cathy flushed and let out a small huff. His grin widened.</p>`); - r.push(`<p>He groped her slowly as he thought. "As for getting your mom, considering who your mother was, her price is bound to be exorbitant. Even if I got a sweetheart rate." He brushed a lock of her hair behind her ear. "But we're inno rush. Her current owner is treating her rather well and seems fond of her, so he probably won't randomly sell her off." A mild frown spread across his face. "The downside of that is it will take even more money or favors to get him to part with her, but we'll cross that bridge when we get to it."</p>`); + r.push(`<p>He groped her slowly as he thought. "As for getting your mom, considering who your mother was, her price is bound to be exorbitant. Even if I got a sweetheart rate." He brushed a lock of her hair behind her ear. "But we're in no rush. Her current owner is treating her rather well and seems fond of her, so he probably won't randomly sell her off." A mild frown spread across his face. "The downside of that is it will take even more money or favors to get him to part with her, but we'll cross that bridge when we get to it."</p>`); r.push(`<p>As he spoke, Cathy's expression became more and more disheartened. Scott smiled reassuringly, "Don't worry about it. I have a plan to make you so profitable you could buy your mom a dozen times over." She nodded, but didn't look entirely reassured. "You've already made a fair bit of progress today" he said, his smile bright. "What do you mean?" her face had the expression of a wary kitten expecting the roar of vacuum cleaner. "You didn't freak out when I touched your breasts." He gave them a squeeze for emphasis. She looked conflicted and seemed on the verge of saying something, but decided against it. "Anyway, we should find June and head on out." He patted her butt, saying "Come along" and set out to find June with Cathy in tow.</p>`); r.push(`<p>It didn't take too long to find her. After passing a display of plushie cowslaves playing in a pool, they walked into an aisle devoted to greeting cards and other printed media. The various cards bore animated scenes catering to various situations. One card depicted a busty woman losing power to her exosuit, being pulled to the ground by her own breasts and a small group comes by to help her up. The words flowing across the card said 'We know you've fallen on hard times, but we'll always be there to support you' in a wavy font. The other side of the aisle bore a number of coloring books plastered with pictures of famous cows, magazines devoted to various tastes, and paperback erotica, some written by store employees. And hunched over by the magazines was June.</p>`); r.push(`<p>She was engrossed in reading an issue of Cow's Life. The cover had a looping video of a blonde cow spraying milk and making bedroom eyes at the viewer. The headline of the issue was an interview with Alexis Cream, the first cow in space. In smaller text were headlines like 'Five nipple stimulation methods guaranteed to increase lactation!', 'Finding the right cleavage vibrator for you', 'The new frontier of breast sex'. June seemed to have ignored the magazine's other offerings in favor of a review of a new model of mobile milker that promised to provide endless breastgasms.</p>`); diff --git a/src/pregmod/theBlackMarket.tw b/src/pregmod/theBlackMarket.tw index 19d24e97cc8d0150e12df67a2cd6134916783c29..655741be2a54c2e23ae45dda79986aa21977838a 100644 --- a/src/pregmod/theBlackMarket.tw +++ b/src/pregmod/theBlackMarket.tw @@ -287,7 +287,7 @@ He gestures to a door in the back of the stall. "The good shit's back there<<if <<elseif $cash < 120000>> You cannot afford the asking price of @@.red;<<print cashFormat(120000)>>@@ for documentation on an incubator pregnancy adaptation module. <</if>> - <br>"I'm not sure about this... but you still might be interested. Let me just begin with a story... Some time ago, there was a man with very pregnant girl in tow. Not so unusual in these days, but what made it really stand out was the girl's age — she couldn't have been any older then six! And looked ready to birth full sized triplets, no less. To top it all off, she did not look stressed by it at all, which was just amazing, given her size. The man said that he invented some sort of subsystem for those modern incubators to prep the occupant's body in a special way, and that this girl was a test subject. I do not understand much about this technical stuff, but the documentation seems legit enough. If you like, I can sell it to you; no guarantees though, on either the construction or the results." + <br>"I'm not sure about this one, but you might still be interested. Let me just begin with a story... some time ago, there was a man with a very pregnant girl in tow. Not so unusual in these days, but what made it really stand out was the girl's age — she couldn't have been any older then six! And looked ready to birth full sized triplets, no less. To top it all off, she did not look stressed by it at all, which was just amazing, given her size. The man said that he invented some sort of subsystem for those modern incubators to prep the occupant's body in a special way, and that this girl was a test subject. I do not understand much about this technical stuff, but the documentation seems legit enough. If you like, I can sell it to you; no guarantees though, on either the construction or the results." <<if $arcologies[0].FSRepopulationFocus >= 60>> <p style="text-indent:2em"> As a repopulationist society, you already have similar documentation in your possession. Buying this would be a waste of money. </p> <<elseif $incubatorUpgradeReproduction < 1 || $incubatorUpgradeOrgans < 1 || $dispensaryUpgrade < 1 || $bellyImplants < 1 || $incubatorUpgradeGrowthStims < 1>> diff --git a/src/uncategorized/officeDescription.tw b/src/uncategorized/officeDescription.tw index 9b51aa2cc4b5cfe1df082830436ec1e5c6e5b538..3c08f3cb5c5d57f464f61ce65b634a06535e71f8 100644 --- a/src/uncategorized/officeDescription.tw +++ b/src/uncategorized/officeDescription.tw @@ -188,7 +188,7 @@ <</switch>> <</if>> <</if>> -<<= printTrinkets()>> +<br> <<= printTrinkets()>> A small mirror resides on your desk, facing you. A $PC.visualAge year old, $PC.faceShape<<if $PC.markings == "freckles">>, freckled<<elseif $PC.markings == "heavily freckled">>, densely freckled<</if>> face stares back at you. diff --git a/src/uncategorized/sellSlave.tw b/src/uncategorized/sellSlave.tw index 583e2fa2da81350ca92fc11dc8f11247c7e9fedb..7815c4bff9489255ed98cc53fbf9519a6d348b86 100644 --- a/src/uncategorized/sellSlave.tw +++ b/src/uncategorized/sellSlave.tw @@ -373,7 +373,7 @@ A reputable slave appraiser arrives promptly to inspect $him and certify $his qu <<elseif _careers.length > 1>> _careers[1] and <<print _careers[0]>>. <<else>> - <<print _careers[0]>>. Providing $him the same additional value if $he had a relevant career. + <<print _careers[0]>>, providing $him the same additional value if $he had a relevant career. <</if>> <</if>>