diff --git a/compile.bat b/compile.bat index c45ac210f0969a67af76b21fdc116e53f388dbe2..ac1bb770ee1a70e6a490379eecd9b98d1b7111da 100644 --- a/compile.bat +++ b/compile.bat @@ -5,8 +5,6 @@ pushd %~dp0 :: See if we can find a git installation -setlocal enabledelayedexpansion - set GITFOUND=no for %%k in (HKCU HKLM) do ( for %%w in (\ \Wow6432Node\) do ( diff --git a/compile_debug+sanityCheck.bat b/compile_debug+sanityCheck.bat index 0eb2efb2b96238402e7b1cbc25e8ed66ec66ccd0..6091542f890e9d59ef9ba4932c14d7fd3cb985ee 100644 --- a/compile_debug+sanityCheck.bat +++ b/compile_debug+sanityCheck.bat @@ -5,8 +5,6 @@ pushd %~dp0 :: See if we can find a git installation -setlocal enabledelayedexpansion - set GITFOUND=no for %%k in (HKCU HKLM) do ( for %%w in (\ \Wow6432Node\) do ( diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js index 702d1d9322e8ff4e6a91b13e02546e8f402e37da..45fa7048a683eb76a4ae9a0946f43df7bc75459e 100644 --- a/js/003-data/gameVariableData.js +++ b/js/003-data/gameVariableData.js @@ -1050,8 +1050,7 @@ App.Data.resetOnNGPlus = { Farmer: 0, StewardessID: 0, stewardessImpregnates: 0, - /** @type {FC.SlaveStateOrZero} */ - Schoolteacher: 0, + SchoolteacherID: 0, AttendantID: 0, /** @type {FC.SlaveStateOrZero} */ Matron: 0, diff --git a/js/003-data/policiesData.js b/js/003-data/policiesData.js index 4b56d17639f47ab1305a3d77c958938a5f91dd15..de749cfe5e10be7c2214bd6f346a965719c9f51c 100644 --- a/js/003-data/policiesData.js +++ b/js/003-data/policiesData.js @@ -283,8 +283,8 @@ App.Data.Policies.Selection = { "policies.analAppeal": [ { title: "Anal Sex Encouragement", - text: "you will use your personal influence to communicate disgust with putting things up the butt.", - activatedText: "you are using your personal influence to communicate disgust with putting things up the butt.", + text: "you will use your personal influence to make anuses the most fashionable holes in the arcology.", + activatedText: "you are using your personal influence to make anuses the most fashionable holes in the arcology.", note: "Will increase the weight on slaves' anal skills" }, { @@ -809,11 +809,11 @@ App.Data.Policies.Selection = { "policies.retirement.milk": [ { title: "Productive Cow Retirement", - get text() { return `slaves will be rewarded with their freedom once they have been fucked ${num(V.policies.retirement.milk)} times.`; }, + get text() { return `slaves will be rewarded with their freedom once they have given ${num(V.policies.retirement.milk)} liters of milk.`; }, get activatedText() { const el = new DocumentFragment; let div = document.createElement('div'); - el.append(`slaves are rewarded with their freedom once they have been fucked ${num(V.policies.retirement.milk)} times.`); + el.append(`slaves are rewarded with their freedom once they have given ${num(V.policies.retirement.milk)} liters of milk.`); div.append(`Set a new retirement requirement:`); div.append( App.UI.DOM.makeElement( diff --git a/js/003-data/slaveMods.js b/js/003-data/slaveMods.js index 1d660eb8e5b9ab782d5065dc817eb4935257eddc..110f77749eaf83eca773b9962cf1d366ac62f235 100644 --- a/js/003-data/slaveMods.js +++ b/js/003-data/slaveMods.js @@ -39,7 +39,7 @@ App.Medicine.Modification.Brands = { FS: { "a racial slur": { displayName: "Racial Slur", - requirements: function() { + requirements: function(slave) { return ( (V.arcologies[0].FSSupremacist !== "unset" && slave.race !== V.arcologies[0].FSSupremacistRace) || (V.arcologies[0].FSSubjugationist !== "unset" && slave.race === V.arcologies[0].FSSubjugationistRace) @@ -48,145 +48,145 @@ App.Medicine.Modification.Brands = { }, "how much sex $he needs per day": { displayName: "Scores", - requirements: function() { + requirements: function(slave) { return (V.arcologies[0].FSIntellectualDependency !== "unset"); } }, "$his average slave aptitude test scores": { displayName: "Scores", - requirements: function() { + requirements: function(slave) { return (V.arcologies[0].FSSlaveProfessionalism !== "unset"); } }, "the number of children $he has birthed": { displayName: "Birth Count", - requirements: function() { + requirements: function(slave) { return (V.arcologies[0].FSRepopulationFocus !== "unset"); } }, "a gender symbol": { displayName: "Gender Symbol", - requirements: function() { + requirements: function(slave) { return ((V.arcologies[0].FSGenderRadicalist !== "unset") || (V.arcologies[0].FSGenderFundamentalist !== "unset")); } }, "$his own personal symbol": { displayName: "Personal Symbol", - requirements: function() { + requirements: function(slave) { return (V.arcologies[0].FSPaternalist !== "unset"); } }, "a chain symbol": { displayName: "Chain Symbol", - requirements: function() { + requirements: function(slave) { return (V.arcologies[0].FSDegradationist !== "unset"); } }, "a Vitruvian man": { displayName: "Vitruvian Man", - requirements: function() { + requirements: function(slave) { return (V.arcologies[0].FSBodyPurist !== "unset"); } }, "a scalpel": { displayName: "Scalpel", - requirements: function() { + requirements: function(slave) { return (V.arcologies[0].FSTransformationFetishist !== "unset"); } }, "$his virginity status": { displayName: "Virginity Status", - requirements: function() { + requirements: function(slave) { return (V.arcologies[0].FSYouthPreferentialist !== "unset"); } }, "$his sexual skills": { displayName: "Sexual Skill Info", - requirements: function() { + requirements: function(slave) { return (V.arcologies[0].FSMaturityPreferentialist !== "unset"); } }, "$his current height": { displayName: "Current height", - requirements: function() { + requirements: function(slave) { return ((V.arcologies[0].FSPetiteAdmiration !== "unset") || (V.arcologies[0].FSStatuesqueGlorification !== "unset")); } }, "$his absolute minimum breast size": { displayName: "Breast Floor", - requirements: function() { + requirements: function(slave) { return (V.arcologies[0].FSSlimnessEnthusiast !== "unset"); } }, "$his absolute maximum breast size": { displayName: "Breast Ceiling", - requirements: function() { + requirements: function(slave) { return (V.arcologies[0].FSAssetExpansionist !== "unset"); } }, "$his highest weigh-in": { displayName: "Weight Record", - requirements: function() { + requirements: function(slave) { return (V.arcologies[0].FSHedonisticDecadence !== "unset"); } }, "a big helping of your favorite food": { displayName: "Favorite Food", - requirements: function() { + requirements: function(slave) { return ((V.arcologies[0].FSHedonisticDecadence !== "unset") && V.PC.refreshmentType === 2); } }, "$his body product quality": { displayName: "Product Quality", - requirements: function() { + requirements: function(slave) { return (V.arcologies[0].FSPastoralist !== "unset"); } }, "$his deadlift record": { displayName: "Deadlift Info", - requirements: function() { + requirements: function(slave) { return (V.arcologies[0].FSPhysicalIdealist !== "unset"); } }, "a religious symbol": { displayName: "Religious Symbol", - requirements: function() { + requirements: function(slave) { return (V.arcologies[0].FSChattelReligionist !== "unset"); } }, "the crest of your Republic": { displayName: "Republican Crest", - requirements: function() { + requirements: function(slave) { return (V.arcologies[0].FSRomanRevivalist !== "unset"); } }, "the symbol of the Aztec gods": { displayName: "Seven Serpents", - requirements: function() { + requirements: function(slave) { return (V.arcologies[0].FSAztecRevivalist !== "unset"); } }, "the sigil of your Dynasty": { displayName: "Dynastic Sigil", - requirements: function() { + requirements: function(slave) { return (V.arcologies[0].FSEgyptianRevivalist !== "unset"); } }, "the Shogunate's mon": { displayName: "Mon", - requirements: function() { + requirements: function(slave) { return (V.arcologies[0].FSEdoRevivalist !== "unset"); } }, "a symbol of the Caliphate": { displayName: "Caliphate Symbol", - requirements: function() { + requirements: function(slave) { return (V.arcologies[0].FSArabianRevivalist !== "unset"); } }, "your Imperial Seal": { displayName: "Imperial Seal", - requirements: function() { + requirements: function(slave) { return (V.arcologies[0].FSChineseRevivalist !== "unset"); } }, diff --git a/src/004-base/specialSlavesProxy.js b/src/004-base/specialSlavesProxy.js index 07e27ee0402c44331dcb78e62ec9f5e5a8860bf1..66590bac3c99d032c44f63f35da26f9fe4d5f457 100644 --- a/src/004-base/specialSlavesProxy.js +++ b/src/004-base/specialSlavesProxy.js @@ -39,7 +39,7 @@ App.SpecialSlavesProxy = class SpecialSlavesProxy { return V.Recruiter; } get Schoolteacher() { - return V.Schoolteacher; + return slaveStateById(V.SchoolteacherID); } get Stewardess() { return slaveStateById(V.StewardessID); diff --git a/src/Mods/SecExp/secExpSmilingMan.tw b/src/Mods/SecExp/secExpSmilingMan.tw index 0b772539da302b45c92a89cb337d527e2df51df9..a153b6de275c59cd7de9db843a3ccbf5c0cea4a6 100644 --- a/src/Mods/SecExp/secExpSmilingMan.tw +++ b/src/Mods/SecExp/secExpSmilingMan.tw @@ -1,227 +1,275 @@ :: secExpSmilingMan [nobr] -<strong>The Smiling Man</strong> <br> +<h2>The Smiling Man</h2> <<set $nextButton = "Continue", $nextLink = "Random Nonindividual Event">> <<setAssistantPronouns>> <<if $smilingManProgress == 0>> <<set $fcnn.push("...encryption techniques: how to protect you and your loved ones from hackers ...")>> - - <br> - During your morning routine, a peculiar report appears: it's been several weeks since your arcology was the victim of a series of cyber-crimes conducted by a mysterious figure. - The egocentric criminal apparently took great pride in their acts, to the point of signing them with a symbol: a stylized smiling face. Your arcology was not the only one under assault by the - machinations of the one the media quickly nicknamed //the Smiling Man//. - <br>Despite the sheer damage this criminal did, you cannot help but admire the skill with which every misdeed was performed — the worst white collar crimes of the century, carried out with such elegance - that they almost seemed the product of natural laws, rather than masterful manipulation of the digital market. - While sifting through the report, $assistant.name remains strangely quiet. "I'm worried, <<= properTitle()>> — this individual seems to be able to penetrate whichever system garners his attention. I... feel vulnerable," _heA says. "It's not something I'm used to." - <br>Fortunately you have not been hit directly by this criminal — yet. Still, the repercussions of numerous bankruptcies take their toll on your arcology, whose @@.red;prosperity suffers.@@ - <br><<set $arcologies[0].prosperity *= random(80,90) * 0.01>> - <br> - <span id="result"> - <br> - <<if $cash >= 10000>> - <<link "Devote funds to the search for this dangerous criminal">> - <<run cashX(-10000, "event")>> - <<set $investedFunds = 1>> - <<set $relationshipLM++>> - <<set $smilingManProgress++>> - <<replace "#result">> - You devote funds to capture and neutralize the threat. You cannot help but wonder what the end game of this "smiling man" is. Money? Fame? Or is he on an ideological crusade? - <</replace>> - <</link>> - <br> - <<link "Attempt to contact the mysterious figure">> - <<run cashX(-10000, "event")>> - <<set $investedFunds = 1>> - <<set $relationshipLM += 2>> - <<set $smilingManProgress++>> - <<replace "#result">> - You devote funds to an attempt at communicating with the smiling man. You cannot help but wonder what the end game of this "smiling man" is. Money? Fame? Or is he on an ideological crusade? - <</replace>> - <</link>> - <br> - <<link "Invest funds to increase the cyber-security of the arcology">> - <<run cashX(-10000, "event")>> - <<set $investedFunds = 1>> - <<set $relationshipLM += random(5,10)>> - <<set $smilingManProgress++>> - <<replace "#result">> - You devote funds to the improvement of the cyber-security of your arcology. You cannot help but wonder what the end game of this "smiling man" is. Money? Fame? Or is he on an ideological crusade? - <</replace>> - <</link>> - <<else>> - Not enough funds to take further action. - <</if>> - <br> - <<link "Ignore the issue">> - <<set $smilingManProgress++>> - <<replace "#result">> - You do not consider this individual a threat. - <</replace>> - <</link>> - </span> + <p> + During your morning routine, a peculiar report appears: it's been several weeks since your arcology was the victim of a series of cyber-crimes conducted by a mysterious figure. + The egocentric criminal apparently took great pride in their acts, to the point of signing them with a symbol: a stylized smiling face. Your arcology was not the only one under assault by the + machinations of the one the media quickly nicknamed <span style="font-style:italic">the Smiling Man</span>. + </p> + <p> + Despite the sheer damage this criminal did, you cannot help but admire the skill with which every misdeed was performed — the worst white collar crimes of the century, carried out with such elegance that they almost seemed the product of natural laws, rather than masterful manipulation of the digital market. While sifting through the report, $assistant.name remains strangely quiet. "I'm worried, <<= properTitle()>> — this individual seems to be able to penetrate whichever system garners his attention. I... feel vulnerable," _heA says. "It's not something I'm used to." + </p> + <p> + Fortunately you have not been hit directly by this criminal — yet. Still, the repercussions of numerous bankruptcies take their toll on your arcology, whose <span class="red">prosperity suffers.</span> + <<set $arcologies[0].prosperity *= random(80,90) * 0.01>> + </p> + <p id="result"> + <<if $cash >= 10000>> + <div> + <<link "Devote funds to the search for this dangerous criminal">> + <<run cashX(-10000, "event")>> + <<set $investedFunds = 1>> + <<set $relationshipLM++>> + <<set $smilingManProgress++>> + <<replace "#result">> + You devote funds to capture and neutralize the threat. You cannot help but wonder what the end game of this "smiling man" is. Money? Fame? Or is he on an ideological crusade? + <</replace>> + <</link>> + </div> + <div> + <<link "Attempt to contact the mysterious figure">> + <<run cashX(-10000, "event")>> + <<set $investedFunds = 1>> + <<set $relationshipLM += 2>> + <<set $smilingManProgress++>> + <<replace "#result">> + You devote funds to an attempt at communicating with the smiling man. You cannot help but wonder what the end game of this "smiling man" is. Money? Fame? Or is he on an ideological crusade? + <</replace>> + <</link>> + </div> + <div> + <<link "Invest funds to increase the cyber-security of the arcology">> + <<run cashX(-10000, "event")>> + <<set $investedFunds = 1>> + <<set $relationshipLM += random(5,10)>> + <<set $smilingManProgress++>> + <<replace "#result">> + You devote funds to the improvement of the cyber-security of your arcology. You cannot help but wonder what the end game of this "smiling man" is. Money? Fame? Or is he on an ideological crusade? + <</replace>> + <</link>> + </div> + <<else>> + <div> + Not enough funds to take further action. + </div> + <</if>> + <div> + <<link "Ignore the issue">> + <<set $smilingManProgress++>> + <<replace "#result">> + You do not consider this individual a threat. + <</replace>> + <</link>> + </div> + </p> <<elseif $smilingManProgress == 1>> <<set $fcnn.push("...cybersecurity market is booming thanks to a series of recent high-profile attacks...")>> - - <br> - You have just reached your penthouse when your faithful assistant appears in front of you, evidently excited. - "<<= properTitle()>>, I have just received news of a new attack by the Smiling Man. It appears a few hours ago he infiltrated another arcology and caused a catastrophic failure of its power plant. - Between old debts and the loss of value for his shares, the owner went bankrupt in minutes. It seems the Smiling Man managed to keep a small auxiliary generator functioning enough to project a giant holographic picture of his symbol on the arcology's walls. - Say what you will about his actions, but you can't deny he has style... Anyways, this opens up a great opportunity to gain control of the structure for ourselves." - It is indeed a great opportunity, one you cannot resist. You quickly organize the affair and in a few minutes a message reaches your assistant. - <br>"Should I open it?" your assistant asks. You silently nod. - <br>Suddenly the room flashes red, while your assistant fades for half a second. When _heA reappears, _hisA face has been replaced by a stylized smiling face. - <br>"Hello, my dear $PC.birthName. I can call you $PC.birthName, right? I've been keeping an eye on you for so long now, it feels like we're friends! I am terribly sorry for my unannounced visit, but I wanted to meet face to face... well, face to hologram." it says, letting out a childlike giggle. - "I'm sure you're aware of my recent activities around this rock of ours, and, well, to put it simply, it's your turn to contribute to my great project! You'll love it when you see it, I'm sure! By the way, thanks for the offer — it's so nice to see people contribute to a worthy cause so generously! Well, I've taken enough of your time, see you soon!" - <br>The lights flicker once more and an instant later your assistant returns to _hisA usual self. - <br>"I... I — I couldn't stop him! I'm sorry, <<= properTitle()>>." - <br>You waste no time in rushing to the console and checking your finances. It's as you feared, @@.red;you have been robbed.@@ + <p> + You have just reached your penthouse when your faithful assistant appears in front of you, evidently excited. + "<<= properTitle()>>, I have just received news of a new attack by the Smiling Man. It appears a few hours ago he infiltrated another arcology and caused a catastrophic failure of its power plant. + Between old debts and the loss of value for his shares, the owner went bankrupt in minutes. It seems the Smiling Man managed to keep a small auxiliary generator functioning enough to project a giant holographic picture of his symbol on the arcology's walls. + Say what you will about his actions, but you can't deny he has style... Anyways, this opens up a great opportunity to gain control of the structure for ourselves." + It is indeed a great opportunity, one you cannot resist. You quickly organize the affair and in a few minutes a message reaches your assistant. + </p> + <p> + "Should I open it?" your assistant asks. You silently nod. + </p> + <p> + Suddenly the room flashes red, while your assistant fades for half a second. When _heA reappears, _hisA face has been replaced by a stylized smiling face. + </p> + <p> + "Hello, my dear $PC.birthName. I can call you $PC.birthName, right? I've been keeping an eye on you for so long now, it feels like we're friends! I am terribly sorry for my unannounced visit, but I wanted to meet face to face... well, face to hologram." it says, letting out a childlike giggle. + "I'm sure you're aware of my recent activities around this rock of ours, and, well, to put it simply, it's your turn to contribute to my great project! You'll love it when you see it, I'm sure! By the way, thanks for the offer — it's so nice to see people contribute to a worthy cause so generously! Well, I've taken enough of your time, see you soon!" + </p> + <p> + The lights flicker once more and an instant later your assistant returns to _hisA usual self. + </p> + <p> + "I... I — I couldn't stop him! I'm sorry, <<= properTitle()>>." + </p> + <p> + You waste no time in rushing to the console and checking your finances. It's as you feared, <span class="cash.dec">you have been robbed.</span> + </p> <<set _lostCash = Math.clamp(50000 * Math.trunc($week / 20), 50000, 1000000)>> <<if $assistant.power >= 1>> - <br>Fortunately, the computing power available to $assistant.name allowed _himA to - <<if $assistant.power == 1>> - <<set _lostCash -= Math.min(20000, _lostCash)>> - somewhat - <<elseif $assistant.power == 2>> - <<set _lostCash -= Math.min(30000, _lostCash)>> - <<elseif $assistant.power >= 3>> - <<set _lostCash -= Math.min(40000, _lostCash)>> - significantly - <</if>> + <p> + Fortunately, the computing power available to $assistant.name allowed _himA to + <<if $assistant.power == 1>> + <<set _lostCash -= Math.min(20000, _lostCash)>> + somewhat + <<elseif $assistant.power == 2>> + <<set _lostCash -= Math.min(30000, _lostCash)>> + <<elseif $assistant.power >= 3>> + <<set _lostCash -= Math.min(40000, _lostCash)>> + significantly + <</if>> limit the damage. + </p> <</if>> - <<if $secUpgrades.cyberBots == 1>> - <<set _lostCash -= Math.min(30000, _lostCash)>> - The additional cyber defenses acquired and running in the security HQ <<if _lostCash < 200000>>further<</if>> limit the damage. - <</if>> - <<if $investedFunds == 1>> - <<set _lostCash -= Math.min(20000, _lostCash)>> - The funding you dedicated to the Smiling Man case saved some of the assets that would have been otherwise lost. - <</if>> + <p> + <<if $secUpgrades.cyberBots == 1>> + <<set _lostCash -= Math.min(30000, _lostCash)>> + The additional cyber defenses acquired and running in the security HQ <<if _lostCash < 200000>>further<</if>> limit the damage. + <</if>> + <<if $investedFunds == 1>> + <<set _lostCash -= Math.min(20000, _lostCash)>> + The funding you dedicated to the Smiling Man case saved some of the assets that would have been otherwise lost. + <</if>> + </p> <<run cashX(forceNeg(_lostCash), "event")>> - <br> - <br> - <span id="result"> - <br> - <<link ""I want him dead. Now."">> - <<set $relationshipLM-->> - <<set $smilingManProgress++>> - <<replace "#result">> - You command your loyal operatives to double down on the search and elimination of the threat. - <</replace>> - <</link>> - <br> - <<link ""I want him, dead or alive!"">> - <<set $relationshipLM++>> - <<set $smilingManProgress++>> - <<replace "#result">> - You command your loyal operatives to double down on the search and capture of the threat. - <</replace>> - <</link>> - <br> - <<link ""If we don't find him soon, we will regret it."">> - <<set $relationshipLM += 2>> - <<set $smilingManProgress++>> - <<replace "#result">> - You command your loyal operatives to double down on the search and neutralization of the threat. - <</replace>> - <</link>> - <br> - <<link ""He got what he wanted. Hopefully, we will be left in peace."">> - <<set $smilingManProgress++>> - <<set $nextButton = "Continue", $nextLink = "Random Nonindividual Event">> - <<replace "#result">> - You take no further action. Hopefully this ordeal is over. - <</replace>> - <</link>> - </span> + <p id="result"> + <div> + <<link ""I want him dead. Now."">> + <<set $relationshipLM-->> + <<set $smilingManProgress++>> + <<replace "#result">> + You command your loyal operatives to double down on the search and elimination of the threat. + <</replace>> + <</link>> + </div> + <div> + <<link ""I want him, dead or alive!"">> + <<set $relationshipLM++>> + <<set $smilingManProgress++>> + <<replace "#result">> + You command your loyal operatives to double down on the search and capture of the threat. + <</replace>> + <</link>> + </div> + <div> + <<link ""If we don't find him soon, we will regret it."">> + <<set $relationshipLM += 2>> + <<set $smilingManProgress++>> + <<replace "#result">> + You command your loyal operatives to double down on the search and neutralization of the threat. + <</replace>> + <</link>> + </div> + <div> + <<link ""He got what he wanted. Hopefully, we will be left in peace."">> + <<set $smilingManProgress++>> + <<set $nextButton = "Continue", $nextLink = "Random Nonindividual Event">> + <<replace "#result">> + You take no further action. Hopefully this ordeal is over. + <</replace>> + <</link>> + </div> + </p> <<elseif $smilingManProgress == 2>> <<set $fcnn.push("...my money safe the old-fashioned way: I store it all underneath my mattress...")>> - - <br> <<set $smilingManWeek = $week>> - When $assistant.name violently wakes you up, _hisA worried expression can mean only one thing: the Smiling Man had been back. "We were anonymously sent a link to a new website: it's a very simple site, no visuals, no text; only a countdown ticking away. It will reach zero this evening." your assistant says. - This is troubling, yet somewhat exciting. The Smiling Man never failed to cause damage, but his ego had gotten the best of him this time — having time to prepare before their attack will give you a chance to find them. For the rest of the day you do your best to plan, prepare and focus. - <br> - <br>Evening came faster than you anticipated. Your security team was already at full alert, waiting for any signal on the horizon. The die was cast. - <br>Suddenly all the computers in the room begin to act strangely, and then it happened. On all of the screens across the arcology the Smiling Man's icon appears, then every speaker begins broadcasting the same voice, one that you have already heard once before: - <br>"Hello citizens of $arcologies[0].name! I am here on this special day to relay to you a very important message: we find ourselves in very peculiar times, times of strife and suffering! But these are also times of change and regeneration! Indeed, I say humanity itself is regenerating, turning into a new being for which the - ideals of the old world no longer hold meaning. A new blank page from which humanity can begin to prosper again. - <br>Alas, my friends, not all is good, as in this rebirth a great injustice is being perpetrated. If we truly want to ascend to this new form of humanity the old must give way to the new. If we must cleanse our mind of old ideas, our world must cleanse itself of them as well. - It's to fix this injustice, that I worked so hard all this time! To cleanse the world of the old, we must get rid of our precious, precious data. At the end of this message every digital device will see its memory erased, every archive cleaned, every drive deleted. - <br>It will be a true rebirth! A true new beginning! No longer will the chains of the past keep humanity anchored!" - <br>The voice stopped for a second. - <br>"Have a good day," it simply concluded. - <br>Then it happened. - <br>In little more than seconds all the data collected in the years past vanished. It's a disaster. - The vast majority of currency is digital, so the actions of the Smiling Man have a devastating effect on the money supply. - <<if $cash < 0>> - Luckily for you this means that your @@.yellowgreen;debt is reduced.@@ - <<else>> - Unfortunately this means that your @@.red;cash reserves are gutted.@@ - <</if>> - <<run cashX(($cash * 0.2)-$cash, "event")>> - You are not the only one affected by this however. @@.red;The economy of the entire world is severely affected@@ by the loss of vast quantities of currency. Who knows how long will it take for the global economy to recover. - <<set $globalCrisisWeeks = random(8,16)>> - Trade is @@.red;severely affected.@@ - <<set $SecExp.core.trade *= 0.2>> - With the loss of so much information, most of your accomplishments are simply forgotten, so @@.red;your reputation suffers.@@ - <<run repX(($rep * 0.6)-$rep, "event")>> + <p style="margin-bottom: 2em"> + When $assistant.name violently wakes you up, _hisA worried expression can mean only one thing: the Smiling Man had been back. "We were anonymously sent a link to a new website: it's a very simple site, no visuals, no text; only a countdown ticking away. It will reach zero this evening." your assistant says. + This is troubling, yet somewhat exciting. The Smiling Man never failed to cause damage, but his ego had gotten the best of him this time — having time to prepare before their attack will give you a chance to find them. For the rest of the day you do your best to plan, prepare and focus. + </p> - <<if $arcologies[0].ownership >= 60>> - <<if $SecExp.core.authority <= 10000>> - <<set _cells = $building.findCells(cell => cell.canBeSold())>> - <<set jsEither(_cells).owner = 0>> - Vast amount of data relative to the ownership of the arcology is lost. You lost all legal claims to one of the sectors. + <p> + Evening came faster than you anticipated. Your security team was already at full alert, waiting for any signal on the horizon. The die was cast. + </p> + <p> + Suddenly all the computers in the room begin to act strangely, and then it happened. On all of the screens across the arcology the Smiling Man's icon appears, then every speaker begins broadcasting the same voice, one that you have already heard once before: + </p> + <p> + "Hello citizens of $arcologies[0].name! I am here on this special day to relay to you a very important message: we find ourselves in very peculiar times, times of strife and suffering! But these are also times of change and regeneration! Indeed, I say humanity itself is regenerating, turning into a new being for which the + ideals of the old world no longer hold meaning. A new blank page from which humanity can begin to prosper again. + </p> + <p> + Alas, my friends, not all is good, as in this rebirth a great injustice is being perpetrated. If we truly want to ascend to this new form of humanity the old must give way to the new. If we must cleanse our mind of old ideas, our world must cleanse itself of them as well. + It's to fix this injustice, that I worked so hard all this time! To cleanse the world of the old, we must get rid of our precious, precious data. At the end of this message every digital device will see its memory erased, every archive cleaned, every drive deleted. + </p> + <p> + It will be a true rebirth! A true new beginning! No longer will the chains of the past keep humanity anchored!" + </p> + <p> + The voice stopped for a second. + </p> + <p> + "Have a good day," it simply concluded. + </p> + <p> + Then it happened. + </p> + <p> + In little more than seconds all the data collected in the years past vanished. It's a disaster. + The vast majority of currency is digital, so the actions of the Smiling Man have a devastating effect on the money supply. + <<if $cash < 0>> + Luckily for you this means that your <span class="cash.inc">debt is reduced.</span> <<else>> - Vast amount of data relative to the ownership of the arcology is lost. You would've run the risk of losing ownership of one of the sectors, but fortunately your authority is so high your citizens do not dare question your claims even in the absence of a valid legal case. + Unfortunately this means that your <span class="cash.dec">cash reserves are gutted.</span> <</if>> - <</if>> - <<if $secUpgrades.coldstorage > 3>> - Your cold storage facility has ensured that the Smiling Man's destruction of the primary archives was unable to damage the security of your arcology. - <<elseif $secUpgrades.coldstorage == 0>> - Your security department sees its archives butchered by the Smiling Man. Almost all data on criminals, citizens, and operations are lost. The @@.red;security of the arcology is greatly reduced.@@ Criminals, on the other hand, with their past erased, cannot wait to join this new world, so @@.red;crime will inevitably increase.@@ - <<set $SecExp.security.cap = Math.clamp($SecExp.security.cap * 0.2,0,100)>> - <<set $SecExp.core.crimeLow = Math.clamp($SecExp.core.crimeLow * 1.5, 20,100)>> - <</if>> + <<run cashX(($cash * 0.2)-$cash, "event")>> + You are not the only one affected by this however. <span class="red">The economy of the entire world is severely affected</span> by the loss of vast quantities of currency. Who knows how long will it take for the global economy to recover. + <<set $globalCrisisWeeks = random(8,16)>> + Trade is <span class="red">severely affected.</span> + <<set $SecExp.core.trade *= 0.2>> + With the loss of so much information, most of your accomplishments are simply forgotten, so <span class="reputation.dec">your reputation suffers.</span> + <<run repX(($rep * 0.6)-$rep, "event")>> - <br>A short, meek man approaches you with a weak smile. "Not all is lost, <<= properTitle()>>. We have a lead on him — he is here, in $arcologies[0].name." - <br>Despite the bleak situation, you cannot help but smile back. - <br> - <br> - <span id="result"> - <br> - <<link ""Eliminate the threat, once and for all."">> - <<set $relationshipLM-->> - <<set $smilingManProgress++>> - <<replace "#result">> - You command your loyal operatives to prepare for a manhunt. - <</replace>> - <</link>> - <br> - <<link ""Bring him to me."">> - <<set $relationshipLM++>> - <<set $smilingManProgress++>> - <<replace "#result">> - You command your loyal operatives to prepare for a manhunt. - <</replace>> - <</link>> - <br> - <<link ""Such skill on my side would be a great boon. Find him."">> - <<set $relationshipLM += 2>> - <<set $smilingManProgress++>> - <<replace "#result">> - You command your loyal operatives to prepare for a manhunt. - <</replace>> - <</link>> - <br> - <<link ""He finally got what he always wanted. Let him have his victory, we have better things to do."">> - <<set $smilingManProgress++>> - <<set $nextButton = "Continue", $nextLink = "Random Nonindividual Event">> - <<replace "#result">> - You take no further action. Hopefully this ordeal is finally over. - <</replace>> - <</link>> - </span> + <<if $arcologies[0].ownership >= 60>> + <<if $SecExp.core.authority <= 10000>> + <<set _cells = $building.findCells(cell => cell.canBeSold())>> + <<set jsEither(_cells).owner = 0>> + Vast amount of data relative to the ownership of the arcology is lost. You lost all legal claims to one of the sectors. + <<else>> + Vast amount of data relative to the ownership of the arcology is lost. You would've run the risk of losing ownership of one of the sectors, but fortunately your authority is so high your citizens do not dare question your claims even in the absence of a valid legal case. + <</if>> + <</if>> + <<if $secUpgrades.coldstorage > 3>> + Your cold storage facility has ensured that the Smiling Man's destruction of the primary archives was unable to damage the security of your arcology. + <<elseif $secUpgrades.coldstorage == 0>> + Your security department sees its archives butchered by the Smiling Man. Almost all data on criminals, citizens, and operations are lost. The <span class="red">security of the arcology is greatly reduced.</span> Criminals, on the other hand, with their past erased, cannot wait to join this new world, so <span class="red">crime will inevitably increase.</span> + <<set $SecExp.security.cap = Math.clamp($SecExp.security.cap * 0.2,0,100)>> + <<set $SecExp.core.crimeLow = Math.clamp($SecExp.core.crimeLow * 1.5, 20,100)>> + <</if>> + </p> + <p> + A short, meek man approaches you with a weak smile. "Not all is lost, <<= properTitle()>>. We have a lead on him — he is here, in $arcologies[0].name." + </p> + <p> + Despite the bleak situation, you cannot help but smile back. + </p> + <p id="result"> + <div> + <<link ""Eliminate the threat, once and for all."">> + <<set $relationshipLM-->> + <<set $smilingManProgress++>> + <<replace "#result">> + You command your loyal operatives to prepare for a manhunt. + <</replace>> + <</link>> + </div> + <div> + <<link ""Bring him to me."">> + <<set $relationshipLM++>> + <<set $smilingManProgress++>> + <<replace "#result">> + You command your loyal operatives to prepare for a manhunt. + <</replace>> + <</link>> + </div> + <div> + <<link ""Such skill on my side would be a great boon. Find him."">> + <<set $relationshipLM += 2>> + <<set $smilingManProgress++>> + <<replace "#result">> + You command your loyal operatives to prepare for a manhunt. + <</replace>> + <</link>> + </div> + <div> + <<link ""He finally got what he always wanted. Let him have his victory, we have better things to do."">> + <<set $smilingManProgress++>> + <<set $nextButton = "Continue", $nextLink = "Random Nonindividual Event">> + <<replace "#result">> + You take no further action. Hopefully this ordeal is finally over. + <</replace>> + <</link>> + </div> + </p> <<elseif $smilingManProgress == 3>> <<set $nextButton = " ">> <<set $fcnn.push("...sometimes high-tech problems have low-tech solutions. Back to you in the...")>> @@ -283,106 +331,136 @@ <<set $activeSlave.clothes = "a military uniform">> /*closest thing to commie/punk we have at the moment*/ <<setLocalPronouns $activeSlave>> - <br> - The day has come to finally put an end to this story. Your men are ready to go, waiting only on your signal. You quickly don your protective gear and proceed down the busy streets of your arcology. - You carefully planned the day so that nothing could exit the arcology without being scanned at least three times and poked twice. The Smiling Man has no escape. - <br>After a short walk you are in front of the criminal's lair, a rundown old apartment in a scarcely populated part of the arcology. You give the order to breach and your men rush inside without problems. - After a couple of seconds pass without a single noise coming from the apartment, you begin to worry. Then you hear the captain - - <span id="continue"> + <p> + The day has come to finally put an end to this story. Your men are ready to go, waiting only on your signal. You quickly don your protective gear and proceed down the busy streets of your arcology. + You carefully planned the day so that nothing could exit the arcology without being scanned at least three times and poked twice. The Smiling Man has no escape. + </p> + <p> + After a short walk you are in front of the criminal's lair, a rundown old apartment in a scarcely populated part of the arcology. You give the order to breach and your men rush inside without problems. + After a couple of seconds pass without a single noise coming from the apartment, you begin to worry. Then you hear the captain - <<link "calling you inside.">> - <<replace "#continue">> - /* 000-250-006 */ - <<if $seeImages == 1>> - <div class="imageRef medImg"><<= SlaveArt($activeSlave, 2, 0)>></div> - <</if>> - /* 000-250-006 */ - calling you inside. - <br><br>"So it was you to find me first. - <<if $relationshipLM > 2>> - I was hoping you would be the one! - <<else>> - I expected you would be the one. - <</if>> - Well, I hope I'm everything you expected," you hear a voice say. Despite recognizing it, you struggle to convince yourself that the little $girl in front of you is indeed the famous criminal mastermind. - <br>"As you can see, I have no intention of escaping. I knew my life was over the second my plan went into effect. I accepted my end a long time ago, so feel free to do your worst; my life has already ended in triumph." - <br>You evaluate the situation: the burning desire of vengeance for all the damage that little twerp caused is hard to ignore, but equally so is the admiration for $his skill and determination. Indeed, $he would be a great addition to your court, as a free individual or not. - - <span id="result"> <br><br> - - <<link "Offer $him a new life">> - <<set $smilingManFate = 0>> - <<replace "#result">> - <br>You decide it would be criminally wasteful to throw away such talent. You offer $him a new life at your side. $His expertise will surely guarantee safety, if not supremacy, to your arcology in cyberspace, while $he will have safety and luxury in the physical world. - <br> - <<link "Continue">> - <<set $smilingManProgress++>> - <<goto "secExpSmilingMan">> - <</link>> - <</replace>> - <</link>> + <span id="continue"> + <<link "calling you inside.">> + <<replace "#continue">> + calling you inside. + <p> + <<if $seeImages == 1>> + <div class="imageRef medImg"><<= SlaveArt($activeSlave, 2, 0)>></div> + <</if>> + "So it was you to find me first. + <<if $relationshipLM > 2>> + I was hoping you would be the one! + <<else>> + I expected you would be the one. + <</if>> + Well, I hope I'm everything you expected," you hear a voice say. Despite recognizing it, you struggle to convince yourself that the little $girl in front of you is indeed the famous criminal mastermind. + </p> + <p style="margin-bottom: 2em"> + "As you can see, I have no intention of escaping. I knew my life was over the second my plan went into effect. I accepted my end a long time ago, so feel free to do your worst; my life has already ended in triumph." + </p> + <p> + You evaluate the situation: the burning desire of vengeance for all the damage that little twerp caused is hard to ignore, but equally so is the admiration for $his skill and determination. Indeed, $he would be a great addition to your court, as a free individual or not. + </p> - <br> <<link "Make $him pay">> - <<set $smilingManFate = 1>> - <<replace "#result">> - <br>You decide to end $his pitiful life. $He has crossed the wrong master of the new world $he worked so hard to create. No mercy was asked for and no mercy will be given. - <br> - <<link "Continue">> - <<set $smilingManProgress++>> - <<goto "secExpSmilingMan">> - <</link>> - <</replace>> - <</link>> - <br> <<link "Enslave $him">> - <<set $smilingManFate = 2>> - <<replace "#result">> - <br>You decide to enslave the $girl. $His skill may be great, but $his crimes are equally so, which makes it all the sweeter to turn $him into an obedient little toy to play with. - <br> - <<link "Continue">> - <<set $smilingManProgress++>> - <<goto "secExpSmilingMan">> - <</link>> - <</replace>> - <</link>> - </span> - <</replace>> /* closes replace "#continue" */ - <</link>> - </span> /* closes id="continue" */ + <p id="result"> + <div> + <<link "Offer $him a new life">> + <<set $smilingManFate = 0>> + <<replace "#result">> + <div> + You decide it would be criminally wasteful to throw away such talent. You offer $him a new life at your side. $His expertise will surely guarantee safety, if not supremacy, to your arcology in cyberspace, while $he will have safety and luxury in the physical world. + </div> + <div> + <<link "Continue">> + <<set $smilingManProgress++>> + <<goto "secExpSmilingMan">> + <</link>> + </div> + <</replace>> + <</link>> + </div> + <div> + <<link "Make $him pay">> + <<set $smilingManFate = 1>> + <<replace "#result">> + <div> + You decide to end $his pitiful life. $He has crossed the wrong master of the new world $he worked so hard to create. No mercy was asked for and no mercy will be given. + </div> + <div> + <<link "Continue">> + <<set $smilingManProgress++>> + <<goto "secExpSmilingMan">> + <</link>> + </div> + <</replace>> + <</link>> + </div> + <div> + <<link "Enslave $him">> + <<set $smilingManFate = 2>> + <<replace "#result">> + <div> + You decide to enslave the $girl. $His skill may be great, but $his crimes are equally so, which makes it all the sweeter to turn $him into an obedient little toy to play with. + </div> + <div> + <<link "Continue">> + <<set $smilingManProgress++>> + <<goto "secExpSmilingMan">> + <</link>> + </div> + <</replace>> + <</link>> + </div> + </p> + <</replace>> /* closes replace "#continue" */ + <</link>> + </span> /* closes id="continue" */ + </p> <<else>> <<if $smilingManFate < 2>> /* 000-250-006 */ <<if $seeImages == 1>> - <div class="imageRef medImg"><<= SlaveArt($activeSlave, 2, 0)>></div> + <div class="imageRef medImg"><<= SlaveArt($activeSlave, 2, 0)>></div> <</if>> /* 000-250-006 */ <<if $smilingManFate == 0>> - The $girl asks for a few minutes to think about your offer, - <<if $relationshipLM >= 4>> - but $he quickly comes to terms with the situation and accepts. - <<else>> - and after some time $he reluctantly accepts. - <</if>> - In the following weeks $he will get acquainted with the security network of the arcology and work to protect $his new home in the new world $he has created. - The world will never find out the truth of the Smiling Man and his legend will only grow with time, outliving his creator and maybe even $his new employer. - <br>The collaboration of the ex-Smiling Man permanently increases @@.green;security and the rate of prosperity growth.@@ @@.limegreen;Cash will be also provided,@@ but you're better off not knowing the sources. + <p> + The $girl asks for a few minutes to think about your offer, + <<if $relationshipLM >= 4>> + but $he quickly comes to terms with the situation and accepts. + <<else>> + and after some time $he reluctantly accepts. + <</if>> + In the following weeks $he will get acquainted with the security network of the arcology and work to protect $his new home in the new world $he has created. + The world will never find out the truth of the Smiling Man and his legend will only grow with time, outliving his creator and maybe even $his new employer. + </p> + <p> + The collaboration of the ex-Smiling Man permanently increases <span class="green">security and the rate of prosperity growth.</span> <span class="cash.inc">Cash will be also provided,</span> but you're better off not knowing the sources. + </p> <<elseif $smilingManFate == 1>> <<set $activeSlave.clothes = "no clothing">> - For such a criminal a simple execution is not enough. You order the $girl captured and crucified outside the city, with a mask resembling $his famous symbol. Your men quickly obey. $He never once shows sign of pain or fear, remaining stoic and proud to the end. - Once $his life ends, you order a statue erected in commemoration of the death of the Smiling Man. From this day forward the statue of the crucified criminal will adorn your arcology and his legend will be forever entangled with yours. - <br>Having dealt with the Smiling Man will provide @@.green;a large boost to your reputation, as well as a moderate amount of reputation each week.@@ + <p> + For such a criminal a simple execution is not enough. You order the $girl captured and crucified outside the city, with a mask resembling $his famous symbol. Your men quickly obey. $He never once shows sign of pain or fear, remaining stoic and proud to the end. + Once $his life ends, you order a statue erected in commemoration of the death of the Smiling Man. From this day forward the statue of the crucified criminal will adorn your arcology and his legend will be forever entangled with yours. + </p> + <p> + Having dealt with the Smiling Man will provide <span class="reputation.inc">a large boost to your reputation, as well as a moderate amount of reputation each week.</span> + </p> <<run repX(10000, "architecture")>> <</if>> <<elseif $smilingManFate == 2>> <<set $activeSlave.clothes = "no clothing">> - Your men move to immobilize $him. Terror flashes through $his eyes for - <<if $relationshipLM >= 4>> - a second, but $he quickly recovers $his usual demeanor. - <<else>> - a second — $he barely manages to recover $his usual demeanor. - <</if>> - <br><br> + <p style="margin-bottom: 2em"> + Your men move to immobilize $him. Terror flashes through $his eyes for + <<if $relationshipLM >= 4>> + a second, but $he quickly recovers $his usual demeanor. + <<else>> + a second — $he barely manages to recover $his usual demeanor. + <</if>> + </p> <<includeDOM App.Desc.longSlave(V.activeSlave)>> - <br> <<include "New Slave Intro">> + <p> + <<include "New Slave Intro">> + </p> <</if>> <</if>> diff --git a/src/Mods/SpecialForce/Firebase.tw b/src/Mods/SpecialForce/Firebase.tw index 9e5a96b6d74d621d862326690d9a411187c23bdc..0c6badff365ef2eba86ec341c323161047f8e5af 100644 --- a/src/Mods/SpecialForce/Firebase.tw +++ b/src/Mods/SpecialForce/Firebase.tw @@ -52,12 +52,13 @@ <div id="Actions" class="tabcontent"> <div class="content"> - <<if $SF.MercCon.CanAttend === 0>> - <br><br>Her expression changes as something jogs her memory. "Before we begin <<if $SF.Colonel.Core == "brazen">><<= properTitle()>><<else>>boss<</if>>, back when I was a merc me and a couple of my old friends would have a meetup every several months. Drinking, fucking, drugs... a little poker. It eventually grew into a whole thing, and now we bring our latest and greatest toys to show off, maybe make some money off selling the schematics. I'd like to continue going, for old times' sake." - <br>[[Grant leave|Firebase][$SF.MercCon.CanAttend = 1]] - <br>[[Request she remain on base|Firebase][$SF.MercCon.CanAttend = -2]]<br> - <<elseif $SF.MercCon.History >= 1 && ((Math.trunc($week/24) === ($week/24)) && $SF.MercCon.CanAttend === -1)>> - <br><br>Her expression changes as something jogs her memory. "Before we begin <<if $SF.Colonel.Core == "brazen">><<= properTitle()>><<else>>boss<</if>>, that biannual merc meetup has come around again. You've already gave me leave to attend, but I just wanted to be sure I'm still clear to go." + <<if $SF.MercCon.CanAttend === 0 || $SF.MercCon.History >= 1 && ((Math.trunc($week/24) === ($week/24)) && $SF.MercCon.CanAttend === -1)>> + Her expression changes as something jogs her memory. "Before we begin <<if $SF.Colonel.Core == "brazen">><<= properTitle()>><<else>>boss<</if>> + <<if $SF.MercCon.CanAttend === 0>> + , back when I was a merc me and a couple of my old friends would have a meetup every several months. Drinking, fucking, drugs... a little poker. It eventually grew into a whole thing, and now we bring our latest and greatest toys to show off, maybe make some money off selling the schematics. I'd like to continue going, for old times' sake." + <<elseif $SF.MercCon.History >= 1 && ((Math.trunc($week/24) === ($week/24)) && $SF.MercCon.CanAttend === -1)>> + , that biannual merc meetup has come around again. You've already gave me leave to attend, but I just wanted to be sure I'm still clear to go." + <</if>> <br>[[Grant leave|Firebase][$SF.MercCon.CanAttend = 1]] <br>[[Request she remain on site|Firebase][$SF.MercCon.CanAttend = -2]]<br> <</if>> @@ -108,4 +109,4 @@ <div id="FS" class="tabcontent"> <div class="content"> <<= App.SF.fsIntegration()>> </div> </div> -<</if>> \ No newline at end of file +<</if>> diff --git a/src/Mods/SpecialForce/FirebaseTour.tw b/src/Mods/SpecialForce/FirebaseTour.tw index 82125801272756a23aac444b4d1387fd78b6da3b..eea27b8dc25379cf0015749354a54c18cda1f3a0 100644 --- a/src/Mods/SpecialForce/FirebaseTour.tw +++ b/src/Mods/SpecialForce/FirebaseTour.tw @@ -105,13 +105,11 @@ As you approach, The Colonel <<= App.SF.fsIntegration('OptionsFlavourText',65)>> <</if>> -<<if App.SF.unlocked.hangar()>> - <<if _H > 0>> <br><br>''Hangar:'' - <<if $SF.Squad.AA+$SF.Squad.TA > 0>> <br> ''Airforce:'' - <<= App.SF.UnitText('AA')>> <<= App.SF.UnitText('TA')>> - <</if>> - <<= App.SF.UnitText('SP')>> <<= App.SF.UnitText('GunS')>> +<<if App.SF.unlocked.hangar()>> <br><br>''Hangar:'' + <<if $SF.Squad.AA+$SF.Squad.TA > 0>> <br> ''Airforce:'' + <<= App.SF.UnitText('AA')>> <<= App.SF.UnitText('TA')>> <</if>> + <<= App.SF.UnitText('SP')>> <<= App.SF.UnitText('GunS')>> <<= App.SF.fsIntegration('OptionsFlavourText',70)>> <<= App.SF.fsIntegration('OptionsFlavourText',75)>> <</if>> diff --git a/src/Mods/SpecialForce/SpecialForce.js b/src/Mods/SpecialForce/SpecialForce.js index ba69c9cc2cde609b346a4fcd84cd0b3132d175e1..dc53b2c38a1a24b3924d8d15b79f41dc01696d13 100644 --- a/src/Mods/SpecialForce/SpecialForce.js +++ b/src/Mods/SpecialForce/SpecialForce.js @@ -47,7 +47,7 @@ App.SF.unlocked = (function() { function garage(mode = 'standard') { if (V.SF.Squad.Firebase >= 1 && V.terrain !== "oceanic") { - if (V.SF.Squad.AV + V.SF.Squad.TV + V.SF.Squad.PGT > 0 || mode === 'cheat') { + if (V.SF.Squad.AV + V.SF.Squad.TV + V.SF.Squad.PGT >= 0 || mode === 'cheat') { return true; } } @@ -56,7 +56,7 @@ App.SF.unlocked = (function() { function hangar(mode = 'standard') { if (V.SF.Squad.Firebase >= 4) { - if (V.SF.Squad.AA + V.SF.Squad.TA + V.SF.Squad.SpacePlane + V.SF.Squad.GunS > 0 || mode === 'cheat') { + if (V.SF.Squad.AA + V.SF.Squad.TA + V.SF.Squad.SpacePlane + V.SF.Squad.GunS >= 0 || mode === 'cheat') { return true; } } @@ -65,7 +65,7 @@ App.SF.unlocked = (function() { function launchBay(mode = 'standard') { if (secondTier()) { - if (V.SF.Squad.Satellite + V.SF.Squad.GiantRobot + V.SF.Squad.MissileSilo > 0 || mode === 'cheat') { + if (V.SF.Squad.Satellite + V.SF.Squad.GiantRobot + V.SF.Squad.MissileSilo >= 0 || mode === 'cheat') { return true; } } @@ -74,7 +74,7 @@ App.SF.unlocked = (function() { function navalYard(mode = 'standard') { if (secondTier() && (V.terrain === "oceanic" || V.terrain === "marine")) { - if (V.SF.Squad.AircraftCarrier + V.SF.Squad.Sub + V.SF.Squad.HAT > 0 || mode === 'cheat') { + if (V.SF.Squad.AircraftCarrier + V.SF.Squad.Sub + V.SF.Squad.HAT >= 0 || mode === 'cheat') { return true; } } diff --git a/src/Mods/SpecialForce/Upgrades.tw b/src/Mods/SpecialForce/Upgrades.tw index 539360722e394426fea40ade9708c406d31a3b4b..bcb3527cc9bdc22e51b333191a9b8a4a7d9efceb 100644 --- a/src/Mods/SpecialForce/Upgrades.tw +++ b/src/Mods/SpecialForce/Upgrades.tw @@ -1,9 +1,8 @@ :: Upgrades [nobr] -<br>Which facility or equipment do you wish to upgrade this week? <br> +<<set _fullyUpgraded = []>> <br>Which facility or equipment do you wish to upgrade this week? <br> -<<set _FU = App.SF.upgrades.currentUnitMax('Firebase')>> -<<if $SF.Squad.Firebase < _FU>> +<<if $SF.Squad.Firebase < App.SF.upgrades.currentUnitMax('Firebase')>> <<set _cF = App.SF.UpgradeCost(100000,$SF.Squad.Firebase)>> <<if $cash >= _cF>> <br> [[Upgrade Firebase|Firebase][$SF.Upgrade = 1, $SF.Colonel.Talk += 1, $SF.Squad.Firebase++, cashX(-(_cF), "specialForces")]] @@ -11,12 +10,11 @@ //Cannot afford to upgrade the Firebase.// <</if>> //Costs @@.red;<<print cashFormat(_cF)>>@@// <span style="float:right;"> <<print App.SF.progress($SF.Squad.Firebase)>> </span> <br> -<<elseif $SF.Squad.Firebase === _FU>> - //The Firebase has been fully upgraded.// <br> +<<elseif $SF.Squad.Firebase === 10>> + <<set _fullyUpgraded.push('Firebase')>> <</if>> -<<set _AU = App.SF.upgrades.currentUnitMax('Armoury')>> -<<if $SF.Squad.Armoury < _AU>> +<<if $SF.Squad.Armoury < App.SF.upgrades.currentUnitMax('Armoury')>> <<set _cA = App.SF.UpgradeCost(40000,$SF.Squad.Armoury)>> <<if $cash >= _cA>> [[Upgrade Armory|Firebase][$SF.Upgrade = 1, $SF.Colonel.Talk += 1, $SF.Squad.Armoury++, cashX(-(_cA), "specialForces")]] @@ -24,12 +22,11 @@ //Cannot afford to upgrade the Armory.// <</if>> //Costs @@.red;<<print cashFormat(_cA)>>@@// <span style="float:right;"> <<print App.SF.progress($SF.Squad.Armoury)>> </span> <br> -<<elseif $SF.Squad.Armoury === _AU>> - //The Armory has been fully upgraded.// <br> +<<elseif $SF.Squad.Armoury === 10>> + <<set _fullyUpgraded.push('Armory')>> <</if>> -<<set _DrugsU = App.SF.upgrades.currentUnitMax('Drugs')>> -<<if $SF.Squad.Drugs < _DrugsU>> +<<if $SF.Squad.Drugs < App.SF.upgrades.currentUnitMax('Drugs')>> <<set _cDrugs = App.SF.UpgradeCost(40000,$SF.Squad.Drugs)>> <<if $cash >= _cDrugs>> [[Upgrade Drug Lab|Firebase][$SF.Upgrade = 1, $SF.Colonel.Talk += 1, $SF.Squad.Drugs++, cashX(-(_cDrugs), "specialForces")]] @@ -37,12 +34,11 @@ //Cannot afford to upgrade the Drug Lab.// <</if>> //Costs @@.red;<<print cashFormat(_cDrugs)>>@@// <span style="float:right;"> <<print App.SF.progress($SF.Squad.Drugs)>> </span> <br> -<<elseif $SF.Squad.Drugs === _DrugsU>> - //The Drug Lab has been fully upgraded.// <br> +<<elseif $SF.Squad.Drugs === 10>> + <<set _fullyUpgraded.push('Drug Lab')>> <</if>> -<<set _DU = App.SF.upgrades.currentUnitMax('Drones')>> -<<if $SF.Squad.Firebase >= 2 && $SF.Squad.Drones < _DU>> +<<if $SF.Squad.Firebase >= 2 && $SF.Squad.Drones < App.SF.upgrades.currentUnitMax('Drones')>> <<set _cDrones = App.SF.UpgradeCost(45000,$SF.Squad.Drones)>> <<if $cash >= _cDrones>> [[Upgrade Drone Bay|Firebase][$SF.Upgrade = 1, $SF.Colonel.Talk += 1, $SF.Squad.Drones++, cashX(-(_cDrones), "specialForces")]] @@ -50,14 +46,13 @@ //Cannot afford to upgrade the Drone Bay.// <</if>> //Costs @@.red;<<print cashFormat(_cDrones)>>@@// <span style="float:right;"> <<print App.SF.progress($SF.Squad.Drones)>> </span> <br> -<<elseif $SF.Squad.Drones === _DU>> - //The Drone Bay has been fully upgraded.// <br> +<<elseif $SF.Squad.Drones === 10>> + <<set _fullyUpgraded.push('Drone Bay')>> <</if>> <<if App.SF.unlocked.garage()>> <br>''Garage''<br> <div style="margin-left:2em"> - <<set _AVU = App.SF.upgrades.currentUnitMax('AV')>> - <<if $SF.Squad.AV < _AVU>> + <<if $SF.Squad.AV < App.SF.upgrades.currentUnitMax('AV')>> <<set _cAV = App.SF.UpgradeCost(60000,$SF.Squad.AV)>> <<if $cash >= _cAV>> [[Upgrade Attack Vehicle Fleet|Firebase][$SF.Upgrade = 1, $SF.Colonel.Talk += 1, $SF.Squad.AV++, cashX(-(_cAV), "specialForces")]] @@ -65,14 +60,13 @@ //Cannot afford to upgrade the Attack Vehicle Fleet.// <</if>> //Costs @@.red;<<print cashFormat(_cAV)>>@@// <span style="float:right;"> <<print App.SF.progress($SF.Squad.AV)>> </span> <br> - <<elseif $SF.Squad.AV === _AVU>> - //The Attack Vehicle Fleet has been fully upgraded.// <br> + <<elseif $SF.Squad.AV === 10>> + <<set _fullyUpgraded.push('Attack Vehicle Fleet')>> <</if>> </div> <div style="margin-left:2em"> - <<set _TVU = App.SF.upgrades.currentUnitMax('TV')>> - <<if $SF.Squad.TV < _TVU>> + <<if $SF.Squad.TV < App.SF.upgrades.currentUnitMax('TV')>> <<set _cTV = App.SF.UpgradeCost(60000,$SF.Squad.TV)>> <<if $cash >= _cTV>> [[Upgrade Transport Vehicle Fleet|Firebase][$SF.Upgrade = 1, $SF.Colonel.Talk += 1, $SF.Squad.TV++, cashX(-(_cTV), "specialForces")]] @@ -80,8 +74,8 @@ //Cannot afford to upgrade Transport Vehicle Fleet.// <</if>> //Costs @@.red;<<print cashFormat(_cTV)>>@@// <span style="float:right;"> <<print App.SF.progress($SF.Squad.TV)>> </span> <br> - <<elseif $SF.Squad.TV === _TVU>> - //The Transport Vehicle Fleet has been fully upgraded.// <br> + <<elseif $SF.Squad.TV === 10>> + <<set _fullyUpgraded.push('Transport Vehicle Fleet')>> <</if>> </div> @@ -98,15 +92,14 @@ <<elseif $SF.Squad.PGT === _PGTU && $PC.skill.warfare < 75>> //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print App.SF.progress($SF.Squad.PGT)>> </span> <br> <<elseif $SF.Squad.PGT === _PGTU>> - //The Prototype Goliath Tank has been fully upgraded.// <br> + <<set _fullyUpgraded.push('Prototype Goliath Tank')>> <</if>> </div> <</if>> /*Closes garage.*/ <<if App.SF.unlocked.hangar()>>''Hangar''<br> <div style="margin-left:2em"> - <<set _AAU = App.SF.upgrades.currentUnitMax('AA')>> - <<if $SF.Squad.AA < _AAU>> + <<if $SF.Squad.AA < App.SF.upgrades.currentUnitMax('AA')>> <<set _cAA = App.SF.UpgradeCost(70000,$SF.Squad.AA)>> <<if $cash >= _cAA>> [[Upgrade Attack Aircraft Fleet|Firebase][$SF.Upgrade = 1, $SF.Colonel.Talk += 1, $SF.Squad.AA++, cashX(-(_cAA), "specialForces")]] @@ -114,14 +107,13 @@ //Cannot afford to upgrade Attack Aircraft Fleet.// <</if>> //Costs @@.red;<<print cashFormat(_cAA)>>@@// <span style="float:right;"> <<print App.SF.progress($SF.Squad.AA)>> </span> <br> - <<elseif $SF.Squad.AA === _AAU>> - //The Attack Aircraft Fleet has been fully upgraded.// <br> + <<elseif $SF.Squad.AA === 10>> + <<set _fullyUpgraded.push('Attack Aircraft Fleet')>> <</if>> </div> <div style="margin-left:2em"> - <<set _TAU = App.SF.upgrades.currentUnitMax('TA')>> - <<if $SF.Squad.TA < _TAU>> + <<if $SF.Squad.TA < App.SF.upgrades.currentUnitMax('TA')>> <<set _cTA = App.SF.UpgradeCost(70000,$SF.Squad.TA)>> <<if $cash >= _cTA>> [[Upgrade Transport Aircraft Fleet|Firebase][$SF.Upgrade = 1, $SF.Colonel.Talk += 1, $SF.Squad.TA++, cashX(-(_cTA), "specialForces")]] @@ -129,8 +121,8 @@ //Cannot afford to upgrade the Transport Aircraft Fleet.// <</if>> //Costs @@.red;<<print cashFormat(_cTA)>>@@// <span style="float:right;"> <<print App.SF.progress($SF.Squad.TA)>> </span> <br> - <<elseif $SF.Squad.TA === _TAU>> - //The Transport Aircraft Fleet has been fully upgraded.// <br> + <<elseif $SF.Squad.TA === 10>> + <<set _fullyUpgraded.push('Transport Aircraft Fleet')>> <</if>> </div> @@ -147,7 +139,7 @@ <<elseif $SF.Squad.SpacePlane === _SPU && $PC.skill.warfare < 75>> //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print App.SF.progress($SF.Squad.SpacePlane)>> </span> <br> <<elseif $SF.Squad.SpacePlane === _SPU>> - //The Spaceplane has been fully upgraded.// <br> + <<set _fullyUpgraded.push('Spaceplane')>> <</if>> </div> @@ -164,7 +156,7 @@ <<elseif $SF.Squad.GunS === _GunSU && $PC.skill.warfare < 75>> //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print App.SF.progress($SF.Squad.GunS)>> </span> <br> <<elseif $SF.Squad.GunS === _GunSU>> - //The Gunship has been fully upgraded.// <br> + <<set _fullyUpgraded.push('Gunship')>> <</if>> </div> <</if>> /*Closes hangar.*/ @@ -183,7 +175,7 @@ <<elseif $SF.Squad.Satellite === _SatU && $PC.skill.warfare < 75>> //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print App.SF.progress($SF.Squad.Satellite)>> </span> <br> <<else>> - //The Satellite has been fully upgraded.// <br> + <<set _fullyUpgraded.push('Satellite')>> <</if>> </div> @@ -201,7 +193,7 @@ <<elseif $SF.Squad.GiantRobot === _GRU && $PC.skill.warfare < 75>> //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print App.SF.progress($SF.Squad.GiantRobot)>> </span> <br> <<else>> - //The Giant Robot has been fully upgraded.// <br> + <<set _fullyUpgraded.push('Giant Robot')>> <</if>> </div> @@ -218,7 +210,7 @@ <<elseif $SF.Squad.MissileSilo === _MSU && $PC.skill.warfare < 75>> //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print App.SF.progress($SF.Squad.MissileSilo)>> </span> <br> <<else>> - //The Cruise Missile has been fully upgraded.// <br> + <<set _fullyUpgraded.push('Cruise Missile')>> <</if>> </div> <</if>> @@ -238,7 +230,7 @@ <<elseif $SF.Squad.AircraftCarrier === _ACU && $PC.skill.warfare < 75>> //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print App.SF.progress($SF.Squad.AircraftCarrier)>> </span> <br> <<else>> - //The Aircraft Carrier has been fully upgraded.// <br> + <<set _fullyUpgraded.push('Aircraft Carrier')>> <</if>> </div> @@ -255,7 +247,7 @@ <<elseif $SF.Squad.Sub === _SubU && $PC.skill.warfare < 75>> //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print App.SF.progress($SF.Squad.Sub)>> </span> <<else>> - //The Submarine has been fully upgraded.// <br> + <<set _fullyUpgraded.push('Submarine')>> <</if>> </div> @@ -272,7 +264,9 @@ <<elseif $SF.Squad.HAT === _HATU && $PC.skill.warfare < 75>> //Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print App.SF.progress($SF.Squad.HAT)>> </span> <br> <<else>> - //The Amphibious Transport has been fully upgraded.// <br> + <<set _fullyUpgraded.push('Amphibious Transport')>> <</if>> </div> -<</if>> /*Closes Naval Yard.*/ \ No newline at end of file +<</if>> /*Closes Naval Yard.*/ + +<<if _fullyUpgraded.length > 0>> <br>//The following units are fully upgraded: <<= _fullyUpgraded>>//. <</if>> \ No newline at end of file diff --git a/src/Mods/SpecialForce/editSF.tw b/src/Mods/SpecialForce/editSF.tw index 14a4c0b768707548323d54c143d1b4822ef7e976..b0797d7bbfa8f1046d9b382c2fa209f18afbb000 100644 --- a/src/Mods/SpecialForce/editSF.tw +++ b/src/Mods/SpecialForce/editSF.tw @@ -2,7 +2,10 @@ <<script>> for (let i in V.SF.Squad) { - V.SF.Squad[i] = Math.clamp(V.SF.Squad[i], 0, App.SF.upgrades.currentUnitMax('V.SF.Squad[i]')); + const v = String([i]); + if (V.SF.Squad[i] > App.SF.upgrades.currentUnitMax(v)) { + V.SF.Squad[i] = App.SF.upgrades.currentUnitMax(v); + } } <</script>> @@ -10,47 +13,47 @@ for (let i in V.SF.Squad) { $nextButton = "Back to $SF.Lower's Firebase", $nextLink = "Firebase", _options = new App.UI.OptionsGroup()>> __Upgrades__: _size/_max(<<= (_size/_max).toFixed(2)>>%) -<<run _options.addOption("''Firebase: ''", "Firebase", V.SF.Squad).showTextBox()>> -<<run _options.addOption("''Armoury: ''", "Armoury", V.SF.Squad).showTextBox()>> -<<run _options.addOption("''Drugs: ''", "Drugs", V.SF.Squad).showTextBox()>> +<<run _options.addOption("''Firebase: '' (current max <<= App.SF.upgrades.currentUnitMax('Firebase')>>)", "Firebase", V.SF.Squad).showTextBox()>> +<<run _options.addOption("''Armoury: '' (current max <<= App.SF.upgrades.currentUnitMax('Armoury')>>)", "Armoury", V.SF.Squad).showTextBox()>> +<<run _options.addOption("''Drugs: '' (current max <<= App.SF.upgrades.currentUnitMax('Drugs')>>)", "Drugs", V.SF.Squad).showTextBox()>> <<if $SF.Squad.Firebase >= 2>> - <<run _options.addOption("''Drones: ''", "Drones", V.SF.Squad).showTextBox()>> + <<run _options.addOption("''Drones: '' (current max <<= App.SF.upgrades.currentUnitMax('Drones')>>)", "Drones", V.SF.Squad).showTextBox()>> <</if>> <<if App.SF.unlocked.garage('cheat')>> - <<run _options.addOption("''Garage:''<br> ''Attack Vehicles: ''", "AV", V.SF.Squad).showTextBox()>> - <<run _options.addOption(" ''Transport Vehicles: ''", "TV", V.SF.Squad).showTextBox()>> + <<run _options.addOption("''Garage:''<br> ''Attack Vehicles: '' (current max <<= App.SF.upgrades.currentUnitMax('AV')>>)", "AV", V.SF.Squad).showTextBox()>> + <<run _options.addOption(" ''Transport Vehicles: '' (current max <<= App.SF.upgrades.currentUnitMax('TV')>>)", "TV", V.SF.Squad).showTextBox()>> <<if _T1>> - <<run _options.addOption(" ''Prototype Goliath Tank: ''", "PGT", V.SF.Squad).showTextBox()>> + <<run _options.addOption(" ''Prototype Goliath Tank: '' (current max <<= App.SF.upgrades.currentUnitMax('PGT')>>)", "PGT", V.SF.Squad).showTextBox()>> <</if>> <</if>> <<if App.SF.unlocked.hangar('cheat')>> - <<run _options.addOption("''Hangar:''<br> ''Attack Planes: ''", "AA", V.SF.Squad).showTextBox()>> - <<run _options.addOption(" ''Transport Planes: ''", "TA", V.SF.Squad).showTextBox()>> + <<run _options.addOption("''Hangar:''<br> ''Attack Planes: '' (current max <<= App.SF.upgrades.currentUnitMax('AA')>>)", "AA", V.SF.Squad).showTextBox()>> + <<run _options.addOption(" ''Transport Planes: '' (current max <<= App.SF.upgrades.currentUnitMax('TA')>>)", "TA", V.SF.Squad).showTextBox()>> <<if _T1>> - <<run _options.addOption(" ''Spaceplane: ''", "SpacePlane", V.SF.Squad).showTextBox()>> - <<run _options.addOption(" ''Gunship: ''", "GunS", V.SF.Squad).showTextBox()>> + <<run _options.addOption(" ''Spaceplane: '' (current max <<= App.SF.upgrades.currentUnitMax('SpacePlane')>>)", "SpacePlane", V.SF.Squad).showTextBox()>> + <<run _options.addOption(" ''Gunship: '' (current max <<= App.SF.upgrades.currentUnitMax('GunS')>>)", "GunS", V.SF.Squad).showTextBox()>> <</if>> <</if>> <<if App.SF.unlocked.launchBay('cheat')>> - <<run _options.addOption("''Launch Bay:''<br> ''Satellite: ''", "Satellite", V.SF.Squad).showTextBox()>> + <<run _options.addOption("''Launch Bay:''<br> ''Satellite: '' (current max <<= App.SF.upgrades.currentUnitMax('Satellite')>>)", "Satellite", V.SF.Squad).showTextBox()>> <<if $terrain != "oceanic">> - <<run _options.addOption(" ''Giant Robot: ''", "GiantRobot", V.SF.Squad).showTextBox()>> + <<run _options.addOption(" ''Giant Robot: '' (current max <<= App.SF.upgrades.currentUnitMax('GiantRobot')>>)", "GiantRobot", V.SF.Squad).showTextBox()>> <</if>> - <<run _options.addOption(" ''Cruise Missile: ''", "MissileSilo", V.SF.Squad).showTextBox()>> + <<run _options.addOption(" ''Cruise Missile: '' (current max <<= App.SF.upgrades.currentUnitMax('MissileSilo')>>)", "MissileSilo", V.SF.Squad).showTextBox()>> <</if>> <<if App.SF.unlocked.navalYard('cheat')>> - <<run _options.addOption("<br><br>''Naval Yard:''<br> ''Aircraft Carrier: ''", "AircraftCarrier", V.SF.Squad).showTextBox()>> - <<run _options.addOption(" ''Submarine: ''", "Sub", V.SF.Squad).showTextBox()>> - <<run _options.addOption(" ''Amphibious Transport: ''", "HAT", V.SF.Squad).showTextBox()>> + <<run _options.addOption("<br><br>''Naval Yard:''<br> ''Aircraft Carrier: '' (current max <<= App.SF.upgrades.currentUnitMax('AircraftCarrier')>>)", "AircraftCarrier", V.SF.Squad).showTextBox()>> + <<run _options.addOption(" ''Submarine: '' (current max <<= App.SF.upgrades.currentUnitMax('Sub')>>)", "Sub", V.SF.Squad).showTextBox()>> + <<run _options.addOption(" ''Amphibious Transport: '' (current max <<= App.SF.upgrades.currentUnitMax('HAT')>>)", "HAT", V.SF.Squad).showTextBox()>> <</if>> <<includeDOM _options.render()>> <<if $SF.FS.Tension !== -1>> <br><br>The Colonel's current Tension: <<textbox "$SF.FS.Tension" $SF.FS.Tension "editSF">> -<</if>> \ No newline at end of file +<</if>> diff --git a/src/data/backwardsCompatibility/datatypeCleanup.js b/src/data/backwardsCompatibility/datatypeCleanup.js index ce7c3899fabe8b1ad49dc3f5ed4c8c0cda68fc9d..399e8cf103de77ebcbf4ef025ee9159599f7f744 100644 --- a/src/data/backwardsCompatibility/datatypeCleanup.js +++ b/src/data/backwardsCompatibility/datatypeCleanup.js @@ -1679,7 +1679,7 @@ globalThis.FacilityDatatypeCleanup = (function() { V.schoolroomUpgradeLanguage = Math.clamp(+V.schoolroomUpgradeLanguage, 0, 1) || 0; V.schoolroomUpgradeRemedial = Math.clamp(+V.schoolroomUpgradeRemedial, 0, 1) || 0; /* schoolteacher */ - V.Schoolteacher = V.slaves.find(s => s.assignment === Job.TEACHER) || 0; + V.SchoolteacherID = findSlaveId(s => s.assignment === Job.TEACHER); } function SpaDatatypeCleanup() { @@ -1778,8 +1778,7 @@ App.Entity.Utils.GenePoolRecordCleanup = (function() { "counter", "custom", "porn", "prestige", "prestigeDesc", "subTarget", "relationship", "relationshipTarget", "rivalry", "rivalryTarget", - "pronoun", "possessive", "possessivePronoun", "objectReflexive", "object", "noun", - "weekAcquired", "HGExclude", + "weekAcquired", "HGExclude", "StudExclude", "daughters", "sisters", "origin", "canRecruit", "choosesOwnAssignment", "assignment", @@ -1790,6 +1789,7 @@ App.Entity.Utils.GenePoolRecordCleanup = (function() { "eyewear", "earwear", "preg", "pregSource", "pregType", "pregAdaptation", "labor", "bellyAccessory", + "breedingMark", "clitSetting", "rules", "useRulesAssistant", @@ -1799,11 +1799,11 @@ App.Entity.Utils.GenePoolRecordCleanup = (function() { "makeup", "nails", "vaginalAccessory", "vaginalAttachment", "dickAccessory", "nipplesAccessory", "armAccessory", "legAccessory", "buttplug", "buttplugAttachment", - "fetishKnown", + "fetishKnown", "attrKnown", "rudeTitle", "currentRules", "induce", - "induceLactation", "boobsMilk", + "induceLactation", "boobsMilk", "lactation", "lactationAdaptation", "lactationDuration", "mpreg", "inflation", "inflationType", "inflationMethod", "milkSource", "cumSource", "burst", @@ -1814,7 +1814,7 @@ App.Entity.Utils.GenePoolRecordCleanup = (function() { "choosesOwnChastity", "pregControl", "death", - "onDiet", + "onDiet", "weightDirection", "prematureBirth", "slaveCost", "NCSyouthening", diff --git a/src/data/backwardsCompatibility/updateSlaveObject.js b/src/data/backwardsCompatibility/updateSlaveObject.js index 0e63c24a3c0498114559e63f64870f2c5a23a9ba..aecfcbe7fa6955dd6bcd935feeccb640287555e0 100644 --- a/src/data/backwardsCompatibility/updateSlaveObject.js +++ b/src/data/backwardsCompatibility/updateSlaveObject.js @@ -61,7 +61,7 @@ App.Update.Slave = function(slave, genepool = false) { slave.pubertyXY = 0; } } - if (slave.genetics === undefined) { slave.genetics = {}; } + if (slave.genetics !== undefined) { delete slave.genetics; } if (slave.geneMods === undefined) { slave.geneMods = {NCS: 0, rapidCellGrowth: 0}; } if (slave.inducedNCS !== undefined) { slave.geneMods.NCS = slave.inducedNCS; diff --git a/src/descriptions/arcologyDescription.js b/src/descriptions/arcologyDescription.js index 0809894ba522ba0d14ddaf74d86794c46eda09e9..a4b2880469355e543e0d9b8dcf6c8f70050b8557 100644 --- a/src/descriptions/arcologyDescription.js +++ b/src/descriptions/arcologyDescription.js @@ -1,11 +1,22 @@ /** - * @param {Node} [lastElement] will go on the same line as the last line + * @param {DocumentFragment} [lastElement] will go on the same line as the last line * @returns {DocumentFragment} */ App.Desc.playerArcology = function(lastElement) { const A = V.arcologies[0]; const fragment = document.createDocumentFragment(); + /** + * @param {(string|HTMLElement|DocumentFragment)[]} contents + */ + function addParagraph(...contents) { + if (contents.every(s => !s)) { + return; // don't bother adding blank divs + } + const para = App.UI.DOM.appendNewElement("div", fragment, '', "indent"); + para.append(...App.Events.spaceSentences(contents)); + } + /** * @returns {DocumentFragment} */ @@ -38,8 +49,6 @@ App.Desc.playerArcology = function(lastElement) { return fragment; } - let openDiv = App.UI.DOM.makeElement("div", location(), "indent"); - function deco100() { if (FutureSocieties.HighestDecoration() < 100) { return ""; @@ -183,7 +192,7 @@ App.Desc.playerArcology = function(lastElement) { return buffer.join(" "); } - openDiv.append(deco100()); + addParagraph(location(), deco100()); /** * @returns {string} @@ -428,12 +437,7 @@ App.Desc.playerArcology = function(lastElement) { return buffer.join(" "); } - const d40 = deco40(); - if (d40 !== "") { - fragment.append(openDiv); - // we have to reuse the variable because of scoping - openDiv = App.UI.DOM.makeElement("div", d40, "indent"); - } + addParagraph(deco40()); /** * @returns {string} @@ -465,12 +469,7 @@ App.Desc.playerArcology = function(lastElement) { return buffer.join(" "); } - const se = secExp(); - if (se !== "") { - fragment.append(openDiv); - // we have to reuse the variable because of scoping - openDiv = App.UI.DOM.makeElement("div", se, "indent"); - } + addParagraph(secExp()); function deco60() { if (FutureSocieties.HighestDecoration() < 60) { @@ -564,17 +563,17 @@ App.Desc.playerArcology = function(lastElement) { } const d60 = deco60(); - if (d60 !== "") { - fragment.append(openDiv); - // we have to reuse the variable because of scoping - openDiv = App.UI.DOM.makeElement("div", d60, "indent"); - if (V.arcologyUpgrade.drones === 1) { - openDiv.append(` A security drone occasionally flies across the open space.`); - } - } else if (V.arcologyUpgrade.drones === 1) { - openDiv.append(` The central plaza is a large atrium; a security drone occasionally flies across the open space.`); + let drones = ""; + if (V.arcologyUpgrade.drones === 1) { + if (d60 !== "") { + drones = `A security drone occasionally flies across the open space.`; + } else { + drones = `The central plaza is a large atrium; a security drone occasionally flies across the open space.`; + } } + addParagraph(deco60(), drones); + function deco80part1() { if (FutureSocieties.HighestDecoration() < 80) { return ""; @@ -685,12 +684,7 @@ App.Desc.playerArcology = function(lastElement) { return buffer.join(" "); } - openDiv.append(deco80part1()); - - fragment.append(openDiv); - - const citizenDiv = document.createElement("div"); - citizenDiv.classList.add("indent"); + addParagraph(deco80part1()); function deco80part2() { if (FutureSocieties.HighestDecoration() < 80) { @@ -789,9 +783,7 @@ App.Desc.playerArcology = function(lastElement) { return buffer.join(" "); } - citizenDiv.append(deco80part2()); - - citizenDiv.append(` ${num(V.ACitizens)} citizens and ${num(V.ASlaves + V.slaves.length)} slaves live in ${A.name}.`); + const citizenCount = `${num(V.ACitizens)} citizens and ${num(V.ASlaves + V.slaves.length)} slaves live in ${A.name}.`; function fsLaws() { let buffer = []; @@ -882,34 +874,30 @@ App.Desc.playerArcology = function(lastElement) { return buffer.join(" "); } - citizenDiv.append(fsLaws()); - - citizenDiv.append(` Its lingua franca is ${V.language}.`); - fragment.append(citizenDiv); + addParagraph(deco80part2(), citizenCount, fsLaws(), `Its lingua franca is ${V.language}.`); /** - * @returns {HTMLDivElement} + * @returns {DocumentFragment} */ function peacekeepers() { - const div = document.createElement("div"); - div.classList.add("indent"); + const frag = document.createDocumentFragment(); if (V.plot) { if (V.peacekeepers === 0) { if (V.invasionVictory) { - div.append(`The area previously occupied by the little old world country whose collapse led to a failed invasion of the Free City is a lawless wilderness.`); + frag.append(`The area previously occupied by the little old world country whose collapse led to a failed invasion of the Free City is a lawless wilderness.`); } else if (V.week > 29) { - div.append(`A small old world country near the arcology is in the process of collapse${V.nationHate ? ", and your opportunistic behavior towards it has caused hatred there" : ""}.`); + frag.append(`A small old world country near the arcology is in the process of collapse${V.nationHate ? ", and your opportunistic behavior towards it has caused hatred there" : ""}.`); } else { - div.append(`There is nothing notable about the decaying old world countries ${V.terrain === "oceanic" ? "on the shoreline nearest" : "near"} the arcology.`); + frag.append(`There is nothing notable about the decaying old world countries ${V.terrain === "oceanic" ? "on the shoreline nearest" : "near"} the arcology.`); } } else { if (V.peacekeepers.strength >= 50) { - div.append(`General ${V.peacekeepers.generalName} now governs an area near the Free City as a warlord, using the men and women of his former peacekeeping forces to rule.`); + frag.append(`General ${V.peacekeepers.generalName} now governs an area near the Free City as a warlord, using the men and women of his former peacekeeping forces to rule.`); if (V.peacekeepers.attitude >= 100) { - div.append(` The area is a de facto client state of your arcology.`); + frag.append(` The area is a de facto client state of your arcology.`); } else { - div.append(` He considers himself indebted to you, and delivers periodic tributes of menial slaves.`); + frag.append(` He considers himself indebted to you, and delivers periodic tributes of menial slaves.`); } } else { // TODO create an actual framework for this behavior (only refreshing a specific element) @@ -926,7 +914,7 @@ App.Desc.playerArcology = function(lastElement) { }, true), ` each week to promote misinformation in the old world that undermines the peacekeepers.`); } else { - fragment.append(`You are not undermining the peacekeepers. `, + fragment.append(` You are not undermining the peacekeepers. `, App.UI.DOM.link("Start a misinformation campaign", () => { V.peacekeepers.undermining = 1000; refresh(); @@ -943,18 +931,14 @@ App.Desc.playerArcology = function(lastElement) { const span = document.createElement("span"); span.append(undermine()); - div.append(span); + frag.append(span); } } } - return div; + return frag; } - const peace = peacekeepers(); - if (lastElement !== undefined) { - peace.append(" ", lastElement); - } - fragment.append(peace); + addParagraph(peacekeepers(), lastElement); return fragment; }; diff --git a/src/endWeek/endWeek.js b/src/endWeek/endWeek.js index acc627aa47c6c993795822c93ea7a86df736ef95..947c7653719c91a36cb958f8906a0cb67a4b6334 100644 --- a/src/endWeek/endWeek.js +++ b/src/endWeek/endWeek.js @@ -297,7 +297,6 @@ globalThis.endWeek = (function() { V.DJRepBonus = 0; V.Milkmaid = 0; V.Farmer = 0; - V.Schoolteacher = 0; V.Wardeness = 0; V.Concubine = 0; V.Matron = 0; diff --git a/src/endWeek/saServeYourOtherSlaves.js b/src/endWeek/saServeYourOtherSlaves.js index 8af5b173289fba69f893a6638348d64d17113f2d..7b04d0277c3bf73b92fff0008ffff98e6f6ab720 100644 --- a/src/endWeek/saServeYourOtherSlaves.js +++ b/src/endWeek/saServeYourOtherSlaves.js @@ -1485,7 +1485,7 @@ App.SlaveAssignment.serveYourOtherSlaves = (function() { break; case "submissive": if (slave.fetish !== "dom") { - r.push(`${domName}'s sexual submission has a lasting effect on ${subName}; <span class="lightcoral">${he}'s grown a taste for dominating otherse.</span>`); + r.push(`${domName}'s sexual submission has a lasting effect on ${subName}; <span class="lightcoral">${he}'s grown a taste for dominating others.</span>`); slave.fetish = "dom"; slave.fetishStrength = 35; slave.fetishKnown = 1; @@ -1703,7 +1703,7 @@ App.SlaveAssignment.serveYourOtherSlaves = (function() { slave.trust -= 5; } else { if (slave.devotion > 20) { - r.push(`${He} is accustomed enough to slave life to porperly manage ${his} time.`); + r.push(`${He} is accustomed enough to slave life to properly manage ${his} time.`); } else { r.push(`${He} <span class="red">wastes time and energy resisting</span> where a properly broken slave would accept what is happening and take it.`); } diff --git a/src/endWeek/saTakeClasses.js b/src/endWeek/saTakeClasses.js index 8bb6fd4d6f84ee6d1eb2ccb3adb5241971029a32..c4a0a172f42e98a1de149b6e10a7bbc995b03cc4 100644 --- a/src/endWeek/saTakeClasses.js +++ b/src/endWeek/saTakeClasses.js @@ -57,24 +57,24 @@ App.SlaveAssignment.takeClasses = (function() { if (V.schoolroomUpgradeSkills + V.schoolroomUpgradeRemedial + V.schoolroomUpgradeLanguage !== 0) { r += `, using ${V.schoolroomName}'s improved educational materials,`; } - if (slave.assignment === Job.SCHOOL && V.Schoolteacher !== 0) { - const schoolteacherPronouns = getPronouns(V.Schoolteacher); - teaching = (V.Schoolteacher.intelligence + V.Schoolteacher.intelligenceImplant); - if (V.Schoolteacher.visualAge > 35) { + if (slave.assignment === Job.SCHOOL && S.Schoolteacher) { + const schoolteacherPronouns = getPronouns(S.Schoolteacher); + teaching = (S.Schoolteacher.intelligence + S.Schoolteacher.intelligenceImplant); + if (S.Schoolteacher.visualAge > 35) { teaching += 10; } - if (setup.schoolteacherCareers.includes(V.Schoolteacher.career)) { + if (setup.schoolteacherCareers.includes(S.Schoolteacher.career)) { teaching += 10; - } else if (V.Schoolteacher.skill.teacher >= V.masteredXP) { + } else if (S.Schoolteacher.skill.teacher >= V.masteredXP) { teaching += 10; } - if (V.Schoolteacher.face > 40) { + if (S.Schoolteacher.face > 40) { teaching += 10; } if (jsRandom(1, 150) < teaching) { learning += 1; } - r += ` under ${V.Schoolteacher.slaveName}'s supervision;`; + r += ` under ${S.Schoolteacher.slaveName}'s supervision;`; if (slave.devotion > 20) { r += ` ${he} is such an obedient slave that ${schoolteacherPronouns.pronoun} <span class="devotion inc">encourages ${him}</span> to be the best slave ${he} can.`; slave.devotion += 2; @@ -280,8 +280,8 @@ App.SlaveAssignment.takeClasses = (function() { */ function lactationBreak(slave) { // room for growth — do so during lactation rules expansion - if (slave.lactation === 1 && slave.assignment === Job.SCHOOL && V.Schoolteacher !== 0 && hasAnyArms(V.Schoolteacher)) { - r += ` With ${his} natural lactation, ${he} often finds ${himself} milked before the class by ${V.Schoolteacher.slaveName} both to serve as a lesson and to keep ${him} from becoming a milky mess.`; + if (slave.lactation === 1 && slave.assignment === Job.SCHOOL && S.Schoolteacher && hasAnyArms(S.Schoolteacher)) { + r += ` With ${his} natural lactation, ${he} often finds ${himself} milked before the class by ${S.Schoolteacher.slaveName} both to serve as a lesson and to keep ${him} from becoming a milky mess.`; slave.lactationDuration = 2; slave.boobs -= slave.boobsMilk; slave.boobsMilk = 0; diff --git a/src/endWeek/schoolroomReport.js b/src/endWeek/schoolroomReport.js new file mode 100644 index 0000000000000000000000000000000000000000..ad41afec2a148e17717aa28fea97a1a19b4da29d --- /dev/null +++ b/src/endWeek/schoolroomReport.js @@ -0,0 +1,245 @@ +App.EndWeek.schoolroomReport = function() { + let frag = document.createDocumentFragment(); + + const slaves = App.Utils.sortedEmployees(App.Entity.facilities.schoolroom); + const devBonus = (V.schoolroomDecoration !== "standard") ? 1 : 0; + + function schoolteacherText() { + let r = []; + let FLsFetish = 0; + let idleBonus = 0; + + if (S.Schoolteacher) { + if (S.Schoolteacher.health.condition < -80) { + improveCondition(S.Schoolteacher, 20); + } else if (S.Schoolteacher.health.condition < -40) { + improveCondition(S.Schoolteacher, 15); + } else if (S.Schoolteacher.health.condition < 0) { + improveCondition(S.Schoolteacher, 10); + } else if (S.Schoolteacher.health.condition < 90) { + improveCondition(S.Schoolteacher, 7); + } + if (S.Schoolteacher.devotion <= 60) { + S.Schoolteacher.devotion++; + } + if (S.Schoolteacher.trust < -30) { + S.Schoolteacher.trust++; + } + S.Schoolteacher.devotion += devBonus; + if (S.Schoolteacher.rules.living !== "luxurious") { + S.Schoolteacher.rules.living = "luxurious"; + } + if (S.Schoolteacher.fetishStrength <= 95) { + if (S.Schoolteacher.fetish !== "dom") { + if (fetishChangeChance(S.Schoolteacher) > jsRandom(0, 100)) { + FLsFetish = 1; + S.Schoolteacher.fetishKnown = 1; + S.Schoolteacher.fetish = "dom"; + } + } else if (S.Schoolteacher.fetishKnown === 0) { + FLsFetish = 1; + S.Schoolteacher.fetishKnown = 1; + } else { + FLsFetish = 2; + S.Schoolteacher.fetishStrength += 4; + } + } + + const {He, he, His, his, him, wife} = getPronouns(S.Schoolteacher); + r.push(`${S.Schoolteacher.slaveName} is serving as your Schoolteacher.`); + if (S.Schoolteacher.relationship === -3 && S.Schoolteacher.devotion > 50) { + r.push(`As your loving ${wife}, ${he} tries ${his} best to teach ${his} pupils how to please you.`); + } + if (FLsFetish === 1) { + r.push(`${He}'s allowed and even expected to use ${his} students for ${his} own sexual gratification, and in their own way ${his} students are complicit, offering sexual favors for an easier time in the classroom. Before long, ${he}'s running a hungry eye over the tits and asses of new trainees; ${he} is now <span class="lightcoral">more dominant.</span>`); + } else if (FLsFetish === 2) { + r.push(`Every new student in class is a new target for ${his} personal educational attention. <span class="lightsalmon">${He} becomes more dominant.</span>`); + } + if (setup.schoolteacherCareers.includes(S.Schoolteacher.career)) { + r.push(`${He} has experience with students and learning from ${his} life before ${he} was a slave, making ${him} more effective.`); + idleBonus++; + } else if (S.Schoolteacher.skill.teacher >= V.masteredXP) { + r.push(`${He} has experience with students and learning from working for you, making ${him} more effective.`); + idleBonus++; + } else { + S.Schoolteacher.skill.teacher += jsRandom(1, Math.ceil((S.Schoolteacher.intelligence + S.Schoolteacher.intelligenceImplant) / 15) + 8); + } + if (S.Schoolteacher.visualAge > 35) { + r.push(`${His} age earns ${him} the respect of ${his} students.`); + idleBonus++; + } + if (S.Schoolteacher.intelligence > 15) { + r.push(`${He}'s intelligent enough to be a good teacher.`); + idleBonus++; + } + if (S.Schoolteacher.intelligenceImplant >= 15) { + r.push(`Since ${he}'s educated ${him}self, ${he} understands `); + if (V.schoolroomRemodelBimbo !== 0) { + r.push(`how best to apply the new lesson plan.`); + } else { + r.push(`${his} students.`); + } + idleBonus++; + } + if (S.Schoolteacher.face > 40) { + r.push(`${His} students want to be just like their beautiful teacher.`); + idleBonus++; + } + + for (const slave of slaves) { + const {he2} = getPronouns(slave).appendSuffix('2'); + if (S.Schoolteacher.rivalryTarget === slave.ID) { + r.push(`Ever since ${his} ${rivalryTerm(S.Schoolteacher)} was enrolled, ${he} began stalking the classroom carrying a large paddle, much to ${slave.slaveName}'s terror.`); + slave.devotion -= 4; + slave.trust -= 4; + if (jsRandom(1, 100) > 35) { + S.Schoolteacher.rivalry++; + slave.rivalry++; + } + } else if (S.Schoolteacher.relationshipTarget === slave.ID) { + r.push(`${He} dedicates most of ${his} attention to ${his} ${relationshipTerm(S.Schoolteacher)}, ${slave.slaveName}, making sure ${he2} understands that day's lesson.`); + slave.devotion += 2; + slave.trust += 2; + } else if (areRelated(S.Schoolteacher, slave)) { + r.push(`${He} makes sure to spend extra time teaching ${his} ${relativeTerm(S.Schoolteacher, slave)}, ${slave.slaveName}.`); + slave.trust++; + } + } + + if (slaves.length < V.schoolroom) { + const _idlePay = jsRandom(1, 10) + ((V.schoolroom - slaves.length) * (jsRandom(150, 170) + (idleBonus * 10))); + cashX(_idlePay, "school", S.Schoolteacher); + r.push(`<div class="indent">Since ${he} doesn't have enough students to occupy all of ${his} time, ${V.schoolroomName} takes in citizens' slaves on a contract basis and ${he} teaches them too, earning <span class="yellowgreen">${cashFormat(_idlePay)}.</span></div>`); + } + + return r.join(" "); + } + } + + const schoolteacherEffects = App.UI.DOM.appendNewElement("p", frag, '', "indent"); + $(schoolteacherEffects).append(schoolteacherText()); + + if (slaves.length > 0) { + const intro = App.UI.DOM.appendNewElement("p", frag, '', "indent"); + if (slaves.length > 1) { + $(intro).append(`<strong>There are ${slaves.length} slaves studying in ${V.schoolroomName}.</strong>`); + } else { + $(intro).append(`<strong>There is one slave studying in ${V.schoolroomName}.</strong>`); + } + } + + if (S.Schoolteacher) { + const slave = S.Schoolteacher; + V.i = V.slaveIndices[slave.ID]; + App.Utils.setLocalPronouns(slave); // need this for the includes + /* apply following SA passages to facility leader */ + if (V.showEWD !== 0) { + const schoolteacherEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); + if (V.seeImages && V.seeReportImages) { + App.UI.DOM.appendNewElement("div", schoolteacherEntry, App.Art.SlaveArtElement(slave, 0, 0), ["imageRef", "tinyImg"]); + } + $(schoolteacherEntry).append(`<span class='slave-name'>${slave.slaveName}</span> is serving as your Schoolteacher.`); + $(schoolteacherEntry).append(App.SlaveAssignment.standardSlaveReport(slave, false)); + } else { + App.SlaveAssignment.standardSlaveReport(slave, true); + } + } + + let restedSlaves = 0; + for (const slave of slaves) { + V.i = V.slaveIndices[slave.ID]; + slave.devotion += devBonus; + if (slave.health.condition < -80) { + improveCondition(slave, 20); + } else if (slave.health.condition < -40) { + improveCondition(slave, 10); + } else if (slave.health.condition < 0) { + improveCondition(slave, 7); + } else if (slave.health.condition < 90) { + improveCondition(slave, 3); + } + if (slave.rules.living !== "normal") { + slave.rules.living = "normal"; + } + /* Education done? Has to be here before we run the standard slave report or there will be double entries for slave */ + if (slave.fetish === "mindbroken") { + if (V.assignmentRecords[slave.ID]) { + assignJobSafely(slave, V.assignmentRecords[slave.ID]); + } else { + removeJob(slave, "learn in the schoolroom"); + } + restedSlaves++; + continue; + } else if ( ((slave.intelligenceImplant >= 30 && V.schoolroomRemodelBimbo !== 1) || (slave.intelligenceImplant <= -15 && V.schoolroomRemodelBimbo === 1)) && + ((slave.voice === 0) || (slave.accent <= 1) || ((V.schoolroomUpgradeLanguage === 0) && (slave.accent <= 2))) && + ((slave.skill.oral > 30) || ((V.schoolroomUpgradeSkills === 0) && (slave.skill.oral > 10))) && + ((slave.skill.whoring > 30) || ((V.schoolroomUpgradeSkills === 0) && (slave.skill.whoring > 10))) && + ((slave.skill.entertainment > 30) || ((V.schoolroomUpgradeSkills === 0) && (slave.skill.entertainment > 10))) && + ((slave.skill.anal > 30) || ((V.schoolroomUpgradeSkills === 0) && (slave.skill.anal > 10))) && + ((slave.skill.vaginal > 30) || ((V.schoolroomUpgradeSkills === 0) && (slave.skill.vaginal > 10)) || (slave.vagina < 0)) ) { + const reassignment = App.UI.DOM.appendNewElement("p", frag, ''); + const {he, his} = getPronouns(slave); + let r = []; + r.push(`<span class="slave-name">${slave.slaveName}</span> can learn little from further classes,`); + r.push(`<span class="noteworthy">`); + if (V.assignmentRecords[slave.ID]) { + const oldJob = V.assignmentRecords[slave.ID]; + assignJobSafely(slave, oldJob); + if (slave.choosesOwnAssignment === 1) { + r.push(`and ${he} is resting before choosing another task.`); + } else if (slave.assignment === "rest") { + if (oldJob !== "rest") { + r.push(`and since ${he} was unable to return to ${his} old task to ${oldJob}, ${his} assignment has defaulted to rest.`); + } else { + r.push(`so ${he} has returned to rest.`); + } + } else { + r.push(`so ${he} goes back to ${slave.assignment}.`); + } + } else { + r.push(`so ${his} assignment has defaulted to rest.`); + removeJob(slave, "learn in the schoolroom"); + } + r.push(`</span>`); + restedSlaves++; + $(reassignment).append(r.join(" ")); + continue; + } + + App.Utils.setLocalPronouns(slave); // need this for the includes + if (V.showEWD !== 0) { + const {He} = getPronouns(slave); + const slaveEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); + if (V.seeImages && V.seeReportImages) { + App.UI.DOM.appendNewElement("div", slaveEntry, App.Art.SlaveArtElement(slave, 0, 0), ["imageRef", "tinyImg"]); + } + $(slaveEntry).append(`<span class='slave-name'>${slave.slaveName}</span> `); + if (slave.choosesOwnAssignment === 2) { + $(slaveEntry).append(App.UI.DOM.renderPassage("SA chooses own job")); + } else { + $(slaveEntry).append(`is studying in ${V.schoolroomName}.`); + } + const studentContent = App.UI.DOM.appendNewElement("div", slaveEntry, '', "indent"); + $(studentContent).append(`${He} ${App.SlaveAssignment.takeClasses(slave)}`); + $(slaveEntry).append(App.SlaveAssignment.standardSlaveReport(slave, false)); + } else { + // discard return values silently + App.SlaveAssignment.takeClasses(slave); + App.SlaveAssignment.standardSlaveReport(slave, true); + } + } + + if (restedSlaves > 0) { + const rested = App.UI.DOM.appendNewElement("p", frag, '', "indent"); + rested.append((restedSlaves === 1) ? `One slave has ` : `${restedSlaves} slaves have `); + App.UI.DOM.appendNewElement("span", rested, "learned", "green"); + rested.append(` all they can, and will be released from the schoolroom before the end of the week.`); + } + + if (V.schoolroomDecoration !== "standard") { + const decorationEffects = App.UI.DOM.appendNewElement("p", frag, '', "indent"); + $(decorationEffects).append(`${V.schoolroomNameCaps}'s ${V.schoolroomDecoration} atmosphere <span class="hotpink">has a minor impact on the students.</span>`); + } + + return frag; +}; diff --git a/src/endWeek/slaveAssignmentReport.js b/src/endWeek/slaveAssignmentReport.js index b52d665be47b6e49382c7b4bff7513f48ab93a1d..eadc1d9ecc9f8d2c97c2fb02b6cc6dddca3676bb 100644 --- a/src/endWeek/slaveAssignmentReport.js +++ b/src/endWeek/slaveAssignmentReport.js @@ -597,24 +597,23 @@ App.EndWeek.slaveAssignmentReport = function() { } break; case Job.TEACHER: - V.Schoolteacher = slave; if (!canTalk(slave)) { _printSlaveUnassignedNote(slave, "can't give verbal instruction"); - V.Schoolteacher = 0; + V.SchoolteacherID = 0; } else if (slave.preg > 37 && slave.broodmother === 2) { _printSlaveUnassignedNote(slave, "spends so much time giving birth and laboring that", `${getPronouns(slave).he} cannot effectively serve as your Schoolteacher any longer`); - V.Schoolteacher = 0; + V.SchoolteacherID = 0; } else if (slave.fetish === "mindbroken") { _printSlaveUnassignedNote(slave, "is mindbroken"); - V.Schoolteacher = 0; + V.SchoolteacherID = 0; } else if (!canSee(slave)) { _printSlaveUnassignedNote(slave, "can no longer see"); - V.Schoolteacher = 0; + V.SchoolteacherID = 0; } else if (!canHear(slave)) { _printSlaveUnassignedNote(slave, "can no longer hear"); - V.Schoolteacher = 0; + V.SchoolteacherID = 0; } - if (V.Schoolteacher === 0) { + if (V.SchoolteacherID === 0) { removeJob(slave, Job.TEACHER); } break; diff --git a/src/events/RETS/reSiblingTussle.js b/src/events/RETS/reSiblingTussle.js index 4c7e8301aa4c3920df3ad8b437da658ad5eb9fc8..0de2800b7683d71d43c64b95b20ed053f1283332 100644 --- a/src/events/RETS/reSiblingTussle.js +++ b/src/events/RETS/reSiblingTussle.js @@ -145,7 +145,7 @@ App.Events.RETSSiblingTussle = class RETSSiblingTussle extends App.Events.BaseEv t = []; t.push(`Once you think your message has gotten through, you pull ${sib1.slaveName} off your ${V.PC.dick > 0 ? "dick" : "strap-on"} with a pop, pull ${sib2.slaveName} to ${his2} knees and repeat your chosen punishment on ${him2}.`); t.push(`${sib1.slaveName} kneels obediently, crying quietly as you abuse ${his} ${relativeTerm(sib1, sib2)}.`); - t.push(`When you've finished, you're sure both siblings are more likely to <span class="trust dec">respect the rules</span>, out of fear if nothing else.`); + t.push(`When you've finished, you're sure both siblings are more likely to <span class="trust dec">respect the rules,</span> out of fear if nothing else.`); App.Events.addParagraph(frag, t); sib1.trust -= 5; diff --git a/src/events/reRelativeRecruiter.js b/src/events/reRelativeRecruiter.js index aee1023efb9b3b46b2e37b9e9d0e5a5f1d41abee..18469448a5525b9578299418306adae2412efdc8 100644 --- a/src/events/reRelativeRecruiter.js +++ b/src/events/reRelativeRecruiter.js @@ -561,7 +561,7 @@ App.Events.RERelativeRecruiter = class RERelativeRecruiter extends App.Events.Ba } const origSlave = BaseSlave(); - const genepoolRec = App.Entity.Utils.GenePoolRecordCleanup(V.genePool.find(s => s.ID === getSlave(_this.actors[0]).ID)); + const genepoolRec = App.Entity.Utils.GenePoolRecordCleanup(V.genePool.find(s => s.ID === _this.actors[0])); Object.assign(origSlave, genepoolRec); const newSlave = generateRelatedSlave(origSlave, _this.params.relative); diff --git a/src/interaction/main/walkPast.js b/src/interaction/main/walkPast.js index 9fc5ff67ab3722c2f1738de6ad54a36c95d0ef74..60ffe65235274f9f99f47bd72db652c28b06260a 100644 --- a/src/interaction/main/walkPast.js +++ b/src/interaction/main/walkPast.js @@ -1976,10 +1976,10 @@ globalThis.walkPast = (function() { break; case Job.SCHOOL: t += `attend classes `; - if (V.Schoolteacher === 0) { + if (!S.Schoolteacher) { t += `in ${V.schoolroomName}; `; } else { - t += `under ${V.Schoolteacher.slaveName}, perhaps literally; `; + t += `under ${S.Schoolteacher.slaveName}, perhaps literally; `; } break; case Job.ATTENDANT: diff --git a/src/interaction/policies/policies.tw b/src/interaction/policies/policies.tw index 6f69991e78460f1d07d1cc6ef925e41eeabaf409..ff3d3266a215f775eddfc9670018c8785bc1cdcf 100644 --- a/src/interaction/policies/policies.tw +++ b/src/interaction/policies/policies.tw @@ -282,9 +282,9 @@ ''Elite Breeder Eligibility:'' The Societal Elite have rejected your breeding proposal. <</if>> </div> - <span id="FSRestart"></span> + <span id="FSRace"></span> <script> - policy("FSRestart"); + policy("FSRace"); </script> <</if>> diff --git a/src/js/assayJS.js b/src/js/assayJS.js index 456dd4f3cdba83d5848ac159d00846efc6c7a8c2..1162f57c1e399da1f5d83cff0111bcf20689a1ce 100644 --- a/src/js/assayJS.js +++ b/src/js/assayJS.js @@ -78,7 +78,7 @@ globalThis.inferiorRaceP = function(slave) { */ globalThis.isLeaderP = function(slave) { /** @type {FC.SlaveStateOrZero[]} */ - const leaders = [V.HeadGirl, V.Bodyguard, V.Recruiter, V.Concubine, V.Nurse, S.Attendant, V.Matron, V.Madam, V.DJ, V.Milkmaid, V.Farmer, S.Stewardess, V.Schoolteacher, V.Wardeness]; + const leaders = [V.HeadGirl, V.Bodyguard, V.Recruiter, V.Concubine, V.Nurse, S.Attendant, V.Matron, V.Madam, V.DJ, V.Milkmaid, V.Farmer, S.Stewardess, S.Schoolteacher, V.Wardeness]; return leaders.some(leader => leader && leader.ID && leader.ID === slave.ID); }; diff --git a/src/js/assignJS.js b/src/js/assignJS.js index 3cbfd18eee4d090bb4030a7032ae7381ba85a752..00b6676067bdaf336dbcf511de15688d83869bc5 100644 --- a/src/js/assignJS.js +++ b/src/js/assignJS.js @@ -514,8 +514,8 @@ globalThis.removeJob = function(slave, assignment, saveRecord = false) { V.Milkmaid = 0; } else if (V.Farmer !== 0 && slave.ID === V.Farmer.ID) { V.Farmer = 0; - } else if (V.Schoolteacher !== 0 && slave.ID === V.Schoolteacher.ID) { - V.Schoolteacher = 0; + } else if (V.SchoolteacherID === slave.ID) { + V.SchoolteacherID = 0; } else if (V.AttendantID === slave.ID) { V.AttendantID = 0; } else if (V.Matron !== 0 && slave.ID === V.Matron.ID) { diff --git a/src/js/economyJS.js b/src/js/economyJS.js index 38d74caa88fd2dd9ba802190b60253cf25982051..5a1c2afdc3711f96811f7e0f639e82eba9f526c0 100644 --- a/src/js/economyJS.js +++ b/src/js/economyJS.js @@ -1042,7 +1042,7 @@ globalThis.getSlaveCostArray = function(s) { } } if (s.drugs === 'appetite suppressors') { - retval.push({text: "Food saved via supressed appetite", value: -Math.abs(foodCost)}); + retval.push({text: "Food saved via suppressed appetite", value: -Math.abs(foodCost)}); } if (s.lactation > 0) { t = "Food to support "; diff --git a/src/js/modification.js b/src/js/modification.js index 27cca10358eaf9ed250ad8ea9d546a36352c41d7..aaedaf67f8498577e15f90fa6c04ed815924f6e8 100644 --- a/src/js/modification.js +++ b/src/js/modification.js @@ -61,7 +61,7 @@ App.Medicine.Modification.removeScar = function(slave, scar, design) { /** * Slave is whipped over the entire body, and strains in manacles so much that the wrists and ankles scar if present. * @param {App.Entity.SlaveState} slave - * @param {number} weight + * @param {number} [weight] */ App.Medicine.Modification.addScourged = function(slave, weight) { let scarArray = ["left breast", "right breast", "back", "lower back", "left buttock", "right buttock"]; diff --git a/src/js/slaveCostJS.js b/src/js/slaveCostJS.js index f9930f16398a2659ae5ad22affd926e0bad06850..91c5519e6db7f44e10f562f572c5367807ffe8d5 100644 --- a/src/js/slaveCostJS.js +++ b/src/js/slaveCostJS.js @@ -1333,9 +1333,9 @@ globalThis.BeautyArray = (function() { } if (arcology.FSSlaveProfessionalism !== "unset") { if (slave.energy > 80) { - adjustBeauty("Energy: Slave Professionalism", -(slave.energy)); + adjustBeauty("Energy: Slave Professionalism", -(slave.energy)); /* -80 to -100 */ } else if (slave.energy <= 40 && slave.devotion > 50) { - adjustBeauty("Energy: Slave Professionalism", (slave.energy / 4)); + adjustBeauty("Energy: Slave Professionalism", 10 - (slave.energy / 4)); /* +10 to 0 */ } } else if (arcology.FSIntellectualDependency !== "unset") { if (arcology.FSIntellectualDependencyLawBeauty === 1) { @@ -1347,9 +1347,9 @@ globalThis.BeautyArray = (function() { } } if (slave.energy > 80) { - adjustBeauty("Energy: Intellectual Dependency", ((arcology.FSIntellectualDependency / 50) * (8 + (slave.energy / 10)))); /* 20 */ + adjustBeauty("Energy: Intellectual Dependency", ((arcology.FSIntellectualDependency / 50) * (8 + (slave.energy / 10)))); /* 16 to 36 */ } else if (slave.energy <= 60) { - adjustBeauty("Energy: Intellectual Dependency", -((arcology.FSIntellectualDependency / 50) * (60 - slave.energy))); /* -120 */ + adjustBeauty("Energy: Intellectual Dependency", -((arcology.FSIntellectualDependency / 50) * (60 - slave.energy))); /* -120 to 0 */ } } if (arcology.FSChattelReligionistCreed === 1) { @@ -1759,7 +1759,7 @@ globalThis.FResultArray = (function() { * @param {App.Entity.SlaveState} slave */ function calcUseWeights(slave, forSale = 0) { - adjustFResult(`Muscles`, (slave.muscles / 30) - result); + adjustFResult(`Muscles`, slave.muscles / 30); if (slave.muscles < -95) { adjustFResult(`Muscles: Extremely weak`, -5); } else if (slave.muscles < -30) { @@ -1784,7 +1784,7 @@ globalThis.FResultArray = (function() { adjustFResult(`Anal potential: (TODO: does not include piercing?) skill, and arcology anal weight`, 6 * (V.analUseWeight / uses) * (slave.skill.anal / 30)); adjustFResult(`Anus potential: Anus stretched level`, (3 - slave.anus)); if (slave.sexualFlaw === "anal addict") { - adjustFResult(`Anal potential: skill, and arcology anal weight`, (V.analUseWeight / uses) * (slave.skill.anal / 30)); + adjustFResult(`Anal potential: Anal Addict, skill, and arcology anal weight`, (V.analUseWeight / uses) * (slave.skill.anal / 30)); } if (slave.inflationType === "aphrodisiac" && !forSale) { adjustFResult(`Anal potential: Aphrodisiac inflation`, (V.analUseWeight / uses) * (slave.inflation * 3)); @@ -1826,10 +1826,8 @@ globalThis.FResultArray = (function() { * @param {App.Entity.SlaveState} slave */ function calcWorksWithRelationship(slave) { - const fre = V.slaves.findIndex(s => { - return haveRelationshipP(slave, s) && sameAssignmentP(slave, s); - }); - if (fre !== -1) { + const fre = V.slaves.find(s => haveRelationshipP(slave, s) && sameAssignmentP(slave, s)); + if (fre) { adjustFResult(`Works with lover`, 1); } } @@ -2011,9 +2009,9 @@ globalThis.FResultArray = (function() { function calcSlaveProfessionalismBonus(slave) { if (slave.devotion > 50) { if (slave.energy <= 40) { - adjustFResult(`Engery: Professionalism`, 4); + adjustFResult(`Devotion/Energy: Professionalism`, 4); } else { - adjustFResult(`Engery: Professionalism`, 2); + adjustFResult(`Devotion/Energy: Professionalism`, 2); } } // Professional slaves try harder } diff --git a/src/npc/descriptions/style/clothing.js b/src/npc/descriptions/style/clothing.js index cc06e8a744402863393be324b97ddd0d484e4ff4..efa5f2a91fe4eaab80fe70f4998e5c11fec4401f 100644 --- a/src/npc/descriptions/style/clothing.js +++ b/src/npc/descriptions/style/clothing.js @@ -787,7 +787,7 @@ App.Desc.clothing = function(slave, {market, eventDescription} = {}) { r.push(`${His} uniform is pinned with the`); if (slave.ID === V.Bodyguard.ID || slave.ID === V.HeadGirl.ID || slave.ID === V.Recruiter.ID || slave.ID === V.Concubine.ID) { r.push(`golden whip and manacles insignia of a senior slave officer,`); - } else if ((slave.ID === V.Madam.ID) || (slave.ID === V.Nurse.ID) || (slave.ID === V.AttendantID) || (slave.ID === V.Matron.ID) || (slave.ID === V.DJ.ID) || (slave.ID === V.Milkmaid.ID) || (slave.ID === V.Farmer.ID) || (slave.ID === V.StewardessID) || (slave.ID === V.Schoolteacher.ID) || (slave.ID === V.Wardeness.ID)) { + } else if ((slave.ID === V.Madam.ID) || (slave.ID === V.Nurse.ID) || (slave.ID === V.AttendantID) || (slave.ID === V.Matron.ID) || (slave.ID === V.DJ.ID) || (slave.ID === V.Milkmaid.ID) || (slave.ID === V.Farmer.ID) || (slave.ID === V.StewardessID) || (slave.ID === V.SchoolteacherID) || (slave.ID === V.Wardeness.ID)) { r.push(`golden manacles insignia of a junior slave officer,`); } else if ((slave.skill.combat > 0) && getLimbCount(slave, 105) > 0) { r.push(`silver spear and manacles insignia of an augmented slave soldier,`); @@ -809,7 +809,7 @@ App.Desc.clothing = function(slave, {market, eventDescription} = {}) { r.push(`${His} uniform is pinned with the`); if (slave.ID === V.Bodyguard.ID || slave.ID === V.HeadGirl.ID || slave.ID === V.Recruiter.ID || slave.ID === V.Concubine.ID) { r.push(`golden whip and manacles insignia of a senior slave officer,`); - } else if ((slave.ID === V.Madam.ID) || (slave.ID === V.Nurse.ID) || (slave.ID === V.AttendantID) || (slave.ID === V.Matron.ID) || (slave.ID === V.DJ.ID) || (slave.ID === V.Milkmaid.ID) || (slave.ID === V.Farmer.ID) || (slave.ID === V.StewardessID) || (slave.ID === V.Schoolteacher.ID) || (slave.ID === V.Wardeness.ID)) { + } else if ((slave.ID === V.Madam.ID) || (slave.ID === V.Nurse.ID) || (slave.ID === V.AttendantID) || (slave.ID === V.Matron.ID) || (slave.ID === V.DJ.ID) || (slave.ID === V.Milkmaid.ID) || (slave.ID === V.Farmer.ID) || (slave.ID === V.StewardessID) || (slave.ID === V.SchoolteacherID) || (slave.ID === V.Wardeness.ID)) { r.push(`golden manacles insignia of a junior slave officer,`); } else if ((slave.skill.combat > 0) && getLimbCount(slave, 105)) { r.push(`silver spear and manacles insignia of an augmented slave soldier,`); @@ -831,7 +831,7 @@ App.Desc.clothing = function(slave, {market, eventDescription} = {}) { r.push(`${His} uniform is pinned with the`); if ((slave.ID === V.Bodyguard.ID) || (slave.ID === V.HeadGirl.ID) || (slave.ID === V.Recruiter.ID) || (slave.ID === V.Concubine.ID)) { r.push(`golden whip and manacles insignia of a senior slave officer,`); - } else if ((slave.ID === V.Madam.ID) || (slave.ID === V.Nurse.ID) || (slave.ID === V.AttendantID) || (slave.ID === V.Matron.ID) || (slave.ID === V.DJ.ID) || (slave.ID === V.Milkmaid.ID) || (slave.ID === V.Farmer.ID) || (slave.ID === V.StewardessID) || (slave.ID === V.Schoolteacher.ID) || (slave.ID === V.Wardeness.ID)) { + } else if ((slave.ID === V.Madam.ID) || (slave.ID === V.Nurse.ID) || (slave.ID === V.AttendantID) || (slave.ID === V.Matron.ID) || (slave.ID === V.DJ.ID) || (slave.ID === V.Milkmaid.ID) || (slave.ID === V.Farmer.ID) || (slave.ID === V.StewardessID) || (slave.ID === V.SchoolteacherID) || (slave.ID === V.Wardeness.ID)) { r.push(`golden manacles insignia of a junior slave officer,`); } else if ((slave.skill.combat > 0) && getLimbCount(slave, 105)) { r.push(`silver spear and manacles insignia of an augmented slave soldier,`); @@ -853,7 +853,7 @@ App.Desc.clothing = function(slave, {market, eventDescription} = {}) { r.push(`${His} uniform is pinned with the`); if ((slave.ID === V.Bodyguard.ID) || (slave.ID === V.HeadGirl.ID) || (slave.ID === V.Recruiter.ID) || (slave.ID === V.Concubine.ID)) { r.push(`golden whip and manacles insignia of a senior slave officer,`); - } else if ((slave.ID === V.Madam.ID) || (slave.ID === V.Nurse.ID) || (slave.ID === V.AttendantID) || (slave.ID === V.Matron.ID) || (slave.ID === V.DJ.ID) || (slave.ID === V.Milkmaid.ID) || (slave.ID === V.Farmer.ID) || (slave.ID === V.StewardessID) || (slave.ID === V.Schoolteacher.ID) || (slave.ID === V.Wardeness.ID)) { + } else if ((slave.ID === V.Madam.ID) || (slave.ID === V.Nurse.ID) || (slave.ID === V.AttendantID) || (slave.ID === V.Matron.ID) || (slave.ID === V.DJ.ID) || (slave.ID === V.Milkmaid.ID) || (slave.ID === V.Farmer.ID) || (slave.ID === V.StewardessID) || (slave.ID === V.SchoolteacherID) || (slave.ID === V.Wardeness.ID)) { r.push(`golden manacles insignia of a junior slave officer,`); } else if ((slave.skill.combat > 0) && getLimbCount(slave, 105)) { r.push(`silver spear and manacles insignia of an augmented slave soldier,`); diff --git a/src/npc/generate/generateMarketSlave.js b/src/npc/generate/generateMarketSlave.js index fdc0e22bdbb567d9539abd70e09e66d0d1e65674..5044821bd43266f99ca7e60f0b22625261bf5b69 100644 --- a/src/npc/generate/generateMarketSlave.js +++ b/src/npc/generate/generateMarketSlave.js @@ -223,7 +223,7 @@ globalThis.generateMarketSlave = function(market = "kidnappers", numArcology = 1 slave.voice += 1; slave.voiceImplant += 1; } - slave.waist = Math.trunc(slave.waist, -100, -15); + slave.waist = Math.clamp(slave.waist, -100, -15); if (((slave.boobShape === "saggy") || (slave.boobShape === "downward-facing"))) { slave.boobShape = "normal"; } @@ -302,7 +302,7 @@ globalThis.generateMarketSlave = function(market = "kidnappers", numArcology = 1 slave.shoulders = Math.clamp(slave.shoulders-1, -2, 2); slave.hips = Math.clamp(slave.hips+1, -2, 2); } - if ((slave.muscles > 30) && (slave.diet !== "muscle building") && (V.generalUpgradeMuscle !== "toned") && (V.generalUpgradeMuscle !== "ripped")) { + if ((slave.muscles > 30) && (slave.diet !== "muscle building") && !(V.corp.SpecMuscle > 3)) { slave.muscles = Math.clamp(slave.muscles-10, 0, 30); } if ((slave.nipples === "tiny")) { @@ -783,7 +783,7 @@ globalThis.generateMarketSlave = function(market = "kidnappers", numArcology = 1 if (slave.intelligence > -50) { slave.intelligence = Intelligence.random({limitIntelligence: [-100, -50]}); } - V.intelligenceImplant = 0; + slave.intelligenceImplant = 0; if (slave.energy < 80) { slave.energy = jsRandom(80, 100); } @@ -792,7 +792,7 @@ globalThis.generateMarketSlave = function(market = "kidnappers", numArcology = 1 if (slave.intelligence <= 50) { slave.intelligence = Intelligence.random({limitIntelligence: [51, 100]}); } - V.intelligenceImplant = 30; + slave.intelligenceImplant = 30; if (slave.energy > 40) { slave.energy -= 30; } diff --git a/src/npc/interaction/passage/matchmaking.tw b/src/npc/interaction/passage/matchmaking.tw index ab1a90294aac1f154e31d152893f570d5c080220..aa3ddabef18811f7f779d6810194757e6430ac9b 100644 --- a/src/npc/interaction/passage/matchmaking.tw +++ b/src/npc/interaction/passage/matchmaking.tw @@ -183,7 +183,7 @@ Being ordered into a relationship would be difficult for anyone, but they're so <</if>> <<set $subSlave.relationship = 4>> -<<set $subSlave.relationshipTarget = getSlave($activeSlave.ID).ID>> +<<set $subSlave.relationshipTarget = $activeSlave.ID>> <<set $subSlave.devotion -= 20>> <<set getSlave($activeSlave.ID).relationship = 4>> <<set getSlave($activeSlave.ID).relationshipTarget = $subSlave.ID>> @@ -191,8 +191,6 @@ Being ordered into a relationship would be difficult for anyone, but they're so <<set $slaves[$slaveIndices[$subSlave.ID]] = $subSlave>> -<<set $activeSlave = getSlave($activeSlave.ID)>> - <</if>> <<set $activeSlave = getSlave($activeSlave.ID)>> /* this should be harmless, keyword should */ diff --git a/src/pregmod/widgets/pregmodBirthWidgets.tw b/src/pregmod/widgets/pregmodBirthWidgets.tw index 18aff11313145b072cc8c5aded79d6a495159241..62eacc7623c3ef9844d38553dcc76fce8a835e0f 100644 --- a/src/pregmod/widgets/pregmodBirthWidgets.tw +++ b/src/pregmod/widgets/pregmodBirthWidgets.tw @@ -646,8 +646,8 @@ <</if>> <<case "learn in the schoolroom">> - <<if ($Schoolteacher != 0)>> - <<setLocalPronouns $Schoolteacher 2>> + <<if _S.Schoolteacher>> + <<setLocalPronouns _S.Schoolteacher 2>> <</if>> <<if !canWalk($slaves[$i])>> <<if (random(1,20) > $suddenBirth)>> @@ -657,7 +657,7 @@ During a lesson in $schoolroomName, $slaves[$i].slaveName's water breaks. Since $he can't leave the lesson, $he tries $his best to hold back the upcoming birth of <<if $slaves[$i].counter.birthsTotal == 0>>$his first<<else>>this week's<</if>> baby. $He fails to manage and a particularly strong contraction elicits a moan noticeable enough to draw all the students' attention. <<set $humiliation = 1>> <<ClothingBirth>> - <<if $Schoolteacher != 0>>$Schoolteacher.slaveName, furious that _his2 lesson was interrupted, drags $his still very pregnant ass from the class along with $his newborn child<<else>>$He gathers $his newborn child up and is quickly helped from the class<</if>>. $He can feel all the eyes watching $him leave. + <<if _S.Schoolteacher>>_S.Schoolteacher.slaveName, furious that _his2 lesson was interrupted, drags $his still very pregnant ass from the class along with $his newborn child<<else>>$He gathers $his newborn child up and is quickly helped from the class<</if>>. $He can feel all the eyes watching $him leave. <</if>> <<else>> <<if (random(1,20) > $suddenBirth)>> @@ -667,7 +667,7 @@ During a lesson in $schoolroomName, $slaves[$i].slaveName's water breaks. Since $he can't leave the lesson, $he tries $his best to hold back the upcoming birth of <<if $slaves[$i].counter.birthsTotal == 0>>$his first<<else>>this week's<</if>> baby. $He fails to manage and a particularly strong contraction elicits a moan noticeable enough to draw all the students' attention. <<set $humiliation = 1>> <<ClothingBirth>> - <<if $Schoolteacher != 0>>$Schoolteacher.slaveName, furious that _his2 lesson was interrupted, dismisses $him from the class along with $his newborn child<<else>>$He gathers $his newborn child up and quickly excuses $himself from the class<</if>>. $He can feel all the eyes staring at $his still very gravid middle. + <<if _S.Schoolteacher>>_S.Schoolteacher.slaveName, furious that _his2 lesson was interrupted, dismisses $him from the class along with $his newborn child<<else>>$He gathers $his newborn child up and quickly excuses $himself from the class<</if>>. $He can feel all the eyes staring at $his still very gravid middle. <</if>> <</if>> diff --git a/src/uncategorized/PETS.tw b/src/uncategorized/PETS.tw index b66d64bbf2551d8f212448c3484a843015c52c1b..68adec6f5e86ee141fa846f997b1d4dd671e9a8c 100644 --- a/src/uncategorized/PETS.tw +++ b/src/uncategorized/PETS.tw @@ -47,7 +47,7 @@ <<case "stewardess beating">> <<set $activeSlave = _S.Stewardess, $subSlave = $slaves.find(function(s) { return s.assignment == "work as a servant"; })>> <<case "aggressive schoolteacher">> - <<set $activeSlave = $Schoolteacher, $subSlave = $slaves.find(function(s) { return s.assignment == "learn in the schoolroom"; })>> + <<set $activeSlave = _S.Schoolteacher, $subSlave = $slaves.find(function(s) { return s.assignment == "learn in the schoolroom"; })>> <<case "abusive wardeness">> <<set $activeSlave = $Wardeness, $subSlave = $slaves.find(function(s) { return s.assignment == "be confined in the cellblock"; })>> <<case "comforting attendant">> diff --git a/src/uncategorized/bodyModification.js b/src/uncategorized/bodyModification.js index 0839bdf7582dc3ddf8e1fa82df37c0f1dee5c796..5d2653964dabd18745ddcc64239ef584b630d0f3 100644 --- a/src/uncategorized/bodyModification.js +++ b/src/uncategorized/bodyModification.js @@ -244,7 +244,7 @@ App.Medicine.Modification.Select.brand = function(slave, cheat = false) { for (const brand in list) { const frag = new DocumentFragment(); if (!cheat && list[brand].hasOwnProperty("requirements")) { - if (!list[brand].requirements()) { + if (!list[brand].requirements(slave)) { continue; } } diff --git a/src/uncategorized/neighborsFSAdoption.tw b/src/uncategorized/neighborsFSAdoption.tw index 69cf45e9b1ea942ca78a741aed904a6aae5c5fea..f22bebeccb0220c3e871a104168ad67c6f9f4ed2 100644 --- a/src/uncategorized/neighborsFSAdoption.tw +++ b/src/uncategorized/neighborsFSAdoption.tw @@ -39,7 +39,7 @@ societal development. <<case "Racial Supremacism">> <<if $arcologies[$i].FSSupremacist != "unset">><<set $arcologies[$i].FSSupremacist = "unset">><</if>> $desc preoccupied by a racial animus towards $arcologies[0].FSSupremacistRace people, leaving the arcology to @@.yellow;adopt $arcologies[0].FSSupremacistRace Subjugation.@@ - <<set $arcologies[$i].FSSubjugationist = 5>><<set _adopted = 1>> + <<set $arcologies[$i].FSSubjugationist = 5>><<set _adopted = 1>> <<set $arcologies[$i].FSSubjugationistRace = $arcologies[0].FSSupremacistRace>> <<case "Repopulation Focus">> <<if $arcologies[$i].FSRepopulationFocus != "unset">><<set $arcologies[$i].FSRepopulationFocus = "unset">><</if>> @@ -118,15 +118,15 @@ societal development. $desc devoted to spending time in the gym, leading the arcology to @@.yellow;adopt Physical Idealism.@@ <<set $arcologies[$i].FSPhysicalIdealist = 5>><<set _adopted = 1>> <<case "Physical Idealism">> - <<if $arcologies[$i].FSAssetExpansionist != "unset">><<set $arcologies[$i].FSAssetExpansionist = "unset">><</if>> + <<if $arcologies[$i].FSPhysicalIdealist != "unset">><<set $arcologies[$i].FSPhysicalIdealist = "unset">><</if>> $desc addicted to pleasure, leading the arcology to @@.yellow;adopt Decadent Hedonism.@@ <<set $arcologies[$i].FSHedonisticDecadence = 5>><<set _adopted = 1>> <<case "Chattel Religionism">> - <<if $arcologies[$i].FSNull != "unset">><<set $arcologies[$i].FSNull = "unset">><</if>> + <<if $arcologies[$i].FSChattelReligionist != "unset">><<set $arcologies[$i].FSChattelReligionist = "unset">><</if>> $desc open minded, leading the arcology to @@.yellow;permit cultural freedom.@@ <<set $arcologies[$i].FSNull = 5>><<set _adopted = 1>> <<case "Multiculturalism">> - <<if $arcologies[$i].FSChattelReligionist != "unset">><<set $arcologies[$i].FSChattelReligionist = "unset">><</if>> + <<if $arcologies[$i].FSNull != "unset">><<set $arcologies[$i].FSNull = "unset">><</if>> $desc devoutly religious, and interested in a reformation, leading the arcology to @@.yellow;adopt Chattel Religionism.@@ <<set $arcologies[$i].FSChattelReligionist = 5>><<set _adopted = 1>> <<case "Roman Revivalism">> @@ -862,6 +862,7 @@ societal development. /* NEIGHBOR ADOPTION*/ +<<if _adopted == 0>> <<for $j = 0; $j < $arcologies.length; $j++>> <<if $arcologies[$i].direction != $arcologies[$j].direction>> @@ -882,7 +883,7 @@ societal development. <<if ($arcologies[$i].FSSubjugationist == "unset")>> <<if ($arcologies[$i].FSSupremacist == "unset") || ($arcologies[$i].FSSupremacistRace != $arcologies[$j].FSSubjugationistRace)>> - <<if $arcologies[$j].FSSubjugationist > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSSubjugationist > random(0,200)-_influenceBonus>> It @@.yellow;adopts $arcologies[$j].FSSubjugationistRace Subjugation@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSSubjugationist = 5>><<set _adopted = 1>> <<set $arcologies[$i].FSSubjugationistRace = $arcologies[$j].FSSubjugationistRace>> @@ -892,7 +893,7 @@ societal development. <</if>> <<if ($arcologies[$i].FSSupremacist == "unset")>> <<if ($arcologies[$i].FSSubjugationist == "unset") || ($arcologies[$i].FSSubjugationistRace != $arcologies[$j].FSSupremacistRace)>> - <<if $arcologies[$j].FSSupremacist > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSSupremacist > random(0,200)-_influenceBonus>> It @@.yellow;adopts $arcologies[$j].FSSupremacistRace Supremacy@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSSupremacist = 5>><<set _adopted = 1>> <<set $arcologies[$i].FSSupremacistRace = $arcologies[$j].FSSupremacistRace>> @@ -901,159 +902,159 @@ societal development. <</if>> <</if>> <<if ($arcologies[$i].FSRepopulationFocus == "unset") && ($arcologies[$i].FSRestart == "unset") && ($seePreg == 1)>> - <<if $arcologies[$j].FSRepopulationFocus > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSRepopulationFocus > random(0,200)-_influenceBonus>> It @@.yellow;adopts Repopulation@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSRepopulationFocus = 5>><<set _adopted = 1>> <<break>> <</if>> - <<if $arcologies[$j].FSRestart > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSRestart > random(0,200)-_influenceBonus>> It @@.yellow;adopts Eugenics@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSRestart = 5>><<set _adopted = 1>> <<break>> <</if>> <</if>> <<if ($arcologies[$i].FSGenderRadicalist == "unset") && ($arcologies[$i].FSGenderFundamentalist == "unset")>> - <<if $arcologies[$j].FSGenderRadicalist > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSGenderRadicalist > random(0,200)-_influenceBonus>> It @@.yellow;adopts Gender Radicalism@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSGenderRadicalist = 5>><<set _adopted = 1>> <<break>> <</if>> - <<if $arcologies[$j].FSGenderFundamentalist > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSGenderFundamentalist > random(0,200)-_influenceBonus>> It @@.yellow;adopts Gender Fundamentalism@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSGenderFundamentalist = 5>><<set _adopted = 1>> <<break>> <</if>> <</if>> <<if ($arcologies[$i].FSPaternalist == "unset") && ($arcologies[$i].FSDegradationist == "unset")>> - <<if $arcologies[$j].FSPaternalist > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSPaternalist > random(0,200)-_influenceBonus>> It @@.yellow;adopts Paternalism@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSPaternalist = 5>><<set _adopted = 1>> <<break>> <</if>> - <<if $arcologies[$j].FSDegradationist > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSDegradationist > random(0,200)-_influenceBonus>> It @@.yellow;adopts Degradationism@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSDegradationist = 5>><<set _adopted = 1>> <<break>> <</if>> <</if>> <<if ($arcologies[$i].FSIntellectualDependency == "unset") && ($arcologies[$i].FSSlaveProfessionalism == "unset")>> - <<if $arcologies[$j].FSIntellectualDependency > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSIntellectualDependency > random(0,200)-_influenceBonus>> It @@.yellow;adopts Intellectual Dependency@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSIntellectualDependency = 5>><<set _adopted = 1>> <<break>> <</if>> - <<if $arcologies[$j].FSSlaveProfessionalism > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSSlaveProfessionalism > random(0,200)-_influenceBonus>> It @@.yellow;adopts Slave Professionalism@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSSlaveProfessionalism = 5>><<set _adopted = 1>> <<break>> <</if>> <</if>> <<if ($arcologies[$i].FSBodyPurist == "unset") && ($arcologies[$i].FSTransformationFetishist == "unset")>> - <<if $arcologies[$j].FSBodyPurist > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSBodyPurist > random(0,200)-_influenceBonus>> It @@.yellow;adopts Body Purism@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSBodyPurist = 5>><<set _adopted = 1>> <<break>> <</if>> - <<if $arcologies[$j].FSTransformationFetishist > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSTransformationFetishist > random(0,200)-_influenceBonus>> It @@.yellow;adopts Transformation Fetishism@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSTransformationFetishist = 5>><<set _adopted = 1>> <<break>> <</if>> <</if>> <<if ($arcologies[$i].FSYouthPreferentialist == "unset") && ($arcologies[$i].FSMaturityPreferentialist == "unset")>> - <<if $arcologies[$j].FSYouthPreferentialist > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSYouthPreferentialist > random(0,200)-_influenceBonus>> It @@.yellow;adopts Youth Preferentialism@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSYouthPreferentialist = 5>><<set _adopted = 1>> <<break>> <</if>> - <<if $arcologies[$j].FSMaturityPreferentialist > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSMaturityPreferentialist > random(0,200)-_influenceBonus>> It @@.yellow;adopts Maturity Preferentialism@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSMaturityPreferentialist = 5>><<set _adopted = 1>> <<break>> <</if>> <</if>> <<if ($arcologies[$i].FSPetiteAdmiration == "unset") && ($arcologies[$i].FSStatuesqueGlorification == "unset")>> - <<if $arcologies[$j].FSPetiteAdmiration > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSPetiteAdmiration > random(0,200)-_influenceBonus>> It @@.yellow;adopts Petite Admiration@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSPetiteAdmiration = 5>><<set _adopted = 1>> <<break>> <</if>> - <<if $arcologies[$j].FSStatuesqueGlorification > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSStatuesqueGlorification > random(0,200)-_influenceBonus>> It @@.yellow;adopts Statuesque Glorification@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSStatuesqueGlorification = 5>><<set _adopted = 1>> <<break>> <</if>> <</if>> <<if ($arcologies[$i].FSSlimnessEnthusiast == "unset") && ($arcologies[$i].FSAssetExpansionist == "unset")>> - <<if $arcologies[$j].FSSlimnessEnthusiast > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSSlimnessEnthusiast > random(0,200)-_influenceBonus>> It @@.yellow;adopts Slimness Enthusiasm@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSSlimnessEnthusiast = 5>><<set _adopted = 1>> <<break>> <</if>> - <<if $arcologies[$j].FSAssetExpansionist > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSAssetExpansionist > random(0,200)-_influenceBonus>> It @@.yellow;adopts Asset Expansionism@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSAssetExpansionist = 5>><<set _adopted = 1>> <<break>> <</if>> <</if>> <<if ($arcologies[$i].FSPastoralist == "unset") && ($arcologies[$i].FSCummunism == "unset")>> - <<if $arcologies[$j].FSPastoralist > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSPastoralist > random(0,200)-_influenceBonus>> It @@.yellow;adopts Pastoralism@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSPastoralist = 5>><<set _adopted = 1>> <<break>> <</if>> - <<if $arcologies[$j].FSCummunism > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSCummunism > random(0,200)-_influenceBonus>> It @@.yellow;adopts Cummunism@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSCummunism = 5>><<set _adopted = 1>> <<break>> <</if>> <</if>> <<if ($arcologies[$i].FSHedonisticDecadence == "unset") && ($arcologies[$i].FSPhysicalIdealist == "unset")>> - <<if $arcologies[$j].FSHedonisticDecadence > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSHedonisticDecadence > random(0,200)-_influenceBonus>> It @@.yellow;adopts Decadent Hedonism@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSHedonisticDecadence = 5>><<set _adopted = 1>> <<break>> <</if>> - <<if $arcologies[$j].FSPhysicalIdealist > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSPhysicalIdealist > random(0,200)-_influenceBonus>> It @@.yellow;adopts Physical Idealism@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSPhysicalIdealist = 5>><<set _adopted = 1>> <<break>> <</if>> <</if>> <<if ($arcologies[$i].FSChattelReligionist == "unset") && ($arcologies[$i].FSNull == "unset")>> - <<if $arcologies[$j].FSChattelReligionist > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSChattelReligionist > random(0,200)-_influenceBonus>> It @@.yellow;adopts Chattel Religionism@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSChattelReligionist = 5>><<set _adopted = 1>> <<break>> <</if>> <</if>> <<if ($arcologies[$i].FSRomanRevivalist == "unset") && ($arcologies[$i].FSAztecRevivalist == "unset") && ($arcologies[$i].FSEgyptianRevivalist == "unset") && ($arcologies[$i].FSEdoRevivalist == "unset") && ($arcologies[$i].FSArabianRevivalist == "unset") && ($arcologies[$i].FSChineseRevivalist == "unset")>> - <<if $arcologies[$j].FSRomanRevivalist > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSRomanRevivalist > random(0,200)-_influenceBonus>> It @@.yellow;adopts Roman Revivalism@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSRomanRevivalist = 5>><<set _adopted = 1>> <<break>> <</if>> - <<if $arcologies[$j].FSAztecRevivalist > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSAztecRevivalist > random(0,200)-_influenceBonus>> It @@.yellow;adopts Aztec Revivalism@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSAztecRevivalist = 5>><<set _adopted = 1>> <<break>> <</if>> - <<if $arcologies[$j].FSEgyptianRevivalist > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSEgyptianRevivalist > random(0,200)-_influenceBonus>> It @@.yellow;adopts Egyptian Revivalism@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSEgyptianRevivalist = 5>><<set _adopted = 1>> <<break>> <</if>> - <<if $arcologies[$j].FSEdoRevivalist > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSEdoRevivalist > random(0,200)-_influenceBonus>> It @@.yellow;adopts Edo Revivalism@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSEdoRevivalist = 5>><<set _adopted = 1>> <<break>> <</if>> - <<if $arcologies[$j].FSArabianRevivalist > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSArabianRevivalist > random(0,200)-_influenceBonus>> It @@.yellow;adopts Arabian Revivalism@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSArabianRevivalist = 5>><<set _adopted = 1>> <<break>> <</if>> - <<if $arcologies[$j].FSChineseRevivalist > random(0,200)+(_adopted*100)-_influenceBonus>> + <<if $arcologies[$j].FSChineseRevivalist > random(0,200)-_influenceBonus>> It @@.yellow;adopts Chinese Revivalism@@ due to influence from its trading partner $arcologies[$j].name. <<set $arcologies[$i].FSChineseRevivalist = 5>><<set _adopted = 1>> <<break>> @@ -1061,6 +1062,7 @@ societal development. <</if>> <</if>> <</for>> +<</if>> /* RANDOM ADOPTION*/ diff --git a/src/uncategorized/randomNonindividualEvent.tw b/src/uncategorized/randomNonindividualEvent.tw index 24abf725ceeb0aaf86e753276edcb44241b8e4f3..8fbf633a0ab32f3558182ea6adb586f62a6e19a2 100644 --- a/src/uncategorized/randomNonindividualEvent.tw +++ b/src/uncategorized/randomNonindividualEvent.tw @@ -427,7 +427,7 @@ <<set $PESSevent.push("DJ publicity")>> <</if>> - <<if ($Schoolteacher != 0) && (_L.schoolroom > 0) && ($Schoolteacher.intelligence+$Schoolteacher.intelligenceImplant > 15) && ($Schoolteacher.actualAge >= 35)>> + <<if (_S.Schoolteacher) && (_L.schoolroom > 0) && (_S.Schoolteacher.intelligence+_S.Schoolteacher.intelligenceImplant > 15) && (_S.Schoolteacher.actualAge >= 35)>> <<set $PETSevent.push("aggressive schoolteacher")>> <</if>> diff --git a/src/uncategorized/reNickname.tw b/src/uncategorized/reNickname.tw index dc47c42182ac2d0c87c47a5ee99763c232d6f900..0ef60533fb0cde157cb9a62cdcb02753116f15a6 100644 --- a/src/uncategorized/reNickname.tw +++ b/src/uncategorized/reNickname.tw @@ -143,7 +143,7 @@ <<if ($activeSlave.ID == $StewardessID)>> <<set _qualifiedNicknames.push("Stewardess")>> <</if>> -<<if ($activeSlave.ID == $Schoolteacher.ID)>> +<<if ($activeSlave.ID == $SchoolteacherID)>> <<set _qualifiedNicknames.push("Schoolteacher")>> <</if>> <<if ($activeSlave.ID == $Nurse.ID)>> diff --git a/src/uncategorized/saRelationships.tw b/src/uncategorized/saRelationships.tw index 74330ad71a1f22b9f27fb20ae828770a2ccecdfd..0184c02cd4c6e0771fb97fef0ff87efdc055b761 100644 --- a/src/uncategorized/saRelationships.tw +++ b/src/uncategorized/saRelationships.tw @@ -119,7 +119,7 @@ <<set _SlaveI.trust -= 4>> <</if>> <</if>> - <<elseif (_SlaveJ.ID == $Schoolteacher.ID) && (_SlaveI.assignment == "learn in the schoolroom")>> + <<elseif (_SlaveJ.ID == $SchoolteacherID) && (_SlaveI.assignment == "learn in the schoolroom")>> <<if _SlaveJ.rules.relationship != "restrictive">> _SlaveI.slaveName manages to ingratiate $himself with the Schoolteacher, _SlaveJ.slaveName. The two slaves have @@.lightgreen;struck up a friendship.@@ <<set _SlaveJ.relationship = 1, _SlaveJ.relationshipTarget = _SlaveI.ID, _SlaveI.relationship = 1, _SlaveI.relationshipTarget = _SlaveJ.ID>> diff --git a/src/uncategorized/schoolroom.tw b/src/uncategorized/schoolroom.tw index e55b592a89ce9d967c42d5f6cee9595a3f0e21ae..57698e3065dce302a8342418f14361a2199b0866 100644 --- a/src/uncategorized/schoolroom.tw +++ b/src/uncategorized/schoolroom.tw @@ -72,9 +72,9 @@ $schoolroomNameCaps is busy with slaves, repeating their lessons out loud to drill the instruction home. A few students are maintaining uncomfortable positions in the corner as punishment for poor work. <<elseif _DL > 0>> $schoolroomNameCaps is sparsely populated, the few students repeating their lessons out loud to drill the instruction home. One slave is maintaining an uncomfortable position in the corner as punishment for poor work. - <<elseif $Schoolteacher != 0>> - <<setLocalPronouns $Schoolteacher>> - $Schoolteacher.slaveName is alone in $schoolroomName, and has nothing to do but work on $his lesson plans. + <<elseif _S.Schoolteacher>> + <<setLocalPronouns _S.Schoolteacher>> + _S.Schoolteacher.slaveName is alone in $schoolroomName, and has nothing to do but work on $his lesson plans. <<else>> None of your slaves are learning in $schoolroomName. <div class="choices" style="font-style:normal"> diff --git a/src/uncategorized/schoolroomReport.tw b/src/uncategorized/schoolroomReport.tw index 329c301d27b25866e673b90a6b412689add547a9..2d651a8e6642991fa209ba41e731453c85bff245 100644 --- a/src/uncategorized/schoolroomReport.tw +++ b/src/uncategorized/schoolroomReport.tw @@ -1,267 +1,5 @@ :: Schoolroom Report [nobr] -<<set _slaves = App.Utils.sortedEmployees(App.Entity.facilities.schoolroom)>> -<<set _DL = _slaves.length, _SL = $slaves.length, _idleBonus = 0, _FLsFetish = 0>> - -<<if $schoolroomDecoration != "standard">> - <<set _devBonus = 1>> -<<else>> - <<set _devBonus = 0>> -<</if>> - -<<if $Schoolteacher != 0>> - <<set _FLs = $slaveIndices[$Schoolteacher.ID]>> - - <<if ($slaves[_FLs].health.condition < -80)>> - <<run improveCondition($slaves[_FLs], 20)>> - <<elseif ($slaves[_FLs].health.condition < -40)>> - <<run improveCondition($slaves[_FLs], 15)>> - <<elseif ($slaves[_FLs].health.condition < 0)>> - <<run improveCondition($slaves[_FLs], 10)>> - <<elseif ($slaves[_FLs].health.condition < 90)>> - <<run improveCondition($slaves[_FLs], 7)>> - <</if>> - <<if ($slaves[_FLs].devotion <= 60)>> - <<set $slaves[_FLs].devotion++>> - <</if>> - <<if ($slaves[_FLs].trust < -30)>> - <<set $slaves[_FLs].trust++>> - <</if>> - <<set $slaves[_FLs].devotion += _devBonus>> - <<if $slaves[_FLs].rules.living != "luxurious">> - <<set $slaves[_FLs].rules.living = "luxurious">> - <</if>> - <<if $slaves[_FLs].fetishStrength <= 95>> - <<if $slaves[_FLs].fetish != "dom">> - <<if fetishChangeChance($slaves[_FLs]) > random(0,100)>> - <<set _FLsFetish = 1, $slaves[_FLs].fetishKnown = 1, $slaves[_FLs].fetish = "dom">> - <</if>> - <<elseif $slaves[_FLs].fetishKnown == 0>> - <<set _FLsFetish = 1, $slaves[_FLs].fetishKnown = 1>> - <<else>> - <<set _FLsFetish = 2, $slaves[_FLs].fetishStrength += 4>> - <</if>> - <</if>> - <<set $Schoolteacher = $slaves[_FLs]>> - <<setLocalPronouns $Schoolteacher>> - $Schoolteacher.slaveName is serving as your Schoolteacher.<<if $Schoolteacher.relationship == -3 && $Schoolteacher.devotion > 50>> As your loving $wife, $he tries $his best to teach $his pupils how to please you.<</if>> - <<if (_FLsFetish == 1)>> - $He's allowed and even expected to use $his students for $his own sexual gratification, and in their own way $his students are complicit, offering sexual favors for an easier time in the classroom. Before long, $he's running a hungry eye over the tits and asses of new trainees; $he is now @@.lightcoral;more dominant.@@ - <<elseif (_FLsFetish == 2)>> - Every new student in class is a new target for $his personal educational attention. @@.lightsalmon;$He becomes more dominant.@@ - <</if>> - <<if setup.schoolteacherCareers.includes($Schoolteacher.career)>> - $He has experience with students and learning from $his life before $he was a slave, making $him more effective. - <<set _idleBonus++>> - <<elseif $Schoolteacher.skill.teacher >= $masteredXP>> - $He has experience with students and learning from working for you, making $him more effective. - <<set _idleBonus++>> - <<else>> - <<set $slaves[_FLs].skill.teacher += random(1,Math.ceil(($Schoolteacher.intelligence+$Schoolteacher.intelligenceImplant)/15) + 8)>> - <</if>> - <<if ($Schoolteacher.visualAge > 35)>> - $His age earns $him the respect of $his students. - <<set _idleBonus++>> - <</if>> - <<if ($Schoolteacher.intelligence > 15)>> - $He's intelligent enough to be a good teacher. - <<set _idleBonus++>> - <</if>> - <<if ($Schoolteacher.intelligenceImplant >= 15)>> - Since $he's educated $himself, $he understands <<if $schoolroomRemodelBimbo != 0>>how best to apply the new lesson plan<<else>>$his students<</if>>. - <<set _idleBonus++>> - <</if>> - <<if ($Schoolteacher.face > 40)>> - $His students want to be just like their beautiful teacher. - <<set _idleBonus++>> - <</if>> - <<for _slave range _slaves>> - <<set $i = $slaveIndices[_slave.ID]>> - <<setLocalPronouns _slave 2>> - <<if $Schoolteacher.rivalryTarget == _slave.ID>> - Ever since $his <<print rivalryTerm($Schoolteacher)>> was enrolled, $he began stalking the classroom carrying a large paddle, much to _slave.slaveName's terror. - <<set _slave.devotion -= 4, _slave.trust -= 4>> - <<if random(1,100) > 35>> - <<set $Schoolteacher.rivalry++, $slaves[_FLs].rivalry++, _slave.rivalry++>> - <</if>> - <<elseif $Schoolteacher.relationshipTarget == _slave.ID>> - $He dedicates most of $his attention to $his <<print relationshipTerm($Schoolteacher)>>, _slave.slaveName, making sure _he2 understands that day's lesson. - <<set _slave.devotion += 2, _slave.trust += 2>> - <<elseif areRelated($Schoolteacher, _slave)>> - $He makes sure to spend extra time teaching $his <<print relativeTerm($Schoolteacher,_slave)>>, _slave.slaveName. - <<set _slave.trust++>> - <</if>> - <</for>> - <<if (_DL < $schoolroom)>> - <<set _seed = random(1,10)+(($schoolroom-_DL)*(random(150,170)+(_idleBonus*10)))>> - <<run cashX(_seed, "school", $Schoolteacher)>> - <br> Since $he doesn't have enough students to occupy all of $his time, $schoolroomName takes in citizens' slaves on a contract basis and $he teaches them too, earning @@.yellowgreen;<<print cashFormat(_seed)>>.@@ - <</if>> - <<if (_DL > 0)>><br><br><</if>> -<</if>> - -<<if (_DL > 0)>> - <<if (_DL == 1)>>''There is one slave studying in $schoolroomName.''<<else>>''There are _DL slaves studying in $schoolroomName.''<</if>> -<</if>> - -<<if ($Schoolteacher != 0)>> - <<set $i = _FLs>> /* apply following SA passages to facility leader */ - <<if $showEWD != 0>> - <br><br> - /* 000-250-006 */ - <<if $seeImages && $seeReportImages>> - <div class="imageRef tinyImg"> - <<= SlaveArt($slaves[_FLs], 0, 0)>> - </div> - <</if>> - /* 000-250-006 */ - <span class='slave-name'>$slaves[_FLs].slaveName</span> is serving as your Schoolteacher. - <br> - <<= App.SlaveAssignment.choosesOwnClothes($slaves[$i])>> - <<run tired($slaves[$i])>> - <<include "SA rules">> - <<include "SA diet">> - <<include "SA long term effects">> - <<= App.SlaveAssignment.drugs($slaves[$i])>> - <<include "SA relationships">> - <<include "SA rivalries">> - <br><<include "SA devotion">> - <<else>> - <<silently>> - <<run App.SlaveAssignment.choosesOwnClothes($slaves[$i])>> - <<run tired($slaves[$i])>> - <<include "SA rules">> - <<include "SA diet">> - <<include "SA long term effects">> - <<run App.SlaveAssignment.drugs($slaves[$i])>> - <<include "SA relationships">> - <<include "SA rivalries">> - <<include "SA devotion">> - <</silently>> - <</if>> - <<set $Schoolteacher = $slaves[_FLs]>> -<</if>> - -<<set _restedSlaves = 0>> -<<for _slave range _slaves>> - <<set $i = $slaveIndices[_slave.ID]>> - <<setLocalPronouns _slave 2>> - <<set _slave.devotion += _devBonus>> - <<if (_slave.health.condition < -80)>> - <<run improveCondition(_slave, 20)>> - <<elseif (_slave.health.condition < -40)>> - <<run improveCondition(_slave, 10)>> - <<elseif (_slave.health.condition < 0)>> - <<run improveCondition(_slave, 7)>> - <<elseif (_slave.health.condition < 90)>> - <<run improveCondition(_slave, 3)>> - <</if>> - <<if _slave.rules.living != "normal">> - <<set _slave.rules.living = "normal">> - <</if>> - /% Education done? Has to be here before we run the SA's or there will be double entries for slave %/ - <<if _slave.fetish == "mindbroken">> - <<if $assignmentRecords[_slave.ID]>> - <<= assignJobSafely(_slave, $assignmentRecords[_slave.ID])>> - <<else>> - <<= removeJob(_slave, "learn in the schoolroom")>> - <</if>> - <<set _restedSlaves++, _dI--, _DL-->> - <<continue>> - <<else>> - <<if (_slave.intelligenceImplant >= 30 && $schoolroomRemodelBimbo != 1) || (_slave.intelligenceImplant <= -15 && $schoolroomRemodelBimbo == 1)>> - <<if (_slave.voice == 0) || (_slave.accent <= 1) || (($schoolroomUpgradeLanguage == 0) && (_slave.accent <= 2))>> - <<if (_slave.skill.oral > 30) || (($schoolroomUpgradeSkills == 0) && (_slave.skill.oral > 10))>> - <<if (_slave.skill.whoring > 30) || (($schoolroomUpgradeSkills == 0) && (_slave.skill.whoring > 10))>> - <<if (_slave.skill.entertainment > 30) || (($schoolroomUpgradeSkills == 0) && (_slave.skill.entertainment > 10))>> - <<if (_slave.skill.anal > 30) || (($schoolroomUpgradeSkills == 0) && (_slave.skill.anal > 10))>> - <<if (_slave.skill.vaginal > 30) || (($schoolroomUpgradeSkills == 0) && (_slave.skill.vaginal > 10)) || (_slave.vagina < 0)>> - <p> - <span class="slave-name">_slave.slaveName</span> can learn little from further classes, - <span class="noteworthy"> - <<if $assignmentRecords[_slave.ID]>> - <<set _oldJob = $assignmentRecords[_slave.ID]>> - <<= assignJobSafely(_slave, _oldJob)>> - <<if _slave.choosesOwnAssignment === 1>> - and $he is resting before choosing another task. - <<elseif _slave.assignment === "rest">> - <<if _oldJob != "rest">> - and since $he was unable to return to $his old task to <<print _oldJob>>, $his assignment has defaulted to rest. - <<else>> - so $he has returned to rest. - <</if>> - <<else>> - so $he goes back to <<print _slave.assignment>>. - <</if>> - <<else>> - so _his2 assignment has defaulted to rest. - <<= removeJob(_slave, "learn in the schoolroom")>> - <</if>> - </span> - </p> - <<set _restedSlaves++, _dI--, _DL-->> - <<continue>> - <</if>> - <</if>> - <</if>> - <</if>> - <</if>> - <</if>> - <</if>> - <</if>> - <<if $showEWD != 0>> - <br><br> - /* 000-250-006 */ - <<if $seeImages && $seeReportImages>> - <div class="imageRef tinyImg"> - <<= SlaveArt(_slave, 0, 0)>> - </div> - <</if>> - /* 000-250-006 */ - <<setLocalPronouns _slave>> - <span class='slave-name'>_slave.slaveName</span> - <<if _slave.choosesOwnAssignment == 2>> - <<include "SA chooses own job">> - <<else>> - is studying in $schoolroomName. - <</if>> - <br> $He <<= App.SlaveAssignment.takeClasses(_slave)>> - <br> - <<= App.SlaveAssignment.choosesOwnClothes(_slave)>> - <<include "SA rules">> - <<include "SA diet">> - <<include "SA long term effects">> - <<= App.SlaveAssignment.drugs(_slave)>> - <<include "SA relationships">> - <<include "SA rivalries">> - <br><<include "SA devotion">> - <<else>> - <<silently>> - <<include "SA chooses own job">> - <<run App.SlaveAssignment.takeClasses(_slave)>> - <<run App.SlaveAssignment.choosesOwnClothes(_slave)>> - <<include "SA rules">> - <<include "SA diet">> - <<include "SA long term effects">> - <<run App.SlaveAssignment.drugs(_slave)>> - <<include "SA relationships">> - <<include "SA rivalries">> - <<include "SA devotion">> - <</silently>> - <</if>> -<</for>> -<<if (_restedSlaves > 0)>> - <br><br> - <<if (_restedSlaves == 1)>> - One slave has - <<else>> - _restedSlaves slaves have - <</if>> - @@.green;learned@@ all they can, and will be released from the schoolroom before the end of the week. -<</if>> -<<if $schoolroomDecoration != "standard">> - <br><br> $schoolroomNameCaps's $schoolroomDecoration atmosphere @@.hotpink;has a minor impact on the students.@@ -<</if>> -<<if _DL > 0 || $Schoolteacher != 0>> - <br><br> -<</if>> +/* This passage probably isn't really necessary but it helps organize the profiler output. + * TODO: Once all the facility reports look like this, we should probably get rid of these intermediate passages. */ +<<includeDOM App.EndWeek.schoolroomReport()>> diff --git a/src/uncategorized/schoolteacherSelect.tw b/src/uncategorized/schoolteacherSelect.tw index 745cc48ed9e1419e2824e3a71ed20b91b9299069..e7fa4148322b5e9f61491f256f1a425bf1eb9781 100644 --- a/src/uncategorized/schoolteacherSelect.tw +++ b/src/uncategorized/schoolteacherSelect.tw @@ -1,15 +1,14 @@ :: Schoolteacher Select [nobr jump-to-safe jump-hidden jump-from-safe] <<set $nextButton = "Back", $nextLink = "Schoolroom", $encyclopedia = "Schoolteacher">> -<<if ($Schoolteacher != 0)>> - <<set $Schoolteacher = getSlave($Schoolteacher.ID)>> - <<setLocalPronouns $Schoolteacher>> - <span class='slave-name'><<= SlaveFullName($Schoolteacher)>></span> is serving as your Schoolteacher.<br><br>$He will help teach your slaves. +<<if _S.Schoolteacher>> + <<setLocalPronouns _S.Schoolteacher>> + <span class='slave-name'><<= SlaveFullName(_S.Schoolteacher)>></span> is serving as your Schoolteacher.<br><br>$He will help teach your slaves. <<else>> You have not selected a Schoolteacher. <</if>> <br><br>''Appoint a Schoolteacher from your devoted slaves:'' -<br><br>[[None|Schoolroom][removeJob($Schoolteacher, "be the Schoolteacher")]] +<br><br>[[None|Schoolroom][removeJob(_S.Schoolteacher, "be the Schoolteacher")]] <br><br> <<print App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.schoolroom, "Schoolroom")>> diff --git a/src/uncategorized/seRecruiterSuccess.tw b/src/uncategorized/seRecruiterSuccess.tw index 12711a41e4f1cdb9bc001119e94a4e8438c6f8e0..fa2b50e64cbfd29e4811a04c7c9eea04d2beb184 100644 --- a/src/uncategorized/seRecruiterSuccess.tw +++ b/src/uncategorized/seRecruiterSuccess.tw @@ -31,7 +31,7 @@ <<set $activeSlave.trust = random(-10,10)>> <<run setHealth($activeSlave, jsRandom(-40,20))>> <<set $activeSlave.anus = random(1,3)>> -<<if $activeSlave.balls > 0>> +<<if $activeSlave.vagina > 0>> <<set $activeSlave.vagina = random(1,3)>> <<set $activeSlave.skill.vaginal = random(15,40)>> <</if>> diff --git a/src/uncategorized/seRetirement.tw b/src/uncategorized/seRetirement.tw index 3107c553f8cb90e4d7f8708732dd19f85042391e..560bf85bcb33e1af1f5307509444a958e7b0726c 100644 --- a/src/uncategorized/seRetirement.tw +++ b/src/uncategorized/seRetirement.tw @@ -37,365 +37,349 @@ <<= App.UI.slaveDescriptionDialog($activeSlave)>> is retiring from sexual slavery this week, <<if $policies.retirement.fate == "citizen">> - -in a way that will fill the rest of your property with envy and @@.mediumaquamarine;trust.@@ -<<for $i = 0; $i < $slaves.length; $i++>> - <<set $slaves[$i].trust += 3>> -<</for>> -<<if $activeSlave.relationship > 3>> - $slaves[_sr].slaveName, for _his2 part, is @@.hotpink;overjoyed,@@ though also a bit sad. Although _he2 knows _he2 will $slaves[_sr].assignment for a while longer, _he2 looks forward to joining $activeSlave.slaveName one day. - <<set $slaves[_sr].devotion += 10>> -<</if>> -<br><br> - -$He is retiring into citizenship, with a substantial annuity that will provide $him with a secure if not luxurious life. -<<if $activeSlave.relationship == -3>> - <<if $activeSlave.fetish == "mindbroken">> - Sadly, $he is not mentally equipped to look after $himself, but the arcology hosts several fine institutions capable of caring for $him. They'll have someone check in on $him daily. $Him being your $wife is ultimately irrelevant; $he never realized it in the first place. - <<elseif $activeSlave.devotion+$activeSlave.trust >= 175>> - $He wishes $he could continue to be your slave $wife, but $he understands that marriages between slaves and slaveowners are predicated on the slave relationship. $He knows that $his retirement has come, meaning that $his slave relationship to you is ending. $He's had a long time to get used to the idea, and gets through the process with dignity, doing $his best to avoid embarrassing you. - <<elseif $activeSlave.devotion < -20 && $activeSlave.trust > 20>> - $He is glad $he no longer has to be your slave $wife, as $he never wanted to be in the first place, though $he will miss taking advantage of the position. $He understands that marriages between slaves and slaveowners are predicated on the slave relationship. $He knows that $his retirement has come, meaning that $his slave relationship to you is ending. $He's had a long time to dream of the idea, and goes through the process with unremitting joy, doing $his best to embarrass you. - <<elseif $activeSlave.devotion < -20>> - $He is glad $he no longer has to be your slave $wife, as $he never wanted to be in the first place. $He understands that marriages between slaves and slaveowners are predicated on the slave relationship. $He knows that $his retirement has come, meaning that $his slave relationship to you is ending. $He's had a long time to dream of the idea, and goes through the process with unremitting joy, doing $his best to avoid embarrassing you while $he's still subject to your whims and your punishments. - <<else>> - $He is glad $he no longer has to be your slave $wife, as $he never wanted to be in the first place. $He understands that marriages between slaves and slaveowners are predicated on the slave relationship. $He knows that $his retirement has come, meaning that $his slave relationship to you is ending. $He's had a long time to get used to the idea, and gets through the process dutifully, doing $his best to avoid embarrassing you. - <</if>> -<<elseif $activeSlave.fetish == "mindbroken">> - Sadly, $he is not mentally equipped to look after $himself, but the arcology hosts several fine institutions capable of caring for $him. They'll have someone check in on $him daily. -<<elseif $activeSlave.devotion > 95>> - $He desperately wishes $he could continue to be your sex slave, but $he understands that $his retirement has come. More importantly, $he's had a long time to get used to the idea, and gets through the process with resolution, doing $his best to avoid embarrassing $himself or you. -<<elseif $activeSlave.devotion > 20>> - $He is very happy to be a free person again, though $he does $his best to do you the favor of not being too ostentatious about this. -<<else>> - It is with an ill-disguised triumphalism that $he leaves sexual slavery behind $him, and enters into a life in which $he can decline to have things inserted into $his body. -<</if>> -$He's certainly going to have some adjustments to make. -<<if $activeSlave.energy > 90>> - Notably, dealing with $his formidable sex drive is now $his business. You suspect the arcology's clubs are about to receive a fanatical new regular, and the arcology's whores may not know what hit them when $he realizes that $he's now quite capable of buying whatever $he wants on a semi-regular basis. - <<if $activeSlave.skill.anal+$activeSlave.skill.oral >= 120>> - $He's so sexually skilled, though, that $he probably won't have much trouble. $He'll probably have more than a few eager lovers within days. - <</if>> - <<if $activeSlave.face > 40>> - $He's certainly attractive enough that $he'll have no trouble finding as many casual hookups as $he likes. + in a way that will fill the rest of your property with envy and @@.mediumaquamarine;trust.@@ + <<for $i = 0; $i < $slaves.length; $i++>> + <<set $slaves[$i].trust += 3>> + <</for>> + <<if $activeSlave.relationship > 3>> + $slaves[_sr].slaveName, for _his2 part, is @@.hotpink;overjoyed,@@ though also a bit sad. Although _he2 knows _he2 will $slaves[_sr].assignment for a while longer, _he2 looks forward to joining $activeSlave.slaveName one day. + <<set $slaves[_sr].devotion += 10>> <</if>> -<</if>> - -<<if $activeSlave.prestigeDesc == 0>> - <<set _toSearch = "">> -<<else>> - <<set _toSearch = $activeSlave.prestigeDesc>> -<</if>> -<<if $activeSlave.porn.prestigeDesc == 0>> - <<set _toSearchAlt = "">> -<<else>> - <<set _toSearchAlt = $activeSlave.porn.prestigeDesc>> -<</if>> -<<if (_toSearch.indexOf("Head Girl") != -1) || ($HeadGirl.ID == $activeSlave.ID)>> - <br><br> - $He has a reputation from $his long service as your Head Girl. To $his bemusement, and considerable satisfaction, $he has multiple job offers from slaving operations without even having to circulate $his resume. - <<if $activeSlave.fetish == "sadist">> - The prospect of a virtually unlimited field for abuse and rape is something $he'd pay for, now that $he has $his own money. $He's excited beyond description to find that there are people interested in paying $him to exercise $his exquisitely horrible skills. - <<elseif $activeSlave.fetish == "dom">> - Dominance is second nature to $him. Though $he doesn't have to work, $his slaving skills are valuable enough that $he'd probably be tempted by the pay $he can expect, even if $he didn't derive real pleasure from exercising them. - <<else>> - $His annuity means that $he doesn't have to work, but $he's inclined to do so. $His skills command reasonable wages in the slave training field, and between those prospects and $his annuity, $he stands to become wealthy. - <</if>> -<<elseif (_toSearchAlt.indexOf("is world famous for") != -1)>> <br><br> - <<set _pornFame = $activeSlave.porn.prestigeDesc>> - <<set _pornFame = _pornFame.replace("$He is world famous for $his career in slave pornography. Millions are intimately familiar with", "enjoy")>> - <<set _pornFame = _pornFame.replace(".", ",")>> - In addition to $his annuity, you've laid the groundwork for $him to become wealthy by the way you publicized pornography of $him. Many thousands of people across the world are willing to pay to _pornFame and they enjoy it in part because $he doesn't mind it, either. $He's in a position to make great money for doing on camera what $he would probably do anyway. -<<elseif ($activeSlave.intelligence+$activeSlave.intelligenceImplant >= -50) && ($activeSlave.muscles > 5) && ($activeSlave.skill.combat >= 1) && hasAllLimbs($activeSlave) && ($activeSlave.face > 10)>> - <br><br> - $He's pretty and deadly. If $he feels $he prefers wealth and danger to living on $his annuity, $he'll have no trouble finding work. In fact, $he'll likely have trouble sifting through all the mercenary organizations, businesses in need of attractive and competent guards for public spaces, and citizens looking for effective bodyguards willing to hire $him. -<<elseif ($activeSlave.intelligence+$activeSlave.intelligenceImplant > 50) && ($activeSlave.intelligenceImplant >= 15)>> - <br><br> - $He has no skills extraordinary enough to bring prospective employers in search of $him, in this new, slaveowning economy, but $he is highly intelligent, educated, and has a small income. As you know from your own abundant personal experience, $his intelligence is a lever, $his annuity is a fulcrum, and with the two, $he may move the world someday. You have no doubt that, at the very least, $he will be far from the poorest of your citizens. -<</if>> -<br><br> -As $he takes $his leave, heading the short distance down to $his modest little apartment, $he presents a strange appearance. $He's wearing cheap but not unattractive clothing, and you are struck by a crystal-clear mental image of what $he looks like nude. -<<if $activeSlave.fetish != "mindbroken">> - <<if $activeSlave.devotion > 20>> - <<if $activeSlave.devotion > 95>> - $He's doing $his absolute best not to sob, but $his lips are quivering. + $He is retiring into citizenship, with a substantial annuity that will provide $him with a secure if not luxurious life. + <<if $activeSlave.relationship == -3>> + <<if $activeSlave.fetish == "mindbroken">> + Sadly, $he is not mentally equipped to look after $himself, but the arcology hosts several fine institutions capable of caring for $him. They'll have someone check in on $him daily. $Him being your $wife is ultimately irrelevant; $he never realized it in the first place. + <<elseif $activeSlave.devotion+$activeSlave.trust >= 175>> + $He wishes $he could continue to be your slave $wife, but $he understands that marriages between slaves and slaveowners are predicated on the slave relationship. $He knows that $his retirement has come, meaning that $his slave relationship to you is ending. $He's had a long time to get used to the idea, and gets through the process with dignity, doing $his best to avoid embarrassing you. + <<elseif $activeSlave.devotion < -20 && $activeSlave.trust > 20>> + $He is glad $he no longer has to be your slave $wife, as $he never wanted to be in the first place, though $he will miss taking advantage of the position. $He understands that marriages between slaves and slaveowners are predicated on the slave relationship. $He knows that $his retirement has come, meaning that $his slave relationship to you is ending. $He's had a long time to dream of the idea, and goes through the process with unremitting joy, doing $his best to embarrass you. + <<elseif $activeSlave.devotion < -20>> + $He is glad $he no longer has to be your slave $wife, as $he never wanted to be in the first place. $He understands that marriages between slaves and slaveowners are predicated on the slave relationship. $He knows that $his retirement has come, meaning that $his slave relationship to you is ending. $He's had a long time to dream of the idea, and goes through the process with unremitting joy, doing $his best to avoid embarrassing you while $he's still subject to your whims and your punishments. <<else>> - $He looks like $he might cry. + $He is glad $he no longer has to be your slave $wife, as $he never wanted to be in the first place. $He understands that marriages between slaves and slaveowners are predicated on the slave relationship. $He knows that $his retirement has come, meaning that $his slave relationship to you is ending. $He's had a long time to get used to the idea, and gets through the process dutifully, doing $his best to avoid embarrassing you. <</if>> - <<if !canTalk($activeSlave)>> - $He gestures $his thanks, and ironically indicates that $he'll see you around. - <<else>> - "Well, thank<<s>>, <<Master>>, um, I mean _playerName. I g-gue<<ss>> I'll <<s>>ee you around<<if !canSee($activeSlave)>>, uh, a<<s>> they <<s>>ay<</if>>. I mean, the arcology. Anyway. Bye." + <<elseif $activeSlave.fetish == "mindbroken">> + Sadly, $he is not mentally equipped to look after $himself, but the arcology hosts several fine institutions capable of caring for $him. They'll have someone check in on $him daily. + <<elseif $activeSlave.devotion > 95>> + $He desperately wishes $he could continue to be your sex slave, but $he understands that $his retirement has come. More importantly, $he's had a long time to get used to the idea, and gets through the process with resolution, doing $his best to avoid embarrassing $himself or you. + <<elseif $activeSlave.devotion > 20>> + $He is very happy to be a free person again, though $he does $his best to do you the favor of not being too ostentatious about this. + <<else>> + It is with an ill-disguised triumphalism that $he leaves sexual slavery behind $him, and enters into a life in which $he can decline to have things inserted into $his body. + <</if>> + $He's certainly going to have some adjustments to make. + <<if $activeSlave.energy > 90>> + Notably, dealing with $his formidable sex drive is now $his business. You suspect the arcology's clubs are about to receive a fanatical new regular, and the arcology's whores may not know what hit them when $he realizes that $he's now quite capable of buying whatever $he wants on a semi-regular basis. + <<if $activeSlave.skill.anal+$activeSlave.skill.oral >= 120>> + $He's so sexually skilled, though, that $he probably won't have much trouble. $He'll probably have more than a few eager lovers within days. <</if>> - <<if $activeSlave.devotion > 95>> - $He turns resolutely away and flees, trying to choke back $his tears. - <<else>> - $He turns resolutely away. + <<if $activeSlave.face > 40>> + $He's certainly attractive enough that $he'll have no trouble finding as many casual hookups as $he likes. <</if>> <</if>> -<</if>> -<<if $activeSlave.relationship == -3>> - <br> - When you return to your desk you realize something. - <<if $activeSlave.fetish == "mindbroken">> - The ring $he wore when $he was your slave $wife is nowhere to be seen; $he's likely forgotten $he was wearing it, but no matter: you can always get more. - <<elseif $activeSlave.devotion+$activeSlave.trust >= 175>> - The ring $he wore when $he was your slave $wife is nowhere to be seen; $he's likely taken it with $him to remember you by. - <<elseif $activeSlave.devotion < -20 && $activeSlave.trust > 20>> - The ring $he wore when $he was your slave $wife is nowhere to be seen; $he's likely taken it with $him to either try and pawn or to dispose of. It doesn't matter: you can always get more. - <<elseif $activeSlave.devotion < -20>> - The ring $he wore when $he was your slave $wife was left on your desk; $he likely ripped it off as soon as $he was free. + + <<if $activeSlave.prestigeDesc == 0>> + <<set _toSearch = "">> <<else>> - The ring $he wore when $he was your slave $wife is nowhere to be seen; $he's either taken it with $him as a souvenir, or left it back in $his sleeping area. If it's the former, no matter: you can always get more. + <<set _toSearch = $activeSlave.prestigeDesc>> <</if>> -<</if>> - -<br><br> -Your arcology has gained a well-off citizen. -<<set $upperClass += 1>> - -<br><br> - -<<if $activeSlave.energy > 50>> -<<if $activeSlave.devotion > 20>> -<span id="result"> -<<link "See $him around">> - <<setNonlocalPronouns $seeDicks>> - <<replace "#result">> - Later that week, <<if $club > 0>>as you take an evening to enjoy $clubName in person<<else>>out in one of $arcologies[0].name's better clubs<</if>>, you run into _clonedSlave.slaveName. $He looks good, and happy, and is not at all displeased to see you. $He sidles up to you and makes it clear without a - <<if !canTalk(_clonedSlave)>> - gesture + <<if $activeSlave.porn.prestigeDesc == 0>> + <<set _toSearchAlt = "">> <<else>> - word + <<set _toSearchAlt = $activeSlave.porn.prestigeDesc>> <</if>> - that $he's quite eager to fuck you as a free $woman. - <<if _clonedSlave.relationship == -3>> - <<if _clonedSlave.devotion+_clonedSlave.trust >= 175>> - When $he knows $he has your attention, $he flashes <<if hasAnyArms(_clonedSlave)>>$his hand, revealing the steel ring that $he wore when $he was your slave $wife<<else>> the steel ring that $he wore when $he was your slave $wife attached to the same chain you placed around $his neck on your wedding<</if>>. Even though the ring is meaningless to society, it holds a special meaning to you and $him. + <<if (_toSearch.indexOf("Head Girl") != -1) || ($HeadGirl.ID == $activeSlave.ID)>> + <br><br> + $He has a reputation from $his long service as your Head Girl. To $his bemusement, and considerable satisfaction, $he has multiple job offers from slaving operations without even having to circulate $his resume. + <<if $activeSlave.fetish == "sadist">> + The prospect of a virtually unlimited field for abuse and rape is something $he'd pay for, now that $he has $his own money. $He's excited beyond description to find that there are people interested in paying $him to exercise $his exquisitely horrible skills. + <<elseif $activeSlave.fetish == "dom">> + Dominance is second nature to $him. Though $he doesn't have to work, $his slaving skills are valuable enough that $he'd probably be tempted by the pay $he can expect, even if $he didn't derive real pleasure from exercising them. <<else>> - When $he knows $he has your attention, $he produces the steel ring that $he wore when $he was your slave $wife. $He doesn't put it on, but $he kisses it suggestively before putting it back in $his purse. + $His annuity means that $he doesn't have to work, but $he's inclined to do so. $His skills command reasonable wages in the slave training field, and between those prospects and $his annuity, $he stands to become wealthy. <</if>> + <<elseif (_toSearchAlt.indexOf("is world famous for") != -1)>> + <br><br> + <<set _pornFame = $activeSlave.porn.prestigeDesc>> + <<set _pornFame = _pornFame.replace("$He is world famous for $his career in slave pornography. Millions are intimately familiar with", "enjoy")>> + <<set _pornFame = _pornFame.replace(".", ",")>> + In addition to $his annuity, you've laid the groundwork for $him to become wealthy by the way you publicized pornography of $him. Many thousands of people across the world are willing to pay to _pornFame and they enjoy it in part because $he doesn't mind it, either. $He's in a position to make great money for doing on camera what $he would probably do anyway. + <<elseif ($activeSlave.intelligence+$activeSlave.intelligenceImplant >= -50) && ($activeSlave.muscles > 5) && ($activeSlave.skill.combat >= 1) && hasAllLimbs($activeSlave) && ($activeSlave.face > 10)>> + <br><br> + $He's pretty and deadly. If $he feels $he prefers wealth and danger to living on $his annuity, $he'll have no trouble finding work. In fact, $he'll likely have trouble sifting through all the mercenary organizations, businesses in need of attractive and competent guards for public spaces, and citizens looking for effective bodyguards willing to hire $him. + <<elseif ($activeSlave.intelligence+$activeSlave.intelligenceImplant > 50) && ($activeSlave.intelligenceImplant >= 15)>> + <br><br> + $He has no skills extraordinary enough to bring prospective employers in search of $him, in this new, slaveowning economy, but $he is highly intelligent, educated, and has a small income. As you know from your own abundant personal experience, $his intelligence is a lever, $his annuity is a fulcrum, and with the two, $he may move the world someday. You have no doubt that, at the very least, $he will be far from the poorest of your citizens. <</if>> - <<if (_clonedSlave.fetish == "submissive") && (_clonedSlave.fetishKnown == 1)>> - Taking the lead as you know $he prefers, you lead $him to a private booth and make love to $him, holding $him down with the gentle but firm grip that never fails to bring $him through a long and gasping climax. - <<elseif (_clonedSlave.fetish == "cumslut") && (_clonedSlave.fetishKnown == 1)>> - $He <<if $PC.dick != 0>>sucks your dick<<if $PC.vagina != -1>> and <</if>><</if>><<if $PC.vagina != -1>>eats you out<</if>> right there, eagerly <<if _clonedSlave.vagina > -1>>jilling off<<else>>jacking off<</if>> as $he enjoys your infinitely familiar - <<if canTaste(_clonedSlave) && canSmell(_clonedSlave)>> - taste and scent. - <<elseif canTaste(_clonedSlave)>> - taste. - <<elseif canSmell(_clonedSlave)>> - scent. - <<else>> - body. + + <br><br> + As $he takes $his leave, heading the short distance down to $his modest little apartment, $he presents a strange appearance. $He's wearing cheap but not unattractive clothing, and you are struck by a crystal-clear mental image of what $he looks like nude. + <<if $activeSlave.fetish != "mindbroken">> + <<if $activeSlave.devotion > 20>> + <<if $activeSlave.devotion > 95>> + $He's doing $his absolute best not to sob, but $his lips are quivering. + <<else>> + $He looks like $he might cry. + <</if>> + <<if !canTalk($activeSlave)>> + $He gestures $his thanks, and ironically indicates that $he'll see you around. + <<else>> + "Well, thank<<s>>, <<Master>>, um, I mean _playerName. I g-gue<<ss>> I'll <<s>>ee you around<<if !canSee($activeSlave)>>, uh, a<<s>> they <<s>>ay<</if>>. I mean, the arcology. Anyway. Bye." + <</if>> + <<if $activeSlave.devotion > 95>> + $He turns resolutely away and flees, trying to choke back $his tears. + <<else>> + $He turns resolutely away. + <</if>> <</if>> - <<elseif (_clonedSlave.fetish == "humiliation") && (_clonedSlave.fetishKnown == 1)>> - You take $him right there, the humiliation slut getting what $he came to the club to get: an opportunity to orgasm in public with many eyes enjoying the sight of $his pleasure. - <<elseif (_clonedSlave.fetish == "buttslut") && (_clonedSlave.fetishKnown == 1)>> - Your <<if $PC.dick != 0>>dick is<<else>>fingers are<</if>> up $his ass in no time, and $he's so primed for anal that $he climaxes with indecent speed. $He begs you to keep fucking $his butt, and you do. - <<elseif (_clonedSlave.fetish == "boobs") && (_clonedSlave.fetishKnown == 1)>> - $He grinds shamelessly against you, your hands holding $his breasts just the way you know $he loves them held. Your <<if $PC.boobs >= 300>>own tits press softly<<elseif $PC.title == 0>>flat chest presses<<else>>manly chest presses<</if>> against $his back as $he cranes back to kiss you. - <<elseif (_clonedSlave.fetish == "pregnancy") && (_clonedSlave.fetishKnown == 1)>> - $He begs shamelessly for your seed, right here and right now, and <<if $PC.dick != 0>>you give it to $him, producing the usual perverted orgasm as $he feels it inside $him.<<else>>as usual, $he doesn't care that the phallus you fuck $him with is actually a strap-on. $He manages to pretend it's a cock knocking $him up.<</if>> - <<elseif (_clonedSlave.fetish == "dom") && (_clonedSlave.fetishKnown == 1)>> - After some mutually aggressive dancing that leaves you both panting and sweaty, you work together to attract another free dancer, a _girlU who _clonedSlave.slaveName had $his eye on already. Before long, the poor _girlU is screaming with orgasm in a private booth as you take _himU together. - <<elseif (_clonedSlave.fetish == "sadist") && (_clonedSlave.fetishKnown == 1)>> - After some mutually aggressive dancing that leaves you both panting and sweaty, you mutually select one of the club's slaves, and drag _himU back to a private booth. Before long, _hisU screams for mercy are audible on the floor. - <<elseif (_clonedSlave.fetish == "masochist") && (_clonedSlave.fetishKnown == 1)>> - You don't have the setup for really elaborate pain, so you fuck $him hard and fast, to give $him that edge of discomfort that $he now requires to get off. $He gasps as $he gets what $he needs, not free of $his perversions despite $his status as a citizen. - <<else>> - You remember $his uncomplicated tastes well, though the total confidence that $his willingness and pleasure are unfeigned is novel. You dance, you laugh, and you make love to $him, all through the night. <</if>> - <</replace>> -<</link>> -<br> -<<if _clonedSlave.relationship >= 4>> -<<link "Send $his _girl2 into retirement with $him">> - <<set _sr = $slaveIndices[_clonedSlave.relationshipTarget]>> /* must be reset since $activeSlave may already be removed from $slaves */ - <<replace "#artFrame">> - /* 000-250-006 */ - <<if $seeImages == 1>> - <div class="imageColumn"> - <div class="imageRef medImg"> - <<= SlaveArt(_clonedSlave, 2, 0)>> - </div> - <div class="imageRef medImg"> - <<= SlaveArt($slaves[_sr], 2, 0)>> - </div> - </div> + <<if $activeSlave.relationship == -3>> + <br> + When you return to your desk you realize something. + <<if $activeSlave.fetish == "mindbroken">> + The ring $he wore when $he was your slave $wife is nowhere to be seen; $he's likely forgotten $he was wearing it, but no matter: you can always get more. + <<elseif $activeSlave.devotion+$activeSlave.trust >= 175>> + The ring $he wore when $he was your slave $wife is nowhere to be seen; $he's likely taken it with $him to remember you by. + <<elseif $activeSlave.devotion < -20 && $activeSlave.trust > 20>> + The ring $he wore when $he was your slave $wife is nowhere to be seen; $he's likely taken it with $him to either try and pawn or to dispose of. It doesn't matter: you can always get more. + <<elseif $activeSlave.devotion < -20>> + The ring $he wore when $he was your slave $wife was left on your desk; $he likely ripped it off as soon as $he was free. + <<else>> + The ring $he wore when $he was your slave $wife is nowhere to be seen; $he's either taken it with $him as a souvenir, or left it back in $his sleeping area. If it's the former, no matter: you can always get more. <</if>> - /* 000-250-006 */ - <</replace>> - <<replace "#result">> - $He doesn't get far before $he <<if canHear(_clonedSlave)>>hears a desperate pursuit behind $him<<else>>feels a gentle tap on $his shoulder<</if>>. It's $his <<if _clonedSlave.relationship >= 5>>_wife2<<else>>lover<</if>>, $slaves[_sr].slaveName, <<if canHear(_clonedSlave)>>hurrying to catch<<else>>finally catching<</if>> up. Watching on the monitors, you see _clonedSlave.slaveName's mixed pleasure and pain at seeing _him2 again so soon, followed by a tearful explanation and an embrace so heartfelt that the pair of ex-slaves collapse to the floor together, sobbing. - <<set $activeSlave = $slaves[_sr]>> - <<= removeActiveSlave() >> - <br><br> - <<if $arcologies[0].FSPaternalist != "unset">> - Of course, your paternalistic arcology thinks this @@.green;almost too romantic,@@ and there are jesting suggestions that outcomes this adorable ought to be illegal. The pair becomes celebrated citizens immediately. - <<run repX(10*$FSSingleSlaveRep*($arcologies[0].FSPaternalist/$FSLockinLevel), "futureSocieties")>> - <<set $arcologies[0].FSPaternalist += 0.1*$FSSingleSlaveRep>> - <<else>> - Though it is not ordinarily paternalistic, even your society thinks this is @@.green;pretty romantic.@@ - <<run repX(5*$FSSingleSlaveRep, "futureSocieties")>> <</if>> - <br><br>You have gained an additional well-off citizen. + + <br><br> + Your arcology has gained a well-off citizen. <<set $upperClass += 1>> - <</replace>> -<</link>> -<</if>> -</span> -<</if>> -<</if>> + + <br><br> + + <<if $activeSlave.energy > 50>> + <<if $activeSlave.devotion > 20>> + <span id="result"> + <<link "See $him around">> + <<setNonlocalPronouns $seeDicks>> + <<replace "#result">> + Later that week, <<if $club > 0>>as you take an evening to enjoy $clubName in person<<else>>out in one of $arcologies[0].name's better clubs<</if>>, you run into _clonedSlave.slaveName. $He looks good, and happy, and is not at all displeased to see you. $He sidles up to you and makes it clear without a + <<if !canTalk(_clonedSlave)>> + gesture + <<else>> + word + <</if>> + that $he's quite eager to fuck you as a free $woman. + <<if _clonedSlave.relationship == -3>> + <<if _clonedSlave.devotion+_clonedSlave.trust >= 175>> + When $he knows $he has your attention, $he flashes <<if hasAnyArms(_clonedSlave)>>$his hand, revealing the steel ring that $he wore when $he was your slave $wife<<else>> the steel ring that $he wore when $he was your slave $wife attached to the same chain you placed around $his neck on your wedding<</if>>. Even though the ring is meaningless to society, it holds a special meaning to you and $him. + <<else>> + When $he knows $he has your attention, $he produces the steel ring that $he wore when $he was your slave $wife. $He doesn't put it on, but $he kisses it suggestively before putting it back in $his purse. + <</if>> + <</if>> + <<if (_clonedSlave.fetish == "submissive") && (_clonedSlave.fetishKnown == 1)>> + Taking the lead as you know $he prefers, you lead $him to a private booth and make love to $him, holding $him down with the gentle but firm grip that never fails to bring $him through a long and gasping climax. + <<elseif (_clonedSlave.fetish == "cumslut") && (_clonedSlave.fetishKnown == 1)>> + $He <<if $PC.dick != 0>>sucks your dick<<if $PC.vagina != -1>> and <</if>><</if>><<if $PC.vagina != -1>>eats you out<</if>> right there, eagerly <<if _clonedSlave.vagina > -1>>jilling off<<else>>jacking off<</if>> as $he enjoys your infinitely familiar + <<if canTaste(_clonedSlave) && canSmell(_clonedSlave)>> + taste and scent. + <<elseif canTaste(_clonedSlave)>> + taste. + <<elseif canSmell(_clonedSlave)>> + scent. + <<else>> + body. + <</if>> + <<elseif (_clonedSlave.fetish == "humiliation") && (_clonedSlave.fetishKnown == 1)>> + You take $him right there, the humiliation slut getting what $he came to the club to get: an opportunity to orgasm in public with many eyes enjoying the sight of $his pleasure. + <<elseif (_clonedSlave.fetish == "buttslut") && (_clonedSlave.fetishKnown == 1)>> + Your <<if $PC.dick != 0>>dick is<<else>>fingers are<</if>> up $his ass in no time, and $he's so primed for anal that $he climaxes with indecent speed. $He begs you to keep fucking $his butt, and you do. + <<elseif (_clonedSlave.fetish == "boobs") && (_clonedSlave.fetishKnown == 1)>> + $He grinds shamelessly against you, your hands holding $his breasts just the way you know $he loves them held. Your <<if $PC.boobs >= 300>>own tits press softly<<elseif $PC.title == 0>>flat chest presses<<else>>manly chest presses<</if>> against $his back as $he cranes back to kiss you. + <<elseif (_clonedSlave.fetish == "pregnancy") && (_clonedSlave.fetishKnown == 1)>> + $He begs shamelessly for your seed, right here and right now, and <<if $PC.dick != 0>>you give it to $him, producing the usual perverted orgasm as $he feels it inside $him.<<else>>as usual, $he doesn't care that the phallus you fuck $him with is actually a strap-on. $He manages to pretend it's a cock knocking $him up.<</if>> + <<elseif (_clonedSlave.fetish == "dom") && (_clonedSlave.fetishKnown == 1)>> + After some mutually aggressive dancing that leaves you both panting and sweaty, you work together to attract another free dancer, a _girlU who _clonedSlave.slaveName had $his eye on already. Before long, the poor _girlU is screaming with orgasm in a private booth as you take _himU together. + <<elseif (_clonedSlave.fetish == "sadist") && (_clonedSlave.fetishKnown == 1)>> + After some mutually aggressive dancing that leaves you both panting and sweaty, you mutually select one of the club's slaves, and drag _himU back to a private booth. Before long, _hisU screams for mercy are audible on the floor. + <<elseif (_clonedSlave.fetish == "masochist") && (_clonedSlave.fetishKnown == 1)>> + You don't have the setup for really elaborate pain, so you fuck $him hard and fast, to give $him that edge of discomfort that $he now requires to get off. $He gasps as $he gets what $he needs, not free of $his perversions despite $his status as a citizen. + <<else>> + You remember $his uncomplicated tastes well, though the total confidence that $his willingness and pleasure are unfeigned is novel. You dance, you laugh, and you make love to $him, all through the night. + <</if>> + <</replace>> + <</link>> + <br> + <<if _clonedSlave.relationship >= 4>> + <<link "Send $his _girl2 into retirement with $him">> + <<set _sr = $slaveIndices[_clonedSlave.relationshipTarget]>> /* must be reset since $activeSlave may already be removed from $slaves */ + <<replace "#artFrame">> + /* 000-250-006 */ + <<if $seeImages == 1>> + <div class="imageColumn"> + <div class="imageRef medImg"> + <<= SlaveArt(_clonedSlave, 2, 0)>> + </div> + <div class="imageRef medImg"> + <<= SlaveArt($slaves[_sr], 2, 0)>> + </div> + </div> + <</if>> + /* 000-250-006 */ + <</replace>> + <<replace "#result">> + $He doesn't get far before $he <<if canHear(_clonedSlave)>>hears a desperate pursuit behind $him<<else>>feels a gentle tap on $his shoulder<</if>>. It's $his <<if _clonedSlave.relationship >= 5>>_wife2<<else>>lover<</if>>, $slaves[_sr].slaveName, <<if canHear(_clonedSlave)>>hurrying to catch<<else>>finally catching<</if>> up. Watching on the monitors, you see _clonedSlave.slaveName's mixed pleasure and pain at seeing _him2 again so soon, followed by a tearful explanation and an embrace so heartfelt that the pair of ex-slaves collapse to the floor together, sobbing. + <<set $activeSlave = $slaves[_sr]>> + <<= removeActiveSlave() >> + <br><br> + <<if $arcologies[0].FSPaternalist != "unset">> + Of course, your paternalistic arcology thinks this @@.green;almost too romantic,@@ and there are jesting suggestions that outcomes this adorable ought to be illegal. The pair becomes celebrated citizens immediately. + <<run repX(10*$FSSingleSlaveRep*($arcologies[0].FSPaternalist/$FSLockinLevel), "futureSocieties")>> + <<set $arcologies[0].FSPaternalist += 0.1*$FSSingleSlaveRep>> + <<else>> + Though it is not ordinarily paternalistic, even your society thinks this is @@.green;pretty romantic.@@ + <<run repX(5*$FSSingleSlaveRep, "futureSocieties")>> + <</if>> + <br><br>You have gained an additional well-off citizen. + <<set $upperClass += 1>> + <</replace>> + <</link>> + <</if>> + </span> + <</if>> + <</if>> <<elseif $policies.retirement.fate == "bioreactor">> -in a way that will inevitably fill the rest of your property with @@.gold;fear.@@ -<<for $i = 0; $i < $slaves.length; $i++>> - <<set $slaves[$i].trust -= 3>> -<</for>> -<<if $activeSlave.relationship > 3>> - $slaves[_sr].slaveName, for _his2 part, is @@.mediumorchid;horrified.@@ - <<set $slaves[_sr].devotion -= 20>> -<</if>> -<br><br> + in a way that will inevitably fill the rest of your property with @@.gold;fear.@@ + <<for $i = 0; $i < $slaves.length; $i++>> + <<set $slaves[$i].trust -= 3>> + <</for>> + <<if $activeSlave.relationship > 3>> + $slaves[_sr].slaveName, for _his2 part, is @@.mediumorchid;horrified.@@ + <<set $slaves[_sr].devotion -= 20>> + <</if>> + <br><br> -$He is retiring into a featureless existence where the only realities are the phalli ejaculating food, fluid, and drugs into $his <<if $activeSlave.vagina > -1>> vagina,<</if>> anus, and throat,<<if $activeSlave.balls > 0>> the relentless sodomy forcing semen out of $his distended balls,<</if>> and the milk flowing into the milkers tugging at $his painfully engorged nipples. -<<if $activeSlave.fetish == "mindbroken">> - $He's already broken in spirit, and $he complies with $his installation into a milking machine with the dumb obedience of the animal $he has become. -<<elseif $activeSlave.devotion > 20>> - $He complies with $his installation into a milking machine with the dumb obedience of someone whose mind will not allow them to understand their true situation out of simple immediate self-preservation. -<<elseif $activeSlave.trust < 50>> - $He is so terrified of punishment that $he complies with $his installation into a milking machine to avoid pain. $He knows that if $he does not obey, there will be pain, and if $he obeys, there may be pain but it will come later. -<<else>> - $He resists, of course, giving the compliance systems an excuse to unload quite a few volts of electricity into $him. This disobedience is one of $his more abortive attempts to resist your will, and it is $his last. -<</if>> -<br><br> + $He is retiring into a featureless existence where the only realities are the phalli ejaculating food, fluid, and drugs into $his <<if $activeSlave.vagina > -1>> vagina,<</if>> anus, and throat,<<if $activeSlave.balls > 0>> the relentless sodomy forcing semen out of $his distended balls,<</if>> and the milk flowing into the milkers tugging at $his painfully engorged nipples. + <<if $activeSlave.fetish == "mindbroken">> + $He's already broken in spirit, and $he complies with $his installation into a milking machine with the dumb obedience of the animal $he has become. + <<elseif $activeSlave.devotion > 20>> + $He complies with $his installation into a milking machine with the dumb obedience of someone whose mind will not allow them to understand their true situation out of simple immediate self-preservation. + <<elseif $activeSlave.trust < 50>> + $He is so terrified of punishment that $he complies with $his installation into a milking machine to avoid pain. $He knows that if $he does not obey, there will be pain, and if $he obeys, there may be pain but it will come later. + <<else>> + $He resists, of course, giving the compliance systems an excuse to unload quite a few volts of electricity into $him. This disobedience is one of $his more abortive attempts to resist your will, and it is $his last. + <</if>> + <br><br> -It will take $him some time to reach full production, a state that $he'll be kept in until it becomes impossible for the most reckless drug regime to keep $him there. Near the end of the week, you check in on $him idly. $His breasts are already swelling under the hormonal treatments that can only be applied when the sole priority is production. The rhythm of the milkers gives them a slight pulsing heave, first one, then the other. $His milk whitens the lines running away from $his udders. -<br><br> + It will take $him some time to reach full production, a state that $he'll be kept in until it becomes impossible for the most reckless drug regime to keep $him there. Near the end of the week, you check in on $him idly. $His breasts are already swelling under the hormonal treatments that can only be applied when the sole priority is production. The rhythm of the milkers gives them a slight pulsing heave, first one, then the other. $His milk whitens the lines running away from $his udders. + <br><br> -<span id="result"> -<<link "Have a taste">> - <<replace "#result">> - You tug one of the milkers off a nipple, producing a lewd sucking noise as the wet flesh pops free of the machinery. It must have been quite painful, but the feeding apparatus that covers much of the slave's face affords no indication of $his reaction, if any. You heft the boob with both hands and take the nipple into your mouth, sucking gently. A rich jet of cream hits your tongue, the milkfat luscious with hints of vanilla. The warm breastflesh fills your hands, and you fancy that you can feel the prosperity under your fingers as $his body desperately hurries to make more. - <</replace>> -<</link>> -</span> + <span id="result"> + <<link "Have a taste">> + <<replace "#result">> + You tug one of the milkers off a nipple, producing a lewd sucking noise as the wet flesh pops free of the machinery. It must have been quite painful, but the feeding apparatus that covers much of the slave's face affords no indication of $his reaction, if any. You heft the boob with both hands and take the nipple into your mouth, sucking gently. A rich jet of cream hits your tongue, the milkfat luscious with hints of vanilla. The warm breastflesh fills your hands, and you fancy that you can feel the prosperity under your fingers as $his body desperately hurries to make more. + <</replace>> + <</link>> + </span> -<br><br> -You have @@.yellowgreen;gained a standard bioreactor.@@ -<<set $menialBioreactors += 1>> + <br><br> + You have @@.yellowgreen;gained a standard bioreactor.@@ + <<set $menialBioreactors += 1>> <<elseif $policies.retirement.fate == "arcade">> -in a way that will inevitably fill the rest of your property with @@.gold;fear.@@ -<<for $i = 0; $i < $slaves.length; $i++>> - <<set $slaves[$i].trust -= 3>> -<</for>> -<<if $activeSlave.relationship > 3>> - $slaves[_sr].slaveName, for _his2 part, is @@.mediumorchid;horrified.@@ - <<set $slaves[_sr].devotion -= 20>> -<</if>> -<br><br> - -$He is retiring into a dark, featureless eternity in which the only realities are phalli intruding into $his<<if $activeSlave.vagina > -1>> vagina,<</if>> anus, and throat, and the drug-induced haze that will leave $him no choice but to orgasm when $he is penetrated. -<<if $activeSlave.fetish == "mindbroken">> - $He's already broken in spirit, and $he complies with the conversion process with the dumb obedience of the animal $he has become. -<<elseif $activeSlave.devotion > 20>> - $He complies with the conversion process with the dumb obedience of someone whose mind will not allow them to understand their true situation out of simple immediate self-preservation. -<<elseif $activeSlave.trust < 50>> - $He is so terrified of punishment that $he complies with the conversion process to avoid pain. $He knows that if $he does not obey, there will be pain, and if $he obeys, there may be pain but it will come later. -<<else>> - $He resists, of course, giving the compliance systems an excuse to unload quite a few volts of electricity into $him. This disobedience is one of $his more abortive attempts to resist your will, and it is $his last. -<</if>> -<br><br> + in a way that will inevitably fill the rest of your property with @@.gold;fear.@@ + <<for $i = 0; $i < $slaves.length; $i++>> + <<set $slaves[$i].trust -= 3>> + <</for>> + <<if $activeSlave.relationship > 3>> + $slaves[_sr].slaveName, for _his2 part, is @@.mediumorchid;horrified.@@ + <<set $slaves[_sr].devotion -= 20>> + <</if>> + <br><br> -$He is brought down to -<<if $arcade != 0>> - $arcadeName, -<<else>> - the autosurgery, -<</if>> -and, a disturbingly short time later, there is a new Fuckdoll, a humanoid figure encased in a tough black bodysuit, in your office. -<<if !hasAnyLegs($activeSlave)>> - Its <<if isAmputee($activeSlave)>>limbless<<else>>legless<</if>> form is not obviously human. It's a sex toy, with several interesting holes and nothing else worth noticing. -<<else>> - It stands immobile, the hydraulic system hidden within the suit stiffened to make voluntary movement impossible. -<</if>> -<<if $activeSlave.boobs > 2000>> - The suit has a pair of gaps for its monstrous breasts, bare expanses of $activeSlave.skin skin. -<</if>> -<<if $activeSlave.belly >= 5000>> - The suit has a gap for its big belly; a round dome of $activeSlave.skin skin. -<</if>> -<<if $activeSlave.lips > 40>> - Its upper hole is surrounded by a ludicrous set of swollen lips. -<</if>> -<<if $activeSlave.labia > 0>> - The conversion process left its labia permanently engorged. -<</if>> -<<if $activeSlave.vaginaLube > 0>> - Its front hole is dripping streams of natural lubrication. -<</if>> -<<if $activeSlave.anus > 2>> - The gap in the suit over its rear hole opens into the Fuckdoll's interior, since it's the same size as the Fuckdoll's loose sphincter. -<</if>> -<br><br> + $He is retiring into a dark, featureless eternity in which the only realities are phalli intruding into $his<<if $activeSlave.vagina > -1>> vagina,<</if>> anus, and throat, and the drug-induced haze that will leave $him no choice but to orgasm when $he is penetrated. + <<if $activeSlave.fetish == "mindbroken">> + $He's already broken in spirit, and $he complies with the conversion process with the dumb obedience of the animal $he has become. + <<elseif $activeSlave.devotion > 20>> + $He complies with the conversion process with the dumb obedience of someone whose mind will not allow them to understand their true situation out of simple immediate self-preservation. + <<elseif $activeSlave.trust < 50>> + $He is so terrified of punishment that $he complies with the conversion process to avoid pain. $He knows that if $he does not obey, there will be pain, and if $he obeys, there may be pain but it will come later. + <<else>> + $He resists, of course, giving the compliance systems an excuse to unload quite a few volts of electricity into $him. This disobedience is one of $his more abortive attempts to resist your will, and it is $his last. + <</if>> + <br><br> -<span id="result"> -<<link "Fuck it">> - <<setNonlocalPronouns $seeDicks>> - <<replace "#result">> - <<if $PC.dick != 0>> - You enter a command, and the Fuckdoll instantly - <<if hasAnyLegs(_clonedSlave)>> - collapses to its knee<<if hasBothLegs($activeSlave)>>s<</if>>. - <<else>> - presents its upper hole. - <</if>> - You tug the plug clear of its upper hole, and insert your cock. The Fuckdoll's nose ports open when it needs to breathe, but periodically close without warning to force its throat to spasm. When you're bored of this, you pull your dick clear and haul the Fuckdoll over to the couch, entering the command that forces it to present its rear hole. Your saliva-slicked shaft slides readily inside the sex toy's warm interior. After a while, you enter the tightening command, and the Fuckdoll's sphincter obediently cinches down, encouraging you to shoot your load inside it. A low moaning sound issues from its upper hole. + $He is brought down to + <<if $arcade != 0>> + $arcadeName, <<else>> - You shove the Fuckdoll backward onto the couch, and enter a command that forces it into a bridged position. <<if _clonedSlave.vagina > -1>>Its clit is brought to full hardness, and its front hole becomes wet and flushed. You ride this until you orgasm, the Fuckdoll's copious juices adding lewd noises to each grinding motion.<<else>>Its dick is forced to perfect hardness. Its tubes have been tied to prevent any unseemly contamination, allowing you to ride it until you are satisfied. When you're done, the Fuckdoll is allowed to go soft. It did not climax.<</if>> + the autosurgery, <</if>> - You leave it where it is, your personal assistant directing a slave to perform maintenance on it when _heU has the time. - <</replace>> -<</link>> -</span> + and, a disturbingly short time later, there is a new Fuckdoll, a humanoid figure encased in a tough black bodysuit, in your office. + <<if !hasAnyLegs($activeSlave)>> + Its <<if isAmputee($activeSlave)>>limbless<<else>>legless<</if>> form is not obviously human. It's a sex toy, with several interesting holes and nothing else worth noticing. + <<else>> + It stands immobile, the hydraulic system hidden within the suit stiffened to make voluntary movement impossible. + <</if>> + <<if $activeSlave.boobs > 2000>> + The suit has a pair of gaps for its monstrous breasts, bare expanses of $activeSlave.skin skin. + <</if>> + <<if $activeSlave.belly >= 5000>> + The suit has a gap for its big belly; a round dome of $activeSlave.skin skin. + <</if>> + <<if $activeSlave.lips > 40>> + Its upper hole is surrounded by a ludicrous set of swollen lips. + <</if>> + <<if $activeSlave.labia > 0>> + The conversion process left its labia permanently engorged. + <</if>> + <<if $activeSlave.vaginaLube > 0>> + Its front hole is dripping streams of natural lubrication. + <</if>> + <<if $activeSlave.anus > 2>> + The gap in the suit over its rear hole opens into the Fuckdoll's interior, since it's the same size as the Fuckdoll's loose sphincter. + <</if>> + <br><br> -<br><br> -You have @@.yellowgreen;gained a Fuckdoll.@@ -<<set $fuckdolls += 1>> + <span id="result"> + <<link "Fuck it">> + <<setNonlocalPronouns $seeDicks>> + <<replace "#result">> + <<if $PC.dick != 0>> + You enter a command, and the Fuckdoll instantly + <<if hasAnyLegs(_clonedSlave)>> + collapses to its knee<<if hasBothLegs($activeSlave)>>s<</if>>. + <<else>> + presents its upper hole. + <</if>> + You tug the plug clear of its upper hole, and insert your cock. The Fuckdoll's nose ports open when it needs to breathe, but periodically close without warning to force its throat to spasm. When you're bored of this, you pull your dick clear and haul the Fuckdoll over to the couch, entering the command that forces it to present its rear hole. Your saliva-slicked shaft slides readily inside the sex toy's warm interior. After a while, you enter the tightening command, and the Fuckdoll's sphincter obediently cinches down, encouraging you to shoot your load inside it. A low moaning sound issues from its upper hole. + <<else>> + You shove the Fuckdoll backward onto the couch, and enter a command that forces it into a bridged position. <<if _clonedSlave.vagina > -1>>Its clit is brought to full hardness, and its front hole becomes wet and flushed. You ride this until you orgasm, the Fuckdoll's copious juices adding lewd noises to each grinding motion.<<else>>Its dick is forced to perfect hardness. Its tubes have been tied to prevent any unseemly contamination, allowing you to ride it until you are satisfied. When you're done, the Fuckdoll is allowed to go soft. It did not climax.<</if>> + <</if>> + You leave it where it is, your personal assistant directing a slave to perform maintenance on it when _heU has the time. + <</replace>> + <</link>> + </span> -<<elseif $policies.retirement.menial2Citizen == 1>> - <<if $customMenialRetirementAge == $customRetirementAge || $customMenialRetirementAge == $retirementAge>> - in a way that fills your other slaves with @@.mediumaquamarine;trust@@ after seeing one of their own gain freedom. - <<for $i = 0; $i < $slaves.length; $i++>> - <<set $slaves[$i].trust += 2>> - <</for>> - <<if $activeSlave.relationship > 3>> - $slaves[_sr].slaveName, for _his2 part, is @@.hotpink;happy,@@ though also a bit sad. Although _he2 knows _he2 will $slaves[_sr].assignment for a while longer, _he2 looks forward to joining $activeSlave.slaveName one day. - <<set $slaves[_sr].devotion += 5>> - <</if>> - <br><br> - You have @@.yellowgreen;gained a citizen.@@ - <<set $lowerClass += 1>> - <</if>> + <br><br> + You have @@.yellowgreen;gained a Fuckdoll.@@ + <<set $fuckdolls += 1>> <<else>> -into a life of menial drudgery. This has little impact on your other human property. -<<if $activeSlave.relationship > 3>> - $slaves[_sr].slaveName, for _his2 part, is @@.mediumorchid;saddened,@@ but not seriously affected. _He2 knew this was coming. - <<set $slaves[_sr].devotion -= 5>> -<</if>> -There are a thousand things a slave like $him can usefully do around the arcology, and $he'll do them. But $he's reached the age where it's time for you and the arcology's citizens to fuck younger <<print $girl>>s. + into a life of menial drudgery. This has little impact on your other human property. + <<if $activeSlave.relationship > 3>> + $slaves[_sr].slaveName, for _his2 part, is @@.mediumorchid;saddened,@@ but not seriously affected. _He2 knew this was coming. + <<set $slaves[_sr].devotion -= 5>> + <</if>> + There are a thousand things a slave like $him can usefully do around the arcology, and $he'll do them. But $he's reached the age where it's time for you and the arcology's citizens to fuck younger <<print $girl>>s. -<br><br> -You have @@.yellowgreen;gained a menial slave.@@ -<<set $menials += 1>> + <br><br> + You have @@.yellowgreen;gained a menial slave.@@ + <<set $menials += 1>> <</if>> @@ -413,6 +397,6 @@ You have @@.yellowgreen;gained a menial slave.@@ <<else>> /* manually retired */ <<set $nextLink = "Main">> <<set $activeSlave = getSlave($retiree), $retiree = 0, $retired = 0>> - <<= removeActiveSlave() >> + <<= removeActiveSlave()>> <</if>> diff --git a/src/utility/birthWidgets.tw b/src/utility/birthWidgets.tw index 19e793893c4b8655480fd61621f6381b909d27ba..806ed032965070a9c42f22829121add86864743e 100644 --- a/src/utility/birthWidgets.tw +++ b/src/utility/birthWidgets.tw @@ -1023,19 +1023,19 @@ Several of the other slaves present help $him with $his newborn<<if $slaves[$i].pregType > 1>>s<</if>>. <<if _S.Matron>>_S.Matron.slaveName, lured in by the commotion, shoos the other slaves out and helps the new mother to a private room to unwind<<else>>Soon a servant arrives to take $his child<<if $slaves[$i].pregType > 1>>ren<</if>> away, and $he is ushered into a shower to clean up and relax<</if>>. <<case "learn in the schoolroom">> - <<if ($Schoolteacher != 0)>> - <<setLocalPronouns $Schoolteacher 2>> + <<if _S.Schoolteacher>> + <<setLocalPronouns _S.Schoolteacher 2>> <</if>> <<if !canWalk($slaves[$i])>> During a lesson in $schoolroomName, $slaves[$i].slaveName's water breaks. Since $he can't leave the lesson, $he tries $his best to hold back the upcoming birth. $He fails to do so and a particularly strong contraction elicits a moan noticeable enough to draw all the students' attention. <<set $humiliation = 1>> <<ClothingBirth>> - <<if $Schoolteacher != 0>>$Schoolteacher.slaveName, furious that _his2 lesson was interrupted, drags $him from the class along with $his newborn child<<if $slaves[$i].pregType > 1>>ren<</if>><<else>>$He gathers $his newborn child<<if $slaves[$i].pregType > 1>>ren<</if>> up and is quickly helped from the class<</if>>. $He can feel all eyes watching $him leave. + <<if _S.Schoolteacher>>_S.Schoolteacher.slaveName, furious that _his2 lesson was interrupted, drags $him from the class along with $his newborn child<<if $slaves[$i].pregType > 1>>ren<</if>><<else>>$He gathers $his newborn child<<if $slaves[$i].pregType > 1>>ren<</if>> up and is quickly helped from the class<</if>>. $He can feel all eyes watching $him leave. <<else>> During a lesson in $schoolroomName, $slaves[$i].slaveName's water breaks. Since $he can't leave the lesson, $he tries $his best to hold back the upcoming birth. $He fails to do so and a particularly strong contraction elicits a moan noticeable enough to draw all the students' attention. <<set $humiliation = 1>> <<ClothingBirth>> - <<if $Schoolteacher != 0>>$Schoolteacher.slaveName, furious that _his2 lesson was interrupted, dismisses $him from the class along with $his newborn child<<if $slaves[$i].pregType > 1>>ren<</if>><<else>>$He gathers $his newborn child<<if $slaves[$i].pregType > 1>>ren<</if>> up and quickly excuses $himself from the class<</if>>. $He can feel all eyes watching $him leave. + <<if _S.Schoolteacher>>_S.Schoolteacher.slaveName, furious that _his2 lesson was interrupted, dismisses $him from the class along with $his newborn child<<if $slaves[$i].pregType > 1>>ren<</if>><<else>>$He gathers $his newborn child<<if $slaves[$i].pregType > 1>>ren<</if>> up and quickly excuses $himself from the class<</if>>. $He can feel all eyes watching $him leave. <</if>> <<case "take classes">>