diff --git a/src/Mods/Catmod/events/SoSassassin.js b/src/Mods/Catmod/events/SoSassassin.js index aefeb4e6dee45039c614d728827c14c4b997854b..fb4638ff8b3061d98d43f999f4602acae08c3630 100644 --- a/src/Mods/Catmod/events/SoSassassin.js +++ b/src/Mods/Catmod/events/SoSassassin.js @@ -70,7 +70,7 @@ App.Events.RESosAssassin = class RESosAssassin extends App.Events.BaseEvent { slave.custom.tattoo = "$He has the orange sun of the Sons of Sekhmet tattooed on $his neck, marking $him as a high-ranking operative."; newSlave(slave); } else if (S.Bodyguard.skill.combat > 0 && V.personalArms < 1) { - r.push(`The two trained killers clash ferociously, ${S.Bodyguard.slaveName} using the longer reach of ${his} sword to keep the mysterious assassin's lightning-fast long knife at bay. For what feels like a full minute they dodge each other's lethal blows, both unable to land a hit on the other, until you see the security drones you called for finally start to arrive. Sensing that her time window is closing, the assassin tries to step back, only for her retreat to be cut off as ${S.Bodyguard.slaveName} ferociously leaps forward and plunges ${his} sword directly through the assassin's neck. ${He} nearly decapitates the pretty head as ${he} pulls ${his} sword back, the marketplace watching the <span class="red">minorly damaged</span> scene with a mixture of <span class="green">shock and admiration</span>.`); + r.push(`The two trained killers clash ferociously, ${S.Bodyguard.slaveName} using the longer reach of ${his} sword to keep the mysterious assassin's lightning-fast long knife at bay. For what feels like a full minute they dodge each other's lethal blows, both unable to land a hit on the other, until you see the security drones you called for finally start to arrive. Sensing that her time window is closing, the assassin tries to step back, only for her retreat to be cut off as ${S.Bodyguard.slaveName} ferociously leaps forward and plunges ${his} sword directly through the assassin's neck. ${He} nearly decapitates the pretty head as ${he} pulls ${his} sword back, the marketplace watching the <span class="red">minorly damaged</span> scene with a mixture of <span class="green">shock and admiration.</span>`); cashX(-1000, "event", S.Bodyguard); repX(2500, "event", S.Bodyguard); } else if (S.Bodyguard.skill.combat < 1 && V.personalArms > 0) { @@ -133,7 +133,7 @@ App.Events.RESosAssassin = class RESosAssassin extends App.Events.BaseEvent { slave.custom.tattoo = "$He has the orange sun of the Sons of Sekhmet tattooed on $his neck, marking $him as a high-ranking operative."; newSlave(slave); } else if (S.Bodyguard.skill.combat > 0) { - r.push(`The two trained killers clash ferociously, ${S.Bodyguard.slaveName} using the longer reach of ${his} sword to keep the mysterious assassin's lightning-fast long knife at bay. For what feels like a full minute they dodge each other's lethal blows, both unable to land a hit on the other, until you see the security drones you called for finally start to arrive. Sensing that her time window is closing, the assassin tries to step back, only for her retreat to be cut off as ${S.Bodyguard.slaveName} ferociously leaps forward and plunges ${his} sword directly through the assassin's neck. ${He} nearly decapitates the pretty head as ${he} pulls ${his} sword back, the marketplace watching the <span class="red">minorly damaged</span> scene with a mixture of <span class="green">shock and admiration</span>.`); + r.push(`The two trained killers clash ferociously, ${S.Bodyguard.slaveName} using the longer reach of ${his} sword to keep the mysterious assassin's lightning-fast long knife at bay. For what feels like a full minute they dodge each other's lethal blows, both unable to land a hit on the other, until you see the security drones you called for finally start to arrive. Sensing that her time window is closing, the assassin tries to step back, only for her retreat to be cut off as ${S.Bodyguard.slaveName} ferociously leaps forward and plunges ${his} sword directly through the assassin's neck. ${He} nearly decapitates the pretty head as ${he} pulls ${his} sword back, the marketplace watching the <span class="red">minorly damaged</span> scene with a mixture of <span class="green">shock and admiration.</span>`); cashX(-1000, "event", S.Bodyguard); repX(2500, "event", S.Bodyguard); } else if (V.personalArms > 0 && V.PC.skill.warfare >= 60) { @@ -159,7 +159,7 @@ App.Events.RESosAssassin = class RESosAssassin extends App.Events.BaseEvent { if (S.Bodyguard) { r.push(`She's intercepted by ${S.Bodyguard.slaveName}, who drops ${his} empty firearm on the ground to pull ${his} own sword free.`); if (S.Bodyguard.skill.combat > 0) { - r.push(`The two trained killers clash ferociously, ${S.Bodyguard.slaveName} using the longer reach of ${his} sword to keep the mysterious assassin's lightning-fast long knife at bay. For what feels like a full minute they dodge each other's lethal blows, both unable to land a hit on the other, until you see the security drones you called for finally start to arrive. Sensing that her time window is closing, the assassin tries to step back, only for her retreat to be cut off as ${S.Bodyguard.slaveName} ferociously leaps forward and plunges ${his} sword directly through the assassin's neck. ${He} nearly decapitates the pretty head as ${he} pulls ${his} sword back, the marketplace watching the <span class="red">minorly damaged</span> scene with a mixture of <span class="green">shock and admiration</span>.`); + r.push(`The two trained killers clash ferociously, ${S.Bodyguard.slaveName} using the longer reach of ${his} sword to keep the mysterious assassin's lightning-fast long knife at bay. For what feels like a full minute they dodge each other's lethal blows, both unable to land a hit on the other, until you see the security drones you called for finally start to arrive. Sensing that her time window is closing, the assassin tries to step back, only for her retreat to be cut off as ${S.Bodyguard.slaveName} ferociously leaps forward and plunges ${his} sword directly through the assassin's neck. ${He} nearly decapitates the pretty head as ${he} pulls ${his} sword back, the marketplace watching the <span class="red">minorly damaged</span> scene with a mixture of <span class="green">shock and admiration.</span>`); cashX(-1000, "event", S.Bodyguard); repX(2500, "event", S.Bodyguard); } else if (V.personalArms > 0 && V.PC.skill.warfare >= 60) { diff --git a/src/descriptions/arcologyDescription.js b/src/descriptions/arcologyDescription.js index 2a66253a88a9aa50b855fff4d0eddcb845e2b461..08e85880ca56049ab7ae9bae243365220884e644 100644 --- a/src/descriptions/arcologyDescription.js +++ b/src/descriptions/arcologyDescription.js @@ -213,14 +213,15 @@ App.Desc.playerArcology = function(lastElement) { if (V.PC.vagina >= 0) { buffer.push(`futanari figure's balls are oversized and ${hisP} stomach slightly rounded,`); } else if (V.PC.boobs >= 300) { - buffer.push(`shemale figure's balls are swollen with virile seed,`); + buffer.push(`shemale figure's balls are swollen with seed,`); } else { - buffer.push(`male figure's balls are swollen with virile seed,`); + buffer.push(`male figure's balls are swollen with seed,`); } + buffer.push(`announcing its virility,`); } else { - buffer.push(`female figure's stomach is slightly rounded,`); + buffer.push(`female figure's stomach is slightly rounded, announcing its fertility`); } - buffer.push(`announcing its fertility, while the slaves wear chastity devices.`); + buffer.push(`while the slaves wear chastity devices.`); } if (A.FSPastoralistDecoration === 100) { buffer.push(`The statuary is located in the middle of a fountain; the slaves' nipples pour water into the pool beneath.`); diff --git a/src/endWeek/economics/arcmgmt.js b/src/endWeek/economics/arcmgmt.js index 5e60b6164f98b0d9e38c0f9a6c2468b83ccf03ab..f7f4ad5ba1d720fb7ef14db7874bfa8c752a35b6 100644 --- a/src/endWeek/economics/arcmgmt.js +++ b/src/endWeek/economics/arcmgmt.js @@ -23,7 +23,7 @@ App.EndWeek.arcManagement = function() { } else if (V.arcadeDemandDegResult === 3) { appendDiv(`Your citizens were expecting to see more slaves available as sexual objects, but there aren't enough complaints to damage your societal development at this time.`); } else if (V.arcadeDemandDegResult === 4) { - appendDiv(`Your citizens find themselves surrounded by slaves ready to be degraded and used as sexual objects, this <span class="green">helps to establish your degradationist society</span>.`); + appendDiv(`Your citizens find themselves surrounded by slaves ready to be degraded and used as sexual objects, this <span class="green">helps to establish your degradationist society.</span>`); } else if (V.arcadeDemandDegResult === 5) { appendDiv(`You are providing your citizens with an adequate amount of slaves to be used as sexual objects, as is expected in your degradationist society.`); } diff --git a/src/endWeek/economics/marketsReport.js b/src/endWeek/economics/marketsReport.js index be035ec43284f1fa7653ce3726d40df9400fee92..0528c70da83899b563bb7e4656e1318a2699a366 100644 --- a/src/endWeek/economics/marketsReport.js +++ b/src/endWeek/economics/marketsReport.js @@ -15,13 +15,13 @@ App.EndWeek.marketsReport = function() { if (random(1, 100) > 50) { desc = `...rising energy costs drove <span class="yellowgreen">rising prices</span> of several market baskets...`; } else { - desc = `...conflict-driven increases in transportation costs increase <span class="yellowgreen">price indices</span>...`; + desc = `...conflict-driven increases in transportation costs increase <span class="yellowgreen">price indices...</span>`; } } else { if (random(1, 100) > 50) { - desc = `...increasing Free Cities slave labor effects <span class="gold">general prices</span>...`; + desc = `...increasing Free Cities slave labor effects <span class="gold">general prices...</span>`; } else { - desc = `...Antarctic oil shale pushing down energy prices, driving down major <span class="gold">price indices</span>...`; + desc = `...Antarctic oil shale pushing down energy prices, driving down major <span class="gold">price indices...</span>`; } } break; @@ -31,11 +31,11 @@ App.EndWeek.marketsReport = function() { if (random(1, 100) > 50) { desc = `...heavy demand for fashionable varieties drove <span class="yellowgreen">rising slave prices</span> last...`; } else { - desc = `...study suggested the sexual revolution would continue to drive up <span class="yellowgreen">slave prices</span>...`; + desc = `...study suggested the sexual revolution would continue to drive up <span class="yellowgreen">slave prices...</span>`; } } else { if (random(1, 100) > 50) { - desc = `...increased supply due to bush wars drove down <span class="gold">slave prices</span>...`; + desc = `...increased supply due to bush wars drove down <span class="gold">slave prices...</span>`; } else { desc = `...<span class="gold">slave prices</span> continue to fall due to major improvements in training...`; } @@ -69,7 +69,7 @@ App.EndWeek.marketsReport = function() { if (random(1, 100) > 50) { desc = `...rumored peace treaty <span class="gold">pushed down</span> mercenary contract clearing rate...`; } else { - desc = `...demobilization of the cash-strapped army expected to produce mercenary <span class="gold">glut</span>...`; + desc = `...demobilization of the cash-strapped army expected to produce mercenary <span class="gold">glut...</span>`; } } break; @@ -109,7 +109,7 @@ App.EndWeek.marketsReport = function() { case "drugs": { if (assetsUp) { if (random(1, 100) > 50) { - desc = `...intense demand for curatives in conflict zones <span class="yellowgreen">increasing prices</span>...`; + desc = `...intense demand for curatives in conflict zones <span class="yellowgreen">increasing prices...</span>`; } else { desc = `...setbacks in growth hormone human testing expected to <span class="yellowgreen">increase prices</span> of traditional formula...`; } diff --git a/src/events/PE/UnderageConcubine.js b/src/events/PE/UnderageConcubine.js index 3a02e784257cb8988bdb8e3899e4f0c8c162ea98..d961c38950f6eccb7b0b1c8ce8ffe08626ce4220 100644 --- a/src/events/PE/UnderageConcubine.js +++ b/src/events/PE/UnderageConcubine.js @@ -182,7 +182,7 @@ App.Events.PEUnderageConcubine = class PEUnderageConcubine extends App.Events.Ba case -2: { // bonded t.push(`${concubine.slaveName} rests ${his} head on your shoulder gently.`); t.push(Spoken(concubine, `"I love my ${Master} so much!"`)); - t.push(`${he} ${say}s <span class="trust inc">proudly</span>.`); + t.push(`${he} ${say}s <span class="trust inc">proudly.</span>`); interviewPoints++; concubine.trust += 2; break; diff --git a/src/events/RE/reDevotedTwins.js b/src/events/RE/reDevotedTwins.js index 71c93831abb2d8c8b41848fa9f6480c195030ce5..e98520a24ff61726e7b9744686bad9b6d2cf00b1 100644 --- a/src/events/RE/reDevotedTwins.js +++ b/src/events/RE/reDevotedTwins.js @@ -34,7 +34,12 @@ App.Events.REDevotedTwins = class REDevotedTwins extends App.Events.BaseEvent { let t = []; - t.push(`${alphaTwin.slaveName} and ${betaTwin.slaveName} are such good and devoted slaves that they happily do everything together. They sleep ${hasBothArms(alphaTwin) && hasBothArms(betaTwin) ? "in each other's arms" : 'together'}, bathe together, work together whenever they can, and fuck together. For a while they masturbated together until they became so habituated to sexual slavery that they stopped seeing much distinction between masturbation and sex with one another. At the moment, they're getting ready for their day, chatting quietly and helping each other.`); + t.push( + App.UI.DOM.slaveDescriptionDialog(alphaTwin), + `and`, + App.UI.DOM.slaveDescriptionDialog(betaTwin), + `are such good and devoted slaves that they happily do everything together. They sleep ${hasBothArms(alphaTwin) && hasBothArms(betaTwin) ? "in each other's arms" : 'together'}, bathe together, work together whenever they can, and fuck together. For a while they masturbated together until they became so habituated to sexual slavery that they stopped seeing much distinction between masturbation and sex with one another. At the moment, they're getting ready for their day, chatting quietly and helping each other.`, + ); App.Events.addParagraph(node, t); diff --git a/src/events/RE/reHGReplacement.js b/src/events/RE/reHGReplacement.js index 165546496da99b8d83c67167bdb1843f478208bc..8b34b3f58a98e2f54825996459d77f322b42c161 100644 --- a/src/events/RE/reHGReplacement.js +++ b/src/events/RE/reHGReplacement.js @@ -46,7 +46,11 @@ App.Events.REHGReplacement = class REHGReplacement extends App.Events.BaseEvent } = getPronouns(S.HeadGirl).appendSuffix("2"); const {say:say2} = getEnunciation(S.HeadGirl); - r.push(`There's a constant traffic of slaves in and out of your office as your chattel comes in and out for instructions, inspections, and sex. Your Head Girl ${S.HeadGirl.slaveName} is one of the most frequent visitors, since although you trust ${him2}, ${he2}'s still a slave and has to check with you before acting on some matters.`); + r.push( + `There's a constant traffic of slaves in and out of your office as your chattel comes in and out for instructions, inspections, and sex. Your Head Girl`, + App.UI.DOM.slaveDescriptionDialog(S.HeadGirl), + `is one of the most frequent visitors, since although you trust ${him2}, ${he2}'s still a slave and has to check with you before acting on some matters.`, + ); if (S.HeadGirl.relationship === -3) { r.push(`(${He2}'s also your ${wife2}, making ${his2} visits a pleasant diversion.)`); } else if (V.arcologies[0].FSEgyptianRevivalistLaw === 1) { diff --git a/src/events/REFI/reMasochist.js b/src/events/REFI/reMasochist.js index 96c0b64e482558d47cf026bd9431ebd5eb74427b..065ab1cd8396e8647ad5109c796e69af19bc12bc 100644 --- a/src/events/REFI/reMasochist.js +++ b/src/events/REFI/reMasochist.js @@ -283,9 +283,9 @@ App.Events.REFIMasochist = class REFIMasochist extends App.Events.BaseEvent { if (eventSlave.anus === 0) { t.push(`${He} hasn't recovered before ${he} feels the still more urgent pain of`); if (V.PC.dick !== 0) { - t.push(`your dick brutally <span class="lime">taking ${his} anal virginity</span>,`); + t.push(`your dick brutally <span class="lime">taking ${his} anal virginity,</span>`); } else { - t.push(`an enormous dildo <span class="lime">stealing ${his} anal virginity</span>,`); + t.push(`an enormous dildo <span class="lime">stealing ${his} anal virginity,</span>`); } t.push(`followed by rough anal,`); eventSlave.anus = 1; @@ -297,9 +297,9 @@ App.Events.REFIMasochist = class REFIMasochist extends App.Events.BaseEvent { if (eventSlave.vagina === 0) { t.push(`${He} hasn't recovered before ${he} feels the still more urgent pain of`); if (V.PC.dick !== 0) { - t.push(`your dick brutally <span class="lime">stripping ${him} of ${his} virginity</span>,`); + t.push(`your dick brutally <span class="lime">stripping ${him} of ${his} virginity,</span>`); } else { - t.push(`an enormous dildo <span class="lime">stealing ${his} virginity</span>,`); + t.push(`an enormous dildo <span class="lime">stealing ${his} virginity,</span>`); } t.push(`followed by rough sex,`); eventSlave.vagina = 1; diff --git a/src/events/REFS/refsBaronDemand.js b/src/events/REFS/refsBaronDemand.js index b9380066294d19821b4eb0d8a9bc8a2942b9666e..572313e8be923a27e73ab724bdb1749d3092c575 100644 --- a/src/events/REFS/refsBaronDemand.js +++ b/src/events/REFS/refsBaronDemand.js @@ -27,7 +27,7 @@ App.Events.refsBaronDemand = class refsBaronDemand extends App.Events.BaseEvent function accept() { repX(2000, "event"); cashX(-costYes, "Baron demands"); - return `You gracefully accept the demands of your Barons, granting them a number of minor new rights and increasing their luxurious Imperial stipends further. Predictably, the Barons are <span class="reputation inc">overjoyed</span> at your flat acceptance, and shower you with praise and compliments for a few days before returning to the management of their now wealthier districts, enriched at the <span class="cash dec">expense of your treasury</span>.`; + return `You gracefully accept the demands of your Barons, granting them a number of minor new rights and increasing their luxurious Imperial stipends further. Predictably, the Barons are <span class="reputation inc">overjoyed</span> at your flat acceptance, and shower you with praise and compliments for a few days before returning to the management of their now wealthier districts, enriched at the <span class="cash dec">expense of your treasury.</span>`; } function refuse() { diff --git a/src/events/REFS/refsDeadBaron.js b/src/events/REFS/refsDeadBaron.js index 04628e88436f7f69ce54d2bdd244ecc3aee418cb..84d4ca0dc77587866a22788d6b8937bcb4e5c1e7 100644 --- a/src/events/REFS/refsDeadBaron.js +++ b/src/events/REFS/refsDeadBaron.js @@ -8,7 +8,7 @@ App.Events.refsDeadBaron = class refsDeadBaron extends App.Events.BaseEvent { } execute(node) { - App.Events.addParagraph(node, [`Although the lives of the uber-wealthy last for so long with the heights of modern medicine that some whisper that you are immortal, no one lives forever. Recently, one of your Imperial Barons has passed away, supposedly from natural causes, although it's always possible that the shadowy and underhanded elites a step lower in the hierarchy might have hastened their passing - if that's the case, your Knights will learn of the culprits soon enough. Regardless of the reason, you now have an opening in your noble hierarchy, and as always, there is no shortage of hungry, ambitious elites looking to fill the slot.`]); + App.Events.addParagraph(node, [`Although the lives of the uber-wealthy last for so long with the heights of modern medicine that some whisper that you are immortal, no one lives forever. Recently, one of your Imperial Barons has passed away, supposedly from natural causes, although it's always possible that the shadowy and underhanded elites a step lower in the hierarchy might have hastened their passing – if that's the case, your Knights will learn of the culprits soon enough. Regardless of the reason, you now have an opening in your noble hierarchy, and as always, there is no shortage of hungry, ambitious elites looking to fill the slot.`]); App.Events.addParagraph(node, [`Typically, the position is hereditary; the adult children of a Baron, those had legitimately and not with slaves, expect to inherit the title in an order of seniority. However, this is only precedent, and not the actual legal code; the laws, as you've written them, allow you to assign the title to whoever you please upon the death of the former Baron. You could, undoubtedly, choose to award it to someone else instead of the Baron's children... although doing so would, no doubt, infuriate the influential Baronets, who expect their family to continue to hold its prestigious position.`]); @@ -36,7 +36,7 @@ App.Events.refsDeadBaron = class refsDeadBaron extends App.Events.BaseEvent { V.arcologies[0].prosperity += 3; cashX(-2000, "Costs of Administrative Change"); repX(-2000, "event"); - return `You select an unimportant but accomplished bureaucrat within the lower ranks of your administration, one of the cornerstone accountants that keeps the trains running on time. The rail-thin woman is clearly surprised that you'd choose her over a wealthier, more influential elite, but nevertheless accepts the golden band with overflowing joy. The furious baronets, robbed of their title, do their best to obstruct the ceremony, and the decision to take the title from their family causes <span class="reputation dec">fear and concern</span> amongst Barons now insecure of their family's future. Although she may not turn any eyebrows, you can tell without a fact that she'll <span class="prosperity inc">keep your arcology efficient and prosperous</span> - after all, if it collapses, then her 'guaranteed' barony vanishes too.`; + return `You select an unimportant but accomplished bureaucrat within the lower ranks of your administration, one of the cornerstone accountants that keeps the trains running on time. The rail-thin woman is clearly surprised that you'd choose her over a wealthier, more influential elite, but nevertheless accepts the golden band with overflowing joy. The furious baronets, robbed of their title, do their best to obstruct the ceremony, and the decision to take the title from their family causes <span class="reputation dec">fear and concern</span> amongst Barons now insecure of their family's future. Although she may not turn any eyebrows, you can tell without a fact that she'll <span class="prosperity inc">keep your arcology efficient and prosperous</span> – after all, if it collapses, then her 'guaranteed' barony vanishes too.`; } function knight() { @@ -44,7 +44,7 @@ App.Events.refsDeadBaron = class refsDeadBaron extends App.Events.BaseEvent { V.arcologies[0].prosperity++; cashX(-2000, "Costs of Administrative Change"); repX(-2000, "event"); - return `You select one of your Imperial Knights, a heavily scarred and muscular man who bears his rose-and-hawk coat of arms like a purple heart on his broad chest. The grizzled soldier is somewhat taken aback at your decision, but regains his composure almost immediately and accepts the golden band of a Baron with a scarred-over smirk. The furious baronets, robbed of their title, do their best to obstruct the ceremony, and the decision to take the title from their family causes <span class="reputation dec">fear and concern</span> amongst Barons now insecure of their family's future. The ex-Knight takes to his new duty with surprising gusto, and quickly proves himself an <span class="reputation inc">extraordinarily popular figure</span> among the commoners, who see the scarred and athletic figure both as proof that duty is rewarded in your arcology and as an example of what a proper Imperial noble should be - martial, confident, and nearly unbeatable in a duel.`; + return `You select one of your Imperial Knights, a heavily scarred and muscular man who bears his rose-and-hawk coat of arms like a purple heart on his broad chest. The grizzled soldier is somewhat taken aback at your decision, but regains his composure almost immediately and accepts the golden band of a Baron with a scarred-over smirk. The furious baronets, robbed of their title, do their best to obstruct the ceremony, and the decision to take the title from their family causes <span class="reputation dec">fear and concern</span> amongst Barons now insecure of their family's future. The ex-Knight takes to his new duty with surprising gusto, and quickly proves himself an <span class="reputation inc">extraordinarily popular figure</span> among the commoners, who see the scarred and athletic figure both as proof that duty is rewarded in your arcology and as an example of what a proper Imperial noble should be – martial, confident, and nearly unbeatable in a duel.`; } } }; diff --git a/src/events/REFS/refsKnightlyDuel.js b/src/events/REFS/refsKnightlyDuel.js index 499719ebc722f67c239bb1a7470e49ee4abb5f80..a1e8d64f1b574817da8d52174a27e04a40c49e5b 100644 --- a/src/events/REFS/refsKnightlyDuel.js +++ b/src/events/REFS/refsKnightlyDuel.js @@ -31,19 +31,19 @@ App.Events.refsKnightlyDuel = class refsKnightlyDuel extends App.Events.BaseEven App.Events.drawEventArt(node, [slave, slave]); // Draw the same slave twice since there are two knights (and neither is enslaveable) - App.Events.addParagraph(node, [`After the rise of ${V.arcologies[0].name}'s new Imperial society, Knights have become a cornerstone of the new social order. Proud, noble, and chivalrous, they're seen as heroic, even legendary figures to the general public, and play an essential role in securing your arcology against violent threats with their larger-than-life personalities. However, the proud and individual nature of your Knights occasionally causes problems.`]); + App.Events.addParagraph(node, [`After the rise of ${V.arcologies[0].name}'s new Imperial society, Knights have become a cornerstone of the new social order. Proud, noble, and chivalrous, they're seen as heroic, even legendary figures to the general public, and play an essential role in securing your arcology against violent threats with their larger-than-life personalities. However, the proud and individualistic nature of your Knights occasionally causes problems.`]); App.Events.addParagraph(node, [`Most recently, two of your Knights have begun to feud with one another. After some slight neither can remember, they've been publicly exchanging insults for the last few weeks, and more recently their associated guardsmen have gotten into a few street fights against one another. Tired of the gang-like behavior, both Knights have come to you and asked for your permission for a formal duel to the death to settle their differences, once and for all.`]); App.Events.addResponses(node, [ - new App.Events.Result(`Allow the Duel`, allow), + new App.Events.Result(`Allow the duel`, allow), new App.Events.Result(`Televise the duel and have it sold as pay-per-view live entertainment`, televise), new App.Events.Result(`Punish both and force them to make up`, nowKiss), ]); function allow() { repX(-1000, "event"); - return `You simply wave your hand to allow the duel and continue on with your day. The Knights exchange a hateful look between one another and leave, their hands already tightly grasping the holographic longswords at their hips. A few hours later, you receive a notification that one of them has killed the other - a decisive end to their feud. The rumours of romanticized Knights tearing at one another like savages <span class="reputation dec">horrifies</span> some of your citizens, though.`; + return `You simply wave your hand to allow the duel and continue on with your day. The Knights exchange a hateful look between one another and leave, their hands already tightly grasping the holographic longswords at their hips. A few hours later, you receive a notification that one of them has killed the other – a decisive end to their feud. The rumours of romanticized Knights tearing at one another like savages <span class="reputation dec">horrifies</span> some of your citizens, though.`; } function televise() { diff --git a/src/events/RESS/injectionsPlease.js b/src/events/RESS/injectionsPlease.js index fa40b83266aa9919a8fe8c4f5c159e64966ba883..6a51805d262516031b53ead1078ea811b44b5462 100644 --- a/src/events/RESS/injectionsPlease.js +++ b/src/events/RESS/injectionsPlease.js @@ -36,7 +36,7 @@ App.Events.RESSInjectionsPlease = class RESSInjectionsPlease extends App.Events. `Since ${he}'s allowed to ask questions, ${he} comes right out with it.`, Spoken(eventSlave, `"${Master}, I'm feeling healthy, and I've been a good ${girl} this week. With everyone getting so many powerful drugs —"`), `${he} takes a breath before asking in a rush`, - Spoken(eventSlave, `"- may I have a dose of ${drug.text}"`) + Spoken(eventSlave, `"– may I have a dose of ${drug.text}"`) ]); App.Events.addResponses(node, [ diff --git a/src/events/RESS/milkgasm.js b/src/events/RESS/milkgasm.js index 9e26241ef4e361d463e51372b9db230de3eaa7e5..88ad47bd72e15355bf64518fc573b6ec42f4162d 100644 --- a/src/events/RESS/milkgasm.js +++ b/src/events/RESS/milkgasm.js @@ -299,7 +299,7 @@ App.Events.RESSMilkgasm = class RESSMilkgasm extends App.Events.BaseEvent { r.push(`the pain in ${his} backdoor as you continue to abuse`); if (eventSlave.anus === 0) { eventSlave.anus++; - r.push(`it, and that ${he} is <span class="virginity loss">no longer an anal virgin</span>.`); + r.push(`it, and that ${he} is <span class="virginity loss">no longer an anal virgin.</span>`); } else { r.push(`it.`); } @@ -312,7 +312,7 @@ App.Events.RESSMilkgasm = class RESSMilkgasm extends App.Events.BaseEvent { r.push(`the pain in ${his} cunt as you continue to abuse`); if (eventSlave.vagina === 0) { eventSlave.vagina++; - r.push(`it, and that ${he} is <span class="virginity loss">no longer a virgin</span>.`); + r.push(`it, and that ${he} is <span class="virginity loss">no longer a virgin.</span>`); } else { r.push(`it.`); } diff --git a/src/events/RESS/nightVisit.js b/src/events/RESS/nightVisit.js index 09b655be600606266bb2f7604045fb27931c92cc..08e402ce053ce14759a50dda2b7e82513fb5be9f 100644 --- a/src/events/RESS/nightVisit.js +++ b/src/events/RESS/nightVisit.js @@ -58,7 +58,7 @@ App.Events.RESSNightVisit = class RESSNightVisit extends App.Events.BaseEvent { } else { r.push(`${he} says meekly,`); } - r.push(Spoken(eventSlave, `"${Master}, would you please fuck me?"`)); + r.push(Spoken(eventSlave, `"${capFirstChar(Master)}, would you please fuck me?"`)); } App.Events.addParagraph(node, r); diff --git a/src/events/RESS/review/ageImplant.js b/src/events/RESS/review/ageImplant.js index ee050ea3f569349d27716f69a0b82f1745eaa3f0..e7d87893f26b63960c909689df9cc1d4e2f8d467 100644 --- a/src/events/RESS/review/ageImplant.js +++ b/src/events/RESS/review/ageImplant.js @@ -308,10 +308,10 @@ App.Events.RESSAgeImplant = class RESSAgeImplant extends App.Events.BaseEvent { if (canDoAnal(eventSlave) || canDoVaginal(eventSlave)) { r.push(`turns around to rub ${his} bare butt against the crotch of the man's pants. He pulls them down and fucks ${him} right there`); if (canDoVaginal(eventSlave) && eventSlave.vagina === 0) { - r.push(`<span class="virginity loss">taking ${his} virginity</span>,`); + r.push(`<span class="virginity loss">taking ${his} virginity,</span>`); didVaginal = true; } else if (canDoAnal(eventSlave) && eventSlave.anus === 0) { - r.push(`<span class="virginity loss">taking ${his} anal virginity</span>,`); + r.push(`<span class="virginity loss">taking ${his} anal virginity,</span>`); didAnal = true; } r.push(`as the woman`); diff --git a/src/events/RESS/review/newlyDevotedSunrise.js b/src/events/RESS/review/newlyDevotedSunrise.js index 5c161f3efa0cd347dd928c6aa45ed2c3c200e78a..3db2143408e7ec270a68b5ace52bc98f1778c7ac 100644 --- a/src/events/RESS/review/newlyDevotedSunrise.js +++ b/src/events/RESS/review/newlyDevotedSunrise.js @@ -195,7 +195,7 @@ App.Events.RESSNewlyDevotedSunrise = class RESSNewlyDevotedSunrise extends App.E if (V.PC.dick === 0) { r.push(`pull on your trusty vibrating strap-on and`); } - r.push(`enter ${his} butt, but ${he} keeps ${his} gaze on the fiery horizon. ${He} extricated ${his} hands from yours to stabilize ${himself} against the railing, leaving you free to gently massage ${his} breasts in time with your slow thrusts. ${He} does not climax, but after you do ${he} turns halfway within your arms and kisses you impulsively. ${He} leaves the balcony with a <span class="devotion inc">small smile</span> on ${his} face.`); + r.push(`enter ${his} butt, but ${he} keeps ${his} gaze on the fiery horizon. ${He} extricates ${his} hands from yours to stabilize ${himself} against the railing, leaving you free to gently massage ${his} breasts in time with your slow thrusts. ${He} does not climax, but after you do ${he} turns halfway within your arms and kisses you impulsively. ${He} leaves the balcony with a <span class="devotion inc">small smile</span> on ${his} face.`); r.push(VCheck.Anal(slave, 1)); slave.devotion += 4; return r; @@ -212,7 +212,7 @@ App.Events.RESSNewlyDevotedSunrise = class RESSNewlyDevotedSunrise extends App.E if (V.PC.dick === 0) { r.push(`pull on your trusty vibrating strap-on and`); } - r.push(`enter ${his} depths, but ${he} keeps ${his} gaze on the fiery horizon. ${He} extricated ${his} hands from yours to stabilize ${himself} against the railing, leaving you free to gently massage ${his} breasts in time with your slow thrusts. ${He} does not climax, but after you do ${he} turns halfway within your arms and kisses you impulsively. ${He} leaves the balcony with a <span class="devotion inc">small smile</span> on ${his} face.`); + r.push(`enter ${his} depths, but ${he} keeps ${his} gaze on the fiery horizon. ${He} extricates ${his} hands from yours to stabilize ${himself} against the railing, leaving you free to gently massage ${his} breasts in time with your slow thrusts. ${He} does not climax, but after you do ${he} turns halfway within your arms and kisses you impulsively. ${He} leaves the balcony with a <span class="devotion inc">small smile</span> on ${his} face.`); r.push(VCheck.Vaginal(slave, 1)); slave.devotion += 4; return r; diff --git a/src/events/RESS/review/objectifyingVisit.js b/src/events/RESS/review/objectifyingVisit.js index ee47c43649832a85598db1fa24b54f9b256ea530..ec9fe5b155084e8930aa585e32eca979a3affed6 100644 --- a/src/events/RESS/review/objectifyingVisit.js +++ b/src/events/RESS/review/objectifyingVisit.js @@ -127,7 +127,7 @@ App.Events.RESSObjectifyingVisit = class RESSObjectifyingVisit extends App.Event } else { r.push(`pathetic`); } - r.push(`balls in your hand and slowly squeeze it. As a result, when a particularly irritating piece of news is relayed through your monitor and you suddenly crush the testicle held in your hand in response, ${eventSlave.slaveName} can't help but let out a sharp yelp before struggling silencing ${himself}. ${He} soon realizes ${his} time with you in the near future will be as an outlet for your frustrations, and you fully intend to use ${his} balls as literal stress balls. When you dismiss ${him} hours later, ${he} staggers out of your office trying ${his} best to not touch ${his} swollen testicles and <span class="trust dec">trembling from ${his} recent objectifying experience.</span>`); + r.push(`balls in your hand and slowly squeeze it. As a result, when a particularly irritating piece of news is relayed through your monitor and you suddenly crush the testicle held in your hand in response, ${eventSlave.slaveName} can't help but let out a sharp yelp before struggling to silence ${himself}. ${He} soon realizes ${his} time with you in the near future will be as an outlet for your frustrations, and you fully intend to use ${his} balls as literal stress balls. When you dismiss ${him} hours later, ${he} staggers out of your office trying ${his} best to not touch ${his} swollen testicles and <span class="trust dec">trembling from ${his} recent objectifying experience.</span>`); eventSlave.trust -= 5; return r; } diff --git a/src/events/RESS/review/subjugationBlues.js b/src/events/RESS/review/subjugationBlues.js index 2f3b8899e0760bc2d122864071617b299d75d38f..47adbaa00c8765c4b6bcea155071087f65230495 100644 --- a/src/events/RESS/review/subjugationBlues.js +++ b/src/events/RESS/review/subjugationBlues.js @@ -120,7 +120,7 @@ App.Events.RESSSubjugationBlues = class RESSSubjugationBlues extends App.Events. r.toParagraph(); r.push(`By the time ${he} wakes up from the anesthesia, you've already made the necessary alterations to ${his} permanent records, which now clearly indicate that ${he} was born ${FSSubjugationistRace} and as such, can be rightfully regarded as the racially inferior fuck-animal ${he} now is. Of course, your fellow slaveowners and the slave market will be savvy enough to see through the alterations you've forced upon ${him}, but when you make ${him} available for a day of use in the public square, all your average citizen knows is that the ${girl} they are fucking is simply a worthless ${FSSubjugationistRace} slut who doesn't deserve much more than a stomach full of cum. The surgery <span class="health dec">negatively effects ${his} health,</span> but by the end of a long day ${he}'ll likely never forget, ${he} has gotten a crash course in what it means to be a ${FSSubjugationistRace} slave in your arcology, and any evidence that ${he} was born ${eventSlave.race} has been efficiently expunged from ${his} records.`); if (eventSlave.vagina === 0 || eventSlave.anus === 0) { - r.push(`<span class="virginity loss">All vestiges of ${his} virginity have been unceremoniously stripped away</span>.`); + r.push(`<span class="virginity loss">All vestiges of ${his} virginity have been unceremoniously stripped away.</span>`); } r.push(`The experience has <span class="devotion inc">broken down ${his} resistance,</span> and your willingness to go to such extremes to subjugate ${him} <span class="trust dec">greatly increases ${his} fear of you.</span>`); eventSlave.devotion += 5; diff --git a/src/events/RESS/review/transitionAnxiety.js b/src/events/RESS/review/transitionAnxiety.js index b36ba68d0c4549e9eb287fb4e60d127924e78cdc..241c6f0e8335f3bf8c93c76f75b0ef622fa0272f 100644 --- a/src/events/RESS/review/transitionAnxiety.js +++ b/src/events/RESS/review/transitionAnxiety.js @@ -41,7 +41,7 @@ App.Events.RESSTransitionAnxiety = class RESSTransitionAnxiety extends App.Event } else if (V.week-eventSlave.weekAcquired === 1) { r.push(`just last week.`); } else { - r.push(`${V.week-eventSlave.weekAcquired} weeks ago.`); + r.push(`${num(V.week-eventSlave.weekAcquired)} weeks ago.`); } r.push(`It's not surprising; slaves like ${him} usually require some time and training to accept that they're slavegirls. ${He} lacks the natural attraction to men that might have made the idea more comfortable for ${him}, and the resulting sexual anxiety combined with understandable fear of sexual use makes ${him} extremely unhappy to be naked in front of someone ${he} knows can fuck ${him} at will.`); r.toParagraph(); diff --git a/src/events/RETS/reSiblingTussle.js b/src/events/RETS/reSiblingTussle.js index a794ca9af4e591e62e11f75a7326831fcc2c1da8..2866bc84caf6a4a92e78e199cc342324a9ad488e 100644 --- a/src/events/RETS/reSiblingTussle.js +++ b/src/events/RETS/reSiblingTussle.js @@ -219,16 +219,16 @@ App.Events.RETSSiblingTussle = class RETSSiblingTussle extends App.Events.BaseEv t.push(`${winner.slaveName} encourages ${loser.slaveName} to ${winner.dick > 0 ? `suck ${himW} off` : `eat ${himW} out`} quickly, knowing that they both still have to get to work.`); } if (loser.fetish !== "submissive") { - t.push(`It's not long before ${heW} comes, and the two slaves separate to finish getting ready for work. ${winner.slaveName} had fun this morning, but is still clearly <span class="libido inc">up for more</span>.`); + t.push(`It's not long before ${heW} comes, and the two slaves separate to finish getting ready for work. ${winner.slaveName} had fun this morning, but is still clearly <span class="libido inc">up for more.</span>`); if (fetishChangeChance(loser) > jsRandom(0, 100)) { loser.fetishKnown = 1; loser.fetish = "submissive"; loser.fetishStrength = 20; - t.push(`${loser.slaveName}, meanwhile, really enjoyed the feeling of being dominated by ${hisL} ${siblingTerm(loser, winner)}, and has become <span class="fetish gain">submissive</span>.`); + t.push(`${loser.slaveName}, meanwhile, really enjoyed the feeling of being dominated by ${hisL} ${siblingTerm(loser, winner)}, and has become <span class="fetish gain">submissive.</span>`); } winner.energy += 4; } else { - t.push(`${HisW} ${siblingTerm(winner, loser)} really gets off on ${hisL} submissive position and comes before ${heW} does, and when they're finished they both leave satisfied, <span class="libido inc">heightening their sex drives</span>.`); + t.push(`${HisW} ${siblingTerm(winner, loser)} really gets off on ${hisL} submissive position and comes before ${heW} does, and when they're finished they both leave satisfied, <span class="libido inc">heightening their sex drives.</span>`); sib1.energy += 4; sib2.energy += 4; } diff --git a/src/events/intro/pcExperienceIntro.js b/src/events/intro/pcExperienceIntro.js index 6042e9190a1184b08c77ef590c689391b092a67a..f8bf09ef3ffbe8803f5e1d0ee43a29a8c51a3196 100644 --- a/src/events/intro/pcExperienceIntro.js +++ b/src/events/intro/pcExperienceIntro.js @@ -83,7 +83,7 @@ App.Intro.PCExperienceIntro = function() { "Incursion Specialist", "BlackHat", App.Events.makeNode([ `As an ex-hacker, you know how to gain access computer systems and other devices. <span class="positive">Certain upgrades will be cheaper</span> and you may find alternative approaches to problems.${(V.showSecExp === 1) ? `However, you will <span class="red">find authority quite hard</span> to maintain.` : ""}`, - `Your starting slaves will have a free level of <span class="cyan">intelligence</span>.` + `Your starting slaves will have a free level of <span class="cyan">intelligence.</span>` ]) ); diff --git a/src/events/nonRandom/mercs/pMercenaries.js b/src/events/nonRandom/mercs/pMercenaries.js index 3ee123f4e24f2fdc1a11f3404517270157b61eef..7ed30c19b54129b37bb92f0d54a87a6e50b9318b 100644 --- a/src/events/nonRandom/mercs/pMercenaries.js +++ b/src/events/nonRandom/mercs/pMercenaries.js @@ -31,17 +31,17 @@ App.Events.PMercenaries = class PMercenaries extends App.Events.BaseEvent { choices.push(new App.Events.Result( `Quarter a squad in the arcology`, quarter, App.Events.makeNode([ - `This will cost ${cashFormat(price)} ${discount ? - `and some upkeep, <span class="skill player">reduced by your mercenary contacts.</span>` : - `and incur significant upkeep costs.`}` + `This will cost ${cashFormat(price)} ${discount + ? `and some upkeep, <span class="skill player">reduced by your mercenary contacts.</span>` + : `and incur significant upkeep costs.`}` ]) )); choices.push(new App.Events.Result( `Quarter a platoon in the arcology`, platoon, App.Events.makeNode([ - `This will cost ${cashFormat(price * 2)} ${discount ? - `and some upkeep, <span class="skill player">reduced by your mercenary contacts</span>.` : - `and incur significant upkeep costs.`}` + `This will cost ${cashFormat(price * 2)} ${discount + ? `and some upkeep, <span class="skill player">reduced by your mercenary contacts.</span>` + : `and incur significant upkeep costs.`}` ]) )); choices.push(new App.Events.Result(`Do not quarter troops in your arcology`, plead3rd)); diff --git a/src/events/reRecruit/femaleDebtor.js b/src/events/reRecruit/femaleDebtor.js index c72c48d64a843af8ee67837d971f1afcf81b7a3b..824a57f5b6659941607cbcb6e5fd2936ec145b2d 100644 --- a/src/events/reRecruit/femaleDebtor.js +++ b/src/events/reRecruit/femaleDebtor.js @@ -56,7 +56,7 @@ App.Events.recFemaleDebtor = class recFemaleDebtor extends App.Events.BaseEvent } function makeSlave() { - const slave = GenerateNewSlave("XX", {disableDisability: 1, race: "nonslave"}); + const slave = GenerateNewSlave("XX", {minAge: 15, disableDisability: 1, race: "nonslave"}); slave.origin = "$He was enslaved after $he fell into debt to you."; slave.devotion = random(-45, -25); slave.trust = random(-15, 0); diff --git a/src/events/reRecruit/maleDebtor.js b/src/events/reRecruit/maleDebtor.js index 2115c3fe30eb4fe576dec1c4c8f87300786415e1..944c9945be7f6844d20e5dab0de97858f3b05d3e 100644 --- a/src/events/reRecruit/maleDebtor.js +++ b/src/events/reRecruit/maleDebtor.js @@ -55,7 +55,7 @@ App.Events.recMaleDebtor = class recMaleDebtor extends App.Events.BaseEvent { } function makeSlave() { - const slave = GenerateNewSlave("XY", {maxAge: 30, disableDisability: 1, race: "nonslave"}); + const slave = GenerateNewSlave("XY", {minAge: 15, maxAge: 30, disableDisability: 1, race: "nonslave"}); slave.origin = "You turned $him into a slave $girl after $he fell into debt to you."; slave.devotion = random(-45, -25); slave.trust = random(-15, 0); diff --git a/src/events/scheduled/pitFightNonlethal.js b/src/events/scheduled/pitFightNonlethal.js index 7e670108ef5add555493346b1ad692d6ff8e1742..1a361e84ce23567313f70fd502d34be6f26b4ab2 100644 --- a/src/events/scheduled/pitFightNonlethal.js +++ b/src/events/scheduled/pitFightNonlethal.js @@ -406,9 +406,9 @@ App.Facilities.Pit.nonlethalFight = function(fighters) { const secondsLasted = random(15, 45); if (canRun) { - r.push(`${slave.slaveName} is quick, but not quick enough. ${He} manages to last almost ${minutesLasted} full minutes before the ${animal.name} finally manages to catch ${him}.`); + r.push(`${slave.slaveName} is quick, but not quick enough. ${He} manages to last almost ${num(minutesLasted)} full minutes before the ${animal.name} finally manages to catch ${him}.`); } else { - r.push(`${slave.slaveName} isn't quick enough to avoid the beast, and only manages to last a pitiful ${secondsLasted} seconds before the ${animal.name} catches ${him}.`); + r.push(`${slave.slaveName} isn't quick enough to avoid the beast, and only manages to last a pitiful ${num(secondsLasted)} seconds before the ${animal.name} catches ${him}.`); } if (V.pit.audience === "paid") { diff --git a/src/events/scheduled/seRaiding.js b/src/events/scheduled/seRaiding.js index 9bb3290490a215f896ec564a8e21bc7d732ce35e..ed73894ee89bb52e74ced1ed5fb49da6d3095533 100644 --- a/src/events/scheduled/seRaiding.js +++ b/src/events/scheduled/seRaiding.js @@ -211,7 +211,7 @@ App.Events.SERaiding = class SERaiding extends App.Events.BaseEvent { slave.trust = random(-60, -75); slave.oldDevotion = slave.devotion; - r.push(`The ${origin} is the primary target of the raid. ${He}'s <span class="race">${slave.race}</span>.`); + r.push(`The ${origin} is the primary target of the raid. ${He}'s <span class="race">${slave.race}.</span>`); if (slave.physicalAge <= 6) { r.push(`${He} is a young child and should be easy to corral.`); targetEscape -= 2; diff --git a/src/facilities/farmyard/shows/saFarmyardShows.js b/src/facilities/farmyard/shows/saFarmyardShows.js index 5859512a9de24235ad101836759f7d2b92c07692..c0551e09d405870a698f6a1c4125c8b6453f7950 100644 --- a/src/facilities/farmyard/shows/saFarmyardShows.js +++ b/src/facilities/farmyard/shows/saFarmyardShows.js @@ -343,7 +343,7 @@ App.Facilities.Farmyard.putOnShows = function(slave) { case "submissive": if (V.seeBestiality) { if (slave.fetishKnown) { - r.push(`${He} is so submissive that ${he} willingly accepts ${his} position as an animal's fucktoy and <span class="reputation inc">is able to put on a decent show</span>.`); + r.push(`${He} is so submissive that ${he} willingly accepts ${his} position as an animal's fucktoy and <span class="reputation inc">is able to put on a decent show.</span>`); } else { r.push(`${S.HeadGirl ? `${S.HeadGirl.slaveName} notices` : `You notice`} that ${slave.slaveName} seems to have really taken to ${his} position as a fucktoy for animals. <span class="lightcoral">${He}'s a submissive!</span>`); } diff --git a/src/facilities/nursery/utils/nurseryUtils.js b/src/facilities/nursery/utils/nurseryUtils.js index d105359f3c6c0b6c75bfcce4dc7f5fff12251de7..7a53c03f07c66d9c6306181a466eeb12bbe18f4a 100644 --- a/src/facilities/nursery/utils/nurseryUtils.js +++ b/src/facilities/nursery/utils/nurseryUtils.js @@ -698,7 +698,7 @@ App.Facilities.Nursery.nurserySort = function nurserySort() { let nurseryHasReservedChildren = false; let reservedChildrenNursery = FetusGlobalReserveCount("nursery"); - r += `<br><i>Sorting:</i> <b><span id="ql-nursery-sort">${sortNurseryList}</span>.</b> `; + r += `<br><i>Sorting:</i> <b><span id="ql-nursery-sort">${sortNurseryList}.</span></b> `; r += `${App.UI.passageLink("Sort by Name", "Nursery", `${sortNurseryList = "Name"}, ${App.UI.replace(`#ql-nursery-sort`, sortNurseryList)}, ${byName()}`)} | `; r += `${App.UI.passageLink("Sort by Reserved Nursery Spots", "Nursery", `${sortNurseryList = "Reserved Nursery Spots"}, ${App.UI.replace(`#ql-nursery-sort`)} ${sortNurseryList}, ${byReservedSpots()}`)} | `; r += `${App.UI.passageLink("Sort by Pregnancy Week", "Nursery", `${sortNurseryList = "Pregnancy Week"}, ${App.UI.replace(`#ql-nursery-sort`, sortNurseryList)}, ${byPregnancyWeek()}`)} | `; diff --git a/src/futureSocieties/aztec/slaveSacrificeLife.js b/src/futureSocieties/aztec/slaveSacrificeLife.js index ca8d17a1b6e8f05fef094bb7125915116b53fc55..4419ff4937225790c298d595cdbb106fc0d418cc 100644 --- a/src/futureSocieties/aztec/slaveSacrificeLife.js +++ b/src/futureSocieties/aztec/slaveSacrificeLife.js @@ -23,7 +23,7 @@ App.UI.SlaveInteract.aztecSlaveSacrificeLife = function(sacrifice) { } else { r.push(`slaves are`); } - r.push(`suitably <span class="trust dec">horrified</span>.`); + r.push(`suitably <span class="trust dec">horrified.</span>`); for (const slave of V.slaves.filter((s) => !isVegetable(s))) { slave.trust -= 5 + random(5); } diff --git a/src/futureSocieties/fsPassage.js b/src/futureSocieties/fsPassage.js index f8116387e388ad81b6f93edbfe05840b3604f385..dbf0835259b3b482b5b6f69ac1bbf8c17bcb8855 100644 --- a/src/futureSocieties/fsPassage.js +++ b/src/futureSocieties/fsPassage.js @@ -478,7 +478,7 @@ App.UI.fsPassage = function() { r.push(App.UI.DOM.makeElement("span", "You have established", "bold")); r.push(`Eugenics.`); r.push(activeFS("FSRestart")); - r.push(`The Societal Elite exist as the highest class, allowing you access to all manner of benefits`); + r.push(`The Societal Elite exist as the highest class, allowing you access to all manner of benefits.`); } } else { if (FSCredits > 0) { @@ -684,7 +684,7 @@ App.UI.fsPassage = function() { } ) ); - r.push(`is societal disapproval of implant surgery`); + r.push(`is societal disapproval of implant surgery.`); } else { /* <span class="note"><span style="font-weight:Bold">Body Purism:</span> societal disapproval of implant surgery.</span>*/ } diff --git a/src/gui/Encyclopedia/encyclopediaBeingInCharge.js b/src/gui/Encyclopedia/encyclopediaBeingInCharge.js index f0ccf4d88748eca4be9e4903c492675c8593463b..c20d6f8cd6eb09415522ab5d2a558b2affe89a61 100644 --- a/src/gui/Encyclopedia/encyclopediaBeingInCharge.js +++ b/src/gui/Encyclopedia/encyclopediaBeingInCharge.js @@ -132,7 +132,7 @@ App.Encyclopedia.addArticle("Rules Assistant", function() { r.push(App.UI.DOM.combineNodes(App.Encyclopedia.Dialog.linkDOM("muscles", "Musculature"), ",")); r.push("lactation, pregnancy, fetuses, implant size, or age) and then choose the level at which to apply. For example to apply a rule to obedient slaves, choose"); r.push(App.Encyclopedia.Dialog.linkDOM("devotion", "From Rebellious to Devoted", "devotion accept")); - r.push("for the activation and 4 or more for the lower limit by selecting <span class='encyclopedia interaction'>>=</span>."); + r.push("for the activation and 4 or more for the lower limit by selecting <span class='encyclopedia interaction'>>=.</span>"); r.push(`You can also create custom conditions using any property of a slave, which you can find documented <a target='_blank' class='link-external' href='https://gitgud.io/pregmodfan/fc-pregmod/-/raw/pregmod-master/devNotes/legacy files/slave%20variables%20documentation.md'>here.</a>`); App.Events.addParagraph(f, r); @@ -175,7 +175,7 @@ App.Encyclopedia.addArticle("Rules Assistant", function() { r = []; r.push(App.Encyclopedia.topic("Adding or removing a rule")); - r.push("The game starts with 3 basic default rule settings but more can be added and/or removed as needed. To add a new rule, click <span class='encyclopedia interaction'>Add a new rule</span> at the bottom, removing a rule is the same by clicking <span class='encyclopedia interaction'>Remove rule</span>."); + r.push("The game starts with 3 basic default rule settings but more can be added and/or removed as needed. To add a new rule, click <span class='encyclopedia interaction'>Add a new rule</span> at the bottom, removing a rule is the same by clicking <span class='encyclopedia interaction'>Remove rule.</span>"); App.Events.addParagraph(f, r); return f; diff --git a/src/gui/storyCaption.js b/src/gui/storyCaption.js index d00fd729a6ab9e3bb8bfd05108a572bd9324a432..6b226bacd8e183b83c8f10d261a8de3ba613f307 100644 --- a/src/gui/storyCaption.js +++ b/src/gui/storyCaption.js @@ -85,10 +85,7 @@ App.UI.storyCaption = function() { function week() { const fragment = document.createDocumentFragment(); const div = document.createElement("div"); - App.UI.DOM.appendNewElement("span", div, `Week ${V.week}`, "bold"); - if (V.week > 52) { - div.append(` (${years(V.week)})`); - } + App.UI.DOM.appendNewElement("span", fragment, App.UI.DOM.spanWithTooltip(`Week ${V.week}`, capFirstChar(years(V.week))), ['bold']); fragment.append(div); App.UI.DOM.appendNewElement("div", fragment, `Week of ${asDateString(V.week)}`); diff --git a/src/interaction/policies/changeLanguage.js b/src/interaction/policies/changeLanguage.js index 902f314ee04a9eeaefb6904928f5a00f1cc5b27f..82e4703e95877f97a0cdd342091d8ab36d578599 100644 --- a/src/interaction/policies/changeLanguage.js +++ b/src/interaction/policies/changeLanguage.js @@ -46,7 +46,7 @@ App.Arcology.changeLanguage = function() { languageList.add(revivalist.language); } - r.push(`The lingua franca of the arcology is <span class='bold'>${V.language}</span>.`); + r.push(`The lingua franca of the arcology is <span class='bold'>${V.language}.</span>`); App.Events.addParagraph(el, r); r = []; diff --git a/src/interaction/sellSlave.js b/src/interaction/sellSlave.js index f7d5e8eb4a5c0ac1cd31ed2d6ef7e342909575b0..249075dea7c25f737c2660635c7feb8509990eea 100644 --- a/src/interaction/sellSlave.js +++ b/src/interaction/sellSlave.js @@ -864,7 +864,7 @@ App.Interact.sellSlave = function(slave) { "elite auction", { cost: 500 * Math.trunc((cost * 1.1) / 500), - offerDesc: `The current offer for ${him} stands at`, + offerDesc: `is what the current bid for ${him} stands at.`, get requirements() { return true; }, percentOdds: 100, get completeSale() { diff --git a/src/markets/specificMarkets/JobFulfillmentCenterOrder.js b/src/markets/specificMarkets/JobFulfillmentCenterOrder.js index 8ac00ca409979ef89dab7bb6f363cbf103a7c82f..9f3157cd93ac15eaa1f137fd126aa417c4fc4f13 100644 --- a/src/markets/specificMarkets/JobFulfillmentCenterOrder.js +++ b/src/markets/specificMarkets/JobFulfillmentCenterOrder.js @@ -14,7 +14,7 @@ App.Markets.JobFulfillmentCenterOrder = function() { if (V.JFC.order === 0) { r.push(`You work up a new slave order for posting where slave merchants can work to fulfill it.`); } else { - r.push(`You review your posted slave order for a <span class="bold">${V.JFC.role}</span>.`); + r.push(`You review your posted slave order for a <span class="bold">${V.JFC.role}.</span>`); } if (V.assistant.personality === 1) { r.push(`As you work, ${V.assistant.name} makes lewd comments about what ${heA} looks forward to doing to this new slave.`); diff --git a/src/npc/children/childInteract.tw b/src/npc/children/childInteract.tw index 133b9b3031e7a6c2bd58256dd77839f8926cccd1..56026a9e4a4ca099d7e77301cd338d6a913fe672 100644 --- a/src/npc/children/childInteract.tw +++ b/src/npc/children/childInteract.tw @@ -466,7 +466,7 @@ FIXME: <br><br>__Appearance:__ - <br>Clothes: <b><span id="clothes">$activeChild.clothes</span>.</b> + <br>Clothes: <b><span id="clothes">$activeChild.clothes.</span></b> <<link "Let $him choose">> <<set $activeChild.clothes = "choosing her own clothes", $activeChild.choosesOwnClothes = 1>> <<replace "#clothes">>$activeChild.clothes<</replace>> @@ -510,7 +510,7 @@ FIXME: <<replace "#clothes">>$activeChild.clothes<</replace>> <</link>> - <br>Collar: <b><span id="collar">$activeChild.collar</span>.</b> + <br>Collar: <b><span id="collar">$activeChild.collar.</span></b> <<link "None">> <<set $activeChild.collar = "none">> <<replace "#collar">>$activeChild.collar<</replace>> @@ -616,7 +616,7 @@ FIXME: <</link>> <<if hasAnyArms($activeChild)>> - <br>Arm accessory: <b><span id="armAccessory">$activeChild.armAccessory</span>.</b> + <br>Arm accessory: <b><span id="armAccessory">$activeChild.armAccessory.</span></b> <<link "None">> <<set $activeChild.armAccessory = "none">> <<replace "#armAccessory">>$activeChild.armAccessory<</replace>> @@ -632,7 +632,7 @@ FIXME: <</if>> <<if hasAnyLegs($activeChild)>> - <br>Shoes: <b><span id="shoes">$activeChild.shoes</span>.</b> + <br>Shoes: <b><span id="shoes">$activeChild.shoes.</span></b> <<link "Go barefoot">> <<set $activeChild.shoes = "none">> <<replace "#shoes">>$activeChild.shoes<</replace>> @@ -658,7 +658,7 @@ FIXME: <<replace "#shoes">>$activeChild.shoes<</replace>> <</link>> - <br>Leg accessory: <b><span id="legAccessory">$activeChild.legAccessory</span>.</b> + <br>Leg accessory: <b><span id="legAccessory">$activeChild.legAccessory.</span></b> <<link "None">> <<set $activeChild.legAccessory = "none">> <<replace "#legAccessory">>$activeChild.legAccessory<</replace>> @@ -673,7 +673,7 @@ FIXME: <</link>> <</if>> - <br>Torso accessory: <b><span id="bellyAccessory">$activeChild.bellyAccessory</span>.</b> + <br>Torso accessory: <b><span id="bellyAccessory">$activeChild.bellyAccessory.</span></b> <<link "None">> <<set $activeChild.bellyAccessory = "none">> <<replace "#bellyAccessory">>$activeChild.bellyAccessory<</replace>> @@ -717,7 +717,7 @@ FIXME: <</if>> <</if>> - <br>Anal accessory: <b><span id="buttplug">$activeChild.buttplug</span>.</b> + <br>Anal accessory: <b><span id="buttplug">$activeChild.buttplug.</span></b> <<link "None">> <<set $activeChild.buttplug = "none", $activeChild.buttplugAttachment = "none">> <<replace "#buttplug">>$activeChild.buttplug<</replace>> @@ -757,7 +757,7 @@ FIXME: <</if>> <</if>> <<if isItemAccessible.entry("tail", "buttplugAttachment") && $activeChild.buttplug != "none">> - Anal accessory attachment: <b><span id="buttplugAttach">$activeChild.buttplugAttachment</span>.</b> + Anal accessory attachment: <b><span id="buttplugAttach">$activeChild.buttplugAttachment.</span></b> <<link "None">> <<set $activeChild.buttplugAttachment = "none">> <<replace "#buttplugAttach">>$activeChild.buttplugAttachment<</replace>> @@ -778,7 +778,7 @@ FIXME: <</if>> <</if>> <<if $activeChild.vagina > -1>> - <br>Vaginal accessory: <b><span id="vaginalAccessory">$activeChild.vaginalAccessory</span>.</b> + <br>Vaginal accessory: <b><span id="vaginalAccessory">$activeChild.vaginalAccessory.</span></b> <<link "None">> <<set $activeChild.vaginalAccessory = "none">> <<replace "#vaginalAccessory">>$activeChild.vaginalAccessory<</replace>> @@ -820,7 +820,7 @@ FIXME: <</if>> <</if>> <<if $activeChild.dick > 0>> - <br>Dick accessory: <b><span id="dickAccessory">$activeChild.dickAccessory</span>.</b> + <br>Dick accessory: <b><span id="dickAccessory">$activeChild.dickAccessory.</span></b> <<link "None">> <<set $activeChild.dickAccessory = "none">> <<replace "#dickAccessory">>$activeChild.dickAccessory<</replace>> @@ -841,7 +841,7 @@ FIXME: /* TODO: redo all this */ /* TODO: will children have chastity options? - <br>Chastity device: <b><span id="chastity"><<if $activeChild.chastityAnus && $activeChild.chastityPenis && $activeChild.chastityVagina>>Full Chastity<<elseif $activeChild.chastityPenis && $activeChild.chastityVagina>>Genital Chastity<<elseif $activeChild.chastityAnus && $activeChild.chastityPenis>>Combined Chastity Cage<<elseif $activeChild.chastityAnus && $activeChild.chastityVagina>>Combined Chastity Belt<<elseif $activeChild.chastityVagina>>Chastity Belt<<elseif $activeChild.chastityPenis>>Chastity Cage<<elseif $activeChild.chastityAnus>>Anal Chastity<<elseif $activeChild.chastityAnus == 0 && $activeChild.chastityPenis == 0 && $activeChild.chastityVagina == 0>>None<<else>>THERE HAS BEEN AN ERROR</span>.</b><</if>> + <br>Chastity device: <b><span id="chastity"><<if $activeChild.chastityAnus && $activeChild.chastityPenis && $activeChild.chastityVagina>>Full Chastity<<elseif $activeChild.chastityPenis && $activeChild.chastityVagina>>Genital Chastity<<elseif $activeChild.chastityAnus && $activeChild.chastityPenis>>Combined Chastity Cage<<elseif $activeChild.chastityAnus && $activeChild.chastityVagina>>Combined Chastity Belt<<elseif $activeChild.chastityVagina>>Chastity Belt<<elseif $activeChild.chastityPenis>>Chastity Cage<<elseif $activeChild.chastityAnus>>Anal Chastity<<elseif $activeChild.chastityAnus == 0 && $activeChild.chastityPenis == 0 && $activeChild.chastityVagina == 0>>None<<else>>THERE HAS BEEN AN ERROR.</span></b><</if>> <<link "None">> <<set $activeChild.chastityAnus = 0>> @@ -1163,7 +1163,7 @@ FIXME: <br> -Health: <b><span id="curatives">$activeChild.curatives</span>.</b> +Health: <b><span id="curatives">$activeChild.curatives.</span></b> <<link "None">> <<set $activeChild.curatives = "none">> <<replace "#curatives">>$activeChild.curatives<</replace>> @@ -1180,7 +1180,7 @@ Health: <b><span id="curatives">$activeChild.curatives</span>.</b> /* TODO: will children be able to be put on aphrodisiacs? */ -Aphrodisiacs: <b><span id="aphrodisiacs">$activeChild.aphrodisiacs</span>.</b> +Aphrodisiacs: <b><span id="aphrodisiacs">$activeChild.aphrodisiacs.</span></b> <<link "None">> <<set $activeChild.aphrodisiacs = "none">> <<replace "#aphrodisiacs">>$activeChild.aphrodisiacs<</replace>> @@ -1210,7 +1210,7 @@ Aphrodisiacs: <b><span id="aphrodisiacs">$activeChild.aphrodisiacs</span>.</b> </span> <br> -Hormones: <b><span id="hormones">$activeChild.hormones</span>.</b> +Hormones: <b><span id="hormones">$activeChild.hormones.</span></b> <<link "Intensive Female">> <<set $activeChild.hormones = "intensive female">> <<replace "#hormones">>$activeChild.hormones<</replace>> @@ -1232,7 +1232,7 @@ Hormones: <b><span id="hormones">$activeChild.hormones</span>.</b> <<replace "#hormones">>$activeChild.hormones<</replace>> <</link>> -<br>Diet: <b><span id="diet">$activeChild.diet</span>.</b> +<br>Diet: <b><span id="diet">$activeChild.diet.</span></b> <<link "Healthy">> <<set $activeChild.diet = "healthy">> <<replace "#diet">>$activeChild.diet<</replace>> @@ -1356,10 +1356,10 @@ Hormones: <b><span id="hormones">$activeChild.hormones</span>.</b> <</link>> <br><br>__Behavior__:<br> -Living standard: <b><span id="livingRules">$activeChild.rules.living</span>.</b> +Living standard: <b><span id="livingRules">$activeChild.rules.living.</span></b> //$His living conditions are managed by $nurseryName's décor.// -<br>Typical punishment: <b><span id="standardPunishment">$activeChild.rules.punishment</span>.</b> +<br>Typical punishment: <b><span id="standardPunishment">$activeChild.rules.punishment.</span></b> <<link "Confinement">> <<set $activeChild.rules.punishment = "confinement">> <<replace "#standardPunishment">>$activeChild.rules.punishment<</replace>> @@ -1377,7 +1377,7 @@ Living standard: <b><span id="livingRules">$activeChild.rules.living</span>.</b> <<replace "#standardPunishment">>$activeChild.rules.punishment<</replace>> <</link>> -Typical reward: ''<span id="standardReward">$activeChild.rules.reward</span>.'' +Typical reward: ''<span id="standardReward">$activeChild.rules.reward.</span>'' <<link "Relaxation">><<set $activeChild.rules.reward = "relaxation">><<replace "#standardReward">>$activeChild.rules.reward<</replace>><</link>> | <<link "Drugs">><<set $activeChild.rules.reward = "drugs">><<replace "#standardReward">>$activeChild.rules.reward<</replace>><</link>> | <<link "Orgasm">><<set $activeChild.rules.reward = "orgasm">><<replace "#standardReward">>$activeChild.rules.reward<</replace>><</link>> | @@ -1385,29 +1385,29 @@ Typical reward: ''<span id="standardReward">$activeChild.rules.reward</span>.'' <br><br>Non-assignment orgasm rules:z <div style="text-indent:2em"> -Masturbation is ''<span id="relMasturbation"><<if $activeChild.rules.release.masturbation === 1>>allowed<<else>>forbidden<</if>></span>.'' +Masturbation is ''<span id="relMasturbation"><<if $activeChild.rules.release.masturbation === 1>>allowed<<else>>forbidden<</if>>.</span>'' <<link "Allow">><<set $activeChild.rules.release.masturbation = 1>><<replace "#relMasturbation">>allowed<</replace>><</link>> | <<link "Forbid">><<set $activeChild.rules.release.masturbation = 0>><<replace "#relMasturbation">>forbidden<</replace>><</link>> </div> <div style="text-indent:2em"> -Sex with romantic partner is ''<span id="relPartner"><<if $activeChild.rules.release.partner === 1>>allowed<<else>>forbidden<</if>></span>.'' +Sex with romantic partner is ''<span id="relPartner"><<if $activeChild.rules.release.partner === 1>>allowed<<else>>forbidden<</if>>.</span>'' <<link "Allow">><<set $activeChild.rules.release.partner = 1>><<replace "#relPartner">>allowed<</replace>><</link>> | <<link "Forbid">><<set $activeChild.rules.release.partner = 0>><<replace "#relPartner">>forbidden<</replace>><</link>> </div> <<if $seeIncest == 1>> <div style="text-indent:2em"> - Sex with close family is ''<span id="relFamily"><<if $activeChild.rules.release.family === 1>>allowed<<else>>forbidden<</if>></span>.'' + Sex with close family is ''<span id="relFamily"><<if $activeChild.rules.release.family === 1>>allowed<<else>>forbidden<</if>>.</span>'' <<link "Allow">><<set $activeChild.rules.release.family = 1>><<replace "#relFamily">>allowed<</replace>><</link>> | <<link "Forbid">><<set $activeChild.rules.release.family = 0>><<replace "#relFamily">>forbidden<</replace>><</link>> </div> <</if>> <div style="text-indent:2em"> -Sex with other slaves is ''<span id="relSlaves"><<if $activeChild.rules.release.slaves === 1>>allowed<<else>>forbidden<</if>></span>.'' +Sex with other slaves is ''<span id="relSlaves"><<if $activeChild.rules.release.slaves === 1>>allowed<<else>>forbidden<</if>>.</span>'' <<link "Allow">><<set $activeChild.rules.release.slaves = 1>><<replace "#relSlaves">>allowed<</replace>><</link>> | <<link "Forbid">><<set $activeChild.rules.release.slaves = 0>><<replace "#relSlaves">>forbidden<</replace>><</link>> </div> <div style="text-indent:2em"> -Routine sex with <<= properMaster()>> is ''<span id="relMaster"><<if $activeChild.rules.release.master === 1>>granted<<else>>denied<</if>></span>.'' +Routine sex with <<= properMaster()>> is ''<span id="relMaster"><<if $activeChild.rules.release.master === 1>>granted<<else>>denied<</if>>.</span>'' <<link "Grant">><<set $activeChild.rules.release.master = 1>><<replace "#relMaster">>granted<</replace>><</link>> | <<link "Deny">><<set $activeChild.rules.release.master = 0>><<replace "#relMaster">>denied<</replace>><</link>> </div> @@ -1419,7 +1419,7 @@ Routine sex with <<= properMaster()>> is ''<span id="relMaster"><<if $activeChil $His smart clit piercing is set to <<else>>$His smart frenulum piercing is set to <</if>> - <b><span id="setting">$activeChild.clitSetting</span>.</b> + <b><span id="setting">$activeChild.clitSetting.</span></b> <<link "Vanilla">> <<set $activeChild.clitSetting = "vanilla">> <<replace "#setting">>$activeChild.clitSetting<</replace>> @@ -1490,7 +1490,7 @@ Routine sex with <<= properMaster()>> is ''<span id="relMaster"><<if $activeChil <</if>> <<if $activeChild.voice != 0>> - <br>Speech rules: <b><span id="speechRules">$activeChild.rules.speech</span>.</b> + <br>Speech rules: <b><span id="speechRules">$activeChild.rules.speech.</span></b> <<link "Restrictive">> <<set $activeChild.rules.speech = "restrictive">> <<replace "#speechRules">>$activeChild.rules.speech<</replace>> @@ -1511,7 +1511,7 @@ Routine sex with <<= properMaster()>> is ''<span id="relMaster"><<if $activeChil <</if>> <br> -Relationship rules: <b><span id="relationshipRules">$activeChild.rules.relationship</span>.</b> +Relationship rules: <b><span id="relationshipRules">$activeChild.rules.relationship.</span></b> <<link "Restrictive">> <<set $activeChild.rules.relationship = "restrictive">> <<replace "#relationshipRules">>$activeChild.rules.relationship<</replace>> @@ -1526,7 +1526,7 @@ Relationship rules: <b><span id="relationshipRules">$activeChild.rules.relations <</link>> <br> -Target destination: <b><span id="targetLocation">$activeChild.targetLocation</span>.</b> +Target destination: <b><span id="targetLocation">$activeChild.targetLocation.</span></b> <<link "Slavery">> <<set $activeChild.targetLocation = "slavery">> <<replace "#targetLocation">>$activeChild.targetLocation<</replace>> diff --git a/src/npc/descriptions/boobs/boobs.js b/src/npc/descriptions/boobs/boobs.js index bc403c7633adad9a6d99b46fc73d795321471c94..b1edaaf2396621e8330052131fd0f336e32328d5 100644 --- a/src/npc/descriptions/boobs/boobs.js +++ b/src/npc/descriptions/boobs/boobs.js @@ -416,7 +416,7 @@ App.Desc.boobs = function() { } break; case "kitty lingerie": - r += `${slave.slaveName}'s lacy bra features a hole shaped liked a cat's head in the center of ${his} chest;`; + r += `${slave.slaveName}'s lacy bra features a hole shaped liked a cat's head in the center of ${his} chest; `; if (slave.boobs > 12000) { r += `${his} ${adjNoun} have stretched ${his} bra to the point that the hole is unrecognizable as anything feline.`; } else if (slave.boobs > 4000) { diff --git a/src/npc/descriptions/career.js b/src/npc/descriptions/career.js index c4f549859e8b5c3aba74fc9e472035d62f259fc4..692cda989f1a91b994a58f2c85a0ca8c35bef8aa 100644 --- a/src/npc/descriptions/career.js +++ b/src/npc/descriptions/career.js @@ -140,26 +140,26 @@ App.Desc.career = function(slave) { } const careerMap = [ - {prop: "headGirl", val: "Head Girl"}, - {prop: "recruiter", val: "Recruiter"}, - {prop: "bodyguard", val: "Bodyguard"}, - {prop: "madam", val: "Madam"}, - {prop: "DJ", val: "DJ"}, - {prop: "nurse", val: "Nurse"}, - {prop: "teacher", val: "Schoolteacher"}, - {prop: "attendant", val: "Attendant"}, - {prop: "matron", val: "Matron"}, - {prop: "stewardess", val: "Stewardess"}, - {prop: "milkmaid", val: "Milkmaid"}, - {prop: "farmer", val: "Farmer"}, - {prop: "wardeness", val: "Wardeness"}, - {prop: "servant", val: "Servant"}, - {prop: "entertainer", val: "Entertainer"}, - {prop: "whore", val: "Whore"} + {prop: "headGirl", val: "a Head Girl"}, + {prop: "recruiter", val: "a Recruiter"}, + {prop: "bodyguard", val: "a Bodyguard"}, + {prop: "madam", val: "a Madam"}, + {prop: "DJ", val: "a DJ"}, + {prop: "nurse", val: "a Nurse"}, + {prop: "teacher", val: "a Schoolteacher"}, + {prop: "attendant", val: "an Attendant"}, + {prop: "matron", val: "a Matron"}, + {prop: "stewardess", val: "a Stewardess"}, + {prop: "milkmaid", val: "a Milkmaid"}, + {prop: "farmer", val: "a Farmer"}, + {prop: "wardeness", val: "a Wardeness"}, + {prop: "servant", val: "a servant"}, + {prop: "entertainer", val: "an entertainer"}, + {prop: "whore", val: "a whore"} ]; const careersArray = careerMap.filter((o) => (slave.skill[o.prop] >= V.masteredXP)).map((o) => o.val); if (careersArray.length > 0) { - r.push(`${He} has working experience as a ${toSentence(careersArray)}.`); + r.push(`${He} has working experience as ${toSentence(careersArray)}.`); } return r.join(" "); }; diff --git a/src/npc/descriptions/longSlave.js b/src/npc/descriptions/longSlave.js index d2f769536d72dd128fd51d042c4ef9c915046a1e..ac0ee839908f3828bbab4e4cf722951e1bfbe07e 100644 --- a/src/npc/descriptions/longSlave.js +++ b/src/npc/descriptions/longSlave.js @@ -333,7 +333,10 @@ App.Desc.longSlave = function(slave, {descType, market = 0, prisonCrime, noArt} r.push(App.Desc.bodyguard(slave)); if ((slave.counter.pitWins + slave.counter.pitLosses) > 0) { - r.push(`${He} has participated in ${num(slave.counter.pitWins + slave.counter.pitLosses)} pit fights, with ${slave.counter.pitWins} wins and ${slave.counter.pitLosses} losses.`); + const wins = slave.counter.pitWins; + const losses = slave.counter.pitLosses; + + r.push(`${He} has participated in ${num(wins + losses)} pit fights, with ${numberWithPluralOne(wins, "win")} and ${numberWithPluralOne(losses, "loss", "losses")}.`); } if (slave.counter.pitKills > 0) { diff --git a/src/npc/infants/infantInteract.tw b/src/npc/infants/infantInteract.tw index b282fcde36030c255cb7de2062298f859bd679db..0b121bef32957bf2d3575e6a803c421547e9019b 100644 --- a/src/npc/infants/infantInteract.tw +++ b/src/npc/infants/infantInteract.tw @@ -50,7 +50,7 @@ <</if>> <br><br> -Target destination: <b><span id="targetLocation">$activeChild.targetLocation</span>.</b> +Target destination: <b><span id="targetLocation">$activeChild.targetLocation.</span></b> <<link "Slavery">> <<set $activeChild.targetLocation = "slavery">> <<replace "#targetLocation">>$activeChild.targetLocation<</replace>> @@ -58,4 +58,4 @@ Target destination: <b><span id="targetLocation">$activeChild.targetLocation</sp <<link "Freedom">> <<set $activeChild.targetLocation = "freedom">> <<replace "#targetLocation">>$activeChild.targetLocation<</replace>> -<</link>> \ No newline at end of file +<</link>> diff --git a/src/npc/interaction/fAnimal.js b/src/npc/interaction/fAnimal.js index d9a670a85affd625189d6950a72dbc3119d54fc9..c6770d34488587feaf0aac82a66f435c2b33de61 100644 --- a/src/npc/interaction/fAnimal.js +++ b/src/npc/interaction/fAnimal.js @@ -504,7 +504,7 @@ App.Interact.fAnimal = function(slave, type) { } if (canWalk(slave)) { - if (slave.vagina > 0) { + if (act === "vaginal") { text.push(`${He} uses a quick douche to clean ${his} ${slave.vagina < 2 ? `tight` : slave.vagina > 3 ? `loose` : ``} pussy,`); } else { text.push(`${He} uses an enema to clean ${his} ${slave.anus < 2 ? `tight` : slave.anus < 3 ? `used` : `gaping`} butthole,`); diff --git a/src/npc/interaction/fFeelings.js b/src/npc/interaction/fFeelings.js index 493bd1964eec3d1dd36ab1c1a421b931dae9de8f..ca6ebbf5ad8eff95eace6a619230b433a0380bc9 100644 --- a/src/npc/interaction/fFeelings.js +++ b/src/npc/interaction/fFeelings.js @@ -1200,7 +1200,7 @@ App.Interact.feelings = function(slave) { } } else if (slave.behavioralFlaw === "gluttonous" && ["food", "milk"].includes(fluid) && [1, 3].includes(slave.inflationMethod)) { if (slave.bellyFluid >= 10000 && slave.fetish === "masochist" && slave.fetishStrength > 60) { - r.push(Spoken(slave, `This ${fluid} is so tasty, and my belly hurts so <span class="note">good</span>... I wish I really could stuff myself to bursting.`)); + r.push(Spoken(slave, `This ${fluid} is so tasty, and my belly hurts so <span class="note">good...</span> I wish I really could stuff myself to bursting.`)); } else if (slave.bellyFluid >= 10000) { r.push(Spoken(slave, `My belly hurts a little, but it feels so good to gorge myself...`)); } else if (slave.bellyFluid >= 5000) { @@ -1230,7 +1230,7 @@ App.Interact.feelings = function(slave) { } } else if (slave.fetish === "humiliation" && slave.fetishStrength > 60) { if (slave.bellyFluid >= 2000) { - r.push(Spoken(slave, `This bloated gut is so <span class="note">disgraceful</span>...`)); + r.push(Spoken(slave, `This bloated gut is so <span class="note">disgraceful...</span>`)); if (slave.bellyFluid >= 10000) { r.push(Spoken(slave, `It hurts a little, but`)); } @@ -1238,7 +1238,7 @@ App.Interact.feelings = function(slave) { } } else { if (slave.bellyFluid >= 10000 && slave.fetish === "masochist" && slave.fetishStrength > 60) { - r.push(Spoken(slave, `My guts are so full, ${Master}, it hurts so <span class="note">good</span>...`)); + r.push(Spoken(slave, `My guts are so full, ${Master}, it hurts so <span class="note">good...</span>`)); } else if (slave.bellyFluid >= 10000) { r.push(Spoken(slave, `I feel really full, can I let the ${fluid} out now?`)); } else if (slave.bellyFluid >= 5000) { diff --git a/src/npc/interaction/fLickPussy.js b/src/npc/interaction/fLickPussy.js index d147dd9b9bb559cfdc4cc5c738d5691a44525e45..a79fa78e90310e9f45708987dd2733f342af8caf 100644 --- a/src/npc/interaction/fLickPussy.js +++ b/src/npc/interaction/fLickPussy.js @@ -16,17 +16,15 @@ App.Interact.fLickPussy = function(slave) { addPartner(slave, -1); - const devotion = slave.devotion; /* for brevity*/ - if (canWalk(slave) || (canMove(slave) && slave.rules.mobility === "permissive")) { r.push(`You summon ${slave.slaveName} to your office and order ${him} to lie down on the couch. ${He} does so`); - if (devotion > 95) { + if (slave.devotion > 95) { r.push(`with a smile, skipping over to give you a quick kiss before ${he} complies with your request.`); - } else if (devotion > 50) { + } else if (slave.devotion > 50) { r.push(`without hesitation, ready to serve and obey.`); - } else if (devotion > -50) { + } else if (slave.devotion > -50) { r.push(`with a look of trepidation, as though afraid you're going to hurt ${him}.`); - } else if (devotion <= -50) { + } else if (slave.devotion <= -50) { r.push(`with a look of hatred, though only after you threaten to punish ${him}.`); } } else { @@ -35,11 +33,11 @@ App.Interact.fLickPussy = function(slave) { r.push(`After ${he} is situated, you go over to`); if (slave.clothes !== "no clothing") { - r.push(`${him} and take off ${his} clothing, causing ${him} to`); - if (devotion > 50) { - r.push(`give you a soft smile.`); + r.push(`${him} and begin to peel off ${his} clothing, to which ${he}`); + if (slave.devotion > 50) { + r.push(`gives you a soft smile.`); } else { - r.push(`give you an angry glare.`); + r.push(`gives you an angry glare.`); } } else { r.push(`${him}.`); @@ -96,11 +94,11 @@ App.Interact.fLickPussy = function(slave) { r.push(`${his} ${relativeTerm(slave, V.PC)}`); } else { r.push(`the ${womanP}`); - if (devotion > 95) { + if (slave.devotion > 95) { r.push(`${he} loves`); - } else if (devotion > 50) { + } else if (slave.devotion > 50) { r.push(`${he}'s accepted as ${his} ${getWrittenTitle(slave)}`); - } else if (devotion < -50) { + } else if (slave.devotion < -50) { r.push(`${he} hates`); } else if (slave.trust < -50) { r.push(`${he} fears`); @@ -121,7 +119,7 @@ App.Interact.fLickPussy = function(slave) { r.push(`Before ${he} cums, though, you pull back, causing ${him} to whine in frustration. You begin again, then pull back again just before ${he} orgasms. You repeat this several more times, each time causing ${him} to become more and more frustrated. Finally, one last stroke of your tongue causes ${him} to go over the edge, making ${him}`); if (canTalk(slave)) { r.push(`scream out`); - if (devotion > 50) { + if (slave.devotion > 50) { r.push(`your name`); } } else { diff --git a/src/npc/interaction/fPat.js b/src/npc/interaction/fPat.js index c43ed70a8190f298d12eac9e1b57d4d25ffb5186..4447a0833b3f14b7489784e53eb9043b18529c95 100644 --- a/src/npc/interaction/fPat.js +++ b/src/npc/interaction/fPat.js @@ -221,7 +221,7 @@ App.Interact.fPat = function(slave) { r.push(`${He} does react when you gently rest your thumb on ${his} lips, however, by suddenly giving you a fierce bite. Cursing, you pull your hand back and examine it — ${he} didn't bite deep enough to draw blood, but the area is now red and puffy. Furious, you backhand ${him} across the`); if (random(1, 100) > 80) { slave.minorInjury = either("black eye", "bruise", "split lip"); - r.push(`face, giving ${him} a <span class="health dec">${slave.minorInjury}</span>.`); + r.push(`face, giving ${him} a <span class="health dec">${slave.minorInjury}.</span>`); } else { r.push(`face.`); } diff --git a/src/pregmod/FCTV/FCTVshows.js b/src/pregmod/FCTV/FCTVshows.js index 9b2595c34a9c39b495f42cab34146372e589a232..c9a7901f3aafeb520f33d54616f3cf3c10013aa9 100644 --- a/src/pregmod/FCTV/FCTVshows.js +++ b/src/pregmod/FCTV/FCTVshows.js @@ -1658,7 +1658,7 @@ App.Data.FCTV.channels = { r.push(`<p>Scott gestured to Sadie "It looks like you're already in good hands." A teasing grin spread across his face. "What could little old me do for you?" Annie gave him a knowing look and presented her well-lubricated cleavage. "Oh, I'm sure you could find something." Any response from Scott was interrupted by a young voice from the bathroom saying "I found more of the strawberry lube."</p>`); r.push(`<p>For a moment, the only sounds in the room were the soft 'whir' of a milker and the muffled hum of Sadie's vibrator. Annie's breath hitched from Sadie's ministrations and responded, "That's good sweetie, bring it here." The door to the bathroom swung open and Sarah walked into the room. She had lost her thong and was wearing a backpack printed with cartoon farm animals. Flexible tubing snaked out of the pack and attached two cups on her breasts. In her hands was a bottle of edible lube and a bright pink rounded cylinder with the words 'Her First Vibrator' printed in a saccharine font on the base.</p>`); r.push(`<p>Sarah looked at both her parents, then tilted her head and frowned. "You and daddy were playing that weird game again, weren't you?" Scott and Annie looked at each other; silently communicating in a way only parents can. Annie looked at her daughter and said, "When you're a bit older you're going to want to play those games too." Sarah looked unconvinced. "Anyway, you got the lube, are both your milker and vibrator charged?" Annie asked. Sarah bobbed her head. "Then why don't you lube up daddy?" Sarah bobbed her head again and knelt at the side of the bed.</p>`); - r.push(`<p>Scott quickly undressed and sat at the edge of the bed. Sarah knelt between her father's legs. She began softly licking her father's cock, her tongue sliding along its length and gently swirling around its head, her mouth making lewd noises. She ran her tongue on the underside of her dad's cock, took him into her mouth and began to give him a slow blowjob.</p>`); + r.push(`<p>Scott quickly undressed and sat at the edge of the bed. Sarah knelt between her father's legs. She begins softly licking her father's cock, her tongue sliding along its length and gently swirling around its head, her mouth making lewd noises. She runs her tongue on the underside of her dad's cock, taking him into her mouth and beginning to give him a slow blowjob.</p>`); r.push(`<p>Scott felt himself slowly harden to full mast. He resisted the urge to pull her down till her nose touched his crotch and said, "That's good sweetheart, now use the lube." Sarah pulled herself off his cock with a lewd pop and picked up the bottle of lube. She squirted a generous amount of it into one hand, rubbed both hands together, and began to stroke his cock. "You're doing a good job sweetie, did you help mommy too?" he asked. Annie nodded "She did a very good job and was very thorough." Sarah preened at her parents praise and said, "It wasn't easy. I had to use a whole bottle to do mommy." Scott turned his head to his wife and raised an eyebrow. Annie gave him a lewd grin and her blush slowly spread down her chest, but said nothing.</p>`); r.push(`<p>Scott patted his daughter's head. "Okay sweetie, take a seat." Sarah gave her dad's cock a kiss on the head, grabbed her vibrator and sat down on the couch across from the bed. She rubbed the lube on her hands over her crotch and her vibrator before licking off what remained. Scott began to stand, but paused; an impish smile spread across his face. "Before we begin, I have a question for mommy." He reached into a night table and pulled out an odd remote and a Wartenberg pinwheel.</p>`); r.push(`<p>"Oh, and what would that be?" Annie said in a knowing tone, her eyes twinkling. Scott just grinned and pressed a button on the remote. Annie squealed as her exosuit shifted her forward onto her breasts. Scott craned his head to look behind wife. "You alright down there, Sadie?" He cocked his head a bit more and barely made out a thumbs up beyond the horizon of his wife's ass. "Good. Now-" He rolled the pinwheel across her arm to collar bone and Annie gasped. "Why did you ask Sadie to stay behind when I sent her off for clothes?"</p>`);