diff --git a/devTools/DL-Loop.sh b/devTools/DL-Loop.sh index 62de8ace871c50e518d9d9a63feae34d0ca3ad2c..73bfbe221643f313a341a55e98d12a75a0af8ac2 100755 --- a/devTools/DL-Loop.sh +++ b/devTools/DL-Loop.sh @@ -22,7 +22,7 @@ fi if [[ $varname4 == 1 ]];then echo "https://gitgud.io/$varname2/fc-pregmod/raw/$varname3/" else - for ((i=0; i<=$#; i++)) + for ((i=1; i<=$#; i++)) do if [[ $varname1 == 0 ]]; then wget -q -P /tmp/ https://gitgud.io/$varname2/fc-pregmod/raw/$varname3/${!i} diff --git a/devTools/PreCompile.sh b/devTools/PreCompile.sh index 1bfd07daf3178b857494b95db40adc0009eacae2..248695a23d80fe295aac79642a6ead3109d96943 100755 --- a/devTools/PreCompile.sh +++ b/devTools/PreCompile.sh @@ -1,7 +1,7 @@ #!/bin/ksh -mega-login $1 $2 #U=$1 P=$2 rDir=$3 lDir=$4 repo=$5 Reqs:MEGAcmd,git +mega-login $1 $2 #U=$1 P=$2 rDir=$3 lDir=$4 Reqs:MEGAcmd,git while true;do gen=0;cd $4; - if [[ `echo $?` -gt 0 ]];then mkdir -p $4&&git clone -q --depth 1 $5 $4&&cd $4 + if [[ `echo $?` -gt 0 ]];then mkdir -p $4&&git clone -q --depth 1 https://gitgud.io/pregmodfan/fc-pregmod.git $4&&cd $4 if [[ ! `mega-ls $3|cut -c21-24|paste -sd,` =~ `git log|head -1|cut -c8-11` ]];then gen=1;fi #stackoverflow.com/a/15394738 fi git fetch -q && if [ `git rev-list ...origin|wc -l` -gt 0 ];then git pull -q&&gen=1;fi #stackoverflow.com/a/17192101 diff --git a/sanityCheck.sh b/sanityCheck.sh index d8482d10def05da72638ebec57ea9ce302b91b82..3e1b11ffbd90631e4d637827f9ce8537ff183255 100755 --- a/sanityCheck.sh +++ b/sanityCheck.sh @@ -109,7 +109,7 @@ $GREP -e '<<option' --and --not -e "<<option\(\|s\|lt\|lte\|gt\|gte\|default\|st $GREP -e "<<option[lg]te\? " --and --not -e "<<option[lg]te\?\s\+-\?[0-9]\+\s\+-\?[0-9]\+\s\+[\'\"].*[\'\"]" -- 'src/*' | grep -v src/js | myprint "OptionBadArguments1" $GREP -e "<<optiondefault " --and --not -e "<<optiondefault\s\+\(-\?[0-9]\+\|[\'\"].*[\'\"]\|false\|true\)\s\+[\'\"].*[\'\"]" -- 'src/*' | grep -v src/js | myprint "OptionBadArguments2" $GREP -e "<<option\([lg]t\?\|default\) *>" -- 'src/*' | grep -v src/js | myprint "OptionBadArguments3" -$GREP -e "<<option " --and --not -e "<<option\s\+\(-\?[0-9]\+\|[\'\"].*[\'\"]\|false\|true\)\s\+[\`\'\"].*[\'\"\`]" -- 'src/*' | grep -v src/js | myprint "OptionBadArguments4" +#$GREP -e "<<option " --and --not -e "<<option\s\+\(-\?[0-9]\+\|[\'\"].*[\'\"]\|false\|true\)\s\+[\`\'\"].*[\'\"\`]" -- 'src/*' | grep -v src/js | myprint "OptionBadArguments4" # too many false positives $GREP -e "<<if def [^(>]*[&|]" -- 'src/*' | myprint "AddBracketsAroundDef2" # check for missing ; before statement $GREP 'if $ ' -- 'src/*' | myprint "Missing ; before statement" @@ -128,7 +128,7 @@ $GREP -E "</span>(\.|,|;|:)\s" -- src/*.js | myprint "WrongSelectorPunctuation" # Check for @@ selector instead of <span> selector $GREP "@@\." -- src/*.js | myprint "WrongSelectorUsed" # Check for JSdoc inside function declaration -$GREP -e ".\=.\/\*\*" --or -e "slave\s\*\/" -- src/*.js --exclude 'src/interaction/main/mainLinks.js' | myprint "WrongJSdocFormat" # this --exclude doesn't work +#$GREP -e ".\=.\/\*\*" --or -e "slave\s\*\/" -- src/*.js --exclude 'src/interaction/main/mainLinks.js' | myprint "WrongJSdocFormat" # this --exclude doesn't work # too many false positives # Check for missing whitespace at end of /**/ style comments #$GREP "\S\*\/" -- src/* --exclude 'src/001-lib/jquery/Jquery.js' | myprint "MissingWhitespace" disabled until I can figure out to exclude files # Check for var instead of let or const diff --git a/src/002-config/fc-version.js b/src/002-config/fc-version.js index d958221f8f4fea9023a3c667a0330c1b8775d12a..2629627ea76629400f708cc21df49f8ea97a1ea3 100644 --- a/src/002-config/fc-version.js +++ b/src/002-config/fc-version.js @@ -1,7 +1,7 @@ App.Version = { - base: "0.10.7.1", + base: "0.10.7.1", // The vanilla version the mod is based off of, this should never be changed. pmod: "2.9.X", - release: 1054, + release: 1055, }; /* Use release as save version */ diff --git a/src/004-base/facility.js b/src/004-base/facility.js index 868496f2503f5e878bf79ede0d101adee0c4e6f2..00f8912f94886e4c42f10c20877b0ca261f3aecd 100644 --- a/src/004-base/facility.js +++ b/src/004-base/facility.js @@ -61,22 +61,12 @@ App.Entity.Facilities.Job = class { } /** - * Can slave be employed at this position + * Does slave meet the requirements for this job * @param {App.Entity.SlaveState} slave * @returns {string[]} */ - canEmploy(slave) { + checkRequirements(slave) { let r = []; - if (this.isEmployed(slave)) { - r.push(`${slave.slaveName} is already assigned to ${this.desc.assignment} at ${this.facility.name}.`); - return r; - } - if (!this._facilityHasFreeSpace) { - r.push(`Capacity of ${this.facility.name} exceeded.`); - } - if (slave.assignment === this.desc.assignment) { - r.push(`${slave.slaveName} is already assigned to ${this.desc.assignment}.`); - } if (this.desc.publicSexUse && (slave.breedingMark === 1 && State.variables.propOutcome === 1 && State.variables.eugenicsFullControl !== 1 && State.variables.arcologies[0].FSRestart !== "unset")) { r.push(`${slave.slaveName} is for private use only.`); @@ -90,6 +80,25 @@ App.Entity.Facilities.Job = class { return r; } + /** + * Can slave be employed at this position + * @param {App.Entity.SlaveState} slave + * @returns {string[]} + */ + canEmploy(slave) { + if (this.isEmployed(slave)) { + return [`${slave.slaveName} is already assigned to ${this.desc.assignment} at ${this.facility.name}.`]; + } + if (!this._facilityHasFreeSpace) { + return [`Capacity of ${this.facility.name} exceeded.`]; + } + if (slave.assignment === this.desc.assignment) { + return [`${slave.slaveName} is already assigned to ${this.desc.assignment}.`]; + } + + return this.checkRequirements(slave); + } + /** * Is slave already assigned to this job * @param {App.Entity.SlaveState} slave @@ -212,8 +221,8 @@ App.Entity.Facilities.ManagingJob = class extends App.Entity.Facilities.Job { * @param {App.Entity.SlaveState} slave * @returns {string[]} */ - canEmploy(slave) { - let r = super.canEmploy(slave); + checkRequirements(slave) { + let r = super.checkRequirements(slave); if (slave.devotion < this.desc.requiredDevotion) { r.push(`${slave.slaveName} must be more devoted to you.`); } diff --git a/src/Corporation/corporate-divisionAcquiring.js b/src/Corporation/corporate-divisionAcquiring.js index 66b22415dfccd386afa8a51c7258d57fd62280b2..bdf5a516446dc6e42096050d5c1e62bb7676316d 100644 --- a/src/Corporation/corporate-divisionAcquiring.js +++ b/src/Corporation/corporate-divisionAcquiring.js @@ -27,7 +27,7 @@ App.Corporate.Init_DivisionAcquiring = function(shared) { get nounFinishedSlave() { return "slave"; } get nounSlaveFromMarket() { return "slave"; } messageSlaveCount() { - return `It averages @@.green;${numberWithPluralNonZero(this.developmentCount, "new slave")}@@ each week.`; + return `It averages <span class="green">${numberWithPluralNonZero(this.developmentCount, "new slave")}</span> each week.`; } messageSlaveOutput() { return shared.MessageSlaveToMarket(this); @@ -35,11 +35,11 @@ App.Corporate.Init_DivisionAcquiring = function(shared) { message_endWeek_Slaves(divLedger) { let newSlaves = divLedger.slaves.value; if(newSlaves > 0) { - return `@@.green;acquired ${numberWithPlural(newSlaves, "slave")}@@` + return `<span class="green">acquired ${numberWithPlural(newSlaves, "slave")}</span>` + (this.hadMercenaryHelp ? " with the help of your mercenaries" : ""); } else { - return `@@.red;failed to acquire any slaves@@` + return `<span class="red">failed to acquire any slaves</span>` + (this.hadMercenaryHelp ? " even with the help of your mercenaries" : ""); } } diff --git a/src/Corporation/corporate-divisionBase.js b/src/Corporation/corporate-divisionBase.js index 6bfe16886d2e4653d8428d72e8abe60344e23e1d..90de97fd5715b016bd0eccdc3e8aa1d621a13739 100644 --- a/src/Corporation/corporate-divisionBase.js +++ b/src/Corporation/corporate-divisionBase.js @@ -124,10 +124,10 @@ App.Corporate.Init_DivisionBase = function(shared) { } throw "No route to acquisition found."; } - get maintenanceSlaves() { return this.activeSlaves; } + get maintenanceSlaves() { return this.activeSlaves * this.processRate; } getDisplayMaintenanceCost() { const cost = this.maintenanceCost; - const processedCount = this.maintenanceSlaves * this.processRate; + const processedCount = this.maintenanceSlaves; return { cost, perUnit: cost / processedCount }; } diff --git a/src/Corporation/corporate-divisionProcessing.js b/src/Corporation/corporate-divisionProcessing.js index 3631deaffb36e7a3b994828902d273efe7438103..a5870ac1cb2d82c71067774ecc44a8ea783b16e6 100644 --- a/src/Corporation/corporate-divisionProcessing.js +++ b/src/Corporation/corporate-divisionProcessing.js @@ -38,10 +38,10 @@ App.Corporate.Init_DivisionProcessing = function(shared) { //The division let retval = this._const.slaveProcessType.past; //exploited if(newSlaves <= 0) { - retval += " @@.red;none of its slaves@@"; + retval += " <span class='red'>none of its slaves</span>"; } else { - retval += ` @@.green;${numberWithPlural(newSlaves, 'slave')}@@`; + retval += ` <span class="green">${numberWithPlural(newSlaves, 'slave')}</span>`; } retval += ". The division "; if(this.activeSlaves) { diff --git a/src/Corporation/corporate-divisionWorking.js b/src/Corporation/corporate-divisionWorking.js index 62f0ea48455552245a7d66ad7d9607bab5015dea..1cbd33e232a6621060f31696f41bf2d7034d1ffb 100644 --- a/src/Corporation/corporate-divisionWorking.js +++ b/src/Corporation/corporate-divisionWorking.js @@ -28,7 +28,7 @@ App.Corporate.Init_DivisionWorking = function(shared) { } messageSlaveOutput() { /* TODO: originally some divisions had a slight description for what the work was; ie, "the escorts generate" */ - return `The division generates @@.yellowgreen;${cashFormat(this.slaveRevenue)}@@ per slave on average.`; + return `The division generates <span class="yellowgreen">${cashFormat(this.slaveRevenue)}</span> per slave on average.`; } endWeek_Slaves(divLedger) { let slaves = shared.EndWeekProcessing_Slaves(this.activeSlaves, this._const.attrition); @@ -39,13 +39,13 @@ App.Corporate.Init_DivisionWorking = function(shared) { let lostSlaves = divLedger.slaves.value; let retval = '';//The division if(this.activeSlaves <= 0) { - retval += `has @@.red;no slaves@@ to ${this._const.slaveWorkDescription.future}`; + retval += `has <span class="red">no slaves</span> to ${this._const.slaveWorkDescription.future}`; } else { - retval += `is ${this._const.slaveWorkDescription.present} @@.green;${numberWithPlural(this.activeSlaves, 'slave')}@@`; + retval += `is ${this._const.slaveWorkDescription.present} <span class="green">${numberWithPlural(this.activeSlaves, 'slave')}</span>`; } if(lostSlaves > 0) { - retval += `. During operations @@.red;${numberWithPlural(lostSlaves, 'slave')}@@ ${this._const.slaveWorkDescription.past}`; + retval += `. During operations <span class="red">${numberWithPlural(lostSlaves, 'slave')}</span> ${this._const.slaveWorkDescription.past}`; } return retval; } @@ -78,6 +78,10 @@ App.Corporate.Init_DivisionWorking = function(shared) { get slaveRevenue() { return this._const.revenue.center; } + get maintenanceSlaves() { + //maintenance is paid on working slaves, not worked slaves. + return this.activeSlaves; + } get foundingCostSlaves() { return this._const.founding.size * this.purchasedSlaveValue; } get foundingCost() { return this.foundingCostDivision + this.foundingCostSlaves; } diff --git a/src/Corporation/corporate.js b/src/Corporation/corporate.js index db453c5b5199b7a1278ed92bc5827f077d48aebd..05457b8d23484373a2014d7f41c004d281f9cabb 100644 --- a/src/Corporation/corporate.js +++ b/src/Corporation/corporate.js @@ -413,10 +413,10 @@ App.Corporate.Init = function() { let procCount = Math.trunc(division.developmentCount * division.processRate); let slaveCountedNoun = numberWithPluralNonZero(procCount, "slave"); - return `It ${verbPhrase} approximately @@.${color};${slaveCountedNoun}@@ each week when operating at capacity (${division.developmentCount})`; + return `It ${verbPhrase} approximately <span class="${color}">${slaveCountedNoun}</span> each week when operating at capacity (${division.developmentCount})`; }, MessageSlaveToMarket: function(division) { - return `The slaves from this division can be sold for @@.yellowgreen;${cashFormat(division.soldSlaveValue * menialSlaveCost())}@@ each.`; + return `The slaves from this division can be sold for <span class='yellowgreen'>${cashFormat(division.soldSlaveValue * menialSlaveCost())}</span> each.`; }, EndWeekProcessing_Slaves: function(processingCount, rate) { const perDevPair = rate.roll(); diff --git a/src/Corporation/manageCorporation.tw b/src/Corporation/manageCorporation.tw index 220018e0a5db6079c64a77a7d6f0d73667725343..2b7641e6e109fea44a346b6d41296b1d17b3bda9 100644 --- a/src/Corporation/manageCorporation.tw +++ b/src/Corporation/manageCorporation.tw @@ -174,7 +174,7 @@ /* Expanding the division*/ <<set _depExpandCost = _div.sizeCost * 1000>> - <div>Expanding the division costs @@.red;<<print cashFormat(_depExpandCost)>>@@. Downsizing recoups 80% of the investment; slaves will be sold at the going rate.</div> + <div>Expanding the division costs <span class="red"><<print cashFormat(_depExpandCost)>></span>. Downsizing recoups 80% of the investment; slaves will be sold at the going rate.</div> <div> <<set _buyDevArray = [ { 'name': 'Expand Division' , 'count':1}, diff --git a/src/SecExp/secExpSmilingMan.tw b/src/SecExp/secExpSmilingMan.tw index 1bce6f552d8977f1e2489b1f1a1d039c87527947..72cfa27eb0e1e0600b635b6930a3806920591291 100644 --- a/src/SecExp/secExpSmilingMan.tw +++ b/src/SecExp/secExpSmilingMan.tw @@ -1,21 +1,19 @@ :: secExpSmilingMan [nobr] -<strong>The Smiling Man</strong> -<br> - +<strong>The Smiling Man</strong> <br> +<<set $nextButton = "Continue", $nextLink = "Random Nonindividual Event">> <<setAssistantPronouns>> <<if $smilingManProgress == 0>> - <<set $nextButton = "Continue", $nextLink = "Random Nonindividual Event">> <<set $fcnn.push("...encryption techniques: how to protect you and your loved ones from hackers ...")>> - <br> /* TODO: fix grammatical errors and clean this block up */ - During your morning routine, you come across a peculiar report: it's been several weeks now that your arcology has been the victim of a series of cyber-crimes conducted by a mysterious figure. - The egocentric criminal took great pride in their acts, to the point of signing his acts with their peculiar symbol: a stylized smiling face. Your arcology was not the only one under assault by the + <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 was doing, you cannot help but admire the skill with which every misdeed is carried — the worst white collar crimes of the century, carried out with such elegance - that they almost seemed the product of natural laws, rather than the masterful manipulation of the digital market. - While you sift through the pages of the report, $assistantName 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 — not yet at least. Still, the repercussions of numerous bankruptcies take their toll on your arcology, whose @@.red;prosperity suffers.@@ + <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, $assistantName 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"> @@ -24,8 +22,8 @@ <<link "Devote funds to the search for this dangerous criminal">> <<run cashX(-10000, "event")>> <<set $investedFunds = 1>> - <<set $relationshipLM += 1>> - <<set $smilingManProgress += 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>> @@ -35,7 +33,7 @@ <<run cashX(-10000, "event")>> <<set $investedFunds = 1>> <<set $relationshipLM += 2>> - <<set $smilingManProgress += 1>> + <<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>> @@ -45,7 +43,7 @@ <<run cashX(-10000, "event")>> <<set $investedFunds = 1>> <<set $relationshipLM += random(5,10)>> - <<set $smilingManProgress += 1>> + <<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>> @@ -55,14 +53,13 @@ <</if>> <br> <<link "Ignore the issue">> - <<set $smilingManProgress += 1>> + <<set $smilingManProgress++>> <<replace "#result">> You do not consider this individual a threat. <</replace>> <</link>> </span> <<elseif $smilingManProgress == 1>> - <<set $nextButton = "Continue", $nextLink = "Random Nonindividual Event">> <<set $fcnn.push("...cybersecurity market is booming thanks to a series of recent high-profile attacks...")>> <br> @@ -79,15 +76,18 @@ <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.@@ <<set _lostCash = Math.clamp(50000 * Math.trunc($week / 20), 50000, 1000000)>> - <<if $assistantPower == 1>> - <<set _lostCash -= Math.min(20000, _lostCash)>> - <br>Fortunately, the computing power available to $assistantName allowed _himA to somewhat limit the losses. - <<elseif $assistantPower == 2>> - <<set _lostCash -= Math.min(30000, _lostCash)>> - <br>Fortunately, the computing power available to $assistantName allowed _himA to limit the losses. - <<elseif $assistantPower >= 3>> - <<set _lostCash -= Math.min(40000, _lostCash)>> - <br>Fortunately, the computing power available to $assistantName allowed _himA to significantly limit the losses. + <<if $assistantPower >= 1>> + <br>Fortunately, the computing power available to $assistantName allowed _himA to + <<if $assistantPower == 1>> + <<set _lostCash -= Math.min(20000, _lostCash)>> + somewhat + <<elseif $assistantPower == 2>> + <<set _lostCash -= Math.min(30000, _lostCash)>> + <<elseif $assistantPower >= 3>> + <<set _lostCash -= Math.min(40000, _lostCash)>> + significantly + <</if>> + limit the damage. <</if>> <<if $secUpgrades.cyberBots == 1>> <<set _lostCash -= Math.min(30000, _lostCash)>> @@ -103,16 +103,16 @@ <span id="result"> <br> <<link ""I want him dead. Now."">> - <<set $relationshipLM -= 1>> - <<set $smilingManProgress += 1>> + <<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 += 1>> - <<set $smilingManProgress += 1>> + <<set $relationshipLM++>> + <<set $smilingManProgress++>> <<replace "#result">> You command your loyal operatives to double down on the search and capture of the threat. <</replace>> @@ -120,14 +120,14 @@ <br> <<link ""If we don't find him soon, we will regret it."">> <<set $relationshipLM += 2>> - <<set $smilingManProgress += 1>> + <<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 += 1>> + <<set $smilingManProgress++>> <<set $nextButton = "Continue", $nextLink = "Random Nonindividual Event">> <<replace "#result">> You take no further action. Hopefully this ordeal is over. @@ -135,7 +135,6 @@ <</link>> </span> <<elseif $smilingManProgress == 2>> - <<set $nextButton = "Continue", $nextLink = "Random Nonindividual Event">> <<set $fcnn.push("...my money safe the old-fashioned way: I store it all underneath my mattress...")>> <br> @@ -154,10 +153,11 @@ <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>> - The vast majority of currency is digital, so the actions of the Smiling Man have a devastating effect on the money supply. Luckily for you this means that your @@.yellowgreen;debt is reduced.@@ + Luckily for you this means that your @@.yellowgreen;debt is reduced.@@ <<else>> - The vast majority of currency is digital, so the actions of the Smiling Man have a devastating effect on the money supply. Unfortunately this means that your @@.red;cash reserves are gutted.@@ + 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. @@ -212,16 +212,16 @@ <span id="result"> <br> <<link ""Eliminate the threat, once and for all."">> - <<set $relationshipLM -= 1>> - <<set $smilingManProgress += 1>> + <<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 += 1>> - <<set $smilingManProgress += 1>> + <<set $relationshipLM++>> + <<set $smilingManProgress++>> <<replace "#result">> You command your loyal operatives to prepare for a manhunt. <</replace>> @@ -229,14 +229,14 @@ <br> <<link ""Such skill on my side would be a great boon. Find him."">> <<set $relationshipLM += 2>> - <<set $smilingManProgress += 1>> + <<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 += 1>> + <<set $smilingManProgress++>> <<set $nextButton = "Continue", $nextLink = "Random Nonindividual Event">> <<replace "#result">> You take no further action. Hopefully this ordeal is finally over. @@ -256,8 +256,6 @@ <<if $seeDicks != 100>> <<set $activeSlave = GenerateNewSlave("XX")>> <<set $activeSlave.faceShape = "cute">> - <<set $activeSlave.boobShape = "perky">> - <<set $activeSlave.nipples = "cute">> <<set $activeSlave.boobs = 450>> <<set $activeSlave.vagina = 0>> <<set $activeSlave.ovaries = 1>> @@ -265,8 +263,9 @@ <<set $activeSlave = GenerateNewSlave("XY")>> <<set $activeSlave.boobs = 250>> <<set $activeSlave.faceShape = "androgynous">> - <<set $activeSlave.boobShape = "perky">> <</if>> + <<set $activeSlave.boobShape = "perky">> + <<set $activeSlave.nipples = "cute">> <<set $activeSlave.origin = "$He was a criminal mastermind, captured shortly after completing $his master plan.">> <<set $activeSlave.career = "a student from a private school">> <<set $activeSlave.intelligence = 100>> @@ -279,7 +278,6 @@ <<set $activeSlave.face = random(10,50)>> <<set $activeSlave.health = 70>> <<set $activeSlave.teeth = "normal">> - <<set $activeSlave.nipples = "cute">> <<set $activeSlave.areolae = 0>> <<set $activeSlave.anus = 0>> <<set $activeSlave.butt = 3>> @@ -313,121 +311,98 @@ <span id="continue"> -<<link "calling you inside.">> - <<replace "#continue">> - <span id="artFrame"> - /* 000-250-006 */ - <<if $seeImages == 1>> - <<if $imageChoice == 1>> + <<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>> - <div class="imageRef medImg"><<= SlaveArt($activeSlave, 2, 0)>></div> + I expected you would be the one. <</if>> - <</if>> - /* 000-250-006 */ + 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>> + + <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, $his crimes 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> - calling you inside. - <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. - <</replace>> -<</link>> -</span> - <br> - <br> - <<link "Offer $him a new life">> - <<set $smilingManFate = 0>> - <<replace "#result">> - 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 += 1>> - <<goto "secExpSmilingMan">> - <</link>> - <</replace>> + <</replace>> /* closes replace "#continue" */ <</link>> - <br> - <<link "Make $him pay">> - <<set $smilingManFate = 1>> - <<replace "#result">> - 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 += 1>> - <<goto "secExpSmilingMan">> - <</link>> - <</replace>> - <</link>> - <br> - <<link "Enslave $him">> - <<set $smilingManFate = 2>> - <<replace "#result">> - You decide to enslave the $girl. $His skill may be great, $his crimes equally so, which makes it all the sweeter to turn $him into an obedient little toy to play with. - <br> - <<link "Continue">> - <<set $smilingManProgress += 1>> - <<goto "secExpSmilingMan">> - <</link>> - <</replace>> - <</link>> - <br> - <br> - <span id="result"> - </span> - <br> + </span> /* closes id="continue" */ <<else>> - <<set $nextButton = "Continue", $nextLink = "Random Nonindividual Event">> + + /* 000-250-006 */ + <<if $seeImages == 1>> + <div class="imageRef medImg"><<= SlaveArt($activeSlave, 2, 0)>></div> + <</if>> + /* 000-250-006 */ <<if $smilingManFate == 0>> - /* 000-250-006 */ - <<if $seeImages == 1>> - <<if $imageChoice == 1>> - <div class="imageRef medImg"><<= SlaveArt($activeSlave, 2, 0)>></div> - <<else>> - <div class="imageRef medImg"><<= SlaveArt($activeSlave, 2, 0)>></div> - <</if>> - <</if>> - /* 000-250-006 */ + The $girl asks for a few minutes to think about your offer, <<if $relationshipLM >= 4>> - The $girl asks for a few minutes to think about your offer, but $he quickly comes to terms with the situation and accepts. 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. + but $he quickly comes to terms with the situation and accepts. <<else>> - The $girl asks for a few minutes to think about your offer, and after some time $he reluctantly accepts. 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. + 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. <<elseif $smilingManFate == 1>> <<set $activeSlave.clothes = "no clothing">> - /* 000-250-006 */ - <<if $seeImages == 1>> - <<if $imageChoice == 1>> - <div class="imageRef medImg"><<= SlaveArt($activeSlave, 2, 0)>></div> - <<else>> - <div class="imageRef medImg"><<= SlaveArt($activeSlave, 2, 0)>></div> - <</if>> - <</if>> - /* 000-250-006 */ 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.@@ <<run repX(10000, "architecture")>> <<elseif $smilingManFate == 2>> <<set $activeSlave.clothes = "no clothing">> + Your men move to immobilize $him. Terror flashes through $his eyes for <<if $relationshipLM >= 4>> - Your men move to immobilize $him. Terror flashes through $his eyes for a second, but $he quickly recovers $his usual demeanor. + a second, but $he quickly recovers $his usual demeanor. <<else>> - Your men move to immobilize $him. Terror flashes through $his eyes for a second — $he barely manages to recover $his usual demeanor. + a second — $he barely manages to recover $his usual demeanor. <</if>> - <br><br> - <<set $saleDescription = 0, $applyLaw = 0>> + <br><br> <<set $saleDescription = 0, $applyLaw = 0>> <<include "Long Slave Description">> - <br> - <<include "New Slave Intro">> + <br> <<include "New Slave Intro">> <</if>> -<</if>> \ No newline at end of file +<</if>> diff --git a/src/endWeek/saTakeClasses.js b/src/endWeek/saTakeClasses.js index c25203b52580787e64c07673f480d416ccfc9c18..bc36709a942f41ddb0dc21aee45c516ce125539b 100644 --- a/src/endWeek/saTakeClasses.js +++ b/src/endWeek/saTakeClasses.js @@ -239,7 +239,7 @@ window.saTakeClasses = (function saServeThePublic() { * */ function skillLessons(slave) { - let undevoted = 0; // forces an obediance lesson to replace the first skill lesson + let undevoted = 0; // forces an obedience lesson to replace the first skill lesson let skillIncrease = 0; if (V.schoolroomRemodelBimbo !== 1 || slave.assignment !== "learn in the schoolroom") { skillIncrease = (10 + Math.floor((slave.intelligence + slave.intelligenceImplant) / 32)); diff --git a/src/events/intro/introSummary.tw b/src/events/intro/introSummary.tw index 16dff05382a4cc8d1f67db02e3d9cf2309aaf381..8b787f4af70db3253243d44977be2a7b492739d6 100644 --- a/src/events/intro/introSummary.tw +++ b/src/events/intro/introSummary.tw @@ -259,10 +259,10 @@ __''General slave settings''__ /% Begin mod section: toggle whether slaves lisp. %/ <<options $disableLisping>> -<<option 1 "Enable Lisping">> - Lisping: ''slaves with fat lips or heavy oral piercings will lisp''. -<<option 0 "Disable Lisping">> - Lisping: ''slaves will not lisp''. + <<option 0 "Enable Lisping">> + Lisping: ''slaves with fat lips or heavy oral piercings will lisp''. + <<option 1 "Disable Lisping">> + Lisping: ''slaves will not lisp''. <</options>> /% End mod section: toggle whether slaves lisp. %/ diff --git a/src/facilities/arcade/arcadeFramework.js b/src/facilities/arcade/arcadeFramework.js index 1b171533a51691353348a57c554d82f4cd7ee2e8..c04c4d16cf9c3fecc39495df7bf813d3e89da5ad 100644 --- a/src/facilities/arcade/arcadeFramework.js +++ b/src/facilities/arcade/arcadeFramework.js @@ -19,8 +19,8 @@ App.Entity.Facilities.ArcadeJob = class extends App.Entity.Facilities.FacilitySi * @param {App.Entity.SlaveState} slave * @returns {string[]} */ - canEmploy(slave) { - let r = super.canEmploy(slave); + checkRequirements(slave) { + let r = super.checkRequirements(slave); if (slave.indentureRestrictions > 0) { r.push(`${slave.slaveName}'s indenture forbids arcade service.`); } diff --git a/src/facilities/brothel/brothelFramework.js b/src/facilities/brothel/brothelFramework.js index e5706e0b10aaf5c25779c4caadb5c418e6108f4c..3548a8ac937eb165792707da425ab9bcb46084d6 100644 --- a/src/facilities/brothel/brothelFramework.js +++ b/src/facilities/brothel/brothelFramework.js @@ -34,8 +34,8 @@ App.Entity.Facilities.BrothelJob = class extends App.Entity.Facilities.FacilityS * @param {App.Entity.SlaveState} slave * @returns {string[]} */ - canEmploy(slave) { - let r = super.canEmploy(slave); + checkRequirements(slave) { + let r = super.checkRequirements(slave); // condition is the same as for the club if (!App.Entity.Facilities.Job._isBrokenEnough(slave, 51, -50, -20, -50, 50)) { @@ -55,8 +55,8 @@ App.Entity.Facilities.MadamJob = class extends App.Entity.Facilities.ManagingJob * @param {App.Entity.SlaveState} slave * @returns {string[]} */ - canEmploy(slave) { - let r = super.canEmploy(slave); + checkRequirements(slave) { + let r = super.checkRequirements(slave); if (slave.intelligence + slave.intelligenceImplant < -50) { r.push(`${slave.slaveName} is not intelligent enough to be the Madam.`); } diff --git a/src/facilities/cellblock/cellblockFramework.js b/src/facilities/cellblock/cellblockFramework.js index 9e2370073237be1c393f24dbbd5c8731f8c3f521..1c40d3d83589a9e816ebc38150ddede29468f6ed 100644 --- a/src/facilities/cellblock/cellblockFramework.js +++ b/src/facilities/cellblock/cellblockFramework.js @@ -34,8 +34,8 @@ App.Entity.Facilities.CellblockJob = class extends App.Entity.Facilities.Facilit * @param {App.Entity.SlaveState} slave * @returns {string[]} */ - canEmploy(slave) { - let r = super.canEmploy(slave); + checkRequirements(slave) { + let r = super.checkRequirements(slave); if (slave.trust < -50) { r.push(`${slave.slaveName} is too terrified for ${this.facility.name} to have an effect.`); diff --git a/src/facilities/clinic/clinicFramework.js b/src/facilities/clinic/clinicFramework.js index 614f439ebf68929ae35246a69ff3df7f887d3605..3bfc107d785dc3dea4c36fa11099d401bc12fbdf 100644 --- a/src/facilities/clinic/clinicFramework.js +++ b/src/facilities/clinic/clinicFramework.js @@ -33,8 +33,8 @@ App.Entity.Facilities.ClinicPatientJob = class extends App.Entity.Facilities.Fac * @param {App.Entity.SlaveState} slave * @returns {string[]} */ - canEmploy(slave) { - let r = super.canEmploy(slave); + checkRequirements(slave) { + let r = super.checkRequirements(slave); if ((slave.health >= 20) && (V.Nurse === 0 || ((slave.chem <= 15 || this.facility.upgrade("Filters") !== 1) && diff --git a/src/facilities/club/clubFramework.js b/src/facilities/club/clubFramework.js index fd65d27fd047604304a04d02af3f3b70d894933e..61723bbc303552a0842e090b21d6f4af6d5b4dfb 100644 --- a/src/facilities/club/clubFramework.js +++ b/src/facilities/club/clubFramework.js @@ -33,8 +33,8 @@ App.Entity.Facilities.ClubSlutJob = class extends App.Entity.Facilities.Facility * @param {App.Entity.SlaveState} slave * @returns {string[]} */ - canEmploy(slave) { - let r = super.canEmploy(slave); + checkRequirements(slave) { + let r = super.checkRequirements(slave); // condition is the same as for the brothel // TODO: consider moving this to App.Entity.Facilities.SexJob @@ -47,8 +47,8 @@ App.Entity.Facilities.ClubSlutJob = class extends App.Entity.Facilities.Facility }; App.Entity.Facilities.ClubDJJob = class extends App.Entity.Facilities.ManagingJob { - canEmploy(slave) { - let r = super.canEmploy(slave); + checkRequirements(slave) { + let r = super.checkRequirements(slave); if (slave.intelligence + slave.intelligenceImplant < -50) { r.push(`${slave.slaveName} is not intelligent enough to DJ.`); } diff --git a/src/facilities/dairy/dairyFramework.js b/src/facilities/dairy/dairyFramework.js index d1e476bfa21cda890d0956b0254e2e6b079f8a2f..d8c4f8ebb874b7d1cb8b7a8142da72e1820f8c6f 100644 --- a/src/facilities/dairy/dairyFramework.js +++ b/src/facilities/dairy/dairyFramework.js @@ -33,8 +33,8 @@ App.Entity.Facilities.DairyCowJob = class extends App.Entity.Facilities.Facility * @param {App.Entity.SlaveState} slave * @returns {string[]} */ - canEmploy(slave) { - let r = super.canEmploy(slave); + checkRequirements(slave) { + let r = super.checkRequirements(slave); if ((slave.indentureRestrictions > 0) && (V.dairyRestraintsSetting > 1)) { r.push(`${slave.slaveName}'s indenture forbids extractive Dairy service.`); @@ -54,15 +54,19 @@ App.Entity.Facilities.DairyCowJob = class extends App.Entity.Facilities.Facility r.push(`${slave.slaveName} must be obedient in order to be milked at ${this.facility.name}.`); } - if ((slave.lactation === 0) && (slave.balls === 0) && ((V.dairySlimMaintainUpgrade !== 1 && V.dairySlimMaintain <= 0) || (slave.boobs <= 300 && slave.balls !== 0 && V.dairyImplantsSetting !== 1) || V.dairyImplantsSetting === 2)) { - if ((V.dairySlimMaintainUpgrade === 1 && V.dairySlimMaintain === 1) || (V.dairyImplantsSetting === 2) || (slave.boobs <= 300 && slave.balls > 0 && (V.dairyImplantsSetting === 0 || V.dairyImplantsSetting === 3))) { + if ((slave.lactation === 0) && (slave.balls === 0)) { + // the slave does not produce useful liquids now. Let's find out can the dairy make it lactate + if ((V.dairySlimMaintainUpgrade !== 1 && V.dairySlimMaintain <= 0) && V.dairyImplantsSetting !== 1 && V.dairyImplantsSetting !== 3) { + // dairy settings disallow any procedures r.push(`${slave.slaveName} is not lactating ` + ((V.seeDicks > 0) ? 'or producing semen ' : '') + `and ${this.facility.name}'s current settings forbid the automatic implantation of lactation inducing drugs or manual stimulation to induce it, and thus cannot be a cow.`); - } else { - r.push(`${slave.slaveName} is not lactating ` + ((V.seeDicks > 0) ? 'or producing semen ' : '') + 'and cannot be a cow.'); + } else if (slave.boobs <= 300){ + r.push(`${slave.slaveName} is not lactating ` + ((V.seeDicks > 0) ? 'or producing semen ' : '') + 'and have not enough breast tissue to induce lactation.'); } - } else if ((V.dairyStimulatorsSetting >= 2) && (slave.anus <= 2) && (V.dairyPrepUpgrade !== 1)) { + } + if ((V.dairyStimulatorsSetting >= 2) && (slave.anus <= 2) && (V.dairyPrepUpgrade !== 1)) { r.push(`${slave.slaveName}'s anus cannot accommodate current machine settings.`); - } else if ((V.dairyPregSetting >= 2) && (slave.vagina <= 2) && (slave.ovaries !== 0) && (V.dairyPrepUpgrade !== 1)) { + } + if ((V.dairyPregSetting >= 2) && (slave.vagina <= 2) && (slave.ovaries !== 0) && (V.dairyPrepUpgrade !== 1)) { r.push(`${slave.slaveName}'s vagina cannot accommodate current machine settings.`); } diff --git a/src/facilities/masterSuite/masterSuiteFramework.js b/src/facilities/masterSuite/masterSuiteFramework.js index abc3a8df55926b611da4de42d204cb808e5a4d56..473f51a600067d8d82d7f2394c2ead406b433238 100644 --- a/src/facilities/masterSuite/masterSuiteFramework.js +++ b/src/facilities/masterSuite/masterSuiteFramework.js @@ -33,8 +33,8 @@ App.Entity.Facilities.MasterSuiteFuckToyJob = class extends App.Entity.Facilitie * @param {App.Entity.SlaveState} slave * @returns {string[]} */ - canEmploy(slave) { - let r = super.canEmploy(slave); + checkRequirements(slave) { + let r = super.checkRequirements(slave); if (!App.Entity.Facilities.Job._isBrokenEnough(slave, 20, -51, -21, -50)) { r.push(`${slave.slaveName} is not sufficiently broken for ${this.facility.name}.`); } @@ -48,8 +48,8 @@ App.Entity.Facilities.MasterSuiteFuckToyJob = class extends App.Entity.Facilitie }; App.Entity.Facilities.ConcubineJob = class extends App.Entity.Facilities.ManagingJob { - canEmploy(slave) { - let r = super.canEmploy(slave); + checkRequirements(slave) { + let r = super.checkRequirements(slave); if (isAmputee(slave)) { r.push(`${slave.slaveName} can't serve as your Concubine without limbs.`); } diff --git a/src/facilities/nursery/nurseryFramework.js b/src/facilities/nursery/nurseryFramework.js index d8874189ebe60fa2440e197ed31c2fa292c3b683..208c47892a5135007783196f53cc80a7cc15ccf9 100644 --- a/src/facilities/nursery/nurseryFramework.js +++ b/src/facilities/nursery/nurseryFramework.js @@ -33,8 +33,8 @@ App.Entity.Facilities.NurseryNannyJob = class extends App.Entity.Facilities.Faci * @param {App.Entity.SlaveState} slave * @returns {string[]} */ - canEmploy(slave) { - let r = super.canEmploy(slave); + checkRequirements(slave) { + let r = super.checkRequirements(slave); if (!App.Entity.Facilities.Job._isBrokenEnough(slave, -20, -50, 20, -21)) { r.push(App.Entity.Facilities.Job._stdBreakageMessage(slave)); diff --git a/src/facilities/nursery/nurseryWidgets.js b/src/facilities/nursery/nurseryWidgets.js index 72c75aa42b76172ded339e81535b0eab5bb635c9..7639cce78e5d760eaacc1cc92b10402b08fb941c 100644 --- a/src/facilities/nursery/nurseryWidgets.js +++ b/src/facilities/nursery/nurseryWidgets.js @@ -19139,7 +19139,7 @@ App.Facilities.Nursery.nurseryReport = function nurseryReport() { if (FLsFetish === 1) { r += `${He} ${V.nurseryChildren ? `seems to have a real soft spot for children, and enjoys working with the child${V.nurseryChildren > 1 ? `ren` : ``} in ${V.nurseryName} and raising ${V.nurseryChildren > 1 ? `them` : V.cribs[0].genes === "XX" ? `her` : `him`} to be ${V.nurseryChildren > 1 ? `good slaves` : `a good slave`}` : ``/* TODO: */}. ${He} finds real satisfaction in helping your slaves find sexual gratification, and <span class="lightsalmon">becomes more caring.</span> `; } else if (FLsFetish === 2) { - r += `Every new slave in the nursery is a new person ${he} gets to connect with and serve. Sexually. @@.lightsalmon;${He} becomes more caring.@@`; // TODO: + r += `Every new slave in the nursery is a new person ${he} gets to connect with and serve. Sexually. <span class='lightsalmon'>${He} becomes more caring.</span>`; // TODO: } // TODO: @@ -19179,11 +19179,11 @@ App.Facilities.Nursery.nurseryReport = function nurseryReport() { if (NL < V.nursery) { let seed = jsRandom(1, 10) + ((V.nursery - NL) * (jsRandom(150, 170) + (idleBonus * 10))); cashX(seed, "nursery", Matron); - r += `<br> Since ${he} doesn't have enough children to occupy all ${his} time, ${V.nurseryName} takes in citizens' children on a contract basis and ${he} cares for them too, earning @@.yellowgreen;${cashFormat(seed)}.@@ `; + r += `<br> Since ${he} doesn't have enough children to occupy all ${his} time, ${V.nurseryName} takes in citizens' children on a contract basis and ${he} cares for them too, earning <span class='yellowgreen'>${cashFormat(seed)}.</span> `; } if (arcology.FSRepopulationFocus > 0 && V.nurseryBabies > 0) { - r += `Society @@.green;loves@@ the way you are raising more children for ${arcology.name}. `; + r += `Society <span class='green'>loves</span> the way you are raising more children for ${arcology.name}. `; FSChange("Repopulationist", 2); } diff --git a/src/facilities/penthouse/penthouseFramework.js b/src/facilities/penthouse/penthouseFramework.js index 1bc17d566db2ca30631c5ced9cb4bd351668942e..25c49c1bb56bf1cee04cad37b6db6387cb386a48 100644 --- a/src/facilities/penthouse/penthouseFramework.js +++ b/src/facilities/penthouse/penthouseFramework.js @@ -111,8 +111,8 @@ App.Entity.Facilities.PenthouseJob = class extends App.Entity.Facilities.Job { App.Entity.Facilities.PenthouseJobs = { Classes: class extends App.Entity.Facilities.PenthouseJob { - canEmploy(slave) { - let r = super.canEmploy(slave); + checkRequirements(slave) { + let r = super.checkRequirements(slave); if (slave.intelligenceImplant >= 15) { r.push(`${slave.slaveName} already has a basic education.`); } @@ -127,8 +127,8 @@ App.Entity.Facilities.PenthouseJobs = { } }, HouseServant: class extends App.Entity.Facilities.PenthouseJob { - canEmploy(slave) { - let r = super.canEmploy(slave); + checkRequirements(slave) { + let r = super.checkRequirements(slave); if (!App.Entity.Facilities.Job._isBrokenEnough(slave, -20, -50, -19, -51)) { r.push(App.Entity.Facilities.Job._stdBreakageMessage(slave)); @@ -146,8 +146,8 @@ App.Entity.Facilities.PenthouseJobs = { }, SubordinateSlave: class extends App.Entity.Facilities.PenthouseJob { - canEmploy(slave) { - let r = super.canEmploy(slave); + checkRequirements(slave) { + let r = super.checkRequirements(slave); if (!App.Entity.Facilities.Job._isBrokenEnough(slave, -20, -50, -19, -51)) { r.push(App.Entity.Facilities.Job._stdBreakageMessage(slave)); } @@ -162,8 +162,8 @@ App.Entity.Facilities.PenthouseJobs = { } }, Cow: class extends App.Entity.Facilities.PenthouseJob { - canEmploy(slave) { - let r = super.canEmploy(slave); + checkRequirements(slave) { + let r = super.checkRequirements(slave); if ((slave.lactation <= 0) && (slave.balls <= 0)) { r.push(`${slave.slaveName} is not lactating` + ((State.variables.seeDicks > 0) ? ' or producing semen.' : '.')); diff --git a/src/facilities/pit/pitFramework.js b/src/facilities/pit/pitFramework.js index 86a3355bb950d3bcd03afc54afb9d9051881eb3c..ac0d8927024816294b25445dff640069da4af7c8 100644 --- a/src/facilities/pit/pitFramework.js +++ b/src/facilities/pit/pitFramework.js @@ -19,8 +19,8 @@ App.Entity.Facilities.PitFighterJob = class extends App.Entity.Facilities.Facili * @param {App.Entity.SlaveState} slave * @returns {string[]} */ - canEmploy(slave) { - let r = super.canEmploy(slave); + checkRequirements(slave) { + let r = super.checkRequirements(slave); if (slave.breedingMark === 1 && State.variables.propOutcome === 1 && State.variables.eugenicsFullControl !== 1 && State.variables.arcologies[0].FSRestart !== "unset") { r.push(`${slave.slaveName} may not participate in combat.`); } diff --git a/src/facilities/schoolroom/schoolroomFramework.js b/src/facilities/schoolroom/schoolroomFramework.js index 21fab0dd8ade0dd6542f25747c5229264275fe9a..70e50d1ffea874f796f9d61a7cb9f16f8bd6788a 100644 --- a/src/facilities/schoolroom/schoolroomFramework.js +++ b/src/facilities/schoolroom/schoolroomFramework.js @@ -33,8 +33,8 @@ App.Entity.Facilities.SchoolroomStudentJob = class extends App.Entity.Facilities * @param {App.Entity.SlaveState} slave * @returns {string[]} */ - canEmploy(slave) { - let r = super.canEmploy(slave); + checkRequirements(slave) { + let r = super.checkRequirements(slave); if (!App.Entity.Facilities.Job._isBrokenEnough(slave, -20, -50, -20, -51)) { r.push(`${slave.slaveName} is too resistant to learn.`); diff --git a/src/facilities/servantsQuarters/servantsQuartersFramework.js b/src/facilities/servantsQuarters/servantsQuartersFramework.js index 8072e77e480f611079e14d0aed5ff5edaeb21cfa..ce4603f64781a44666da5d33e0964f984f53d340 100644 --- a/src/facilities/servantsQuarters/servantsQuartersFramework.js +++ b/src/facilities/servantsQuarters/servantsQuartersFramework.js @@ -33,8 +33,8 @@ App.Entity.Facilities.ServantsQuartersServantJob = class extends App.Entity.Faci * @param {App.Entity.SlaveState} slave * @returns {string[]} */ - canEmploy(slave) { - let r = super.canEmploy(slave); + checkRequirements(slave) { + let r = super.checkRequirements(slave); if (!App.Entity.Facilities.Job._isBrokenEnough(slave, -20, -50, 20, -21)) { r.push(App.Entity.Facilities.Job._stdBreakageMessage(slave)); @@ -59,8 +59,8 @@ App.Entity.Facilities.ServantsQuartersStewardessJob = class extends App.Entity.F * @param {App.Entity.SlaveState} slave * @returns {string[]} */ - canEmploy(slave) { - let r = super.canEmploy(slave); + checkRequirements(slave) { + let r = super.checkRequirements(slave); if (slave.intelligence + slave.intelligenceImplant < -50) { r.push(`${slave.slaveName} is not intelligent enough.`); } diff --git a/src/facilities/spa/spaFramework.js b/src/facilities/spa/spaFramework.js index 2be78f2ab03ca8bf7fafa184233c0bf067c41440..bc17f8ae2c2982ba1dcc592fd8ada34f22a83866 100644 --- a/src/facilities/spa/spaFramework.js +++ b/src/facilities/spa/spaFramework.js @@ -33,8 +33,8 @@ App.Entity.Facilities.SpaAssigneeJob = class extends App.Entity.Facilities.Facil * @param {App.Entity.SlaveState} slave * @returns {string[]} */ - canEmploy(slave) { - let r = super.canEmploy(slave); + checkRequirements(slave) { + let r = super.checkRequirements(slave); if (((slave.devotion < -20 && slave.fetish !== "mindbroken") || (slave.health >= 20 && slave.trust > 60 && slave.devotion > 60 && slave.fetish !== "mindbroken" && slave.sexualFlaw === "none" && slave.behavioralFlaw === "none"))) { r.push(`${slave.slaveName} will not benefit from time at ${this.facility.name}.`); diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js index 0ab8ce5c76b20e3918791593f10e4748becef189..46d0eeb7ddee0d9cd08acdd763a09989c005ea06 100644 --- a/src/js/DefaultRules.js +++ b/src/js/DefaultRules.js @@ -2,7 +2,7 @@ window.DefaultRules = (function() { "use strict"; - + let r; let he; let him; @@ -95,214 +95,29 @@ window.DefaultRules = (function() { function ProcessAssignments(slave, rule) { // Before merging rules, we process assignments for each rule separately so we can remove slaves from facilities when they no longer qualify, even if the final "winning" rule assigns them elsewhere // We also ignore inapplicable assignments for the current slave, so we only merge assignments that are valid + if (rule.setAssignment === null) { + delete rule.setAssignment; + return; + } + const job = App.Utils.jobForAssignment(rule.setAssignment); + if (job === undefined) { + r += `<span class="red">raWidgets missing case for assignment 'V.{rule.setAssignment}'</span>.`; + return; + } switch (rule.setAssignment) { - case null: - delete rule.setAssignment; - break; - case "rest": case "please you": // slaves always qualify for this assignment break; - - case "live with your Head Girl": - if ((V.HGSuiteiIDs.length < 1 && slave.indentureRestrictions <= 0)) { - break; - } else { - RAFacilityRemove(slave, rule); // before deleting rule.setAssignment - delete rule.setAssignment; - } - break; - - case "be confined in the arcade": - if ((V.ArcadeiIDs.length < V.arcade && slave.indentureRestrictions <= 0 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset"))) { - break; - } else { - RAFacilityRemove(slave, rule); // before deleting rule.setAssignment - delete rule.setAssignment; - } - break; - - case "serve in the master suite": - if ((V.MastSiIDs.length < V.masterSuite && (slave.devotion > 20 || slave.trust < -50 || (slave.devotion >= -50 && slave.trust < -20)))) { - break; - } else { - RAFacilityRemove(slave, rule); // before deleting rule.setAssignment - delete rule.setAssignment; - } - break; - - case "get treatment in the clinic": - if ((V.CliniciIDs.length < V.clinic && (slave.health < 20 || (slave.chem > 15 && V.Nurse !== 0 && V.clinicUpgradeFilters === 1)) || ((slave.bellyImplant > -1) && (V.bellyImplants === 1)) || slave.preg > 1)) { - break; - } else { - RAFacilityRemove(slave, rule); // before deleting rule.setAssignment - delete rule.setAssignment; - } - break; - - case "rest in the spa": - if ((V.SpaiIDs.length < V.spa) && (slave.health < 20) || (slave.trust < 60) || (slave.devotion <= 60) || (slave.fetish === "mindbroken") && (slave.devotion >= -20)) { - break; - } else { - RAFacilityRemove(slave, rule); // before deleting rule.setAssignment - delete rule.setAssignment; - } - break; - - case "work as a nanny": - if ((V.NurseryiIDs.length < V.nursery) && !slave.fuckdoll && (slave.devotion > 20 || slave.trust > 20)) { - break; - } else { - RAFacilityRemove(slave, rule); // before deleting rule.setAssignment - delete rule.setAssignment; - } - break; - - case "work in the brothel": - if ((V.BrothiIDs.length < V.brothel && (slave.devotion > 50 || slave.trust > 50 || slave.trust < -50 || (slave.devotion >= -50 && slave.trust < -20)) && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset"))) { - break; - } else { - RAFacilityRemove(slave, rule); // before deleting rule.setAssignment - delete rule.setAssignment; - } - break; - - case "serve in the club": - if ((V.ClubiIDs.length < V.club && (slave.devotion > 50 || slave.trust > 50 || slave.trust < -50 || (slave.devotion >= -50 && slave.trust < -20)) && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset"))) { - break; - } else { - RAFacilityRemove(slave, rule); // before deleting rule.setAssignment - delete rule.setAssignment; - } - break; - - case "work in the dairy": - if ((V.dairy > V.DairyiIDs.length + V.bioreactorsXY + V.bioreactorsXX + V.bioreactorsHerm + V.bioreactorsBarren)) { - if ((slave.indentureRestrictions > 0) && (V.dairyRestraintsSetting > 1)) { - break; - } else if (((slave.indentureRestrictions > 1) && (V.dairyRestraintsSetting > 0)) || (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && V.arcologies[0].FSRestart !== "unset" && V.dairyRestraintsSetting > 0) || ((V.dairyPregSetting > 0) && ((slave.bellyImplant !== -1) || (slave.broodmother !== 0)))) { - break; - } else { - if ((slave.lactation > 0 || ((V.dairySlimMaintainUpgrade === 0 || V.dairySlimMaintain === 0) && (slave.boobs > 300 || slave.dick === 0 || V.dairyImplantsSetting === 1) && V.dairyImplantsSetting !== 2)) || (slave.balls > 0)) { - if ((slave.devotion > 20) || ((slave.devotion >= -50) && (slave.trust < -20)) || (slave.trust < -50) || isAmputee(slave) || (V.dairyRestraintsUpgrade === 1)) { - if ((V.dairyStimulatorsSetting < 2) || (slave.anus > 2) || (V.dairyPrepUpgrade === 1)) { - if ((V.dairyPregSetting < 2) || (slave.vagina > 2) || (slave.ovaries === 0) || (V.dairyPrepUpgrade === 1)) { - break; - } else { - RAFacilityRemove(slave, rule); // before deleting rule.setAssignment - delete rule.setAssignment; - } - } else { - RAFacilityRemove(slave, rule); // before deleting rule.setAssignment - delete rule.setAssignment; - } - } else { - RAFacilityRemove(slave, rule); // before deleting rule.setAssignment - delete rule.setAssignment; - } - } else { - RAFacilityRemove(slave, rule); // before deleting rule.setAssignment - delete rule.setAssignment; - } - } - } - break; - - case "work as a farmhand": - if ((V.FarmyardiIDs.length < V.farmyard && !slave.fuckdoll)) { // TODO: rework these requirements - break; - } else { - RAFacilityRemove(slave, rule); - delete rule.setAssignment; - } - break; - - case "work as a servant": - if ((V.ServQiIDs.length < V.servantsQuarters && canSee(slave) && canWalk(slave) && (slave.devotion >= -20 || slave.trust < -20 || (slave.devotion >= -50 && slave.trust <= 20)))) { + default: + if (job.checkRequirements(slave).length === 0 && job.facility.hasFreeSpace) { break; } else { - RAFacilityRemove(slave, rule); // before deleting rule.setAssignment - delete rule.setAssignment; - } - break; - - case "learn in the schoolroom": - if ((V.SchlRiIDs.length < V.schoolroom && slave.fetish !== "mindbroken" && (slave.devotion >= -20 || slave.trust < -50 || (slave.devotion >= -50 && slave.trust < -20)))) { - if (((slave.intelligenceImplant < 30 && V.schoolroomRemodelBimbo !== 1) || (slave.intelligenceImplant > -15 && V.schoolroomRemodelBimbo === 1)) || (slave.voice !== 0 && slave.accent + V.schoolroomUpgradeLanguage > 2) || (slave.skill.oral <= 10 + V.schoolroomUpgradeSkills * 20) || (slave.skill.whoring <= 10 + V.schoolroomUpgradeSkills * 20) || (slave.skill.entertainment <= 10 + V.schoolroomUpgradeSkills * 20) || (slave.skill.anal < 10 + V.schoolroomUpgradeSkills * 20) || ((slave.vagina >= 0) && (slave.skill.vaginal < 10 + V.schoolroomUpgradeSkills * 20))) { - break; - } else { + if (job.facility !== App.Entity.facilities.penthouse) { RAFacilityRemove(slave, rule); // before deleting rule.setAssignment - delete rule.setAssignment; } - } else { - RAFacilityRemove(slave, rule); // before deleting rule.setAssignment - delete rule.setAssignment; - } - break; - - case "be confined in the cellblock": - if ((V.CellBiIDs.length < V.cellblock && ((slave.devotion < -20 && slave.trust >= -20) || (slave.devotion < -50 && slave.trust >= -50)))) { - break; - } else { - RAFacilityRemove(slave, rule); // before deleting rule.setAssignment - delete rule.setAssignment; - } - break; - - case "take classes": - if (slave.intelligenceImplant < 15 && slave.fetish !== "mindbroken" && (slave.devotion >= -20 || slave.trust < -50 || (slave.trust < -20 && slave.devotion >= -50))) { - break; - } else { - delete rule.setAssignment; - } - break; - - case "choose her own job": - if ((slave.fetish !== "mindbroken")) { - break; - } else { - delete rule.setAssignment; - } - break; - - case "get milked": - if ((slave.lactation > 0 || slave.balls > 0)) { - break; - } else { - delete rule.setAssignment; - } - break; - - case "be a servant": - if ((canWalk(slave) && canSee(slave) && (slave.devotion >= -20 || slave.trust < -50 || (slave.trust < -20 && slave.devotion >= -50)))) { - break; - } else { delete rule.setAssignment; } - break; - - case "work a glory hole": - if (slave.indentureRestrictions <= 0 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { - break; - } else { - delete rule.setAssignment; - } - break; - - case "whore": - case "serve the public": - case "stay confined": - if ((slave.fuckdoll === 0) && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { - break; - } else { - delete rule.setAssignment; - } - break; - - default: - r += `<span class="red">raWidgets missing case for assignment 'V.{rule.setAssignment}'</span>.`; - break; } return rule; } diff --git a/src/js/assignJS.js b/src/js/assignJS.js index 0c321c330a58562dfeaf1ac98977f696c8615679..45afe62b3427b592b1df7d09a6254f7aed1b2c93 100644 --- a/src/js/assignJS.js +++ b/src/js/assignJS.js @@ -766,3 +766,40 @@ App.Utils.moveFacilityWorkers = function(facility, managerAssignment = "rest", w assignJob(w, workerAssignment); } }; + +App.Utils.jobForAssignment = function() { + const map = new Map(); + function fillMap() { + /** + * @param {Map} m + * @param {App.Entity.Facilities.Facility} f + */ + function addFacility(m, f) { + if (f.manager) { + m.set(f.desc.manager.assignment, f.manager); + } + for (const j of f.jobsNames) { + m.set(f.desc.jobs[j].assignment, f.job(j)); + } + } + + for (const f in App.Entity.facilities) { + if (f.length > 0) { + addFacility(map, App.Entity.facilities[f]); + } + } + } + + /** + * @param {string} assignment + * @returns {App.Entity.Facilities.Job} + */ + function getJob(assignment) { + if (map.size === 0) { + fillMap(); + } + return map.get(assignment); + } + + return getJob; +}(); diff --git a/src/js/utilJS.js b/src/js/utilJS.js index 93b31ad169b32b40a7c21a42c0ca7a7c8859d30e..f634c97780d76d9acbe892a29ff87a68c94a8f4d 100644 --- a/src/js/utilJS.js +++ b/src/js/utilJS.js @@ -1252,9 +1252,9 @@ window.cashFormatColor = function(s, invert = false) { //Display red if the value is negative, unless invert is true if((s > 0) == invert) { - return `@@.red;${cashFormat(s)}@@`; + return `<span class='red'>${cashFormat(s)}</span>`; } - return `@@.yellowgreen;${cashFormat(s)}@@`; + return `<span class='yellowgreen'>${cashFormat(s)}</span>`; }; /** diff --git a/src/npc/agent/agentFramework.js b/src/npc/agent/agentFramework.js index eb001682c065713aac005896374f2f8f413d9526..48bbd392f1dc0b9aec60d5991c9c61ef3e3d24a3 100644 --- a/src/npc/agent/agentFramework.js +++ b/src/npc/agent/agentFramework.js @@ -33,8 +33,8 @@ App.Entity.Facilities.AgentJob = class extends App.Entity.Facilities.ManagingJob * @param {App.Entity.SlaveState} slave * @returns {string[]} */ - canEmploy(slave) { - let r = super.canEmploy(slave); + checkRequirements(slave) { + let r = super.checkRequirements(slave); if (slave.intelligence + slave.intelligenceImplant <= 15) { r.push(`${slave.slaveName} is not intelligent enough to be your agent.`); } diff --git a/src/npc/descriptions/boobs/boobs.js b/src/npc/descriptions/boobs/boobs.js index d2db6833e631ddf22f3d3876c7574ccd81965e8e..0b77e71508aeef9f363ea404547c4ac9515edf3e 100644 --- a/src/npc/descriptions/boobs/boobs.js +++ b/src/npc/descriptions/boobs/boobs.js @@ -710,7 +710,7 @@ App.Desc.boobs = function() { } else if (slave.boobs > 800) { r += `${slave.slaveName}'s ${adjNoun} strain against ${his} tailored shirt and tunic.`; } else { - r += `${slave.slaveName} cuts a dashing figure in ${his} tunic. ${slave.boobs < 300 ? `${His} ${App.Desc.boobBits.adjective(slave.boobs)}` : ''} breasts are barely there.`; + r += `${slave.slaveName} cuts a dashing figure in ${his} tunic. ${slave.boobs < 300 ? `${His} ${App.Desc.boobBits.adjective(slave.boobs)} breasts are barely there.` : ''}`; } break; case "a long qipao": @@ -723,7 +723,7 @@ App.Desc.boobs = function() { } else if (slave.boobs > 800) { r += `${slave.slaveName}'s ${adjNoun} strain against ${his} dress.`; } else { - r += `${slave.slaveName} cuts a dashing figure in ${his} dress. ${slave.boobs < 300 ? `${His} ${App.Desc.boobBits.adjective(slave.boobs)}` : ''} breasts are barely there.`; + r += `${slave.slaveName} cuts a dashing figure in ${his} dress. ${slave.boobs < 300 ? `${His} ${App.Desc.boobBits.adjective(slave.boobs)} breasts are barely there.` : ''}`; } break; case "battlearmor": @@ -736,7 +736,7 @@ App.Desc.boobs = function() { } else if (slave.boobs > 800) { r += `${slave.slaveName}'s ${adjNoun} strain against ${his} armor.`; } else { - r += `${slave.slaveName} cuts a dashing figure in ${his} armor. ${slave.boobs < 300 ? `${His} ${App.Desc.boobBits.adjective(slave.boobs)}` : ''} breasts are barely there.`; + r += `${slave.slaveName} cuts a dashing figure in ${his} armor. ${slave.boobs < 300 ? `${His} ${App.Desc.boobBits.adjective(slave.boobs)} breasts are barely there.` : ''}`; } break; case "a dirndl": @@ -749,7 +749,7 @@ App.Desc.boobs = function() { } else if (slave.boobs > 800) { r += `${slave.slaveName}'s ${adjNoun} strain against ${his} dress.`; } else { - r += `${slave.slaveName} cuts a dashing figure in ${his} dress. ${slave.boobs < 300 ? `${His} ${App.Desc.boobBits.adjective(slave.boobs)}` : ''} breasts are barely there.`; + r += `${slave.slaveName} cuts a dashing figure in ${his} dress. ${slave.boobs < 300 ? `${His} ${App.Desc.boobBits.adjective(slave.boobs)} breasts are barely there.` : ''}`; } break; case "a biyelgee costume": @@ -762,7 +762,7 @@ App.Desc.boobs = function() { } else if (slave.boobs > 800) { r += `${slave.slaveName}'s ${adjNoun} strain against ${his} dress.`; } else { - r += `${slave.slaveName} cuts a dashing figure in ${his} dress. ${slave.boobs < 300 ? `${His} ${App.Desc.boobBits.adjective(slave.boobs)}` : ''} breasts are barely there.`; + r += `${slave.slaveName} cuts a dashing figure in ${his} dress. ${slave.boobs < 300 ? `${His} ${App.Desc.boobBits.adjective(slave.boobs)} breasts are barely there.` : ''}`; } break; case "a nice nurse outfit": diff --git a/src/uncategorized/BackwardsCompatibility.tw b/src/uncategorized/BackwardsCompatibility.tw index 604ace82835070fa9c36285f985c8d6fef24e2e6..d7ec71a84fe3ca8b1d2cbf3eeda78bfeae77ad82 100644 --- a/src/uncategorized/BackwardsCompatibility.tw +++ b/src/uncategorized/BackwardsCompatibility.tw @@ -7,6 +7,14 @@ <<set $releaseID = 1022>> <</if>> +<<if $releaseID < 1055>> + <<if $disableLisping == 0>> + <<set $disableLisping = 1>> + <<else>> + <<set $disableLisping = 0>> + <</if>> +<</if>> + <<if Array.isArray($nationalities)>> <<set $nationalities = weightedArray2HashMap($nationalities)>> <</if>> @@ -1431,13 +1439,13 @@ <</if>> <<if def $year>> - <<unset $year>> + <<unset $year>> <</if>> <<if def $day>> - <<unset $day>> + <<unset $day>> <</if>> <<if def $month>> - <<unset $month>> + <<unset $month>> <</if>> <<if ndef $arcologies>> diff --git a/src/uncategorized/options.tw b/src/uncategorized/options.tw index e0fe64044d7a665fa30fd15717c8134b97a43026..e4a082b4f67ebcdea140f0cff381682b8cd010be 100644 --- a/src/uncategorized/options.tw +++ b/src/uncategorized/options.tw @@ -169,13 +169,13 @@ This save was created using FC version $ver build $releaseID. <<option 0 "Disabled">> <</options>> - <<options $verticalizeArcologyLinks>> - Penthouse Facility Display - <<option 3 "Triple Column">> - <<option 2 "Double Column">> - <<option 1 "Single Column">> - <<option 0 "Collapsed">> - <</options>> + <<options $verticalizeArcologyLinks>> + Penthouse Facility Display + <<option 3 "Triple Column">> + <<option 2 "Double Column">> + <<option 1 "Single Column">> + <<option 0 "Collapsed">> + <</options>> <<options $seeArcology>> Main menu arcology description @@ -467,8 +467,8 @@ This save was created using FC version $ver build $releaseID. <<options $disableLisping>> Slaves with fat lips or heavy oral piercings can lisp - <<option 1 "Enabled">> - <<option 0 "Disabled">> + <<option 1 "False">> + <<option 0 "True">> <</options>> <<options $diversePronouns>> diff --git a/src/uncategorized/saLongTermEffects.tw b/src/uncategorized/saLongTermEffects.tw index 5772867288f9730478973f18de2025b414337385..2604211e4c55dc46d2d8c856d8743d17e767a259 100644 --- a/src/uncategorized/saLongTermEffects.tw +++ b/src/uncategorized/saLongTermEffects.tw @@ -1182,8 +1182,10 @@ <<set _para = 1>> <<elseif $slaves[$i].geneticQuirks.gigantomastia == 2 && $slaves[$i].geneticQuirks.macromastia == 2 && $geneticMappingUpgrade >= 1>> $His paraphilia is satisfied by the knowledge that $his genetic abnormality will keep $his breasts growing for the rest of $his life. - <<elseif $slaves[$i].geneticQuirks.gigantomastia == 2 || $slaves[$i].geneticQuirks.macromastia == 2>> + <<elseif $geneticMappingUpgrade >= 1 && ($slaves[$i].geneticQuirks.gigantomastia == 2 || $slaves[$i].geneticQuirks.macromastia == 2)>> $His paraphilia is satisfied by the knowledge that $his genetic abnormality will keep $his breasts bigger than $his head. + <<elseif $slaves[$i].geneticQuirks.gigantomastia == 2>> + $His paraphilia is satisfied by $his chest's curious tendency toward perpetual growth. <<elseif $slaves[$i].health < 0>> $His paraphilia is ameliorated by $his poor health; $he knows $he can't take expansion right now. <<elseif $slaves[$i].drugs == "intensive breast injections">> @@ -2846,7 +2848,7 @@ <<= FutureSocieties.Change("Hedonistic", 2)>> <</if>> <<elseif $slaves[$i].geneticQuirks.gigantomastia == 2 && $slaves[$i].boobs-$slaves[$i].boobsImplant >= 25000>> - $He loves $his tits, and measuring their weekly growth from gigantomastia starts to hold more fascination for $him than mere sex. @@.yellow;$His sexual identity is now dominated by $his swelling boobs.@@ + $He loves $his tits, and measuring their <<if $geneticMappingUpgrade >= 1>>weekly growth from gigantomastia<<else>>mysterious weekly growth<</if>> starts to hold more fascination for $him than mere sex. @@.yellow;$His sexual identity is now dominated by $his swelling boobs.@@ <<set $slaves[$i].sexualFlaw = "breast growth">> <<set $slaves[$i].fetishStrength = 100>> <<if $arcologies[0].FSHedonisticDecadence != "unset">> @@ -6856,21 +6858,25 @@ <<if $slaves[$i].geneticQuirks.macromastia == 2 && $slaves[$i].geneticQuirks.gigantomastia == 2>> <<if $slaves[$i].boobs < 100000 && $slaves[$i].weight >= -95>> <<if $geneticMappingUpgrade >= 1>> - $His @@.lime;breasts expand @@ due to $his abnormal strain of gigantomastia. + $His @@.lime;breasts expand@@ due to $his abnormal strain of gigantomastia. + <<else>> + $His @@.lime;breasts are undeniably larger@@ than they were last week, though the exact cause is a mystery. <</if>> <<set $slaves[$i].boobs += 30>> <</if>> <<elseif $slaves[$i].geneticQuirks.gigantomastia == 2>> <<if $slaves[$i].boobs < 25000 && $slaves[$i].weight >= -95>> <<if $geneticMappingUpgrade >= 1>> - $His @@.lime;breasts expand @@ due to $his gigantomastia. + $His @@.lime;breasts expand@@ due to $his gigantomastia. + <<else>> + You suspect that $his @@.lime;breasts have grown slightly@@ since last week, but you cannot account for why. <</if>> <<set $slaves[$i].boobs += 20>> <</if>> <<elseif $slaves[$i].geneticQuirks.macromastia == 2>> <<if $slaves[$i].boobs < 5000 && $slaves[$i].weight >= -95>> <<if $geneticMappingUpgrade >= 1>> - $His @@.lime;breasts expand @@ due to $his macromastia. + $His @@.lime;breasts expand@@ due to $his macromastia. <</if>> <<set $slaves[$i].boobs += 10>> <</if>> @@ -7009,7 +7015,7 @@ <<if ($slaves[$i].assignment != "work in the dairy") || ($dairyRestraintsSetting < 2) || $arcologies[0].FSAssetExpansionistResearch == 0>> <<if (($slaves[$i].drugs != "breast injections") && ($slaves[$i].drugs != "intensive breast injections") && ($arcologies[0].FSAssetExpansionistResearch == 0))>> <<if (($slaves[$i].bellyPreg < 300000) && ($slaves[$i].hormoneBalance < 300) && _gigantomastiaMod != 3)>> - <<if ($slaves[$i].boobs < 30000+($slaves[$i].muscles*100))*2>> + <<if $slaves[$i].boobs < (30000+($slaves[$i].muscles*100))*2>> $His breasts are larger than $his body can possibly sustain without industrial intervention, and they @@.orange;naturally lose mass.@@ <<set $slaves[$i].boobs -= 25>> <<else>> @@ -7079,7 +7085,7 @@ <<if ($slaves[$i].assignment != "work in the dairy") || ($dairyRestraintsSetting < 2) || $arcologies[0].FSAssetExpansionistResearch == 0>> <<if ($slaves[$i].drugs != "breast injections" && $slaves[$i].drugs != "intensive breast injections" && $arcologies[0].FSAssetExpansionistResearch == 0)>> <<if $slaves[$i].bellyPreg < 300000 && $slaves[$i].hormoneBalance < 300 && _gigantomastiaMod != 3>> - <<if ($slaves[$i].boobs < (_gigantomastiaMod == 2 ? 25000 : 5000)+($slaves[$i].muscles*10))*2>> + <<if $slaves[$i].boobs < ((_gigantomastiaMod == 2 ? 25000 : 5000)+($slaves[$i].muscles*10))*2>> $His breasts are larger than $his body can possibly sustain without industrial intervention, and they @@.orange;naturally lose mass.@@ <<set $slaves[$i].boobs -= 25>> <<else>> diff --git a/src/uncategorized/slaveStats.tw b/src/uncategorized/slaveStats.tw index 135d374105f10d4c05bf7c93fc604d1f4e5be54d..781d7f683e3b914955404fc214a4cfe97238e96b 100644 --- a/src/uncategorized/slaveStats.tw +++ b/src/uncategorized/slaveStats.tw @@ -1,389 +1,524 @@ :: Slave Stats [nobr] -/* TODO: format this so it isn't so long */ + +<style> +.active { + background-color: grey; +} +</style> <<run clearSummaryCache($activeSlave)>> <<setLocalPronouns $activeSlave>> -slaveName: $activeSlave.slaveName /* TODO: figure out why this is being indented in-game */ -<br>slaveSurname: $activeSlave.slaveSurname -<br>birthName: $activeSlave.birthName -<br>birthSurname: $activeSlave.birthSurname -<br>genes: $activeSlave.genes -<br>pronoun: $activeSlave.pronoun -<br>weekAcquired: $activeSlave.weekAcquired -<br>origin: $activeSlave.origin -<br>career: $activeSlave.career +<br>Name: $activeSlave.slaveName, +Surname: $activeSlave.slaveSurname +<br>Nationality: $activeSlave.nationality +<br>Cost: $activeSlave.slaveCost +<br>Week: +Acquired: $activeSlave.weekAcquired, +Birth: $activeSlave.birthWeek +<br>Pronoun: $activeSlave.pronoun +<br>Career: $activeSlave.career +<br>Origin: $activeSlave.origin <br>ID: $activeSlave.ID -<br>prestige: $activeSlave.prestige -<br>pornFeed: $activeSlave.pornFeed -<br>pornFame: $activeSlave.pornFame -<br>pornFameSpending: $activeSlave.pornFameSpending -<br>pornPrestige: $activeSlave.pornPrestige -<br>pornPrestigeDesc: $activeSlave.pornPrestigeDesc -<br>pornFameType: $activeSlave.porn.fameType -<br>pornFocus: $activeSlave.porn.focus -<br>pornTypeGeneral: $activeSlave.porn.fame.general -<br>pornTypeFuckdoll: $activeSlave.porn.fame.fuckdoll -<br>pornTypeRape: $activeSlave.porn.fame.rape -<br>pornTypePreggo: $activeSlave.porn.fame.preggo -<br>pornTypeBBW: $activeSlave.porn.fame.BBW -<br>pornTypeGainer: $activeSlave.porn.fame.gainer -<br>pornTypeStud: $activeSlave.porn.fame.stud -<br>pornTypeLoli: $activeSlave.porn.fame.loli -<br>pornTypeDeepThroat: $activeSlave.porn.fame.deepThroat -<br>pornTypeStruggleFuck: $activeSlave.porn.fame.struggleFuck -<br>pornTypePainal: $activeSlave.porn.fame.painal -<br>pornTypeTease: $activeSlave.porn.fame.tease -<br>pornTypeRomantic: $activeSlave.porn.fame.romantic -<br>pornTypePervert: $activeSlave.porn.fame.pervert -<br>pornTypeCaring: $activeSlave.porn.fame.caring -<br>pornTypeUnflinching: $activeSlave.porn.fame.unflinching -<br>pornTypeSizeQueen: $activeSlave.porn.fame.sizeQueen -<br>pornTypeNeglectful: $activeSlave.porn.fame.neglectful -<br>pornTypeCumAddict: $activeSlave.porn.fame.cumAddict -<br>pornTypeAnalAddict: $activeSlave.porn.fame.analAddict -<br>pornTypeAttentionWhore: $activeSlave.porn.fame.attentionWhore -<br>pornTypeBreastGrowth: $activeSlave.porn.fame.breastGrowth -<br>pornTypeAbusive: $activeSlave.porn.fame.abusive -<br>pornTypeMalicious: $activeSlave.porn.fame.malicious -<br>pornTypeSelfHating: $activeSlave.porn.fame.selfHating -<br>pornTypeBreeder: $activeSlave.porn.fame.breeder -<br>pornTypeSub: $activeSlave.porn.fame.sub -<br>pornTypeCumSlut: $activeSlave.porn.fame.cumSlut -<br>pornTypeAnal: $activeSlave.porn.fame.anal -<br>pornTypeHumiliation: $activeSlave.porn.fame.humiliation -<br>pornTypeBoobs: $activeSlave.porn.fame.boobs -<br>pornTypeDom: $activeSlave.porn.fame.dom -<br>pornTypeSadist: $activeSlave.porn.fame.sadist -<br>pornTypeMasochist: $activeSlave.porn.fame.masochist -<br>pornTypePregnancy: $activeSlave.porn.fame.pregnancy -<br>prestigeDesc: $activeSlave.prestigeDesc -<br>recruiter: $activeSlave.recruiter -<br>relation: $activeSlave.relation -<br>relationTarget: $activeSlave.relationTarget -<br>relationship: $activeSlave.relationship -<br>relationshipTarget: $activeSlave.relationshipTarget -<br>rivalry: $activeSlave.rivalry -<br>rivalryTarget: $activeSlave.rivalryTarget -<br>subTarget: $activeSlave.subTarget -<br>father: $activeSlave.father -<br>mother: $activeSlave.mother -<br>daughters: $activeSlave.daughters -<br>sisters: $activeSlave.sisters -<br>canRecruit: $activeSlave.canRecruit -<br>choosesOwnAssignment: $activeSlave.choosesOwnAssignment -<br>assignment: $activeSlave.assignment -<br>assignmentVisible: $activeSlave.assignmentVisible -<br>sentence: $activeSlave.sentence -<br>training: $activeSlave.training -<br>toyHole: $activeSlave.toyHole -<br>indenture: $activeSlave.indenture -<br>indentureRestrictions: $activeSlave.indentureRestrictions -<br>birthWeek: $activeSlave.birthWeek -<br>actualAge: $activeSlave.actualAge -<br>visualAge: $activeSlave.visualAge -<br>physicalAge: $activeSlave.physicalAge -<br>ovaryAge: $activeSlave.ovaryAge -<br>ageImplant: $activeSlave.ageImplant -<br>health: $activeSlave.health -<br>minorInjury: $activeSlave.minorInjury -<br>trust: $activeSlave.trust -<br>oldTrust: $activeSlave.oldTrust -<br>devotion: $activeSlave.devotion -<br>oldDevotion: $activeSlave.oldDevotion -<br>weight: $activeSlave.weight -<br>muscles: $activeSlave.muscles -<br>height: $activeSlave.height -<br>heightImplant: $activeSlave.heightImplant -<br>nationality: $activeSlave.nationality -<br>race: $activeSlave.race -<br>origRace: $activeSlave.origRace -<br>markings: $activeSlave.markings -<br>eyes: $activeSlave.eyes -<br>eyeColor: $activeSlave.eyeColor -<br>origEye: $activeSlave.origEye -<br>pupil: $activeSlave.pupil -<br>sclerae: $activeSlave.sclerae -<br>eyewear: $activeSlave.eyewear -<br>hears: $activeSlave.hears -<br>earwear: $activeSlave.earwear -<br>earImplant: $activeSlave.earImplant -<br>smells: $activeSlave.smells -<br>tastes: $activeSlave.tastes -<br>origHColor: $activeSlave.origHColor -<br>hColor: $activeSlave.hColor -<br>pubicHColor: $activeSlave.pubicHColor -<br>underArmHColor: $activeSlave.underArmHColor -<br>eyebrowHColor: $activeSlave.eyebrowHColor -<br>origSkin: $activeSlave.origSkin -<br>skin: $activeSlave.skin -<br>hLength: $activeSlave.hLength -<br>eyebrowFullness: $activeSlave.eyebrowFullness -<br>hStyle: $activeSlave.hStyle -<br>pubicHStyle: $activeSlave.pubicHStyle -<br>underArmHStyle: $activeSlave.underArmHStyle -<br>eyebrowHStyle: $activeSlave.eyebrowHStyle -<br>waist: $activeSlave.waist -<br>corsetPiercing: $activeSlave.corsetPiercing -<br>PLimb: $activeSlave.PLimb -<br>arm: $activeSlave.arms -<br>leg: $activeSlave.leg -<br>heels: $activeSlave.heels -<br>voice: $activeSlave.voice -<br>voiceImplant: $activeSlave.voiceImplant -<br>accent: $activeSlave.accent -<br>shoulders: $activeSlave.shoulders -<br>shouldersImplant: $activeSlave.shouldersImplant -<br>boobs: $activeSlave.boobs -<br>boobsMilk: $activeSlave.boobsMilk -<br>boobsImplant: $activeSlave.boobsImplant -<br>boobsImplantType: $activeSlave.boobsImplantType -<br>boobShape: $activeSlave.boobShape -<br>nipples: $activeSlave.nipples -<br>nipplesPiercing: $activeSlave.nipplesPiercing -<br>nipplesAccessory: $activeSlave.nipplesAccessory -<br>areolae: $activeSlave.areolae -<br>areolaePiercing: $activeSlave.areolaePiercing -<br>areolaeShape: $activeSlave.areolaeShape -<br>boobsTat: $activeSlave.boobsTat -<br>lactation: $activeSlave.lactation -<br>lactationDuration: $activeSlave.lactationDuration -<br>induceLactation: $activeSlave.induceLactation -<br>lactationAdaptation: $activeSlave.lactationAdaptation -<br>milk: $activeSlave.counter.milk -<br>cum: $activeSlave.cum -<br>hips: $activeSlave.hips -<br>hipsImplant: $activeSlave.hipsImplant -<br>butt: $activeSlave.butt -<br>buttImplant: $activeSlave.buttImplant -<br>buttImplantType: $activeSlave.buttImplantType -<br>buttTat: $activeSlave.buttTat -<br>face: $activeSlave.face -<br>faceImplant: $activeSlave.faceImplant -<br>faceShape: $activeSlave.faceShape -<br>lips: $activeSlave.lips -<br>lipsImplant: $activeSlave.lipsImplant -<br>lipsPiercing: $activeSlave.lipsPiercing -<br>lipsTat: $activeSlave.lipsTat -<br>teeth: $activeSlave.teeth -<br>tonguePiercing: $activeSlave.tonguePiercing -<br>vagina: $activeSlave.vagina -<br>vaginaLube: $activeSlave.vaginaLube -<br>vaginaPiercing: $activeSlave.vaginaPiercing -<br>vaginaTat: $activeSlave.vaginaTat -<br>preg: $activeSlave.preg -<br>pregSource: $activeSlave.pregSource -<br>pregType: $activeSlave.pregType -<br>pregAdaptation: $activeSlave.pregAdaptation -<br>ovaImplant: $activeSlave.ovaImplant -<br>wombImplant: $activeSlave.wombImplant -<br>fertKnown: $activeSlave.fertKnown -<br>fertPeak: $activeSlave.fertPeak -<br>broodmother: $activeSlave.broodmother -<br>broodmotherFetuses: $activeSlave.broodmotherFetuses -<br>broodmotherOnHold: $activeSlave.broodmotherOnHold -<br>broodmotherCountDown: $activeSlave.broodmotherCountDown -<br>labor: $activeSlave.labor -<br>births: $activeSlave.counter.births -<br>laborCount: $activeSlave.counter.laborCount -<br>bellyAccessory: $activeSlave.bellyAccessory -<br>labia: $activeSlave.labia -<br>clit: $activeSlave.clit -<br>clitPiercing: $activeSlave.clitPiercing -<br>clitSetting: $activeSlave.clitSetting -<br>foreskin: $activeSlave.foreskin -<br>anus: $activeSlave.anus -<br>dick: $activeSlave.dick -<br>analArea: $activeSlave.analArea -<br>dickPiercing: $activeSlave.dickPiercing -<br>dickTat: $activeSlave.dickTat -<br>prostate: $activeSlave.prostate -<br>balls: $activeSlave.balls -<br>scrotum: $activeSlave.scrotum -<br>ovaries: $activeSlave.ovaries -<br>anusPiercing: $activeSlave.anusPiercing -<br>anusTat: $activeSlave.anusTat -<br>makeup: $activeSlave.makeup -<br>nails: $activeSlave.nails -<br>brand: -<<for _brandName, _brand range $activeSlave.brand>> - _brandName: _brand, -<</for>> -<br>scar: -<<for _scarName, _scar range $activeSlave.scar>> - _scarName: _scar, -<</for>> -<br>earPiercing: $activeSlave.earPiercing -<br>nosePiercing: $activeSlave.nosePiercing -<br>eyebrowPiercing: $activeSlave.eyebrowPiercing -<br>navelPiercing: $activeSlave.navelPiercing -<br>shouldersTat: $activeSlave.shouldersTat -<br>armsTat: $activeSlave.armsTat -<br>legsTat: $activeSlave.legsTat -<br>backTat: $activeSlave.backTat -<br>stampTat: $activeSlave.stampTat -<br>skill.vaginal: $activeSlave.skill.vaginal -<br>skill.oral: $activeSlave.skill.oral -<br>skill.anal: $activeSlave.skill.anal -<br>skill.whore: $activeSlave.skill.whore -<br>skill.entertainment: $activeSlave.skill.entertainment -<br>skill.combat: $activeSlave.skill.combat -<br>livingRules: $activeSlave.livingRules -<br>speechRules: $activeSlave.speechRules -<br>releaseRules: $activeSlave.releaseRules -<br>relationshipRules: $activeSlave.relationshipRules -<br>lactationRules: $activeSlave.lactationRules -<br>standardPunishment: $activeSlave.standardPunishment -<br>standardReward: $activeSlave.standardReward -<br>useRulesAssistant: $activeSlave.useRulesAssistant -<br>diet: $activeSlave.diet -<br>dietCum: $activeSlave.dietCum -<br>dietMilk: $activeSlave.dietMilk -<br>tired: $activeSlave.tired -<br>hormones: $activeSlave.hormones -<br>drugs: $activeSlave.drugs -<br>curatives: $activeSlave.curatives -<br>chem: $activeSlave.chem -<br>aphrodisiacs: $activeSlave.aphrodisiacs -<br>addict: $activeSlave.addict -<br>fuckdoll: $activeSlave.fuckdoll -<br>choosesOwnClothes: $activeSlave.choosesOwnClothes -<br>clothes: $activeSlave.clothes -<br>collar: $activeSlave.collar -<br>shoes: $activeSlave.shoes -<br>vaginalAccessory: $activeSlave.vaginalAccessory -<br>vaginalAttachment: $activeSlave.vaginalAttachment -<br>dickAccessory: $activeSlave.dickAccessory -<br>armAccessory: $activeSlave.armAccessory -<br>legAccessory: $activeSlave.legAccessory -<br>buttplug: $activeSlave.buttplug -<br>buttplugAttachment: $activeSlave.buttplugAttachment -<br>intelligence: $activeSlave.intelligence -<br>intelligenceImplant: $activeSlave.intelligenceImplant -<br>energy: $activeSlave.energy -<br>need: $activeSlave.need -<br>attrXX: $activeSlave.attrXX -<br>attrXY: $activeSlave.attrXY -<br>attrKnown: $activeSlave.attrKnown -<br>fetish: $activeSlave.fetish -<br>fetishStrength: $activeSlave.fetishStrength -<br>fetishKnown: $activeSlave.fetishKnown -<br>behavioralFlaw: $activeSlave.behavioralFlaw -<br>behavioralQuirk: $activeSlave.behavioralQuirk -<br>sexualFlaw: $activeSlave.sexualFlaw -<br>sexualQuirk: $activeSlave.sexualQuirk -<br>''Genetic Quirks'' -<br>geneticQuirks: $activeSlave.geneticQuirks.gigantomastia -<br>geneticQuirks: $activeSlave.geneticQuirks.fertility -<br>geneticQuirks: $activeSlave.geneticQuirks.hyperFertility -<br>geneticQuirks: $activeSlave.geneticQuirks.superfetation -<br>geneticQuirks: $activeSlave.geneticQuirks.gigantism -<br>geneticQuirks: $activeSlave.geneticQuirks.dwarfism -<br>geneticQuirks: $activeSlave.geneticQuirks.pFace -<br>geneticQuirks: $activeSlave.geneticQuirks.uFace -<br>geneticQuirks: $activeSlave.geneticQuirks.albinism -<br>geneticQuirks: $activeSlave.geneticQuirks.rearLipedema -<br>geneticQuirks: $activeSlave.geneticQuirks.wellHung -<br>geneticQuirks: $activeSlave.geneticQuirks.wGain -<br>geneticQuirks: $activeSlave.geneticQuirks.wLoss -<br>geneticQuirks: $activeSlave.geneticQuirks.androgyny -<br>oralCount: $activeSlave.counter.oral -<br>vaginalCount: $activeSlave.counter.vaginal -<br>analCount: $activeSlave.counter.anal -<br>mammaryCount: $activeSlave.counter.mammary -<br>penetrativeCount: $activeSlave.counter.penetrative -<br>publicCount: $activeSlave.counter.publicUse -<br>pitKills: $activeSlave.counter.pitKills -<br>custom.tattoo: $activeSlave.custom.tattoo -<br>custom.label: $activeSlave.custom.label -<br>custom.desc: $activeSlave.custom.desc -<br>custom.title: $activeSlave.custom.title -<br>custom.titleLisp: $activeSlave.custom.titleLisp -<br>rudeTitle: $activeSlave.rudeTitle -<br>currentRules: $activeSlave.currentRules -<br>bellyTat: $activeSlave.bellyTat -<br>induce: $activeSlave.induce -<br>mpreg: $activeSlave.mpreg -<br>inflation: $activeSlave.inflation -<br>inflationType: $activeSlave.inflationType -<br>inflationMethod: $activeSlave.inflationMethod -<br>milkSource: $activeSlave.milkSource -<br>cumSource: $activeSlave.cumSource -<br>burst: $activeSlave.burst -<br>pregKnown: $activeSlave.pregKnown -<br>pregWeek: $activeSlave.pregWeek -<br>belly: $activeSlave.belly -<br>bellyPreg: $activeSlave.bellyPreg -<br>bellyFluid: $activeSlave.bellyFluid -<br>bellyImplant: $activeSlave.bellyImplant -<br>bellySag: $activeSlave.bellySag -<br>bellySagPreg: $activeSlave.bellySagPreg -<br>bellyPain: $activeSlave.bellyPain -<br>cervixImplant: $activeSlave.cervixImplant -<br>birthsTotal: $activeSlave.counter.birthsTotal -<br>pubertyAgeXX: $activeSlave.pubertyAgeXX -<br>pubertyAgeXY: $activeSlave.pubertyAgeXY -<br>breedingMark: $activeSlave.breedingMark -<br>bodySwap: $activeSlave.bodySwap -<br>HGExclude: $activeSlave.HGExclude -<br>ballType: $activeSlave.ballType -<br>eggType: $activeSlave.eggType -<br>choosesOwnChastity: $activeSlave.choosesOwnChastity -<br>pregControl: $activeSlave.pregControl -<br>ageAdjust: $activeSlave.ageAdjust -<br>bald: $activeSlave.bald -<br>origBodyOwner: $activeSlave.origBodyOwner -<br>origBodyOwnerID: $activeSlave.origBodyOwnerID -<br>death: $activeSlave.death -<br>hormoneBalance: $activeSlave.hormoneBalance -<br>onDiet: $activeSlave.onDiet -<br>breastMesh: $activeSlave.breastMesh -<br>slavesFathered: $activeSlave.counter.slavesFathered -<br>PCChildrenFathered: $activeSlave.counter.PCChildrenFathered -<br>slavesKnockedUp: $activeSlave.counter.slavesKnockedUp -<br>PCKnockedUp: $activeSlave.counter.PCKnockedUp -<br>prematureBirth: $activeSlave.prematureBirth -<br>premature: $activeSlave.premature -<br>vasectomy: $activeSlave.vasectomy -<br>haircuts: $activeSlave.haircuts -<br>newGamePlus: $activeSlave.newGamePlus -<br>skill.headGirl: $activeSlave.skill.headGirl -<br>skill.recruiter: $activeSlave.skill.recruiter -<br>skill.bodyguard: $activeSlave.skill.bodyguard -<br>skill.madam: $activeSlave.skill.madam -<br>skill.DJ: $activeSlave.skill.DJ -<br>skill.nurse: $activeSlave.skill.nurse -<br>skill.teacher: $activeSlave.skill.teacher -<br>skill.attendant: $activeSlave.skill.attendant -<br>skill.matron: $activeSlave.skill.matron -<br>skill.stewardess: $activeSlave.skill.stewardess -<br>skill.milkmaid: $activeSlave.skill.milkmaid -<br>skill.farmer: $activeSlave.skill.farmer -<br>skill.wardeness: $activeSlave.skill.wardeness -<br>skill.servant: $activeSlave.skill.servant -<br>skill.entertainer: $activeSlave.skill.entertainer -<br>skill.whore: $activeSlave.skill.whore -<br>tankBaby: $activeSlave.tankBaby -<br>clone: $activeSlave.clone -<br>''Gene Mods'' -<br>geneMods: $activeSlave.geneMods.NCS -<br>geneMods: $activeSlave.geneMods.rapidCellGrowth -<br>NCSyouthening: $activeSlave.NCSyouthening -<br>override_Race: $activeSlave.override_Race -<br>override_Skin: $activeSlave.override_Skin -<br>override_Eye_Color: $activeSlave.override_Eye_Color -<br>override_H_Color: $activeSlave.override_H_Color -<br>override_Pubic_H_Color: $activeSlave.override_Pubic_H_Color -<br>override_Arm_H_Color: $activeSlave.override_Arm_H_Color -<br>override_Brow_H_Color: $activeSlave.override_Brow_H_Color -<br>slaveCost: $activeSlave.slaveCost -<br>lifetimeCashExpenses: $activeSlave.lifetimeCashExpenses -<br>lifetimeCashIncome: $activeSlave.lifetimeCashIncome -<br>lastWeeksCashIncome: $activeSlave.lastWeeksCashIncome -<br>lifetimeRepExpenses: $activeSlave.lifetimeRepExpenses -<br>lifetimeRepIncome: $activeSlave.lifetimeRepIncome -<br>lastWeeksRepExpenses: $activeSlave.lastWeeksRepExpenses -<br>lastWeeksRepIncome: $activeSlave.lastWeeksRepIncome -<br>Deadliness <<print Deadliness($activeSlave)>> -<br><br> +<br>Prestige: $activeSlave.prestige, +Desc: $activeSlave.prestigeDesc +<br>CustomDesc: $activeSlave.custom.desc + +<br>Indenture: $activeSlave.indenture, +Restrictions: $activeSlave.indentureRestrictions + +<br>Sentence: $activeSlave.sentence, +Training: $activeSlave.training + +<br>BreedingMark: $activeSlave.breedingMark +<br>Assignment: $activeSlave.assignment, +Visible: $activeSlave.assignmentVisible, +choosesOwn: $activeSlave.choosesOwnAssignment + +<br>Title: +Custom: $activeSlave.custom.title, +Lisp: $activeSlave.custom.titleLisp, +Rude: $activeSlave.rudeTitle +<br>Custom.label: $activeSlave.custom.label + +<br><br>Drugs: $activeSlave.drugs, +Curatives: $activeSlave.curatives, +Chem: $activeSlave.chem, +Aphrodisiacs: $activeSlave.aphrodisiacs +<br>Induce: $activeSlave.induce + +<br><br>Rules: +Current: $activeSlave.currentRules, +Living: $activeSlave.livingRules, +Speech: $activeSlave.speechRules, +Release: $activeSlave.releaseRules + +<br>Standard: +Punishment: $activeSlave.standardPunishment, +Reward: $activeSlave.standardReward +<br>UseRulesAssistant: $activeSlave.useRulesAssistant, +ChoosesOwnChastity: $activeSlave.choosesOwnChastity + +<br><br>Lifetime: +<br> Cash: +Expenses: <<= num($activeSlave.lifetimeCashExpenses)>>, +Income: <<= num($activeSlave.lifetimeCashIncome)>> +<br> Rep: +Expenses: <<= num($activeSlave.lifetimeRepExpenses)>>, +Income: <<= num($activeSlave.lifetimeRepIncome)>> +<br>LastWeeks: +<br> CashIncome: <<= num($activeSlave.lastWeeksCashIncome)>> +<br> Rep: +Expenses: <<= num($activeSlave.lastWeeksRepExpenses)>>, +Income: <<= num($activeSlave.lastWeeksRepIncome)>> + +<br> +<button class="tablinks" onclick="App.UI.tabbar.openTab(event, 'Skills')" id="tab Skills">Skills</button> +<button class="tablinks" onclick="App.UI.tabbar.openTab(event, 'Mental')" id="tab Mental">Mental</button> +<button class="tablinks" onclick="App.UI.tabbar.openTab(event, 'Body')" id="tab Body">Body</button> +<button class="tablinks" onclick="App.UI.tabbar.openTab(event, 'Porn')" id="tab Porn">Porn</button> +<button class="tablinks" onclick="App.UI.tabbar.openTab(event, 'Impants_Piercings_Tattoos')" id="tab Impants_Piercings_Tattoos">Impants, piercings & Tattoos</button> +<button class="tablinks" onclick="App.UI.tabbar.openTab(event, 'Family')" id="tab Family">Family</button> +<button class="tablinks" onclick="App.UI.tabbar.openTab(event, 'Misc')" id="tab Misc">Misc</button> +<br> + +<div id="Skills" class="tabcontent"> + <div class="content"> + Vaginal: $activeSlave.skill.vaginal, + <br>Oral: $activeSlave.skill.oral, + <br>Anal: $activeSlave.skill.anal, + <br>Whore: $activeSlave.skill.whore + <br>Entertainment: $activeSlave.skill.entertainment + <br>Combat: $activeSlave.skill.combat + + <br><br>Careers: + <br>Entertainer: $activeSlave.skill.entertainer + <br>Madam: $activeSlave.skill.madam, + Whore: $activeSlave.skill.whore + + <br>Stewardess: $activeSlave.skill.stewardess, + Servant: $activeSlave.skill.servant + + <br>HeadGirl: $activeSlave.skill.headGirl + <br>Recruiter: $activeSlave.skill.recruiter + <br>Bodyguard: $activeSlave.skill.bodyguard + + <br>DJ: $activeSlave.skill.DJ + <br>Nurse: $activeSlave.skill.nurse + <br>Teacher: $activeSlave.skill.teacher + <br>Attendant: $activeSlave.skill.attendant + <br>Matron: $activeSlave.skill.matron + <br>Milkmaid: $activeSlave.skill.milkmaid + <br>Farmer: $activeSlave.skill.farmer + <br>Wardeness: $activeSlave.skill.wardeness + </div> +</div> + +<div id="Mental" class="tabcontent"> + <div class="content"> + Intelligence: $activeSlave.intelligence + <br>Attraction: + XX: $activeSlave.attrXX, + XY: $activeSlave.attrXY + + <br>Fetish: + Strength: $activeSlave.fetishStrength, + Known: $activeSlave.fetishKnown + <br>Behavioral: + Flaw: $activeSlave.behavioralFlaw, + Quirk: $activeSlave.behavioralQuirk + <br>Sexual: + Flaw: $activeSlave.sexualFlaw, + Quirk: $activeSlave.sexualQuirk + + <br>Energy: $activeSlave.energy, + Tired: $activeSlave.tired + <br>Need: $activeSlave.need, + Cap: $activeSlave.needCap + <br>Addict: $activeSlave.addict + <br>Hormones: $activeSlave.hormones, + Balance: $activeSlave.hormoneBalance + <br>Trust: $activeSlave.trust, + Previous: $activeSlave.oldTrust + <br>Devotion: $activeSlave.devotion, + Previous: $activeSlave.oldDevotion + </div> +</div> + +<div id="Body" class="tabcontent"> + <div class="content"> + Health: $activeSlave.health, + MinorInjury: $activeSlave.minorInjury + + <br><br>Markings: $activeSlave.markings + <br>Fuckdoll: $activeSlave.fuckdoll + <br>ToyHole: $activeSlave.toyHole + <br>PLimb: $activeSlave.PLimb + + <br><br>BodySwap: $activeSlave.bodySwap + <br>origBodyOwner: $activeSlave.origBodyOwner, + ID: $activeSlave.origBodyOwnerID + + <br><br>Age: + Actual: $activeSlave.actualAge, + Visual: $activeSlave.visualAge, + PhysicalAge: $activeSlave.physicalAge, + Adjust: $activeSlave.ageAdjust + <br>PubertyAge: + XX: $activeSlave.pubertyAgeXX, + XY: $activeSlave.pubertyAgeXY + + <br><br>Brand: + <<for _brandName, _brand range $activeSlave.brand>> + _brandName: _brand, + <</for>> + <br>scar: + <<for _scarName, _scar range $activeSlave.scar>> + _scarName: _scar, + <</for>> + + <br><br>Broodmother: + Fetuses: $activeSlave.broodmotherFetuses, + CountDown: $activeSlave.broodmotherCountDown + + <br>Diet: + Current: $activeSlave.diet, + Cum: $activeSlave.dietCum, + Milk: $activeSlave.dietMilk + + <br><br> + <h2>Upper</h2> + + Hair: + Length: $activeSlave.hLength, + Style: $activeSlave.hStyle, + <br>Color: $activeSlave.hColor, + Orig: $activeSlave.origHColor, + Override: $activeSlave.override_H_Color + + <br>Pubic Hair: + Style: $activeSlave.pubicHStyle, + Color: $activeSlave.pubicHColor, + Override: $activeSlave.override_Pubic_H_Color + + <br><br>Eyes: + <br>Eyes: $activeSlave.eyes, + Color: $activeSlave.eyeColor, + Orig: $activeSlave.origEye, + Override: $activeSlave.override_Eye_Color + <br>eyewear: $activeSlave.eyewear + <br>pupil: $activeSlave.pupil + <br>sclerae: $activeSlave.sclerae + + <br><br>Ears: + Hearing: $activeSlave.hears, + Wear: $activeSlave.earwear + + <br><br>Face: + <br>Face: $activeSlave.face, + Shape: $activeSlave.faceShape + <br>Lips: $activeSlave.lips + <br>Oral count: $activeSlave.counter.oral + <br>Teeth: $activeSlave.teeth + + <br>Voice: $activeSlave.voice + <br>Accent: $activeSlave.accent + <br>Eyebrow: + <br>Fullness: $activeSlave.eyebrowFullness, + Color: $activeSlave.eyebrowHColor, + Style: $activeSlave.eyebrowHStyle, + Override: $activeSlave.override_Brow_H_Color + <br>Smells: $activeSlave.smells + <br>Tastes: $activeSlave.tastes + <br>Makeup: $activeSlave.makeup + + <br>Race: $activeSlave.race, + Orig: $activeSlave.origRace, + Override: $activeSlave.override_Race + <br>Skin: $activeSlave.skin, + Orig: $activeSlave.origSkin, + Override: $activeSlave.override_Skin + + <br>Haircuts: $activeSlave.haircuts, + Bald: $activeSlave.bald + + <br>Collar: $activeSlave.collar + <br>Height: $activeSlave.height + <br>Clothes: $activeSlave.clothes, + ChoosesOwn: $activeSlave.choosesOwnClothes + + <br>Shoulders: $activeSlave.shoulders + <br>ArmAccessory: $activeSlave.armAccessory + <br>Muscles: $activeSlave.muscles + <br>Arms: $activeSlave.arms, + <br>UnderArm: + HColor: $activeSlave.underArmHColor, + Style: $activeSlave.underArmHStyle, + Override H Colour: $activeSlave.override_Arm_H_Color + + <br>Nails: $activeSlave.nails + + <br><br>Boobs: $activeSlave.boobs, + <br>Milk: $activeSlave.boobsMilk, + Type: $activeSlave.boobsImplantType, + Qunantity: $activeSlave.counter.milk + <br>Shape: $activeSlave.boobShape + <br>nipples: $activeSlave.nipples, + Accessory: $activeSlave.nipplesAccessory + <br>Areolae: $activeSlave.areolae + Shape: $activeSlave.areolaeShape + <br>Lactation: $activeSlave.lactation, + Duration: $activeSlave.lactationDuration, + Induce: $activeSlave.induceLactation, + Adaptation: $activeSlave.lactationAdaptation + <br>MammaryCount: $activeSlave.counter.mammary + <br>LactationRules: $activeSlave.lactationRules + <br>BreastMesh: $activeSlave.breastMesh + + <br><br> + <h2>Lower</h2> + + Weight: $activeSlave.weight + <br>Waist: $activeSlave.waist + <br>Hips: $activeSlave.hips + + <br><br>Belly: $activeSlave.belly, + Preg: $activeSlave.bellyPreg, + Fluid: $activeSlave.bellyFluid, + Sag: $activeSlave.bellySag, + SagPreg: $activeSlave.bellySagPreg, + Pain: $activeSlave.bellyPain, + Accessory: $activeSlave.bellyAccessory + <br>Burst: $activeSlave.burst + <br>Inflation: $activeSlave.inflation, + Type: $activeSlave.inflationType, + Method: $activeSlave.inflationMethod + <br>Source: + Milk: $activeSlave.milkSource, + Cum: $activeSlave.cumSource + + <br><br>Anus: $activeSlave.anus, + Area: $activeSlave.analArea, + Count: $activeSlave.counter.anal + <br>Butt: $activeSlave.butt, + Type: $activeSlave.buttImplantType, + Plug: $activeSlave.buttplug, + PlugAttachment: $activeSlave.buttplugAttachment + <br>Mpreg: $activeSlave.mpreg + + <br><br>Foreskin: $activeSlave.foreskin, + <br>Dick: $activeSlave.dick, + Accessory: $activeSlave.dickAccessory + <br>Vasectomy: $activeSlave.vasectomy + <br>Prostate: $activeSlave.prostate + <br>Balls: $activeSlave.balls, + Type: $activeSlave.ballType + <br>Scrotum: $activeSlave.scrotum + <br>Cum released: $activeSlave.counter.cum + + <br><br>Vagina: $activeSlave.vagina, + Lube: $activeSlave.vaginaLube, + Accessory: $activeSlave.vaginalAccessory, + Attachment: $activeSlave.vaginalAttachment, + Count: $activeSlave.counter.vaginal + <br>EggType: $activeSlave.eggType + <br>Ovaries: $activeSlave.ovaries + <br>OvaryAge: $activeSlave.ovaryAge + + <br><br>Labia: $activeSlave.labia, + <br>Clit: $activeSlave.clit, + Setting: $activeSlave.clitSetting + + <br>LeftLeg: $activeSlave.leg.left.type, + RightLeg: $activeSlave.leg.right.type + Accessory: $activeSlave.legAccessory + <br>Heels: $activeSlave.heels + <br>Shoes: $activeSlave.shoes + </div> +</div> + +<div id="Porn" class="tabcontent"> + <div class="content"> + Focus: $activeSlave.porn.focus, + Feed: $activeSlave.pornFeed + <br>Fame: $activeSlave.pornFame + FameType: $activeSlave.porn.fameType + <br>FameSpending: $activeSlave.pornFameSpending + <br>Prestige: $activeSlave.pornPrestige + PrestigeDesc: $activeSlave.pornPrestigeDesc + + <br><br> + <h2>Type</h2> + General: $activeSlave.porn.fame.general + <br>Fuckdoll: $activeSlave.porn.fame.fuckdoll + <br>Rape: $activeSlave.porn.fame.rape, + Unflinching: $activeSlave.porn.fame.unflinching + + <br>Preggo: $activeSlave.porn.fame.preggo, + Pregnancy: $activeSlave.porn.fame.pregnancy, + Breeder: $activeSlave.porn.fame.breeder + + <br>BBW: $activeSlave.porn.fame.BBW, + Gainer: $activeSlave.porn.fame.gainer + <br>Stud: $activeSlave.porn.fame.stud + <br>Loli: $activeSlave.porn.fame.loli + <br>DeepThroat: $activeSlave.porn.fame.deepThroat, + StruggleFuck: $activeSlave.porn.fame.struggleFuck + <br>Painal: $activeSlave.porn.fame.painal + <br>Tease: $activeSlave.porn.fame.tease + <br>Romantic: $activeSlave.porn.fame.romantic, + Caring: $activeSlave.porn.fame.caring + <br>Pervert: $activeSlave.porn.fame.pervert + + <br>SizeQueen: $activeSlave.porn.fame.sizeQueen + + <br>CumSlut: $activeSlave.porn.fame.cumSlut, + <br>CumAddict: $activeSlave.porn.fame.cumAddict + <br>Anal: $activeSlave.porn.fame.anal, + AnalAddict: $activeSlave.porn.fame.analAddict + <br>AttentionWhore: $activeSlave.porn.fame.attentionWhore + + <br>Abusive: $activeSlave.porn.fame.abusive, + Malicious: $activeSlave.porn.fame.malicious, + <br>Neglectful: $activeSlave.porn.fame.neglectful, + SelfHating: $activeSlave.porn.fame.selfHating + + <br>BreastGrowth: $activeSlave.porn.fame.breastGrowth, + Boobs: $activeSlave.porn.fame.boobs + <br>Humiliation: $activeSlave.porn.fame.humiliation + + <br>Dom: $activeSlave.porn.fame.dom, + Sub: $activeSlave.porn.fame.sub + <br>Sadist: $activeSlave.porn.fame.sadist, + Masochist: $activeSlave.porn.fame.masochist + <br> + </div> +</div> + +<div id="Impants_Piercings_Tattoos" class="tabcontent"> + <div class="content"> + + <h2>Impants</h2> + Height: $activeSlave.heightImplant + <br>Ears: $activeSlave.earImplant + <br>Face: $activeSlave.faceImplant + <br>Boobs: $activeSlave.boobsImplant + <br>Shoulders: $activeSlave.shouldersImplant + <br>Belly: $activeSlave.bellyImplant + <br>Hips: $activeSlave.hipsImplant + <br>Age: $activeSlave.ageImplant + <br>Voice: $activeSlave.voiceImplant + <br>Lips: $activeSlave.lipsImplant + <br>Ova: $activeSlave.ovaImplant + <br>Womb: $activeSlave.wombImplant + <br>Intelligence: $activeSlave.intelligenceImplant + <br>Cervix: $activeSlave.cervixImplant + <br>Butt: $activeSlave.buttImplant + + <br><br> <h2>Piercings</h2> + Ears: $activeSlave.earPiercing + <br>Face: $activeSlave.lipsPiercing + <br>Nipples: $activeSlave.nipplesPiercing + <br>Areolae: $activeSlave.areolaePiercing + <br>Tongue: $activeSlave.tonguePiercing + <br>Nose: $activeSlave.nosePiercing + <br>Eyebrow: $activeSlave.eyebrowPiercing + <br>Corset: $activeSlave.corsetPiercing + <br>Navel: $activeSlave.navelPiercing + <br>Clit: $activeSlave.clitPiercing + <br>Vagina: $activeSlave.vaginaPiercing + <br>Dick: $activeSlave.dickPiercing + <br>Anus: $activeSlave.anusPiercing + + <br><br> <h2>Tattoos</h2> + Custom: $activeSlave.custom.tattoo + <br>Shoulders: $activeSlave.shouldersTat + <br>Belly: $activeSlave.bellyTat + <br>Lips: $activeSlave.lipsTat + <br>Back: $activeSlave.backTat + <br>Stamp:$activeSlave.stampTat + <br>Legs: $activeSlave.legsTat + <br>Arms: $activeSlave.armsTat + <br>Boobs: $activeSlave.boobsTat + <br>Vagina: $activeSlave.vaginaTat + <br>Dick: $activeSlave.dickTat + <br>Anus: $activeSlave.anusTat + <br>Butt: $activeSlave.buttTat + <br>Number of abortions: $activeSlave.abortionTat + </div> +</div> + +<div id="Family" class="tabcontent"> + <div class="content"> + Genes: $activeSlave.genes + <br><br>BirthName: $activeSlave.birthName, + BirthSurname: $activeSlave.birthSurname + <br>Father: $activeSlave.father, + Mother: $activeSlave.mother + <br>Daughters: $activeSlave.daughters, + Sisters: $activeSlave.sisters + <br>Fathered: slaves: $activeSlave.counter.slavesFathered, + PCChildren: $activeSlave.counter.PCChildrenFathered + <br>KnockedUp: slaves: $activeSlave.counter.slavesKnockedUp, + <br>PC: $activeSlave.counter.PCKnockedUp + <br>labor: $activeSlave.labor, + Count: $activeSlave.counter.laborCount + <br>Births: $activeSlave.counter.births, + Total: $activeSlave.counter.birthsTotal + <br>PrematureBirth: $activeSlave.prematureBirth + + <br> <h2>Mods</h2> + NCS: $activeSlave.geneMods.NCS, + RapidCellGrowth: $activeSlave.geneMods.rapidCellGrowth, + + <br><br> <h2>Relationships</h2> + <br>Rules: $activeSlave.relationshipRules + <br>Relation: $activeSlave.relation, + Target: $activeSlave.relationTarget + <br>Relationship: $activeSlave.relationship, + Target: $activeSlave.relationshipTarget + <br>Rivalry: $activeSlave.rivalry, + Target: $activeSlave.rivalryTarget + <br>SubTarget: $activeSlave.subTarget + + <br><br> + <h2>Genetic Quirks</h2> + Gigantism: $activeSlave.geneticQuirks.gigantism, + Gigantomastia: $activeSlave.geneticQuirks.gigantomastia + <br>Fertility: $activeSlave.geneticQuirks.fertility, + Hyper: $activeSlave.geneticQuirks.hyperFertility + <br>Superfetation: $activeSlave.geneticQuirks.superfetation + + <br>Dwarfism: $activeSlave.geneticQuirks.dwarfism + <br>Pface: $activeSlave.geneticQuirks.pFace + <br>Uface: $activeSlave.geneticQuirks.uFace + <br>Albinism: $activeSlave.geneticQuirks.albinism + <br>RearLipedema: $activeSlave.geneticQuirks.rearLipedema + <br>WellHung: $activeSlave.geneticQuirks.wellHung + <br>Weight: + Gain: $activeSlave.geneticQuirks.wGain, + Loss: $activeSlave.geneticQuirks.wLoss + <br>Androgyny: $activeSlave.geneticQuirks.androgyny + + <br><br> + <h2>Pregmancy</h2> + <br>Week: $activeSlave.pregWeek, + isPreg: $activeSlave.preg, + Source: $activeSlave.pregSource, + Type: $activeSlave.pregType, + Adaptation: $activeSlave.pregAdaptation + <br>Control: $activeSlave.pregControl + <br>PeakFertility: $activeSlave.fertPeak + </div> +</div> + +<div id="Misc" class="tabcontent"> + <div class="content"> + <br>Recruiter: $activeSlave.recruiter + <br>Deadliness <<print Deadliness($activeSlave)>> + <br>Count: Penetrative: $activeSlave.counter.penetrative, + Public: $activeSlave.counter.publicUse + <br>pitKills: $activeSlave.counter.pitKills + </div> +</div>