diff --git a/.gitignore b/.gitignore index 25465c247765b92d4e5772b770f731b133d83b64..e4ad18d5203458562454f354ba43a78bcf0fc70a 100644 --- a/.gitignore +++ b/.gitignore @@ -106,3 +106,4 @@ fc-pregmod *.todo TODO.txt .vscode/settings.json +*.code-workspace diff --git a/devNotes/twine CSS b/devNotes/twine CSS index ce696d3590d694d484ba475d3fd3065682aea4b1..e3da430ae7e5616908919995f033dfb7add7508c 100644 --- a/devNotes/twine CSS +++ b/devNotes/twine CSS @@ -643,6 +643,7 @@ div.tab button.active { .optionDescription { display: block; width: unset; + text-align: left; } .optionMacro { @@ -698,13 +699,23 @@ div.tab button.active { box-sizing: border-box; } +.optionValue { + display: inline-flex; + flex-wrap: wrap; +} + .optionValue input { padding: 3px; background: linear-gradient(transparent,#222); border: #555 solid 0.5px; border-top-width: 0; - min-width: reset; + min-width: unset; width: 140px; + height: 22px; +} + +.optionMacroNumber input { + width: 50px; } .optionValue input:last-child { diff --git a/sanityCheck b/sanityCheck index dc0328cde623ce8b13859db984a3291b3eb73472..e8e842b19766a9b04452b30f317e5af78755a42f 100755 --- a/sanityCheck +++ b/sanityCheck @@ -89,6 +89,13 @@ $GREP -i -E "\Wan (b|c|d|f|g|j|k|l|m|n|p|q|r|s|t|v|w|x|y|z)\w." -- src/*.tw | gr $GREP -i "\w$\w" -- src/*.tw | myprint "VarSignMidWord" # check for $ sign at beginning of macro $GREP '<<\s*\$' -- 'src/*' | myprint "VarSignAtMacroStart" +# check our custom option macro is either options,option,optionlt,optionlte,optiongt,optiongte,optiondefault +$GREP -e '<<option' --and --not -e "<<option\(\|s\|lt\|lte\|gt\|gte\|default\)[ >]" -- 'src/*' | myprint "OptionUnrecognized" +# check our custom option macro is: <<option variable "somestring" +$GREP -e "<<option[lg]te\? " --and --not -e "<<option[lg]te\? *-\?[0-9]\+ *-\?[0-9]\+ *[\'\"].*[\'\"]" -- 'src/*' | grep -v src/js | myprint "OptionBadArguments" +$GREP -e "<<optiondefault " --and --not -e "<<optiondefault *\(-\?[0-9]\+\|[\'\"].*[\'\"]\|false\|true\) *[\'\"].*[\'\"]" -- 'src/*' | grep -v src/js | myprint "OptionBadArguments" +$GREP -e "<<option\([lg]t\?\|default\) *>" -- 'src/*' | grep -v src/js | myprint "OptionBadArguments" +$GREP -e "<<option " --and --not -e "<<option *\(-\?[0-9]\+\|[\'\"].*[\'\"]\|false\|true\) *[\`\'\"].*[\'\"\`]" -- 'src/*' | grep -v src/js | myprint "OptionBadArguments" # check for missing ; before statement $GREP 'if $ ' -- 'src/*' | myprint "missing ; before statement" $GREP 'elseif $ ' -- 'src/*' | myprint "missing ; before statement" @@ -96,6 +103,7 @@ $GREP 'elseif $ ' -- 'src/*' | myprint "missing ; before statement" $GREP "<<[a-zA-Z]\([^\"'>]\|[^\"'>]>[^\"'>]\)*[a-zA-Z][.][^a-zA-Z]" | myprint "StrangeCharacterAfterDot" # Check for @@. instead of .@@ $GREP -E "@@(\.|,|;|:)\s" -- src/*.tw | myprint "WrongSelectorPunctuation" +$GREP "@@[a-z]\+;" -- 'src/*' | myprint "@@MisingDot" # Check that we do not have any variables that we use only once. e.g. $onlyUsedOnce # Ignore *Nationalities diff --git a/src/SpecialForce/Firebase.tw b/src/SpecialForce/Firebase.tw index 586932152b42c86830f35a9d384c600ae8994a71..8392508f226c90875091490d0abf9e5df191c629 100644 --- a/src/SpecialForce/Firebase.tw +++ b/src/SpecialForce/Firebase.tw @@ -130,7 +130,7 @@ is in no condition initially to greet you. She's naked except for one sock that gives you a very good view of her muscled, taut body while lunging with her feet on the table and the rest on her couch. She is face-down in a drugged-out stupor in the middle of a wide variety of powders and pills. Perhaps sensing your approach, her head suddenly shoots up and looks at you with unfocused, bloodshot eyes. "Sorry, <<= SFCR()>>," she slurs, wiping her face and weakly holding up a hand. "Hold on a second, I need something to help me out here. Long fucking night." She struggles to sit on the couch and bending over the table, loudly snorts up some of the white powder on it. "Ahhh, fuck," she says, breathing heavily.<br><br> She shakes her head powerfully now looking at you, her eyes once again alert and piercing. "That's better," she says, leaning back on the couch and giving you another good view of her assets. "So, <<= SFCR()>>," she begins, "what brings you down here to our little clubhouse? I trust you're happy with how we've been handling things out there?" You nod. "Excellent", she laughs. "I have to say; it's nice to have a place like this while having some top-end gear and to be able to have fun out there without worrying about anyone coming back on us. Good fucking times." She laughs again. "So — I'm assuming you want something?" <<elseif random(0,100) > 70 && $SF.Depravity >= 1.5 && $SF.Colonel.Core == "cruel">> is relaxing on her couch stark naked, greeting you with a raised hand. Between her tightly clenched legs is a slave girl being forced to eat her out. "Hey, <<= SFCR()>>, what's —" she breaks off as a flash of pain crosses her features. "Fucking bitch!" she exclaims, pulling her legs away and punching the slave girl in the face. She pushes the girl to the ground, straddling her then begins hitting. You hear one crunch after another as The Colonel's powerful blows shatter the girl's face. She hisses from between clenched teeth, each word accompanied by a brutal punch. "How. Many. Fucking. Times. Have. I. Told. You. To. Watch. Your. Fucking. Teeth. On. My. Fucking. Clit!" She leans back, exhaling heavily. Before leaning back down to grip apply pressure onto the girl's neck with her powerful hands. Wordlessly, she increases the pressure and soon the girl begins to turn blue as she struggles to draw breath. Eventually her struggles weaken and then finally, end.<br><br> The Colonel relaxes her grip then wipes her brow, clearing away the sweat from her exertion. Finally rising from the girl's body, relaxing back on the couch and putting her feet back up on the table. "Sorry about that <<= SFCR()>>," she says, shrugging. "So many of these bitches we pick up from the outside don't understand that they have to behave." Shaking her head in frustration, "Now I need to find another one. But that's not your problem — you're here to talk business. So, what's up?" - >>else>> + <<else>> is topless while reviewing the particulars of her unit on a tablet as you approach. She raises a hand in greeting. "Hey <<= SFCR()>>," she says, noticing you looking at her chest. She laughs. "Nice, aren't they? But they're not for you or them." She throws a thumb at the plaza around her. "You're down here for a reason, though. What can I do for you?" <</if>> </div> <<if _S.Firebase === 10>> diff --git a/src/SpecialForce/SpecialForce.js b/src/SpecialForce/SpecialForce.js index 843af18489ec6ff1c054d7a747d23cf6a9771f7a..095936555560ecb1a6d5974daadbbef08c695c52 100644 --- a/src/SpecialForce/SpecialForce.js +++ b/src/SpecialForce/SpecialForce.js @@ -1,25 +1,26 @@ +/* eslint-disable no-unused-vars */ /* eslint-disable no-undef */ -//V = SugarCube.State.variables, T = SugarCube.State.temporary; +//V=SugarCube.State.variables, T=SugarCube.State.temporary; window.Main = function() { - const V = State.variables; - V.SF = {Toggle:V.SF.Toggle,Active:-1,Depravity:0, Size:0, Upgrade:0, Gift:0, UC:{Assign:0, Lock:0, num:0}, ROE:"hold", Target:"recruit", Regs:"strict", Caps:"The Special Force", Lower:"the special force", Subsidy:1, BadOutcome:""}; - V.arcologies[0].SFRaid = 1; V.arcologies[0].SFRaidTarget = -1; + const V=State.variables; + V.SF={Toggle:V.SF.Toggle,Active:-1,Depravity:0, Size:0, Upgrade:0, Gift:0, UC:{Assign:0, Lock:0, num:0}, ROE:"hold", Target:"recruit", Regs:"strict", Caps:"The Special Force", Lower:"the special force", Subsidy:1, BadOutcome:""}; + V.arcologies[0].SFRaid=1; V.arcologies[0].SFRaidTarget=-1; }; window.Squad = function() { - const V = State.variables; - V.SF.Squad = {Troops:40, Armoury:0, Firebase:0, AV:0, TV:0, Drones:0, Drugs:0, PGT:0, AA:0, TA:0, SpacePlane:0, GunS:0, Satellite:{lv:0, InOrbit:0}, GiantRobot:0, MissileSilo:0, AircraftCarrier:0, Sub:0, HAT:0}; + const V=State.variables; + V.SF.Squad={Troops:40, Armoury:0, Firebase:0, AV:0, TV:0, Drones:0, Drugs:0, PGT:0, AA:0, TA:0, SpacePlane:0, GunS:0, Satellite:{lv:0, InOrbit:0}, GiantRobot:0, MissileSilo:0, AircraftCarrier:0, Sub:0, HAT:0}; }; window.Colonel = function() { - const V = State.variables; - V.SF.Colonel = {Core:"", Talk:0, Fun:0, Status:0}; + const V=State.variables; + V.SF.Colonel={Core:"", Talk:0, Fun:0, Status:0}; }; window.MercCon = function() { - const V = State.variables; - V.SF.MercCon = {History:0, CanAttend:-2, Income:0, Revenue:0, Menials:0, TotalMenials:0, Mercs:0, TotalMercs:0}; + const V=State.variables; + V.SF.MercCon={History:0, CanAttend:-2, Income:0, Revenue:0, Menials:0, TotalMenials:0, Mercs:0, TotalMercs:0}; }; window.Facility = function() { - const V = State.variables; - V.SF.Facility = {Toggle:0, Active:0, LC:0, Workers:0, Max:5, Caps:"Special force support facility", Lower:"special force support facility", Decoration:"standard", Speed:0, Upgrade:0, IDs:[]}; + const V=State.variables; + V.SF.Facility={Toggle:0, Active:0, LC:0, Workers:0, Max:5, Caps:"Special force support facility", Lower:"special force support facility", Decoration:"standard", Speed:0, Upgrade:0, IDs:[]}; }; window.SFInit = function() { @@ -33,7 +34,7 @@ window.SFBC = function() { } } - const V = State.variables; + const V=State.variables; function InitClean() { jsDel([V.SFMODToggle,V.securityForceActive,V.securityForceCreate,V.securityForceEventSeen]); } @@ -58,9 +59,9 @@ window.SFBC = function() { } if (V.SF === undefined) { - if (V.securityForceEventSeen < 1) { V.securityForceActive = -1; } else { V.securityForceActive = 2; } - V.SF = {Toggle:V.SFMODToggle, Active:V.securityForceActive}; InitClean(); - if (V.securityForceName === undefined) V.securityForceName = "the special force"; + if (V.securityForceEventSeen < 1) { V.securityForceActive=-1; } else { V.securityForceActive=2; } + V.SF={Toggle:V.SFMODToggle, Active:V.securityForceActive}; InitClean(); + if (V.securityForceName === undefined) V.securityForceName="the special force"; if (V.SF.Active >= 1) { Object.assign(V.SF, { Depravity:V.securityForceDepravity, @@ -74,12 +75,12 @@ window.SFBC = function() { Caps:"The Special Force", Lower:V.securityForceName, Subsidy:V.SubsidyActive}); MainClean(); - SFNameCapsCheck(); + SFNameCapsCheck(); - if (V.ColonelCore === undefined) V.ColonelCore = ""; + if (V.ColonelCore === undefined) V.ColonelCore=""; if (V.ColonelDiscussion === undefined) V.ColonelDiscussion = 0; if (V.ColonelSexed === undefined) V.ColonelSexed = 0; - V.SF.Colonel = { + V.SF.Colonel={ Core:V.ColonelCore, Talk:V.securityForceColonelToken, Fun:V.securityForceColonelSexed, @@ -89,7 +90,7 @@ window.SFBC = function() { if (V.TotalTradeShowIncome === undefined) V.TotalTradeShowIncome = 0; if (V.TradeShowHelots === undefined) V.TradeShowHelots = 0; if (V.TotalTradeShowHelots === undefined) V.TotalTradeShowHelots = 0; - V.SF.MercCon = { + V.SF.MercCon={ History:V.OverallTradeShowAttendance, CanAttend:V.CurrentTradeShowAttendance, Income:V.TradeShowIncome, @@ -109,7 +110,7 @@ window.SFBC = function() { if (V.securityForceAircraftCarrier === undefined) V.securityForceAircraftCarrier = 0; if (V.securityForceSubmarine === undefined) V.securityForceSubmarine = 0; if (V.securityForceHeavyAmphibiousTransport === undefined) V.securityForceHeavyAmphibiousTransport = 0; - V.SF.Squad = { + V.SF.Squad={ Troops:V.securityForcePersonnel, Armoury:V.securityForceInfantryPower, Firebase:V.securityForceArcologyUpgrades, @@ -132,52 +133,52 @@ window.SFBC = function() { SFInit(); } } else { - if (V.SF.MercCon.View) delete V.SF.MercCon.View; - if (V.SFUC > 0) V.SF.UC.num = V.SFUC; delete V.SFUC; + if (V.SF.MercCon && V.SF.MercCon.View) delete V.SF.MercCon.View; + if (V.SFUC > 0) V.SF.UC.num=V.SFUC; delete V.SFUC; if (V.SF.Active === -1) SFInit(); if (V.SF.MWU) delete V.SF.MWU; - if (V.SpecOpsLock !== undefined) V.SF.SpecOpsLock = V.SpecOpsLock; delete V.SpecOpsLock; + if (V.SpecOpsLock !== undefined) V.SF.SpecOpsLock=V.SpecOpsLock; delete V.SpecOpsLock; if (V.SF.UC === undefined) { if (V.SF.SpecOps !== undefined && V.SF.SpecOpsLock !== undefined) { - V.SF.UC = {Assign:V.SF.SpecOps, Lock:V.SF.SpecOpsLock}; + V.SF.UC={Assign:V.SF.SpecOps, Lock:V.SF.SpecOpsLock}; jsDel([V.SF.SpecOps,V.SF.SpecOpsLock]); } else if (V.SF.UC === {}) { - V.SF.UC = {Assign:0, Lock:0}; + V.SF.UC={Assign:0, Lock:0}; } } - if (V.SF.U !== undefined) V.SF.Upgrade = V.SF.U; delete V.SF.U; - if (V.SF.WG !== undefined) V.SF.Gift = V.SF.WG; delete V.SF.WG; + if (V.SF.U !== undefined) V.SF.Upgrade=V.SF.U; delete V.SF.U; + if (V.SF.WG !== undefined) V.SF.Gift=V.SF.WG; delete V.SF.WG; if (V.SF.MercCon === undefined) MercCon(); if (V.SF.MercCon.Helots !== undefined) { - V.SF.MercCon.Menials = V.SF.MercCon.Helots; + V.SF.MercCon.Menials=V.SF.MercCon.Helots; delete V.SF.MercCon.Helots; } else { V.SF.MercCon.Menials = 0; } if (V.SF.MercCon.TotalHelots !== undefined) { - V.SF.MercCon.TotalMenials = V.SF.MercCon.TotalHelots; + V.SF.MercCon.TotalMenials=V.SF.MercCon.TotalHelots; delete V.SF.MercCon.TotalHelots; } else { V.SF.MercCon.TotalMenials = 0; } if (V.SF.Bonus !== undefined) delete V.SF.Bonus; if (V.SF.Depravity < 0) V.SF.Depravity = 0; - if (V.SF.Size === undefined) V.SF.Size = V.SF.Units; delete V.SF.Units; + if (V.SF.Size === undefined) V.SF.Size=V.SF.Units; delete V.SF.Units; if (V.SFUnit !== undefined) { if (V.SFUnit.AT !== undefined) V.SFUnitTA = 0; - V.SF.Squad.Satellite = V.SF.Squad.Sat; + V.SF.Squad.Satellite=V.SF.Squad.Sat; jsDel([V.SF.Squad.Sat,V.SatLaunched,V.SFUnit.AT]); - V.SF.Squad.Satellite = V.SF.Squad.Sat; delete V.SF.Squad.Sat; - if (V.SFTradeShow !== undefined) V.SF.MercCon = V.SFTradeShow; delete V.SFTradeShow; - if (V.SFColonel !== undefined) V.SF.Colonel = V.SFColonel; delete V.SFColonel; - if (V.SF.BadOutcome === undefined) V.SF.BadOutcome = ""; + V.SF.Squad.Satellite=V.SF.Squad.Sat; delete V.SF.Squad.Sat; + if (V.SFTradeShow !== undefined) V.SF.MercCon=V.SFTradeShow; delete V.SFTradeShow; + if (V.SFColonel !== undefined) V.SF.Colonel=V.SFColonel; delete V.SFColonel; + if (V.SF.BadOutcome === undefined) V.SF.BadOutcome=""; if (V.SF.Squad.Satellite !== undefined && V.SatLaunched === undefined) { - V.SF.Squad.Sat = {lv:0, InOrbit:0}; - V.SF.Squad.Satellite = V.SF.Squad.Sat; + V.SF.Squad.Sat={lv:0, InOrbit:0}; + V.SF.Squad.Satellite=V.SF.Squad.Sat; jsDel([V.SF.Squad.Sat,V.SatLaunched,V.SFUnit]); } } if (V.SF.Squad !== undefined && V.SF.Squad.Satellite.lv === undefined) { - V.SF.Squad.Sat = {lv:V.SF.Squad.Satellite, InOrbit:0}; - V.SF.Squad.Satellite = V.SF.Squad.Sat; delete V.SF.Squad.Sat; + V.SF.Squad.Sat={lv:V.SF.Squad.Satellite, InOrbit:0}; + V.SF.Squad.Satellite=V.SF.Squad.Sat; delete V.SF.Squad.Sat; } } if (V.securityForceName !== undefined) InitClean(); MainClean(); ColonelClean(); TradeShowClean(); UnitsClean(); @@ -185,14 +186,14 @@ window.SFBC = function() { }; window.SFReport = function() { - "use strict"; const V = State.variables,T = State.temporary,S = V.SF.Squad; - let target = 50000,baseLine = 5000,profit = 0,upkeep = 0,income = 0; - let Multiplier = {action:1,troop:1,unit:1,depravity:1},SFD = V.SF.Depravity; - let FNG = 10,unitCap = 2500,Trade = 0.025,deaths = 0,r = ``; Count(); - let cost = {a:0.01,b:2.5};let NO = 1+(V.SF.Size/5);let N1 = 1+(V.SF.Size/5); - V.SF.UC.num = 0; if (profit < 1) cost.a = 10; cost.b = 0.1;NO = 1;N1 = 0.1; + "use strict"; const V=State.variables,T=State.temporary,S=V.SF.Squad; + let target=50000,baseLine=5000,profit = 0,upkeep = 0,income = 0; + let Multiplier={action:1,troop:1,unit:1,depravity:1},SFD=V.SF.Depravity; + let FNG=10,unitCap=2500,Trade = 0.025,deaths = 0,r=``; Count(); + let cost={a:0.01,b:2.5};let NO=1+(V.SF.Size/5);let N1=1+(V.SF.Size/5); + V.SF.UC.num = 0; if (profit < 1) cost.a=10; cost.b = 0.1;NO=1;N1 = 0.1; - if (S.Troops > unitCap) S.Troops = unitCap; + if (S.Troops > unitCap) S.Troops=unitCap; if (S.Troops < 100) { S.Troops += Math.ceil(jsRandom(2,5)); } else { if (V.SF.Target === "recruit") { @@ -202,13 +203,13 @@ window.SFReport = function() { } else { S.Troops -= Math.ceil(jsRandom(1.10*S.Troops/1000,-1.15*S.Troops/1000)); } } if (V.SF.UC.Assign > 0) { - if (V.SF.UC.Assign < 2) { V.SF.UC.num = Math.ceil(S.Troops*0.01); - } else { V.SF.UC.num = Math.ceil(S.Troops*0.05); } + if (V.SF.UC.Assign < 2) { V.SF.UC.num=Math.ceil(S.Troops*0.01); + } else { V.SF.UC.num=Math.ceil(S.Troops*0.05); } } S.Troops -= V.SF.UC.num; if (S.Troops > 200) { Trade += 0.05*(Math.ceil(S.Troops/100)); Multiplier.troop += S.Troops/200; upkeep += (S.Troops*25)/cost.a; if (V.secExp > 0) { - V.authority += 25*(Math.ceil(S.Troops/200)); V.authority = Math.clamp(V.authority, 0, 20000); + V.authority += 25*(Math.ceil(S.Troops/200)); V.authority=Math.clamp(V.authority, 0, 20000); } } @@ -262,7 +263,7 @@ window.SFReport = function() { } if (S.AircraftCarrier > 0) { - FNG += S.AircraftCarrier; Trade += 0.25*S.AircraftCarrier; Multiplier.unit += 9*S.AircraftCarrier +3*Math.pow(S.AircraftCarrier,2)*cost.a; upkeep += (80*S.AircraftCarrier)*cost.b; + FNG += S.AircraftCarrier; Trade += 0.25*S.AircraftCarrier; Multiplier.unit += 9*S.AircraftCarrier+3*Math.pow(S.AircraftCarrier,2)*cost.a; upkeep += (80*S.AircraftCarrier)*cost.b; } if (S.Sub > 0) { FNG += S.Sub; Trade += 0.25*S.Sub; Multiplier.unit += 7.5*S.Sub+2*Math.pow(S.Sub,2)*cost.a; upkeep += (90*S.Sub)*cost.b; @@ -282,30 +283,30 @@ window.SFReport = function() { } else if (V.SF.Target === "secure") { SFD -= 0.05; Multiplier.action += 0.2; } else { SFD -= 0.1; Multiplier.action -= 0.5; } if (V.SF.ROE === "free") { Multiplier.action *= 0.8; SFD += 0.05; Trade += Trade*0.95; - } else if (V.SF.ROE === "hold") { Multiplier.action *= 1.1; SFD -= 0.05; Trade += Trade*1.05; } + } else if (V.SF.ROE == "hold") { Multiplier.action *= 1.1; SFD -= 0.05; Trade += Trade*1.05; } if (V.SF.Regs === "none") { Multiplier.action *= 0.8; SFD += 0.05; Trade += Trade*0.95; } else if (V.SF.Regs === "strict") { Multiplier.action *= 1.1; SFD -= 0.05; Trade += Trade*1.05; - Multiplier.depravity = 1+SFD; } + Multiplier.depravity=1+SFD; } if (SFD > -2) Trade *= 1+SFD/2; if (V.SF.Target === "recruit") { FNG += Math.ceil(FNG*0.95); } else { FNG += Math.ceil(FNG*0.25); } if (V.SF.Target === "secure") { repX((Math.ceil(V.rep*((Trade/100)*0.95))), "specialForces"); - V.arcologies[0].prosperity = Math.ceil((V.arcologies[0].prosperity+(Trade/10)*0.95)); + V.arcologies[0].prosperity=Math.ceil((V.arcologies[0].prosperity+(Trade/10)*0.95)); } else { repX((Math.ceil(V.rep*(Trade/100)*0.25)), "specialForces"); - V.arcologies[0].prosperity = Math.ceil(V.arcologies[0].prosperity+(Trade/10)*0.25);} - if (V.secExp > 0) V.authority += V.SF.Size*10; V.authority = Math.clamp(V.authority, 0, 20000); + V.arcologies[0].prosperity=Math.ceil(V.arcologies[0].prosperity+(Trade/10)*0.25);} + if (V.secExp > 0) V.authority += V.SF.Size*10; V.authority=Math.clamp(V.authority, 0, 20000); income += Math.ceil( ( (baseLine* (0.09+Multiplier.troop/NO).toFixed(2) * (0.09+Multiplier.unit/NO).toFixed(2) * (0.09+Multiplier.action/NO).toFixed(2) * (0.09+Multiplier.depravity/NO).toFixed(2) ) - (upkeep*N1).toFixed(2) )/((V.SF.Size/2+S.Troops/2)*5) ); S.Troops += Math.round(FNG/2); - if (V.debugMode > 0) r += `<br>income:${num(income)}, troop:${num((0.09+Multiplier.troop/NO).toFixed(2))}, unit:${num((0.09+Multiplier.unit/NO).toFixed(2))}, action:${num((0.09+Multiplier.action/NO).toFixed(2))}, depravity:${num((0.09+Multiplier.depravity/NO).toFixed(2))}, upkeep:${num((upkeep*N1).toFixed(2))}`; + if (V.debugMode > 0) r += `<br>income:${commaNum(income)}, troop:${commaNum((0.09+Multiplier.troop/NO).toFixed(2))}, unit:${commaNum((0.09+Multiplier.unit/NO).toFixed(2))}, action:${commaNum((0.09+Multiplier.action/NO).toFixed(2))}, depravity:${commaNum((0.09+Multiplier.depravity/NO).toFixed(2))}, upkeep:${commaNum((upkeep*N1).toFixed(2))}`; if (V.economy < 100) income *= 83; //Remove line if hard mode ever gets fixed. - if (income >= target) profit = 1; delete V.SF.Subsidy; cashX(income, "specialForces"); - if (S.Troops > unitCap) S.Troops = unitCap; - if (V.arcologies[0].prosperity > V.ProsperityCap) V.arcologies[0].prosperity = V.ProsperityCap; + if (income >= target) profit=1; delete V.SF.Subsidy; cashX(income, "specialForces"); + if (S.Troops > unitCap) S.Troops=unitCap; + if (V.arcologies[0].prosperity > V.ProsperityCap) V.arcologies[0].prosperity=V.ProsperityCap; - if (S.Drugs >= 8 || S.Drugs >= 10) { let survivalChance = 50; + if (S.Drugs >= 8 || S.Drugs >= 10) { let survivalChance=50; if (S.Drugs >= 8) {survivalChance -= 5;} else if (S.Drugs >= 10) {survivalChance += 5;} - if (jsRandom(0,100) > survivalChance) deaths = jsRandom(0,((S.Drugs*2)+4)); + if (jsRandom(0,100) > survivalChance) deaths=jsRandom(0,((S.Drugs*2)+4)); if (deaths > 0) S.Troops -= deaths; } if (V.SF.UC.Assign === 1 && V.SF.UC.Lock < 1) V.SF.UC.Assign = 0; @@ -313,7 +314,7 @@ window.SFReport = function() { V.SF.Colonel.Talk = 0; V.SF.Colonel.Fun = 0; r += `<br>__Week ${V.week} operational report for ${V.SF.Lower}__:`; - r += `<br>${V.SF.Caps} focused their ${num(S.Troops)} troops on `; + r += `<br>${V.SF.Caps} focused their ${commaNum(S.Troops)} troops on `; if (V.SF.Target === "recruit") { r += `recruiting and training more personnel. Smaller parties ventured out to protect the arcology's trade routes and strike targets of opportunity.`; } else if (V.SF.Target === "secure") { @@ -325,40 +326,40 @@ window.SFReport = function() { r += `<br>A ${V.SF.UC.Assign < 2 ? 'small':'large'} portion of the force was assigned as ${V.SF.UC.Assign < 2 ? 'part':'full'} time undercover officers.`; } if (deaths > 0) { - r += `<span class = 'red'>${deaths} soldiers fatally overdosed on the drug cocktail</span>`; + r += ` <span class='red'>${deaths} soldiers fatally overdosed on the drug cocktail</span>`; if (V.SF.MercCon.CanAttend === -1) r += `, The Colonel's much heavier than average drug use saves her from this side effect.`; } - r += `<br>These activities have, overall, <span class = 'green'>improved your arcology's prosperity</span>.`; - r += `The goods procured by ${V.SF.Lower} after accounting for the spoils retained by individual soldiers were `; + r += `<br>These activities have, overall, <span class='green'>improved your arcology's prosperity</span>.`; + r+= ` The goods procured by ${V.SF.Lower} after accounting for the spoils retained by individual soldiers were `; if (profit > 0) { - r += `<span class = 'green'>more than sufficient to cover expenses</span>. Excess material and human assets totaling <span class = 'yellowgreen'>${cashFormat(income)}</span> (after liquidation) were transferred to your accounts.`; - if (V.economy < 100) r += `The rapidly degrading global economy has one upside,<span class = 'green'> ${V.SF.Caps} was able to more easily use more 'persuasive' techniques thus leading to an increase in profit</span>.`; + r += `<span class='green'>more than sufficient to cover expenses</span>. Excess material and human assets totaling <span class='yellowgreen'>${cashFormat(income)}</span> (after liquidation) were transferred to your accounts.`; + if (V.economy < 100) r += ` The rapidly degrading global economy has one upside,<span class='green'> ${V.SF.Caps} was able to more easily use more 'persuasive' techniques thus leading to an increase in profit</span>.`; } else { - r += `<span class = 'red'>barely enough to cover expenses.</span> More growth will be needed to ensure profitability, <span class = 'yellow'>hopefully purchasing more upgrades will help</span>.`; - r += `Per the estimates that ${SFC()} provides, an additional <span class = 'yellowgreen'>${cashFormat(target-income)}</span> is required for sufficient cover.`; + r += `<span class='red'>barely enough to cover expenses.</span> More growth will be needed to ensure profitability, <span class='yellow'>hopefully purchasing more upgrades will help</span>.`; + r += ` Per the estimates that ${SFC()} provides, an additional <span class='yellowgreen'>${cashFormat(target-income)}</span> is required for sufficient cover.`; } - r += `${V.SF.Caps} managed to recruit ${Math.round(FNG/2)} new soldiers this week, and your reputation has <span class = 'green'>increased through the improvement of trade security</span>.`; + r += ` ${V.SF.Caps} managed to recruit ${Math.round(FNG/2)} new soldiers this week, and your reputation has <span class='green'>increased through the improvement of trade security</span>.`; r += `<br>//Your instructions to ${SFC()}://`; r += `<br> Deployment focus: `; - r += `<span id = "focus"> <<if $SF.Target === "recruit">>''Recruiting and Training''<<elseif $SF.Target === "secure">>''Securing Trade Routes''<<else>>''Raiding and Slaving''<</if>></span>. `; - r += `<<link "Recruit and Train">> <<set $SF.Target = "recruit">> <<replace "#focus">>''Recruiting and Training''<</replace>> <</link>> | <<link "Secure Trade Routes">> <<set $SF.Target = "secure">> <<replace "#focus">>''Securing Trade Routes''<</replace>> <</link>> | <<link "Raiding and Slaving">> <<set $SF.Target = "raiding">> <<replace "#focus">>''Raiding and Slaving''<</replace>> <</link>>`; + r += `<span id="focus"> <<if $SF.Target == "recruit">>''Recruiting and Training''<<elseif $SF.Target == "secure">>''Securing Trade Routes''<<else>>''Raiding and Slaving''<</if>></span>. `; + r += `<<link "Recruit and Train">> <<set $SF.Target="recruit">> <<replace "#focus">>''Recruiting and Training''<</replace>> <</link>> | <<link "Secure Trade Routes">> <<set $SF.Target="secure">> <<replace "#focus">>''Securing Trade Routes''<</replace>> <</link>> | <<link "Raiding and Slaving">> <<set $SF.Target="raiding">> <<replace "#focus">>''Raiding and Slaving''<</replace>> <</link>>`; r += `<br> Rules of Engagement: `; - r += `<span id = "roe"> <<if $SF.ROE === "hold">>''Hold Fire''<<elseif $SF.ROE === "limited">>''Limited Fire''<<else>>''Free Fire''<</if>></span>. `; - r += `<<link "Hold Fire">> <<set $SF.ROE = "hold">> <<replace "#roe">>''Hold Fire''<</replace>> <</link>> | <<link "Limited Fire">> <<set $SF.ROE = "limited">> <<replace "#roe">>''Limited Fire''<</replace>> <</link>> | <<link "Free Fire">> <<set $SF.ROE = "free">> <<replace "#roe">>''Free Fire''<</replace>> <</link>>`; + r += `<span id="roe"> <<if $SF.ROE === "hold">>''Hold Fire''<<elseif $SF.ROE === "limited">>''Limited Fire''<<else>>''Free Fire''<</if>></span>. `; + r += `<<link "Hold Fire">> <<set $SF.ROE="hold">> <<replace "#roe">>''Hold Fire''<</replace>> <</link>> | <<link "Limited Fire">> <<set $SF.ROE="limited">> <<replace "#roe">>''Limited Fire''<</replace>> <</link>> | <<link "Free Fire">> <<set $SF.ROE="free">> <<replace "#roe">>''Free Fire''<</replace>> <</link>>`; r += `<br> Accountability: `; - r += `<span id = "accountability"> <<if $SF.Regs === "strict">>''Strict Accountability''<<elseif $SF.Regs === "some">>''Some Accountability''<<else>>''No Accountability''<</if>></span>. `; - r += `<<link "Strict Accountability">> <<set $SF.Regs = "strict">> <<replace "#accountability">>''Strict Accountability''<</replace>> <</link>> | <<link "Some Accountability">> <<set $SF.Regs = "some">> <<replace "#accountability">>''Some Accountability''<</replace>> <</link>> | <<link "No Accountability">> <<set $SF.Regs = "none">> <<replace "#accountability">>''No Accountability''<</replace>> <</link>>`; + r += `<span id="accountability"> <<if $SF.Regs === "strict">>''Strict Accountability''<<elseif $SF.Regs === "some">>''Some Accountability''<<else>>''No Accountability''<</if>></span>. `; + r += `<<link "Strict Accountability">> <<set $SF.Regs="strict">> <<replace "#accountability">>''Strict Accountability''<</replace>> <</link>> | <<link "Some Accountability">> <<set $SF.Regs="some">> <<replace "#accountability">>''Some Accountability''<</replace>> <</link>> | <<link "No Accountability">> <<set $SF.Regs="none">> <<replace "#accountability">>''No Accountability''<</replace>> <</link>>`; if (V.SF.MercCon.CanAttend === 1) { V.SF.MercCon.Income = 0; V.SF.MercCon.Menials = 0; - let tradeShowAttendes = 200, menialGiftsPerAttendee = 5, NewMercs = 0; - let menialGifts = Math.ceil(jsRandom(1,((tradeShowAttendes*menialGiftsPerAttendee)/10))); - let TSProfit = Math.ceil(500000*(1+(V.SF.Size/1000))*(1+(V.arcologies[0].prosperity/1000))*T.Env); + let tradeShowAttendes=200, menialGiftsPerAttendee=5, NewMercs = 0; + let menialGifts=Math.ceil(jsRandom(1,((tradeShowAttendes*menialGiftsPerAttendee)/10))); + let TSProfit=Math.ceil(500000*(1+(V.SF.Size/1000))*(1+(V.arcologies[0].prosperity/1000))*T.Env); V.menials += menialGifts; V.SF.MercCon.History += 1; V.SF.MercCon.Menials += menialGifts; V.SF.MercCon.TotalMenials += menialGifts; V.SF.MercCon.Income += TSProfit; V.SF.MercCon.Revenue += TSProfit; cashX(TSProfit, "specialForces"); if (V.secExp > 0 && V.mercenaries > 0) { V.SF.MercCon.Mercs = 0; - NewMercs = jsRandom(1,(tradeShowAttendes/10)); + NewMercs=jsRandom(1,(tradeShowAttendes/10)); V.mercFreeManpower += NewMercs; V.SF.MercCon.TotalMercs += NewMercs; V.SF.MercCon.Mercs += NewMercs; } @@ -368,37 +369,37 @@ window.SFReport = function() { }; window.Count = function() { - const V = State.variables, T = State.temporary, C = Math.clamp, S = V.SF.Squad, E = V.economy; - T.FU = 10; S.Firebase = C(S.Firebase, 0, T.FU); - T.AU = 10; S.Armoury = C(S.Armoury, 0, T.AU); - T.DrugsU = 10; S.Drugs = C(S.Drugs, 0, T.DrugsU); - T.DU = 10; S.Drones = C(S.Drones, 0, T.DU); - T.AVU = 10; S.AV = C(S.AV, 0, T.AVU); - T.TVU = 10; S.TV = C(S.TV, 0, T.TVU); - T.AAU = 10; S.AA = C(S.AA, 0, T.AAU); - T.TAU = 10; S.TA = C(S.TA, 0, T.TAU); - if (V.PC.warfare >= 75) {T.PGTU = 10; T.SPU = 10; T.GunSU = 10; T.SatU = 10; T.GRU = 10; T.MSU = 10; T.ACU = 10; T.SubU = 10; T.HATU = 10;} - else if (V.PC.warfare >= 50) {T.PGTU = 9; T.SPU = 9; T.GunSU = 9; T.SatU = 9; T.GRU = 9; T.MSU = 9; T.ACU = 9; T.SubU = 9; T.HATU = 9;} - else {T.PGTU = 8; T.SPU = 8; T.GunSU = 8; T.SatU = 8; T.GRU = 8; T.MSU = 8; T.ACU = 8; T.SubU = 8; T.HATU = 8;} - S.PGT = C(S.PGT, 0, T.PGTU); - S.SpacePlane = C(S.SpacePlane, 0, T.SPU); S.GunS = C(S.GunS, 0, T.GunSU); - S.Satellite.lv = C(S.Satellite.lv, 0, T.SatU); S.GiantRobot = C(S.GiantRobot, 0, T.GRU); S.MissileSilo = C(S.MissileSilo, 0, T.MSU); - S.AircraftCarrier = C(S.AircraftCarrier, 0, T.ACU); S.Sub = C(S.Sub, 0, T.SubU); S.HAT = C(S.HAT, 0, T.HATU); - T.GU = T.AVU+T.TVU+T.PGTU; T.G = S.AV+S.TV+S.PGT; - T.H = S.AA+S.TA+S.SpacePlane+S.GunS; T.HU = T.AAU+T.TAU+T.SPU+T.GunSU; - T.LBU = T.SatU+T.MSU; T.LB = S.Satellite.lv+S.MissileSilo; - T.Base = S.Firebase+S.Armoury+S.Drugs+S.Drones+T.H; - T.max = T.FU+T.AU+T.DrugsU+T.DU+T.HU; + const V=State.variables, T=State.temporary, C=Math.clamp, S=V.SF.Squad, E=V.economy; + T.FU=10; S.Firebase=C(S.Firebase, 0, T.FU); + T.AU=10; S.Armoury=C(S.Armoury, 0, T.AU); + T.DrugsU=10; S.Drugs=C(S.Drugs, 0, T.DrugsU); + T.DU=10; S.Drones=C(S.Drones, 0, T.DU); + T.AVU=10; S.AV=C(S.AV, 0, T.AVU); + T.TVU=10; S.TV=C(S.TV, 0, T.TVU); + T.AAU=10; S.AA=C(S.AA, 0, T.AAU); + T.TAU=10; S.TA=C(S.TA, 0, T.TAU); + if (V.PC.warfare >= 75) {T.PGTU=10; T.SPU=10; T.GunSU=10; T.SatU=10; T.GRU=10; T.MSU=10; T.ACU=10; T.SubU=10; T.HATU=10;} + else if (V.PC.warfare >= 50) {T.PGTU=9; T.SPU=9; T.GunSU=9; T.SatU=9; T.GRU=9; T.MSU=9; T.ACU=9; T.SubU=9; T.HATU=9;} + else {T.PGTU=8; T.SPU=8; T.GunSU=8; T.SatU=8; T.GRU=8; T.MSU=8; T.ACU=8; T.SubU=8; T.HATU=8;} + S.PGT=C(S.PGT, 0, T.PGTU); + S.SpacePlane=C(S.SpacePlane, 0, T.SPU); S.GunS=C(S.GunS, 0, T.GunSU); + S.Satellite.lv=C(S.Satellite.lv, 0, T.SatU); S.GiantRobot=C(S.GiantRobot, 0, T.GRU); S.MissileSilo=C(S.MissileSilo, 0, T.MSU); + S.AircraftCarrier=C(S.AircraftCarrier, 0, T.ACU); S.Sub=C(S.Sub, 0, T.SubU); S.HAT=C(S.HAT, 0, T.HATU); + T.GU=T.AVU+T.TVU+T.PGTU; T.G=S.AV+S.TV+S.PGT; + T.H=S.AA+S.TA+S.SpacePlane+S.GunS; T.HU=T.AAU+T.TAU+T.SPU+T.GunSU; + T.LBU=T.SatU+T.MSU; T.LB=S.Satellite.lv+S.MissileSilo; + T.Base=S.Firebase+S.Armoury+S.Drugs+S.Drones+T.H; + T.max=T.FU+T.AU+T.DrugsU+T.DU+T.HU; //if (V.SF.Facility.Toggle > 0) T.Base += 1; T.max += 1; if (V.terrain !== "oceanic" || V.terrain === "marine") { T.LBU += T.GRU; T.LB += S.GiantRobot; T.Base += T.G; T.max += T.GU; T.max += T.LBU; T.Base += T.LB; } else { - T.NY = S.AircraftCarrier + S.Sub + S.HAT; T.Base += T.NY; - T.NYU = T.ACU + T.SubU + T.HATU; T.max += T.NYU; - } V.SF.Size = T.Base; V.SF.Size = C(V.SF.Size, 1, T.max); T.T1 = 0; - if (E > 100) {T.Env = 4;} else if (E > 67) {T.Env = 3;} else {T.Env = 2;} - if (V.SF.Size >= 30) T.T1 = 1; T.SFSubsidy = 5000*(1+((V.SF.Squad.Troops/100)+(V.SF.Size/100))); + T.NY=S.AircraftCarrier + S.Sub + S.HAT; T.Base += T.NY; + T.NYU=T.ACU + T.SubU + T.HATU; T.max += T.NYU; + } V.SF.Size=T.Base; V.SF.Size=C(V.SF.Size, 1, T.max); T.T1 = 0; + if (E > 100) {T.Env=4;} else if (E > 67) {T.Env=3;} else {T.Env=2;} + if (V.SF.Size >= 30) T.T1=1; T.SFSubsidy=5000*(1+((V.SF.Squad.Troops/100)+(V.SF.Size/100))); SFNameCapsCheck(); if (V.SF.IntroProgress > -1) delete V.SF.IntroProgress; if (V.SF.MercCon === undefined) MercCon(); @@ -407,13 +408,13 @@ window.Count = function() { }; window.SFNameCapsCheck = function() { - const V = State.variables; - if (V.SF.Lower !== "the special force") V.SF.Caps = V.SF.Lower.replace("the ", "The "); + const V=State.variables; + if (V.SF.Lower !== "the special force") V.SF.Caps=V.SF.Lower.replace("the ", "The "); }; window.SFUpgradeCost = function(cost,unit) { - "use strict"; const V = State.variables,T = State.temporary,S = V.SF.Squad; let value = 0; - value = cost*T.Env*(1.15+(V.SF.Size/10))*(1.15+(unit/100)); + "use strict"; const V=State.variables,T=State.temporary,S=V.SF.Squad; let value = 0; + value=cost*T.Env*(1.15+(V.SF.Size/10))*(1.15+(unit/100)); if ([S.Sub,S.AircraftCarrier,S.MissileSilo,S.GiantRobot,S.Satellite.lv,S.GunS,S.SpacePlane,S.Drones].includes(unit)) value *= V.HackingSkillMultiplier; return Math.ceil(value); }; @@ -425,23 +426,23 @@ window.progress = function(x,max) { if (State.variables.SF.Size < 30) { z = 5 - x; for (i = 0;i<x;i++) out += `â–ˆâ`; - for (i = 0;i<z;i++) out += `<span style = "opacity: 0;">â–ˆ</span>â`; + for (i = 0;i<z;i++) out += `<span style=\"opacity: 0;\">â–ˆ</span>â`; for (i = 0;i<5;i++) out += `â–‘â`;} else { z = 10 - x; for (i = 0;i<x;i++) out += `â–ˆâ`; - for (i = 0;i<z;i++) out += `<span style = "opacity: 0;">â–ˆ</span>â`;}} + for (i = 0;i<z;i++) out += `<span style=\"opacity: 0;\">â–ˆ</span>â`;}} else { Math.clamp(x,0,max); - x = Math.floor(10*x/max); - z = 10 - x; + x=Math.floor(10*x/max); + z=10 - x; for (i = 0;i<x;i++) out += `â–ˆâ`; - for (i = 0;i<z;i++) out += `<span style = "opacity: 0;">â–ˆ</span>â`;} + for (i = 0;i<z;i++) out += `<span style=\"opacity: 0;\">â–ˆ</span>â`;} return `${out}`; }; window.SFC = function() { - const V = State.variables; + const V=State.variables; if (V.SF.MercCon.CanAttend === -1) {return `The Colonel`;} else { //if (V.SF.Facility.LCActive > 0) {return `Lieutenant Colonel ${SlaveFullName(V.SF.Facility.LC)}`;} @@ -449,61 +450,58 @@ window.SFC = function() { }; window.SFCR = function() { - const V = State.variables, C = V.SF.Colonel; + const V=State.variables, C=V.SF.Colonel; if (C.Status <= 19) {return `boss`;} else if (C.Status <= 39) {return `friend`;} else {return `fuckbuddy`;} }; window.Interactions = function() { - "use strict"; let choice = ``, time = ``; - const V = State.variables, C = V.SF.Colonel; + "use strict"; let choice=``, time=``; + const V=State.variables, C=V.SF.Colonel; if (V.SF.Gift > 0) { - if (V.choice === 1) { - choice += `${V.SF.Caps} is turning over spare capital in tribute this week. `; + if (V.choice == 1) { + choice +=`${V.SF.Caps} is turning over spare capital in tribute this week. `; if (V.SF.MercCon.CanAttend === -1 && (C.Talk + C.Fun !== 1)) { - choice += `"I think I can find <span class = 'yellowgreen'>${cashFormat(Math.ceil(V.CashGift))}</span> for you, boss."`; + choice += `"I think I can find <span class='yellowgreen'>${cashFormat(Math.ceil(V.CashGift))}</span> for you, boss."`; } else { - choice += `"We can spare <span class = 'yellowgreen'>${cashFormat(Math.ceil(V.CashGift))}</span> in tribute this week, boss".`; } - } else if (V.choice === 2) { + choice += `"We can spare <span class='yellowgreen'>${cashFormat(Math.ceil(V.CashGift))}</span> in tribute this week, boss".`; } + } else if (V.choice == 2) { choice += `${V.SF.Caps} will be throwing a military parade this week. `; if (V.SF.MercCon.CanAttend === -1 && (C.Talk + C.Fun !== 1)) { - choice += `"I expect the <span class = 'green'>public to enjoy</span> the parade, boss."`; + choice += `"I expect the <span class='green'>public to enjoy</span> the parade, boss."`; } else { - choice += `"I'll have plans for an <span class = 'green'>popular parade</span> on your desk, boss".`; } - } else if (V.choice === 3) { + choice += `"I'll have plans for an <span class='green'>popular parade</span> on your desk, boss".`; } + } else if (V.choice == 3) { choice += `${V.SF.Caps} will be conducting corporate sabotage on rival arcologies' businesses. `; if (V.SF.MercCon.CanAttend === -1 && (C.Talk + C.Fun !== 1)) { - choice += `"Our interests should see a <span class = 'yellowgreen'>big boost,</span> boss."`; + choice += `"Our interests should see a <span class='yellowgreen'>big boost,</span> boss."`; } else { - choice += `"Your <span class = 'yellowgreen'>arcology's business prospects should see an improvement</span> this week, boss".`; } + choice += `"Your <span class='yellowgreen'>arcology's business prospects should see an improvement</span> this week, boss".`; } } - } if (C.Talk + C.Fun > 0) time = `<br>The Colonel is busy for the rest of the week, so the Lieutenant Colonel will assist you.`; + } if (C.Talk + C.Fun > 0) time=`<br>The Colonel is busy for the rest of the week, so the Lieutenant Colonel will assist you.`; return `${time} <br>${choice}`; }; window.BadOutcome = function() { - "use strict"; - const V = State.variables; - let r = ``; /** FIXME: r' is declared but its value is never read.ts(6133) */ - V.SF.Active = -2; + "use strict"; const V=State.variables; let r =``;V.SF.Active=-2; switch(V.SF.Colonel.Core) { case "Shell-Shocked": - V.SF.BadOutcome = "lockdown"; V.trinkets.push("${t} explosives detonator"); - r += `Unnerved by your ever-increasing influence over your men and undercutting of her authority, The Colonel uses heavy explosives at Midnight to seal off The Firebase from your access. When you step off of your express elevator, you are met not with two guards, but several armed proximity mines next to an incredibly thick wall of smoking rubble. No doubt there are machine gun nests, anti-tank nests, and lots more proximity mines just waiting for you on the other side, should you somehow get through the wall of debris.`; - r += `<br>The ${V.SF.Lower} still deploys into the old world to plunder as it pleases, but no longer for you. You receive no money from their exploits, and their total defiance and independence of you is a permanent stain on your reputation. Of course, you'll never have the needed military power to dislodge them, especially with all the redundant fortifications, crossfire envelopes, and myriad traps that paranoid bitch had built around each entrance ever since she went rouge. Trying to sabotage certain support beams from above to make the Firebase facility collapse in on itself could easily cause enough damage to topple other parts of the arcology too, and such a thing would be very difficult to cover up. In other words, you're stuck with them. The Firebase has become a permanent tumor on your Arcology and good name.`; + V.SF.BadOutcome="lockdown"; V.trinkets.push("${t} explosives detonator"); + r +=`Unnerved by your ever-increasing influence over your men and undercutting of her authority, The Colonel uses heavy explosives at Midnight to seal off The Firebase from your access. When you step off of your express elevator, you are met not with two guards, but several armed proximity mines next to an incredibly thick wall of smoking rubble. No doubt there are machine gun nests, anti-tank nests, and lots more proximity mines just waiting for you on the other side, should you somehow get through the wall of debris.`; + r+=`<br>The ${V.SF.Lower} still deploys into the old world to plunder as it pleases, but no longer for you. You receive no money from their exploits, and their total defiance and independence of you is a permanent stain on your reputation. Of course, you'll never have the needed military power to dislodge them, especially with all the redundant fortifications, crossfire envelopes, and myriad traps that paranoid bitch had built around each entrance ever since she went rouge. Trying to sabotage certain support beams from above to make the Firebase facility collapse in on itself could easily cause enough damage to topple other parts of the arcology too, and such a thing would be very difficult to cover up. In other words, you're stuck with them. The Firebase has become a permanent tumor on your Arcology and good name.`; break; case "Cruel": - V.SF.BadOutcome = "Revolt"; V.trinkets.push("${t} dog tags"); repX((0 - V.rep), "specialForces"); - V.arcologies[0].prosperity -= 50; V.ASlaves = 49; cashX(-10000, "specialForces"); - V.ACitizens = 751; V.menials = 0; V.researchLab.menials = 0; + V.SF.BadOutcome="Revolt"; V.trinkets.push("${t} dog tags"); repX((0 - V.rep), "specialForces"); + V.arcologies[0].prosperity -= 50; V.ASlaves=49; cashX(-10000, "specialForces"); + V.ACitizens=751; V.menials = 0; V.researchLab.menials = 0; V.researchLab.hired = 0; V.fuckdolls = 0; V.menialBioreactors = 0; V.activeUnits = 0; V.secBots.troops = 0; V.createdSlavesUnits = 0; V.createdMilitiaUnits = 0; V.createdMercUnits = 0; - r += `<br>The ${V.SF.Lower} still deploys into the old world to plunder as it pleases, but no longer for you. You receive no money from their exploits, and their total defiance and independence of you is a permanent stain on your reputation. Of course, you'll never have the needed military power to dislodge them, especially with all the redundant fortifications, crossfire envelopes, and myriad traps that paranoid bitch had built around each entrance ever since she went rouge. Trying to sabotage certain support beams from above to make the Firebase facility collapse in on itself could easily cause enough damage to topple other parts of the arcology too, and such a thing would be very difficult to cover up. In other words, you're stuck with them. The Firebase has become a permanent tumor on your Arcology and good name.`; + r+=`<br>The ${V.SF.Lower} still deploys into the old world to plunder as it pleases, but no longer for you. You receive no money from their exploits, and their total defiance and independence of you is a permanent stain on your reputation. Of course, you'll never have the needed military power to dislodge them, especially with all the redundant fortifications, crossfire envelopes, and myriad traps that paranoid bitch had built around each entrance ever since she went rouge. Trying to sabotage certain support beams from above to make the Firebase facility collapse in on itself could easily cause enough damage to topple other parts of the arcology too, and such a thing would be very difficult to cover up. In other words, you're stuck with them. The Firebase has become a permanent tumor on your Arcology and good name.`; break; case "Cruel and Psychopathic": - V.SF.BadOutcome = "Revolt"; V.trinkets.push("${t} dog tags"); repX((0 - V.rep), "specialForces"); + V.SF.BadOutcome="Revolt"; V.trinkets.push("${t} dog tags"); repX((0 - V.rep), "specialForces"); r += `<br>Finally fed up with your constant intrusions into her territory and crew, The Colonel riles up her people for an utterly ferocious rebellion. The promises of rape and plunder and dominion over some of the wealthiest tenants in the entire Free City (and their world-class slaves) are all that's needed to give the selfish lot of them a nearly unshakable resolve in the task of delivering their overlord Her most coveted prize: You.`; r += `<br>It is now midnight. The lights are the first thing they disable, as they still have the excellent night vision equipment you purchased for them. Some of your citizens start panicking almost immediately at the sudden blackout; this is very reminiscent of the Daughters of Liberty attack that still haunts many of their memories. Things like this were never supposed to happen again. You had promised them that you'd create an army that would protect them...`; r += `<br>Her army vanguard strikes fast and hard throughout the main Plaza, cutting through your security personnel, defensive platoons, and drones with an ease that stinks of months of careful planning and study. Your defensive platoons, veterans of many Battles, are outmaneuvered at every turn; their hidden ammunition caches are found empty, their communications networks are mysteriously scrambled, and key chokepoints are found to be booby-trapped before your men can even get to them; their well-rehearsed arcology defense routines have gone to ash. Assuming you ever get a chance to speak to The Colonel again, you would ask if her betrayal was actually inevitable rather than something you triggered.`; @@ -518,7 +516,7 @@ window.BadOutcome = function() { r += `<br>The Colonel's body was never found.`; break; case "Kind": - V.SF.BadOutcome = "Exodus"; V.trinkets.push("${t} gift card"); V.menials += 73; + V.SF.BadOutcome="Exodus"; V.trinkets.push("${t} gift card"); V.menials += 73; cashX(55000, "specialForces"); r += `Your Colonel has had enough of your meddling. In her eyes, you've broken faith with her. She asked one thing of you in return for her full support, and you could not even give her that.`; r += `<br>At midnight, a great mechanized convoy, the biggest you've seen in a long while, streams out of your Arcology. Troop Carriers, Aircraft, Heavy Trucks, and other war machines of varying sizes pour out of the Firebase in tight formation. The Colonel is refusing your calls, and you know it would be ill advised to go out there yourself or to try to stop them with force. The many bandits and mercenary groups that the convoy will inevitably pass by will probably feel this way as well. You have no idea where they are going or how they will end up, but with their wealth and weaponry, you are not worried.`; @@ -530,431 +528,263 @@ window.BadOutcome = function() { }; window.UnitText = function(input) { - "use strict"; - const V = State.variables; - T = State.temporary; - S = V.SF.Squad; - let r = ``; + "use strict"; const V=State.variables,T=State.temporary,S=V.SF.Squad; let r =``; switch(input) { case 'firebase': - appear = `is currently constructed in a haphazard fashion.`; - barracks = `Soldiers' cots are mixed in with weapons crates and ammunition.`; - slave = `Cages for processing slaves lie off to one side,`; - common = `and in the center is a common area with tables for soldiers to gather around for meals or rowdy conversations.`; - garage = ``; - drone = ``; - hangar = ``; - launch = ``; - artillery = ``; - comms = ``; - training = ``; + let appear=`is currently constructed in a haphazard fashion.`, barracks=`Soldiers' cots are mixed in with weapons crates and ammunition.`, slave=`Cages for processing slaves lie off to one side,`, common=`and in the center is a common area with tables for soldiers to gather around for meals or rowdy conversations.`, garage=``, drone=``, hangar=``, launch=``, artillery=``, comms=``, training=``; if (S.Firebase >= 0) { r += `<br>''Firebase:''`; - if (S.Firebase >= 1) appear = `has had some organization put into it.`; barracks = `The majority of weapons, armor, and ammunition have been separated from the soldiers' cots into their own armory.`; garage = `A section near the outer wall of the arcology has been converted to a garage with an adjoining vehicle maintenance bay`; drone = `.`; if (V.terrain === "oceanic") garage += `for inter-arcology travel`; - if (S.Firebase >= 2) barracks = `A barracks has been constructed near the armory, allowing soldiers a quieter place to sleep and store their personal spoils.`; drone = `; as well as a facility for the storage, maintenance, and deployment of armed combat drones.`; - if (S.Firebase >= 3) appear = `has become more permanent.`; barracks = `A command center has been constructed near the barracks and armory, allowing for additional support personnel.`; - if (S.Firebase >= 4) hangar = `Hangar space for storing and repairing aircraft has been converted from unused space on the other side of the garage.`; - if (S.Firebase >= 5) - appear = `is nearing the appearance of a military base.`; launch = `The rest of the firebase has been designated for special projects.`; artillery = `Artillery batteries are set around the base of the arcology.`; if (V.terrain === "oceanic" || V.terrain === "marine") launch += `A Naval Yard has been constructed in the waters near the arcology.`; - if (S.Firebase >= 6) common = `and in the center is a common area for recreation, including a small movie theater and a mess hall.`; - if (S.Firebase >= 7) {slave = `A slave detention facility has been sectioned off to one side`; - if (V.SF.Depravity > 1.5) slave += `emanating the sounds of rape and torture`; + if (S.Firebase >= 1) appear=`has had some organization put into it.`; barracks=`The majority of weapons, armor, and ammunition have been separated from the soldiers' cots into their own armory.`; garage=`A section near the outer wall of the arcology has been converted to a garage with an adjoining vehicle maintenance bay`; drone=`.`; if (V.terrain === "oceanic") garage += ` for inter-arcology travel`; + if (S.Firebase >= 2) barracks=`A barracks has been constructed near the armory, allowing soldiers a quieter place to sleep and store their personal spoils.`; drone=`; as well as a facility for the storage, maintenance, and deployment of armed combat drones.`; + if (S.Firebase >= 3) appear=`has become more permanent.`; barracks=`A command center has been constructed near the barracks and armory, allowing for additional support personnel.`; + if (S.Firebase >= 4) hangar=`Hangar space for storing and repairing aircraft has been converted from unused space on the other side of the garage.`; + if (S.Firebase >= 5) + appear=`is nearing the appearance of a military base.`; launch=`The rest of the firebase has been designated for special projects.`; artillery=`Artillery batteries are set around the base of the arcology.`; if (V.terrain === "oceanic" || V.terrain === "marine") launch += ` A Naval Yard has been constructed in the waters near the arcology.`; + if (S.Firebase >= 6) common=`and in the center is a common area for recreation, including a small movie theater and a mess hall.`; + if (S.Firebase >= 7) {slave=`A slave detention facility has been sectioned off to one side`; + if (V.SF.Depravity > 1.5) slave += ` emanating the sounds of rape and torture`; slave += `;`;} - if (S.Firebase >= 8) { appear = `has become a fully fledged military base.`; comms = `A Free City-wide communication network for ${V.SF.Lower} has been constructed to facilitate faster responses and efficient monitoring of the surrounding area.`; } - if (S.Firebase >= 9) training = `A high-tech killhouse has been constructed to aid in soldier training.`; - if (S.Firebase >= 10) artillery = `Railgun artillery batteries are set around the base of the arcology, capable of accurately destroying enemies an absurd distance away.`; + if (S.Firebase >= 8) { appear=`has become a fully fledged military base.`; comms=`A Free City-wide communication network for ${V.SF.Lower} has been constructed to facilitate faster responses and efficient monitoring of the surrounding area.`; } + if (S.Firebase >= 9) training=`A high-tech killhouse has been constructed to aid in soldier training.`; + if (S.Firebase >= 10) artillery=`Railgun artillery batteries are set around the base of the arcology, capable of accurately destroying enemies an absurd distance away.`; return `${r} The firebase ${appear} ${barracks} ${comms} ${training} ${slave} ${common} ${garage}${drone} ${hangar} ${launch} ${artillery}`; - } + } break; + case 'troop': r += `<br> The large dormitories are`; + const Quantity=`the ${num(S.Troops)} members of ${V.SF.Lower}`; + if (S.Troops < 100) {return `${r} sparsely occupied, ${Quantity} residing within them concentrating together in a corner. The hundreds of empty beds and lockers visibly herald the future`;} + else if (S.Troops < 400) {return `${r} lightly occupied, with ${Quantity} starting to spread out across them`;} + else if (S.Troops < 800) {return `${r} moderately occupied, though ${Quantity} residing within have a considerable amount of extra room`;} + else if (S.Troops < 1500) {return `${r} well-occupied, and ${Quantity} residing within have started to form small cliques based on section and row`;} + else {return `${r} near capacity, and ${Quantity} often barter their personal loot, whether it be monetary or human, for the choicest bunks`;} break; case 'armoury': - weapons = `The weapons are mostly worn rifles that have already seen years of service before ${V.SF.Lower} acquired them.`; - armor1 = `The body armor is enough to stop smaller calibers, but nothing serious.`; - radio= ``; - helmets = ``; - ammo0 = ``; - uniforms = ``; - special= ``; - exo= ``; - if (S.Armoury >= 0) {r += `<br><br>''Armory:''<br>`; radio= `Radios have been wired into the soldiers helmets`; helmets = `.`; - if (S.Armoury >= 2) helmets = ` and a HUD has been integrated into the soldier's eyewear.`; - if (S.Armoury >= 3) ammo0 = `Tactical vests have been provided, allowing soldiers to carry additional ammo.`; - if (S.Armoury >= 4) armor1 = `The body armor is a newer variant, able to stop small arms fire and protect against shrapnel.`; - if (S.Armoury >= 5) weapons = `The weapons are modern rifles and sidearms, putting ${V.SF.Lower} on par with rival mercenary outfits.`; - if (S.Armoury >= 6) uniforms = `New uniforms have been distributed that are more comfortable and made of breathable fabric to keep soldiers from overheating.`; - if (S.Armoury >= 7) special= `Specialized weaponry is available for many roles, allowing more flexibility in planning.`; - if (S.Armoury >= 8) helmets = `and a HUD and camera display have been integrated into soldiers' eyewear, enabling accurate aim around corners or from behind cover`; - if (S.Armoury >= 9) exo= `An exosuit has been developed to reduce the amount of weight soldiers carry, increase lifting strength, and move faster in combat.`; - if (S.Armoury >= 10) weapons = `Cutting-edge weaponry is available to ${V.SF.Lower}, far outpacing the ability of rival mercenary outfits.`; - return `${r} The armor1y holds soldiers' weapons and gear while not in training or combat. ${weapons} ${special} ${armor1} ${radio}${helmets} ${ammo0} ${uniforms} ${exo}`; + let weapons=`The weapons are mostly worn rifles that have already seen years of service before ${V.SF.Lower} acquired them.`, armor1=`The body armor is enough to stop smaller calibers, but nothing serious.`, radio=``, helmets=``, ammo0=``, uniforms=``, special=``, exo=``; + if (S.Armoury >= 0) {r += `<br><br>''Armory:''<br>`; radio=`Radios have been wired into the soldiers helmets`; helmets=`.`; + if (S.Armoury >= 2) helmets=` and a HUD has been integrated into the soldier's eyewear.`; + if (S.Armoury >= 3) ammo0=`Tactical vests have been provided, allowing soldiers to carry additional ammo.`; + if (S.Armoury >= 4) armor1=`The body armor is a newer variant, able to stop small arms fire and protect against shrapnel.`; + if (S.Armoury >= 5) weapons=`The weapons are modern rifles and sidearms, putting ${V.SF.Lower} on par with rival mercenary outfits.`; + if (S.Armoury >= 6) uniforms=`New uniforms have been distributed that are more comfortable and made of breathable fabric to keep soldiers from overheating.`; + if (S.Armoury >= 7) special=`Specialized weaponry is available for many roles, allowing more flexibility in planning.`; + if (S.Armoury >= 8) helmets=`and a HUD and camera display have been integrated into soldiers' eyewear, enabling accurate aim around corners or from behind cover`; + if (S.Armoury >= 9) exo=`An exosuit has been developed to reduce the amount of weight soldiers carry, increase lifting strength, and move faster in combat.`; + if (S.Armoury >= 10) weapons=`Cutting-edge weaponry is available to ${V.SF.Lower}, far outpacing the ability of rival mercenary outfits.`; + return `${r} The armory holds soldiers' weapons and gear while not in training or combat. ${weapons} ${special} ${armor1} ${radio}${helmets} ${ammo0} ${uniforms} ${exo}`; } break; case 'drugs': - amphet = ``; - phen= ``; - steroid= ``; - downer= ``; - concen= ``; - stimpack= ``; - stabilizer= ``; - if (S.Drugs >= 0) { r += `<br><br>''Drug Lab:''`; amphet = `Amphetamines have been added to the cocktail at a low dosage to act as a stimulant, physical performance enhancer, cognition control enhancer. Some side-effects exist.`; - if (S.Drugs >= 2) phen= `Phencyclidine has been added to the cocktail at a low dosage as a dissociative psychotropic for soldiers in battle to introduce feelings of detachment, strength and invincibility, and aggression. Some side-effects reduce the tolerable dosage before soldiers go on uncontrollable violent outbreaks.`; - if (S.Drugs >= 3) steroid= `Testosterone is being produced for soldiers in training as a natural muscle growth stimulant and to invoke aggression.`; - if (S.Drugs >= 4) downer= `Zaleplon is being produced as a downer to counteract the battle cocktail and encourage rest before combat.`; - if (S.Drugs >= 5) concen= `Methylphenidate has been added to the cocktail as a stimulant and to improve soldier concentration.`; - if (S.Drugs >= 6) phen= `A phencyclidine-based drug has been added to the cocktail as a dissociative psychotropic for soldiers in battle to introduce controllable feelings of detachment, strength and invincibility, and aggression.`; - if (S.Drugs >= 7) steroid= `Low levels of anabolic steroids are being produced for soldiers in training to stimulate muscle growth and invoke aggression.`; - if (S.Drugs >= 8) amphet = `Diphenylmethylsulfinylacetamide has been added to the cocktail to counteract the effects of sleep deprivation and promote alertness.`; - if (S.Drugs >= 9) stimpack= `A stimpack of the battle cocktail is being given to soldiers in battle to take if the original dose wears off before the battle is over.`; - if (S.Drugs >= 10) stabilizer= `A stabilizer has been added to the battle cocktail that helps tie effects together while reducing side-effects, leading to an effectively safe supersoldier drug.`; + let amphet=``, phen=``, steroid=``, downer=``, concen=``, stimpack=``, stabilizer=``; + if (S.Drugs >= 0) { r += `<br><br>''Drug Lab:''`; amphet=`Amphetamines have been added to the cocktail at a low dosage to act as a stimulant, physical performance enhancer, cognition control enhancer. Some side-effects exist.`; + if (S.Drugs >= 2) phen=`Phencyclidine has been added to the cocktail at a low dosage as a dissociative psychotropic for soldiers in battle to introduce feelings of detachment, strength and invincibility, and aggression. Some side-effects reduce the tolerable dosage before soldiers go on uncontrollable violent outbreaks.`; + if (S.Drugs >= 3) steroid=`Testosterone is being produced for soldiers in training as a natural muscle growth stimulant and to invoke aggression.`; + if (S.Drugs >= 4) downer=`Zaleplon is being produced as a downer to counteract the battle cocktail and encourage rest before combat.`; + if (S.Drugs >= 5) concen=`Methylphenidate has been added to the cocktail as a stimulant and to improve soldier concentration.`; + if (S.Drugs >= 6) phen=`A phencyclidine-based drug has been added to the cocktail as a dissociative psychotropic for soldiers in battle to introduce controllable feelings of detachment, strength and invincibility, and aggression.`; + if (S.Drugs >= 7) steroid=`Low levels of anabolic steroids are being produced for soldiers in training to stimulate muscle growth and invoke aggression.`; + if (S.Drugs >= 8) amphet=`Diphenylmethylsulfinylacetamide has been added to the cocktail to counteract the effects of sleep deprivation and promote alertness.`; + if (S.Drugs >= 9) stimpack=`A stimpack of the battle cocktail is being given to soldiers in battle to take if the original dose wears off before the battle is over.`; + if (S.Drugs >= 10) stabilizer=`A stabilizer has been added to the battle cocktail that helps tie effects together while reducing side-effects, leading to an effectively safe supersoldier drug.`; return `${r} A drug lab has been established to increase the effectiveness of ${V.SF.Lower}'s soldiers. Many of these chemicals are mixed into a single 'battle cocktail' to be taken before combat. ${amphet} ${phen} ${concen} ${steroid} ${downer} ${stimpack} ${stabilizer}`; - } - break; - case 'UAV': - if (S.Firebase >= 2 && S.Drones >= 1) { - r += `<br><br>''Drone Bay:''`; - a = `have been recommissioned for use by ${V.SF.Lower}`; - b = `.`; - c = ``; - d = ``; - e = ``; - f = ``; - g = ``; - h = ``; - i = ``; - j = ``; - k = ``; - if (S.Drones >= 2) a = `equipped with missiles are resting on one side of the drone bay`; - b = `; - as well as destroying the occasional target.`; - if (S.Drones >= 3) c = `A fleet of`; - d = `large delivery quadcopters have been converted for military service to support ground forces as combat drones.`; - if (S.Drones >= 4) d = `combat drones take up the rest of the space in the drone bay. They have a`; - e = `small automatic rifle`; - f = `mounted to the underside.`; - if (S.Drones >= 5) g = `Armor has been added to protect vulnerable components from small arms fire.`; - if (S.Drones >= 6) h = `The fleet's batteries have been replaced with higher capacity models, increasing the functional time spent in combat.`; - if (S.Drones >= 7) i = `The propellers and motors have been upgraded, increasing maneuverability and speed.`; - if (S.Drones >= 8) j = `The drone control signal has been boosted and encrypted, giving the drones a greater range and protecting against electronic warfare.`; - if (S.Drones >= 9) e = `light machine gun`; - if (S.Drones >= 10) k = `A drone-to-drone network has been installed, allowing drones to swarm, maneuver, and attack targets autonomously.`; - return `${r} Surveillance drones ${a}. During combat, they supply aerial intel to commanders and act as the communications network for ground forces${b} ${c} ${d} ${e} ${f} ${g} ${h} ${i} ${j} ${k}`; - } - break; + } break; + case 'UAV': if(S.Firebase >= 2 && S.Drones >= 1) { r += `<br><br>''Drone Bay:''`; + let a=`have been recommissioned for use by ${V.SF.Lower}`, b=`.`, c=``, d=``, e=``, f=``, g=``, h=``, i=``, j=``, k=``; + if (S.Drones >= 2) a=`equipped with missiles are resting on one side of the drone bay`; b=`; as well as destroying the occasional target.`; + if (S.Drones >= 3) c=`A fleet of`; d=`large delivery quadcopters have been converted for military service to support ground forces as combat drones.`; + if (S.Drones >= 4) d=`combat drones take up the rest of the space in the drone bay. They have a`; e=`small automatic rifle`; f=`mounted to the underside.`; + if (S.Drones >= 5) g=`Armor has been added to protect vulnerable components from small arms fire.`; + if (S.Drones >= 6) h=`The fleet's batteries have been replaced with higher capacity models, increasing the functional time spent in combat.`; + if (S.Drones >= 7) i=`The propellers and motors have been upgraded, increasing maneuverability and speed.`; + if (S.Drones >= 8) j=`The drone control signal has been boosted and encrypted, giving the drones a greater range and protecting against electronic warfare.`; + if (S.Drones >= 9) e=`light machine gun`; + if (S.Drones >= 10) k=`A drone-to-drone network has been installed, allowing drones to swarm, maneuver, and attack targets autonomously.`; + return `${r} Surveillance drones ${a}. During combat, they supply aerial intel to commanders and act as the communications network for ground forces${b} ${c} ${d} ${e} ${f} ${g} ${h} ${i} ${j} ${k}`; + } break; case 'AV': - b = `has been recommissioned for use by ${V.SF.Lower}. They`; - c = `, mechanics are methodically checking the recent purchases for battle-readiness`; - MG = `120 mm main gun is enough to handle the majority of opponents around the Free Cities.`; - engine1 = ``; - armor2 = ``; - armor22 = ``; - ammo1 = ``; - mg = ``; - fireC0 = ``; - fireC1 = ``; - fireC2 = ``; - fireC3= ``; - turret = ``; + let b=`has been recommissioned for use by ${V.SF.Lower}. They`, c=`, mechanics are methodically checking the recent purchases for battle-readiness`, MG=`120 mm main gun is enough to handle the majority of opponents around the Free Cities.`, engine1=``, armor2=``, armor22=``, ammo1=``, mg=``, fireC0=``, fireC1=``, fireC2=``, fireC3=``, turret=``; if (S.AV >= 1) { r += `<br> ''Assault:''`; - if (S.AV >= 2) engine1 = `The engine1 has been overhauled, allowing much faster maneuvering around the battlefield.`; b = ``; c = ``; - if (S.AV >= 3) armor2 = `A composite ceramic armor has replaced the original, offering much greater protection from attacks.`; - if (S.AV >= 4) ammo1 = `The tanks have been outfitted with additional types of ammo for situational use.`; - if (S.AV >= 5) mg = `A remote-controlled .50 cal machine gun has been mounted on the turret to handle infantry and low-flying aircraft.`; - if (S.AV >= 6) fireC0 = `A fire-control system`; fireC3= `been installed, guaranteeing`; fireC2 = `has`; fireC1 = `accurate fire.`; - if (S.AV >= 7) fireC2 = `and an autoloader have`; fireC1 = `rapid, accurate fire while separating the crew from the stored ammunition in the event the ammo cooks off.`; - if (S.AV >= 8) armor22 = `A reactive armor system has been added, giving the tank an additional, if temporary, layer of protection.`; - if (S.AV >= 9) turret = `The turret has been massively redesigned, lowering the tank profile and increasing the efficiency of the mechanisms within.`; - if (S.AV >= 10) MG = `140 mm main gun can quash anything even the greatest Old World nations could muster.`; + if (S.AV >= 2) engine1=`The engine1 has been overhauled, allowing much faster maneuvering around the battlefield.`; b=``; c=``; + if (S.AV >= 3) armor2=`A composite ceramic armor has replaced the original, offering much greater protection from attacks.`; + if (S.AV >= 4) ammo1=`The tanks have been outfitted with additional types of ammo for situational use.`; + if (S.AV >= 5) mg=`A remote-controlled .50 cal machine gun has been mounted on the turret to handle infantry and low-flying aircraft.`; + if (S.AV >= 6) fireC0=`A fire-control system`; fireC3=`been installed, guaranteeing`; fireC2=`has`; fireC1=`accurate fire.`; + if (S.AV >= 7) fireC2=`and an autoloader have`; fireC1=`rapid, accurate fire while separating the crew from the stored ammunition in the event the ammo cooks off.`; + if (S.AV >= 8) armor22=`A reactive armor system has been added, giving the tank an additional, if temporary, layer of protection.`; + if (S.AV >= 9) turret=`The turret has been massively redesigned, lowering the tank profile and increasing the efficiency of the mechanisms within.`; + if (S.AV >= 10) MG=`140 mm main gun can quash anything even the greatest Old World nations could muster.`; return `${r} A fleet of main battle tanks ${b} are parked in the garage${c}. ${turret} The ${MG} ${ammo1} ${mg} ${fireC0} ${fireC2} ${fireC3} ${fireC1} ${engine1} ${armor2} ${armor22}`; } break; case 'TV': - B = `has been recommissioned for use by ${V.SF.Lower}. They`; - C = `, mechanics are giving the new purchases a final tuneup`; - squad= `a squad`; - G1 = `20`; - G2 = `in a firefight`; - e0 = `The engine has been`; - engine3= ``; - armor3= ``; - tires = ``; - m1 = ``; - m2 = ``; - pod1 = ``; - pod2 = ``; + let B=`has been recommissioned for use by ${V.SF.Lower}. They`, C=`, mechanics are giving the new purchases a final tuneup`, squad=`a squad`, G1=`20`, G2=`in a firefight`, e0=`The engine has been`, engine3=``, armor3=``, tires=``, m1=``, m2=``, pod1=``, pod2=``; if (S.TV >= 1) { r += `<br> ''Transport:''`; - if (S.TV >= 2) engine3= `${e0} overhauled, allowing for higher mobility.`; C = ``; B = ``; - if (S.TV >= 3) armor3= `Composite armor has been bolted to the exterior, increasing the survivability of an explosive attack for the crew and passengers.`; - if (S.TV >= 4) tires = `The tires have been replaced with a much more durable version that can support a heavier vehicle.`; - if (S.TV >= 5) m1 = `An automatic missile defense system has been installed,`; m2 = `targeting any guided missiles with laser dazzlers and deploying a smokescreen.`; - if (S.TV >= 6) pod1 = `An anti-tank missile pod`; pod2 = `has been installed on the side of the turret.`; - if (S.TV >= 7) G1 = `25`; G2 = `by attacking enemies through cover and destroying light armor`; - if (S.TV >= 8) pod2 = `and an anti-aircraft missile pod have been installed on either side of the turret.`; - if (S.TV >= 9) squad= `two squads`; armor3= ``; m2 = `destroying any incoming missiles with a high-powered laser. Some of the now redundant composite armor has been removed, and the reclaimed space allows for more passengers.`; - if (S.TV >= 10) engine3= `${e0} replaced with the newest model, allowing the vehicle to get in and out of the conflict extremely quickly.`; + if (S.TV >= 2) engine3=`${e0} overhauled, allowing for higher mobility.`; C=``; B=``; + if (S.TV >= 3) armor3=`Composite armor has been bolted to the exterior, increasing the survivability of an explosive attack for the crew and passengers.`; + if (S.TV >= 4) tires=`The tires have been replaced with a much more durable version that can support a heavier vehicle.`; + if (S.TV >= 5) m1=`An automatic missile defense system has been installed,`; m2=`targeting any guided missiles with laser dazzlers and deploying a smokescreen.`; + if (S.TV >= 6) pod1=`An anti-tank missile pod`; pod2=`has been installed on the side of the turret.`; + if (S.TV >= 7) G1=`25`; G2=`by attacking enemies through cover and destroying light armor`; + if (S.TV >= 8) pod2=`and an anti-aircraft missile pod have been installed on either side of the turret.`; + if (S.TV >= 9) squad=`two squads`; armor3=``; m2=`destroying any incoming missiles with a high-powered laser. Some of the now redundant composite armor has been removed, and the reclaimed space allows for more passengers.`; + if (S.TV >= 10) engine3=`${e0} replaced with the newest model, allowing the vehicle to get in and out of the conflict extremely quickly.`; return `A fleet of infantry fighting vehicles ${B} are parked in the garage${C}. The IFVs can carry ${squad} of 6 to a firezone. The ${G1} mm autocannon supports infantry ${G2}. ${pod1} ${pod2} ${engine3} ${armor3} ${tires} ${m1} ${m2}`; - } - break; + } break; case 'PGT': - b1 = `has been sold to ${V.SF.Lower} through back channels to support a failing Old World nation. The tank is so large it cannot fit inside the garage, and has`; - c1 = ``; - engines4 = `. Two engines power the left and right sides of the tank separately; - leaving it underpowered and slow`; - gun0 = ``; - gun1 = ``; - gun2 = `an undersized main gun and makeshift firing system from a standard battle tank`; - armor5 = ``; - armor6 = ``; - cannon = ``; - laser = ``; - PGTframe = ``; + let b1=`has been sold to ${V.SF.Lower} through back channels to support a failing Old World nation. The tank is so large it cannot fit inside the garage, and has`, c1=``, engines4=`. Two engines power the left and right sides of the tank separately, leaving it underpowered and slow`, gun0=``, gun1=``, gun2=`an undersized main gun and makeshift firing system from a standard battle tank`, armor5=``, armor6=``, cannon=``, laser=``, PGTframe=``; if (S.PGT >= 1) {r += `<br> ''Prototype Goliath Tank:''`; - if (S.PGT >= 2) c1 = `rests in`; b1 = ``; engines4 = `and powered by their own engine, allowing the tank to travel with an unsettling speed for its massive bulk`; - if (S.PGT >= 3) gun0 = `a railgun capable of`; gun1 = `firing steel slugs`; gun2 = `through one tank and into another`; - if (S.PGT >= 4) armor6 = `reinforced, increasing survivability for the crew inside.`; armor5 = `The armor has been`; - if (S.PGT >= 5) cannon = `A coaxial 30mm autocannon has been installed in the turret, along with automated .50 cal machine guns mounted over the front treads.`; - if (S.PGT >= 6) laser = `Laser anti-missile countermeasures have been installed, destroying any subsonic ordinance fired at the Goliath.`; - if (S.PGT >= 7) PGTframe = `The frame has been reinforced, allowing the Goliath to carry more armor and guns.`; - if (S.PGT >= 8) armor6 = `redesigned with sloping and state-of-the-art materials, allowing the Goliath to shrug off even the most advanced armor5-piercing tank rounds.`; - if (S.PGT >= 9) gun1 = `firing guided projectiles`; - if (S.PGT >= 10) gun0 = `a twin-barreled railgun capable of rapidly`; + if (S.PGT >= 2) c1=`rests in`; b1=``; engines4=` and powered by their own engine, allowing the tank to travel with an unsettling speed for its massive bulk`; + if (S.PGT >= 3) gun0=`a railgun capable of`; gun1=`firing steel slugs`; gun2=`through one tank and into another`; + if (S.PGT >= 4) armor6=`reinforced, increasing survivability for the crew inside.`; armor5=`The armor has been`; + if (S.PGT >= 5) cannon=`A coaxial 30mm autocannon has been installed in the turret, along with automated .50 cal machine guns mounted over the front treads.`; + if (S.PGT >= 6) laser=`Laser anti-missile countermeasures have been installed, destroying any subsonic ordinance fired at the Goliath.`; + if (S.PGT >= 7) PGTframe=`The frame has been reinforced, allowing the Goliath to carry more armor and guns.`; + if (S.PGT >= 8) armor6=`redesigned with sloping and state-of-the-art materials, allowing the Goliath to shrug off even the most advanced armor5-piercing tank rounds.`; + if (S.PGT >= 9) gun1=`firing guided projectiles`; + if (S.PGT >= 10) gun0=`a twin-barreled railgun capable of rapidly`; return `A prototype Goliath tank ${b1}${c1} its own garage housing built outside the arcology. The massive bulk is spread out over 8 tracks, two for each corner of the tank${engines4}. The turret is equipped with ${gun0} ${gun1} ${gun2}. ${cannon} ${armor5} ${armor6} ${laser} ${PGTframe}`; } break; case 'AA': - W1 = `only armed`; - W2 = `;`; - W3 = `a poor weapon against flying targets, but enough to handle ground forces`; - group = `A small group of attack VTOL have been recommissioned for use by ${V.SF.Lower}; enough to make up a squadron`; - engines = ``; - TAI = ``; - lock = ``; - support = ``; - stealth = ``; - scramble = ``; - PAI = ``; + let W1=`only armed`, W2=`;`, W3=`a poor weapon against flying targets, but enough to handle ground forces`, group=`A small group of attack VTOL have been recommissioned for use by ${V.SF.Lower}, enough to make up a squadron`, engines=``, TAI=``, lock=``, support=``, stealth=``, scramble=``, PAI=``; if (S.AA >= 1) {r += `<br> ''Assault:''`; - if (S.AA >= 2) W1 = `armed`; W2 = `and air-to-air missiles,`; W3 = `a combination that can defend the arcology from enemy aircraft, as well as`; support = `support ground troops`; - if (S.AA >= 3) engines = `The engines have been tuned, allowing faster flight with greater acceleration.`; - if (S.AA >= 4) TAI = `An advanced targeting AI has been installed to handle all control of weapons, allowing much more efficient use of ammunition and anti-countermeasure targeting.`; - if (S.AA >= 5) lock = `Installed multispectrum countermeasures protect against all types of missile locks.`; - if (S.AA >= 6) group = `A respectable number of attack VTOL protect your arcology, split into a few squadrons`; - if (S.AA >= 7) support = `attack ground targets`; W2 = `; rocket pods, and air-to-air missiles,`; - if (S.AA >= 8) stealth = `The old skin has been replaced with a radar-absorbent material, making the aircraft difficult to pick up on radar.`; - if (S.AA >= 9) scramble = `The VTOLs can scramble to react to any threat in under three minutes.`; - if (S.AA >= 10) PAI = `A piloting AI has been installed, allowing the VTOLs to perform impossible maneuvers that cannot be done by a human pilot. This removes the need for a human in the aircraft altogether.`; + if (S.AA >= 2) W1=`armed`; W2=` and air-to-air missiles,`; W3=`a combination that can defend the arcology from enemy aircraft, as well as`; support=` support ground troops`; + if (S.AA >= 3) engines=`The engines have been tuned, allowing faster flight with greater acceleration.`; + if (S.AA >= 4) TAI=`An advanced targeting AI has been installed to handle all control of weapons, allowing much more efficient use of ammunition and anti-countermeasure targeting.`; + if (S.AA >= 5) lock=`Installed multispectrum countermeasures protect against all types of missile locks.`; + if (S.AA >= 6) group=`A respectable number of attack VTOL protect your arcology, split into a few squadrons`; + if (S.AA >= 7) support=` attack ground targets`; W2=`; rocket pods, and air-to-air missiles,`; + if (S.AA >= 8) stealth=`The old skin has been replaced with a radar-absorbent material, making the aircraft difficult to pick up on radar.`; + if (S.AA >= 9) scramble=`The VTOLs can scramble to react to any threat in under three minutes.`; + if (S.AA >= 10) PAI=`A piloting AI has been installed, allowing the VTOLs to perform impossible maneuvers that cannot be done by a human pilot. This removes the need for a human in the aircraft altogether.`; return `${r} ${group}. Several of the landing pads around ${V.arcologies[0].name} host groups of four fighters, ready to defend the arcology. ${scramble} The attack VTOL are currently ${W1} with a Gatling cannon${W2} ${W3}${support}. ${TAI} ${PAI} ${engines} ${lock} ${stealth}`; } break; case 'TA': - Num = `number`; - type = `tiltrotor`; - capacity = `small platoon or 15`; - engines0 = ``; - engines01 = ``; - Radar = ``; - Armor = ``; - landing = ``; - miniguns = ``; - counter = ``; + let Num=`number`, type=`tiltrotor`, capacity=`small platoon or 15`, engines0=``, engines01=``, Radar=``, Armor=``, landing=``, miniguns=``, counter=``; if (S.TA >= 1) {r += `<br> ''Transport:''`; - if (S.TA >= 2) engines0 = `The tiltrotor engines have been replaced with a more powerful engine, allowing faster travel times.`; - if (S.TA >= 3) counter = `Multispectrum countermeasures have been added to protect against guided missiles.`; - if (S.TA >= 4) miniguns = `Mounted miniguns have been installed to cover soldiers disembarking in dangerous areas.`; - if (S.TA >= 5) Num = `large number`; - if (S.TA >= 6) landing = `The landing equipment has been overhauled, protecting personnel and cargo in the event of a hard landing or crash.`; - if (S.TA >= 7) Armor = `Armor has been added to protect passengers from small arms fire from below.`; - if (S.TA >= 8) capacity = `large platoon or 20`; engines01 = `Further tweaks to the engine allow for greater lifting capacity.`; - if (S.TA >= 9) Radar = `Radar-absorbent materials have replaced the old skin, making it difficult to pick up the VTOL on radar.`; - if (S.TA >= 10) type = `tiltjet`; engines01 = ``; engines0 = `The tiltrotors have been replaced with tiltjets, allowing for much greater airspeed and acceleration.`; + if (S.TA >= 2) engines0=`The tiltrotor engines have been replaced with a more powerful engine, allowing faster travel times.`; + if (S.TA >= 3) counter=`Multispectrum countermeasures have been added to protect against guided missiles.`; + if (S.TA >= 4) miniguns=`Mounted miniguns have been installed to cover soldiers disembarking in dangerous areas.`; + if (S.TA >= 5) Num=`large number`; + if (S.TA >= 6) landing=`The landing equipment has been overhauled, protecting personnel and cargo in the event of a hard landing or crash.`; + if (S.TA >= 7) Armor=`Armor has been added to protect passengers from small arms fire from below.`; + if (S.TA >= 8) capacity=`large platoon or 20`; engines01=`Further tweaks to the engine allow for greater lifting capacity.`; + if (S.TA >= 9) Radar=`Radar-absorbent materials have replaced the old skin, making it difficult to pick up the VTOL on radar.`; + if (S.TA >= 10) type=`tiltjet`; engines01=``; engines0=`The tiltrotors have been replaced with tiltjets, allowing for much greater airspeed and acceleration.`; return `${r} A ${Num} of transport ${type} VTOL have been recommissioned for use by ${V.SF.Lower}. The VTOLs are resting on large pads near the base to load either a ${capacity} tons of material. ${engines0} ${engines01} ${Armor} ${landing} ${counter} ${Radar} ${miniguns}`; } break; case 'SP': - engine20 = `ramjet engines in the atmosphere that can reach Mach 10`; - b5 = `has been purchased from an insolvent Old World nation. It `; - shield = ``; - camera = ``; - efficiency = ``; - camera2 = ``; - drag = ``; - crew = ``; - engine2 = ``; - skin = ``; + let engine20=`ramjet engines in the atmosphere that can reach Mach 10`, b5=`has been purchased from an insolvent Old World nation. It `, shield=``, camera=``, efficiency=``, camera2=``, drag=``, crew=``, engine2=``, skin=``; if (S.SpacePlane >= 1) {r += `<br> ''Spaceplane:''`; - if (S.SpacePlane >= 2) b5 = ``; shield = `The current heat shielding has been upgraded, reducing the likelihood of heat damage during reentry.`; - if (S.SpacePlane >= 3) engine2 = `and liquid rocket engines in orbit that can reach an equivalent Mach 18`; - if (S.SpacePlane >= 4) camera = `A state-of-the-art camera has been installed in the underbelly that takes incredibly high resolution photos, but requires the frictionless environment of space to focus.`; - if (S.SpacePlane >= 5) efficiency = `Tweaks to the engines have increased fuel efficiency to the point where midflight refueling is no longer necessary.`; - if (S.SpacePlane >= 6) camera2 = `The camera sensor is capable of taking IR shots.`; - if (S.SpacePlane >= 7) drag = `Miraculous advances in aerodynamics and materials allow frictionless flight, even while in the atmosphere.`; - if (S.SpacePlane >= 8) crew = `Increased the crew comfort and life support systems to increase operational time.`; - if (S.SpacePlane >= 9) skin = `Replaced the underbelly skin with a chameleon kit, matching the color to the sky above it.`; - if (S.SpacePlane >= 10) engine20 = `experimental scramjet engines in the atmosphere that can reach Mach 15`; engine2 = `and liquid rocket engines in orbit that can reach an equivalent Mach 25`; + if (S.SpacePlane >= 2) b5=``; shield=`The current heat shielding has been upgraded, reducing the likelihood of heat damage during reentry.`; + if (S.SpacePlane >= 3) engine2=` and liquid rocket engines in orbit that can reach an equivalent Mach 18`; + if (S.SpacePlane >= 4) camera=`A state-of-the-art camera has been installed in the underbelly that takes incredibly high resolution photos, but requires the frictionless environment of space to focus.`; + if (S.SpacePlane >= 5) efficiency=`Tweaks to the engines have increased fuel efficiency to the point where midflight refueling is no longer necessary.`; + if (S.SpacePlane >= 6) camera2=`The camera sensor is capable of taking IR shots.`; + if (S.SpacePlane >= 7) drag=`Miraculous advances in aerodynamics and materials allow frictionless flight, even while in the atmosphere.`; + if (S.SpacePlane >= 8) crew=`Increased the crew comfort and life support systems to increase operational time.`; + if (S.SpacePlane >= 9) skin=`Replaced the underbelly skin with a chameleon kit, matching the color to the sky above it.`; + if (S.SpacePlane >= 10) engine20=`experimental scramjet engines in the atmosphere that can reach Mach 15`; engine2=` and liquid rocket engines in orbit that can reach an equivalent Mach 25`; return `${r} A prototype spaceplane ${b5} rests in the hangar, its black fuselage gleaming. The craft is powered by ${engine20}${engine2}. ${efficiency} ${shield} ${camera} ${camera2} ${drag} ${crew} ${skin}`; } break; - case 'GunS': - a = `has been recommissioned for use by ${V.SF.Lower}. Currently, it `; - b4 = ``; - c2 = ``; - d = ``; - e = `Miniguns and Gatling cannons line`; - f = `; though the distance to ground targets renders the smaller calibers somewhat less useful`; - g = ``; - h = ``; - i = ``; - j = ``; - k = ``; + case 'GunS': + let a=`has been recommissioned for use by ${V.SF.Lower}. Currently, it `, b4=``, c2=``, d=``, e=`Miniguns and Gatling cannons line`, f=`, though the distance to ground targets renders the smaller calibers somewhat less useful`, g=``, h=``, i=``, j=``, k=``; if(S.GunS >= 1) {r += `<br> ''Gunship:''`; - if (S.GunS >= 2) b4 = `Infrared sensors have been added for the gunners to better pick targets.`; a = ``; - if (S.GunS >= 3) c2 = `The underside of the aircraft has been better armored against small-arms fire`; h = `.`; - if (S.GunS >= 4) d = `Larger fuel tanks have been installed in the wings and fuselage, allowing the gunship to provide aerial support for longer periods before refueling.`; - if (S.GunS >= 5) e = `25 mm Gatling cannons`; f = `; allowing the gunship to eliminate infantry`; j = `and light vehicles from above`; k = `and a 40 mm autocannon are mounted on`; - if (S.GunS >= 6) g = `The engines have been replaced, allowing both faster travel to a target, and slower travel around a target.`; - if (S.GunS >= 7) h = `; and multi-spectrum countermeasures have been installed to protect against guided missiles.`; - if (S.GunS >= 8) b4 = `Upgraded multi-spectrum sensors can clearly depict targets even with IR shielding.`; - if (S.GunS >= 9) i = `The ammunition storage has been increased, only slightly depriving loaders of a place to sit.`; - if (S.GunS >= 10) j = `; both light and heavy vehicles, and most enemy cover from above`; k = `; a 40 mm autocannon, and a 105 mm howitzer are mounted on`; + if (S.GunS >= 2) b4=`Infrared sensors have been added for the gunners to better pick targets.`; a=``; + if (S.GunS >= 3) c2=`The underside of the aircraft has been better armored against small-arms fire`; h=`.`; + if (S.GunS >= 4) d=`Larger fuel tanks have been installed in the wings and fuselage, allowing the gunship to provide aerial support for longer periods before refueling.`; + if (S.GunS >= 5) e=`25 mm Gatling cannons`; f=`; allowing the gunship to eliminate infantry`; j=` and light vehicles from above`; k=` and a 40 mm autocannon are mounted on`; + if (S.GunS >= 6) g=`The engines have been replaced, allowing both faster travel to a target, and slower travel around a target.`; + if (S.GunS >= 7) h=`; and multi-spectrum countermeasures have been installed to protect against guided missiles.`; + if (S.GunS >= 8) b4=`Upgraded multi-spectrum sensors can clearly depict targets even with IR shielding.`; + if (S.GunS >= 9) i=`The ammunition storage has been increased, only slightly depriving loaders of a place to sit.`; + if (S.GunS >= 10) j=`; both light and heavy vehicles, and most enemy cover from above`; k=`; a 40 mm autocannon, and a 105 mm howitzer are mounted on`; return `${r} A large gunship ${a} is being refueled in the hangar. ${e}${k} the port side of the fuselage${f}${j}. ${b4} ${i} ${g} ${c2}${h} ${d}`; } break; case 'sat': - loc1 = `An unused science satellite has been purchased from an Old World nation. While currently useless, it holds potential to be a powerful tool.`; - gyro = ``; - telemetry = ``; - thrusters = ``; - solar = ``; - surviv = ``; - laser1 = ``; - heat = ``; - reactor = ``; - lens = ``; - kin = ``; + let loc1=`An unused science satellite has been purchased from an Old World nation. While currently useless, it holds potential to be a powerful tool.`, gyro=``, telemetry=``, thrusters=``, solar=``, surviv=``, laser1=``, heat=``, reactor=``, lens=``, kin=``; if (S.Satellite.lv >= 1) {r += `<br> ''Satellite:''`; if (S.Satellite.lv >= 2) - if (V.SF.Squad.Satellite.InOrbit < 1) loc1 = `The satellite is being worked on in the Launch Bay.`; else loc1 = `The satellite is in geosynchronous orbit, far above the arcology.`; gyro = `A suite of sensors have been installed to ensure the satellite can detect attitude and orbital altitude.`; - if (S.Satellite.lv >= 3) telemetry = `Telemetry systems have been installed to communicate with the satellite in orbit, with strong encryption measures.`; - if (S.Satellite.lv >= 4) thrusters = `Thrusters have been installed to control satellite attitude and orbit.`; - if (S.Satellite.lv >= 5) solar = `A massive folding solar panel array, combined with the latest in battery technology allow the satellite to store an enormous amount of energy relatively quickly.`; surviv = `Enough of the satellite has been finished that it can expect to survive for a significant period of time in space.`; - if (S.Satellite.lv >= 6) laser1 = `A laser cannon has been mounted facing the earth, capable of cutting through steel in seconds`; heat = `while generating a large amount of heat.`; - if (S.Satellite.lv >= 7) heat = `. The installed heatsink allows the laser cannon to fire more frequently without damaging the satellite.`; - if (S.Satellite.lv >= 8) reactor = `A small, efficient nuclear reactor has been installed to continue generating energy while in the Earth's shadow.`; - if (S.Satellite.lv >= 9) lens = `A higher quality and adjustable lens has been installed on the laser, allowing scalpel precision on armor or wide-area blasts on unarmored targets.`; - if (S.Satellite.lv >= 10) kin = `A magazine of directable tungsten rods have been mounted to the exterior of the satellite, allowing for kinetic bombardment roughly equal to a series of nuclear blasts.`; - return `${r} ${loc1} ${gyro} ${thrusters} ${telemetry} ${solar} ${reactor} ${surviv} ${laser1}${heat} ${lens} ${kin}`; + if (V.SF.Squad.Satellite.InOrbit < 1) loc1=`The satellite is being worked on in the Launch Bay.`; else loc1=`The satellite is in geosynchronous orbit, far above the arcology.`; gyro=`A suite of sensors have been installed to ensure the satellite can detect attitude and orbital altitude.`; + if (S.Satellite.lv >= 3) telemetry=`Telemetry systems have been installed to communicate with the satellite in orbit, with strong encryption measures.`; + if (S.Satellite.lv >= 4) thrusters=`Thrusters have been installed to control satellite attitude and orbit.`; + if (S.Satellite.lv >= 5) solar=`A massive folding solar panel array, combined with the latest in battery technology allow the satellite to store an enormous amount of energy relatively quickly.`; surviv=`Enough of the satellite has been finished that it can expect to survive for a significant period of time in space.`; + if (S.Satellite.lv >= 6) laser1=`A laser cannon has been mounted facing the earth, capable of cutting through steel in seconds`; heat=` while generating a large amount of heat.`; + if (S.Satellite.lv >= 7) heat=`. The installed heatsink allows the laser cannon to fire more frequently without damaging the satellite.`; + if (S.Satellite.lv >= 8) reactor=`A small, efficient nuclear reactor has been installed to continue generating energy while in the Earth's shadow.`; + if (S.Satellite.lv >= 9) lens=`A higher quality and adjustable lens has been installed on the laser, allowing scalpel precision on armor or wide-area blasts on unarmored targets.`; + if (S.Satellite.lv >= 10) kin=`A magazine of directable tungsten rods have been mounted to the exterior of the satellite, allowing for kinetic bombardment roughly equal to a series of nuclear blasts.`; + return `${r} ${loc1} ${gyro} ${thrusters} ${telemetry} ${solar} ${reactor} ${surviv} ${laser1}${heat} ${lens} ${kin}`; } break; case 'GR': - loc = `has been purchased from a crumbling Old World nation. It`; - power = `Large batteries mounted in oversized shoulders power the robot for up to ten minutes of use; though they make for large targets.`; - knife = `simply a 8.5 meter long knife; though additional weapons are under development.`; - armor8 = ``; - actuator = ``; - cannon1 = ``; - heatsink = ``; - ammo2 = ``; - missile = ``; + let loc=`has been purchased from a crumbling Old World nation. It`, power=`Large batteries mounted in oversized shoulders power the robot for up to ten minutes of use, though they make for large targets.`, knife=`simply a 8.5 meter long knife, though additional weapons are under development.`, armor8=``, actuator=``, cannon1=``, heatsink=``, ammo2=``, missile=``; if (S.GiantRobot >= 1) {r += `<br> ''Giant Robot:''`; - if (S.GiantRobot >= 2) loc = ``; armor8 = `Armor plating has been mounted over the majority of the robot.`; - if (S.GiantRobot >= 3) power = `The robot is now powered by an umbilical cable system instead of bulky and short-lived batteries.`; - if (S.GiantRobot >= 4) knife = `a 25 meter plasma sword. The cutting edge uses plasma to melt and cut through targets, reducing the strain on the sword.`; - if (S.GiantRobot >= 5) actuator = `The limb actuators have been replaced with a faster and more powerful variant, granting the robot the same.`; - if (S.GiantRobot >= 6) cannon1 = `A custom 45 mm Gatling cannon rifle has been developed for ranged use`; ammo2 = `; though it lacks enough ammo storage for a main weapon.`; - if (S.GiantRobot >= 7) heatsink = `Large heatsinks have been installed out of the back to solve a massive overheating problem. These heatsinks resemble wings, and tend to glow red with heat when in heavy use.`; - if (S.GiantRobot >= 8) armor8 = ``; actuator = `Final actuator tweaks have allowed for the addition of exceptionally thick armor without any loss in speed or power.`; - if (S.GiantRobot >= 9) ammo2 = `; with spare ammunition drums kept along the robot's waist.`; - if (S.GiantRobot >= 10) missile = `Missile pods have been mounted on the shoulders.`; + if (S.GiantRobot >= 2) loc=``; armor8=`Armor plating has been mounted over the majority of the robot.`; + if (S.GiantRobot >= 3) power=`The robot is now powered by an umbilical cable system instead of bulky and short-lived batteries.`; + if (S.GiantRobot >= 4) knife=`a 25 meter plasma sword. The cutting edge uses plasma to melt and cut through targets, reducing the strain on the sword.`; + if (S.GiantRobot >= 5) actuator=`The limb actuators have been replaced with a faster and more powerful variant, granting the robot the same.`; + if (S.GiantRobot >= 6) cannon1=`A custom 45 mm Gatling cannon rifle has been developed for ranged use`; ammo2=`; though it lacks enough ammo storage for a main weapon.`; + if (S.GiantRobot >= 7) heatsink=`Large heatsinks have been installed out of the back to solve a massive overheating problem. These heatsinks resemble wings, and tend to glow red with heat when in heavy use.`; + if (S.GiantRobot >= 8) armor8=``; actuator=`Final actuator tweaks have allowed for the addition of exceptionally thick armor without any loss in speed or power.`; + if (S.GiantRobot >= 9) ammo2=`; with spare ammunition drums kept along the robot's waist.`; + if (S.GiantRobot >= 10) missile=`Missile pods have been mounted on the shoulders.`; return `${r} A prototype giant robot ${loc} rests in a gantry along the side of the arcology. The robot is as tall as a medium-sized office building, focusing on speed over other factors. ${power} ${armor8} ${actuator} ${heatsink} The main armament is ${knife} ${cannon1}${ammo2} ${missile}`; } break; case 'ms': - a4 = `A cruise missile launch site has been constructed near the base of`; - b2 = `outdated; something quickly rigged together to give the launch site something to fire in the case of an attack`; - c8 = ``; - d1 = ``; - e1 = ``; - f1 = ``; - g1 = ``; - h1 = ``; + let a4=`A cruise missile launch site has been constructed near the base of`, b2=`outdated, something quickly rigged together to give the launch site something to fire in the case of an attack`, c8=``, d1=``, e1=``, f1=``, g1=``, h1=``; if (S.MissileSilo >= 1) {r += `<br> ''Cruise Missile:''`; - if (S.MissileSilo >= 2) b2 = `a modern missile`; c8 = `; tipped with a conventional warhead`; - if (S.MissileSilo >= 3) d1 = `The launch systems have been overhauled, allowing a launch within seconds of an attack order being given.`; - if (S.MissileSilo >= 4) e1 = `The missile engines have been tweaked, giving them a greater range.`; - if (S.MissileSilo >= 5) f1 = `A passive radar has been installed, allowing the missile to follow moving targets.`; - if (S.MissileSilo >= 6) a4 = `Several cruise missile launch sites have been constructed around`; - if (S.MissileSilo >= 7) e1 = `The engine has been replaced, giving the missiles greater range and supersonic speeds.`; - if (S.MissileSilo >= 8) g1 = `The ability to pick new targets should the original be lost has been added.`; - if (S.MissileSilo >= 9) h1 = `The missile now uses its remaining fuel to create a thermobaric explosion, massively increasing explosive power.`; - if (S.MissileSilo >= 10) c8 = `that can be tipped with either a conventional or nuclear warhead`; + if (S.MissileSilo >= 2) b2=`a modern missile`; c8=`; tipped with a conventional warhead`; + if (S.MissileSilo >= 3) d1=`The launch systems have been overhauled, allowing a launch within seconds of an attack order being given.`; + if (S.MissileSilo >= 4) e1=`The missile engines have been tweaked, giving them a greater range.`; + if (S.MissileSilo >= 5) f1=`A passive radar has been installed, allowing the missile to follow moving targets.`; + if (S.MissileSilo >= 6) a4=`Several cruise missile launch sites have been constructed around`; + if (S.MissileSilo >= 7) e1=`The engine has been replaced, giving the missiles greater range and supersonic speeds.`; + if (S.MissileSilo >= 8) g1=`The ability to pick new targets should the original be lost has been added.`; + if (S.MissileSilo >= 9) h1=`The missile now uses its remaining fuel to create a thermobaric explosion, massively increasing explosive power.`; + if (S.MissileSilo >= 10) c8=` that can be tipped with either a conventional or nuclear warhead`; return `${r} ${a4} the arcology. The current missile armament is ${b2}${c8}. ${d1} ${e1} ${f1} ${g1} ${h1}`; } break; case 'AC': - recom1 = `has been recommissioned from the Old World for ${V.SF.Lower}. It`; - jets = `Formerly mothballed strike jets`; - loc2 = ``; - radar = ``; - AAG = ``; - prop = ``; - torp = ``; - armor9 = ``; - power1 = ``; - scramble1 = ``; + let recom1=`has been recommissioned from the Old World for ${V.SF.Lower}. It`, jets=`Formerly mothballed strike jets`, loc2=``, radar=``, AAG=``, prop=``, torp=``, armor9=``, power1=``, scramble1=``; if (S.AircraftCarrier >= 1) {r += `<br> ''Aircraft Carrier:''`; - if (V.week % 6 === 0) loc2 = `moored to the pier in the Naval Yard`; else loc2 = `patrolling the waters near ${V.arcologies[0].name}`; - if (S.AircraftCarrier >= 2) radar = `The island's radar and comms have been improved.`; recom1 = ``; - if (S.AircraftCarrier >= 3) AAG = `The antiair guns have been updated to automatically track and predict enemy aircraft movement.`; - if (S.AircraftCarrier >= 4) jets = `Modern strike jets with state-of-the-art armaments`; - if (S.AircraftCarrier >= 5) prop = `The propellers have been redesigned, granting greater speed with less noise.`; - if (S.AircraftCarrier >= 6) torp = `An anti-torpedo system detects and destroys incoming torpedoes.`; - if (S.AircraftCarrier >= 7) armor9 = `Additional armor has been added to the hull and deck.`; - if (S.AircraftCarrier >= 8) power1 = `The power plant has been converted to provide nuclear power.`; - if (S.AircraftCarrier >= 9) scramble1 = `The catapult has been converted to an electromagnetic launch system, halving the time it takes to scramble1 jets.`; - if (S.AircraftCarrier >= 10) jets = `Attack VTOL from the converted for carrier capability`; + if (V.week % 6 === 0) loc2=`moored to the pier in the Naval Yard`; else loc2=`patrolling the waters near ${V.arcologies[0].name}`; + if (S.AircraftCarrier >= 2) radar=`The island's radar and comms have been improved.`; recom1=``; + if (S.AircraftCarrier >= 3) AAG=`The antiair guns have been updated to automatically track and predict enemy aircraft movement.`; + if (S.AircraftCarrier >= 4) jets=`Modern strike jets with state-of-the-art armaments`; + if (S.AircraftCarrier >= 5) prop=`The propellers have been redesigned, granting greater speed with less noise.`; + if (S.AircraftCarrier >= 6) torp=`An anti-torpedo system detects and destroys incoming torpedoes.`; + if (S.AircraftCarrier >= 7) armor9=`Additional armor has been added to the hull and deck.`; + if (S.AircraftCarrier >= 8) power1=`The power plant has been converted to provide nuclear power.`; + if (S.AircraftCarrier >= 9) scramble1=`The catapult has been converted to an electromagnetic launch system, halving the time it takes to scramble1 jets.`; + if (S.AircraftCarrier >= 10) jets=`Attack VTOL from the converted for carrier capability`; return `${r} An aircraft carrier ${recom1} is ${loc2}. ${jets} serve as its airpower. ${scramble1} ${power1} ${radar} ${AAG} ${torp} ${prop} ${armor9}`; } break; case 'Sub': - recom = `has been recommissioned from the old world, and`; - reactor0 = `Because diesel engines provide power and breathing oxygen is kept in pressurized canisters; - the sub must frequently surface.`; - reactor1 = ``; - cal = ``; - hull = ``; - tubes = ``; - torpedoes = ``; - sonar = ``; - control = ``; - missiles = ``; + let recom=`has been recommissioned from the old world, and`, reactor0=`Because diesel engines provide power and breathing oxygen is kept in pressurized canisters, the sub must frequently surface.`, reactor1=``, cal=``, hull=``, tubes=``, torpedoes=``, sonar=``, control=``, missiles=``; if (S.Sub >= 1) {r += `<br> ''Submarine:''`; - if (S.Sub >= 2) recom = ``; reactor0 = `A nuclear reactor provides power`; reactor1 = `; but because oxygen is still kept in pressurized canisters the sub must frequently surface to replenish its oxygen stocks.`; - if (S.Sub >= 3) reactor1 = `and an oxygen generator pulls Oâ‚‚ from the surrounding seawater, allowing the submarine to remain underwater for months if necessary.`; - if (S.Sub >= 4) cal = `Calibration of the propulsion systems has reduced the telltale hum of a moving sub to a whisper.`; - if (S.Sub >= 5) hull = `The outer hull has been redesigned for hydrodynamics and sonar absorption.`; - if (S.Sub >= 6) tubes = `The torpedo tubes have been redesigned for faster loading speeds`; torpedoes = `.`; - if (S.Sub >= 7) sonar = `The passive sonar has been finely tuned to detect mechanical noises miles away.`; - if (S.Sub >= 8) control = `The control room computers have been upgraded to automate many conn duties.`; - if (S.Sub >= 9) torpedoes = `and launch more agile torpedoes.`; - if (S.Sub >= 10) missiles = `The submarine has been outfitted with several cruise missiles to attack land or sea-based targets.`; + if (S.Sub >= 2) recom=``; reactor0=`A nuclear reactor provides power`; reactor1=`; but because oxygen is still kept in pressurized canisters the sub must frequently surface to replenish its oxygen stocks.`; + if (S.Sub >= 3) reactor1=` and an oxygen generator pulls Oâ‚‚ from the surrounding seawater, allowing the submarine to remain underwater for months if necessary.`; + if (S.Sub >= 4) cal=`Calibration of the propulsion systems has reduced the telltale hum of a moving sub to a whisper.`; + if (S.Sub >= 5) hull=`The outer hull has been redesigned for hydrodynamics and sonar absorption.`; + if (S.Sub >= 6) tubes=`The torpedo tubes have been redesigned for faster loading speeds`; torpedoes=`.`; + if (S.Sub >= 7) sonar=`The passive sonar has been finely tuned to detect mechanical noises miles away.`; + if (S.Sub >= 8) control=`The control room computers have been upgraded to automate many conn duties.`; + if (S.Sub >= 9) torpedoes=`and launch more agile torpedoes.`; + if (S.Sub >= 10) missiles=`The submarine has been outfitted with several cruise missiles to attack land or sea-based targets.`; return `${r} An attack submarine ${recom} is moored to the pier of the Naval Yard. ${reactor0}${reactor1} ${cal} ${hull} ${tubes}${torpedoes} ${sonar} ${control} ${missiles}`; } break; case 'HAT': - recom2 = `; has been recommissioned for use by ${V.SF.Lower}. It`; - tons = `200`; - skirt = ``; - guns = ``; - guns2 = ``; - fans = ``; - speed = ``; - turbines = ``; - armor10 = ``; - ramps = ``; - HATframe = ``; - loadout = ``; + let recom2=`; has been recommissioned for use by ${V.SF.Lower}. It`, tons=`200`, skirt=``, guns=``, guns2=``, fans=``, speed=``, turbines=``, armor10=``, ramps=``, HATframe=``, loadout=``; if (S.HAT >= 1) {r += `<br> ''Amphibious Transport:''`; - if (S.HAT >= 2) skirt = `The skirt has been upgraded to increase durability and improve cushion when traveling over uneven terrain and waves.`; recom2 = `;`; - if (S.HAT >= 3) guns = `A minigun`; guns2 = `has been mounted on the front corners of the craft to defend against attackers.`; - if (S.HAT >= 4) fans = `The turbines powering the rear fans`; speed = `acceleration and speed.`; turbines = `have been replaced with a more powerful version, allowing greater`; - if (S.HAT >= 5) armor10 = `The armor protecting its cargo has been increased.`; - if (S.HAT >= 6) tons = `300`; fans = `The turbines powering the rear fans and impeller`; speed = `acceleration, speed, and carrying capacity.`; - if (S.HAT >= 7) guns = `A minigun and grenade launcher`; - if (S.HAT >= 8) ramps = `The loading ramps have been improved, allowing for faster unloading.`; - if (S.HAT >= 9) HATframe = `The frame has been widened and reinforced, allowing for more space on the deck.`; - if (S.HAT >= 10) loadout = `An experimental loadout sacrifices all carrying capacity to instead act as a floating gun platform by mounting several rotary autocannons the deck, should the need arise.`; + if (S.HAT >= 2) skirt=`The skirt has been upgraded to increase durability and improve cushion when traveling over uneven terrain and waves.`; recom2=`;`; + if (S.HAT >= 3) guns=`A minigun`; guns2=`has been mounted on the front corners of the craft to defend against attackers.`; + if (S.HAT >= 4) fans=`The turbines powering the rear fans`; speed=`acceleration and speed.`; turbines=`have been replaced with a more powerful version, allowing greater`; + if (S.HAT >= 5) armor10=`The armor protecting its cargo has been increased.`; + if (S.HAT >= 6) tons=`300`; fans=`The turbines powering the rear fans and impeller`; speed=`acceleration, speed, and carrying capacity.`; + if (S.HAT >= 7) guns=`A minigun and grenade launcher`; + if (S.HAT >= 8) ramps=`The loading ramps have been improved, allowing for faster unloading.`; + if (S.HAT >= 9) HATframe=`The frame has been widened and reinforced, allowing for more space on the deck.`; + if (S.HAT >= 10) loadout=`An experimental loadout sacrifices all carrying capacity to instead act as a floating gun platform by mounting several rotary autocannons the deck, should the need arise.`; return `${r} An air cushion transport vehicle, or hovercraft ${recom2} is parked on the pier of the Naval Yard, ready to ferry ${tons} tons of soldiers and vehicles. ${guns} ${guns2} ${fans} ${turbines} ${speed} ${skirt} ${armor10} ${ramps} ${HATframe} ${loadout}`; } break; } /*if (V.SF.Facility.Toggle > 0 && V.SF.Facility.Active > 0) { r += `<br><br>''${V.SF.Facility.Caps}:''`; if (passage() === "Firebase") { - r += `<br>[[Enter the building|<< = SFReport()>>][]]`; + r += `<br>[[Enter the building|<<= SFReport()>>][]]`; } } else if (passage() === "SF_Report") { <<include "SF_.SupportFacilityReport">> @@ -963,22 +793,22 @@ window.UnitText = function(input) { }; /*window.FSIntegrationMenu = function() { - const V = State.variables; - const UpgradeOptions = ['Slaves','FoodsAndMedia','CommonArea','Barracks', 'SlaveProcessingCages','CommandCenter','Armory','DrugLab','Garage','Hangar', 'DroneBay','PersonalItems','VehicleUpgrades','CommonAreaVendors', 'RoleplayingManadated','ColonelCompilance','ColonelGift']; - const FS_OPTIONS = ['Repopulation','Eugenics','Gender radicalism','Gender traditionalism','Paternalism','Degradationism','Body Purism', 'Transformation Fetishism','Youth Preferentialism','Maturity Preferentialism','Slimness Enthusiasm','Asset Expansionism','Slave Pastoralism','Physical Idealism','Hedonistic Decadence','Chattel Religionism','Roman Revivalism','Aztec Revivalism','Egyptian Revivalism','Edo Revivalism','Arabian Revivalism','Chinese Revivalism','Multiculturalism']; - var text = ``; + const V=State.variables; + const UpgradeOptions=['Slaves','FoodsAndMedia','CommonArea','Barracks', 'SlaveProcessingCages','CommandCenter','Armory','DrugLab','Garage','Hangar', 'DroneBay','PersonalItems','VehicleUpgrades','CommonAreaVendors', 'RoleplayingManadated','ColonelCompilance','ColonelGift']; + const FS_OPTIONS=['Repopulation','Eugenics','Gender radicalism','Gender traditionalism','Paternalism','Degradationism','Body Purism', 'Transformation Fetishism','Youth Preferentialism','Maturity Preferentialism','Slimness Enthusiasm','Asset Expansionism','Slave Pastoralism','Physical Idealism','Hedonistic Decadence','Chattel Religionism','Roman Revivalism','Aztec Revivalism','Egyptian Revivalism','Edo Revivalism','Arabian Revivalism','Chinese Revivalism','Multiculturalism']; + var text=``; if (V.SF.FS === undefined) { text += `<br><br>`; //text += ``; - V.SF.FS = {Acceptance:{'FS':[],'Percent':[]}, Upgrade:0, Annoyance:0, Options:{ 'Slaves':[], 'FoodsAndMedia':[], 'CommonArea':[], 'Barracks':[], 'SlaveProcessingCages':[], 'CommandCenter':[], 'Armory':[], 'DrugLab':[], 'Garage':[], 'Hangar':[], 'DroneBay':[], 'PersonalItems':[], 'VehicleUpgrades':[], 'CommonAreaVendors':[], 'RoleplayingManadated':[], 'ColonelCompilance':[], 'ColonelGift':[] }}; - V.SF.Colonel.Talk = 1; + V.SF.FS={Acceptance:{'FS':[],'Percent':[]}, Upgrade:0, Annoyance:0, Options:{ 'Slaves':[], 'FoodsAndMedia':[], 'CommonArea':[], 'Barracks':[], 'SlaveProcessingCages':[], 'CommandCenter':[], 'Armory':[], 'DrugLab':[], 'Garage':[], 'Hangar':[], 'DroneBay':[], 'PersonalItems':[], 'VehicleUpgrades':[], 'CommonAreaVendors':[], 'RoleplayingManadated':[], 'ColonelCompilance':[], 'ColonelGift':[] }}; + V.SF.Colonel.Talk=1; } else { text += `You walk past The Colonel and move towards the common area to meet with an exclusive group of her very influential officers that are currently relaxing at their favorite table. These men and women are known for their competence, popularity, and authority within in their respective divisions of the ${V.SF.Lower}, they are hard to replace, and they are always looking to earn more coin; they are the perfect weak link for trickling your Future Society influences down into the Firebase. As the officers make room at their table for you to sit and join them for discussion, you spot The Colonel staring at you from afar, and she does not look happy with you. As you are her employer, she cannot stop you from speaking with her soldiers or moving around as you please, but she can tell that you are up to no good: <br><br>`; const MEMU_OPTION = function(VisableName,ArraryName,Cost) { - var FinalVisableName = VisableName; + var FinalVisableName=VisableName; if (ArraryName === 'ColonelGift') { switch(POS) { - case 'Repopulation': FinalVisableName += `Repopulationist`; break; + case 'Repopulation': FinalVisableName += ` Repopulationist`; break; case 'Eugenics': FinalVisableName += `Eugenicist`; break; case 'Gender radicalism': FinalVisableName += `Radicalist`; break; case 'Gender traditionalism': FinalVisableName += `Traditionalist`; break; @@ -1005,7 +835,7 @@ window.UnitText = function(input) { if (POS !== 'Multiculturalism') { FinalVisableName += `-themed` } - FinalVisableName += `personal gift optimized for this FS`; + FinalVisableName += ` personal gift optimized for this FS`; } text += `<<link "${FinalVisableName}""Firebase">> if ([${POS}].includes(V.SF.FS.FS)) { @@ -1029,18 +859,18 @@ window.UnitText = function(input) { V.SF.FS.Annoyance -= 15; } V.Cash -= cost; - V.SF.FS.Upgrade = 1; - <</link>> //costs <span class = 'yellowgreen'>${cashFormat($Cost)}</span>, `; + V.SF.FS.Upgrade=1; + <</link>> //costs <span class='yellowgreen'>${cashFormat($Cost)}</span>, `; if (ArraryName !== 'ColonelGift') { text += `increases`; - } else { text += `reduces`; } text += `The Colonel's annoyance by 15%`; - if (ArraryName !== 'ColonelGift') { text += `and will increase the acceptance of this FS by `; + } else { text += `reduces`; } text += ` The Colonel's annoyance by 15%`; + if (ArraryName !== 'ColonelGift') { text += ` and will increase the acceptance of this FS by `; if (ArraryName !== 'ColonelCompilance') { text += `6%`; } else { text += `10%`; } } text += `.`; } - const FSlist = FS_OPTIONS; - for(var i = 0;i<FSlist.length;i++) { - var FSPOS = FSlist[i]; + const FSlist=FS_OPTIONS; + for(let i = 0;i<FSlist.length;i++) { + let FSPOS=FSlist[i]; if (i > 0) text += `<br>`; switch(FSPOS) { case 'Repopulation': text += `Repopulation Efforts: focus on mass breeding in order to repopulate the future world.`; break; @@ -1065,43 +895,43 @@ window.UnitText = function(input) { case 'Edo Revivalism': text += `Edo Revivalism: a vision of Edo Japan.`; break; case 'Arabian Revivalism': text += `Arabian Revivalism: a vision of the Sultanate of old.`; break; case 'Chinese Revivalism': text += `Chinese Revivalism: a vision of ancient China.`; break; - case 'Multiculturalism': text += `Multiculturalism: a commitment to allow your arcology's citizens cultural freedom.`; break; + case 'Multiculturalism': text +=`Multiculturalism: a commitment to allow your arcology's citizens cultural freedom.`; break; } text += `\n Smuggle in FS-optimized : `; - const Optionslist = UpgradeOptions; - for (var i = 0;i<Optionslist.length;i++) { - var OptPOS = Optionslist[i]; - var title = ``; + const Optionslist=UpgradeOptions; + for (let i = 0;i<Optionslist.length;i++) { + var OptPOS=Optionslist[i]; + var title=``; switch(OptPOS) { - var cost = 200000; - case 'FoodsAndMedia': title = 'Common area decorations'; break; - case 'CommonArea': title = 'Barracks decorations'; break; - case 'Barracks': title = 'Barracks decorations`; break; - case 'SlaveProcessingCages': title = 'Slave Processing Cages decorations'; break; - case 'CommandCenter': title = 'Command Center decorations'; break; - case 'Armory': title = 'Armory decorations'; break; - case 'DrugLab': title = 'Drug Lab decorations'; break; - case 'Garage': title = 'Garage decorations'; break; - case 'Hangar': title = 'Hangar decorations'; break; - case 'DroneBay': title = 'Drone Bay decorations'; cost = 50000; break; - case 'PersonalItems': title = 'Personal Items'; break; - case 'VehicleUpgrades': title = 'Vehicle Upgrade'; cost = 300000; break; - case 'CommonAreaVendors': title = 'Firebase Vendors'; cost = 300000; break; - case 'RoleplayingManadated': title = 'Mandate FS-Roleplaying'; cost = 500000; break; - case 'ColonelCompilance': title = 'colonel compliance'; cost = 1000000; break; + var cost=200000; + case 'FoodsAndMedia': title='Common area decorations'; break; + case 'CommonArea': title='Barracks decorations'; break; + case 'Barracks': title='Barracks decorations`; break; + case 'SlaveProcessingCages': title='Slave Processing Cages decorations'; break; + case 'CommandCenter': title='Command Center decorations'; break; + case 'Armory': title='Armory decorations'; break; + case 'DrugLab': title='Drug Lab decorations'; break; + case 'Garage': title='Garage decorations'; break; + case 'Hangar': title='Hangar decorations'; break; + case 'DroneBay': title='Drone Bay decorations'; cost=50000; break; + case 'PersonalItems': title='Personal Items'; break; + case 'VehicleUpgrades': title='Vehicle Upgrade'; cost=300000; break; + case 'CommonAreaVendors': title='Firebase Vendors'; cost=300000; break; + case 'RoleplayingManadated': title='Mandate FS-Roleplaying'; cost=500000; break; + case 'ColonelCompilance': title='colonel compliance'; cost=1000000; break; } if (![FSPOS].includes(V.SF.Acceptance.FS)) { - MEMU_OPTION('Slaves','Slaves',cost), text += ``; + MEMU_OPTION('Slaves','Slaves',cost), text += ` `; } else { if (![FSPOS].includes(V.SF.FS.OptPOS)) { - MEMU_OPTION('title','OptPOS',cost), text += ``; + MEMU_OPTION('title','OptPOS',cost), text += ` `; } else if (![FSPOS].includes(V.SF.FS.ColonelGift)) { text += `\n `, MEMU_OPTION('Buy the Colonel a ','ColonelGift',1000000), text += ` `; - } + } } } } } text += `<br>`; return text; -};*/ +};*/ \ No newline at end of file diff --git a/src/art/artJS.js b/src/art/artJS.js index 35ac5896066726fd27fb3e4f35bf2ac8c9ec9dc3..830f4cb7811159459d6417c621c4cba68a3c98a8 100644 --- a/src/art/artJS.js +++ b/src/art/artJS.js @@ -1,3 +1,5 @@ +/* eslint-disable no-console */ +/* eslint-disable no-undef */ /* Call as <<= SlaveArt(...)>> or <<print SlaveArt(...)>> Displays slave images. Currently passage-based. @@ -208,7 +210,7 @@ window.extractColor = function (color, eyes) { }; window.clothing2artSuffix = function (v) { - if (v == "restrictive latex") { + if (v === "restrictive latex") { v = "latex"; } /* universal "special case": latex art is actually "restrictive latex" TODO: align name in vector source */ return v.replace(/^a[n]? /, "") /* remove "a" and "an" from the beginning*/ diff --git a/src/art/vector/VectorArtJS.js b/src/art/vector/VectorArtJS.js index 388a856059c0ee15b73a2b1406dfb7733c0e9297..39468cc85b66d2f272a5ab043b5368c4e11f1723 100644 --- a/src/art/vector/VectorArtJS.js +++ b/src/art/vector/VectorArtJS.js @@ -1,3 +1,5 @@ +/* eslint-disable no-case-declarations */ +/* eslint-disable no-undef */ window.VectorArt = (function () { "use strict"; let V, T, slave; @@ -1052,7 +1054,7 @@ window.VectorArt = (function () { /* TODO: rewrite all textual descriptions not to explicitly mention the latex being of black color. */ if (wearingLatex === true || slave.clothes === "a cybersuit") outfitBaseColour = slave.clothingBaseColor || "#515351"; /* use custom color, or use default latex color */ - else if (slave.clothes == "a comfortable bodysuit") + else if (slave.clothes === "a comfortable bodysuit") outfitBaseColour = slave.clothingBaseColor || "#464646"; /* use custom color, or use default bodysuit color */ /* head addons */ @@ -2640,7 +2642,7 @@ window.LegacyVectorArt = function(slave, artSize) { r += `<img class='paperdoll' src=${filePath}/outfit/chastity female.svg'/>`; r += `<img class='paperdoll' src=${filePath}/outfit/chastity base.svg'/>`; } else if (slave.pubicHStyle !== "waxed" && slave.pubicHStyle !== "bald" && slave.pubicHStyle !== "hairless") { - let pubicHStyle = (slave.pubicHStyle == "in a strip" ? "strip" : slave.pubicHStyle); + let pubicHStyle = (slave.pubicHStyle === "in a strip" ? "strip" : slave.pubicHStyle); r += `<img class='paperdoll' src=${filePath}/hair/pubes ${pubicHStyle}.svg' style='${pubesFilter}'/>`; } diff --git a/src/art/vector_revamp/vectorRevampedArtControl.js b/src/art/vector_revamp/vectorRevampedArtControl.js index 29245d09cd26b1b718566bda4bb83fed144b64f9..762a4b22599b2306f4dad2e1425c487e47620346 100644 --- a/src/art/vector_revamp/vectorRevampedArtControl.js +++ b/src/art/vector_revamp/vectorRevampedArtControl.js @@ -1,3 +1,5 @@ +/* eslint-disable no-unused-vars */ +/* eslint-disable no-undef */ window.RevampedVectorArt = function(slave) { const V = State.variables; const T = State.temporary; @@ -10,7 +12,7 @@ window.RevampedVectorArt = function(slave) { T.art_display_class = `ad${T.art_display_id}`; /*Using JS from vectorRevampedArtControl.tw*/ - T.revampedVectorArtControl = getVectorArtRevampedControl(T.art_display_class, slave, V.seeVectorArtHighlights, V.showBodyMods) + T.revampedVectorArtControl = getVectorArtRevampedControl(T.art_display_class, slave, V.seeVectorArtHighlights, V.showBodyMods); r = `<style>${T.revampedVectorArtControl.StylesCss}</style>`; T.revampedArtLayers = T.revampedVectorArtControl.Layers; @@ -23,7 +25,7 @@ window.RevampedVectorArt = function(slave) { T.revampedArtLayers.forEach(function(s) { r += jsInclude(s); }); return r; -} +}; window.getVectorArtRevampedControl = function(artDisplayClass, artSlave, globalShowHighlights, globalShowBodyMods) { return new RevampedArtControl(artDisplayClass, artSlave, globalShowHighlights, globalShowBodyMods); @@ -135,12 +137,12 @@ class ArtStyleControl { } applyEyeLensStyle() { - if (this.artSlave.eyeColor == null || this.artSlave.eyeColor == undefined) + if (this.artSlave.eyeColor === null || this.artSlave.eyeColor === undefined) return; var eyeColorSplit = this.artSlave.eyeColor.split(" "); - if (eyeColorSplit == 1) + if (eyeColorSplit === 1) return; var eyeLens = eyeColorSplit[0]; @@ -414,7 +416,7 @@ class ClothingControl { labiaSkin: { fill: defaultOutfitColor }, lips: { fill: areolaColor } } - } + }; } get niceMaid() { @@ -433,7 +435,7 @@ class ClothingControl { bellyUpperSkin: { fill: "#FFFFFF" }, bellyDetails: { "fill-opacity": 0 } } - } + }; } get sluttyMaid() { @@ -445,12 +447,12 @@ class ClothingControl { bellySkin: { fill: "#FFFFFF" }, bellyDetails: { "fill-opacity": 0 } } - } + }; } get restrictiveLatex() { var defaultOutfitColor = "#515351"; - var areolaColor = "#383838"; + var areolaColor = "#383838"; /** FIXME: 'areolaColor' is declared but its value is never read.ts(6133) */ return { bodySettings: { showEyes: false, @@ -477,7 +479,7 @@ class ClothingControl { bellyUpperSkin: { fill: defaultOutfitColor }, shoe: { fill: defaultOutfitColor } } - } + }; } get latexCatsuit() { @@ -515,7 +517,7 @@ class ClothingControl { shoe: { fill: defaultOutfitColor }, labiaSkin: { fill: defaultOutfitColor } } - } + }; } get bodyOil() { @@ -529,7 +531,7 @@ class ClothingControl { styleSettings: { } - } + }; } get bodysuit() { @@ -561,7 +563,7 @@ class ClothingControl { muscleTone: { "fill-opacity": 0 }, bellyDetails: { "fill-opacity": 0 } } - } + }; } get leotard() { @@ -589,7 +591,7 @@ class ClothingControl { muscleTone: { "fill-opacity": 0 }, bellyDetails: { "fill-opacity": 0 } } - } + }; } } @@ -639,11 +641,11 @@ class RevampedArtControl { this.pubicTattooText = ""; var clothing = this.getClothing(); - if (clothing != null) + if (clothing !== null) { - if (clothing.bodySettings != null) + if (clothing.bodySettings !== null) this.applyClothingSettings(clothing.bodySettings); - if (clothing.styleSettings != null) + if (clothing.styleSettings !== null) this.applyClothingStyleSettings(clothing.styleSettings); } @@ -666,7 +668,7 @@ class RevampedArtControl { } copyProperties(objTo, objFrom) { - for (var attr in objFrom) { + for (let attr in objFrom) { if (objFrom.hasOwnProperty(attr)) objTo[attr] = objFrom[attr]; } @@ -677,7 +679,7 @@ class RevampedArtControl { } applyClothingStyleSettings(styleSettings) { - for (var attr in styleSettings) { + for (let attr in styleSettings) { if (styleSettings.hasOwnProperty(attr)) this.copyProperties(this.styleControl[attr], styleSettings[attr]); } @@ -820,7 +822,7 @@ class RevampedArtControl { if (!this.showHair) return result; - if (this.artSlave.hLength == 0) + if (this.artSlave.hLength === 0) return result; switch(this.artSlave.hStyle) @@ -872,10 +874,10 @@ class RevampedArtControl { get armLayer() { var result = []; - var leftArmType = ""; - var rightArmType = ""; + var leftArmType = ""; /** FIXME: 'leftArmType' is declared but its value is never read.ts(6133) */ + var rightArmType = ""; /** FIXME: 'rightArmType' is declared but its value is never read.ts(6133) */ - if (this.artSlave.amp == 1) { + if (this.artSlave.amp === 1) { result.push("Art_Vector_Revamp_Arm_Stump"); } else { @@ -883,7 +885,7 @@ class RevampedArtControl { result.push("Art_Vector_Revamp_Arm_Left_"+this.leftArmType); } - if (this.showArmHair && (this.artSlave.amp == 1 || (this.leftArmType == "High" && this.artSlave.amp != 1))) + if (this.showArmHair && (this.artSlave.amp === 1 || (this.leftArmType === "High" && this.artSlave.amp !== 1))) { switch(this.artSlave.underArmHStyle) { @@ -923,7 +925,7 @@ class RevampedArtControl { get legLayer() { var result = []; - if (this.artSlave.amp == 1) { + if (this.artSlave.amp === 1) { result.push("Art_Vector_Revamp_Stump"); } else { @@ -932,7 +934,7 @@ class RevampedArtControl { if (this.artSlave.hips < 0) { legSize = this.artSlave.weight > 95 ? "Normal" : "Narrow"; } - else if (this.artSlave.hips == 0) { + else if (this.artSlave.hips === 0) { legSize = this.artSlave.weight > 95 ? "Wide" : "Normal"; } else if (this.artSlave.hips > 0) { @@ -954,7 +956,7 @@ class RevampedArtControl { get feetLayer() { var result = []; - if (this.artSlave.amp == 1) { + if (this.artSlave.amp === 1) { return result; } @@ -990,7 +992,7 @@ class RevampedArtControl { result.push("Art_Vector_Revamp_Torso_Highlights1"); } - if (this.showArmHair && this.leftArmType != "High" && this.artSlave.amp != 1) + if (this.showArmHair && this.leftArmType !== "High" && this.artSlave.amp !== 1) { switch(this.artSlave.underArmHStyle) { @@ -1025,9 +1027,9 @@ class RevampedArtControl { if (this.artSlave.physicalAge < 12) return result; - if (this.artSlave.vaginaTat == "rude words") + if (this.artSlave.vaginaTat === "rude words") { - this.pubicTattooText = this.artSlave.dick != 0 ? "Useless" : "Fucktoy"; + this.pubicTattooText = this.artSlave.dick !== 0 ? "Useless" : "Fucktoy"; result.push("Art_Vector_Revamp_Pussy_Tattoo"); } switch(this.artSlave.pubicHStyle) @@ -1058,16 +1060,16 @@ class RevampedArtControl { if (!this.showPussyPiercings) return result; - if (this.artSlave.vaginaPiercing == 1) + if (this.artSlave.vaginaPiercing === 1) result.push("Art_Vector_Revamp_Pussy_Piercing"); - else if (this.artSlave.vaginaPiercing == 2) + else if (this.artSlave.vaginaPiercing === 2) result.push("Art_Vector_Revamp_Pussy_Piercing_Heavy"); - if (this.artSlave.clitPiercing == 1) + if (this.artSlave.clitPiercing === 1) result.push("Art_Vector_Revamp_Clit_Piercing"); - else if (this.artSlave.clitPiercing == 2) + else if (this.artSlave.clitPiercing === 2) result.push("Art_Vector_Revamp_Clit_Piercing_Heavy"); - else if (this.artSlave.clitPiercing == 3) + else if (this.artSlave.clitPiercing === 3) result.push("Art_Vector_Revamp_Clit_Piercing_Smart"); return result; @@ -1076,11 +1078,11 @@ class RevampedArtControl { get chastityBeltLayer() { var result = []; - var isChastityAnalWorn = this.artSlave.chastityAnus == 1; + var isChastityAnalWorn = this.artSlave.chastityAnus === 1; isChastityAnalWorn = isChastityAnalWorn && this.showChastityAnal; - var isChastityVaginalWorn = this.artSlave.chastityVagina == 1; + var isChastityVaginalWorn = this.artSlave.chastityVagina === 1; isChastityVaginalWorn = isChastityVaginalWorn && this.showChastityVaginal; @@ -1152,7 +1154,7 @@ class RevampedArtControl { if (this.artSlave.navelPiercing >= 1) result.push("Art_Vector_Revamp_Belly_" + this.bellyLevel + "_Piercing"); - if (this.artSlave.navelPiercing == 2) + if (this.artSlave.navelPiercing === 2) result.push("Art_Vector_Revamp_Belly_" + this.bellyLevel + "_Piercing_Heavy"); } } @@ -1163,7 +1165,7 @@ class RevampedArtControl { if (this.artSlave.navelPiercing >= 1) result.push("Art_Vector_Revamp_Navel_Piercing"); - if (this.artSlave.navelPiercing == 2) + if (this.artSlave.navelPiercing === 2) result.push("Art_Vector_Revamp_Navel_Piercing_Heavy"); } } @@ -1199,23 +1201,23 @@ class RevampedArtControl { if (!this.showPenis || penisSize < 0) return result; - if (canAchieveErection(this.artSlave) && (this.artSlave.chastityPenis != 1)) + if (canAchieveErection(this.artSlave) && (this.artSlave.chastityPenis !== 1)) { result.push("Art_Vector_Revamp_Penis_" + penisSize); if (!this.showPenisPiercings) return result; - if (this.artSlave.dickPiercing == 1) + if (this.artSlave.dickPiercing === 1) result.push("Art_Vector_Revamp_Penis_" + penisSize + "_Piercing"); - else if (this.artSlave.dickPiercing == 2) + else if (this.artSlave.dickPiercing === 2) result.push("Art_Vector_Revamp_Penis_" + penisSize + "_Piercing_Heavy"); } else { result.push("Art_Vector_Revamp_Flaccid_" + penisSize); - if (this.artSlave.chastityPenis == 1) { + if (this.artSlave.chastityPenis === 1) { result.push("Art_Vector_Revamp_Chastity_Cage_" + penisSize); } } @@ -1305,7 +1307,7 @@ class RevampedArtControl { if (this.showNipples) { - var areolaeShape = "Normal"; + let areolaeShape = "Normal"; switch(this.artSlave.areolae) { @@ -1366,14 +1368,14 @@ class RevampedArtControl { size = "Huge"; } - if (this.artSlave.nipplesPiercing == 1) + if (this.artSlave.nipplesPiercing === 1) { if (this.artSlave.boobs < 300) result.push("Art_Vector_Revamp_Boob_None_Piercing"); else result.push("Art_Vector_Revamp_Boob_" + size + "_Piercing"); } - else if (this.artSlave.nipplesPiercing == 2) + else if (this.artSlave.nipplesPiercing === 2) { if (this.artSlave.boobs < 300) result.push("Art_Vector_Revamp_Boob_None_Piercing_Heavy"); @@ -1381,14 +1383,14 @@ class RevampedArtControl { result.push("Art_Vector_Revamp_Boob_" + size + "_Piercing_Heavy"); } - if (this.artSlave.areolaePiercing == 1) + if (this.artSlave.areolaePiercing === 1) { if (this.artSlave.boobs < 300) result.push("Art_Vector_Revamp_Boob_None_Areola_Piercing"); else result.push("Art_Vector_Revamp_Boob_" + size + "_Areola_Piercing"); } - else if (this.artSlave.areolaePiercing == 2) + else if (this.artSlave.areolaePiercing === 2) { if (this.artSlave.boobs < 300) result.push("Art_Vector_Revamp_Boob_None_Areola_Piercing_Heavy"); @@ -1408,10 +1410,10 @@ class RevampedArtControl { { if (this.artSlave.boobs < 600) { - var artScaleFactor = 0.288539*Math.log(0.106667*this.artSlave.boobs); - var artTranslationX = 270*((-1*artScaleFactor) + 1); - var artTranslationY = 198*((-1*artScaleFactor) + 1);//-198.438*artScaleFactor+203.274; - var artBoobTransform = "matrix(" + artScaleFactor +",0,0," + artScaleFactor + "," + artTranslationX + "," + artTranslationY + ")"; + let artScaleFactor = 0.288539*Math.log(0.106667*this.artSlave.boobs); + let artTranslationX = 270*((-1*artScaleFactor) + 1); + let artTranslationY = 198*((-1*artScaleFactor) + 1);//-198.438*artScaleFactor+203.274; + let artBoobTransform = "matrix(" + artScaleFactor +",0,0," + artScaleFactor + "," + artTranslationX + "," + artTranslationY + ")"; this.boobOutfitArtTransform = artBoobTransform; @@ -1419,19 +1421,19 @@ class RevampedArtControl { } else if (this.artSlave.boobs < 15000) { - var artScaleFactor = 0.155334*Math.log(1.04167*this.artSlave.boobs); - var artTranslationX = 270*((-1.25*artScaleFactor) + 1.25); - var artTranslationY = 198*((-0.8*artScaleFactor) + 0.8);//-198.438*artScaleFactor+203.274; - var artBoobTransform = "matrix(" + artScaleFactor +",0,0," + artScaleFactor + "," + artTranslationX + "," + artTranslationY + ")"; + let artScaleFactor = 0.155334*Math.log(1.04167*this.artSlave.boobs); + let artTranslationX = 270*((-1.25*artScaleFactor) + 1.25); + let artTranslationY = 198*((-0.8*artScaleFactor) + 0.8);//-198.438*artScaleFactor+203.274; + let artBoobTransform = "matrix(" + artScaleFactor +",0,0," + artScaleFactor + "," + artTranslationX + "," + artTranslationY + ")"; this.boobOutfitArtTransform = artBoobTransform; result.push("Art_Vector_Revamp_Boob_Medium_Outfit_Maid"); } else { - var artScaleFactor = 1.56609*Math.log(0.00017373*this.artSlave.boobs); - var artTranslationX = 340*((-1*artScaleFactor) + 1); - var artTranslationY = 153*((-1*artScaleFactor) + 1);//-198.438*artScaleFactor+203.274; - var artBoobTransform = "matrix(" + artScaleFactor +",0,0," + artScaleFactor + "," + artTranslationX + "," + artTranslationY + ")"; + let artScaleFactor = 1.56609*Math.log(0.00017373*this.artSlave.boobs); + let artTranslationX = 340*((-1*artScaleFactor) + 1); + let artTranslationY = 153*((-1*artScaleFactor) + 1);//-198.438*artScaleFactor+203.274; + let artBoobTransform = "matrix(" + artScaleFactor +",0,0," + artScaleFactor + "," + artTranslationX + "," + artTranslationY + ")"; this.boobOutfitArtTransform = artBoobTransform; result.push("Art_Vector_Revamp_Boob_Huge_Outfit_Maid"); @@ -1506,14 +1508,14 @@ class RevampedArtControl { if (!this.showHeadPiercings) return result; - if (this.artSlave.earPiercing == 1) + if (this.artSlave.earPiercing === 1) result.push("Art_Vector_Revamp_Head_Ear_Piercing"); - else if (this.artSlave.earPiercing == 2) + else if (this.artSlave.earPiercing === 2) result.push("Art_Vector_Revamp_Head_Ear_Piercing_Heavy"); - if (this.artSlave.nosePiercing == 1) + if (this.artSlave.nosePiercing === 1) result.push("Art_Vector_Revamp_Head_Nose_Piercing"); - else if (this.artSlave.nosePiercing == 2) + else if (this.artSlave.nosePiercing === 2) result.push("Art_Vector_Revamp_Head_Nose_Piercing_Heavy"); return result; @@ -1532,9 +1534,9 @@ class RevampedArtControl { if (this.showHeadPiercings) { - if (this.artSlave.eyebrowPiercing == 1) + if (this.artSlave.eyebrowPiercing === 1) result.push("Art_Vector_Revamp_Head_Eyebrow_Happy_Piercing"); - else if (this.artSlave.eyebrowPiercing == 2) + else if (this.artSlave.eyebrowPiercing === 2) result.push("Art_Vector_Revamp_Head_Eyebrow_Happy_Piercing_Heavy"); } } @@ -1545,9 +1547,9 @@ class RevampedArtControl { if (this.showHeadPiercings) { - if (this.artSlave.eyebrowPiercing == 1) + if (this.artSlave.eyebrowPiercing === 1) result.push("Art_Vector_Revamp_Head_Eyebrow_Shy_Piercing"); - else if (this.artSlave.eyebrowPiercing == 2) + else if (this.artSlave.eyebrowPiercing === 2) result.push("Art_Vector_Revamp_Head_Eyebrow_Shy_Piercing_Heavy"); } } @@ -1557,9 +1559,9 @@ class RevampedArtControl { if (this.showHeadPiercings) { - if (this.artSlave.eyebrowPiercing == 1) + if (this.artSlave.eyebrowPiercing === 1) result.push("Art_Vector_Revamp_Head_Eyebrow_Closed_Piercing"); - else if (this.artSlave.eyebrowPiercing == 2) + else if (this.artSlave.eyebrowPiercing === 2) result.push("Art_Vector_Revamp_Head_Eyebrow_Closed_Piercing_Heavy"); } } @@ -1569,9 +1571,9 @@ class RevampedArtControl { result.push("Art_Vector_Revamp_Eyes_Angry_Highlights"); if (this.showHeadPiercings) { - if (this.artSlave.eyebrowPiercing == 1) + if (this.artSlave.eyebrowPiercing === 1) result.push("Art_Vector_Revamp_Head_Eyebrow_Angry_Piercing"); - else if (this.artSlave.eyebrowPiercing == 2) + else if (this.artSlave.eyebrowPiercing === 2) result.push("Art_Vector_Revamp_Head_Eyebrow_Angry_Piercing_Heavy"); } } @@ -1606,9 +1608,9 @@ class RevampedArtControl { if (this.showHeadPiercings) { - if (this.artSlave.lipsPiercing == 1) + if (this.artSlave.lipsPiercing === 1) result.push("Art_Vector_Revamp_Head_Mouth_Happy_Piercing"); - else if (this.artSlave.lipsPiercing == 2) + else if (this.artSlave.lipsPiercing === 2) result.push("Art_Vector_Revamp_Head_Mouth_Happy_Piercing_Heavy"); } } @@ -1619,9 +1621,9 @@ class RevampedArtControl { if (this.showHeadPiercings) { - if (this.artSlave.lipsPiercing == 1) + if (this.artSlave.lipsPiercing === 1) result.push("Art_Vector_Revamp_Head_Mouth_Angry_Piercing"); - else if (this.artSlave.lipsPiercing == 2) + else if (this.artSlave.lipsPiercing === 2) result.push("Art_Vector_Revamp_Head_Mouth_Angry_Piercing_Heavy"); } } @@ -1668,7 +1670,7 @@ class RevampedArtControl { if (!this.showHair) return result; - if (this.artSlave.hLength == 0) + if (this.artSlave.hLength === 0) return result; switch(this.artSlave.hStyle) diff --git a/src/debugging/debugJS.js b/src/debugging/debugJS.js index 5e94aaa4a4461bcd9317eedf485eac465eb606ad..5675664ec6d6537aa37c7309676c06da467d7f70 100644 --- a/src/debugging/debugJS.js +++ b/src/debugging/debugJS.js @@ -1,3 +1,5 @@ +/* eslint-disable no-empty */ +/* eslint-disable no-undef */ /* Given an object, this will return an array where for each property of the original object, we include the object {variable: property, oldVal: _oldDiff.property, newVal: _newDiff.property} @@ -17,12 +19,15 @@ window.difference = function difference(o1, o2) { var k, kDiff, diff = {}; for (k in o1) { if (!o1.hasOwnProperty(k)) { - } else if (typeof o1[k] != 'object' || typeof o2[k] != 'object') { + } else if (typeof o1[k] !== 'object' || typeof o2[k] !== 'object') { if (!(k in o2) || o1[k] !== o2[k]) { diff[k] = o2[k]; } - } else if (kDiff = difference(o1[k], o2[k])) { - diff[k] = kDiff; + } else { + kDiff = difference(o1[k], o2[k]) + if (kDiff) { + diff[k] = kDiff; + } } } for (k in o2) { @@ -51,11 +56,11 @@ window.diffFlatten = function diffFlatten(data) { } else if (Array.isArray(cur)) { for(var i=0, l=cur.length; i<l; i++) recurse(cur[i], prop + "[" + i + "]"); - if (l == 0) + if (l === 0) result[prop] = []; } else { var isEmpty = true; - for (var p in cur) { + for (let p in cur) { isEmpty = false; recurse(cur[p], prop ? prop+"."+p : p); } @@ -73,7 +78,7 @@ Finds all NaN values anywhere in the State.variables object. Returns an array wi window.findNaN = function findNan() { const flatV = diffFlatten(State.variables); var result = []; - for (var key in flatV) { + for (let key in flatV) { if (Number.isNaN(flatV[key])) { result.push('$$'+key); /* double dollar signs to escape sugarcube markup */ } @@ -105,7 +110,7 @@ App.Debug.dumpGameState = function () { oldHandler(save); } downloadToFile(JSON.stringify(save, null, 2), save.id + ".json", "text/plain"); - } + }; SugarCube.Save.serialize(); } finally { SugarCube.Config.saves.onSave = oldHandler; diff --git a/src/endWeek/saChoosesOwnClothes.js b/src/endWeek/saChoosesOwnClothes.js index 8b1b2e3e80d4cb7de59b7d413f89d89829e70c36..78451c250e5f0cb8b51174fad58f1740bac840e1 100644 --- a/src/endWeek/saChoosesOwnClothes.js +++ b/src/endWeek/saChoosesOwnClothes.js @@ -1,3 +1,5 @@ +/* eslint-disable no-undef */ +/* eslint-disable no-unused-vars */ window.saChoosesOwnClothes = (function() { "use strict"; let V; @@ -62,7 +64,7 @@ window.saChoosesOwnClothes = (function() { r += `${He} <span class="hotpink">loves</span> being able to dress ${himself}, ${neckChoice.text} ${corsetChoice.text} ${clothingChoice.text} `; slave.devotion += 1; - if (V.arcologies[0].FSRestart !== "unset" && slave.choosesOwnChastity == 1) { + if (V.arcologies[0].FSRestart !== "unset" && slave.choosesOwnChastity === 1) { if (slave.vagina > -1 && slave.breedingMark === 1 && slave.chastityVagina === 1) { r += `${He} unfastens ${his} chastity belt knowing full well ${his} role in life is to carry ${his} ${WrittenMaster(slave)}'s children. `; slave.chastityVagina = 0; @@ -100,7 +102,7 @@ window.saChoosesOwnClothes = (function() { let wardrobeTastes = []; let selection; - if(slave.fetish == 'mindbroken') { + if(slave.fetish === 'mindbroken') { if(V.arcologies[0].FSChattelReligionist > 0) { selection = {text: `${he} commonly sees others wearing chattel habits and is drawn to doing so ${himself}.`, clothes: "a chattel habit"}; } else { @@ -161,7 +163,7 @@ window.saChoosesOwnClothes = (function() { selection = {text: `${he} commonly sees others wearing qipaos and is drawn to doing so ${himself}.`, clothes: "a slutty qipao"}; break; case 'genderFund': - if(jsRandom(1,2) == 1) { + if(jsRandom(1,2) === 1) { selection = {text: `${he} commonly sees cheerleaders around and instinctually follows along.`, clothes: jsEither(['a cheerleader outfit', 'a schoolgirl outfit'])}; } else { selection = {text: `${he} commonly sees bunnies around and instinctually follows along.`, clothes: "a bunny outfit"}; @@ -213,7 +215,7 @@ window.saChoosesOwnClothes = (function() { clothing.push({text: `and wears a chattel habit to conform to your arcology's culture.`, clothes: "a chattel habit"}); } /*Chooses clothes according to assignment (no exceptions)*/ - else if(slave.assignment == "be the Nurse") { + else if(slave.assignment === "be the Nurse") { if(slave.energy > 95 || slave.need > 100) { wardrobeAssignment.push({text: `and wears a slutty nurse outfit to make it clear just how much this nurse needs ${his} daily lay.`, clothes: "a slutty nurse outfit"}); } else if(slave.energy > 80) { @@ -228,7 +230,7 @@ window.saChoosesOwnClothes = (function() { } wardrobeAssignment.push({text: `and wears a slutty nurse outfit to show to a little skin as ${he} cares for ${his} patients.`, clothes: "a slutty nurse outfit"}); } - } else if(slave.assignment == "be the Madam") { + } else if(slave.assignment === "be the Madam") { if(slave.energy > 95 || slave.need > 100) { wardrobeAssignment.push({text: `and wears a slutty suit to be certain nothing blocks ${him} from getting the sex ${he} needs.`, clothes: "slutty business attire"}); } else if(slave.energy > 80) { @@ -243,7 +245,7 @@ window.saChoosesOwnClothes = (function() { } wardrobeAssignment.push({text: `and wears a slutty suit to entice and arouse while still looking managerial.`, clothes: "slutty business attire"}); } - } else if(slave.assignment == "be the Milkmaid") { + } else if(slave.assignment === "be the Milkmaid") { if(slave.energy > 95 || slave.need > 100) { if(isItemAccessible("body oil")) { wardrobeAssignment.push({text: `and coats ${himself} with oil to better slip between ${his} cows as ${he} pleasures them.`, clothes: "body oil"}); @@ -272,7 +274,7 @@ window.saChoosesOwnClothes = (function() { } } } - } else if(slave.assignment == "be your Head Girl") { + } else if(slave.assignment === "be your Head Girl") { if(isItemAccessible("a military uniform")) { wardrobeAssignment.push({text: `and wears a military uniform to give ${him} that extra touch of authority.`, clothes: "a military uniform"}); } @@ -294,7 +296,7 @@ window.saChoosesOwnClothes = (function() { } else { wardrobeAssignment.push({text: `and wears a slutty suit to give ${him} an extra touch of authority while keeping ${his} crotch available.`, clothes: "slutty business attire"}); } - } else if(slave.assignment == "be the Schoolteacher") { + } else if(slave.assignment === "be the Schoolteacher") { if(isItemAccessible("nice business attire")) { wardrobeAssignment.push({text: `and wears a handsome suit to give ${him} that teacherly authority.`, clothes: "nice business attire"}); } @@ -310,7 +312,7 @@ window.saChoosesOwnClothes = (function() { if(isItemAccessible("a maternity dress") && slave.belly >= 10000) { wardrobeAssignment.push({text: `and settles for a comfortable maternity dress to support ${his} middle while ${he} lectures in front of the class all week.`, clothes: "a maternity dress"}); } - } else if(slave.assignment == "be the Wardeness") { + } else if(slave.assignment === "be the Wardeness") { if(isItemAccessible("battledress")) { wardrobeAssignment.push({text: `and dons battledress, the better to intimidate the prisoners.`, clothes: "battledress"}); } @@ -329,7 +331,7 @@ window.saChoosesOwnClothes = (function() { if(isItemAccessible("stretch pants and a crop-top")) { wardrobeAssignment.push({text: `and decides to take it easy by slipping into some stretch pants. They come off just as quickly as they come on, just in case.`, clothes: "stretch pants and a crop-top"}); } - } else if(slave.assignment == "be the Attendant") { + } else if(slave.assignment === "be the Attendant") { wardrobeAssignment.push({text: `and wears a string bikini, since it's all ${he} can wear that won't be ruined by all the moisture in the spa.`, clothes: "a string bikini"}); if(isItemAccessible("a monokini")) { wardrobeAssignment.push({text: `and wears an one-piece swimsuit, since it's all ${he} can wear that won't be ruined by all the moisture in the spa.`, clothes: "a monokini"}); @@ -341,7 +343,7 @@ window.saChoosesOwnClothes = (function() { wardrobeAssignment.push({text: `and wears a modest swimsuit, since it's all ${he} can wear that won't be ruined by all the moisture in the spa.`, clothes: "a burkini"}); } wardrobeAssignment.push({text: `but decides to go nude, since ${he}'ll be spending so much time in the water.`, clothes: "no clothing"}); - } else if(slave.assignment == "rest") { + } else if(slave.assignment === "rest") { wardrobeAssignment.push({text: `and wears a comfortable t-shirt and cutoffs to relax.`, clothes: "cutoffs and a t-shirt"}); wardrobeAssignment.push({text: `and slips into some attractive lingerie to enjoy ${himself} as ${he} unwinds.`, clothes: "attractive lingerie"}); wardrobeAssignment.push({text: `and slips into nothing more than a pair of panties.`, clothes: "panties"}); @@ -352,10 +354,10 @@ window.saChoosesOwnClothes = (function() { if(isItemAccessible("attractive lingerie for a pregnant woman") && slave.belly >= 1500) { wardrobeAssignment.push({text: `and slips into some attractive lingerie to enjoy ${himself} as ${he} unwinds.`, clothes: "attractive lingerie for a pregnant woman"}); } - if(slave.fetish == "submissive") { + if(slave.fetish === "submissive") { wardrobeAssignment.push({text: `and decides the best way to relax is tied up nice and tight.`, clothes: "shibari ropes"}); } - } else if(slave.assignment == "get milked" || slave.assignment == "work in the dairy") { + } else if(slave.assignment === "get milked" || slave.assignment === "work in the dairy") { wardrobeAssignment.push({text: `and wears sturdy lingerie to offer the best support to ${his} sore, milk-filled udders.`, clothes: "attractive lingerie"}); if(isItemAccessible("attractive lingerie for a pregnant woman") && slave.belly >= 1500) { wardrobeAssignment.push({text: `and wears lingerie designed for milky mothers.`, clothes: "attractive lingerie for a pregnant woman"}); @@ -368,7 +370,7 @@ window.saChoosesOwnClothes = (function() { wardrobeAssignment.push({text: `but goes nude. There's no time for clothing, ${his} udders need to be drained now!`, clothes: "no clothing"}); } wardrobeAssignment.push({text: `and dons a slutty outfit. If ${his} breasts are going to hang out, might as well wear something to complement them.`, clothes: "a slutty outfit"}); - } else if(slave.assignment == "guard you") { + } else if(slave.assignment === "guard you") { wardrobeAssignment.push({text: `and wears a bodysuit to show off ${his} curves without hindering ${his} deadliness.`, clothes: "a comfortable bodysuit"}); if(isItemAccessible("a military uniform")) { wardrobeAssignment.push({text: `and wears a military uniform to look the part of the honor guard.`, clothes: "a military uniform"}); @@ -392,7 +394,7 @@ window.saChoosesOwnClothes = (function() { } } else { /*Chooses clothes according to assignment (exceptions allowed)*/ - if(slave.assignment == "recruit girls") { + if(slave.assignment === "recruit girls") { if(isItemAccessible("a mini dress")) { wardrobeAssignment.push({text: `and wears a flattering mini dress to appear sexy and carefree before those desperately seeking a better life.`, clothes: "a mini dress"}); } @@ -414,7 +416,7 @@ window.saChoosesOwnClothes = (function() { if(isItemAccessible("conservative clothing")) { wardrobeAssignment.push({text: `and wears normal clothing to suggest to those desperately seeking a better life that they can find it here with you.`, clothes: "conservative clothing"}); } - } else if(slave.assignment == "be the DJ") { + } else if(slave.assignment === "be the DJ") { wardrobeAssignment.push({text: `and wears clubslut netting to look like the perfect easy club girl.`, clothes: "clubslut netting"}); wardrobeAssignment.push({text: `and wears cutoffs and a t-shirt to look like the perfect easy club girl.`, clothes: "cutoffs and a t-shirt"}); wardrobeAssignment.push({text: `and wears the slutty outfit ${he} can find to look like the perfect easy club girl.`, clothes: "a slutty outfit"}); @@ -426,40 +428,40 @@ window.saChoosesOwnClothes = (function() { if(isItemAccessible("harem gauze")) { wardrobeAssignment.push({text: `and wears the finest available silks to give ${his} moves a sensual grace.`, clothes: "harem gauze"}); } - } else if(slave.assignment == "be your Concubine") { + } else if(slave.assignment === "be your Concubine") { wardrobeAssignment.push({text: `and goes naked, since it's ${his} honored role to be the chief object of your desire.`, clothes: "no clothing"}); wardrobeAssignment.push({text: `and dresses as a slutty nurse as your genitals are always in need of ${his} special treatment.`, clothes: "a slutty nurse outfit"}); wardrobeAssignment.push({text: `and dresses as a schoolgirl in the hopes that you teach ${him} how to be a woman.`, clothes: "a schoolgirl outfit"}); wardrobeAssignment.push({text: `and dresses as a cheerleader so ${he} may cheer you on as you blow ${his} mind.`, clothes: "a cheerleader outfit"}); - if(player.dick == 1) { + if(player.dick === 1) { wardrobeAssignment.push({text: `and dresses as a slutty maid as you always come home with a stiff package that needs a thorough polishing.`, clothes: "a slutty maid outfit"}); } wardrobeAssignment.push({text: `and, since you personally see that ${he} never goes hungry, ${he} dresses like the sex demoness ${he} is.`, clothes: "a succubus outfit"}); - if(isItemAccessible("attractive lingerie for a pregnant woman") && slave.belly >= 10000 && slave.pregSource == -1) { + if(isItemAccessible("attractive lingerie for a pregnant woman") && slave.belly >= 10000 && slave.pregSource === -1) { wardrobeAssignment.push({text: `and chooses attractive lingerie to showcase the body you've given ${him} in the hopes that you ravish ${him}.`, clothes: "attractive lingerie for a pregnant woman"}); } - if(slave.toyHole == "dick" && canPenetrate(slave)) { + if(slave.toyHole === "dick" && canPenetrate(slave)) { wardrobeAssignment.push({text: `and slips into a scalemail bikini so ${he} can act the role of your conqueror as ${he} bends you over.`, clothes: "a scalemail bikini"}); } - } else if(slave.assignment == "be a subordinate slave") { + } else if(slave.assignment === "be a subordinate slave") { wardrobeAssignment.push({text: `but gives up and goes naked after the other slaves constantly tear whatever ${he}'s wearing off ${him}.`, clothes: "no clothing"}); if(isItemAccessible("Western clothing")) { wardrobeAssignment.push({text: `and chooses a pair of crotchless chaps so your other slaves don't have to waste time undressing ${him}.`, clothes: "Western clothing"}); } - if(slave.fetish == "submissive") { + if(slave.fetish === "submissive") { wardrobeAssignment.push({text: `and chooses to slip on a pair of spats and a tank top in the hopes that ${he} gets to be a violated schoolgirl.`, clothes: "spats and a tank top"}); wardrobeAssignment.push({text: `and chooses to slip on a schoolgirl outfit in the hope that ${he} gets held down and raped.`, clothes: "a schoolgirl outfit"}); wardrobeAssignment.push({text: `and chooses to wear the sluttiest outfit available to make it clear what ${he} wants done to ${him}.`, clothes: "a slutty outfit"}); } - } else if(slave.assignment == "work a glory hole") { + } else if(slave.assignment === "work a glory hole") { wardrobeAssignment.push({text: `but doesn't bother wearing anything, since no one can see ${his} clothing when ${he}'s immured inside a glory hole.`, clothes: "no clothing"}); - } else if(slave.assignment == "take classes" || slave.assignment == "learn in the schoolroom") { + } else if(slave.assignment === "take classes" || slave.assignment === "learn in the schoolroom") { wardrobeAssignment.push({text: `and wears a schoolgirl outfit, since it seems most appropriate.`, clothes: "a schoolgirl outfit"}); wardrobeAssignment.push({text: `and wears a cheerleader outfit, since ${he} might as well be one of the popular girls.`, clothes: "a cheerleader outfit"}); if(isItemAccessible("conservative clothing")) { wardrobeAssignment.push({text: `and wears normal clothing to not distract from ${his} lessons.`, clothes: "conservative clothing"}); } - } else if((slave.assignment == "whore") || (slave.assignment == "work in the brothel")) { + } else if((slave.assignment === "whore") || (slave.assignment === "work in the brothel")) { if(slave.belly >= 5000 && isItemAccessible("attractive lingerie for a pregnant woman")) { wardrobeAssignment.push({text: `and wears pretty lingerie to show off ${his} merchandise and accentuate ${his} pregnancy while still looking a little classy.`, clothes: "attractive lingerie for a pregnant woman"}); } @@ -480,7 +482,7 @@ window.saChoosesOwnClothes = (function() { if(isItemAccessible("a mini dress")) { wardrobeAssignment.push({text: `and wears a flattering mini dress to really strut ${his} stuff.`, clothes: "a mini dress"}); } - } else if(slave.assignment == "serve the public" || slave.assignment == "serve in the club") { + } else if(slave.assignment === "serve the public" || slave.assignment === "serve in the club") { wardrobeAssignment.push({text: `and wears string lingerie to look fun and fuckable.`, clothes: "a string bikini"}); wardrobeAssignment.push({text: `and throws together the sluttiest outfit since if you're going to slut you might as well go all out.`, clothes: "a slutty outfit"}); wardrobeAssignment.push({text: `and tosses on a slutty suit that screams ${he} needs a good fuck after a long day.`, clothes: "slutty business attire"}); @@ -493,7 +495,7 @@ window.saChoosesOwnClothes = (function() { if(slave.bellyPreg >= 10000) { wardrobeAssignment.push({text: `and struggles into a schoolgirl outfit. ${His} gravid belly just screams that ${he} is a slutty little student who cares more for dick than lessons.`, clothes: "a succubus outfit"}); } - } else if(slave.assignment == "be a servant" || slave.assignment == "work as a servant") { + } else if(slave.assignment === "be a servant" || slave.assignment === "work as a servant") { if(slave.energy > 95 || slave.need > 100) { wardrobeAssignment.push({text: `and wears a skimpy maid outfit hoping that someone sneaks up behind ${him} as ${he} works and fulfills ${his} desires.`, clothes: "a slutty maid outfit"}); wardrobeAssignment.push({text: `and wears nothing more than an apron in the hopes that someone sneaks up behind ${him} as ${he} works and fulfills ${his} desires.`, clothes: "an apron"}); @@ -543,7 +545,7 @@ window.saChoosesOwnClothes = (function() { } if(V.arcologies[0].FSPaternalist > 0) { wardrobeFS.push({text: `and wears conservative clothing, as permitted by your paternalism.`, clothes: "conservative clothing"}); - if(isItemAccessible("a hijab and blouse") && slave.race == "middle eastern") { + if(isItemAccessible("a hijab and blouse") && slave.race === "middle eastern") { wardrobeFS.push({text: `and wears very conservative clothing, as permitted by your paternalism.`, clothes: "a hijab and blouse"}); } if(isItemAccessible("stretch pants and a crop-top")) { @@ -635,14 +637,14 @@ window.saChoosesOwnClothes = (function() { } } if(V.arcologies[0].FSSupremacist > 0) { - if(V.arcologies[0].FSSupremacistRace == "white") { + if(V.arcologies[0].FSSupremacistRace === "white") { if(isItemAccessible("a dirndl")) { wardrobeFS.push({text: `and wears one of the beautiful folk costumes of the white race.`, clothes: "a dirndl"}); } if(isItemAccessible("lederhosen")) { wardrobeFS.push({text: `and wears one of the beautiful folk costumes of the white race.`, clothes: "lederhosen"}); } - } else if(V.arcologies[0].FSSupremacistRace == "asian") { + } else if(V.arcologies[0].FSSupremacistRace === "asian") { if(isItemAccessible("a biyelgee costume")) { wardrobeFS.push({text: `and wears one of the beautiful folk costumes of the asian race.`, clothes: "a biyelgee costume"}); } @@ -657,7 +659,7 @@ window.saChoosesOwnClothes = (function() { /*Chooses clothes according to fetishes, quirks, etc.*/ if(slave.attrXY > 70) { - if(slave.attrKnown == 1) { + if(slave.attrKnown === 1) { wardrobeTastes.push({text: `and wears a schoolgirl outfit to show off a some T&A to attract boys.`, clothes: "a schoolgirl outfit"}); wardrobeTastes.push({text: `and wears nothing but pretty lingerie to attract boys.`, clothes: "attractive lingerie"}); wardrobeTastes.push({text: `and selects a slutty outfit that's sure to have men drooling.`, clothes: "a slutty outfit"}); @@ -686,7 +688,7 @@ window.saChoosesOwnClothes = (function() { } } if(slave.attrXX > 70) { - if(slave.attrKnown == 1) { + if(slave.attrKnown === 1) { if(isItemAccessible("a slave gown")) { wardrobeTastes.push({text: `and wears a fashionable gown, since girls appreciate nice clothes.`, clothes: "a slave gown"}); } @@ -715,38 +717,38 @@ window.saChoosesOwnClothes = (function() { } /* quirks n flaws */ - if(slave.behavioralFlaw == "arrogant") { + if(slave.behavioralFlaw === "arrogant") { if(isItemAccessible("a ball gown")) { wardrobeTastes.push({text: `and chooses a formal dress that makes ${him} feel like royalty.`, clothes: "a ball gown"}); } - } else if(slave.behavioralFlaw == "devout") { + } else if(slave.behavioralFlaw === "devout") { wardrobeTastes.push({text: `and wears something more appropriate for a monastery than a whorehouse.`, clothes: "a penitent nuns habit"}); } - if(slave.behavioralQuirk == "sinful") { + if(slave.behavioralQuirk === "sinful") { wardrobeTastes.push({text: `and dresses up like a succubus because it makes ${him} feel naughty.`, clothes: "a succubus outfit"}); - } else if(slave.behavioralQuirk == "fitness") { + } else if(slave.behavioralQuirk === "fitness") { wardrobeTastes.push({text: `and wears spats and a tank top to give ${himself} a sporty look.`, clothes: "spats and a tank top"}); } - if(slave.sexualFlaw == "shamefast") { + if(slave.sexualFlaw === "shamefast") { wardrobeTastes.push({text: `and chooses an outfit that covers ${him} up as much as possible.`, clothes: "a hijab and abaya"}); - } else if(slave.sexualFlaw == "breeder") { + } else if(slave.sexualFlaw === "breeder") { if(isItemAccessible("attractive lingerie for a pregnant woman")) { wardrobeTastes.push({text: `and wears lingerie designed to accommodate pregnancies, hoping that others get the hint.`, clothes: "attractive lingerie for a pregnant woman"}); } - } else if(slave.sexualFlaw == "malicious") { + } else if(slave.sexualFlaw === "malicious") { if(isItemAccessible("a schutzstaffel uniform")) { wardrobeTastes.push({text: `and chooses an outfit that is commonly associated with wanton cruelty.`, clothes: "a schutzstaffel uniform"}); wardrobeTastes.push({text: `and chooses a skimpy outfit that is commonly associated with wanton cruelty.`, clothes: "a slutty schutzstaffel uniform"}); } } - if(slave.sexualQuirk == "romantic") { + if(slave.sexualQuirk === "romantic") { if(isItemAccessible("a halter top dress")) { wardrobeTastes.push({text: `and dresses up like ${he}'s about to go on a date.`, clothes: "a halter top dress"}); } - } else if(slave.sexualQuirk == "tease") { + } else if(slave.sexualQuirk === "tease") { if(isItemAccessible("kitty lingerie")) { wardrobeTastes.push({text: `and wears a set of provocatively designed lingerie.`, clothes: "kitty lingerie"}); } @@ -773,11 +775,11 @@ window.saChoosesOwnClothes = (function() { } /* fetishes */ - if(slave.fetishKnown == 1) { - if(slave.fetish == "submissive") { + if(slave.fetishKnown === 1) { + if(slave.fetish === "submissive") { wardrobeTastes.push({text: `and wears restrictive latex to encourage others to dominate ${him}.`, clothes: "restrictive latex"}); wardrobeTastes.push({text: `and wears shibari ropes to encourage others to dominate ${him}.`, clothes: "shibari ropes"}); - } else if(slave.fetish == "dom") { + } else if(slave.fetish === "dom") { if(isItemAccessible("nice business attire")) { wardrobeTastes.push({text: `and wears a handsome suit, since ${he} likes other slaves to look up to ${him}.`, clothes: "nice business attire"}); } @@ -785,29 +787,29 @@ window.saChoosesOwnClothes = (function() { wardrobeTastes.push({text: `and wears a full body latex catsuit to look the part of the whip cracking dom.`, clothes: "a latex catsuit"}); } wardrobeTastes.push({text: `and wears a scalemail bikini to make ${himself} look tough.`, clothes: "a scalemail bikini"}); - } else if(slave.fetish == "masochist") { + } else if(slave.fetish === "masochist") { wardrobeTastes.push({text: `and wears painfully restrictive bondage gear, since ${he} likes the torment.`, clothes: "uncomfortable straps"}); if(isItemAccessible("chains")) { wardrobeTastes.push({text: `and wears painfully tight chains, since ${he} likes the torment.`, clothes: "chains"}); } - } else if(slave.fetish == "sadist") { + } else if(slave.fetish === "sadist") { if(isItemAccessible("a slave gown")) { wardrobeTastes.push({text: `and wears an elegant gown, since ${he} thinks it makes ${him} look the part of the femme fatale.`, clothes: "a slave gown"}); } wardrobeTastes.push({text: `and wears a scalemail bikini, since ${he} thinks it makes ${him} look fierce.`, clothes: "a scalemail bikini"}); - } else if(slave.fetish == "cumslut") { + } else if(slave.fetish === "cumslut") { wardrobeTastes.push({text: `and wears cutoffs and a t-shirt, because the fun yet relatively conservative outfit seems to encourage others to ask ${him} for blowjobs.`, clothes: "cutoffs and a t-shirt"}); - } else if(slave.fetish == "humiliation") { + } else if(slave.fetish === "humiliation") { wardrobeTastes.push({text: `and wears leather straps with rings over ${his} private parts because ${he} enjoys the embarrassment such a humiliating outfit causes ${him}.`, clothes: "uncomfortable straps"}); - } else if(slave.fetish == "buttslut") { + } else if(slave.fetish === "buttslut") { wardrobeTastes.push({text: `and wears nothing other than slutty bangles, because ${he} likes to catch the eye without putting anything between cocks and ${his} rear end.`, clothes: "slutty jewelry"}); wardrobeTastes.push({text: `and wears nothing other than an apron, because ${he} likes to catch the eye without putting anything between cocks and ${his} rear end.`, clothes: "an apron"}); - } else if(slave.fetish == "pregnancy") { + } else if(slave.fetish === "pregnancy") { wardrobeTastes.push({text: `and wears a short maid dress, because ${he} wants to look motherly and fuckable at the same time.`, clothes: "a slutty maid outfit"}); if(isItemAccessible("a maternity dress") && canGetPregnant(slave)) { wardrobeTastes.push({text: `and wears a maternity dress in the hope someone fills out its middle.`, clothes: "a maternity dress"}); } - } else if(slave.fetish == "boobs") { + } else if(slave.fetish === "boobs") { wardrobeTastes.push({text: `and wears a cheerleader outfit, since ${he} loves the way it hugs ${his} tits as ${he} moves.`, clothes: "a cheerleader outfit"}); if(isItemAccessible("a monokini")) { wardrobeTastes.push({text: `and wears a monokini, since ${he} loves how it leaves ${his} breasts totally bare.`, clothes: "a monokini"}); @@ -824,10 +826,10 @@ window.saChoosesOwnClothes = (function() { wardrobeTastes.push({text: `and wears nothing but a pair of panties so ${his} tits can bounce freely.`, clothes: "panties"}); } } else { - if(slave.fetish == "submissive") { + if(slave.fetish === "submissive") { wardrobeTastes.push({text: `and strangely opts for restrictive latex.`, clothes: "restrictive latex"}); wardrobeTastes.push({text: `and strangely opts for shibari ropes.`, clothes: "shibari ropes"}); - } else if(slave.fetish == "dom") { + } else if(slave.fetish === "dom") { if(isItemAccessible("nice business attire")) { wardrobeTastes.push({text: `and wears a handsome suit; ${he} seems to think highly of ${himself} in it.`, clothes: "nice business attire"}); } @@ -835,29 +837,29 @@ window.saChoosesOwnClothes = (function() { wardrobeTastes.push({text: `and wears a full body latex catsuit; there is a strange look on ${his} face as ${he} wears it.`, clothes: "a latex catsuit"}); } wardrobeTastes.push({text: `and wears a scalemail bikini; ${he} keeps flexing and acting tough to ${himself}.`, clothes: "a scalemail bikini"}); - } else if(slave.fetish == "masochist") { + } else if(slave.fetish === "masochist") { wardrobeTastes.push({text: `and strangely opts for painfully restrictive bondage gear.`, clothes: "uncomfortable straps"}); if(isItemAccessible("chains")) { wardrobeTastes.push({text: `and strangely opts for painfully tight chains.`, clothes: "chains"}); } - } else if(slave.fetish == "sadist") { + } else if(slave.fetish === "sadist") { if(isItemAccessible("a slave gown")) { wardrobeTastes.push({text: `and wears an elegant gown for some reason.`, clothes: "a slave gown"}); } wardrobeTastes.push({text: `and wears a scalemail bikini; an odd choice.`, clothes: "a scalemail bikini"}); - } else if(slave.fetish == "cumslut") { + } else if(slave.fetish === "cumslut") { wardrobeTastes.push({text: `and wears cutoffs and a t-shirt; ${he} can't stop licking ${his} lips.`, clothes: "cutoffs and a t-shirt"}); - } else if(slave.fetish == "humiliation") { + } else if(slave.fetish === "humiliation") { wardrobeTastes.push({text: `and strangely opts for leather straps with rings over ${his} private parts.`, clothes: "uncomfortable straps"}); - } else if(slave.fetish == "buttslut") { + } else if(slave.fetish === "buttslut") { wardrobeTastes.push({text: `and wears nothing other than slutty bangles, an odd choice; ${his} ass is completely exposed.`, clothes: "slutty jewelry"}); wardrobeTastes.push({text: `and wears nothing other than an apron, an odd choice; ${his} ass is completely exposed.`, clothes: "an apron"}); - } else if(slave.fetish == "pregnancy") { + } else if(slave.fetish === "pregnancy") { wardrobeTastes.push({text: `and wears a short maid dress; you frequently notice ${him} observing ${his} stomach.`, clothes: "a slutty maid outfit"}); if(isItemAccessible("a maternity dress") && canGetPregnant(slave)) { wardrobeTastes.push({text: `and wears a maternity dress even though ${he} isn't pregnant.`, clothes: "a maternity dress"}); } - } else if(slave.fetish == "boobs") { + } else if(slave.fetish === "boobs") { wardrobeTastes.push({text: `and wears a cheerleader outfit; ${he} seems to enjoy jiggling ${his} breasts in it.`, clothes: "a cheerleader outfit"}); if(isItemAccessible("a monokini")) { wardrobeTastes.push({text: `and strangely decides to wear a monokini, which leaves ${his} breasts totally bare.`, clothes: "a monokini"}); @@ -906,11 +908,11 @@ window.saChoosesOwnClothes = (function() { wardrobeTastes.push({text: `and wears string lingerie to show off ${his} body.`, clothes: "a string bikini"}); } - if(slave.nationality == "Canadian") { + if(slave.nationality === "Canadian") { if(isItemAccessible("a mounty outfit")) { wardrobeTastes.push({text: `and chooses an outfit that makes ${him} feel oddly nostalgic.`, clothes: "a mounty outfit"}); } - } else if(slave.nationality == "Japanese") { + } else if(slave.nationality === "Japanese") { if(isItemAccessible("a kimono")) { wardrobeTastes.push({text: `and chooses an outfit that makes ${him} feel oddly nostalgic.`, clothes: "a kimono"}); } @@ -943,30 +945,30 @@ window.saChoosesOwnClothes = (function() { function todaysShoes(slave) { let shoes = []; - if(slave.fetish == 'mindbroken') { - if(slave.amp != 1 && slave.heels == 1) { + if(slave.fetish === 'mindbroken') { + if(slave.amp !== 1 && slave.heels === 1) { shoes.push({text: `${He} finds ${he} can inexplicably walk if ${he} wears heels; a daily lesson for ${him}, as ${he} forgets shortly after leaving.`, shoes: jsEither(["boots", "extreme heels", "heels", "pumps"])}); } shoes.push({text: `${He} vaguely remembers putting things on ${his} feet, so ${he} does.`, shoes: jsEither(["boots", "extreme heels", "flats", "heels", "pumps"])}); shoes.push({text: `${He} entered without shoes, and will leave the same.`, shoes: "none"}); } else if(slave.devotion <= 20) { - if(slave.heels == 0) { + if(slave.heels === 0) { shoes.push({text: `and wears comfortable flats,`, shoes: "flats"}); } else { shoes.push({text: `and angrily wears the heels ${he} needs to walk,`, shoes: "heels"}); } } else { - if(slave.fetishKnown == 1 && slave.fetish == "dom") { + if(slave.fetishKnown === 1 && slave.fetish === "dom") { shoes.push({text: `${He} wears boots to look like a proper dominant.`, shoes: "boots"}); - } else if(slave.fetishKnown == 1 && slave.fetish == "sadist") { + } else if(slave.fetishKnown === 1 && slave.fetish === "sadist") { shoes.push({text: `${He} wears boots, since ${he} thinks they make ${him} look dangerous.`, shoes: "boots"}); - } else if(slave.fetishKnown == 1 && slave.fetish == "masochist") { + } else if(slave.fetishKnown === 1 && slave.fetish === "masochist") { shoes.push({text: `${He} wears painfully tall heels, since ${he} enjoys the twinge of pain with each step.`, shoes: "extreme heels"}); - } else if(slave.heels == 1) { + } else if(slave.heels === 1) { shoes.push({text: `${He} wears the heels ${he} needs to walk.`, shoes: "heels"}); - } else if(slave.fetishKnown == 1 && slave.fetish == "pregnancy" && slave.bellyPreg >= 500) { + } else if(slave.fetishKnown === 1 && slave.fetish === "pregnancy" && slave.bellyPreg >= 500) { shoes.push({text: `${He} goes barefoot to complement ${his} pregnancy.`, shoes: "none"}); - } else if(slave.fetishKnown == 1 && slave.fetish == "none") { + } else if(slave.fetishKnown === 1 && slave.fetish === "none") { shoes.push({text: `${He} wears comfortable flats, since ${he} doesn't have a fetish to show off.`, shoes: "flats"}); } else if(slave.actualAge < 13){ shoes.push({text: `${He} puts on boots so ${he} can stomp around.`, shoes: "boots"}); @@ -987,9 +989,9 @@ window.saChoosesOwnClothes = (function() { let neck = []; if(slave.fetish === 'mindbroken') { - + /** FIXME: Empty block statement.eslint(no-empty) */ } else if(slave.devotion <= 20) { - + /** FIXME: Empty block statement.eslint(no-empty) */ } else { if(V.arcologies[0].FSEgyptianRevivalist > 0) { neck.push({text: `dons a wesekh to support your ancient Egyptian pretensions,`, collar: "ancient Egyptian"}); @@ -998,7 +1000,7 @@ window.saChoosesOwnClothes = (function() { neck.push({text: `dons a tight steel collar around ${his} neck,`, collar: "tight steel"}); neck.push({text: `dons a painful leather collar,`, collar: "uncomfortable leather"}); neck.push({text: `dons a painfully tight neck corset,`, collar: "neck corset"}); - } else if(slave.fetish === "pregnancy" && (canGetPregnant(slave) || slave.pregKnown == 1)) { + } else if(slave.fetish === "pregnancy" && (canGetPregnant(slave) || slave.pregKnown === 1)) { neck.push({text: `dons a digital display that tells everything about ${his} womb,`, collar: "preg biometrics"}); } else if(slave.fetish === "boobs" && slave.boobs >= 1000) { neck.push({text: `dons a cowbell to draw attention to ${his} luscious udders,`, collar: "leather with cowbell"}); @@ -1027,19 +1029,19 @@ window.saChoosesOwnClothes = (function() { belly.push({text: "", bellyAccessory: slave.bellyAccessory}); /*compatibility for no output, will likely get deprecated in the future as content is added*/ } } else if(slave.devotion <= 20) { - if(slave.belly > 10000 && (slave.pregAdaptation*800 <= slave.belly) && slave.bellyAccessory != "a support band"){ + if(slave.belly > 10000 && (slave.pregAdaptation*800 <= slave.belly) && slave.bellyAccessory !== "a support band"){ belly.push({text: `slips a pregnancy support band around ${his} middle to help alleviate some of the discomfort,`, bellyAccessory: "a support band"}); - } else if (slave.belly < 8000 && slave.bellyAccessory == "a support band") { + } else if (slave.belly < 8000 && slave.bellyAccessory === "a support band") { belly.push({text: `removes ${his} support band since ${he} no longer needs it,`, bellyAccessory: "none"}); } } else { - if(V.arcologies[0].FSRepopulationFocus > 0 && slave.belly < 1500 && slave.sexualFlaw != "breeder") { + if(V.arcologies[0].FSRepopulationFocus > 0 && slave.belly < 1500 && slave.sexualFlaw !== "breeder") { if(slave.weight > 130) { belly.push({text: `struggles to fit a fake pregnant belly around ${his} gut before giving up and hoping ${he} can pass as fecund,`, bellyAccessory: "none"}); } else { belly.push({text: `straps on a fake pregnant belly to fit in with all the other pregnant girls,`, bellyAccessory: jsEither(["a small empathy belly", "a medium empathy belly", "a large empathy belly"])}); } - } else if(slave.belly < 1500 && slave.fetish == "pregnancy" && isItemAccessible("a small empathy belly") && slave.sexualFlaw != "breeder" && slave.weight <= 130) { + } else if(slave.belly < 1500 && slave.fetish === "pregnancy" && isItemAccessible("a small empathy belly") && slave.sexualFlaw !== "breeder" && slave.weight <= 130) { if(slave.fetishStrength <= 30) { belly.push({text: `straps on a 1st trimester belly to sate ${his} curiosity,`, bellyAccessory: "a small empathy belly"}); belly.push({text: `straps on a 2nd trimester belly to sate ${his} curiosity,`, bellyAccessory: "a medium empathy belly"}); @@ -1049,20 +1051,20 @@ window.saChoosesOwnClothes = (function() { } else if(slave.fetishStrength > 95) { belly.push({text: `straps on the largest belly ${he} can find to satisfy ${his} pregnancy fetish,`, bellyAccessory: "a huge empathy belly"}); } - } else if(slave.belly > 10000 && (slave.pregAdaptation*1200 <= slave.belly) && slave.bellyAccessory != "a support band"){ + } else if(slave.belly > 10000 && (slave.pregAdaptation*1200 <= slave.belly) && slave.bellyAccessory !== "a support band"){ belly.push({text: `slips a pregnancy support band around ${his} middle to better handle ${his} fecund mound,`, bellyAccessory: "a support band"}); - } else if(empathyBellies.includes(slave.bellyAccessory) && slave.fetish != "pregnancy") { + } else if(empathyBellies.includes(slave.bellyAccessory) && slave.fetish !== "pregnancy") { belly.push({text: `removes ${his} fake belly, since ${he} dislikes it,`, bellyAccessory: "none"}); - } else if(empathyBellies.includes(slave.bellyAccessory) && slave.sexualFlaw == "breeder") { + } else if(empathyBellies.includes(slave.bellyAccessory) && slave.sexualFlaw === "breeder") { belly.push({text: `pulls ${his} fake belly off, disgusted by it,`, bellyAccessory: "none"}); - } else if (slave.belly < 8000 && slave.bellyAccessory == "a support band") { + } else if (slave.belly < 8000 && slave.bellyAccessory === "a support band") { belly.push({text: `removes ${his} support band since ${he} no longer needs it,`, bellyAccessory: "none"}); } else { belly.push({text: "", bellyAccessory: slave.bellyAccessory}); /*compatibility for no output, will likely get deprecated in the future as content is added*/ } } return jsEither(belly); - }; + } return saChoosesOwnClothes; diff --git a/src/endWeek/saRest.js b/src/endWeek/saRest.js index 588bdad618ac4b68ba82f2275f6d6c97c87f1b69..87ebcf033c35d8cda751f3c90d094ac289e22572 100644 --- a/src/endWeek/saRest.js +++ b/src/endWeek/saRest.js @@ -1,3 +1,5 @@ +/* eslint-disable no-undef */ +/* eslint-disable no-unused-vars */ window.saRest = /** @param {App.Entity.SlaveState} slave */ function saRest(slave) { var pronouns = getPronouns(slave); @@ -9,7 +11,7 @@ window.saRest = /** @param {App.Entity.SlaveState} slave */ function saRest(slav if (slave.fuckdoll > 0) { t += ` ${He} has nothing to do but `; - if (slave.amp == 0) { + if (slave.amp === 0) { t += `lie `; } else { t += `stand `; @@ -25,13 +27,13 @@ window.saRest = /** @param {App.Entity.SlaveState} slave */ function saRest(slav if (!(canHear(slave))) { t += ` Since ${he} is deaf, the hustle and bustle of daily life in the penthouse <span class='green'>didn't bother ${him} at all.</span>`; slave.health += 3; - } else if ((slave.hears == -1 && slave.earwear != "hearing aids") || (slave.hears == 0 && slave.earwear == "muffling ear plugs")) { + } else if ((slave.hears === -1 && slave.earwear !== "hearing aids") || (slave.hears === 0 && slave.earwear === "muffling ear plugs")) { t += ` Since ${he} is hard of hearing, the hustle and bustle of daily life in the penthouse <span class='green'>didn't disturb ${his} rest as much.</span>`; slave.health += 1; } } - if (slave.fuckdoll == 0 && slave.fetish != "mindbroken") { + if (slave.fuckdoll === 0 && slave.fetish !== "mindbroken") { if (slave.devotion > 20) { if (slave.trust <= 20) { t += ` Being allowed to rest <span class='mediumaquamarine'>reduces ${his} fear</span> of you.`; @@ -51,10 +53,10 @@ window.saRest = /** @param {App.Entity.SlaveState} slave */ function saRest(slav } } - if (V.showVignettes == 1 && slave.assignment === Job.REST) { + if (V.showVignettes === 1 && slave.assignment === Job.REST) { var _vignette = GetVignette(slave); t += ` __This week__ ${_vignette.text} `; - if (_vignette.type == "cash") { + if (_vignette.type === "cash") { if (_vignette.effect > 0) { t += `<span class='yellowgreen'>making you an extra ${cashFormat(Math.trunc(V.FResult*_vignette.effect))}.</span>`; } else if (_vignette.effect < 0) { @@ -63,7 +65,7 @@ window.saRest = /** @param {App.Entity.SlaveState} slave */ function saRest(slav t += `an incident without lasting effect.`; } cashX(Math.trunc(V.FResult*_vignette.effect), "rest", slave); - } else if (_vignette.type == "devotion") { + } else if (_vignette.type === "devotion") { if (_vignette.effect > 0) { if (slave.devotion > 50) { t += `<span class='hotpink'>increasing ${his} devotion to you.</span>`; @@ -88,7 +90,7 @@ window.saRest = /** @param {App.Entity.SlaveState} slave */ function saRest(slav t += `an incident without lasting effect.`; } slave.devotion += (1*_vignette.effect); - } else if (_vignette.type == "trust") { + } else if (_vignette.type === "trust") { if (_vignette.effect > 0) { if (slave.trust > 20) { t += `<span class='mediumaquamarine'>increasing ${his} trust in you.</span>`; @@ -109,7 +111,7 @@ window.saRest = /** @param {App.Entity.SlaveState} slave */ function saRest(slav t += `an incident without lasting effect.`; } slave.trust += (1*_vignette.effect); - } else if (_vignette.type == "health") { + } else if (_vignette.type === "health") { if (_vignette.effect > 0) { t += `<span class='green'>improving ${his} health.</span>`; } else if (_vignette.effect < 0) { diff --git a/src/endWeek/saServant.js b/src/endWeek/saServant.js index c9562fb451d6bcfbbac87909a8ecf86295cffc04..a1dbca384f12e997e9f1ae611062b7fd84892079 100644 --- a/src/endWeek/saServant.js +++ b/src/endWeek/saServant.js @@ -1,19 +1,21 @@ +/* eslint-disable no-unused-vars */ +/* eslint-disable no-undef */ window.saServant = /** @param {App.Entity.SlaveState} slave */ function saServant(slave) { var pronouns = getPronouns(slave); - var he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, boy = pronouns.noun; + var he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, boy = pronouns.noun; /** FIXME: 'hers', 'himself', 'boy' is declared but its value is never read.ts(6133) */ var He = capFirstChar(he), His = capFirstChar(his); var V = State.variables; var t = `works as a servant. ${He} performs the lowest jobs in your penthouse, cleaning up after your other slaves, bathing them, helping them dress, and giving them sexual relief.`; if (V.servantsQuarters > 0) { - if ((V.universalRulesFacilityWork == 1 && slave.assignment == "be a servant" && V.servantsQuartersSpots > 0) || (slave.assignment == "work as a servant")) { - if (slave.assignment == "be a servant") { + if ((V.universalRulesFacilityWork === 1 && slave.assignment === "be a servant" && V.servantsQuartersSpots > 0) || (slave.assignment === "work as a servant")) { + if (slave.assignment === "be a servant") { t += ` Since there's extra space in the servants' quarters, ${V.assistantName} attaches ${him} to the cadre of maids there.`; V.servantsQuartersSpots--; } - if (V.Stewardess != 0) { + if (V.Stewardess !== 0) { t += ` This brings ${him} under ${V.Stewardess.slaveName}'s supervision. The Stewardess `; if (slave.devotion < -20) { t += `subjects ${him} to <span class='gold'>corrective rape</span> when ${his} service is imperfect, <span class='hotpink'>when ${he} steps out of line</span>, or when the Stewardess just feels like raping ${him}, forcing the poor slave to <span class='yellowgreen'>find refuge in work.</span>`; @@ -29,7 +31,7 @@ window.saServant = /** @param {App.Entity.SlaveState} slave */ function saServan if (!(canHear(slave))) { t += ` However, ${his} inability to hear often leaves ${him} oblivious to ${V.Stewardess.slaveName}'s orders, limiting their meaningful interactions.`; cashX(V.stewardessBonus/4, "houseServant", slave); - } else if ((slave.hears == -1 && slave.earwear != "hearing aids") || (slave.hears == 0 && slave.earwear == "muffling ear plugs")) { + } else if ((slave.hears === -1 && slave.earwear !== "hearing aids") || (slave.hears === 0 && slave.earwear === "muffling ear plugs")) { t += ` However, ${he} often doesn't catch what ${V.Stewardess.slaveName} says, leading to frustration, confusion and less work done.`; cashX(V.stewardessBonus/2, "houseServant", slave); } else { @@ -64,9 +66,9 @@ window.saServant = /** @param {App.Entity.SlaveState} slave */ function saServan V.oralTotal += _oral; } - if (slave.relationship == -2) { + if (slave.relationship === -2) { t += ` ${He} does ${his} best to perfect your domesticity due to ${his} emotional bond to you.`; - } else if (slave.relationship == -3 && slave.devotion > 50) { + } else if (slave.relationship === -3 && slave.devotion > 50) { t += ` ${He} does ${his} very best to be the perfect housewife, making ${him} an outstanding servant.`; } @@ -79,9 +81,9 @@ window.saServant = /** @param {App.Entity.SlaveState} slave */ function saServan } if (slave.fetishStrength > 60) { - if (slave.fetish == "submissive" && slave.fetishKnown == 1) { + if (slave.fetish === "submissive" && slave.fetishKnown === 1) { t += ` ${His} natural affinity for submission increases ${his} effectiveness.`; - } else if (slave.fetishKnown == 1 && slave.fetish == "dom") { + } else if (slave.fetishKnown === 1 && slave.fetish === "dom") { t += ` ${His} sexual appetite for domination reduces ${his} effectiveness.`; } } @@ -92,7 +94,7 @@ window.saServant = /** @param {App.Entity.SlaveState} slave */ function saServan t += ` ${His} low sex drive keeps ${him} from becoming too distracted by the intercourse all around ${him}, making ${him} more efficient.`; } - if ((slave.eyes <= -1 && slave.eyewear != "corrective glasses" && slave.eyewear != "corrective contacts") || (slave.eyewear == "blurring glasses") || (slave.eyewear == "blurring contacts")) { + if ((slave.eyes <= -1 && slave.eyewear !== "corrective glasses" && slave.eyewear !== "corrective contacts") || (slave.eyewear === "blurring glasses") || (slave.eyewear === "blurring contacts")) { t += ` ${His} bad vision makes ${him} a worse servant.`; } @@ -111,10 +113,10 @@ window.saServant = /** @param {App.Entity.SlaveState} slave */ function saServan } } - if (V.showVignettes == 1 && (slave.assignment === Job.SERVANT || slave.assignment === Job.SERVER)) { + if (V.showVignettes === 1 && (slave.assignment === Job.SERVANT || slave.assignment === Job.SERVER)) { var _vignette = GetVignette(slave); t += ` __This week__ ${_vignette.text} `; - if (_vignette.type == "cash") { + if (_vignette.type === "cash") { if (_vignette.effect > 0) { t += `<span class='yellowgreen'>making you an extra ${cashFormat(Math.trunc(V.FResult*_vignette.effect))}.</span>`; } else if (_vignette.effect < 0) { @@ -123,7 +125,7 @@ window.saServant = /** @param {App.Entity.SlaveState} slave */ function saServan t += `an incident without lasting effect.`; } cashX(Math.trunc(V.FResult*_vignette.effect), "houseServant", slave); - } else if (_vignette.type == "devotion") { + } else if (_vignette.type === "devotion") { if (_vignette.effect > 0) { if (slave.devotion > 50) { t += `<span class='hotpink'>increasing ${his} devotion to you.</span>`; @@ -148,7 +150,7 @@ window.saServant = /** @param {App.Entity.SlaveState} slave */ function saServan t += `an incident without lasting effect.`; } slave.devotion += (1*_vignette.effect); - } else if (_vignette.type == "trust") { + } else if (_vignette.type === "trust") { if (_vignette.effect > 0) { if (slave.trust > 20) { t += `<span class='mediumaquamarine'>increasing ${his} trust in you.</span>`; @@ -169,7 +171,7 @@ window.saServant = /** @param {App.Entity.SlaveState} slave */ function saServan t += `an incident without lasting effect.`; } slave.trust += (1*_vignette.effect); - } else if (_vignette.type == "health") { + } else if (_vignette.type === "health") { if (_vignette.effect > 0) { t += `<span class='green'>improving ${his} health.</span>`; } else if (_vignette.effect < 0) { diff --git a/src/endWeek/saStayConfined.js b/src/endWeek/saStayConfined.js index 62b61b9db79a2a1e441bc2656f8356f106971d12..a2b6fbb528e52f464f56ad3e537322be7cae3b9c 100644 --- a/src/endWeek/saStayConfined.js +++ b/src/endWeek/saStayConfined.js @@ -1,3 +1,5 @@ +/* eslint-disable no-undef */ +/* eslint-disable no-unused-vars */ window.saStayConfined = /** @param {App.Entity.SlaveState} slave */ function saStayConfined(slave) { var pronouns = getPronouns(slave); @@ -7,7 +9,7 @@ window.saStayConfined = /** @param {App.Entity.SlaveState} slave */ function saS var t = ""; - if (slave.fetish != "mindbroken") { + if (slave.fetish !== "mindbroken") { if (slave.devotion < -50) { t += `is kept in solitary confinement whenever ${he} is not being forced to do something else. ${He} still hates ${his} place in the world, but being forced to rely on slave life as ${his} only human contact <span class='hotpink'>grinds down ${his} resistance.</span>`; slave.devotion += 2; @@ -34,8 +36,8 @@ window.saStayConfined = /** @param {App.Entity.SlaveState} slave */ function saS slave.trust -= 5; } - if (slave.assignment == "be confined in the cellblock") { - if ((slave.hears == -1 && slave.earwear != "hearing aids") || (slave.hears == 0 && slave.earwear == "muffling ear plugs") || (slave.hears == -2)) { + if (slave.assignment === "be confined in the cellblock") { + if ((slave.hears === -1 && slave.earwear !== "hearing aids") || (slave.hears === 0 && slave.earwear === "muffling ear plugs") || (slave.hears === -2)) { t += ` ${His} hearing impairment spares ${him} the sounds of ${his} peers getting punished, lightening the impact of ${his} imprisonment.`; } } @@ -46,32 +48,32 @@ window.saStayConfined = /** @param {App.Entity.SlaveState} slave */ function saS t += `is oblivious to ${his} confinement.`; } - if (V.Wardeness !== 0 && (V.Wardeness.sexualFlaw == "malicious" || V.Wardeness.sexualFlaw == "abusive" || V.Wardeness.sexualFlaw == "breast growth") && slave.lactation == 1 && slave.lactationDuration == 0) { - t += ` ${V.Wardeness.slaveName} ` - if (V.Wardeness.sexualFlaw == "malicious") { - t += `savors the torment brought about by ${his} milk-bloated chest and makes sure to milk ${him} thoroughly every other week to maximize ${his} suffering.` - } else if (V.Wardeness.sexualFlaw == "abusive") { - t += `enjoys neglecting ${his} milk-bloated chest until it gets big and painfully swollen; only then does the abusive jail-keeper roughly drain ${his} sensitive mounds.` - } else if (V.Wardeness.sexualFlaw == "breast growth") { - t += `loves watching ${his} breasts steadily swell with pent-up milk and only milks ${him} in order to reset the process.` + if (V.Wardeness !== 0 && (V.Wardeness.sexualFlaw === "malicious" || V.Wardeness.sexualFlaw === "abusive" || V.Wardeness.sexualFlaw === "breast growth") && slave.lactation === 1 && slave.lactationDuration === 0) { + t += ` ${V.Wardeness.slaveName} `; + if (V.Wardeness.sexualFlaw === "malicious") { + t += `savors the torment brought about by ${his} milk-bloated chest and makes sure to milk ${him} thoroughly every other week to maximize ${his} suffering.`; + } else if (V.Wardeness.sexualFlaw === "abusive") { + t += `enjoys neglecting ${his} milk-bloated chest until it gets big and painfully swollen; only then does the abusive jail-keeper roughly drain ${his} sensitive mounds.`; + } else if (V.Wardeness.sexualFlaw === "breast growth") { + t += `loves watching ${his} breasts steadily swell with pent-up milk and only milks ${him} in order to reset the process.`; } } - if (slave.sentence != 0) { + if (slave.sentence !== 0) { t += ` ${He} has ${slave.sentence}`; - if (slave.sentence == 1) { + if (slave.sentence === 1) { t += ` week remaining.`; } else { t += ` weeks remaining.`; } - } else if (slave.devotion > 20 || (slave.devotion >= -20 && slave.trust < -20) || (slave.devotion >= -50 && slave.trust < -50) || slave.fetish == "mindbroken") { - if (slave.fetish == "mindbroken") { + } else if (slave.devotion > 20 || (slave.devotion >= -20 && slave.trust < -20) || (slave.devotion >= -50 && slave.trust < -50) || slave.fetish === "mindbroken") { + if (slave.fetish === "mindbroken") { t += ` ${His} broken mind hinges entirely on other's guidance,`; } else { t += ` ${He} is now willing to <span class='hotpink'>do as ${he}'s told,</span>`; } t += ` so <span class='yellow'>${his} assignment has defaulted to rest.</span>`; - if (slave.assignment == "be confined in the cellblock") { + if (slave.assignment === "be confined in the cellblock") { State.temporary.brokenSlaves++; State.temporary.DL--; State.temporary.dI--; diff --git a/src/events/intro/introSummary.tw b/src/events/intro/introSummary.tw index 5a1bfad23f2e43a76a9c6c2d710d34d2fc20d6d1..7b74e11254965e628921cca2c5835622e95aaf8c 100644 --- a/src/events/intro/introSummary.tw +++ b/src/events/intro/introSummary.tw @@ -1275,7 +1275,7 @@ __''Mods''__ @@.cyan;ENABLED.@@ [[Disable|Intro Summary][$SF.Facility.Toggle = 0]] <</if>> //Prep for future content.*/ -<br><br> +<br> <<options $cyberMod>> Cybernetics mod is @@ -1288,8 +1288,6 @@ __''Mods''__ <</options>> <br> - -<br><br> <<options $secExp>> The Security Expansion Mod is <<option 0 "Disable">> diff --git a/src/facilities/nursery/childSummary.tw b/src/facilities/nursery/childSummary.tw index 3fc4168fc5aa58659a4083267b8596ad5f0b7d62..cb3b48b4025de4e187cf84a6b5ac0b42388d7b7b 100644 --- a/src/facilities/nursery/childSummary.tw +++ b/src/facilities/nursery/childSummary.tw @@ -13,8 +13,8 @@ }>> <<set _Pass = passage(), _CL = $cribs.length, $assignTo = _Pass, _indexed = 0, _passagePreFilter = (c => c.assignment != "be your agent" && c.assignment != "live with your agent" && (!setup.passagePreFilters.hasOwnProperty(_Pass) || setup.passagePreFilters[_Pass](c))), - _filteredSlaveIdxs = $cribs.map(function(slave, idx) { return _passagePreFilter(slave) ? idx : null; }).filter(function(idx) { return idx !== null; }), - _indexSlavesIdxs = $cribs.map(function(slave, idx) { return _passagePreFilter(slave) ? idx : null; }).filter(function(idx) { return idx !== null; })>> + _filteredSlaveIdxs = $cribs.map(function(slave, idx) { return _passagePreFilter(slave) ? idx : null; }).filter(function(idx) { return idx != null; }), + _indexSlavesIdxs = $cribs.map(function(slave, idx) { return _passagePreFilter(slave) ? idx : null; }).filter(function(idx) { return idx != null; })>> <<for !_.isUndefined(_csi = _filteredSlaveIdxs.shift())>> <<set _Child = $cribs[_csi]>> <<set _childName = SlaveFullName(_Child);>> diff --git a/src/gui/css/optionsMacro.tw b/src/gui/css/optionsMacro.tw index 4dcd9ca43b78035b62ab0e9c930a480cd33a4d94..ddd7df49b185a7935167bd0544d90ec75b04d0d7 100644 --- a/src/gui/css/optionsMacro.tw +++ b/src/gui/css/optionsMacro.tw @@ -17,6 +17,7 @@ .optionDescription { display: block; width: unset; + text-align: left; } .optionMacro { @@ -72,13 +73,23 @@ box-sizing: border-box; } +.optionValue { + display: inline-flex; + flex-wrap: wrap; +} + .optionValue input { padding: 3px; background: linear-gradient(transparent,#222); border: #555 solid 0.5px; border-top-width: 0; - min-width: reset; + min-width: unset; width: 140px; + height: 22px; +} + +.optionMacroNumber input { + width: 50px; } .optionValue input:last-child { diff --git a/src/init/storyInit.tw b/src/init/storyInit.tw index de1b06004458e671148e4897aadc79abdcd29fcf..043b157a22ef6a9a6cb2592bb5cb5afa0a17f5a6 100644 --- a/src/init/storyInit.tw +++ b/src/init/storyInit.tw @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with thi <<set $returnTo = "init", $nextButton = "Continue", $nextLink = "Alpha disclaimer">> <<unset $releaseID>> -<<set $ver = "0.10.7", $pmodVer = "2.2.X", $releaseID = 1042>> +<<set $ver = "0.10.7", $pmodVer = "2.2.X", $releaseID = 1043>> <<if ndef $pmodVer>><<set $pmodVer = "2.2.X">><</if>> /* This needs to be broken down into individual files that can be added to StoryInit instead. */ diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js index 2c76f5a36878a0e44b9f27606360a9e6b39858d8..a6985cba59c0921d3aeaff603916fe9dc928a31e 100644 --- a/src/js/DefaultRules.js +++ b/src/js/DefaultRules.js @@ -1,3 +1,5 @@ +/* eslint-disable no-empty */ +/* eslint-disable no-undef */ // this code applies RA rules onto slaves window.DefaultRules = (function() { @@ -1635,7 +1637,7 @@ window.DefaultRules = (function() { // Diet Setting if (rule.diet !== undefined && rule.diet !== "no default setting") { /* - if ((slave.boobs >= 1600) && (slave.muscles <= 5) && (slave.amp != 1) && ((rule.muscles == "no default setting") || (rule.muscles === 0))) { + if ((slave.boobs >= 1600) && (slave.muscles <= 5) && (slave.amp !== 1) && ((rule.muscles == "no default setting") || (rule.muscles === 0))) { if ((slave.diet !== "muscle building")) { slave.diet = "muscle building" r += `<br>${slave.slaveName} has big tits and no back muscles, so ${he}'s been assigned to gain some.` diff --git a/src/js/PenthouseNaming.js b/src/js/PenthouseNaming.js index 398e0f58178544e9f062686672c76e67fe155647..9d84a0be2e16073a2fd0d33129007049d9396bf9 100644 --- a/src/js/PenthouseNaming.js +++ b/src/js/PenthouseNaming.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ /** * @return {string} */ diff --git a/src/js/SetBellySize.js b/src/js/SetBellySize.js index 546c270af5145523a820bb47ad2d5e9b5a244d51..963e39484853c09f46297a41a58772c36f1af06c 100644 --- a/src/js/SetBellySize.js +++ b/src/js/SetBellySize.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ /** @param {App.Entity.SlaveState} slave */ window.SetBellySize = function SetBellySize(slave) { diff --git a/src/js/SlaveState.js b/src/js/SlaveState.js index 6f2ac8dac9f3c7cbf524ddcec0eaac32f4fb01a2..24a2b8a9e90567c447043d8c09d24e402815225e 100644 --- a/src/js/SlaveState.js +++ b/src/js/SlaveState.js @@ -845,7 +845,7 @@ App.Entity.SlaveState = class SlaveState { /** * count of ova that broodmother implant force to release. * - * Should be set with "broodmother" property together. If broodmother == 0 has no meaning. + * Should be set with "broodmother" property together. If broodmother === 0 has no meaning. */ this.broodmotherFetuses = 0; /** @@ -1016,7 +1016,7 @@ App.Entity.SlaveState = class SlaveState { * * function relative to .ballSize * - * *If .balls > 0 and .scrotum == 0, balls are internal* + * *If .balls > 0 and .scrotum === 0, balls are internal* */ this.scrotum = 0; /** has ovaries @@ -1886,7 +1886,7 @@ App.Entity.SlaveState = class SlaveState { * * 3: orally by another slave */ this.inflationMethod = 0; - /** If inflationMethod == 3, ID of the slave filling her with milk. */ + /** If inflationMethod === 3, ID of the slave filling her with milk. */ this.milkSource = 0; /** If inflationMethod 3, ID of the slave filling her with cum. */ this.cumSource = 0; diff --git a/src/js/accordianJS.js b/src/js/accordianJS.js index 0b31fa239c32914f8732ba6e51f7a1dd030f661c..cce8bdfbaaa63d8d6d64a952d02ab793c4c2b21d 100644 --- a/src/js/accordianJS.js +++ b/src/js/accordianJS.js @@ -1,3 +1,5 @@ +/* eslint-disable no-unused-vars */ +/* eslint-disable no-undef */ /* Accordion 000-250-006 */ /* @@ -14,7 +16,7 @@ */ postdisplay["doAccordionSet"] = function (content) { - if (variables().useAccordion == 1) { + if (variables().useAccordion === 1) { Array.prototype.slice.call(document.querySelectorAll('.macro-include')) .forEach(function (element) { element.classList.add('accHidden'); @@ -30,9 +32,9 @@ postdisplay["doAccordion"] = function (content) { acc[i].onclick = function () { this.classList.toggle("active"); var panel = this.nextElementSibling; - if(panel == null || panel == undefined){ + if(panel === null || panel === undefined){ panel = document.getElementById(this.id + "accHidden"); - if( panel.style.display=='none' ){ + if( panel.style.display === 'none' ) { panel.style.display = ''; }else{ panel.style.display = 'none'; diff --git a/src/js/assayJS.js b/src/js/assayJS.js index 6cdae706ccfb32626250c04d86082d5e2d2e807d..e3b1c666adc8b49790f10c1ed4a19ecc07b784f8 100644 --- a/src/js/assayJS.js +++ b/src/js/assayJS.js @@ -1,3 +1,5 @@ +/* eslint-disable no-unused-vars */ +/* eslint-disable no-undef */ window.isSlim = /** @param {App.Entity.SlaveState} slave */ function(slave) { let slim = false; const ArcologyZero = State.variables.arcologies[0]; @@ -347,7 +349,7 @@ window.getSlave = /** @returns {App.Entity.SlaveState} */ function getSlave(ID) }; window.getChild = function getChild(ID) { const V = State.variables; - return V.cribs.find(function(s) { return s.ID == ID; }); + return V.cribs.find(function(s) { return s.ID === ID; }); }; window.getPronouns = /** @param {App.Entity.SlaveState} slave */ function getPronouns(slave) { return { diff --git a/src/js/assignJS.js b/src/js/assignJS.js index b44407d86daa5b5158682405710472dacc23ee91..9da3181848dfbc01a886c0b744183d6c65365224 100644 --- a/src/js/assignJS.js +++ b/src/js/assignJS.js @@ -1,3 +1,5 @@ +/* eslint-disable no-case-declarations */ +/* eslint-disable no-undef */ window.assignJob = function assignJob(slave, job) { "use strict"; const V = State.variables; @@ -249,7 +251,6 @@ window.assignJob = function assignJob(slave, job) { case "be the schoolteacher": case "be the stewardess": case "be the wardeness": - case "be the matron": slave.assignment = job; slave.assignmentVisible = 0; /* non-visible leadership roles */ slave.livingRules = "luxurious"; diff --git a/src/js/bugReport.js b/src/js/bugReport.js index b0ace2e4ef770bcdae25c20171e29f4fdcefeee8..5302db55a333a121ab278a62a7f67d349120fb70 100644 --- a/src/js/bugReport.js +++ b/src/js/bugReport.js @@ -1,2 +1,3 @@ +/* eslint-disable */ /*! <<bugreport>> macro for SugarCube 2.x */ !function(){"use strict";if("undefined"==typeof version||"undefined"==typeof version.title||"SugarCube"!==version.title||"undefined"==typeof version.major||version.major<2)throw new Error("<<bugreport>> macro requires SugarCube 2.0 or greater, aborting load");Macro.add("bugreport",{handler:function(){function serializeVariables(varObj,diffObj,doSort){function renderDiff(diff,orig){for(var keys=Object.keys(diff||{}),render=orig?clone(orig):{},i=0,klen=keys.length;klen>i;i++){var p=keys[i],diffP=diff[p];if(diffP===Diff.Op.Delete)delete render[p];else if(Array.isArray(diffP))switch(diffP[0]){case Diff.Op.SpliceArray:try{render.splice(diffP[1],1+(diffP[2]-diffP[1]))}catch(e){}break;case Diff.Op.Copy:render[p]=clone(diffP[1]);break;case Diff.Op.CopyDate:render[p]=new Date(diffP[1])}else{var recurse=renderDiff(diffP,render[p]);0!==Object.keys(recurse).length&&(render[p]=recurse)}}return render}var varList=[],diff=renderDiff(Diff.diff(varObj,diffObj));for(var p in diff){var sName="$"+(-1===p.search(/[^\w]/)?p:'"'+p+'"');varList.push(sName+"="+JSON.stringify(diff[p]))}return doSort&&("function"==typeof doSort?varList.sort(doSort):varList.sort()),0!==varList.length?varList.join(", "):""}var srcMatch,passages,varsPre,varsPost,dialog,dataEl,info=null!=this.args[0]&&Story.has(this.args[0])?Story.get(this.args[0]):null,last=State.length-1,source=unescape(window.location);null!==(srcMatch=/\/([^\/]+)$/.exec(source))&&(source=srcMatch[1]),passages=[];for(var i=0;last>=i;i++)passages.push('"'+State.index(i).title+'"');passages=passages.join(", "),varsPre=serializeVariables(State.index(0).variables,State.index(last).variables),varsPost=serializeVariables(State.index(last).variables,State.variables),dialog=UI.setup("Bug Report","bugreport"),dialog.innerHTML=(null!==info?'<div id="bugreport-info"></div>':"")+'<div><b>Bug report:</b> <a id="bugreport-data-select" class="link-internal macro-bugreport">[Select]</a></div><code id="bugreport-data" tabindex="0"></code>'+(/applewebkit|chrome/.test(Browser.userAgent)?"":'<div class="scroll-pad"> </div>'),dataEl=dialog.querySelector("#bugreport-data"),null!==info&&new Wikifier(dialog.querySelector("#bugreport-info"),info.processText()),addAccessibleClickHandler("#bugreport-data-select",function(self){return function(){jQuery(dataEl).focus(),self.selectData(dataEl)}}(this.self)),insertText(dataEl,"[spoiler][code]"),insertElement(dataEl,"br"),insertText(dataEl,"SOURCE: "+source),insertElement(dataEl,"br"),insertElement(dataEl,"br"),insertText(dataEl,"PASSAGES:"),insertElement(dataEl,"br"),insertText(dataEl,passages),insertElement(dataEl,"br"),insertElement(dataEl,"br"),insertText(dataEl,"VARIABLES (PRE-EXECUTION):"),insertElement(dataEl,"br"),varsPre&&(insertText(dataEl,varsPre),insertElement(dataEl,"br")),insertElement(dataEl,"br"),insertText(dataEl,"VARIABLES (POST-EXECUTION):"),insertElement(dataEl,"br"),varsPost&&(insertText(dataEl,varsPost),insertElement(dataEl,"br")),insertText(dataEl,"[/code][/spoiler]"),UI.open()},selectData:function(e){var s,r;if(window.getSelection){s=window.getSelection();if(s.setBaseAndExtent){var l=(e.innerText.length>1)?e.innerText.length-1:1;try{s.setBaseAndExtent(e,0,e,l)}catch(error){r=document.createRange();r.selectNodeContents(e);s.removeAllRanges();s.addRange(r)}}else{if(window.opera&&e.innerHTML.substring(e.innerHTML.length-4)==='<br>'){e.innerHTML=e.innerHTML+' '}var r=document.createRange();r.selectNodeContents(e);s.removeAllRanges();s.addRange(r)}}else if(document.getSelection){s=document.getSelection();r=document.createRange();r.selectNodeContents(e);s.removeAllRanges();s.addRange(r)}else if(document.selection){r=document.body.createTextRange();r.moveToElementText(e);r.select()}}})}(); diff --git a/src/js/colorModeJS.js b/src/js/colorModeJS.js index a18e3231016867970de95ffc71daf44284514ddb..35f346ec526a30c918d6933a7e71d959bfc9d14c 100644 --- a/src/js/colorModeJS.js +++ b/src/js/colorModeJS.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ window.flipColors = function (lightColorMap) { if (!window.savedColorMap) { window.savedColorMap = setColors(lightColorMap); diff --git a/src/js/dTree.min.js b/src/js/dTree.min.js index b29089b88995fe7df6cab432f07f2e71d7f2e090..a3c51d890ea5194fcd558084455fe68d9db93170 100644 --- a/src/js/dTree.min.js +++ b/src/js/dTree.min.js @@ -1,3 +1,4 @@ +/* eslint-disable */ /* This is the minified version of lodash, d3 and dTree */ ; (function (window, define, exports) { diff --git a/src/js/datatypeCleanupJS.js b/src/js/datatypeCleanupJS.js index 78275bcd539bdd8b12cefd3711a596afecd5f214..47fbacfcd0173d11a1f0cb87639248be00bd6c58 100644 --- a/src/js/datatypeCleanupJS.js +++ b/src/js/datatypeCleanupJS.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ /* This function does not ensure values make sense. For example, it does not fix weird relations/relationships/rivalries/pregnancies/prosthetics. It only makes sure most datatypes are correct, and sets to default if not. Number values are clamped to the correct bounds. @@ -20,7 +21,7 @@ Use slave.value = Math.min(+slave.value, a) || default; if you need slave.value <= a. Use slave.value = Math.clamp(+slave.value, a, b) || default; if you need a <= slave.value <= b. Use slave.value = +slave.value || default; if slave.value can be any number. - The exception to this is if the default != 0. In this case, it's usually good enough to just check if slave.value !== 0 first. The strict equality is important! + The exception to this is if the default !== 0. In this case, it's usually good enough to just check if slave.value !== 0 first. The strict equality is important! If you want slave.value to be a string, there's no easy tricks to make sure it's already an accepted value. The simplest way is the following if (typeof slave.value !== "string") slave.value = default; @@ -1526,7 +1527,7 @@ window.FacilityDatatypeCleanup = (function() { V.dairyPrepUpgrade = Math.clamp(+V.dairyPrepUpgrade, 0, 1) || 0; V.dairyHyperPregRemodel = Math.clamp(+V.dairyHyperPregRemodel, 0, 1) || 0; V.dairyImplantsSetting = Math.clamp(+V.dairyImplantsSetting, 0, 3) || 0; - V.dairyWeightSetting = Math.clamp(+V.dairyWeightSetting, 0, 4) || 0; + V.dairyWeightSetting = Math.clamp(+V.dairyWeightSetting, -1, 4) || 0; /* bioreactors */ V.bioreactorsAnnounced = Math.clamp(+V.bioreactorsAnnounced, 0, 1) || 0; V.createBioreactors = Math.clamp(+V.createBioreactors, 0, 1) || 0; diff --git a/src/js/displayVariables.js b/src/js/displayVariables.js index c153952509e31eab3818533944d8eaf82e651061..f78139b5ccf2d9b728c2061a2111ea19b94ac516 100644 --- a/src/js/displayVariables.js +++ b/src/js/displayVariables.js @@ -1,2 +1,3 @@ +/* eslint-disable */ /*! <<checkvars>> macro for SugarCube 2.x */ !function(){"use strict";if("undefined"==typeof version||"undefined"==typeof version.title||"SugarCube"!==version.title||"undefined"==typeof version.major||version.major<2)throw new Error("<<checkvars>> macro requires SugarCube 2.0 or greater, aborting load");Macro.add("checkvars",{handler:function(){function toString(value,indent){var baseType=typeof value;switch(baseType){case"number":return isNaN(value)?"NaN":isFinite(value)?String(value):"Infinity";case"string":return JSON.stringify(value);case"function":return"(function)";default:if("object"!==baseType||null==value)return String(value);var objType=Object.prototype.toString.call(value);if("[object Date]"===objType)return'(object: Date, value: "'+value.toISOString()+'")';if("[object RegExp]"===objType)return"(object: RegExp, value: "+value.toString()+")";var opener,closer,result=[],indentText=" ";return indent||(indent=""),("[object Set]"===objType||value instanceof Set)&&(value=Array.from(value)),Array.isArray(value)?(opener="[\n",closer="\n"+indent+"]",value.forEach(function(p,i){result.push(indent+indentText+i+" ⇒ "+toString(value[i],indent+indentText))}),Object.keys(value).forEach(function(p){/^\d+$/.test(p)||result.push(indent+indentText+toString(p)+" ⇒ "+toString(value[p],indent+indentText))})):"[object Map]"===objType||value instanceof Map?(opener="{\n",closer="\n"+indent+"}",Array.from(value).map(function(kv){result.push(indent+indentText+toString(kv[0],indent+indentText)+" ⇒ "+toString(kv[1],indent+indentText))})):(opener="{\n",closer="\n"+indent+"}",Object.keys(value).forEach(function(p){result.push(indent+indentText+toString(p)+" ⇒ "+toString(value[p],indent+indentText))})),opener+result.join(",\n")+closer}}var dialog,sv=State.variables,names=Object.keys(sv);if(dialog=UI.setup("Story $variables","checkvars"),0===names.length)return dialog.innerHTML="<h1>Story $variables (<code>State.variables</code>):</h1><p><em>No $variables currently set…</em></p>",void UI.open();dialog.innerHTML="<h1>Story $variables (<code>State.variables</code>):</h1><table><thead><tr><th>Name</th><th>Value</th></tr></thead><tbody></tbody></table>"+(/applewebkit|chrome/.test(Browser.userAgent)?"":'<div class="scroll-pad"> </div>');var tbody=dialog.querySelector("tbody");names.sort(function(a,b){return Util.isNumeric(a)&&Util.isNumeric(b)?Number(a)-Number(b):a.localeCompare(b)});for(var i=0;i<names.length;i++){var tr=document.createElement("tr"),tdName=document.createElement("td"),tdValue=document.createElement("td");tdName.textContent="$"+names[i],tdValue.textContent = toString(sv[names[i]]),tr.appendChild(tdName),tr.appendChild(tdValue),tbody.appendChild(tr)}UI.open()}})}(); diff --git a/src/js/eventSelectionJS.js b/src/js/eventSelectionJS.js index 44f283d46ed008e2f1154acbac85ca0d0975ffd2..4b303286f93920e300092d6008c20b7b51c33571 100644 --- a/src/js/eventSelectionJS.js +++ b/src/js/eventSelectionJS.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ window.generateRandomEventPoolStandard = function(eventSlave) { /* STANDARD EVENTS */ @@ -399,7 +400,7 @@ window.generateRandomEventPoolStandard = function(eventSlave) { } /* - if(eventSlave.drugs == "breast injections") { + if(eventSlave.drugs === "breast injections") { if(eventSlave.anus > 0 || eventSlave.vagina > 0) { if(eventSlave.devotion <= 50) { if(eventSlave.devotion >= -20) { diff --git a/src/js/extendedFamilyModeJS.js b/src/js/extendedFamilyModeJS.js index 64db893921f98427b06b35abb8b5a212a9d5f360..3e6d2ac7575d089088602324b54b2371a667aaa4 100644 --- a/src/js/extendedFamilyModeJS.js +++ b/src/js/extendedFamilyModeJS.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ /* see documentation for details /devNotes/Extended Family Mode Explained.txt */ window.isMotherP = function isMotherP(daughter, mother) { @@ -65,7 +66,7 @@ window.sameTParent = function(slave1, slave2) { /* window.sameTParent = function(slave1, slave2) { - if ((slave1.mother == slave2.father || slave1.father == slave2.mother) && (slave1.mother != 0 && slave1.mother != -2 && slave1.father != 0 && slave1.father != -2)) { + if ((slave1.mother === slave2.father || slave1.father === slave2.mother) && (slave1.mother !== 0 && slave1.mother !== -2 && slave1.father !== 0 && slave1.father !== -2)) { return true; //testtest catches the case if a mother is a father or a father a mother } else { return false; @@ -114,7 +115,7 @@ window.areSisters = function(slave1, slave2) { /* //3 = half-sisters, 2 = sisters, 1 = twins, 0 = not related window.areSisters = function(c1, c2) { - if(c1.ID == c2.ID) { + if(c1.ID === c2.ID) { return 0; } var sib = 4; @@ -124,10 +125,10 @@ window.areSisters = function(c1, c2) { if(sameDad(c1, c2)) { sib -=1; } - if (sib == 2 && c1.actualAge == c2.actualAge && c1.birthWeek == c2.birthWeek) { + if (sib === 2 && c1.actualAge === c2.actualAge && c1.birthWeek === c2.birthWeek) { sib -= 1; } - if(sib == 4) { + if(sib === 4) { return 0 } else { return sib; @@ -213,7 +214,7 @@ window.isSlaveAvailable = /** @param {App.Entity.SlaveState} slave */ function ( window.randomRelatedSlave = function(slave, filterFunction) { if(!slave || !SugarCube) { return undefined; } if(typeof filterFunction !== 'function') { filterFunction = function(s, index, array) { return true; }; } - return State.variables.slaves.filter(filterFunction).shuffle().find(function(s, index, array) {return areSisters(slave, s) || s.mother == slave.ID || s.father == slave.ID || slave.ID == s.mother || slave.ID == s.father; }) + return State.variables.slaves.filter(filterFunction).shuffle().find(function(s, index, array) {return areSisters(slave, s) || s.mother === slave.ID || s.father === slave.ID || slave.ID === s.mother || slave.ID === s.father; }) } */ diff --git a/src/js/familyTreeJS.js b/src/js/familyTreeJS.js index fb8943b8a05fe46b9b5bde9a4c13867c8ebbc0fb..7e6ef9826562d8f81c58c6f3a0b291f474b915b2 100644 --- a/src/js/familyTreeJS.js +++ b/src/js/familyTreeJS.js @@ -1,3 +1,6 @@ +/* eslint-disable no-console */ +/* eslint-disable no-unused-vars */ +/* eslint-disable no-undef */ var lastActiveSlave, lastSlaves, lastPC; /* @@ -115,7 +118,7 @@ window.renderFamilyTree = function(slaves, filterID) { node.append('circle') .attr('r', function (d) { return d.r; }) .attr('stroke', function(d) { - if(d.ID == filterID) { + if(d.ID === filterID) { return '#ffff20'; } else { return '#5a5a5a'; @@ -127,12 +130,12 @@ window.renderFamilyTree = function(slaves, filterID) { node.append('text') .text(function(d) { var ssym; - if(d.ID == -1) { - if(d.dick == 1 && d.vagina == 1) { + if(d.ID === -1) { + if(d.dick === 1 && d.vagina === 1) { ssym = '☿'; - } else if (d.dick == 1) { + } else if (d.dick === 1) { ssym = '♂'; - } else if (d.vagina == 1) { + } else if (d.vagina === 1) { ssym = '♀'; } } else if (d.dick > 0 && d.vagina > -1) { @@ -234,14 +237,14 @@ window.buildFamilyTree = function(slaves = State.variables.slaves, filterID) { charList.push.apply(charList, State.variables.tanks); var unborn = {}; - for(var i = 0; i < State.variables.tanks.length; i++) { + for(let i = 0; i < State.variables.tanks.length; i++) { unborn[State.variables.tanks[i].ID] = true; } - for (var i = 0; i < State.variables.cribs.length; i++) { + for (let i = 0; i < State.variables.cribs.length; i++) { unborn[State.variables.cribs[i].ID] = true; } - for(var i = 0; i < charList.length; i++) { + for(let i = 0; i < charList.length; i++) { var mom = charList[i].mother; var dad = charList[i].father; @@ -259,53 +262,53 @@ window.buildFamilyTree = function(slaves = State.variables.slaves, filterID) { } } - for(var i = 0; i < charList.length; i++) { + for(let i = 0; i < charList.length; i++) { var character = charList[i]; - if(character.mother == 0 && character.father == 0 && !kids[character.ID]) { + if(character.mother === 0 && character.father === 0 && !kids[character.ID]) { continue; } - var mom = character.mother; + let mom = character.mother; if(mom < -6) { if (mom in State.variables.missingTable && State.variables.showMissingSlaves) { node_lookup[mom] = family_graph.nodes.length; var missing = State.variables.missingTable[mom]; charList.push({ID: mom, mother: 0, father: 0, is_mother: true, dick: missing.dick, vagina: missing.vagina, slaveName: missing.slaveName}); } else { - if(typeof outmoms[mom] == 'undefined') { + if(typeof outmoms[mom] === 'undefined') { outmoms[mom] = []; } outmoms[mom].push(character.slaveName); } - } else if(mom < 0 && typeof node_lookup[mom] == 'undefined' && typeof preset_lookup[mom] != 'undefined') { + } else if(mom < 0 && typeof node_lookup[mom] === 'undefined' && typeof preset_lookup[mom] !== 'undefined') { node_lookup[mom] = family_graph.nodes.length; charList.push({ID: mom, mother: 0, father: 0, is_father: true, dick: 0, vagina: 1, slaveName: preset_lookup[mom]}); } - var dad = character.father; + let dad = character.father; if(dad < -6) { if (dad in State.variables.missingTable && State.variables.showMissingSlaves) { node_lookup[dad] = family_graph.nodes.length; - var missing = State.variables.missingTable[dad]; + let missing = State.variables.missingTable[dad]; charList.push({ID: dad, mother: 0, father: 0, is_father: true, dick: missing.dick, vagina: missing.vagina, slaveName: missing.slaveName}); } else { - if(typeof outdads[dad] == 'undefined') { + if(typeof outdads[dad] === 'undefined') { outdads[dad] = []; } outdads[dad].push(character.slaveName); } - } else if(dad < 0 && typeof node_lookup[dad] == 'undefined' && typeof preset_lookup[dad] != 'undefined') { + } else if(dad < 0 && typeof node_lookup[dad] === 'undefined' && typeof preset_lookup[dad] !== 'undefined') { node_lookup[dad] = family_graph.nodes.length; charList.push({ID: dad, mother: 0, father: 0, is_father: true, dick: 1, vagina: -1, slaveName: preset_lookup[dad]}); } } var mkeys = Object.keys(outmoms); - for(var i = 0; i < mkeys.length; i++) { + for(let i = 0; i < mkeys.length; i++) { var name; var key = mkeys[i]; var names = outmoms[key]; - if(names.length == 1) { + if(names.length === 1) { name = names[0]; - } else if(names.length == 2) { + } else if(names.length === 2) { name = names.join(' and '); } else { names[-1] = 'and '+names[-1]; @@ -317,13 +320,13 @@ window.buildFamilyTree = function(slaves = State.variables.slaves, filterID) { } var dkeys = Object.keys(outdads); - for(var i = 0; i < dkeys.length; i++) { - var name; - var key = dkeys[i]; - var names = outdads[key]; - if(names.length == 1) { + for(let i = 0; i < dkeys.length; i++) { + let name; + let key = dkeys[i]; + let names = outdads[key]; + if(names.length === 1) { name = names[0]; - } else if(names.length == 2) { + } else if(names.length === 2) { name = names.join(' and '); } else { names[-1] = 'and '+names[-1]; @@ -335,7 +338,7 @@ window.buildFamilyTree = function(slaves = State.variables.slaves, filterID) { } var charHash = {}; - for(var i = 0; i < charList.length; i++) { + for(let i = 0; i < charList.length; i++) { charHash[charList[i].ID] = charList[i]; } @@ -348,19 +351,19 @@ window.buildFamilyTree = function(slaves = State.variables.slaves, filterID) { relIDs.related = true; return relIDs; } - if(character.ID == targetID) { + if(character.ID === targetID) { relIDs.related = true; } if(seen[character.ID]) { return relIDs; } seen[character.ID] = true; - if(character.mother != 0) { + if(character.mother !== 0) { if(charHash[character.mother]) { relatedTo(charHash[character.mother], targetID, relIDs); } } - if(character.father != 0) { + if(character.father !== 0) { if(charHash[character.father]) { relatedTo(charHash[character.father], targetID, relIDs); } @@ -370,17 +373,17 @@ window.buildFamilyTree = function(slaves = State.variables.slaves, filterID) { if(filterID) { if(charHash[filterID]) { var relIDs = relatedTo(charHash[filterID], filterID); - for(var k in relIDs.tree) { + for(let k in relIDs.tree) { related[k] = true; } - for(var i = 0; i < charList.length; i++) { + for(let i = 0; i < charList.length; i++) { if(charHash[charList[i].ID]) { var pRelIDs = relatedTo(charHash[charList[i].ID], filterID); if(pRelIDs.related) { - for(var k in pRelIDs.tree) { + for(let k in pRelIDs.tree) { related[k] = true; if(saveTree[k]) { - for(var k2 in saveTree[k].tree) { + for(let k2 in saveTree[k].tree) { related[k2] = true; } } @@ -392,10 +395,10 @@ window.buildFamilyTree = function(slaves = State.variables.slaves, filterID) { } } - for(var i = 0; i < charList.length; i++) { - var character = charList[i]; - var char_id = character.ID; - if(character.mother == 0 && character.father == 0 && !kids[char_id]) { + for(let i = 0; i < charList.length; i++) { + let character = charList[i]; + let char_id = character.ID; + if(character.mother === 0 && character.father === 0 && !kids[char_id]) { continue; } if(filterID && !related[char_id]) { @@ -419,10 +422,10 @@ window.buildFamilyTree = function(slaves = State.variables.slaves, filterID) { family_graph.nodes.push(char_obj); } - for(var i = 0; i < charList.length; i++) { - var character = charList[i]; - var char_id = character.ID; - if(character.mother == 0 && character.father == 0 && !kids[char_id]) { + for(let i = 0; i < charList.length; i++) { + let character = charList[i]; + let char_id = character.ID; + if(character.mother === 0 && character.father === 0 && !kids[char_id]) { continue; } if(filterID && !related[char_id]) { @@ -434,9 +437,9 @@ window.buildFamilyTree = function(slaves = State.variables.slaves, filterID) { } continue; } - if(typeof node_lookup[character.mother] != 'undefined') { + if(typeof node_lookup[character.mother] !== 'undefined') { var ltype; - if(character.mother == character.father) { + if(character.mother === character.father) { ltype = 'homologous'; } else { ltype = 'maternal'; @@ -447,10 +450,10 @@ window.buildFamilyTree = function(slaves = State.variables.slaves, filterID) { source: node_lookup[character.mother]*1 }); } - if(character.mother == character.father) { + if(character.mother === character.father) { continue; } - if(typeof node_lookup[character.father] != 'undefined') { + if(typeof node_lookup[character.father] !== 'undefined') { family_graph.links.push({ type: 'paternal', target: node_lookup[char_id]*1, @@ -494,17 +497,17 @@ window.updateFamilyTree = function(activeSlave = lastActiveSlave, slaves = lastS */ function getSlave(id, expectedGenes) { - if(id == -1) { + if(id === -1) { return {"slaveName":"YOU", "ID":id, "physicalAge":PC.physicalAge, "genes":PC.genes, father:PC.father, mother:PC.mother}; } - if(id == 0) { + if(id === 0) { return {"slaveName":"-", "ID":id, "genes":expectedGenes}; } - if(id == activeSlave.ID) { + if(id === activeSlave.ID) { return activeSlave; } - for(var i = 0; i < slaves.length; ++i) { - if(slaves[i].ID == id) + for(let i = 0; i < slaves.length; ++i) { + if(slaves[i].ID === id) return slaves[i]; } return {"slaveName":"-", "ID":id, "genes":expectedGenes}; @@ -519,17 +522,17 @@ window.updateFamilyTree = function(activeSlave = lastActiveSlave, slaves = lastS } recursionProtectSlaveId[slave.ID] = true; - if(typeof slave.father == "undefined" || typeof slave.mother == "undefined") + if(typeof slave.father === "undefined" || typeof slave.mother === "undefined") return slaveInfo_(slave, activeSlaveId); - if(slave.father == -1 || slave.mother == -1) { + if(slave.father === -1 || slave.mother === -1) { return slaveInfo(getSlave(-1), activeSlaveId, recursionProtectSlaveId); } - if(slave.father != 0) { + if(slave.father !== 0) { return slaveInfo(getSlave(slave.father, "unknownXY"), activeSlaveId, recursionProtectSlaveId); } - if(slave.mother != 0) { + if(slave.mother !== 0) { return slaveInfo(getSlave(slave.mother, "unknownXX"), activeSlaveId, recursionProtectSlaveId); } return slaveInfo_(slave, activeSlaveId); @@ -545,21 +548,21 @@ window.updateFamilyTree = function(activeSlave = lastActiveSlave, slaves = lastS var data = { "name": slave.slaveName + (slave.physicalAge?(" (" + slave.physicalAge + ")"):""), "class" : slave.genes, - "textClass": (activeSlaveId == slave.ID)?"emphasis":"", + "textClass": (activeSlaveId === slave.ID)?"emphasis":"", "marriages": [], }; var spouseToChild = {}; function maybeAddSpouseToChild(child) { - if(child.ID == slave.ID) + if(child.ID === slave.ID) return; - if (child.father == slave.ID) { + if (child.father === slave.ID) { if(!spouseToChild[child.mother]) { spouseToChild[child.mother] = []; } spouseToChild[child.mother].push(child); - } else if (child.mother == slave.ID) { + } else if (child.mother === slave.ID) { if(!spouseToChild[child.father]) { spouseToChild[child.father] = []; } @@ -567,29 +570,29 @@ window.updateFamilyTree = function(activeSlave = lastActiveSlave, slaves = lastS } } - if(activeSlave.ID != PC.ID) + if(activeSlave.ID !== PC.ID) maybeAddSpouseToChild(activeSlave); maybeAddSpouseToChild(getSlave(-1)); - for(var i = 0; i < slaves.length; ++i) { + for(let i = 0; i < slaves.length; ++i) { var child = slaves[i]; - if(child.ID != activeSlave.ID) + if(child.ID !== activeSlave.ID) maybeAddSpouseToChild(child); } - for(var key in spouseToChild) { + for(let key in spouseToChild) { if(spouseToChild.hasOwnProperty(key)) { var children = shouldAddChildren?spouseToChild[key]:[]; - var spouse = getSlave(key, (slaves.genes=="XX")?"unknownXY":(slaves.genes=="XY")?"unknownXX":"unknown"); + var spouse = getSlave(key, (slaves.genes === "XX")?"unknownXY":(slaves.genes === "XY")?"unknownXX":"unknown"); var spouseName; - if (spouse.ID != slave.ID){ - spouseName = spouse.slaveName + (spouse.physicalAge?(" (" + spouse.physicalAge + ")"):"") + if (spouse.ID !== slave.ID){ + spouseName = spouse.slaveName + (spouse.physicalAge?(" (" + spouse.physicalAge + ")"):""); } else { - spouseName = (spouse.ID==-1)?"(yourself)":"(themselves)"; + spouseName = (spouse.ID === -1)?"(yourself)":"(themselves)"; } var marriage = { "spouse": {"name": spouseName, "class": spouse.genes}, - "children": children.map(function (x) { return slaveInfo_(x, activeSlaveId, slavesAdded, depth + 1);} ), + "children": children.map(function (x) { return slaveInfo_(x, activeSlaveId, slavesAdded, depth + 1);} ), /** FIXME: Functions declared within loops referencing an outer scoped variable may lead to confusing semantics. (slaveInfo_, activeSlaveId, slavesAdded, depth) (W083)jshint(W083) */ }; data.marriages.push(marriage); } @@ -597,7 +600,7 @@ window.updateFamilyTree = function(activeSlave = lastActiveSlave, slaves = lastS return data; } - if (activeSlave == PC || activeSlave == null) + if (activeSlave === PC || activeSlave === null) activeSlave = getSlave(-1); const treeData = [slaveInfo(activeSlave, activeSlave.ID)]; console.log("Family tree is", treeData, 'and has:', numTreeNodes); diff --git a/src/js/food.js b/src/js/food.js index 098ff5eb52525ed9bae7fcf40ab69ae244a89d92..e1382fb4cc571af5d83d3396660073837d029e82 100644 --- a/src/js/food.js +++ b/src/js/food.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ /** @param {App.Entity.SlaveState} slave */ window.foodAmount = function (slave) { const V = State.variables; diff --git a/src/js/foreachMacroJS.js b/src/js/foreachMacroJS.js index be77e940d959104e722baf5fcc8401f2d96642fe..ea5e0afcd3ffed39d03bb4a9ef4e833376ad54fb 100644 --- a/src/js/foreachMacroJS.js +++ b/src/js/foreachMacroJS.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ Macro.add('foreach', { skipArgs : true, tags : null, diff --git a/src/js/futureSocietyJS.js b/src/js/futureSocietyJS.js index 2453c30d7f1e181150ead99c9458aba9fb97ad24..6978059a94ef3010a2c41179f75d09b8c285ac8c 100644 --- a/src/js/futureSocietyJS.js +++ b/src/js/futureSocietyJS.js @@ -1,3 +1,5 @@ +/* eslint-disable no-console */ +/* eslint-disable no-undef */ window.FutureSocieties = (function() { return { remove: removeFS, diff --git a/src/js/generateGenetics.js b/src/js/generateGenetics.js index ea23289eab95c8eaf04e7ce937e26641fe91041b..0f0afc00e58a7b7e0cb311bb093267a27327c1a4 100644 --- a/src/js/generateGenetics.js +++ b/src/js/generateGenetics.js @@ -1,4 +1,6 @@ +/* eslint-disable no-undef */ // Generates a child's genetics based off mother and father and returns it as an object to be attached to an ovum + window.generateGenetics = (function() { "use strict"; let genes; @@ -971,7 +973,7 @@ window.generateChild = function (mother, ova, destination) { child.behavioralFlaw = genes.behavioralFlaw; child.fetish = genes.fetish; child.geneticQuirks = clone(genes.geneticQuirks); - if (child.geneticQuirks.albinism == 2) { + if (child.geneticQuirks.albinism === 2) { child.albinismOverride = {skin: genes.skin, eyeColor: genes.eyeColor, hColor: genes.hColor}; child.hColor = "white"; child.pubicHColor = child.hColor; diff --git a/src/js/generateNewSlaveJS.js b/src/js/generateNewSlaveJS.js index 42124482003092bec6d136a017f51a8eba0365fd..80f4198597ce2c16f646e63389d429cde71a3a03 100644 --- a/src/js/generateNewSlaveJS.js +++ b/src/js/generateNewSlaveJS.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ window.GenerateNewSlave = (function(){ 'use strict'; let V, chance; @@ -222,7 +223,7 @@ window.GenerateNewSlave = (function(){ slave.preg = 0; if (slave.physicalAge <= 13) { - if (slave.geneticQuirks.wellHung == 2) { + if (slave.geneticQuirks.wellHung === 2) { if (slave.physicalAge >= 8) { slave.dick = jsEither([2, 2, 3, 3, 4]); } else { @@ -238,7 +239,7 @@ window.GenerateNewSlave = (function(){ } slave.scrotum = slave.balls; } else if (slave.physicalAge <= 15) { - if (slave.geneticQuirks.wellHung == 2) { + if (slave.geneticQuirks.wellHung === 2) { slave.dick = jsEither([3, 3, 4, 4, 5]); } else { slave.dick = jsEither([1, 1, 1, 2, 2, 2, 3]); @@ -250,7 +251,7 @@ window.GenerateNewSlave = (function(){ } slave.scrotum = slave.balls; } else if (slave.physicalAge <= 17) { - if (slave.geneticQuirks.wellHung == 2) { + if (slave.geneticQuirks.wellHung === 2) { slave.dick = jsEither([4, 4, 5, 5, 6]); } else { slave.dick = jsEither([1, 1, 2, 2, 3, 3]); @@ -262,7 +263,7 @@ window.GenerateNewSlave = (function(){ } slave.scrotum = slave.balls; } else { - if (slave.geneticQuirks.wellHung == 2) { + if (slave.geneticQuirks.wellHung === 2) { slave.dick = jsEither([5, 5, 6]); } else { slave.dick = jsEither([1, 2, 2, 2, 3, 3, 3, 4, 4, 5]); @@ -273,7 +274,7 @@ window.GenerateNewSlave = (function(){ slave.balls = jsEither([1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5]); } if (slave.balls !== 0) { - if (slave.geneticQuirks.wellHung == 2) { + if (slave.geneticQuirks.wellHung === 2) { slave.balls++; } slave.scrotum = slave.balls + jsEither([0, 0, 1]); @@ -1103,13 +1104,13 @@ window.GenerateNewSlave = (function(){ slave.geneticQuirks.hyperFertility = 1; } chance = jsRandom(1,20000); - if (chance == 777) { + if (chance === 777) { slave.geneticQuirks.albinism = 2; } else if (chance >= 19500) { slave.geneticQuirks.albinism = 1; } chance = jsRandom(1,20000); - if (chance == 10001) { + if (chance === 10001) { slave.geneticQuirks.heterochromia = 2; } else if (chance >= 19750) { slave.geneticQuirks.heterochromia = 1; @@ -1131,13 +1132,13 @@ window.GenerateNewSlave = (function(){ if (chance >= 9900) { slave.geneticQuirks.hyperFertility = 1; } - if (chance == 777) { + if (chance === 777) { slave.geneticQuirks.albinism = 2; } else if (chance >= 19500) { slave.geneticQuirks.albinism = 1; } chance = jsRandom(1,20000); - if (chance == 10001) { + if (chance === 10001) { slave.geneticQuirks.heterochromia = 2; } else if (chance >= 19750) { slave.geneticQuirks.heterochromia = 1; @@ -1268,7 +1269,7 @@ window.GenerateNewSlave = (function(){ slave.skin = jsEither(["black", "brown", "dark brown"]); slave.hColor = jsEither(["black", "black", "black", "brown"]); slave.hStyle = jsEither(["crinkled", "neat"]); - if (slave.geneticQuirks.heterochromia == 2) { + if (slave.geneticQuirks.heterochromia === 2) { slave.geneticQuirks.heterochromia = "brown"; } break; @@ -1277,35 +1278,35 @@ window.GenerateNewSlave = (function(){ if (slave.nationality === "German") { slave.skin = jsEither(["fair", "light", "pale"]); slave.eyeColor = jsEither(["blue", "blue", "blue", "brown", "green"]); - if (slave.geneticQuirks.heterochromia == 2) { + if (slave.geneticQuirks.heterochromia === 2) { slave.geneticQuirks.heterochromia = jsEither(["blue", "blue", "blue", "brown", "green"]); } slave.hColor = jsEither(["black", "blonde", "blonde", "blonde", "brown", "red"]); } else if (slave.nationality === "Icelandic") { slave.skin = jsEither(["fair", "light", "pale", "pale"]); slave.eyeColor = jsEither(["blue", "blue", "blue", "brown", "green"]); - if (slave.geneticQuirks.heterochromia == 2) { + if (slave.geneticQuirks.heterochromia === 2) { slave.geneticQuirks.heterochromia = jsEither(["blue", "blue", "blue", "brown", "green"]); } slave.hColor = jsEither(["black", "blonde", "blonde", "blonde", "brown", "red"]); } else if (slave.nationality === "Irish") { slave.skin = jsEither(["fair", "light", "pale", "pale"]); slave.eyeColor = jsEither(["blue", "brown", "green", "green", "green"]); - if (slave.geneticQuirks.heterochromia == 2) { + if (slave.geneticQuirks.heterochromia === 2) { slave.geneticQuirks.heterochromia = jsEither(["blue", "brown", "green", "green", "green"]); } slave.hColor = jsEither(["black", "blonde", "brown", "red", "red", "red"]); } else if (slave.nationality === "Scottish") { slave.skin = jsEither(["fair", "fair", "light", "pale"]); slave.eyeColor = jsEither(["blue", "brown", "brown", "green", "green", "green"]); - if (slave.geneticQuirks.heterochromia == 2) { + if (slave.geneticQuirks.heterochromia === 2) { slave.geneticQuirks.heterochromia = jsEither(["blue", "brown", "brown", "green", "green", "green"]); } slave.hColor = jsEither(["black", "black", "blonde", "red", "red", "red", "brown"]); } else { slave.skin = jsEither(["fair", "light", "pale"]); slave.eyeColor = jsEither(["blue", "brown", "green"]); - if (slave.geneticQuirks.heterochromia == 2) { + if (slave.geneticQuirks.heterochromia === 2) { slave.geneticQuirks.heterochromia = jsEither(["blue", "brown", "green"]); } slave.hColor = jsEither(["black", "blonde", "brown", "red"]); @@ -1316,7 +1317,7 @@ window.GenerateNewSlave = (function(){ slave.lips = jsRandom(5,25); slave.skin = jsEither(["brown", "dark brown", "dark olive", "light olive", "tanned"]); slave.hColor = jsEither(["black", "brown"]); - if (slave.geneticQuirks.heterochromia == 2) { + if (slave.geneticQuirks.heterochromia === 2) { slave.geneticQuirks.heterochromia = jsEither(["blue", "brown", "green"]); } slave.hStyle = "neat"; @@ -1329,7 +1330,7 @@ window.GenerateNewSlave = (function(){ slave.skin = jsEither(["dark", "light"]); slave.hColor = "black"; slave.hStyle = "neat"; - if (slave.geneticQuirks.heterochromia == 2) { + if (slave.geneticQuirks.heterochromia === 2) { slave.geneticQuirks.heterochromia = "brown"; } break; @@ -1338,7 +1339,7 @@ window.GenerateNewSlave = (function(){ slave.skin = jsEither(["dark olive", "light olive", "light"]); slave.hColor = "black"; slave.hStyle = "neat"; - if (slave.geneticQuirks.heterochromia == 2) { + if (slave.geneticQuirks.heterochromia === 2) { slave.geneticQuirks.heterochromia = jsEither(["blue", "brown", "green"]); } break; @@ -1349,7 +1350,7 @@ window.GenerateNewSlave = (function(){ slave.skin = jsEither(["fair", "light olive", "light", "tanned"]); slave.hColor = "black"; slave.hStyle = "neat"; - if (slave.geneticQuirks.heterochromia == 2) { + if (slave.geneticQuirks.heterochromia === 2) { slave.geneticQuirks.heterochromia = jsEither(["blue", "brown", "green"]); } break; @@ -1358,7 +1359,7 @@ window.GenerateNewSlave = (function(){ slave.skin = jsEither(["dark", "light", "pale"]); slave.hColor = jsEither(["black", "black", "black", "black", "blonde", "brown", "brown", "red"]); slave.hStyle = "neat"; - if (slave.geneticQuirks.heterochromia == 2) { + if (slave.geneticQuirks.heterochromia === 2) { slave.geneticQuirks.heterochromia = jsEither(["blue", "brown", "green"]); } } diff --git a/src/js/hTagMacroJS.js b/src/js/hTagMacroJS.js index 1f4eaa36511f8c7fc1c955a01d44179843905177..64681ad4b2d674888901a44ca00d456f210377db 100644 --- a/src/js/hTagMacroJS.js +++ b/src/js/hTagMacroJS.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ /* * <<htag>> macro * A simple macro which allows to create wrapping html elements with dynamic IDs. diff --git a/src/js/heroCreator.js b/src/js/heroCreator.js index faa919b75ca7ed098f3cf6ed21d43c1d73f821ad..5fe425a72ad4120d07bd8f3c609d3c8d05201118 100644 --- a/src/js/heroCreator.js +++ b/src/js/heroCreator.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ /** * @param {App.Entity.SlaveState} heroSlave * @param {App.Entity.SlaveState} baseHeroSlave diff --git a/src/js/optionsMacro.js b/src/js/optionsMacro.js index 8fc97a6ff5ec9f62a3ee5c08a64108b84b21b273..bea08c69fe3e3f8cee1a326e0c0b7b2f46f8807d 100644 --- a/src/js/optionsMacro.js +++ b/src/js/optionsMacro.js @@ -1,3 +1,5 @@ +/* eslint-disable no-console */ +/* eslint-disable no-undef */ /* Use like: <<options $varname "New Passage (defaults to current passage)">> A title @@ -7,17 +9,25 @@ <<comment>> Some comment to add at the end <</option>> + + optionlt and optionslte lets you also specifiy a 'less than' or 'less than or + equal' value, to show an option as selected if it is less than this amount + (and not selected by a previous option) + + <<optionlt "less than value" "value_to_set_varname_to" "English text to show user" "additional variables to set when clicked" "Extra english text to show, but not as a link">> */ Macro.add('options', { skipArgs : false, - tags : ['option', 'comment'], + tags : ['option', 'comment', 'optionlt', 'optionlte', 'optiongt', 'optiongte', 'optiondefault'], handler : function () { try { var currentOption = this.payload[0].args[0]; + var currentOptionIsNumber = typeof currentOption === "number"; var variable = null; var title = this.payload[0].contents || ''; var passageName = this.payload[0].args[1] || passage(); var found = false; + var found_index = 0; var comment = null; var hasMultipleOptionsWithSameValue = false; var description = ""; @@ -26,7 +36,7 @@ Macro.add('options', { variable like $foo */ if (this.payload[0].args.full && - this.payload[0].args.full != '""' && this.payload[0].args.full != "''") { + this.payload[0].args.full !== '""' && this.payload[0].args.full !== "''") { if (currentOption === undefined) currentOption = false; if (this.payload[0].args.full.startsWith("State.temporary.")) { @@ -39,50 +49,86 @@ Macro.add('options', { } /* First print out the string for the current value */ - for (var i = 1, len = this.payload.length; i < len; ++i) { + for (let i = 1, len = this.payload.length; i < len; ++i) { if (this.payload[i].name === 'option') { if (this.payload[i].args[0] === currentOption) { if (found) { hasMultipleOptionsWithSameValue = true; + } else { + description = this.payload[i].contents; + found_index = i; + found = true; } + } + } else if (this.payload[i].name === 'optionlt') { + if (!found && this.payload[i].args[0] > currentOption) { + description = this.payload[i].contents; + found = true; + found_index = i; + } + } else if (this.payload[i].name === 'optionlte') { + if (!found && this.payload[i].args[0] >= currentOption) { + description = this.payload[i].contents; + found = true; + found_index = i; + } + } else if (this.payload[i].name === 'optiongt') { + if (!found && this.payload[i].args[0] < currentOption) { + description = this.payload[i].contents; + found = true; + found_index = i; + } + } else if (this.payload[i].name === 'optiongte') { + if (!found && this.payload[i].args[0] <= currentOption) { + description = this.payload[i].contents; + found = true; + found_index = i; + } + } else if (this.payload[i].name === 'optiondefault') { + if (!found) { description = this.payload[i].contents; found = true; + found_index = i; } } else if (this.payload[i].name === 'comment') { comment = this.payload[i].contents; } else { - throw new Error("Only valid tag is 'option' inside 'options'") + throw new Error("Only valid tag is 'option' inside 'options'"); } } } - var showSelectedOption = true; //this.payload.length != 3 || !description; + var showSelectedOption = true; //this.payload.length !== 3 || !description; /* Now print out the list of options */ var output = ""; - for (var i = 1, len = this.payload.length; i < len; ++i) { - if (this.payload[i].name === 'option') { + for (let i = 1, len = this.payload.length; i < len; ++i) { + if (this.payload[i].name.startsWith('option')) { var args = this.payload[i].args; + var hasComparitor = this.payload[i].name !== "option" && this.payload[i].name !== "optiondefault"; + var argText = args[hasComparitor ? 2 : 1] || ""; if (args.length === 0) { output += this.payload[i].contents.trim(); } else { - var extraComment = args[3] ? (' ' + args[3]) : ''; + var extraComment = args[hasComparitor ? 4: 3]; + extraComment = extraComment ? ' ' + extraComment : ''; // We use a very crude heuristic for styling 'Enable' // and 'Disable' buttons differently. - const isEnableOption = args[1].startsWith("Enable") || args[1] === "Yes" || args[1].startsWith("Allow"); - const isDisableOption = args[1].startsWith("Disable") || args[1] === "No" || args[1].startsWith("Deny"); + const isEnableOption = argText && (argText.startsWith("Enable") || argText === "Yes" || argText.startsWith("Allow")); + const isDisableOption = argText && (argText.startsWith("Disable") || argText === "No" || argText.startsWith("Deny")); var className = "optionMacroOption " + (isEnableOption ? "optionMacroEnable" : isDisableOption ? "optionMacroDisable" : ""); - if (args[0] !== currentOption || hasMultipleOptionsWithSameValue) { - var onClickChange = args[2] ? (', ' + args[2]) : ''; - output += '<span class="' + className + '">[[' + args[1] + extraComment + '|' + passageName + "][" + variable + " = " + JSON.stringify(args[0]) + onClickChange + "]]" + "</span>"; + if (found_index !== i || hasMultipleOptionsWithSameValue) { + var onClickChange = args[hasComparitor ? 3 : 2]; + onClickChange = onClickChange ? ', ' + onClickChange : ''; + output += '<span class="' + className + '">[[' + argText + extraComment + '|' + passageName + "][" + variable + " = " + JSON.stringify(args[hasComparitor ? 1 : 0]) + onClickChange + "]]" + "</span>"; } else if (showSelectedOption) { - output +='<span class="optionMacroSelected ' + className + '">' + args[1] + extraComment + '</span>'; + output +='<span class="optionMacroSelected ' + className + '">' + argText + extraComment + '</span>'; } } } } jQuery(this.output).wiki( - '<span class="optionMacro">' + + '<span class="optionMacro ' + (currentOptionIsNumber ? 'optionMacroNumber' : '') + '">' + '<span class="optionDescription">' + title + ' ' + description + "</span>" + '<span class="optionValue">' + output + "</span>" + (comment ? '<span class="optionComment">//' + comment + "//</span>" : '') + diff --git a/src/js/pregJS.js b/src/js/pregJS.js index 74c2dabe3087e6b4d27181cc66abfa0a0dd9e2fa..29a156582111bfd18ffccd936ccf538fab404962 100644 --- a/src/js/pregJS.js +++ b/src/js/pregJS.js @@ -1,15 +1,18 @@ +/* eslint-disable no-empty */ +/* eslint-disable no-undef */ /* Major props to the anons who worked together to forge the Super Pregnancy Project. Let your legacy go unforgotten.*/ window.getPregBellySize = function(s) { + var targetLen; var gestastionWeek = s.preg; var fetuses = s.pregType; var phi = 1.618; if(gestastionWeek <= 32) { - var targetLen = ((0.00006396 * Math.pow(gestastionWeek, 4)) - (0.005501 * Math.pow(gestastionWeek, 3)) + (0.161 * Math.pow(gestastionWeek, 2)) - (0.76 * gestastionWeek) + 0.208); + targetLen = ((0.00006396 * Math.pow(gestastionWeek, 4)) - (0.005501 * Math.pow(gestastionWeek, 3)) + (0.161 * Math.pow(gestastionWeek, 2)) - (0.76 * gestastionWeek) + 0.208); } else if(gestastionWeek <= 106) { - var targetLen = ((-0.0000004675 * Math.pow(gestastionWeek, 4)) + (0.0001905 * Math.pow(gestastionWeek, 3)) - (0.029 * Math.pow(gestastionWeek, 2)) + (2.132 * gestastionWeek) - 16.575); + targetLen = ((-0.0000004675 * Math.pow(gestastionWeek, 4)) + (0.0001905 * Math.pow(gestastionWeek, 3)) - (0.029 * Math.pow(gestastionWeek, 2)) + (2.132 * gestastionWeek) - 16.575); } else { - var targetLen = ((-0.00003266 * Math.pow(gestastionWeek,2)) + (0.076 * gestastionWeek) + 43.843); + targetLen = ((-0.00003266 * Math.pow(gestastionWeek,2)) + (0.076 * gestastionWeek) + 43.843); } var bellySize = ((4 / 3) * (Math.PI) * (phi / 2) * (Math.pow((targetLen / 2), 3)) * fetuses); @@ -383,7 +386,7 @@ window.setPregType = function(actor) { }; /* - Penetrative ability, ability to become pregnant, and canBreed() must be checked outside of this. Designed to assume .eggType == "human". + Penetrative ability, ability to become pregnant, and canBreed() must be checked outside of this. Designed to assume .eggType === "human". target is the slave to get pregnant. Also accepts the PC. chance is the % chance to conceive. hole control's the hole involved (0 - vagina, 1 - ass, 2 - both). .mpreg did this. @@ -407,7 +410,8 @@ window.knockMeUp = function(target, chance, hole, fatherID, displayOverride) { target.pregType = setPregType(target); WombImpregnate(target, target.pregType, target.pregSource, 1); - if (V.menstruation === 1) {} + if (V.menstruation === 1) { + } else if (!displayOverride) { target.pregKnown = 1; if (target.ID === -1) { @@ -433,7 +437,8 @@ window.knockMeUp = function(target, chance, hole, fatherID, displayOverride) { target.pregType = setPregType(target); WombImpregnate(target, target.pregType, target.pregSource, 1); - if (V.menstruation === 1) {} + if (V.menstruation === 1) { + } else if (!displayOverride) { target.pregKnown = 1; if (target.ID === -1) { @@ -492,18 +497,18 @@ window.adjustFatherProperty = function(actor, property, newValue) { let V = State.variables; let fatherIndex; - fatherIndex = V.slaves.findIndex(function(s) { return s.ID == actor.ID; }); + fatherIndex = V.slaves.findIndex(function(s) { return s.ID === actor.ID; }); if (fatherIndex > 0) { V.slaves[fatherIndex][property] = newValue; } else if (V.incubator > 0) { - fatherIndex = V.tanks.findIndex(function(s) { return s.ID == actor.ID; }); + fatherIndex = V.tanks.findIndex(function(s) { return s.ID === actor.ID; }); if (fatherIndex > 0) { V.tanks[fatherIndex][property] = newValue; } } if (fatherIndex === -1) { if (V.nursery > 0) { - fatherIndex = V.cribs.findIndex(function(s) { return s.ID == actor.ID; }); + fatherIndex = V.cribs.findIndex(function(s) { return s.ID === actor.ID; }); if (fatherIndex !== -1) { V.cribs[fatherIndex][property] = newValue; } diff --git a/src/js/quickListJS.js b/src/js/quickListJS.js index 0d844d95609ccbf785fae474868d97aa98b26499..b9cfec3f418ba29127880904a7d3437f5ab12dd8 100644 --- a/src/js/quickListJS.js +++ b/src/js/quickListJS.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ window.sortDomObjects = function (objects, attrName, reverse = 0) { reverse = (reverse) ? -1 : 1; function sortingByAttr (a, b) { @@ -8,7 +9,7 @@ window.sortDomObjects = function (objects, attrName, reverse = 0) { return ((parseInt(bVal) - aInt) * reverse); else if (bVal > aVal) return -1 * reverse; - return ((aVal == bVal) ? 0 : 1) * reverse; + return ((aVal === bVal) ? 0 : 1) * reverse; } return objects.toArray().sort(sortingByAttr); }; diff --git a/src/js/rbuttonJS.js b/src/js/rbuttonJS.js index aee998bf910a3a1f4e8883835d61bd5e06e27cd6..06ff286cd4942cb79649c975b599252f20a91c30 100644 --- a/src/js/rbuttonJS.js +++ b/src/js/rbuttonJS.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ /* This is modified radiobutton macro, for automatic checked state setup*/ /* Usage (be sure to use quotes around parameters): @@ -73,7 +74,7 @@ Macro.add('rbutton', { var replaceEl = document.getElementById(replaceID); //alert (replaceEl); - if (replaceEl != null) { + if (replaceEl !== null) { replaceEl.innerHTML = replaceText; } @@ -86,7 +87,7 @@ Macro.add('rbutton', { var replaceEl = document.getElementById(replaceID); //alert (replaceEl); - if (replaceEl != null) { + if (replaceEl !== null) { replaceEl.innerHTML = replaceText; } @@ -97,7 +98,7 @@ Macro.add('rbutton', { /* Set the story variable to the checked value and the input element to checked, if requested. */ - if (initValue == checkValue) { + if (initValue === checkValue) { el.checked = true; Wikifier.setValue(varName, checkValue); } diff --git a/src/js/removeActiveSlave.js b/src/js/removeActiveSlave.js index 9c62e34d070e2848366709ca1caf85cd7714f34d..2844d619479bbf732b57ac33d2264750cf0fea5a 100644 --- a/src/js/removeActiveSlave.js +++ b/src/js/removeActiveSlave.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ window.removeActiveSlave = function removeActiveSlave() { "use strict"; const V = State.variables; diff --git a/src/js/rulesAssistant.js b/src/js/rulesAssistant.js index 6d2db438933c0bcf567979507844c53591478516..7a86300876ee1bb426a4f9061de2ab6c7a793c39 100644 --- a/src/js/rulesAssistant.js +++ b/src/js/rulesAssistant.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ /** @param {App.Entity.SlaveState} slave */ window.hasSurgeryRule = function (slave, rules) { return rules.some( @@ -184,8 +185,12 @@ window.ruleAppliesP = function ruleAppliesP(cond, slave) { // assignment / facility / special slaves / specific slaves check let assignment = slave.assignment; if (assignment === "be your Concubine") assignment = "serve in the master suite"; + + if (cond.specialSlaves !== -1) { // not "Include", which means "doesn't matter" + flag = flag && (cond.specialSlaves == isLeaderP(slave)); // eslint-disable-line eqeqeq + } + flag = flag && - !(cond.excludeSpecialSlaves && isLeaderP(slave)) && (cond.assignment.length === 0 || cond.assignment.includes(assignment)) && (cond.selectedSlaves.length === 0 || cond.selectedSlaves.includes(slave.ID)) && !(cond.excludedSlaves.includes(slave.ID)); @@ -200,7 +205,7 @@ window.emptyDefaultRule = function emptyDefaultRule() { condition: { function: false, data: {}, - excludeSpecialSlaves: false, + specialSlaves: -1, assignment: [], selectedSlaves: [], excludedSlaves: [], diff --git a/src/js/rulesAssistantOptions.js b/src/js/rulesAssistantOptions.js index 2b61cf819ea041c8828c3563df4443d660adb56c..dc0963c0bf1fa9f0e6f9bf9ae9cedbbc90af4cc2 100644 --- a/src/js/rulesAssistantOptions.js +++ b/src/js/rulesAssistantOptions.js @@ -1,3 +1,4 @@ +/* eslint-disable no-unused-vars */ /* eslint-disable no-undef */ // rewrite of the rules assistant options page in javascript // uses an object-oriented widget pattern @@ -22,7 +23,7 @@ window.rulesAssistantOptions = (function() { else current_rule = V.defaultRules[idx]; } - const root = new Root(element); /** FIXME: 'root' is declared but its value is never read.ts(6133) */ + const root = new Root(element); } function returnP(e) { return e.keyCode === 13; } @@ -507,7 +508,7 @@ window.rulesAssistantOptions = (function() { super("Activation Condition"); this.appendChild(new ConditionFunction()); this.appendChild(new AssignmentInclusion()); - this.appendChild(new SpecialExclusion()); + this.appendChild(new SpecialInclusion()); this.appendChild(new SpecificInclusionExclusion()); } } @@ -827,15 +828,16 @@ window.rulesAssistantOptions = (function() { } } - class SpecialExclusion extends List { + class SpecialInclusion extends List { constructor() { const items = [ - ["Yes", true], - ["No", false] + ["Include", -1], + ["Exclude", 0], + ["Only", 1] ]; - super("Exclude special slaves", items); - this.setValue(current_rule.condition.excludeSpecialSlaves); - this.onchange = (value) => current_rule.condition.excludeSpecialSlaves = value; + super("Special slaves", items); + this.setValue(current_rule.condition.specialSlaves); + this.onchange = (value) => current_rule.condition.specialSlaves = value; } } @@ -1288,7 +1290,7 @@ window.rulesAssistantOptions = (function() { class LeggingsList extends List { constructor() { const items = [ - ["No default setting"], + ["No default setting", "no default setting"], ["None", "none"], ["Short stockings", "short stockings"], ["Long stockings", "long stockings"], diff --git a/src/js/rulesAutosurgery.js b/src/js/rulesAutosurgery.js index 86b325ac1a990bbb3651627af38581d50022f837..0fbe86aef48da9cb918db7d58d9be8c5a53d151b 100644 --- a/src/js/rulesAutosurgery.js +++ b/src/js/rulesAutosurgery.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ window.rulesAutosurgery = (function() { "use strict"; let V; diff --git a/src/js/sexActsJS.js b/src/js/sexActsJS.js index 0b0291db3d5b18d9c4ce9bac0b06b593160b4fa9..f7d8af1a04120583cc9781fec97e59e49ec39625 100644 --- a/src/js/sexActsJS.js +++ b/src/js/sexActsJS.js @@ -1,3 +1,5 @@ +/* eslint-disable no-unused-vars */ +/* eslint-disable no-undef */ /* times is how many times to increment the anal counts. if left undefined it will assume it to be 1. @@ -373,7 +375,7 @@ window.SimpleSexAct = function SimpleSexAct(slave, count) { if (count) { fuckCount = count; } - for (var i = 0; i < fuckCount; i++) { + for (let i = 0; i < fuckCount; i++) { fuckTarget = jsRandom(1, 100); if (slave.nipples === "fuckable" && V.PC.dick === 1 && fuckTarget > 80) { V.mammaryTotal += 1; @@ -412,7 +414,7 @@ window.SimpleSlaveFucking = function SimpleSlaveFucking(slave, count) { if (count) { fuckCount = count; } - for (var i = 0; i < fuckCount; i++) { + for (let i = 0; i < fuckCount; i++) { fuckTarget = jsRandom(1, 100); if (slave.nipples === "fuckable" && fuckTarget > 80) { V.mammaryTotal += 1; @@ -446,7 +448,7 @@ window.SimpleSlaveSlaveFucking = function SimpleSlaveSlaveFucking(subslave, doms if (count) { fuckCount = count; } - for (var j = 0; j < fuckCount; j++) { + for (let j = 0; j < fuckCount; j++) { //there is a reason randomization happens inside cycle - to spread fuck around, otherwise cycle isn't even needed fuckTarget = jsRandom(1, 100); if (subslave.nipples === "fuckable" && canPenetrate(domslave) && fuckTarget > 80) { diff --git a/src/js/slaveCostJS.js b/src/js/slaveCostJS.js index 8aa75bdaf377fb909b9fc649ff4d00ef278ec5db..1339c626047b25e8985575bea6ee7ed7a814d72d 100644 --- a/src/js/slaveCostJS.js +++ b/src/js/slaveCostJS.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ window.Beauty = (function() { "use strict"; let V, arcology, beauty; @@ -1083,7 +1084,7 @@ window.Beauty = (function() { if (arcology.FSChattelReligionist > 40 && arcology.FSBodyPurist === "unset") { let tats = ["anusTat", "armsTat", "backTat", "boobsTat", "buttTat", "dickTat", "legsTat", "lipsTat", "shouldersTat", "stampTat", "vaginaTat"]; let sacrilegeCount = 0; - for (var index in tats) { + for (let index in tats) { if (slave[index] === "sacrilege") { sacrilegeCount++; } @@ -1191,7 +1192,7 @@ window.Beauty = (function() { /** @param {App.Entity.SlaveState} slave */ function calcMultipliersBeauty(slave) { calcBellyBeauty(slave); - if (slave.geneticQuirks.albinism == 2) { + if (slave.geneticQuirks.albinism === 2) { beauty += 0.1*beauty; } if (slave.breedingMark === 1) { diff --git a/src/js/slaveGenerationJS.js b/src/js/slaveGenerationJS.js index df933301d9d3e5f381660f4e43cc1b3e96aff008..f7fa84384cb8ba62a9ed189512cb90181ea7f6ae 100644 --- a/src/js/slaveGenerationJS.js +++ b/src/js/slaveGenerationJS.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ window.nationalityToRace = /** @param {App.Entity.SlaveState} slave */ function nationalityToRace(slave) { slave.race = hashChoice(setup.raceSelector[slave.nationality] || setup.raceSelector[""]); }; diff --git a/src/js/slaveStatsChecker.js b/src/js/slaveStatsChecker.js index e1cdfe727f2462491e57f8f9c57b5c04eedbf6ef..12b4ef0ec3caa4e15235a8d6ee8dc10ec6c1f1b8 100644 --- a/src/js/slaveStatsChecker.js +++ b/src/js/slaveStatsChecker.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ window.SlaveStatsChecker = (function() { return { checkForLisp: hasLisp, @@ -171,7 +172,7 @@ window.canGetPregnant = /** @param {App.Entity.SlaveState} slave */ function(sla } }; -/** contraceptives (.preg == -1) do not negate this function +/** contraceptives (.preg === -1) do not negate this function * @param {App.Entity.SlaveState} slave */ window.isFertile = function(slave) { if (!slave) { diff --git a/src/js/slaveSummaryWidgets.js b/src/js/slaveSummaryWidgets.js index fa8ff6642dddbc7aa7bbef0b79ba44a89ccae6d3..7f2a7467ec86365583c8d7acf569965d0000b233 100644 --- a/src/js/slaveSummaryWidgets.js +++ b/src/js/slaveSummaryWidgets.js @@ -1,3 +1,4 @@ +/* eslint-disable no-unused-vars */ /* eslint-disable no-undef */ window.clearSummaryCache = /** @param {App.Entity.SlaveState | number} slave */ function clearSummaryCache(slave) { if (!slave) @@ -4906,8 +4907,8 @@ App.UI.slaveSummaryList = function (passageName) { */ if (((_Count > 1) && (_indexed === 0) && (((passageName === 'Main') && (V.Flag === undefined) && ((V.useSlaveSummaryTabs === 0) || (V.slaveAssignmentTab === "all"))) || (V.Flag === 1)))) { - let _indexed = 1, /** FIXME: '_indexed' is declared but its value is never read.ts(6133) */ - _counter = 0, /** FIXME: '_counter' is declared but its value is never read.ts(6133) */ + let _indexed = 1, + _counter = 0, _buttons = [], _offset = -50; if (/Select/i.test(passageName)) { diff --git a/src/js/spanMacroJS.js b/src/js/spanMacroJS.js index dead2c13ec466c0cdd881e9c6e75af14ecd84691..005e6d1c7b6f0380b886b610df78d519f66902d8 100644 --- a/src/js/spanMacroJS.js +++ b/src/js/spanMacroJS.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ /* * <<span>> macro * A minimal macro which allows to create <span> elements with dynamic IDs. diff --git a/src/js/storyJS.js b/src/js/storyJS.js index ee10995deebd21051cfeaeb666886a75c955ac3b..de8ff5d892421569664fb9086d57938ea466478b 100644 --- a/src/js/storyJS.js +++ b/src/js/storyJS.js @@ -1,3 +1,5 @@ +/* eslint-disable no-console */ +/* eslint-disable no-undef */ /*config.history.tracking = false;*/ // State.expired.disable; @@ -586,6 +588,7 @@ window.generateAssistantPronouns = function() { window.printTrinkets = function printTrinkets() { function trinketPluralReplacer(desc) { + let r; switch (desc) { /* not supported best in show ribbons @@ -615,7 +618,7 @@ window.printTrinkets = function printTrinkets() { return "several thank-you notes from MILF tourists whom you made feel welcome in the arcology"; // replacement by groups default: - let r = desc; + r = desc; if (desc.endsWith("citizen")) { // will not reduce spam from different future societies r = r.replace("message", "messages"); r = r.replace("from a", "from"); diff --git a/src/js/summaryWidgets.js b/src/js/summaryWidgets.js index 215c5b2488b8254ace13e0eec080bf988903f853..5c5ccf5b4d1584d88d9ba9246bb0be650f42d25e 100644 --- a/src/js/summaryWidgets.js +++ b/src/js/summaryWidgets.js @@ -1,3 +1,5 @@ +/* eslint-disable no-undef */ +/* eslint-disable no-unused-vars */ /** * @param {App.Entity.SlaveState} slave */ diff --git a/src/js/textInput.js b/src/js/textInput.js index 86d6eebae8327921825d050c38d03b02e984af42..2e4cbbe37898b4f4968f00742529ce14abb33929 100644 --- a/src/js/textInput.js +++ b/src/js/textInput.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ Macro.add("textinput", { // Signifies that the macro is a container macro. tags: null, diff --git a/src/js/textboxJS.js b/src/js/textboxJS.js index 5dd0388fe6f3338e9e3df74875c5ee4610b5bf91..e4917d08c542242f60ab649b681be3889da9901b 100644 --- a/src/js/textboxJS.js +++ b/src/js/textboxJS.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ /* Nicked off greyelf, works for replace textboxes */ window.setReplaceTextboxMaxLength = function (storyVarName, maxLength) { var textboxId = '#textbox-' + Util.slugify(storyVarName); diff --git a/src/js/utilJS.js b/src/js/utilJS.js index 641d23b34e4556269332e5e05bfab11960577eee..c4ee812092660e639c6b6b9dac5de5fd25840f03 100644 --- a/src/js/utilJS.js +++ b/src/js/utilJS.js @@ -1,3 +1,6 @@ +/* eslint-disable no-unused-vars */ +/* eslint-disable no-console */ +/* eslint-disable no-undef */ /* * Height.mean(nationality, race, genes, age) - returns the mean height for the given combination and age in years (>=2) * Height.mean(nationality, race, genes) - returns the mean adult height for the given combination @@ -501,90 +504,90 @@ window.num = function(x) { const V = State.variables; let max = V.showNumbersMax; - function commaNum(s) { - if (!s) { - return 0; - } - if (State.variables.formatNumbers !== 1) { - return s; - } else { - return s.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); - } - } + var ONE_TO_NINETEEN = [ + 'one', 'two', 'three', 'four', 'five', + 'six', 'seven', 'eight', 'nine', 'ten', + 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', + 'sixteen', 'seventeen', 'eighteen', 'nineteen', + ]; - if (V.showNumbers !== 2) { - if (x === 0) { - return 'zero'; - } + var TENS = [ + 'ten', 'twenty', 'thirty', 'forty', 'fifty', + 'sixty', 'seventy', 'eighty', 'ninety', + ]; - let ONE_TO_NINETEEN = [ - 'one', 'two', 'three', 'four', 'five', - 'six', 'seven', 'eight', 'nine', 'ten', - 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', - 'sixteen', 'seventeen', 'eighteen', 'nineteen', - ]; + var SCALES = ['thousand', 'million', 'billion', 'trillion']; - let TENS = [ - 'ten', 'twenty', 'thirty', 'forty', 'fifty', - 'sixty', 'seventy', 'eighty', 'ninety', - ]; + // helper function for use with Array.filter + function isTruthy(item) { + return !!item; + } - let SCALES = ['thousand', 'million', 'billion', 'trillion']; + // convert a number into "chunks" of 0-999 + function chunk(number) { + let thousands = []; - // helper function for use with Array.filter - function isTruthy(item) { - return !!item; + while (number > 0) { + thousands.push(number % 1000); + number = Math.floor(number / 1000); } - // convert a number into "chunks" of 0-999 - function chunk(number) { - let thousands = []; + return thousands; + } - while (number > 0) { - thousands.push(number % 1000); - number = Math.floor(number / 1000); - } + // translate a number from 1-999 into English + function inEnglish(number) { + let hundreds; + let tens; + let ones; + let words = []; - return thousands; + if (number < 20) { + return ONE_TO_NINETEEN[number - 1]; // may be undefined } - // translate a number from 1-999 into English - function inEnglish(number) { - let hundreds; - let tens; - let ones; - let words = []; + if (number < 100) { + ones = number % 10; + tens = number / 10 | 0; // equivalent to Math.floor(number / 10) - if (number < 20) { - return ONE_TO_NINETEEN[number - 1]; // may be undefined - } + words.push(TENS[tens - 1]); + words.push(inEnglish(ones)); - if (number < 100) { - ones = number % 10; - tens = number / 10 | 0; // equivalent to Math.floor(number / 10) + return words.filter(isTruthy).join('-'); + } - words.push(TENS[tens - 1]); - words.push(inEnglish(ones)); + hundreds = number / 100 | 0; + words.push(inEnglish(hundreds)); + words.push('hundred'); + words.push(inEnglish(number % 100)); - return words.filter(isTruthy).join('-'); - } + return words.filter(isTruthy).join(' '); + } - hundreds = number / 100 | 0; - words.push(inEnglish(hundreds)); - words.push('hundred'); - words.push(inEnglish(number % 100)); + // append the word for a scale. Made for use with Array.map + function appendScale(chunk, exp) { + let scale; + if (!chunk) { + return null; + } + scale = SCALES[exp - 1]; + return [chunk, scale].filter(isTruthy).join(' '); + } - return words.filter(isTruthy).join(' '); + function commaNum(s) { + if (!s) { + return 0; + } + if (State.variables.formatNumbers !== 1) { + return s; + } else { + return s.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); } + } - // append the word for a scale. Made for use with Array.map - function appendScale(chunk, exp) { - let scale; - if (!chunk) { - return null; - } - scale = SCALES[exp - 1]; - return [chunk, scale].filter(isTruthy).join(' '); + if (V.showNumbers !== 2) { + if (x === 0) { + return 'zero'; } let string = chunk(x) @@ -681,6 +684,7 @@ window.massFormat = function (s) { }; window.budgetLine = function(category, title) { + const V = State.variables; // TODO: convert budgetLine references to JS let income; let expenses; let profits; @@ -705,7 +709,7 @@ window.budgetLine = function(category, title) { <td>${title}</td>\ <td>\ <<if (${income}.${category}) > 0>>\ - @@.yellowgreen;<<print cashFormat(${income}.${category})>>@@\ /*please don't put a plus sign in front of income, it's not done on a budget sheet. Safe to assume money is money unless it's in parenthesis or with a - sign.*/ + @@.yellowgreen;<<print cashFormat(${income}.${category})>>@@ /*please don't put a plus sign in front of income, it's not done on a budget sheet. Safe to assume money is money unless it's in parenthesis or with a - sign.*/ <<else>>\ <<print cashFormat(${income}.${category})>>\ <</if>>\ diff --git a/src/js/vignettes.js b/src/js/vignettes.js index 53ae2ddb2111ed62dcafc5ea1e4a66e07e178a17..b47ce02d1263405100c776bfb233763ed79d0ad7 100644 --- a/src/js/vignettes.js +++ b/src/js/vignettes.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ window.GetVignette = /** @param {App.Entity.SlaveState} slave */ function GetVignette(slave) { const V = State.variables; let vignettes = []; diff --git a/src/js/walkPastJS.js b/src/js/walkPastJS.js index d2ed0f66621b58703a855d96cba72353ae4885c9..ca56e19c2cee92cb7f1c22b3b2a073a088c65ffc 100644 --- a/src/js/walkPastJS.js +++ b/src/js/walkPastJS.js @@ -1,3 +1,5 @@ +/* eslint-disable no-unused-vars */ +/* eslint-disable no-undef */ /* temporary container until the entire thing is complete. No point in not deploying the working functions, you know? */ window.primeSlave = function(activeSlave, seed) { @@ -68,7 +70,7 @@ window.loverSlave = function(activeSlave) { var _seed = jsRandom(1,100); var _fuckSpot; - if (_partnerSlave != undefined) { + if (_partnerSlave !== undefined) { var pronouns2 = getPronouns(_partnerSlave); var he2 = pronouns2.pronoun, him2 = pronouns2.object, his2 = pronouns2.possessive, hers2 = pronouns2.possessivePronoun, himself2 = pronouns2.objectReflexive, boy2 = pronouns2.noun; @@ -163,7 +165,7 @@ window.loverSlave = function(activeSlave) { } else if (canDoAnal(activeSlave) && activeSlave.anus > 0 && _fuckSeed > 10) { if (canPenetrate(_partnerSlave)) { t += `${partnerName} is enthusiastically fucking ${name}'s ass.`; - } else if (_partnerSlave.amp != 1) { + } else if (_partnerSlave.amp !== 1) { t += `${partnerName} is enthusiastically fisting ${name}'s ass.`; } else { t += `${partnerName} is enthusiastically pounding ${name}'s ass with a dildo.`; @@ -185,7 +187,7 @@ window.loverSlave = function(activeSlave) { } } else { t += `${name} loves having ${his} breasts suckled and has ${partnerName}'s lips wrapped around a nipple. `; - if (activeSlave.amp != 1) { + if (activeSlave.amp !== 1) { t += `${partnerName} is held close until ${his2} ${activeSlaveRel} has been completely emptied.`; } else { t += `${partnerName} knows that ${his2} ${activeSlaveRel} can't milk ${himself} and appreciates the act.`; @@ -461,7 +463,7 @@ window.loverSlave = function(activeSlave) { } else if (activeSlave.dick > 0 && _fuckSeed > 50) { t += `${name} is deepthroating ${partnerName} as ${he2} struggles to breath.`; } else if (canDoVaginal(activeSlave) && _fuckSeed > 30) { - if (canPenetrate(_partnerSlave) && activeSlave.vagina != 0) { + if (canPenetrate(_partnerSlave) && activeSlave.vagina !== 0) { if (_fuckSeed > 45 && _partnerSlave.amp !== 1) { t += `${name} is forcing ${partnerName} to hold ${him} aloft as ${he} enjoys a good vaginal pounding from an unwilling partner.`; } else if (_fuckSeed > 40 && activeSlave.amp !== 1 && _partnerSlave.amp !== 1) { @@ -479,7 +481,7 @@ window.loverSlave = function(activeSlave) { } else if (canDoAnal(activeSlave) && canPenetrate(_partnerSlave) && _fuckSeed > 10 && activeSlave.anus !== 0) { if (_fuckSeed > 20 && activeSlave.amp !== 1) { t += `${name} is forcing ${partnerName} to hold ${him} aloft as ${he} enjoys a good anal pounding from an unwilling partner.`; - } else if (_fuckSeed > 10 && activeSlave.amp != 1 && _partnerSlave.amp !== 1) { + } else if (_fuckSeed > 10 && activeSlave.amp !== 1 && _partnerSlave.amp !== 1) { t += `${name} has ${partnerName} pinned against the wall and is taking ${his2} dick in ${his} ass by force.`; } else { t += `${name} has ${partnerName} on ${his2} back and is anally riding ${his2} dick while ${he2} tries to buck ${him} off.`; @@ -889,9 +891,9 @@ window.loverSlave = function(activeSlave) { } else { t += `on ${name}'s bedroll `; } - t += `${fuckspot}, having gentle anal sex while spooning. ${name} is enjoying ${partnerName}'s ass, and is doing ${his} best to ensure ${his} ${activeSlaveRel} enjoys being buttfucked. ${He}'s nibbling ${his} ${activeSlaveRel}'s ` + t += `${fuckspot}, having gentle anal sex while spooning. ${name} is enjoying ${partnerName}'s ass, and is doing ${his} best to ensure ${his} ${activeSlaveRel} enjoys being buttfucked. ${He}'s nibbling ${his} ${activeSlaveRel}'s `; if (_partnerSlave.earShape !== "none") { - t +=`ears and ` + t +=`ears and `; } t += `neck, cupping a breast with one hand, and lightly stimulating ${him2} with the other.`; } else if (activeSlave.clit > 2 && canDoAnal(_partnerSlave) && _partnerSlave.anus > 0 && _partnerSlave.amp !== 1 && activeSlave.amp !== 1) { @@ -911,9 +913,9 @@ window.loverSlave = function(activeSlave) { } else { t += `on ${name}'s bedroll `; } - t += `${fuckspot}, spooning while ${name} gently rubs ${his} cock between ${partnerName}'s thighs, pressed tightly together. Since ${partnerName} is a virgin, this is the closest they can come to penetrative intercourse, but ${name} is enjoying ${partnerName}'s body anyway, and is doing ${his} best to ensure ${his} ${activeSlaveRel} enjoys ${himself2}. ${He}'s nibbling ${his} ${activeSlaveRel}'s ` + t += `${fuckspot}, spooning while ${name} gently rubs ${his} cock between ${partnerName}'s thighs, pressed tightly together. Since ${partnerName} is a virgin, this is the closest they can come to penetrative intercourse, but ${name} is enjoying ${partnerName}'s body anyway, and is doing ${his} best to ensure ${his} ${activeSlaveRel} enjoys ${himself2}. ${He}'s nibbling ${his} ${activeSlaveRel}'s `; if (_partnerSlave.earShape !== "none") { - t +=`ears and ` + t +=`ears and `; } t += `neck, cupping a breast with one hand, and lightly stimulating ${him2} with the other.`; } else if (activeSlave.clit > 2 && canDoVaginal(activeSlave) && _partnerSlave.amp !== 1 && activeSlave.amp !== 1) { @@ -948,9 +950,9 @@ window.loverSlave = function(activeSlave) { } else { t += `on ${name}'s bedroll `; } - t += `${fuckspot}, having gentle anal sex while spooning. ${name} is enjoying penetrating ${partnerName}'s ass with a strap-on, and is doing ${his} best to ensure ${his} ${activeSlaveRel} enjoys being buttfucked. ${He}'s nibbling ${his} ${activeSlaveRel}'s ` + t += `${fuckspot}, having gentle anal sex while spooning. ${name} is enjoying penetrating ${partnerName}'s ass with a strap-on, and is doing ${his} best to ensure ${his} ${activeSlaveRel} enjoys being buttfucked. ${He}'s nibbling ${his} ${activeSlaveRel}'s `; if (_partnerSlave.earShape !== "none") { - t +=`ears and ` + t +=`ears and `; } t += `neck, cupping a breast with one hand, and lightly stimulating ${him} with the other.`; } else if (_partnerSlave.amp !== 1 && activeSlave.amp !== 1) { @@ -1067,7 +1069,7 @@ window.loverSlave = function(activeSlave) { t += `${name} is spooning ${his} ${activeSlaveRel} possessively, ${his} rounded belly pushing into ${his2} back.`; } else if (_partnerSlave.belly >= 5000) { t += `${name} is spooning ${his} ${activeSlaveRel} possessively`; - if (activeSlave.amp != 1) { + if (activeSlave.amp !== 1) { t += `, and even in ${his} sleep, has a proprietary hand on ${partnerName}'s belly`; } t += `.`; @@ -1103,9 +1105,9 @@ window.loverSlave = function(activeSlave) { case "cutting": t += `seeing to their chores together. ${name} `; if (canTalk(activeSlave) && canHear(_partnerSlave)) { - t += `is making biting remarks about another one of your other slaves, with which ${his} ${activeSlaveRel} agrees tolerantly.`; + t += `is making biting remarks about another one of your other slaves, with which ${his} ${activeSlaveRel} agrees tolerantly.`; } else { - t += `is making ${his} thoughts about another one of your other slaves clear to ${his} ${activeSlaveRel}.`; + t += `is making ${his} thoughts about another one of your other slaves clear to ${his} ${activeSlaveRel}.`; } break; case "funny": @@ -1120,7 +1122,7 @@ window.loverSlave = function(activeSlave) { } t += `with ${his} antics.`; } - break + break; case "fitness": t += `have just woken up. `; if (activeSlave.amp !== 1) { @@ -1128,7 +1130,7 @@ window.loverSlave = function(activeSlave) { } else { t += `${name} is doing ${his} morning exercises, and ${his} ${activeSlaveRel} is sleepily sitting nearby, providing moral support.`; } - break + break; case "insecure": t += `have just woken up. ${name} is getting dressed when ${his} ${activeSlaveRel} `; if ( (canTalk(_partnerSlave) && canHear(activeSlave)) || (_partnerSlave.amp !== 1 && canSee(activeSlave)) ) { @@ -1146,7 +1148,7 @@ window.loverSlave = function(activeSlave) { } else { t += `blushing, ${he} seems to be substituting in the occasional lewd act.`; } - break + break; case "advocate": if (canTalk(activeSlave)) { t += `starting a meal together. A third, less well trained slave has asked ${name} an innocent question, and is getting enthusiastic slave dogma in return. ${His} ${activeSlaveRel} smiles tolerantly.`; @@ -1232,7 +1234,7 @@ window.loverSlave = function(activeSlave) { t += ` Lover not found!`; } return t; -} +}; window.relatedSlave = function(activeSlave) { const V = State.variables; @@ -1827,9 +1829,6 @@ window.walkPasts = function(slave, _seed) { t += `under ${V.Schoolteacher.slaveName}, perhaps literally; `; } break; - case "be a subordinate slave": - t += `service your other slaves; `; - break; case "be the Attendant": t += `look after the slaves in ${V.spaName}; `; break; @@ -1868,12 +1867,12 @@ window.walkPasts = function(slave, _seed) { window.boobWatch = function(slave) { /* will be moved up once this becomes a single, contained function. */ - let t = "" - let V = State.variables + let t = ""; + let V = State.variables; - let pronouns = getPronouns(slave) - let he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, boy = pronouns.noun - let He = capFirstChar(he), His = capFirstChar(his) + let pronouns = getPronouns(slave); + let he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, boy = pronouns.noun; + let He = capFirstChar(he), His = capFirstChar(his); let breasts = (slave.boobs < 300) ? `flat chest` : `breasts`; @@ -2250,7 +2249,7 @@ window.boobWatch = function(slave) { // ends needs work block case "no clothing": - if (slave.chastityAnus == 1 || slave.chastityVagina == 1 || slave.chastityPenis == 1) { + if (slave.chastityAnus === 1 || slave.chastityVagina === 1 || slave.chastityPenis === 1) { t += `Since ${he}'s wearing nothing but a chastity belt, ${his} ${(slave.boobs < 300) ? 'non-existent ' : ''}breasts are delightfully naked.`; } else { t += `${His} naked `; @@ -2420,9 +2419,9 @@ window.buttWatch = function(slave) { t += `${His} tight skirt flatters ${his} ass.`; break; case "a schoolgirl outfit": - if (slave.anus == 0) { + if (slave.anus === 0) { t += `This schoolgirl clearly needs to lose ${his} anal virginity.`; - } else if (slave.vagina == 0) { + } else if (slave.vagina === 0) { t += `This schoolgirl clearly takes it up the ass; that way, ${he} can remain a virgin, and be, like, totally pure and innocent.`; } else { t += `This schoolgirl clearly takes it up the ass.`; @@ -2508,7 +2507,7 @@ window.buttWatch = function(slave) { t += `${His} dress can be lifted easily enough to get as ${his} rear.`; break; case "a hanbok": - t += `${His} hanbok can be lifted easily enough to get as ${his} ` + t += `${His} hanbok can be lifted easily enough to get as ${his} `; if (slave.butt > 7) { t += `rear and its motion beneath the fabric certainly invites it.`; } else { diff --git a/src/js/wombJS.js b/src/js/wombJS.js index edd00e15909d12e84e9ff3303f721c07678b6c98..4d2eea75c4db3da11132933c0865661fce0c1619 100644 --- a/src/js/wombJS.js +++ b/src/js/wombJS.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ /* This is a womb processor/simulator script. It takes care of calculation of belly sizes based on individual fetus sizes, with full support of broodmothers implant random turning on and off possibility. Also this can be expanded to store more parents data in each individual fetus in future. Design limitations: @@ -92,12 +93,12 @@ window.WombImpregnate = function(actor, fCount, fatherID, age, surrogate) { tf.splitted = 0; //marker for already splitted fetus. if (surrogate) { tf.motherID = surrogate.ID; //Initial biological mother ID setup. - if(actor.eggType === "human"){ + if(actor.eggType === "human") { tf.genetics = generateGenetics(surrogate, fatherID, i+1); //Stored genetic information. } } else { tf.motherID = actor.ID; //Initial biological mother ID setup. - if(actor.eggType === "human"){ + if(actor.eggType === "human") { tf.genetics = generateGenetics(actor, fatherID, i+1); //Stored genetic information. } } @@ -109,10 +110,10 @@ window.WombImpregnate = function(actor, fCount, fatherID, age, surrogate) { actor.preg = age; } actor.womb.push(tf); - } catch(err){ + } catch(err) { WombInit(actor); actor.womb.push(tf); - alert("WombImpregnate warning - " + actor.slaveName+" "+err); + alert("WombImpregnate warning - " + actor.slaveName+" " + err); } } diff --git a/src/npc/startingGirls/startingGirls.tw b/src/npc/startingGirls/startingGirls.tw index b1042a9cb24bb209a727a29ce8ae4c0b19b061b2..856d55e44b47dc7979ab7312559f0d027771d040 100644 --- a/src/npc/startingGirls/startingGirls.tw +++ b/src/npc/startingGirls/startingGirls.tw @@ -421,1099 +421,1096 @@ __You are customizing this slave:__ | <<link "Start over with a random slave" "Starting Girls">> <<set $fixedNationality = hashChoice($nationalities)>> <<StartingGirlsWorkaround>> -<<StartingGirlsRefresh>> <<SaleDescription>> <<StartingGirlsCost>> <</link>> +<hr> + +<<options $activeSlave.devotion>> + ''Devotion:'' + <<optionlt -95 -100 "Utterly hateful">> + @@.darkviolet;Utterly hateful.@@ + <<optionlt -50 -70 "Hateful">> + @@.darkviolet;Hateful.@@ + <<optionlt -20 -35 "Resistant">> + @@.mediumorchid;Resistant.@@ + <<optionlte 20 0 "Ambivalent">> + @@.yellow;Ambivalent.@@ + <<optionlte 50 35 "Accepting">> + @@.hotpink;Accepting.@@ + <<optionlte 95 70 "Devoted">> + @@.deeppink;Devoted.@@ + <<optiondefault 100 "Worshipful">> + @@.magenta;Worshipful.@@ + <<option>> + <<textbox "$activeSlave.devotion" $activeSlave.devotion "Starting Girls">> + <<comment>> + <<if $activeSlave.devotion > 20>> + //@@.red;Starting slaves incur + <<if $activeSlave.devotion > 50>> + a severe cost penalty at very high + <<else>> + an additional cost penalty at high + <</if>> + levels of devotion. This slave's + <<if $activeSlave.actualAge >= 25>> + <<if $activeSlave.actualAge > 35>>advanced <</if>> + age decreases the penalty + <<else>> + young age requires paying the full penalty<</if>> + .@@// + <</if>> +<</options>> -<hr>''Devotion:'' -<span id="devotion"> -<<if $activeSlave.devotion < -95>>@@.darkviolet;Utterly hateful.@@ -<<elseif $activeSlave.devotion < -50>>@@.darkviolet;Hateful.@@ -<<elseif $activeSlave.devotion < -20>>@@.mediumorchid;Resistant.@@ -<<elseif $activeSlave.devotion <= 20>>@@.yellow;Ambivalent.@@ -<<elseif $activeSlave.devotion <= 50>>@@.hotpink;Accepting.@@ -<<elseif $activeSlave.devotion <= 95>>@@.deeppink;Devoted.@@ -<<else>>@@.magenta;Worshipful.@@ -<</if>> -</span> -<<link "Utterly hateful">><<set $activeSlave.devotion = -100>><<replace "#devotion">>@@.darkviolet;Utterly hateful.@@<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | -<<link "Hateful">><<set $activeSlave.devotion = -70>><<replace "#devotion">>@@.darkviolet;Hateful.@@<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | -<<link "Resistant">><<set $activeSlave.devotion = -35>><<replace "#devotion">>@@.mediumorchid;Resistant.@@<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | -<<link "Ambivalent">><<set $activeSlave.devotion = 0>><<replace "#devotion">>@@.yellow;Ambivalent.@@<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | -<<link "Accepting">><<set $activeSlave.devotion = 35>><<replace "#devotion">>@@.hotpink;Accepting.@@<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | -<<link "Devoted">><<set $activeSlave.devotion = 70>><<replace "#devotion">>@@.deeppink;Devoted.@@<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | -<<link "Worshipful">><<set $activeSlave.devotion = 100>><<replace "#devotion">>@@.magenta;Worshipful.@@<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> -<<textbox "$activeSlave.devotion" $activeSlave.devotion "Starting Girls">> -<span id="devotionWarning"></span> - -<br>''Trust:'' -<span id="trust"> -<<if $activeSlave.trust < -95>>@@.goldenrod;Abjectly terrified.@@ -<<elseif $activeSlave.trust < -50>>@@.goldenrod;Terrified.@@ -<<elseif $activeSlave.trust < -20>>@@.gold;Frightened.@@ -<<elseif $activeSlave.trust <= 20>>@@.yellow;Fearful.@@ -<<elseif $activeSlave.trust <= 50>>@@.mediumaquamarine;Careful.@@ -<<elseif $activeSlave.trust <= 95>>@@.mediumseagreen;Trusting.@@ -<<else>>@@.seagreen;Absolute trust.@@ -<</if>> -</span> -<<link "Abjectly terrified">><<set $activeSlave.trust = -100>><<replace "#trust">>@@.goldenrod;Abjectly terrified.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Terrified">><<set $activeSlave.trust = -70>><<replace "#trust">>@@.goldenrod;Terrified.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Frightened">><<set $activeSlave.trust = -35>><<replace "#trust">>@@.gold;Frightened.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Fearful">><<set $activeSlave.trust = 0>><<replace "#trust">>@@.yellow;Fearful.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Careful">><<set $activeSlave.trust = 35>><<replace "#trust">>@@.mediumaquamarine;Careful.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Trusting">><<set $activeSlave.trust = 70>><<replace "#trust">>@@.mediumseagreen;Trusting.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Absolute trust">><<set $activeSlave.trust = 100>><<replace "#trust">>@@.seagreen;Absolute trust.@@<</replace>><<StartingGirlsCost>><</link>> -<<textbox "$activeSlave.trust" $activeSlave.trust "Starting Girls">> - -<br>''Legal status:'' -<span id="legal"> -<<if $activeSlave.indenture > 0>>Indentured servant with <<textbox "$activeSlave.indenture" $activeSlave.indenture "Starting Girls">> weeks remaining. -<<else>>Slave. -<</if>> -</span> -<<link "Slave">><<set $activeSlave.indenture = -1, $activeSlave.indentureRestrictions = 0>><<replace "#legal">>Slave.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Indentured Servant">><<set $activeSlave.indenture = 52, $activeSlave.indentureRestrictions = 0>><<replace "#legal">>Indentured servant with <<textbox "$activeSlave.indenture" $activeSlave.indenture "Starting Girls">> weeks remaining.<</replace>><<StartingGirlsCost>><</link>> - -<<if $activeSlave.indenture > 0>> - <span id="restrictions"> - <br>''Indenture restrictions:'' - <<if $activeSlave.indentureRestrictions == 2>>Restrictive. - <<elseif $activeSlave.indentureRestrictions == 1>>Protective. - <<else>>None. - <</if>> - </span> - <<link "Restrictive">><<set $activeSlave.indentureRestrictions = 2>><<replace "#restrictions">>Restrictive.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Protective">><<set $activeSlave.indentureRestrictions = 1>><<replace "#restrictions">>Protective.<</replace>><<StartingGirlsCost>><</link>> | - <<link "None">><<set $activeSlave.indentureRestrictions = 0>><<replace "#restrictions">>None.<</replace>><<StartingGirlsCost>><</link>> -<</if>> -<br>''Voice:'' -<span id="voice"> -<<if $activeSlave.voice == 0>>Mute. -<<elseif $activeSlave.voice == 1>>Deep. -<<elseif $activeSlave.voice == 2>>Normal. -<<elseif $activeSlave.voice == 3>>High. -<</if>> -</span> -<<link "Mute">><<set $activeSlave.voice = 0>><<replace "#voice">>Mute.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Deep">><<set $activeSlave.voice = 1>><<replace "#voice">>Deep.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Normal">><<set $activeSlave.voice = 2>><<replace "#voice">>Normal.<</replace>><<StartingGirlsCost>><</link>> | -<<link "High.">><<set $activeSlave.voice = 3>><<replace "#voice">>High.<</replace>><<StartingGirlsCost>><</link>> +<br> +<<options $activeSlave.trust>> + ''Trust:'' + <<optionlt -95 -100 "Abjectly terrified">> + @@.goldenrod;Abjectly terrified.@@ + <<optionlt -50 -70 "Terrified">> + @@.goldenrod;Terrified.@@ + <<optionlt -20 -35 "Frightened">> + @@.gold;Frightened.@@ + <<optionlte 20 0 "Fearful">> + @@.yellow;Fearful.@@ + <<optionlte 50 35 "Careful">> + @@.mediumaquamarine;Careful.@@ + <<optionlte 95 70 "Trusting">> + @@.mediumseagreen;Trusting.@@ + <<optiondefault 100 "Absolute trust">> + @@.seagreen;Absolute trust.@@ + <<option>> + <<textbox "$activeSlave.trust" $activeSlave.trust "Starting Girls">> +<</options>> - -<span id="language"> -<<if $activeSlave.voice != 0>> - ''$language:'' - <<if $activeSlave.accent == 0>>Unaccented. - <<elseif $activeSlave.accent == 1>>Pretty $activeSlave.nationality accent. - <<elseif $activeSlave.accent == 2>>Thick $activeSlave.nationality accent. - <<else>>Not fluent. - <</if>> +<br> +<<if $activeSlave.indenture == -1>> + <<options $activeSlave.indenture>> + ''Legal status:'' + <<option -1 "Slave" "$activeSlave.indentureRestrictions = 0">> + Slave. + <<optiondefault 52 "Indentured Servant" "$activeSlave.indentureRestrictions = 0">> + <</options>> +<<else>> + <<options $activeSlave.indenture>> + ''Legal status:'' Indentured servant + <<option -1 "Slave" "$activeSlave.indentureRestrictions = 0">> + <<optiondefault 52 "Indentured Servant" "$activeSlave.indentureRestrictions = 0">> + <<option>> + with <<textbox "$activeSlave.indenture" $activeSlave.indenture "Starting Girls">> weeks remaining. + <</options>> + + <br> + + <<options $activeSlave.indentureRestrictions>> + ''Indenture restrictions:'' + <<option 0 "None">> + None. + <<option 1 "Protective">> + Protective. + <<option 2 "Restrictive">> + Restrictive. + <</options>> <</if>> -</span> +<br> +<<options $activeSlave.voice>> + ''Voice:'' + <<option 0 "Mute">> + Mute. + <<option 1 "Deep">> + Deep. + <<option 2 "Normal">> + Normal. + <<option 3 "High">> + High. +<</options>> + <<if $activeSlave.voice != 0>> - <<link "Unaccented">><<set $activeSlave.accent = 0>><<replace "#language">>Unaccented.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Accent">><<set $activeSlave.accent = 1>><<replace "#language">>Pretty $activeSlave.nationality accent.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Heavy accent">><<set $activeSlave.accent = 2>><<replace "#language">>Thick $activeSlave.nationality accent.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Poor">><<set $activeSlave.accent = 3>><<replace "#language">>Not fluent.<</replace>><<StartingGirlsCost>><</link>> + <br> + <<options $activeSlave.accent>> + ''$language:'' + <<option 0 "Unaccented">> + Unaccented. + <<option 1 `"Pretty " + $activeSlave.nationality + " accent"`>> + Pretty $activeSlave.nationality accent. + <<option 2 `"Thick " + $activeSlave.nationality + " accent"`>> + Thick $activeSlave.nationality accent. + <<optiondefault 3 "Not fluent">> + Not fluent. + <</options>> <</if>> -<br>''Age:'' -<span id="age"> -<<textbox "$activeSlave.actualAge" $activeSlave.actualAge "Starting Girls">> -</span> +<br> +<<options>> + ''Age:'' + <<option>> + <<textbox "$activeSlave.actualAge" $activeSlave.actualAge "Starting Girls">> + <<comment>> + + <<link `"Set height to average for a " + $activeSlave.actualAge + " year old"`>> + <<ResyncHeight $activeSlave>><<goto "Starting Girls">> + <</link>> +<</options>> - -''Birth week:'' -<span id="birthWeek"> -<<textbox "$activeSlave.birthWeek" $activeSlave.birthWeek "Starting Girls">> -</span> +<br> +<<options>> + ''Birth week:'' + <<option>> + <<textbox "$activeSlave.birthWeek" $activeSlave.birthWeek "Starting Girls">> +<</options>> +<br> - -''Genes:'' -@@.yellow;<span id="originalSex">$activeSlave.genes.</span>@@ -<<link "XX">><<set $activeSlave.genes = "XX">><<replace "#originalSex">>$activeSlave.genes.<</replace>><</link>> - | -<<link "XY">><<set $activeSlave.genes = "XY">><<replace "#originalSex">>$activeSlave.genes.<</replace>><</link>> +<<options $activeSlave.genes>> + ''Genes:'' + <<option "XX" "XX" "$activeSlave.dick = 0, $activeSlave.balls = 0,$activeSlave.clit = 0,$activeSlave.pubertyXY = 0,$activeSlave.pubertyAgeXY = $potencyAge, $activeSlave.pubertyXX=($activeSlave.pubertyAgeXX<$activeSlave.actualAge?1:0),$activeSlave.vagina=Math.max(0, $activeSlave.vagina),$activeSlave.boobs=Math.max(500,$activeSlave.boobs), $activeSlave.balls=0, $activeSlave.scrotum=0, $activeSlave.prostate=0,$activeSlave.shoulders=either(-2,-1,0),$activeSlave.hips=either(-2,-1,0)">> + @@.yellow;XX@@ (Female) + <<option "XY" "XY" "$activeSlave.dick = 3, $activeSlave.vagina=-1, $activeSlave.preg = 0, WombFlush($activeSlave), $activeSlave.belly = 0,$activeSlave.bellyPreg = 0,$activeSlave.pubertyXY=($activeSlave.pubertyAgeXY<$activeSlave.actualAge?1:0), $activeSlave.pregType = 0, $activeSlave.pregSource = 0, $activeSlave.pregWeek = 0, $activeSlave.pregKnown = 0,$activeSlave.pubertyXX = 0,$activeSlave.pubertyAgeXX = $fertilityAge, $activeSlave.ovaries = 0, $activeSlave.boobs=0, $activeSlave.balls=3, $activeSlave.scrotum=3, $activeSlave.prostate=1,$activeSlave.shoulders=either(0,1,2),$activeSlave.hips=either(0,1,2)">> + @@.yellow;XY@@ (Male) +<</options>> <<if $familyTesting == 1>> <<editFamily>> <</if>> -<br>''Health:'' -<span id="health"> -<<if $activeSlave.health == -40>>@@.red;Unhealthy.@@ -<<elseif $activeSlave.health == 0>>@@.yellow;Healthy.@@ -<<elseif $activeSlave.health == 40>>@@.green;Very healthy.@@ -<<else>>@@.green;Extremely healthy.@@ -<</if>> -</span> -<<link "Unhealthy">><<set $activeSlave.health = -40>><<replace "#health">>@@.red;Unhealthy.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Healthy">><<set $activeSlave.health = 0>><<replace "#health">>@@.yellow;Healthy.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Very healthy">><<set $activeSlave.health = 40>><<replace "#health">>@@.green;Very healthy.@@<</replace>><<StartingGirlsCost>><</link>> | - <<link "Extremely healthy">><<set $activeSlave.health = 80>><<replace "#health">>@@.green;Extremely healthy.@@<</replace>><<StartingGirlsCost>><</link>> +<br> +<<options $activeSlave.health>> + ''Health:'' + <<optionlt -20 -40 "Unhealthy">> + @@.red;Unhealthy.@@ + <<optionlt 20 0 "Healthy">> + @@.yellow;Healthy.@@ + <<optionlt 60 40 "Very healthy">> + @@.green;Very healthy.@@ + <<optiondefault 80 "Extremely healthy">> + @@.green;Extremely healthy.@@ +<</options>> + +<br> - <<if $seeExtreme == 1>> - ''Limbs:'' - <span id="amp"> - <<if $activeSlave.amp == 1>>Amputee. - <<else>>Normal. - <</if>> - </span> - <<link "Normal">><<set $activeSlave.amp = 0>><<replace "#amp">>Normal.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Amputee">><<set $activeSlave.amp = 1>><<replace "#amp">>Amputee.<</replace>><<StartingGirlsCost>><</link>> -<</if>> + <<options $activeSlave.amp>> + ''Limbs:'' + <<option 0 "Normal">> + @@.green;Normal.@@ + <<option 1 "Amputee">> + @@.red;Amputee.@@ + <</options>> + <br> +<</if>> + +<<options $activeSlave.muscles>> + ''Muscles:'' + <<optionlt -96 -97 "Frail">> + Frail. + <<optionlt -51 -66 "Very weak">> + Very weak. + <<optionlt -6 -41 "Weak">> + Weak. + <<optionlt 5 0 "Normal">> + Normal. + <<optionlt 30 20 "Toned">> + Toned. + <<optionlt 50 40 "Well built">> + Well built. + <<optionlt 95 65 "Quite muscular">> + Quite muscular. + <<optiondefault 96 "Ripped">> + Ripped. +<</options>> +<br> -<br>''Muscles:'' -<span id="muscles"> -<<if $activeSlave.muscles > 95>> - Ripped. -<<elseif $activeSlave.muscles > 50>> - Quite muscular. -<<elseif $activeSlave.muscles > 30>> - Well built. -<<elseif $activeSlave.muscles > 5>> - Toned. -<<elseif $activeSlave.muscles > -6>> - Normal. -<<elseif $activeSlave.muscles > -31>> - Weak. -<<elseif $activeSlave.muscles > -96>> - Very weak. -<<else>> - Frail. -<</if>> +<<options $activeSlave.waist>> + ''Waist:'' + <<optionlt -95 -100 "Absurd">> + Absurd. + <<optionlt -40 -55 "Hourglass">> + Hourglass. + <<optionlt -15 -25 "Feminine">> + Feminine. + <<optionlte 10 0 "Average">> + Average. + <<optionlte 40 15 "Unattractive">> + Unattractive. + <<optionlte 95 55 "Ugly">> + Ugly. + <<optiondefault 100 "Masculine">> + Masculine. +<</options>> -</span> -<<link "Frail">><<set $activeSlave.muscles = -97>><<replace "#muscles">>Frail.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Very weak">><<set $activeSlave.muscles = -66>><<replace "#muscles">>Very weak.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Weak">><<set $activeSlave.muscles = -41>><<replace "#muscles">>Rather weak.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Normal">><<set $activeSlave.muscles = 0>><<replace "#muscles">>Normal.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Toned">><<set $activeSlave.muscles = 20>><<replace "#muscles">>Toned.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Well built">><<set $activeSlave.muscles = 40>><<replace "#muscles">>Well built.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Muscular">><<set $activeSlave.muscles = 65>><<replace "#muscles">>Muscular.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Ripped">><<set $activeSlave.muscles = 96>><<replace "#muscles">>Ripped.<</replace>><<StartingGirlsCost>><</link>> - -''Waist:'' -<span id="waist"> -<<if $activeSlave.waist > 95>>Masculine. -<<elseif $activeSlave.waist > 40>>Ugly. -<<elseif $activeSlave.waist > 10>>Unattractive. -<<elseif $activeSlave.waist >= -10>>Average. -<<elseif $activeSlave.waist >= -40>>Feminine. -<<elseif $activeSlave.waist >= -95>>Hourglass. -<<else>>Absurd. -<</if>> -</span> -<<link "Absurd">><<set $activeSlave.waist = -100>><<replace "#waist">>Absurd.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Hourglass">><<set $activeSlave.waist = -55>><<replace "#waist">>Hourglass.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Feminine">><<set $activeSlave.waist = -15>><<replace "#waist">>Feminine.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Average">><<set $activeSlave.waist = 0>><<replace "#waist">>Average.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Unattractive">><<set $activeSlave.waist = 15>><<replace "#waist">>Unattractive.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Ugly">><<set $activeSlave.waist = 55>><<replace "#waist">>Ugly.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Masculine">><<set $activeSlave.waist = 100>><<replace "#waist">>Masculine.<</replace>><<StartingGirlsCost>><</link>> - -<br>''Height:'' -<span id="height"> -<<if $activeSlave.height < 150>>Petite. -<<elseif $activeSlave.height < 160>>Short. -<<elseif $activeSlave.height < 170>>Average. -<<elseif $activeSlave.height < 185>>Tall. -<<else>>Very tall. -<</if>> -<<textbox "$activeSlave.height" $activeSlave.height "Starting Girls">> <<= heightToEitherUnit($activeSlave.height)>> -</span> +<br> +<<options $activeSlave.height>> + ''Height:'' <<= heightToEitherUnit($activeSlave.height)>> + <<optionlt 150 145 "Petite">> + Petite. + <<optionlt 160 155 "Short">> + Short. + <<optionlt 170 165 "Average">> + Average. + <<optionlt 185 180 "Tall">> + Tall. + <<optiondefault 190 "Very tall">> + Very tall. + <<option>> + <<textbox "$activeSlave.height" $activeSlave.height "Starting Girls">>cm + <<comment>> + <<link `"Set to average height of " + $activeSlave.actualAge + " year old"`>> + <<ResyncHeight $activeSlave>><<goto "Starting Girls">> + <</link>> +<</options>> -| <<link "Resync height with age">> - <<ResyncHeight $activeSlave>><<goto "Starting Girls">> -<</link>> +<br> +<<options $activeSlave.weight>> + ''Weight:'' + <<optionlt -95 -100 "Emaciated">> + @@.red;Emaciated.@@ + <<optionlt -30 -50 "Skinny">> + @@.red;Skinny.@@ + <<optionlt -10 -20 "Thin">> + Thin. + <<optionlte 10 0 "Average">> + Average. + <<optionlte 30 20 "Plush">> + Plush. + <<optionlte 95 50 "Chubby">> + @@.red;Chubby.@@ + <<optionlte 130 100 "Fat">> + @@.red;Fat.@@ + <<optionlte 160 140 "Obese">> + @@.red;Obese.@@ + <<optionlte 190 180 "Super obese">> + @@.red;Super obese.@@ + <<optiondefault 200 "Dangerously obese">> + @@.red;Dangerously obese.@@ +<</options>> - -<br>''Weight:'' -<span id="weight"> -<<if $activeSlave.weight < -95>>@@.red;Emaciated.@@ -<<elseif $activeSlave.weight < -30>>@@.red;Skinny.@@ -<<elseif $activeSlave.weight < -10>>Thin. -<<elseif $activeSlave.weight <= 10>>Average. -<<elseif $activeSlave.weight <= 30>>Plush. -<<elseif $activeSlave.weight <= 95>>@@.red;Chubby.@@ -<<elseif $activeSlave.weight <= 130>>@@.red;Fat.@@ -<<elseif $activeSlave.weight <= 160>>@@.red;Obese.@@ -<<elseif $activeSlave.weight <= 190>>@@.red;Super obese.@@ -<<else>>@@.red;Dangerously obese.@@ -<</if>> -</span> -<<link "Emaciated">><<set $activeSlave.weight = -100>><<replace "#weight">>@@.red;Emaciated.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Skinny">><<set $activeSlave.weight = -50>><<replace "#weight">>@@.red;Skinny.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Thin">><<set $activeSlave.weight = -20>><<replace "#weight">>Thin.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Average">><<set $activeSlave.weight = 0>><<replace "#weight">>Average.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Plush">><<set $activeSlave.weight = 20>><<replace "#weight">>Plush.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Chubby">><<set $activeSlave.weight = 50>><<replace "#weight">>@@.red;Chubby.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Fat">><<set $activeSlave.weight = 100>><<replace "#weight">>@@.red;Fat.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Obese">><<set $activeSlave.weight = 140>><<replace "#weight">>@@.red;Obese.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Super obese">><<set $activeSlave.weight = 180>><<replace "#weight">>@@.red;Super obese.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Dangerously obese">><<set $activeSlave.weight = 200>><<replace "#weight">>@@.red;Dangerously obese.@@<</replace>><<StartingGirlsCost>><</link>> - -<br>''Prestige:'' -<span id="prestige"> -<<if $activeSlave.prestige >= 3>>@@.green;World renowned.@@ -<<elseif $activeSlave.prestige >= 2>>@@.green;Regionally famous.@@ -<<elseif $activeSlave.prestige >= 1>>@@.green;Locally known.@@ -<<else>>None. -<</if>> -</span> -<<link "None">><<set $activeSlave.prestige = 0>><<replace "#prestige">>None.<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | -<<link "Locally known">><<set $activeSlave.prestige = 1>><<replace "#prestige">>@@.green;Locally known.@@<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | -<<link "Regionally famous">><<set $activeSlave.prestige = 2>><<replace "#prestige">>@@.green;Regionally famous.@@<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | -<<link "World renowned">><<set $activeSlave.prestige = 3>><<replace "#prestige">>@@.green;World renowned.@@<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> -<span id="prestigeWarning"></span> +<br> +<<options $activeSlave.prestige>> + ''Prestige:'' + <<option 0 "None">> + None. + <<option 1 "Locally known">> + @@.green;Locally known.@@ + <<option 2 "Regionally famous">> + @@.green;Regionally famous.@@ + <<option 3 "World renowned">> + @@.green;World renowned.@@ + <<comment>> + <<if $activeSlave.prestige>> + <br> + //@@.red;Starting slaves incur an extreme cost penalty for prestige. This slave's + <<if $activeSlave.actualAge >= 25>> + <<if $activeSlave.actualAge > 35>>advanced <</if>> + age decreases the penalty + <<else>> + young age requires paying the full penalty + <</if>>.@@// + <</if>> +<</options>> <br><br> -<span id = "nationality"> -Her nationality is $activeSlave.nationality. -<<link "Set custom nationality">> -<<replace "#nationality">><<textbox "$activeSlave.nationality" $activeSlave.nationality>> -<</replace>> -<</link>> -</span> +<<options>> + Her nationality is $activeSlave.nationality. + <<option>> + <span id="nationality"> + <<link "Set custom nationality...">> + <<replace "#nationality">> + <<textbox "$activeSlave.nationality" $activeSlave.nationality "Starting Girls">> + <</replace>> + <</link>> + </span> +<</options>> <<if $seeRace == 1>> -<br>''Ethnicity:'' <span id="ethnicity"><<textbox "$activeSlave.race" $activeSlave.race "Starting Girls">></span> - -<br> -<<link "White">><<set $activeSlave.race = "white">><<replace "#ethnicity">><<textbox "$activeSlave.race" $activeSlave.race "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Black">><<set $activeSlave.race = "black">><<replace "#ethnicity">><<textbox "$activeSlave.race" $activeSlave.race "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Latina">><<set $activeSlave.race = "latina">><<replace "#ethnicity">><<textbox "$activeSlave.race" $activeSlave.race "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Asian">><<set $activeSlave.race = "asian">><<replace "#ethnicity">><<textbox "$activeSlave.race" $activeSlave.race "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Middle Eastern">><<set $activeSlave.race = "middle eastern">><<replace "#ethnicity">><<textbox "$activeSlave.race" $activeSlave.race "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Amerindian">><<set $activeSlave.race = "amerindian">><<replace "#ethnicity">><<textbox "$activeSlave.race" $activeSlave.race "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Southern European">><<set $activeSlave.race = "southern european">><<replace "#ethnicity">><<textbox "$activeSlave.race" $activeSlave.race "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Semitic">><<set $activeSlave.race = "semitic">><<replace "#ethnicity">><<textbox "$activeSlave.race" $activeSlave.race "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Malay">><<set $activeSlave.race = "malay">><<replace "#ethnicity">><<textbox "$activeSlave.race" $activeSlave.race "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Indo-Aryan">><<set $activeSlave.race = "indo-aryan">><<replace "#ethnicity">><<textbox "$activeSlave.race" $activeSlave.race "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Pacific Islander">><<set $activeSlave.race = "pacific islander">><<replace "#ethnicity">><<textbox "$activeSlave.race" $activeSlave.race "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Mixed Race">><<set $activeSlave.race = "mixed race">><<replace "#ethnicity">><<textbox "$activeSlave.race" $activeSlave.race "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> + <br> + <<options $activeSlave.race>> + ''Ethnicity:'' $activeSlave.race + <<option "white" "White">> + <<option "black" "Black">> + <<option "latina" "Latina">> + <<option "asian" "Asian">> + <<option "middle eastern" "Middle Eastern">> + <<option "amerindian" "Amerindian">> + <<option "southern european" "Southern European">> + <<option "semitic" "Semitic">> + <<option "malay" "Malay">> + <<option "indo-aryan" "Indo-Aryan">> + <<option "pacific islander" "Pacific Islander">> + <<option "mixed race" "Mixed Race">> + <<option>> + <<textbox "$activeSlave.race" $activeSlave.race "Starting Girls">> + <</options>> <</if>> -<br>''Skin color:'' <span id="skin"><<textbox "$activeSlave.skin" $activeSlave.skin "Starting Girls">></span> +<br> +<<options $activeSlave.skin>> + ''Skin color:'' $activeSlave.skin + <<option "pure white" "Pure White">> + <<option "extremely pale" "Extremely Pale">> + <<option "pale" "Pale">> + <<option "extremely fair" "Extremely Fair">> + <<option "very fair" "Very Fair">> + <<option "fair" "Fair">> + <<option "white" "White">> + <<option "light" "Light">> + <<option "lightened" "Lightened">> + <<option "light olive" "Light Olive">> + <<option "olive" "Olive">> + <<option "natural" "Natural">> + <<option "tanned" "Tanned">> + <<option "bronzed" "Bronzed">> + <<option "dark olive" "Dark Olive">> + <<option "dark" "Dark">> + <<option "light brown" "Light Brown">> + <<option "brown" "Brown">> + <<option "dark brown" "Dark Brown">> + <<option "black" "Black">> + <<option "ebony" "Ebony">> + <<option "pure black" "Pure Black">> + <<option>> + <<textbox "$activeSlave.skin" $activeSlave.skin "Starting Girls">> +<</options>> -<br> -<<link "Pure White">><<set $activeSlave.skin = "pure white">><<replace "#skin">><<textbox "$activeSlave.skin" $activeSlave.skin "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Extremely Pale">><<set $activeSlave.skin = "extremely pale">><<replace "#skin">><<textbox "$activeSlave.skin" $activeSlave.skin "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Pale">><<set $activeSlave.skin = "pale">><<replace "#skin">><<textbox "$activeSlave.skin" $activeSlave.skin "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Extremely Fair">><<set $activeSlave.skin = "extremely fair">><<replace "#skin">><<textbox "$activeSlave.skin" $activeSlave.skin "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Very Fair">><<set $activeSlave.skin = "very fair">><<replace "#skin">><<textbox "$activeSlave.skin" $activeSlave.skin "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Fair">><<set $activeSlave.skin = "fair">><<replace "#skin">><<textbox "$activeSlave.skin" $activeSlave.skin "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "White">><<set $activeSlave.skin = "white">><<replace "#skin">><<textbox "$activeSlave.skin" $activeSlave.skin "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Light">><<set $activeSlave.skin = "light">><<replace "#skin">><<textbox "$activeSlave.skin" $activeSlave.skin "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Lightened">><<set $activeSlave.skin = "lightened">><<replace "#skin">><<textbox "$activeSlave.skin" $activeSlave.skin "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Light Olive">><<set $activeSlave.skin = "light olive">><<replace "#skin">><<textbox "$activeSlave.skin" $activeSlave.skin "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Olive">><<set $activeSlave.skin = "olive">><<replace "#skin">><<textbox "$activeSlave.skin" $activeSlave.skin "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Natural">><<set $activeSlave.skin = "natural">><<replace "#skin">><<textbox "$activeSlave.skin" $activeSlave.skin "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Tanned">><<set $activeSlave.skin = "tanned">><<replace "#skin">><<textbox "$activeSlave.skin" $activeSlave.skin "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Bronzed">><<set $activeSlave.skin = "bronzed">><<replace "#skin">><<textbox "$activeSlave.skin" $activeSlave.skin "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Dark Olive">><<set $activeSlave.skin = "dark olive">><<replace "#skin">><<textbox "$activeSlave.skin" $activeSlave.skin "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Dark">><<set $activeSlave.skin = "dark">><<replace "#skin">><<textbox "$activeSlave.skin" $activeSlave.skin "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Light Brown">><<set $activeSlave.skin = "light brown">><<replace "#skin">><<textbox "$activeSlave.skin" $activeSlave.skin "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Brown">><<set $activeSlave.skin = "brown">><<replace "#skin">><<textbox "$activeSlave.skin" $activeSlave.skin "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Dark Brown">><<set $activeSlave.skin = "dark brown">><<replace "#skin">><<textbox "$activeSlave.skin" $activeSlave.skin "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Black">><<set $activeSlave.skin = "black">><<replace "#skin">><<textbox "$activeSlave.skin" $activeSlave.skin "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Ebony">><<set $activeSlave.skin = "ebony">><<replace "#skin">><<textbox "$activeSlave.skin" $activeSlave.skin "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> | -<<link "Pure Black">><<set $activeSlave.skin = "pure black">><<replace "#skin">><<textbox "$activeSlave.skin" $activeSlave.skin "Starting Girls">><</replace>><<StartingGirlsCost>><</link>> - -<br>''Facial appearance:'' <span id="faceShape">$activeSlave.faceShape</span>. -<<link "Normal">><<set $activeSlave.faceShape = "normal">><<replace "#faceShape">>$activeSlave.faceShape<</replace>><<StartingGirlsCost>><</link>> | -<<if $seeDicks != 0>><<link "Masculine">><<set $activeSlave.faceShape = "masculine">><<replace "#faceShape">>$activeSlave.faceShape<</replace>><<StartingGirlsCost>><</link>> |<</if>> -<<link "Androgynous">><<set $activeSlave.faceShape = "androgynous">><<replace "#faceShape">>$activeSlave.faceShape<</replace>><<StartingGirlsCost>><</link>> | -<<link "Cute">><<set $activeSlave.faceShape = "cute">><<replace "#faceShape">>$activeSlave.faceShape<</replace>><<StartingGirlsCost>><</link>> | -<<link "Sensual">><<set $activeSlave.faceShape = "sensual">><<replace "#faceShape">>$activeSlave.faceShape<</replace>><<StartingGirlsCost>><</link>> | -<<link "Exotic">><<set $activeSlave.faceShape = "exotic">><<replace "#faceShape">>$activeSlave.faceShape<</replace>><<StartingGirlsCost>><</link>> - -<br>''Facial attractiveness:'' -<span id="face"> -<<if $activeSlave.face < -95>>Very ugly. -<<elseif $activeSlave.face < -40>>Ugly. -<<elseif $activeSlave.face < -10>>Unattractive. -<<elseif $activeSlave.face <= 10>>Average. -<<elseif $activeSlave.face <= 40>>Attractive. -<<elseif $activeSlave.face <= 95>>Beautiful. -<<else>>Very beautiful. -<</if>> -</span> -<<link "Very ugly">><<set $activeSlave.face = -100>><<replace "#face">>Very ugly.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Ugly">><<set $activeSlave.face = -55>><<replace "#face">>Ugly.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Unattractive">><<set $activeSlave.face = -15>><<replace "#face">>Unattractive.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Average">><<set $activeSlave.face = 0>><<replace "#face">>Average.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Attractive">><<set $activeSlave.face = 15>><<replace "#face">>Attractive.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Beautiful">><<set $activeSlave.face = 55>><<replace "#face">>Beautiful.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Very beautiful">><<set $activeSlave.face = 100>><<replace "#face">>Very beautiful.<</replace>><<StartingGirlsCost>><</link>> - -<br>''Lips:'' -<span id="lips"> -<<if $activeSlave.lips <= 10>>Thin. -<<elseif $activeSlave.lips <= 20>>Normal. -<<elseif $activeSlave.lips <= 40>>Pretty. -<<elseif $activeSlave.lips <= 70>>Plush. -<<elseif $activeSlave.lips <= 95>>Huge. -<<else>>Facepussy. -<</if>> -</span> -<<link "Thin">><<set $activeSlave.lips = 5>><<replace "#lips">>Thin.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Normal">><<set $activeSlave.lips = 15>><<replace "#lips">>Normal.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Plush">><<set $activeSlave.lips = 25>><<replace "#lips">>Plush.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Big">><<set $activeSlave.lips = 55>><<replace "#lips">>Big.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Huge">><<set $activeSlave.lips = 85>><<replace "#lips">>Huge.<</replace>><<StartingGirlsCost>><</link>> -<<if $seeExtreme == 1>> - | -<<link "Facepussy">><<set $activeSlave.lips = 100>><<replace "#lips">>Facepussy.<</replace>><<StartingGirlsCost>><</link>> -<</if>> - ''Teeth:'' -<span id="teeth"> -<<if $activeSlave.teeth == "crooked">>Crooked. -<<elseif $activeSlave.teeth == "gapped">>Gapped. -<<elseif $activeSlave.teeth == "straightening braces">>Braces. -<<elseif $activeSlave.teeth == "baby">>Baby. -<<elseif $activeSlave.teeth == "mixed">>Mixed. -<<else>>Straight. -<</if>> -</span> +<br> -<<if $activeSlave.physicalAge >= 12>> - <<link "Straight">><<set $activeSlave.teeth = "normal">><<replace "#teeth">>Straight.<</replace>><<StartingGirlsCost>><</link>> | -<<elseif $activeSlave.physicalAge >= 6>> - <<link "Mixed">><<set $activeSlave.teeth = "mixed">><<replace "#teeth">>Mixed.<</replace>><<StartingGirlsCost>><</link>> | +<br> +<<if $seeDicks != 0>> + <<options $activeSlave.faceShape>> + ''Facial appearance:'' $activeSlave.faceShape + <<option "normal" "Normal">> + <<option "masculine" "Masculine">> + <<option "androgynous" "Androgynous">> + <<option "cute" "Cute">> + <<option "sensual" "Sensual">> + <<option "exotic" "Exotic">> + <</options>> <<else>> - <<link "Baby">><<set $activeSlave.teeth = "baby">><<replace "#teeth">>Baby.<</replace>><<StartingGirlsCost>><</link>> | + <<options $activeSlave.faceShape>> + ''Facial appearance:'' $activeSlave.faceShape + <<option "normal" "Normal">> + <<option "androgynous" "Androgynous">> + <<option "cute" "Cute">> + <<option "sensual" "Sensual">> + <<option "exotic" "Exotic">> + <</options>> <</if>> -<<link "Crooked">><<set $activeSlave.teeth = "crooked">><<replace "#teeth">>Crooked.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Gapped">><<set $activeSlave.teeth = "gapped">><<replace "#teeth">>Gapped.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Braces">><<set $activeSlave.teeth = "straightening braces">><<replace "#teeth">>Braces.<</replace>><<StartingGirlsCost>><</link>> +<br> +<<options $activeSlave.face>> + ''Facial attractiveness:'' +<<optionlt -95 -100 "Very ugly">> Very ugly. +<<optionlt -40 -55 "Ugly">> Ugly. +<<optionlt -10 -15 "Unattractive">> Unattractive. +<<optionlte 10 0 "Average">> Average. +<<optionlte 40 15 "Attractive">> Attractive. +<<optionlte 95 55 "Beautiful">> Beautiful. +<<optiondefault 100 "Very beautiful">> Very beautiful. +<</options>> -<br>''Vision:'' -<span id="vision"> +<br> <<if $seeExtreme == 1>> - <<if $activeSlave.eyes == -2>>Blind. - <<elseif $activeSlave.eyes == -1>>Nearsighted. - <<else>>Normal. + <<options $activeSlave.lips>> + ''Lips:'' + <<optionlte 10 5 "Thin">> Thin. + <<optionlte 20 15 "Normal">> Normal. + <<optionlte 40 25 "Pretty">> Pretty. + <<optionlte 70 55 "Plush">> Plush. + <<optionlte 95 85 "Huge">> Huge. + <<optiondefault 100 "Facepussy">> Facepussy. + <</options>> +<<else>> + <<options $activeSlave.lips>> + ''Lips:'' + <<optionlte 10 5 "Thin">> Thin. + <<optionlte 20 15 "Normal">> Normal. + <<optionlte 40 25 "Pretty">> Pretty. + <<optionlte 70 55 "Plush">> Plush. + <<optionlte 95 85 "Huge">> Huge. + <</options>> +<</if>> +<br> +<<if $activeSlave.physicalAge >= 12>> + <<if $activeSlave.teeth == "baby" || $activeSlave.teeth == "mixed">> + <<set $activeSlave.teeth = "normal">> + <</if>> + <<options $activeSlave.teeth>> + ''Teeth:'' $activeSlave.teeth + <<option "crooked" "Crooked">> + <<option "gapped" "Gapped">> + <<option "straightening braces" "Braces">> + <<optiondefault "normal" "Straight">> + <</options>> +<<elseif $activeSlave.physicalAge >= 6>> + <<if $activeSlave.teeth == "baby" || $activeSlave.teeth == "normal" || $activeSlave.teeth == "">> + <<set $activeSlave.teeth = "mixed">> <</if>> + <<options $activeSlave.teeth>> + ''Teeth:'' $activeSlave.teeth + <<option "crooked" "Crooked">> + <<option "gapped" "Gapped">> + <<option "straightening braces" "Braces">> + <<option "mixed" "Mixed adult & child">> + <</options>> <<else>> -<<if $activeSlave.eyes == -1>>Nearsighted. -<<else>>Normal. + <<if $activeSlave.teeth == "mixed" || $activeSlave.teeth == "normal" || $activeSlave.teeth == "">> + <<set $activeSlave.teeth = "mixed">> <</if>> + <<options $activeSlave.teeth>> + ''Teeth:'' $activeSlave.teeth + <<option "crooked" "Crooked">> + <<option "gapped" "Gapped">> + <<option "straightening braces" "Braces">> + <<option "baby" "Baby">> + <</options>> <</if>> -</span> -<<link "Normal">><<set $activeSlave.eyes = 1>><<replace "#vision">>Normal.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Nearsighted">><<set $activeSlave.eyes = -1>><<replace "#vision">>Nearsighted.<</replace>><<StartingGirlsCost>><</link>> +<br> <<if $seeExtreme == 1>> -| -<<link "Blind">><<set $activeSlave.eyes = -2>><<replace "#vision">>Blind.<</replace>><<StartingGirlsCost>><</link>> + <<options $activeSlave.eyes>> + ''Vision:'' + <<option -2 "Blind">> Blind + <<option -1 "Nearsighted">> Nearsighted + <<optiondefault 0 "Normal">> Normal + <</options>> +<<else>> + <<options $activeSlave.eyes>> + ''Vision:'' + <<option -1 "Nearsighted">> Nearsighted + <<optiondefault 0 "Normal">> Normal + <</options>> <</if>> -<br>''Hearing:'' -<span id="hearing"> +<br> <<if $seeExtreme == 1>> - <<if $activeSlave.hears == -2>>Deaf. - <<elseif $activeSlave.hears == -1>>Hard of hearing. - <<else>>Normal. - <</if>> + <<options $activeSlave.hears>> + ''Hearing:'' + <<option -2 "Deaf">> Deaf + <<option -1 "Hard of hearing">> Hard of hearing + <<optiondefault 0 "Normal">> Normal + <</options>> <<else>> - <<if $activeSlave.hears == -1>>Hard of hearing. - <<else>>Normal. - <</if>> + <<options $activeSlave.hears>> + ''Hearing:'' + <<option -1 "Hard of hearing">> Hard of hearing + <<optiondefault 0 "Normal">> Normal + <</options>> <</if>> -</span> -<<link "Normal">><<set $activeSlave.hears = 0>><<replace "#hearing">>Normal.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Hard Of Hearing">><<set $activeSlave.hears = -1>><<replace "#hearing">>Hard of hearing.<</replace>><<StartingGirlsCost>><</link>> + <<if $seeExtreme == 1>> -| -<<link "Deaf">><<set $activeSlave.hears = -2>><<replace "#hearing">>Deaf.<</replace>><<StartingGirlsCost>><</link>> + <br> + <<options $activeSlave.smells>> + ''Smell ability:'' + <<option 0 "Normal">> Normal. + <<option -1 "None">> Unable to smell. + <</options>> + + <br> + <<options >> + ''Taste ability:'' + <<option 0 "Normal">> Normal. + <<option -1 "None">> Unable to taste. + <</options>> <</if>> +<br> +<br> +<<options $activeSlave.boobs>> + ''Breasts:'' + <<optionlte 200 200 "Flat">> Flat. + <<optionlte 500 500 "Healthy">> Healthy. + <<optionlte 800 800 "Large">> Large. + <<optionlte 1200 1200 "Very Large">> Very Large. + <<optionlte 2000 2000 "Huge">> Huge. + <<optionlte 4000 4000 "Massive">> Massive. + <<optionlte 6000 6000 "Monstrous">> Monstrous. + <<optiondefault 8000 "Science experiment">>Science experiment. + <<option>> + <<textbox "$activeSlave.boobs" $activeSlave.boobs "Starting Girls">> CCs +<</options>> +<br> -<<if $seeExtreme == 1>> -<br>''Smell:'' -<span id="smell"> - <<if $activeSlave.smells == -1>>None. - <<else>>Normal. - <</if>> -</span> -<<link "Normal">><<set $activeSlave.smells = 0>><<replace "#smell">>Normal.<</replace>><<StartingGirlsCost>><</link>> | -<<link "None">><<set $activeSlave.smells = -1>><<replace "#smell">>None.<</replace>><<StartingGirlsCost>><</link>> +<<options $activeSlave.lactation>> + ''Lactation:'' + <<option 2 "Artificial" "$activeSlave.lactationDuration = 2">> Artificial. + <<option 1 "Natural" "$activeSlave.lactationDuration = 2">> Natural. + <<option 0 "None" "$activeSlave.lactationDuration = 0">> None. +<</options>> -<br>''Taste:'' -<span id="taste"> - <<if $activeSlave.tastes == -1>>None. - <<else>>Normal. - <</if>> -</span> -<<link "Normal">><<set $activeSlave.tastes = 0>><<replace "#taste">>Normal.<</replace>><<StartingGirlsCost>><</link>> | -<<link "None">><<set $activeSlave.tastes = -1>><<replace "#taste">>None.<</replace>><<StartingGirlsCost>><</link>> -<</if>> +<br> +<<options $activeSlave.nipples>> + ''Nipples:'' $activeSlave.nipples + <<option "tiny" "Tiny">> + <<option "cute" "Cute">> + <<option "puffy" "Puffy">> + <<option "inverted" "Inverted">> + <<option "huge" "Huge">> +<</options>> + +<<options $activeSlave.areolae>> + ''Areolae:'' + <<option 0 "Normal">> Normal. + <<option 1 "Large">> Large. + <<option 2 "Wide">> Wide. + <<option 3 "Huge">> Huge. + <<option 4 "Massive">> Massive. +<</options>> -<br><br>''Breasts:'' -<span id="boobs"> -<<if $activeSlave.boobs <= 200>>Flat. -<<elseif $activeSlave.boobs <= 500>>Healthy. -<<elseif $activeSlave.boobs <= 800>>Large. -<<elseif $activeSlave.boobs <= 1200>>Very Large. -<<elseif $activeSlave.boobs <= 2000>>Huge. -<<elseif $activeSlave.boobs <= 4000>>Massive. -<<elseif $activeSlave.boobs <= 6000>>Monstrous. -<<else>>Science experiment. -<</if>> -<<textbox "$activeSlave.boobs" $activeSlave.boobs "Starting Girls">> CCs -</span> - ''Lactation:'' -<span id="lactation"> -<<if $activeSlave.lactation == 2>>Artificial. -<<elseif $activeSlave.lactation == 1>>Natural. -<<else>>None. -<</if>> -</span> -<<link "Artificial">><<set $activeSlave.lactation = 2, $activeSlave.lactationDuration = 2>><<replace "#lactation">>Artificial.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Natural">><<set $activeSlave.lactation = 1, $activeSlave.lactationDuration = 2>><<replace "#lactation">>Natural.<</replace>><<StartingGirlsCost>><</link>> | -<<link "None">><<set $activeSlave.lactation = 0, $activeSlave.lactationDuration = 0>><<replace "#lactation">>None.<</replace>><<StartingGirlsCost>><</link>> - -<br>''Nipples:'' <span id="nipples">$activeSlave.nipples</span>. -<<link "Tiny">><<set $activeSlave.nipples = "tiny">><<replace "#nipples">>$activeSlave.nipples<</replace>><<StartingGirlsCost>><</link>> | -<<link "Cute">><<set $activeSlave.nipples = "cute">><<replace "#nipples">>$activeSlave.nipples<</replace>><<StartingGirlsCost>><</link>> | -<<link "Puffy">><<set $activeSlave.nipples = "puffy">><<replace "#nipples">>$activeSlave.nipples<</replace>><<StartingGirlsCost>><</link>> | -<<link "Inverted">><<set $activeSlave.nipples = "inverted">><<replace "#nipples">>$activeSlave.nipples<</replace>><<StartingGirlsCost>><</link>> | -<<link "Huge">><<set $activeSlave.nipples = "huge">><<replace "#nipples">>$activeSlave.nipples<</replace>><<StartingGirlsCost>><</link>> - ''Areolae:'' -<span id="areolae"> -<<if $activeSlave.areolae == 1>> - Large. -<<elseif $activeSlave.areolae == 2>> - Wide. -<<elseif $activeSlave.areolae == 3>> - Huge. -<<elseif $activeSlave.areolae == 4>> - Massive. -<<else>> - Normal. -<</if>> -</span> -<<link "Normal">><<set $activeSlave.areolae = 0>><<replace "#areolae">>Normal.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Large">><<set $activeSlave.areolae = 1>><<replace "#areolae">>Large.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Wide">><<set $activeSlave.areolae = 2>><<replace "#areolae">>Wide.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Huge">><<set $activeSlave.areolae = 3>><<replace "#areolae">>Huge.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Massive">><<set $activeSlave.areolae = 4>><<replace "#areolae">>Massive.<</replace>><<StartingGirlsCost>><</link>> - -<br>''Shoulders:'' -<span id="shoulders"> -<<if $activeSlave.shoulders < -1>>Very narrow. -<<elseif $activeSlave.shoulders < 0>>Narrow. -<<elseif $activeSlave.shoulders > 1>>Very broad. -<<elseif $activeSlave.shoulders > 0>>Broad. -<<else>>Feminine. -<</if>> -</span> -<<link "Very narrow">><<set $activeSlave.shoulders = -2>><<replace "#shoulders">>Very narrow.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Narrow">><<set $activeSlave.shoulders = -1>><<replace "#shoulders">>Narrow.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Normal">><<set $activeSlave.shoulders = 0>><<replace "#shoulders">>Feminine.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Broad">><<set $activeSlave.shoulders = 1>><<replace "#shoulders">>Broad.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Very broad">><<set $activeSlave.shoulders = 2>><<replace "#shoulders">>Very broad.<</replace>><<StartingGirlsCost>><</link>> - -<br>''Hips:'' -<span id="hips"> -<<if $activeSlave.hips < -1>>Very narrow. -<<elseif $activeSlave.hips < 0>>Narrow. -<<elseif $activeSlave.hips > 1>>Very broad. -<<elseif $activeSlave.hips > 0>>Broad. -<<else>>Normal. -<</if>> -</span> -<<link "Very narrow">><<set $activeSlave.hips = -2>><<replace "#hips">>Very narrow.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Narrow">><<set $activeSlave.hips = -1>><<replace "#hips">>Narrow.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Normal">><<set $activeSlave.hips = 0>><<replace "#hips">>Normal.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Broad">><<set $activeSlave.hips = 1>><<replace "#hips">>Broad.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Very broad">><<set $activeSlave.hips = 2>><<replace "#hips">>Very broad.<</replace>><<StartingGirlsCost>><</link>> - -<br>''Butt:'' -<span id="butt"> -<<if $activeSlave.butt == 0>>Flat. -<<elseif $activeSlave.butt < 2>>Small. -<<elseif $activeSlave.butt < 3>>Plump. -<<elseif $activeSlave.butt < 4>>Big. -<<elseif $activeSlave.butt < 5>>Huge. -<<elseif $activeSlave.butt < 6>>Enormous. -<<elseif $activeSlave.butt < 7>>Gigantic. -<<else>>Massive. -<</if>> -</span> -<<link "Flat">><<set $activeSlave.butt = 0>><<replace "#butt">>Flat.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Small">><<set $activeSlave.butt = 1>><<replace "#butt">>Small.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Plump">><<set $activeSlave.butt = 2>><<replace "#butt">>Plump.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Healthy">><<set $activeSlave.butt = 3>><<replace "#butt">>Big.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Huge">><<set $activeSlave.butt = 4>><<replace "#butt">>Huge.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Enormous">><<set $activeSlave.butt = 5>><<replace "#butt">>Enormous.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Gigantic">><<set $activeSlave.butt = 6>><<replace "#butt">>Gigantic.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Massive">><<set $activeSlave.butt = 7>><<replace "#butt">>Massive.<</replace>><<StartingGirlsCost>><</link>> - -<br>''Anus:'' -<span id="anus"> -<<if $activeSlave.anus == 0>>@@.lime;Virgin.@@ -<<elseif $activeSlave.anus == 1>>Normal. -<<elseif $activeSlave.anus == 2>>Veteran. -<<else>>Gaping. -<</if>> -</span> -<<link "Anal virgin">><<set $activeSlave.anus = 0>><<replace "#anus">>@@.lime;Virgin.@@<</replace>><<StartingGirlsAnalSkill>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | -<<link "Normal">><<set $activeSlave.anus = 1>><<replace "#anus">>Normal.<</replace>><<StartingGirlsAnalSkill>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | -<<link "Veteran">><<set $activeSlave.anus = 2>><<replace "#anus">>Veteran.<</replace>><<StartingGirlsAnalSkill>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | -<<link "Gaping">><<set $activeSlave.anus = 3>><<replace "#anus">>Gaping.<</replace>><<StartingGirlsAnalSkill>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> - -<br>''Vagina:'' -<span id="vagina"> -<<if $activeSlave.vagina == -1>>//No vagina.// -<<elseif $activeSlave.vagina == 0>>@@.lime;Virgin.@@ -<<elseif $activeSlave.vagina == 1>>Normal. -<<elseif $activeSlave.vagina == 2>>Veteran. -<<else>>Gaping. -<</if>> -</span> -<<link "No vagina">><<set $activeSlave.vagina = -1, $activeSlave.preg = 0, WombFlush($activeSlave), $activeSlave.belly = 0,$activeSlave.bellyPreg = 0, $activeSlave.pregType = 0, $activeSlave.pregSource = 0, $activeSlave.pregWeek = 0, $activeSlave.pregKnown = 0,$activeSlave.pubertyXX = 0,$activeSlave.pubertyAgeXX = $fertilityAge, $activeSlave.ovaries = 0>><<replace "#vagina">>//No vagina.//<</replace>><<StartingGirlsCost>><</link>> | -<<link "Virgin">><<set $activeSlave.vagina = 0, $activeSlave.preg = -1, $activeSlave.belly = 0, $activeSlave.bellyPreg = 0, $activeSlave.ovaries = 1>><<replace "#vagina">>@@.lime;Virgin.@@<</replace>><<StartingGirlsVaginalSkill>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | -<<link "Normal">><<set $activeSlave.vagina = 1, $activeSlave.preg = -1, $activeSlave.belly = 0, $activeSlave.bellyPreg = 0, $activeSlave.ovaries = 1>><<replace "#vagina">>Normal.<</replace>><<StartingGirlsVaginalSkill>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | -<<link "Veteran">><<set $activeSlave.vagina = 2, $activeSlave.preg = -1, $activeSlave.belly = 0, $activeSlave.bellyPreg = 0, $activeSlave.ovaries = 1>><<replace "#vagina">>Veteran.<</replace>><<StartingGirlsVaginalSkill>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | -<<link "Gaping">><<set $activeSlave.vagina = 3, $activeSlave.preg = -1, $activeSlave.belly = 0, $activeSlave.bellyPreg = 0, $activeSlave.ovaries = 1>><<replace "#vagina">>Gaping.<</replace>><<StartingGirlsVaginalSkill>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> +<br> +<<options $activeSlave.shoulders>> + ''Shoulders:'' + <<option -2 "Very narrow">> Very narrow. + <<option -1 "Narrow">> Narrow. + <<option 0 "Feminine">> Feminine. + <<option 1 "Broad">>Broad. + <<option 2 "Very broad">> Very broad. +<</options>> -<span id="vaginablock"> -<<if $activeSlave.vagina > -1>> <br> +<<options $activeSlave.hips>> + ''Hips:'' + <<option -2 "Very narrow">> Very narrow. + <<option -1 "Narrow">> Narrow. + <<option 0 "Normal">> Normal. + <<option 1 "Broad">>Broad. + <<option 2 "Very broad">>Very broad. +<</options>> -<<if $activeSlave.dick == 0>> - ''Clit:'' - <span id="clit"> - <<if $activeSlave.clit == 0>>Normal. - <<elseif $activeSlave.clit == 1>>Large. - <<else>>Huge. +<br> +<<options $activeSlave.butt>> + ''Butt:'' + <<option 0 "Flat">> Flat. + <<option 1 "Small">> Small. + <<option 2 "Plump">> Plump. + <<option 3 "Big">> Big. + <<option 4 "Huge">> Huge. + <<option 5 "Enormous">> Enormous. + <<option 6 "Gigantic">> Gigantic. + <<optiondefault 7 "Massive">> Massive. +<</options>> + +<br> +<<options $activeSlave.anus>> + ''Anus:'' + <<option 0 "Virgin">> @@.lime;Virgin@@. + <<option 1 "Normal">> Normal. + <<option 2 "Veteran">> Veteran. + <<optiondefault 3 "Gaping">> Gaping. +<</options>> + +<br> +<<options $activeSlave.vagina>> + ''Vagina:'' + <<option -1 "No vagina" "$activeSlave.preg = 0, WombFlush($activeSlave), $activeSlave.belly = 0,$activeSlave.bellyPreg = 0, $activeSlave.pregType = 0, $activeSlave.pregSource = 0, $activeSlave.pregWeek = 0, $activeSlave.pregKnown = 0,$activeSlave.pubertyXX = 0,$activeSlave.pubertyAgeXX = $fertilityAge, $activeSlave.ovaries = 0">>//No vagina//. + <<option 0 "Virgin" "$activeSlave.preg = -1, $activeSlave.belly = 0, $activeSlave.bellyPreg = 0, $activeSlave.ovaries = 1">>@@.lime;Virgin@@. + <<option 1 "Normal" "$activeSlave.preg = -1, $activeSlave.belly = 0, $activeSlave.bellyPreg = 0, $activeSlave.ovaries = 1">>Normal. + <<option 2 "Veteran" "$activeSlave.preg = -1, $activeSlave.belly = 0, $activeSlave.bellyPreg = 0, $activeSlave.ovaries = 1">>Veteran. + <<optiondefault 3 "Gaping" "$activeSlave.preg = -1, $activeSlave.belly = 0, $activeSlave.bellyPreg = 0, $activeSlave.ovaries = 1">>Gaping. +<</options>> +<br> + +<<if $activeSlave.vagina > -1>> +<br> + <<if $activeSlave.dick == 0>> + <<options $activeSlave.clit>> + ''Clit:'' + <<option 0 "Normal">>Normal. + <<option 1 "Large">>Large. + <<optiondefault 2 "Huge">>Huge. + <</options>> + <br> <</if>> - </span> - <<link "Normal">><<set $activeSlave.clit = 0>><<replace "#clit">>Normal.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Large">><<set $activeSlave.clit = 1>><<replace "#clit">>Large.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Huge">><<set $activeSlave.clit = 2>><<replace "#clit">>Huge.<</replace>><<StartingGirlsCost>><</link>> - -<</if>> -''Labia:'' -<span id="labia"> -<<if $activeSlave.labia == 2>>Huge. -<<elseif $activeSlave.labia == 1>>Large. -<<else>>Normal. -<</if>> -</span> -<<link "Normal">><<set $activeSlave.labia = 0>><<replace "#labia">>Normal.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Large">><<set $activeSlave.labia = 1>><<replace "#labia">>Large.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Huge">><<set $activeSlave.labia = 2>><<replace "#labia">>Huge.<</replace>><<StartingGirlsCost>><</link>> - - -''Vaginal wetness:'' -<span id="wetness"> -<<if $activeSlave.vaginaLube == 0>>Dry. -<<elseif $activeSlave.vaginaLube == 1>>Normal. -<<else>>Excessive. -<</if>> -</span> -<<link "Dry">><<set $activeSlave.vaginaLube = 0>><<replace "#wetness">>Dry.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Normal">><<set $activeSlave.vaginaLube = 1>><<replace "#wetness">>Normal.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Excessive">><<set $activeSlave.vaginaLube = 2>><<replace "#wetness">>Excessive.<</replace>><<StartingGirlsCost>><</link>> - -<<if $seePreg != 0>> -<br>''Pregnancy:'' -<span id="preg"> -<<if $activeSlave.preg > 39>>Ready to drop. -<<elseif $activeSlave.preg > 30>>Advanced. -<<elseif $activeSlave.preg > 20>>Showing. -<<elseif $activeSlave.preg > 10>>Early. -<<elseif $activeSlave.preg > -2>>None. -<<else>>Barren. -<</if>> -</span> -<<if $seeHyperPreg == 1 && $cheatMode == 1>> - <<link "Bursting at the seams">><<set $activeSlave.preg = 43,$activeSlave.pregType = 150,$activeSlave.pregWeek = 43,$activeSlave.pregKnown = 1,$activeSlave.belly = 2700000,$activeSlave.bellyPreg = 2700000,$activeSlave.pubertyXX = 1>><<replace "#preg">>Ready to test extreme hyperpreg content.<</replace>><<StartingGirlsCost>><</link>> | -<</if>> -<<link "Completely Filled">><<set $activeSlave.preg = 43,$activeSlave.pregType = 8,$activeSlave.pregWeek = 43,$activeSlave.pregKnown = 1,$activeSlave.belly = 120000,$activeSlave.bellyPreg = 120000,$activeSlave.pubertyXX = 1>><<replace "#preg">>Stuffed to capacity.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Ready to Drop">><<set $activeSlave.preg = 40,$activeSlave.pregType = 1,$activeSlave.pregWeek = 40,$activeSlave.pregKnown = 1,$activeSlave.belly = 15000,$activeSlave.bellyPreg = 15000,$activeSlave.pubertyXX = 1>><<replace "#preg">>Ready to drop.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Advanced">><<set $activeSlave.preg = 34,$activeSlave.pregType = 1,$activeSlave.pregWeek = 34,$activeSlave.pregKnown = 1,$activeSlave.belly = 10000,$activeSlave.bellyPreg = 10000,$activeSlave.pubertyXX = 1>><<replace "#preg">>Advanced.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Showing">><<set $activeSlave.preg = 27,$activeSlave.pregType = 1,$activeSlave.pregWeek = 27,$activeSlave.pregKnown = 1,$activeSlave.belly = 5000,$activeSlave.bellyPreg = 5000,$activeSlave.pubertyXX = 1>><<replace "#preg">>Showing.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Early">><<set $activeSlave.preg = 12,$activeSlave.pregType = 1,$activeSlave.pregWeek = 12,$activeSlave.pregKnown = 1,$activeSlave.belly = 100,$activeSlave.bellyPreg = 100,$activeSlave.pubertyXX = 1>><<replace "#preg">>Early.<</replace>><<StartingGirlsCost>><</link>> | -<<link "None">><<set $activeSlave.preg = 0,$activeSlave.pregType = 0,$activeSlave.belly = 0,$activeSlave.bellyPreg = 0,$activeSlave.pregSource = 0,$activeSlave.pregWeek = 0,$activeSlave.pregKnown = 0>><<replace "#preg">>None.<</replace>><<run WombFlush($activeSlave)>><<StartingGirlsCost>><</link>> | -<<link "Barren">><<set $activeSlave.preg = -2,$activeSlave.pregType = 0,$activeSlave.belly = 0,$activeSlave.bellyPreg = 0,$activeSlave.pregSource = 0,$activeSlave.pregWeek = 0,$activeSlave.pregKnown = 0>><<replace "#preg">>Barren.<</replace>><<run WombFlush($activeSlave)>><<StartingGirlsCost>><</link>> -<br>''Puberty:'' -<span id="pub"> -<<if $activeSlave.pubertyXX == 1>>Postpubescent. -<<else>>Prepubescent. -<</if>> -</span> -<<textbox "$activeSlave.pubertyAgeXX" $activeSlave.pubertyAgeXX "Starting Girls">> -<<link "Postpubescent">><<set $activeSlave.pubertyXX = 1>><<replace "#pub">>Postpubescent.<</replace>><<StartingGirlsCost>><</link>> | <<link "Prepubescent">><<set $activeSlave.pubertyXX = 0,$activeSlave.pubertyAgeXX = $fertilityAge,$activeSlave.preg = 0,$activeSlave.pregType = 0,$activeSlave.belly = 0,$activeSlave.bellyPreg = 0,$activeSlave.pregSource = 0,$activeSlave.pregWeek = 0,$activeSlave.pregKnown = 0>><<run WombFlush($activeSlave)>><<replace "#pub">>Prepubescent.<</replace>><<StartingGirlsCost>><</link>> -<<if $PC.dick == 1>> - <br> ''Father:'' - <span id="father"> - <<if $activeSlave.pregSource == -1>>My child. - <<else>> + <<options $activeSlave.labia>> + ''Labia:'' + <<option 0 "Normal">>Normal. + <<option 1 "Large">>Large. + <<optiondefault 2 "Huge">>Huge. + <</options>> + <br> + <<options $activeSlave.vaginaLube>> + ''Vaginal wetness:'' + <<option 0 "Dry">> Dry. + <<option 1 "Normal">> Normal. + <<optiondefault 2 "Excessive">> Excessive. + <</options>> + + <<if $seePreg != 0>> + /* This is only shown if slave has vagina */ + <br> + <<options $activeSlave.pubertyXX>> + ''Puberty:'' + <<option 0 "Prepubescent" "$activeSlave.pubertyAgeXX = $fertilityAge,$activeSlave.preg = 0,$activeSlave.pregType = 0,$activeSlave.belly = 0,$activeSlave.bellyPreg = 0,$activeSlave.pregSource = 0,$activeSlave.pregWeek = 0,$activeSlave.pregKnown = 0, WombFlush($activeSlave)">> Prepubescent. + <<option 1 "Postpubescent">> Postpubescent. + <</options>> + <br> + <<options $activeSlave.pubertyAgeXX>> + ''Age of puberty:'' + <<option>> + <<textbox "$activeSlave.pubertyAgeXX" $activeSlave.pubertyAgeXX "Starting Girls">> + <</options>> + <br> + <<if $seeHyperPreg == 1 && $cheatMode == 1 && $activeSlave.pubertyXX == 1>> + <<options $activeSlave.preg>> + ''Pregnancy:'' + <<option 43 "Bursting at the seams" "$activeSlave.pregType = 150,$activeSlave.pregWeek = 43,$activeSlave.pregKnown = 1,$activeSlave.belly = 2700000,$activeSlave.bellyPreg = 2700000,$activeSlave.pubertyXX = 1">>Bursting at the seams + (Extreme hyper pregnancy!). + <<optiongt 40 42 "Completely Filled" "$activeSlave.pregType = 8,$activeSlave.pregWeek = 42,$activeSlave.pregKnown = 1,$activeSlave.belly = 120000,$activeSlave.bellyPreg = 120000,$activeSlave.pubertyXX = 1">> Completely Filled. + <<optiongt 39 40 "Ready to drop" "$activeSlave.pregType = 1,$activeSlave.pregWeek = 40,$activeSlave.pregKnown = 1,$activeSlave.belly = 15000,$activeSlave.bellyPreg = 15000,$activeSlave.pubertyXX = 1">> Ready to drop. + <<optiongt 30 34 "Advanced" "$activeSlave.pregType = 1,$activeSlave.pregWeek = 34,$activeSlave.pregKnown = 1,$activeSlave.belly = 10000,$activeSlave.bellyPreg = 10000,$activeSlave.pubertyXX = 1">> Advanced. + <<optiongt 20 27 "Showing" "$activeSlave.pregType = 1,$activeSlave.pregWeek = 27,$activeSlave.pregKnown = 1,$activeSlave.belly = 5000,$activeSlave.bellyPreg = 5000,$activeSlave.pubertyXX = 1">> Showing. + <<optiongt 10 12 "Early" "$activeSlave.pregType = 1,$activeSlave.pregWeek = 12,$activeSlave.pregKnown = 1,$activeSlave.belly = 100,$activeSlave.bellyPreg = 100,$activeSlave.pubertyXX = 1">> Early. + <<optiongt -2 0 "None" "$activeSlave.pregType = 0,$activeSlave.belly = 0,$activeSlave.bellyPreg = 0,$activeSlave.pregSource = 0,$activeSlave.pregWeek = 0,$activeSlave.pregKnown = 0">> None. + <<optiondefault -2 "Barren" "$activeSlave.pregType = 0,$activeSlave.belly = 0,$activeSlave.bellyPreg = 0,$activeSlave.pregSource = 0,$activeSlave.pregWeek = 0,$activeSlave.pregKnown = 0">>Barren. + <</options>> + <<elseif $activeSlave.pubertyXX == 1>> + <<options $activeSlave.preg>> + ''Pregnancy:'' + <<optiongt 40 42 "Completely Filled" "$activeSlave.pregType = 8,$activeSlave.pregWeek = 42,$activeSlave.pregKnown = 1,$activeSlave.belly = 120000,$activeSlave.bellyPreg = 120000,$activeSlave.pubertyXX = 1">> Completely Filled. + <<optiongt 39 40 "Ready to drop" "$activeSlave.pregType = 1,$activeSlave.pregWeek = 40,$activeSlave.pregKnown = 1,$activeSlave.belly = 15000,$activeSlave.bellyPreg = 15000,$activeSlave.pubertyXX = 1">> Ready to drop. + <<optiongt 30 34 "Advanced" "$activeSlave.pregType = 1,$activeSlave.pregWeek = 34,$activeSlave.pregKnown = 1,$activeSlave.belly = 10000,$activeSlave.bellyPreg = 10000,$activeSlave.pubertyXX = 1">> Advanced. + <<optiongt 20 27 "Showing" "$activeSlave.pregType = 1,$activeSlave.pregWeek = 27,$activeSlave.pregKnown = 1,$activeSlave.belly = 5000,$activeSlave.bellyPreg = 5000,$activeSlave.pubertyXX = 1">> Showing. + <<optiongt 10 12 "Early" "$activeSlave.pregType = 1,$activeSlave.pregWeek = 12,$activeSlave.pregKnown = 1,$activeSlave.belly = 100,$activeSlave.bellyPreg = 100,$activeSlave.pubertyXX = 1">> Early. + <<optiongt -2 0 "None" "$activeSlave.pregType = 0,$activeSlave.belly = 0,$activeSlave.bellyPreg = 0,$activeSlave.pregSource = 0,$activeSlave.pregWeek = 0,$activeSlave.pregKnown = 0">> None. + <<optiondefault -2 "Barren" "$activeSlave.pregType = 0,$activeSlave.belly = 0,$activeSlave.bellyPreg = 0,$activeSlave.pregSource = 0,$activeSlave.pregWeek = 0,$activeSlave.pregKnown = 0">>Barren. + <</options>> + <</if>> + <<if $PC.dick > 0 && $activeSlave.preg > 0>> + <br> + <<options $activeSlave.pregSource>> + ''Father of child:'' + <<option -1 "My child">> Carrying my child. + <<option 0 "Other">> Not me. + <</options>> + <</if>> <</if>> - </span> - <<link "Carrying my child">><<set $activeSlave.pregSource = -1>><<StartingGirlsCost>><<replace "#father">>My child.<</replace>><</link>> | <<link "Clear">><<set $activeSlave.pregSource = 0>><<replace "#father">><</replace>><<StartingGirlsCost>><</link>> <</if>> -<</if>> -<</if>> -</span> +<br> -<span id="dickblock"> <<if $seeDicks != 0 || $makeDicks == 1>> - <br>''Penis:'' - <span id="dick"> - <<if $activeSlave.dick == 0>>None. - <<elseif $activeSlave.dick == 1>>Tiny. - <<elseif $activeSlave.dick == 2>>Small. - <<elseif $activeSlave.dick == 3>>Normal. - <<elseif $activeSlave.dick == 4>>Large. - <<elseif $activeSlave.dick == 5>>Massive. - <<else>>Inhuman.<</if>> - </span> - <<link "No penis">><<set $activeSlave.dick = 0,$activeSlave.balls = 0,$activeSlave.clit = 0,$activeSlave.pubertyXY = 0,$activeSlave.pubertyAgeXY = $potencyAge>><<replace "#dick">>None.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Tiny">><<set $activeSlave.dick = 1,$activeSlave.clit = 0>><<replace "#dick">>Tiny.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Small">><<set $activeSlave.dick = 2,$activeSlave.clit = 0>><<replace "#dick">>Small.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Normal">><<set $activeSlave.dick = 3,$activeSlave.clit = 0>><<replace "#dick">>Normal.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Large">><<set $activeSlave.dick = 4,$activeSlave.clit = 0>><<replace "#dick">>Large.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Massive">><<set $activeSlave.dick = 5,$activeSlave.clit = 0>><<replace "#dick">>Massive.<</replace>><<StartingGirlsCost>><</link>> + <br> + <<options $activeSlave.dick>> + ''Penis:'' + <<option 0 "None" "$activeSlave.balls = 0,$activeSlave.clit = 0,$activeSlave.pubertyXY = 0,$activeSlave.pubertyAgeXY = $potencyAge">> None. + <<option 1 "Tiny" "$activeSlave.clit = 0">> Tiny. + <<option 2 "Small" "$activeSlave.clit = 0">> Small. + <<option 3 "Normal" "$activeSlave.clit = 0">> Normal. + <<option 4 "Large" "$activeSlave.clit = 0">> Large. + <<optiondefault 5 "Massive" "$activeSlave.clit = 0">> Massive. + <</options>> + <<if $activeSlave.dick > 0>> - ''Foreskin:'' - <span id="foreskin"> - <<if $activeSlave.foreskin == 0>>None. - <<elseif $activeSlave.foreskin == 1>>Tiny. - <<elseif $activeSlave.foreskin == 2>>Small. - <<elseif $activeSlave.foreskin == 3>>Normal. - <<elseif $activeSlave.foreskin == 4>>Large. - <<else>>Massive.<</if>> - </span> - <<if $seeCircumcision == 1>><<link "Circumcised">><<set $activeSlave.foreskin = 0>><<replace "#foreskin">>None.<</replace>><<StartingGirlsCost>><</link>> |<</if>> - <<link "Tiny">><<set $activeSlave.foreskin = 1>><<replace "#foreskin">>Tiny.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Small">><<set $activeSlave.foreskin = 2>><<replace "#foreskin">>Small.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Normal">><<set $activeSlave.foreskin = 3>><<replace "#foreskin">>Normal.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Large">><<set $activeSlave.foreskin = 4>><<replace "#foreskin">>Large.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Massive">><<set $activeSlave.foreskin = 5>><<replace "#foreskin">>Massive.<</replace>><<StartingGirlsCost>><</link>> + <br> + <<if $seeCircumcision == 1>> + <<options $activeSlave.foreskin>> + ''Foreskin:'' + <<option 0 "Circumcised">> Circumcised. + <<option 1 "Tiny">> Tiny. + <<option 2 "Small">> Small. + <<option 3 "Normal">> Normal. + <<option 4 "Large">> Large. + <<optiondefault 5 "Massive">>Massive. + <</options>> + <<else>> + <<if $activeSlave.foreskin == 0>><<set $activeSlave.foreskin = 3>><</if>> + <<options $activeSlave.foreskin>> + ''Foreskin:'' + <<option 1 "Tiny">> Tiny. + <<option 2 "Small">> Small. + <<option 3 "Normal">> Normal. + <<option 4 "Large">> Large. + <<optiondefault 5 "Massive">>Massive. + <</options>> + <</if>> <</if>> - <br>''Testicles:'' - <span id="balls"> - <<if $activeSlave.balls == 0>>None. - <<elseif $activeSlave.balls == 1>>Vestigial. - <<elseif $activeSlave.balls == 2>>Small. - <<elseif $activeSlave.balls == 3>>Normal. - <<elseif $activeSlave.balls == 4>>Large. - <<elseif $activeSlave.balls == 5>>Massive. - <<else>>Inhuman.<</if>> - </span> - <<link "No testicles">><<set $activeSlave.balls = 0,$activeSlave.pubertyXY = 0,$activeSlave.pubertyAgeXY = $potencyAge>><<replace "#balls">>None.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Vestigial">><<set $activeSlave.balls = 1>><<replace "#balls">>Vestigial.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Small">><<set $activeSlave.balls = 2>><<replace "#balls">>Small.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Normal">><<set $activeSlave.balls = 3>><<replace "#balls">>Normal.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Large">><<set $activeSlave.balls = 4>><<replace "#balls">>Large.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Massive">><<set $activeSlave.balls = 5>><<replace "#balls">>Massive.<</replace>><<StartingGirlsCost>><</link>> - ''Puberty:''<<textbox "$activeSlave.pubertyAgeXY" $activeSlave.pubertyAgeXY "Starting Girls">> + <br> + <<options $activeSlave.balls>> + ''Testicles:'' + <<option 0 "None" "$activeSlave.pubertyXY = 0,$activeSlave.pubertyAgeXY = $potencyAge, $activeSlave.scrotum=0">> No testicles. + <<option 1 "Vestigial">> Vestigial. + <<option 2 "Small">> Small. + <<option 3 "Normal">> Normal. + <<option 4 "Large">> Large. + <<optiondefault 5 "Massive">> Massive. + <</options>> + <br> + <<options $activeSlave.pubertyAgeXY>> + ''Age of Male Puberty:'' + <<option>> + <<textbox "$activeSlave.pubertyAgeXY" $activeSlave.pubertyAgeXY "Starting Girls">> + <</options>> <<if $activeSlave.balls > 0>> - ''Ballsack:'' - <span id="scrotum"> - <<if $activeSlave.scrotum == 0>>None. - <<elseif $activeSlave.scrotum == 1>>Tiny. - <<elseif $activeSlave.scrotum == 2>>Small. - <<elseif $activeSlave.scrotum == 3>>Normal. - <<elseif $activeSlave.scrotum == 4>>Large. - <<elseif $activeSlave.scrotum == 5>>Massive. - <<else>>Inhuman.<</if>> - </span> - <<link "None">><<set $activeSlave.scrotum = 0>><<replace "#scrotum">>None.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Tiny">><<set $activeSlave.scrotum = 1>><<replace "#scrotum">>Tiny.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Small">><<set $activeSlave.scrotum = 2>><<replace "#scrotum">>Small.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Normal">><<set $activeSlave.scrotum = 3>><<replace "#scrotum">>Normal.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Large">><<set $activeSlave.scrotum = 4>><<replace "#scrotum">>Large.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Massive">><<set $activeSlave.scrotum = 5>><<replace "#scrotum">>Massive.<</replace>><<StartingGirlsCost>><</link>> - <br>''Puberty:'' - <span id="Mpub"> - <<if $activeSlave.pubertyXY == 1>>Postpubescent. - <<else>>Prepubescent. - <</if>> - </span> - <<link "Postpubescent">><<set $activeSlave.pubertyXY = 1>><<replace "#Mpub">>Postpubescent.<</replace>><<StartingGirlsCost>><</link>> | <<link "Prepubescent">><<set $activeSlave.pubertyXY = 0,$activeSlave.pubertyAgeXY = $potencyAge>><<replace "#Mpub">>Prepubescent.<</replace>><<StartingGirlsCost>><</link>> + <<options $activeSlave.scrotum>> + ''Ballsack:'' + <<option 0 "None">> None. + <<option 1 "Tiny">> Tiny. + <<option 2 "Small">> Small. + <<option 3 "Normal">> Normal. + <<option 4 "Large">> Large. + <<optiondefault 5 "Massive">> Massive. + <</options>> + <br> + <<options $activeSlave.pubertyXY>> + ''Male Puberty:'' + <<option 0 "Prepubescent" "$activeSlave.pubertyAgeXY = $potencyAge">> Prepubescent. + <<option 1 "Postpubescent">> Postpubescent. + <</options>> <</if>> <</if>> -</span> -<br>''Prostate:'' -<span id="prostate"> -<<if $activeSlave.prostate == 1>>Has a prostate. -<<else>>No prostate. -<</if>> -</span> -<<link "Add Prostate">><<set $activeSlave.prostate = 1>><<replace "#prostate">>Has a prostate.<</replace>><<StartingGirlsCost>><</link>> | <<link "Remove Prostate">><<set $activeSlave.prostate = 0>><<replace "#prostate">>No prostate.<</replace>><<StartingGirlsCost>><</link>> +<br> +<<options $activeSlave.prostate>> + ''Prostate:'' + <<option 0 "No prostate">> No prostate. + <<option 1 "Has a prostate">> Has a prostate. +<</options>> -<br><br> -<span id="analSkillsBlock"> -</span> -<<timed 50ms>> - <<StartingGirlsAnalSkill>> -<</timed>> - -''Oral sex:'' -<span id="oralSkill"> -<<if $activeSlave.oralSkill <= 10>>Unskilled. -<<elseif $activeSlave.oralSkill <= 30>>@@.cyan;Basic.@@ -<<elseif $activeSlave.oralSkill <= 60>>@@.cyan;Skilled.@@ -<<else>>@@.cyan;Expert.@@ +<br> +<<if $activeSlave.anus == 0>> + <<options>> + ''Anal sex:'' + <<option>> + //Anal virgins cannot be given anal skills// + <</options>> +<<else>> + <<options $activeSlave.analSkill>> + ''Anal sex:'' + <<optionlte 10 0 "Unskilled">>Unskilled. + <<optionlte 30 15 "Basic">>@@.cyan;Basic.@@ + <<optionlte 60 35 "Skilled">>@@.cyan;Skilled.@@ + <<optiondefault 65 "Expert">>@@.cyan;Expert.@@ + <</options>> <</if>> -</span> -<<link "Unskilled">><<set $activeSlave.oralSkill = 0>><<replace "#oralSkill">>Unskilled.<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | -<<link "Basic">><<set $activeSlave.oralSkill = 15>><<replace "#oralSkill">>@@.cyan;Basic.@@<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | -<<link "Skilled">><<set $activeSlave.oralSkill = 35>><<replace "#oralSkill">>@@.cyan;Skilled.@@<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | -<<link "Expert">><<set $activeSlave.oralSkill = 65>><<replace "#oralSkill">>@@.cyan;Expert.@@<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> +<br> + +<<options $activeSlave.oralSkill>> + ''Oral sex:'' + <<optionlte 10 0 "Unskilled">> Unskilled. + <<optionlte 30 15 "Basic">> @@.cyan;Basic.@@ + <<optionlte 60 35 "Skilled">> @@.cyan;Skilled.@@ + <<optiondefault 65 "Expert">>@@.cyan;Expert.@@ +<</options>> <br> -<span id="vaginalSkillsBlock"> -</span> -<<timed 50ms>> - <<StartingGirlsVaginalSkill>> -<</timed>> - -<br>''Prostitution:'' -<span id="whoreSkill"> -<<if $activeSlave.whoreSkill <= 10>>Unskilled. -<<elseif $activeSlave.whoreSkill <= 30>>@@.cyan;Basic.@@ -<<elseif $activeSlave.whoreSkill <= 60>>@@.cyan;Skilled.@@ -<<else>>@@.cyan;Expert.@@ -<</if>> -</span> -<<link "Unskilled">><<set $activeSlave.whoreSkill = 0>><<replace "#whoreSkill">>Unskilled.<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | -<<link "Basic">><<set $activeSlave.whoreSkill = 15>><<replace "#whoreSkill">>@@.cyan;Basic.@@<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | -<<link "Skilled">><<set $activeSlave.whoreSkill = 35>><<replace "#whoreSkill">>@@.cyan;Skilled.@@<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | -<<link "Expert">><<set $activeSlave.whoreSkill = 65>><<replace "#whoreSkill">>@@.cyan;Expert.@@<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> - ''Entertainment:'' -<span id="entertainSkill"> -<<if $activeSlave.entertainSkill <= 10>>Unskilled. -<<elseif $activeSlave.entertainSkill <= 30>>@@.cyan;Basic.@@ -<<elseif $activeSlave.entertainSkill <= 60>>@@.cyan;Skilled.@@ -<<else>>@@.cyan;Expert.@@ -<</if>> -</span> -<<link "Unskilled">><<set $activeSlave.entertainSkill = 0>><<replace "#entertainSkill">>Unskilled.<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | -<<link "Basic">><<set $activeSlave.entertainSkill = 15>><<replace "#entertainSkill">>@@.cyan;Basic.@@<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | -<<link "Skilled">><<set $activeSlave.entertainSkill = 35>><<replace "#entertainSkill">>@@.cyan;Skilled.@@<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | -<<link "Expert">><<set $activeSlave.entertainSkill = 65>><<replace "#entertainSkill">>@@.cyan;Expert.@@<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> - -<br>''Combat:'' -<span id="combatSkill"> -<<if $activeSlave.combatSkill == 0>>Unskilled. -<<else>>@@.cyan;Skilled.@@ -<</if>> -</span> -<<link "Unskilled">><<set $activeSlave.combatSkill = 0>><<replace "#combatSkill">>Unskilled.<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | -<<link "Skilled">><<set $activeSlave.combatSkill = 1>><<replace "#combatSkill">>@@.cyan;Skilled.@@<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> -<span id="skillsWarning"></span> - -<br>''Intelligence:'' -<span id="intelligence"> -<<if $activeSlave.intelligence > 95>>@@.deepskyblue;Brilliant.@@ -<<elseif $activeSlave.intelligence > 50>>@@.deepskyblue;Very smart.@@ -<<elseif $activeSlave.intelligence > 15>>@@.deepskyblue;Smart.@@ -<<elseif $activeSlave.intelligence >= -15>>Average. -<<elseif $activeSlave.intelligence >= -50>>@@.orangered;Stupid.@@ -<<elseif $activeSlave.intelligence >= -95>>@@.orangered;Very stupid.@@ -<<else>>@@.orangered;Moronic.@@ -<</if>> -</span> -<<link "Brilliant">><<set $activeSlave.intelligence = 100>><<replace "#intelligence">>@@.deepskyblue;Brilliant.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Very smart">><<set $activeSlave.intelligence = 60>><<replace "#intelligence">>@@.deepskyblue;Very smart.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Smart">><<set $activeSlave.intelligence = 30>><<replace "#intelligence">>@@.deepskyblue;Smart.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Average intelligence">><<set $activeSlave.intelligence = 0>><<replace "#intelligence">>Average.<</replace>><<StartingGirlsCost>><</link>> | -<<link "Stupid">><<set $activeSlave.intelligence = -30>><<replace "#intelligence">>@@.orangered;Stupid.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Very stupid">><<set $activeSlave.intelligence = -60>><<replace "#intelligence">>@@.orangered;Very stupid.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Moronic">><<set $activeSlave.intelligence = -100>><<replace "#intelligence">>@@.orangered;Moronic.@@<</replace>><<StartingGirlsCost>><</link>> - -<br>''Education:'' -<span id="intelligenceImplant"> -<<if $activeSlave.intelligenceImplant >= 30>>@@.deepskyblue;Well educated.@@ -<<elseif $activeSlave.intelligenceImplant >= 15>>@@.deepskyblue;Educated.@@ -<<else>>Uneducated. -<</if>> -</span> -<<link "Well educated">><<set $activeSlave.intelligenceImplant = 30>><<replace "#intelligenceImplant">>@@.deepskyblue;Well educated.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Educated">><<set $activeSlave.intelligenceImplant = 15>><<replace "#intelligenceImplant">>@@.deepskyblue;Educated.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Uneducated">><<set $activeSlave.intelligenceImplant = 0>><<replace "#intelligenceImplant">>Uneducated.<</replace>><<StartingGirlsCost>><</link>> - -<br>''Fetish:'' -<span id="fetishblock"> -<span id="fetish"> -<<if $activeSlave.fetishKnown == 1>> - <<if $activeSlave.fetish == "none">> - @@.pink;$activeSlave.fetish.@@ - <<else>> - @@.lightcoral;$activeSlave.fetish.@@ - <</if>> + +<<if $activeSlave.vagina == 0>> + <<options>> + ''Vaginal sex:'' + <<option>> + //Virgins cannot be given vaginal skills// + <</options>> +<<elseif $activeSlave.vagina == -1>> + <<options>> + ''Vaginal sex:'' + <<option>> + //Must have a vagina to have vaginal skills// + <</options>> <<else>> - //Not known.// - <<link "Known">> - <<ToggleFetish 1>> - <</link>> + <<options $activeSlave.vagina>> + ''Vaginal sex:'' + <<optionlte 10 0 "Unskill">>Unskilled. + <<optionlte 30 15 "Basic">>@@.cyan;Basic.@@ + <<optionlte 60 35 "Skilled">>@@.cyan;Skilled.@@ + <<optiondefault 65 "Expert">>@@.cyan;Expert.@@ + <</options>> <</if>> -</span> + <br> -<<if $activeSlave.fetishKnown == 1>> - - <<link "Unknown">> - <<ToggleFetish 0>> - <</link>> | - <<link "None">> - <<set $activeSlave.fetish = "none", $activeSlave.fetishKnown = 1>> - <<ToggleFetish 1>> - <</link>> | - <<link "Sub">> - <<set $activeSlave.fetish = "submissive", $activeSlave.fetishKnown = 1>> - <<ToggleFetish 1>> - <</link>> | - <<link "Dom">> - <<set $activeSlave.fetish = "dom", $activeSlave.fetishKnown = 1>> - <<ToggleFetish 1>> - <</link>> | - <<link "Cumslut">> - <<set $activeSlave.fetish = "cumslut", $activeSlave.fetishKnown = 1>> - <<ToggleFetish 1>> - <</link>> | - <<link "Humiliation">> - <<set $activeSlave.fetish = "humiliation", $activeSlave.fetishKnown = 1>> - <<ToggleFetish 1>> - <</link>> | - <<link "Buttslut">> - <<set $activeSlave.fetish = "buttslut", $activeSlave.fetishKnown = 1>> - <<ToggleFetish 1>> - <</link>> | - <<link "Breasts">> - <<set $activeSlave.fetish = "boobs", $activeSlave.fetishKnown = 1>> - <<ToggleFetish 1>> - <</link>> | - <<link "Pregnancy">> - <<set $activeSlave.fetish = "pregnancy", $activeSlave.fetishKnown = 1>> - <<ToggleFetish 1>> - <</link>> | - <<link "Sadism">> - <<set $activeSlave.fetish = "sadist", $activeSlave.fetishKnown = 1>> - <<ToggleFetish 1>> - <</link>> | - <<link "Masochism">> - <<set $activeSlave.fetish = "masochist", $activeSlave.fetishKnown = 1>> - <<ToggleFetish 1>> - <</link>> - <<if $seeExtreme == 1>> - | <<link "Mindbroken">> - <<set $activeSlave.fetish = "mindbroken", $activeSlave.fetishKnown = 1, $activeSlave.sexualFlaw = "none", $activeSlave.behavioralFlaw = "none", $activeSlave.sexualQuirk = "none", $activeSlave.sexualFlaw = "none">> - <<ToggleFetish 1>> - <</link>> - <</if>> +<<options $activeSlave.whoreSkill>> + ''Prostitution:'' + <<optionlte 10 0 "Unskilled">> Unskilled. + <<optionlte 30 15 "Basic">> @@.cyan;Basic.@@ + <<optionlte 60 35 "Skilled">> @@.cyan;Skilled.@@ + <<optiondefault 65 "Expert">>@@.cyan;Expert.@@ +<</options>> + +<<options $activeSlave.entertainSkill>> + ''Entertainment:'' + <<optionlte 10 0 "Unskilled">> Unskilled. + <<optionlte 30 15 "Basic">> @@.cyan;Basic.@@ + <<optionlte 60 35 "Skilled">> @@.cyan;Skilled.@@ + <<optiondefault 65 "Expert">>@@.cyan;Expert.@@ +<</options>> -<<if $activeSlave.fetish != "none">> <br> -<span id="fetishStrength"> - ''Fetish strength:'' - <<if $activeSlave.fetishStrength > 95>> - @@.lightcoral;High.@@ - <<elseif $activeSlave.fetishStrength <= 60>> - @@.pink;Low.@@ - <<else>> - @@.hotpink;Normal.@@ - <</if>> - <<if $activeSlave.fetishStrength > 60>> - <<link "Decrease">> - <<ChangeFetishStrength 0>> - <</link>> - <</if>> - <<if ($activeSlave.fetishStrength > 60)>>|<</if>> - <<if $activeSlave.fetishStrength <= 95>> - <<link "Increase">> - <<ChangeFetishStrength 1>> - <</link>> - <</if>> -</span> -<</if>> +<<options $activeSlave.combatSkill>> + ''Combat:'' + <<option 0 "Unskilled">>Unskilled + <<option 1 "Skilled">>@@.cyan;Skilled.@@ +<</options>> +<br> +<<if $activeSlave.whoreSkill+$activeSlave.entertainSkill+$activeSlave.vaginalSkill+$activeSlave.analSkill+$activeSlave.oralSkill+($activeSlave.combatSkill*100) > 200>> + <<options>> + <<option>> + //@@.red;Starting slaves incur + <<if $activeSlave.whoreSkill+$activeSlave.entertainSkill+$activeSlave.vaginalSkill+$activeSlave.analSkill+$activeSlave.oralSkill+($activeSlave.combatSkill*100) > 400>> + a severe cost penalty at for being highly + <<else>> + an additional cost penalty for being + <</if>> + skilled. This slave's + <<if $activeSlave.actualAge >= 25>> + <<if $activeSlave.actualAge > 35>> + advanced + <</if>> + age decreases the penalty + <<else>> + young age requires paying the full penalty + <</if>>. + @@// + <</options>> +<</if>> + + +<<options $activeSlave.intelligence>> + ''Intelligence:'' + <<optionlt -95 -100 "Moronic">>@@.orangered;Moronic.@@ + <<optionlt -50 -60 "Very stupid">>@@.orangered;Very stupid.@@ + <<optionlt -15 -30 "Stupid">>@@.orangered;Stupid.@@ + <<optionlt 15 0 "Average">>Average. + <<optionlte 50 30 "Smart">>@@.deepskyblue;Smart.@@ + <<optionlte 95 60 "Very smart">>@@.deepskyblue;Very smart.@@ + <<optiondefault 100 "Brilliant">>@@.deepskyblue;Brilliant.@@ +<</options>> -<</if>> -</span> +<br> +<<options $activeSlave.intelligenceImplant>> + ''Education:'' + <<optionlt 15 0 "Uneducated">> Uneducated. + <<optionlt 30 15 "Educated">> @@.deepskyblue;Educated.@@ + <<optiondefault 30 "Well educated">> @@.deepskyblue;Well educated.@@ +<</options>> -<br>''Sexuality:'' -<span id="sexuality"> -<span id="attrXY"> -<<if $activeSlave.attrKnown == 1>> - <<if $activeSlave.attrXY <= 5>> - @@.red;Disgusted by men,@@ - <<elseif $activeSlave.attrXY <= 15>> - @@.red;Turned off by men,@@ - <<elseif $activeSlave.attrXY <= 35>> - @@.red;Not attracted to men,@@ - <<elseif $activeSlave.attrXY <= 65>> - Indifferent to men, - <<elseif $activeSlave.attrXY <= 85>> - @@.green;Attracted to men,@@ - <<elseif $activeSlave.attrXY <= 95>> - @@.green;Aroused by men,@@ - <<else>> - @@.green;Passionate about men,@@ - <</if>> +<br> +<<if $activeSlave.fetishKnown == 0>> + <<options $activeSlave.fetishKnown>> + ''Fetish:'' + <<option 0 "Unknown">> + //Not known.// + <<option 1 "Known">> + <</options>> <<else>> - //Not known.// -<</if>> -</span> -<span id="attrXX"> -<<if $activeSlave.attrKnown == 1>> - <<if $activeSlave.attrXX <= 5>> - @@.red;disgusted by women.@@ - <<elseif $activeSlave.attrXX <= 15>> - @@.red;turned off by women.@@ - <<elseif $activeSlave.attrXX <= 35>> - @@.red;not attracted to women.@@ - <<elseif $activeSlave.attrXX <= 65>> - indifferent to women. - <<elseif $activeSlave.attrXX <= 85>> - @@.green;attracted to women.@@ - <<elseif $activeSlave.attrXX <= 95>> - @@.green;aroused by women.@@ + <<if $seeExtreme != 1>> + <<options $activeSlave.fetish>> + ''Fetish:'' + <<if $activeSlave.fetish == "none">> + @@.pink;$activeSlave.fetish.@@ + <<else>> + @@.lightcoral;$activeSlave.fetish.@@ + <</if>> + <<option "" "Unknown" "$activeSlave.fetish=either('boobs', 'buttslut', 'cumslut', 'dom', 'humiliation', 'masochist', 'none', 'none', 'none', 'none', 'none', 'none', 'none', 'none', 'none', 'none', 'pregnancy', 'sadist', 'submissive'),$activeSlave.fetishKnown=0">> + <<option "none" "None">> + <<option "submissive" "Sub">> + <<option "dom" "Dom">> + <<option "cumslut" "Cumslut">> + <<option "humiliation" "Humiliation">> + <<option "buttslut" "Buttslut">> + <<option "boobs" "Breasts">> + <<option "pregnancy" "Pregnancy">> + <<option "sadist" "Sadism">> + <<option "masochist" "Masochism">> + <</options>> <<else>> - @@.green;passionate about women.@@ + <<options $activeSlave.fetish>> + ''Fetish:'' + <<if $activeSlave.fetish == "none">> + @@.pink;$activeSlave.fetish.@@ + <<else>> + @@.lightcoral;$activeSlave.fetish.@@ + <</if>> + <<option "" "Unknown" "$activeSlave.fetish=either('boobs', 'buttslut', 'cumslut', 'dom', 'humiliation', 'masochist', 'none', 'none', 'none', 'none', 'none', 'none', 'none', 'none', 'none', 'none', 'pregnancy', 'sadist', 'submissive'),$activeSlave.fetishKnown=0">> + <<option "none" "None">> + <<option "submissive" "Sub">> + <<option "dom" "Dom">> + <<option "cumslut" "Cumslut">> + <<option "humiliation" "Humiliation">> + <<option "buttslut" "Buttslut">> + <<option "boobs" "Breasts">> + <<option "pregnancy" "Pregnancy">> + <<option "sadist" "Sadism">> + <<option "masochist" "Masochism">> + <<option "mindbroken" "Mindbroken" "$activeSlave.sexualFlaw = 'none', $activeSlave.behavioralFlaw = 'none', $activeSlave.sexualQuirk = 'none', $activeSlave.sexualFlaw = 'none'">> + <</options>> <</if>> -<</if>> -</span> -<<if $activeSlave.attrKnown == 1>> -<<link "Unknown">> - <<ToggleSexuality 0>> -<</link>> + /* fetish is known */ + <<if $activeSlave.fetish != "none">> + <br> + <<options $activeSlave.fetishStrength>> + ''Fetish strength:'' $activeSlave.fetishStrength + <<if $activeSlave.fetishStrength > 95>> + @@.lightcoral;High.@@ + <<elseif $activeSlave.fetishStrength <= 60>> + @@.pink;Low.@@ + <<else>> + @@.hotpink;Normal.@@ + <</if>> + <<option>> + <<if $activeSlave.fetishStrength > 60>> + [[Decrease|Starting Girls][$activeSlave.fetishStrength -= 5]] + <<if $activeSlave.fetishStrength <= 95>> + | + <</if>> + <</if>> + <<option>> + <<if $activeSlave.fetishStrength <= 95>> + [[Increase|Starting Girls][$activeSlave.fetishStrength += 5]] + <</if>> + <</options>> + <</if>> /* Fetish != "none" */ +<</if>> /* fetishKnown */ +<br> -<br>XY attraction: -<span id="decreaseXY"> - <<link "Decrease">> - <<ChangeAttr 1 0>> - <</link>> -</span> -<span id="increaseXY"> -| - <<link "Increase">> - <<ChangeAttr 1 1>> - <</link>> -</span> -| XX attraction: -<span id="decreaseXX"> - <<link "Decrease">> - <<ChangeAttr 0 0>> - <</link>> -</span> -<span id="increaseXX"> -| - <<link "Increase">> - <<ChangeAttr 0 1>> - <</link>> -</span> -<br>''Sex drive:'' -<span id="energy"> -<<if $activeSlave.energy == 100>>@@.green;Nympho!@@ -<<elseif $activeSlave.energy > 80>>@@.green;Sex addict.@@ -<<elseif $activeSlave.energy > 60>>@@.green;Powerful.@@ -<<elseif $activeSlave.energy > 40>>@@.yellow;Average.@@ -<<elseif $activeSlave.energy > 20>>@@.red;Poor.@@ -<<else>>@@.red;Frigid.@@<</if>> -</span> -<<link "Nympho">><<set $activeSlave.energy = 100, $activeSlave.attrKnown = 1>><<replace "#energy">>@@.green;Nympho!@@<</replace>><<StartingGirlsCost>><</link>> -| <<link "Sex addict">><<set $activeSlave.energy = 85, $activeSlave.attrKnown = 1>><<replace "#energy">>@@.green;Sex addict.@@<</replace>><<StartingGirlsCost>><</link>> -| <<link "Powerful">><<set $activeSlave.energy = 65, $activeSlave.attrKnown = 1>><<replace "#energy">>@@.green;Powerful.@@<</replace>><<StartingGirlsCost>><</link>> -| <<link "Average">><<set $activeSlave.energy = 45, $activeSlave.attrKnown = 1>><<replace "#energy">>@@.yellow;Average.@@<</replace>><<StartingGirlsCost>><</link>> -| <<link "Poor">><<set $activeSlave.energy = 25, $activeSlave.attrKnown = 1>><<replace "#energy">>@@.red;Poor.@@<</replace>><<StartingGirlsCost>><</link>> -| <<link "Frigid">><<set $activeSlave.energy = 5, $activeSlave.attrKnown = 1>><<replace "#energy">>@@.red;Frigid.@@<</replace>><<StartingGirlsCost>><</link>> +<<if $activeSlave.attrKnown == 0>> + <<options $activeSlave.attrKnown>> + ''Sexuality:'' + <<option 0 "Unknown">> + //Not known.// + <<option 1 "Known">> + <</options>> <<else>> - <<link "Known">> - <<ToggleSexuality 1>> - <</link>> + <<options $activeSlave.attrXY>> + ''Sexuality:'' + <<if $activeSlave.attrXY <= 5>> + @@.red;Disgusted by men,@@ + <<elseif $activeSlave.attrXY <= 15>> + @@.red;Turned off by men,@@ + <<elseif $activeSlave.attrXY <= 35>> + @@.red;Not attracted to men,@@ + <<elseif $activeSlave.attrXY <= 65>> + Indifferent to men, + <<elseif $activeSlave.attrXY <= 85>> + @@.green;Attracted to men,@@ + <<elseif $activeSlave.attrXY <= 95>> + @@.green;Aroused by men,@@ + <<else>> + @@.green;Passionate about men,@@ + <</if>> + <<if $activeSlave.attrXX <= 5>> + @@.red;disgusted by women.@@ + <<elseif $activeSlave.attrXX <= 15>> + @@.red;turned off by women.@@ + <<elseif $activeSlave.attrXX <= 35>> + @@.red;not attracted to women.@@ + <<elseif $activeSlave.attrXX <= 65>> + indifferent to women. + <<elseif $activeSlave.attrXX <= 85>> + @@.green;attracted to women.@@ + <<elseif $activeSlave.attrXX <= 95>> + @@.green;aroused by women.@@ + <<else>> + @@.green;passionate about women.@@ + <</if>> + <<option "" "Unknown" "$activeSlave.attrXX = random(0,100), $activeSlave.attrXY = random(0,100), $activeSlave.energy = random(1,90), $activeSlave.attrKnown = 0">> + <<option>> + XY (male) attraction: + <<if $activeSlave.attrXY > 0>> + [[Decrease|Starting Girls][$activeSlave.attrXY = Math.clamp($activeSlave.attrXY-10, 0, 100)]] + <<if $activeSlave.attrXY < 100>> + | + <</if>> + <</if>> + <<option>> + <<if $activeSlave.attrXY < 100>> + [[Increase|Starting Girls][$activeSlave.attrXY = Math.clamp($activeSlave.attrXY+10, 0, 100)]] + <</if>> + <<option>> + X (male) attraction: + <<if $activeSlave.attrXX > 0>> + [[Decrease|Starting Girls][$activeSlave.attrXX = Math.clamp($activeSlave.attrXX-10, 0, 100)]] + <<if $activeSlave.attrXX < 100>> + | + <</if>> + <</if>> + <<option>> + <<if $activeSlave.attrXX < 100>> + [[Increase|Starting Girls][$activeSlave.attrXX = Math.clamp($activeSlave.attrXX+10, 0, 100)]] + <</if>> + <</options>> + <br> + <<options $activeSlave.energy>> + ''Sex drive:'' + <<optionlte 20 5 "Frigid">>@@.red;Frigid.@@ + <<optionlte 40 25 "Poor">>@@.red;Poor@@ + <<optionlte 60 45 "Average">>@@.yellow;Average@@ + <<optionlte 80 65 "Powerful">>@@.green;Powerful@@ + <<optionlte 99 85 "Sex addict">>@@.green;Sex addict@@ + <<optiondefault 100 "Nympho">>@@.green;Nympho!@@ + <</options>> <</if>> -</span> -<br>''Behavioral Flaw:'' -<span id="behavioralFlaw"> -<<if $activeSlave.behavioralFlaw == "none">> - //$activeSlave.behavioralFlaw.// -<<else>> - @@.red;$activeSlave.behavioralFlaw.@@ -<</if>> -</span> -<br> -<<link "None">><<set $activeSlave.behavioralFlaw = "none">><<replace "#behavioralFlaw">>//$activeSlave.behavioralFlaw.//<</replace>><<StartingGirlsCost>><</link>> | -<<link "Arrogant">><<set $activeSlave.behavioralFlaw = "arrogant">><<replace "#behavioralFlaw">>@@.red;$activeSlave.behavioralFlaw.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Bitchy">><<set $activeSlave.behavioralFlaw = "bitchy">><<replace "#behavioralFlaw">>@@.red;$activeSlave.behavioralFlaw.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Odd">><<set $activeSlave.behavioralFlaw = "odd">><<replace "#behavioralFlaw">>@@.red;$activeSlave.behavioralFlaw.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Men">><<set $activeSlave.behavioralFlaw = "hates men">><<replace "#behavioralFlaw">>@@.red;$activeSlave.behavioralFlaw.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Women">><<set $activeSlave.behavioralFlaw = "hates women">><<replace "#behavioralFlaw">>@@.red;$activeSlave.behavioralFlaw.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Anorexic">><<set $activeSlave.behavioralFlaw = "anorexic">><<replace "#behavioralFlaw">>@@.red;$activeSlave.behavioralFlaw.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Gluttonous">><<set $activeSlave.behavioralFlaw = "gluttonous">><<replace "#behavioralFlaw">>@@.red;$activeSlave.behavioralFlaw.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Devout">><<set $activeSlave.behavioralFlaw = "devout">><<replace "#behavioralFlaw">>@@.red;$activeSlave.behavioralFlaw.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Liberated">><<set $activeSlave.behavioralFlaw = "liberated">><<replace "#behavioralFlaw">>@@.red;$activeSlave.behavioralFlaw.@@<</replace>><<StartingGirlsCost>><</link>> - -<br>''Behavioral Quirk:'' -<span id="behavioralQuirk"> -<<if $activeSlave.behavioralQuirk == "none">> - //$activeSlave.behavioralQuirk.// -<<else>> - @@.green;$activeSlave.behavioralQuirk.@@ -<</if>> -</span> -<br> -<<link "None">><<set $activeSlave.behavioralQuirk = "none">><<replace "#behavioralQuirk">>//$activeSlave.behavioralQuirk.//<</replace>><<StartingGirlsCost>><</link>> | -<<link "Confident">><<set $activeSlave.behavioralQuirk = "confident">><<replace "#behavioralQuirk">>@@.green;$activeSlave.behavioralQuirk.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Cutting">><<set $activeSlave.behavioralQuirk = "cutting">><<replace "#behavioralQuirk">>@@.green;$activeSlave.behavioralQuirk.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Funny">><<set $activeSlave.behavioralQuirk = "funny">><<replace "#behavioralQuirk">>@@.green;$activeSlave.behavioralQuirk.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Men">><<set $activeSlave.behavioralQuirk = "adores men">><<replace "#behavioralQuirk">>@@.green;$activeSlave.behavioralQuirk.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Women">><<set $activeSlave.behavioralQuirk = "adores women">><<replace "#behavioralQuirk">>@@.green;$activeSlave.behavioralQuirk.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Insecure">><<set $activeSlave.behavioralQuirk = "insecure">><<replace "#behavioralQuirk">>@@.green;$activeSlave.behavioralQuirk.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Fitness">><<set $activeSlave.behavioralQuirk = "fitness">><<replace "#behavioralQuirk">>@@.green;$activeSlave.behavioralQuirk.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Sinful">><<set $activeSlave.behavioralQuirk = "sinful">><<replace "#behavioralQuirk">>@@.green;$activeSlave.behavioralQuirk.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Advocate">><<set $activeSlave.behavioralQuirk = "advocate">><<replace "#behavioralQuirk">>@@.green;$activeSlave.behavioralQuirk.@@<</replace>><<StartingGirlsCost>><</link>> - -<br>''Sexual Flaw:'' -<span id="sexualFlaw"> -<<if $activeSlave.sexualFlaw == "none">> - //$activeSlave.sexualFlaw.// -<<else>> - @@.red;$activeSlave.sexualFlaw.@@ -<</if>> -</span> -<br> -<<link "None">><<set $activeSlave.sexualFlaw = "none">><<replace "#sexualFlaw">>//$activeSlave.sexualFlaw.//<</replace>><<StartingGirlsCost>><</link>> | -<<link "Oral">><<set $activeSlave.sexualFlaw = "hates oral">><<replace "#sexualFlaw">>@@.red;$activeSlave.sexualFlaw.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Anal">><<set $activeSlave.sexualFlaw = "hates anal">><<replace "#sexualFlaw">>@@.red;$activeSlave.sexualFlaw.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Penetration">><<set $activeSlave.sexualFlaw = "hates penetration">><<replace "#sexualFlaw">>@@.red;$activeSlave.sexualFlaw.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Repressed">><<set $activeSlave.sexualFlaw = "repressed">><<replace "#sexualFlaw">>@@.red;$activeSlave.sexualFlaw.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Shamefast">><<set $activeSlave.sexualFlaw = "shamefast">><<replace "#sexualFlaw">>@@.red;$activeSlave.sexualFlaw.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Apathetic">><<set $activeSlave.sexualFlaw = "apathetic">><<replace "#sexualFlaw">>@@.red;$activeSlave.sexualFlaw.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Crude">><<set $activeSlave.sexualFlaw = "crude">><<replace "#sexualFlaw">>@@.red;$activeSlave.sexualFlaw.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Judgemental">><<set $activeSlave.sexualFlaw = "judgemental">><<replace "#sexualFlaw">>@@.red;$activeSlave.sexualFlaw.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Sexually idealistic">><<set $activeSlave.sexualFlaw = "idealistic">><<replace "#sexualFlaw">>@@.red;$activeSlave.sexualFlaw.@@<</replace>><<StartingGirlsCost>><</link>> - -<br>''Sexual Quirk:'' -<span id="sexualQuirk"> -<<if $activeSlave.sexualQuirk == "none">> - //$activeSlave.sexualQuirk.// -<<else>> - @@.green;$activeSlave.sexualQuirk.@@ -<</if>> -</span> -<br> -<<link "None">><<set $activeSlave.sexualQuirk = "none">><<replace "#sexualQuirk">>//$activeSlave.sexualQuirk.//<</replace>><<StartingGirlsCost>><</link>> | -<<link "Oral">><<set $activeSlave.sexualQuirk = "gagfuck queen">><<replace "#sexualQuirk">>@@.green;$activeSlave.sexualQuirk.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Anal">><<set $activeSlave.sexualQuirk = "painal queen">><<replace "#sexualQuirk">>@@.green;$activeSlave.sexualQuirk.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Penetration">><<set $activeSlave.sexualQuirk = "strugglefuck queen">><<replace "#sexualQuirk">>@@.green;$activeSlave.sexualQuirk.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Perverted">><<set $activeSlave.sexualQuirk = "perverted">><<replace "#sexualQuirk">>@@.green;$activeSlave.sexualQuirk.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Tease">><<set $activeSlave.sexualQuirk = "tease">><<replace "#sexualQuirk">>@@.green;$activeSlave.sexualQuirk.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Caring">><<set $activeSlave.sexualQuirk = "caring">><<replace "#sexualQuirk">>@@.green;$activeSlave.sexualQuirk.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Unflinching">><<set $activeSlave.sexualQuirk = "unflinching">><<replace "#sexualQuirk">>@@.green;$activeSlave.sexualQuirk.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Size queen">><<set $activeSlave.sexualQuirk = "size queen">><<replace "#sexualQuirk">>@@.green;$activeSlave.sexualQuirk.@@<</replace>><<StartingGirlsCost>><</link>> | -<<link "Romantic">><<set $activeSlave.sexualQuirk = "romantic">><<replace "#sexualQuirk">>@@.green;$activeSlave.sexualQuirk.@@<</replace>><<StartingGirlsCost>><</link>> +<br> +<<options $activeSlave.behavioralFlaw>> + ''Behavioral Flaw:'' + <<if $activeSlave.behavioralFlaw == "none">> + //$activeSlave.behavioralFlaw.// + <<else>> + @@.red;$activeSlave.behavioralFlaw.@@ + <</if>> + <<option "none" "None">> + <<option "arrogant" "Arrogant">> + <<option "bitchy" "Bitchy">> + <<option "odd" "Odd">> + <<option "hates men" "Men">> + <<option "hates women" "Women">> + <<option "anorexic" "Anorexic">> + <<option "gluttonous" "Gluttonous">> + <<option "devout" "Devout">> + <<option "liberated" "Liberated">> +<</options>> +<br> +<<options $activeSlave.behavioralQuirk>> + ''Behavioral Quirk:'' + <<if $activeSlave.behavioralQuirk == "none">> + //$activeSlave.behavioralQuirk.// + <<else>> + @@.green;$activeSlave.behavioralQuirk.@@ + <</if>> + <<option "none" "None" >> + <<option "confident" "Confident" >> + <<option "cutting" "Cutting" >> + <<option "funny" "Funny" >> + <<option "adores men" "Men" >> + <<option "adores women" "Women" >> + <<option "insecure" "Insecure" >> + <<option "fitness" "Fitness" >> + <<option "sinful" "Sinful" >> + <<option "advocate" "Advocate" >> +<</options>> +<br> +<<options $activeSlave.sexualFlaw>> + ''Sexual Flaw:'' + <<if $activeSlave.sexualFlaw == "none">> + //$activeSlave.sexualFlaw.// + <<else>> + @@.red;$activeSlave.sexualFlaw.@@ + <</if>> + <<option "none" "None">> + <<option "hates oral" "Oral">> + <<option "hates anal" "Anal">> + <<option "hates penetration" "Penetration">> + <<option "repressed" "Repressed">> + <<option "shamefast" "Shamefast">> + <<option "apathetic" "Apathetic">> + <<option "crude" "Crude">> + <<option "judgemental" "Judgemental">> + <<option "idealistic" "Sexually idealistic">> +<</options>> <br> -<span id="finalize"> +<<options $activeSlave.sexualQuirk>> + ''Sexual Quirk:'' + <<if $activeSlave.sexualQuirk == "none">> + //$activeSlave.sexualQuirk.// + <<else>> + @@.green;$activeSlave.sexualQuirk.@@ + <</if>> + <<option "none" "None">> + <<option "gagfuck queen" "Oral">> + <<option "painal queen" "Anal">> + <<option "strugglefuck queen" "Penetration">> + <<option "perverted" "Perverted">> + <<option "tease" "Tease">> + <<option "caring" "Caring">> + <<option "unflinching" "Unflinching">> + <<option "size queen" "Size queen">> + <<option "romantic" "Romantic">> +<</options>> +<br> + <<StartingSlaveCost $activeSlave>> <<if $cash >= $slaveCost>> <<if $activeSlave.prestige>> @@ -1586,7 +1583,6 @@ Her nationality is $activeSlave.nationality. <</if>> <br> [[Discard this slave and continue|Acquisition]] -</span> <br><br>__Archetypes:__ //Convenient combinations of slave attributes// <br> @@ -1594,9 +1590,7 @@ Her nationality is $activeSlave.nationality. <<set $archetyped = 1, $activeSlave.nationality = "Irish", $fixedNationality = "Irish">> <<StartingGirlsWorkaround>> <<set $activeSlave.race = "white", $activeSlave.eyeColor = "green", $activeSlave.skin = "fair", $activeSlave.hColor = "red", $activeSlave.pubicHColor = "red", $activeSlave.markings = "heavily freckled">> - <<StartingGirlsRefresh>> - <<SaleDescription>> - <<StartingGirlsCost>> + <<goto "Starting Girls">> <</link>> //A beautiful flower from the Emerald Isle// <br> @@ -1604,27 +1598,21 @@ Her nationality is $activeSlave.nationality. <<set $archetyped = 1, $activeSlave.nationality = "American", $fixedNationality = "American">> <<StartingGirlsWorkaround>> <<set $activeSlave.eyeColor = "blue", $activeSlave.skin = "tanned", $activeSlave.hColor = "blonde", $activeSlave.pubicHColor = "blonde", $activeSlave.markings = "none", $activeSlave.face = 95, $activeSlave.muscles = 20, $activeSlave.weight = -20, $activeSlave.height = Math.round(Height.forAge(190, $activeSlave))>> - <<StartingGirlsRefresh>> - <<SaleDescription>> - <<StartingGirlsCost>> + <<goto "Starting Girls">> <</link>> //Tall, taut, and tan// <br> <<link "Novice">> <<StartingGirlsWorkaround>> <<set $activeSlave.analSkill = 0, $activeSlave.oralSkill = 0, $activeSlave.vaginalSkill = 0, $activeSlave.whoreSkill = 0, $activeSlave.entertainSkill = 0, $activeSlave.combatSkill = 0, $activeSlave.actualAge = 18, $activeSlave.visualAge = 18, $activeSlave.physicalAge = 18, $activeSlave.fetishKnown = 0, $activeSlave.attrKnown = 0>> - <<StartingGirlsRefresh>> - <<SaleDescription>> - <<StartingGirlsCost>> + <<goto "Starting Girls">> <</link>> //Train your own and save// <br> <<link "Head Girl Prospect">> <<StartingGirlsWorkaround>> <<set $activeSlave.career = setup.HGCareers.random(), $activeSlave.actualAge = Math.clamp(36, 44, $activeSlave.actualAge), $activeSlave.visualAge = $activeSlave.actualAge, $activeSlave.physicalAge = $activeSlave.actualAge, $activeSlave.intelligence = 70, $activeSlave.intelligenceImplant = 0>> - <<StartingGirlsRefresh>> - <<SaleDescription>> - <<StartingGirlsCost>> + <<goto "Starting Girls">> <</link>> //Inexpensive potential to become a great right hand woman// <<if $seeExtreme != 0>> @@ -1632,18 +1620,14 @@ Her nationality is $activeSlave.nationality. <<link "Wellspring">> <<StartingGirlsWorkaround>> <<set $activeSlave.analSkill = 0, $activeSlave.oralSkill = 0, $activeSlave.vaginalSkill = 0, $activeSlave.whoreSkill = 0, $activeSlave.entertainSkill = 0, $activeSlave.combatSkill = 0, $activeSlave.actualAge = 18, $activeSlave.visualAge = 18, $activeSlave.physicalAge = 18, $activeSlave.fetishKnown = 0, $activeSlave.attrKnown = 0, $activeSlave.health = 10, $activeSlave.intelligence = -100, $activeSlave.intelligenceImplant = 0, $activeSlave.vagina = 3, $activeSlave.anus = 3, $activeSlave.ovaries = 1, $activeSlave.dick = 5, $activeSlave.balls = 5, $activeSlave.prostate = 1, $activeSlave.lactation = 2, $activeSlave.lactationDuration = 2, $activeSlave.nipples = "huge", $activeSlave.boobs = 10000>> - <<StartingGirlsRefresh>> - <<SaleDescription>> - <<StartingGirlsCost>> + <<goto "Starting Girls">> <</link>> //Capable of producing all kinds of useful fluids// <br> <<link "Onahole">> <<StartingGirlsWorkaround>> <<set $activeSlave.analSkill = 0, $activeSlave.oralSkill = 0, $activeSlave.vaginalSkill = 0, $activeSlave.whoreSkill = 0, $activeSlave.entertainSkill = 0, $activeSlave.combatSkill = 0, $activeSlave.fetish = "mindbroken", $activeSlave.amp = 1, $activeSlave.voice = 0, $activeSlave.eyes = 1, $activeSlave.hears = 0>> - <<StartingGirlsRefresh>> - <<SaleDescription>> - <<StartingGirlsCost>> + <<goto "Starting Girls">> <</link>> //A living cocksleeve// <</if>> @@ -1657,7 +1641,7 @@ Her nationality is $activeSlave.nationality. <<link _nation>> <<set $fixedNationality = setup.baseNationalities[" + _sg + "]>> <<StartingGirlsWorkaround>> - <<StartingGirlsRefresh>> + <<goto 'Starting Girls'>> <<SaleDescription>> <</link>> ">> diff --git a/src/pregmod/managePersonalAffairs.tw b/src/pregmod/managePersonalAffairs.tw index a4cc60915798166036bf70587f53634c3e98e939..8464281464b78f8c73f5081eae0116044f530cea 100644 --- a/src/pregmod/managePersonalAffairs.tw +++ b/src/pregmod/managePersonalAffairs.tw @@ -554,7 +554,7 @@ In total, you have given birth to: <br><<print num($PC.birthCitizen)>> bab<<if $PC.birthCitizen > 1>>ies<<else>>y<</if>> from sex with arcology citizens. <</if>> <<if $PC.birthFutaSis > 0>> - <br><<print commaNum($PC.birthFutaSis)>> bab<<if $PC.birthFutaSis > 1>>ies<<else>>y<</if>> conceived during orgies with the Futanari Sisters. + <br><<print num($PC.birthFutaSis)>> bab<<if $PC.birthFutaSis > 1>>ies<<else>>y<</if>> conceived during orgies with the Futanari Sisters. <</if>> <<if $PC.birthOther > 0>> <br><<print num($PC.birthOther)>> bab<<if $PC.birthOther > 1>>ies<<else>>y<</if>> from sources you can't quite recall. diff --git a/src/pregmod/sePlayerBirth.tw b/src/pregmod/sePlayerBirth.tw index 80ff6678394e560e71b03c82b97195566fac5b38..f2fa9d2e02fbd60d55ffc1d7a938d0f52644a82a 100644 --- a/src/pregmod/sePlayerBirth.tw +++ b/src/pregmod/sePlayerBirth.tw @@ -633,6 +633,7 @@ You arrange yourself to give birth, relaxing until your body urges you to begin <<if $Cash4Babies == 1>> | <<link "Auction Them">><<replace "#choice">><<print "You send the child<<if _curBabies > 1>>ren<</if>> to be sold at auction amongst other prestigious slaves. The winning bid for your offspring came in at @@.yellowgreen;<<print cashFormat(1000*_seed*_curBabies)>>.@@">><</replace>><<run cashX((1000*_seed*_curBabies), "babyTransfer")>><</link>><</if>> <<if $PC.pregSource == -9>> | <<link "Futanari Sisters">><<replace "#choice">><<print "You have decided to gift them to the Futanari Sisters to be raised to join them. They are more than happy to cover all the expenses for the gift you gave them — especially after they gave you a gift in return.">><</replace>><</link>> + <</if>> </span> <</if>> diff --git a/src/pregmod/widgets/economyWidgets.tw b/src/pregmod/widgets/economyWidgets.tw index 356deba6caee9fc3e4d801c9a8fb697a164a1c7a..e46b75cca9f245de2ccb2aa45edb0b21c90d66fb 100644 --- a/src/pregmod/widgets/economyWidgets.tw +++ b/src/pregmod/widgets/economyWidgets.tw @@ -541,7 +541,7 @@ <<print cashFormat($corpCash)>> <</replace>> <<replace `'#'+$args[0]+'AssetsDisp'`>> - <<print cashFormat(State.variables[$args[0]+"AssetPrice"] * State.variables[$args[0]+"Assets"])>> (<<if Math.ceil(State.variables[$args[0]+"Assets"]/500) < 1>> < 1 <<else>><<print commaNum(Math.ceil(State.variables[$args[0]+"Assets"]/500))>> <</if>>unit<<if State.variables[$args[0]+"Assets"]/500 > 1>>s<</if>>) + <<print cashFormat(State.variables[$args[0]+"AssetPrice"] * State.variables[$args[0]+"Assets"])>> (<<if Math.ceil(State.variables[$args[0]+"Assets"]/500) < 1>> < 1 <<else>><<print num(Math.ceil(State.variables[$args[0]+"Assets"]/500))>> <</if>>unit<<if State.variables[$args[0]+"Assets"]/500 > 1>>s<</if>>) <</replace>> <<replace `'#'+'controls'+$args[0]`>><<CorpDevBuySell $args[0] $args[1]>><</replace>><<script>>setReplaceTextboxMaxLength(State.temporary["textboxMLArg"], 10);<</script>> /* Error if decimal or not "all" or "max" string */ @@ -564,7 +564,7 @@ <<print cashFormat($corpCash)>> <</replace>> <<replace `'#'+$args[0]+'AssetsDisp'`>> - <<print cashFormat(State.variables[$args[0]+"AssetPrice"] * State.variables[$args[0]+"Assets"])>> (<<if Math.ceil(State.variables[$args[0]+"Assets"]/500) < 1>> < 1 <<else>><<print commaNum(Math.ceil(State.variables[$args[0]+"Assets"]/500))>> <</if>>unit<<if State.variables[$args[0]+"Assets"]/500 > 1>>s<</if>>) + <<print cashFormat(State.variables[$args[0]+"AssetPrice"] * State.variables[$args[0]+"Assets"])>> (<<if Math.ceil(State.variables[$args[0]+"Assets"]/500) < 1>> < 1 <<else>><<print num(Math.ceil(State.variables[$args[0]+"Assets"]/500))>> <</if>>unit<<if State.variables[$args[0]+"Assets"]/500 > 1>>s<</if>>) <</replace>> <<replace `'#'+'controls'+$args[0]`>><<CorpDevBuySell $args[0] $args[1]>><</replace>><<script>>setReplaceTextboxMaxLength(State.temporary["textboxMLArg"], 10);<</script>> /* Successful sell */ @@ -575,7 +575,7 @@ <<print cashFormat($corpCash)>> <</replace>> <<replace `'#'+$args[0]+'AssetsDisp'`>> - <<print cashFormat(State.variables[$args[0]+"AssetPrice"] * State.variables[$args[0]+"Assets"])>> (<<if (State.variables[$args[0]+"Assets"]/500) < 1>> < 1 <<else>><<print commaNum(Math.ceil(State.variables[$args[0]+"Assets"]/500))>> <</if>>unit<<if State.variables[$args[0]+"Assets"]/500 > 1>>s<</if>>) + <<print cashFormat(State.variables[$args[0]+"AssetPrice"] * State.variables[$args[0]+"Assets"])>> (<<if (State.variables[$args[0]+"Assets"]/500) < 1>> < 1 <<else>><<print num(Math.ceil(State.variables[$args[0]+"Assets"]/500))>> <</if>>unit<<if State.variables[$args[0]+"Assets"]/500 > 1>>s<</if>>) <</replace>> <<replace `'#'+$args[0]+'AssetsPurchasing'`>><</replace>> /* Unsuccessful sell but have enough assets for more than 1 unit */ diff --git a/src/pregmod/widgets/pregmodWidgets.tw b/src/pregmod/widgets/pregmodWidgets.tw index 4ea78f894917a27eaa762c1a8b672b58e0b86f7c..3a39ee4183635337716cccc337219d603d8b30e4 100644 --- a/src/pregmod/widgets/pregmodWidgets.tw +++ b/src/pregmod/widgets/pregmodWidgets.tw @@ -1406,13 +1406,13 @@ extremely pale -5 || setup.whiteAmericanSlaveNames).random(); } generatePronouns(s); - if(s.geneMods === undefined) { + if(s.geneMods == undefined) { s.geneMods = {NCS: 0, rapidCellGrowth: 0}; } else { - if(s.geneMods.NCS === undefined) { + if(s.geneMods.NCS == undefined) { s.geneMods.NCS = 0; } - if(s.geneMods.rapidCellGrowth === undefined) { + if(s.geneMods.rapidCellGrowth == undefined) { s.geneMods.rapidCellGrowth = 0; } } diff --git a/src/pregmod/widgets/seBirthWidgets.tw b/src/pregmod/widgets/seBirthWidgets.tw index 5cce6a665885d0b215afc7f5e30f2aa31b712ea8..27544f126205122840ebeff5c6e43448bf991fd3 100644 --- a/src/pregmod/widgets/seBirthWidgets.tw +++ b/src/pregmod/widgets/seBirthWidgets.tw @@ -418,6 +418,8 @@ This decriptions can be expanded with more outcomes later. But it's not practica <<set _fathers.push("the Societal Elite")>> <<elseif $slaves[$i].curBabies[_seb].fatherID == -7>> <<set _fathers.push("your own design")>> + <<elseif $slaves[$i].curBabies[_seb].fatherID == -8>> + <<set _fathers.push("one of your animals")>> <<elseif $slaves[$i].curBabies[_cb].fatherID == -9>> <<set _fathers.push("a Futanari Sister")>> <<else>> diff --git a/src/uncategorized/BackwardsCompatibility.tw b/src/uncategorized/BackwardsCompatibility.tw index 7389d62645c0084ca176bd48d60f05cb95f7cc34..35e6d589d50ae2bb2ac66b42e9c8f10ae5107529 100644 --- a/src/uncategorized/BackwardsCompatibility.tw +++ b/src/uncategorized/BackwardsCompatibility.tw @@ -3557,8 +3557,19 @@ Done! <<set $abbreviateHormoneBalance = 2>> <</if>> -<<if $releaseID < 1036>> - <<set $releaseID = 1036>> +<<if $releaseID < 1043>> + <<for _rule range $defaultRules>> + <<if _rule.condition.excludeSpecialSlaves>> + <<set _rule.condition.specialSlaves = 0>> + <<else>> + <<set _rule.condition.specialSlaves = -1>> + <</if>> + <<run delete _rule.condition.excludeSpecialSlaves>> + <</for>> +<</if>> + +<<if $releaseID < 1043>> + <<set $releaseID = 1043>> <</if>> <<set $HackingSkillMultiplier = HackingSkillMultiplier()>> diff --git a/src/uncategorized/REFI.tw b/src/uncategorized/REFI.tw index a7bbbd7abc2f5225e40b1c2e4c197004847a670d..5aee891fca4dec70b24892b7da7cf4fcf215512f 100644 --- a/src/uncategorized/REFI.tw +++ b/src/uncategorized/REFI.tw @@ -474,6 +474,8 @@ It seems $he passed by while you were drinking from $subSlave.slaveName and foun <<st $subSlave.analCount++, $analTotal++>> <</if>> +<<SetNonLocalPronouns $seeDicks>> + /* 000-250-006 */ <<if $seeImages == 1>> <div class="imageRef medImg"> @@ -485,22 +487,7 @@ It seems $he passed by while you were drinking from $subSlave.slaveName and foun <</if>> /* 000-250-006 */ -$subSlave.slaveName is -<<if $subSlave.vagina > 0 || $subSlave.anus > 0>> - riding another slave, _his2 hands pinning her down -<<else>> - straddling another slave, _his2 - <<if $subSlave.dick > 0>> - cock in her mouth - <<else>> - <<if $subSlave.vagina > 0>> - pussy - <<else>> - ass - <</if>> - pressed to her face - <</if>> -<</if>>. The <<if $seeDicks > 0 && ($subSlave.vagina > 0 || $subSlave.anus > 0)>>slaveboy<<else>>slavegirl<</if>> had been disobedient, and her punishment was to let $subSlave.slaveName dominate her. The truth is this is also _his2 reward; _he2 is such a dominant that _he2's prone to lashing out at your other slaves if _he2 isn't given a proper outlet. Sure enough, _his2 moans begin to increase in pitch and frequency, reaching a crescendo as _he2 comes to an orgasm. Once you feel the poor <<if $seeDicks > 0 && ($subSlave.vagina > 0 || $subSlave.anus > 0)>>boy<<else>>girl<</if>> beneath _him2 has had enough, you give $subSlave.slaveName the order to dismount. _He2 leaves your office with a smile on _his2 face, passing <<EventNameLink $activeSlave>>, who is +$subSlave.slaveName is <<if $subSlave.vagina > 0 || $subSlave.anus > 0>>riding another slave, _his2 hands pinning _himU down<<else>>straddling another slave, _his2 <<if $subSlave.dick > 0>>cock in _hisU mouth<<else>><<if $subSlave.vagina > 0>>pussy<<else>>ass<</if>>pressed to _hisU face<</if>><</if>>. The slave_girlU had been disobedient, and _hisU punishment was to let $subSlave.slaveName dominate _himU. The truth is this is also _his2 reward; _he2 is such a dominant that _he2's prone to lashing out at your other slaves if _he2 isn't given a proper outlet. Sure enough, _his2 moans begin to increase in pitch and frequency, reaching a crescendo as _he2 comes to an orgasm. Once you feel the poor _girlU beneath _him2 has had enough, you give $subSlave.slaveName the order to dismount. _He2 leaves your office with a smile on _his2 face, passing <<EventNameLink $activeSlave>>, who is <<if $activeSlave.amp == 1>> propped limblessly nearby. $He has <<elseif !canWalk($activeSlave)>> diff --git a/src/uncategorized/RESS.tw b/src/uncategorized/RESS.tw index 43fc0b77538527a3443c4e1e6bb98aebfc71239a..801cf1b0b48dd65cef611db7748db792fc92eef3 100644 --- a/src/uncategorized/RESS.tw +++ b/src/uncategorized/RESS.tw @@ -8622,16 +8622,29 @@ You tell $him kindly that you understand, and that $he'll be trained to address <<case "devoted amp">> -<<if $activeSlave.belly < 1500 && canDoAnal($activeSlave)>> -<<link "Carry $him over to your work">> - <<EventNameDelink $activeSlave>> - <<replace "#result">> - Since you're so busy, you find a way of working and seeing to your sex toy both. You scoop $him up, eliciting whimpers of joy at the impending relief, <<if $PC.dick == 0>>and move over to the couch so you can work lying down. You sit $him on top of you, reversed so $his head is between your legs for a little oral service, and slide a dildo up $his butt so you can sodomize $him at leisure when you have a spare moment.<<else>>and sit back down at your desk. You slide $him onto your erect member and carefully secure $him with a few straps so $he can serve as your living cocksleeve as you see to your business.<</if>> There isn't much thrusting as you continue with your affairs, but $he's so horny $he doesn't need it. @@.hotpink;$He has become more submissive to you.@@ There's no telling what the day's faceless business interlocutors would think if they knew the person on the other side of their communications had <<if $PC.dick == 0>>a limbless slave gently sucking _hisP clit while they spoke with _himP<<else>>_hisP cock inside a limbless slave as _heP dealt with them<</if>>. - <<set $activeSlave.devotion += 4, $activeSlave.analCount++, $analTotal++>> - <</replace>> -<</link>> +<<if $activeSlave.belly < 1500 && (canDoAnal($activeSlave) || canDoVaginal($activeSlave))>> + <<link "Carry $him over to your work">> + <<EventNameDelink $activeSlave>> + <<replace "#result">> + Since you're so busy, you find a way of working and seeing to your sex toy both. You scoop $him up, eliciting whimpers of joy at the impending relief, + <<if $PC.dick == 0>> + and move over to the couch so you can work lying down. You sit $him on top of you, reversed so $his head is between your legs for a little oral service, and slide a dildo + <<if canDoVaginal($activeSlave)>> + into $his pussy so you can tease $him at leisure when you have a spare moment. + <<= VaginalVCheck()>> + <<else>> + up $his butt so you can sodomize $him at leisure when you have a spare moment. + <<= AnalVCheck()>> + <</if>> + <<else>> + and sit back down at your desk. You slide $him onto your erect member and carefully secure $him with a few straps so $he can serve as your living cocksleeve as you see to your business. + <</if>> + There isn't much thrusting as you continue with your affairs, but $he's so horny $he doesn't need it. @@.hotpink;$He has become more submissive to you.@@ There's no telling what the day's faceless business interlocutors would think if they knew the person on the other side of their communications had <<if $PC.dick == 0>>a limbless slave gently sucking _hisP clit while they spoke with _himP<<else>>_hisP cock inside a limbless slave as _heP dealt with them<</if>>. + <<set $activeSlave.devotion += 4>> + <</replace>> + <</link>><<if canDoVaginal($activeSlave) && ($activeSlave.vagina == 0)>> //This option will take virginity//<<elseif !canDoVaginal($activeSlave) && ($activeSlave.anus == 0)>> //This option will take anal virginity//<</if>> <</if>> -<<if ($PC.dick == 1) && (canDoAnal($activeSlave) || (canDoVaginal($activeSlave) && $activeSlave.vagina > 0)) && $PC.belly < 100>> +<<if ($PC.dick == 1) && (canDoAnal($activeSlave) || canDoVaginal($activeSlave)) && $PC.belly < 100>> <br><<link "Carry $him outside">> <<EventNameDelink $activeSlave>> <<replace "#result">> @@ -8650,9 +8663,8 @@ You tell $him kindly that you understand, and that $he'll be trained to address <<= AnalVCheck()>> <</if>> <</replace>> -<</link>> +<</link>><<if canDoVaginal($activeSlave) && ($activeSlave.vagina == 0)>> //This option will take virginity//<<elseif !canDoVaginal($activeSlave) && ($activeSlave.anus == 0)>> //This option will take anal virginity//<</if>> <</if>> -<<if (canDoAnal($activeSlave) || (canDoVaginal($activeSlave) && $activeSlave.vagina > 0))>> <br><<link "See how high $his arousal will go">> <<EventNameDelink $activeSlave>> <<replace "#result">> @@ -8660,15 +8672,30 @@ You tell $him kindly that you understand, and that $he'll be trained to address <<if canDoVaginal($activeSlave) && $activeSlave.vagina > 0>> After so much of this that $he's clearly ready to orgasm at the slightest further touch, you gently massage $his nether lips with a single finger and $he comes spastically, abdominal muscles quivering. $His pussy relaxes and opens naturally; taking the cue, you pick $him up and lower $him, <<if $showInches == 2>>inch<<else>>centimeter<</if>> by moaning <<if $showInches == 2>>inch<<else>>centimeter<</if>>, onto <<if $PC.dick == 0>>a strap-on you put on while playing with $his<<else>>your cock<</if>>. <<= VaginalVCheck()>> - <<else>> + After pumping $his helpless torso up and down with your arms, a parody of masturbation with $his helpless body, + <<elseif canDoAnal($activeSlave) && $activeSlave.anus > 0>> After so much of this that $he's clearly ready to orgasm at the slightest further touch, you gently massage $his anus with a single finger and $he comes spastically, abdominal muscles quivering. $His sphincter relaxes and opens naturally; taking the cue, you pick $him up and lower $his rectum, <<if $showInches == 2>>inch<<else>>centimeter<</if>> by sobbing <<if $showInches == 2>>inch<<else>>centimeter<</if>>, onto <<if $PC.dick == 0>>a strap-on you put on while playing with $his<<else>>your cock<</if>>. <<= AnalVCheck()>> + After pumping $his helpless torso up and down with your arms, a parody of masturbation with $his helpless body, + <<else>> + After so much of this that $he's clearly ready to orgasm at the slightest further touch, you grab $his + <<if $activeSlave.boobs > 8000>> + massive tits + <<elseif Math.floor($activeSlave.boobsImplant/$activeSlave.boobs) >= .60>> + fake tits + <<elseif $activeSlave.boobs > 2000>> + huge boobs + <<elseif $activeSlave.boobs > 400>> + boobs + <<else>> + petite chest + <</if>> + and $he comes spastically, soaking $himself and your desk with fluids. Once you tire of vigorously groping $him, <</if>> - After pumping $his helpless torso up and down with your arms, a parody of masturbation with $his helpless body, you carry your toy to the shower to wash $him. @@.mediumaquamarine;$He has become more trusting of you.@@ + you carry your toy to the shower to wash $him. @@.mediumaquamarine;$He has become more trusting of you.@@ <<set $activeSlave.trust += 4>> <</replace>> <</link>> -<</if>> <<case "plug disobedience">> diff --git a/src/uncategorized/descriptionOptions.tw b/src/uncategorized/descriptionOptions.tw index c1637508017f2dca91b79c86aaab992819550bbe..681831c400791a20c40d6ad00e7409bf1443d7c9 100644 --- a/src/uncategorized/descriptionOptions.tw +++ b/src/uncategorized/descriptionOptions.tw @@ -7,7 +7,7 @@ <br><br> <<if $showSexualHistory == 1>> - Sexual histories are @@.green;SHOWN.@@ //[[Hide|Description Options][$showSexualHistory = 0]]// + Sexual histories are @@.cyan;SHOWN.@@ //[[Hide|Description Options][$showSexualHistory = 0]]// <<else>> Sexual histories are @@.red;HIDDEN.@@ //[[Show|Description Options][$showSexualHistory = 1]]// <</if>> @@ -15,7 +15,7 @@ <br> <<if $showBodyMods == 1>> - Cosmetic body mods are @@.green;SHOWN.@@ //[[Hide|Description Options][$showBodyMods = 0]]// + Cosmetic body mods are @@.cyan;SHOWN.@@ //[[Hide|Description Options][$showBodyMods = 0]]// <<else>> Cosmetic body mods are @@.red;HIDDEN.@@ //[[Show|Description Options][$showBodyMods = 1]]// <</if>> @@ -23,7 +23,7 @@ <br> <<if $showImplantEffects == 1>> - The effects of implants are @@.green;SHOWN.@@ //[[Hide|Description Options][$showImplantEffects = 0]]// + The effects of implants are @@.cyan;SHOWN.@@ //[[Hide|Description Options][$showImplantEffects = 0]]// <<else>> The effects of implants are @@.red;HIDDEN.@@ //[[Show|Description Options][$showImplantEffects = 1]]// <</if>> @@ -31,7 +31,7 @@ <br> <<if $showClothing == 1>> - Clothing is mostly @@.green;SHOWN.@@ //[[Hide|Description Options][$showClothing = 0]]// + Clothing is mostly @@.cyan;SHOWN.@@ //[[Hide|Description Options][$showClothing = 0]]// <<else>> Clothing is mostly @@.red;HIDDEN.@@ //[[Show|Description Options][$showClothing = 1]]// <</if>> @@ -40,7 +40,7 @@ Detailed slave age information is <<if $showAgeDetail == 1>> - @@.green;SHOWN.@@ //[[Hide|Description Options][$showAgeDetail = 0]]// + @@.cyan;SHOWN.@@ //[[Hide|Description Options][$showAgeDetail = 0]]// <<else>> @@.red;HIDDEN.@@ //[[Show|Description Options][$showAgeDetail = 1]]// <</if>> @@ -49,7 +49,7 @@ Detailed slave age information is Approximate height is <<if $showHeightCMs == 1>> - @@.green;SHOWN.@@ //[[Hide|Description Options][$showHeightCMs = 0]]// + @@.cyan;SHOWN.@@ //[[Hide|Description Options][$showHeightCMs = 0]]// <<else>> @@.red;HIDDEN.@@ //[[Show|Description Options][$showHeightCMs = 1]]// <</if>> @@ -58,7 +58,7 @@ Approximate height is Volume, in CCs, of breasts is <<if $showBoobCCs == 1>> - @@.green;SHOWN.@@ //[[Hide|Description Options][$showBoobCCs = 0]]// + @@.cyan;SHOWN.@@ //[[Hide|Description Options][$showBoobCCs = 0]]// <<else>> @@.red;HIDDEN.@@ //[[Show|Description Options][$showBoobCCs = 1]]// <</if>> @@ -67,7 +67,7 @@ Volume, in CCs, of breasts is <br> Approximate sizes of dicks and balls are <<if $showDickCMs == 1>> - @@.green;SHOWN.@@ //[[Hide|Description Options][$showDickCMs = 0]]// + @@.cyan;SHOWN.@@ //[[Hide|Description Options][$showDickCMs = 0]]// <<else>> @@.red;HIDDEN.@@ //[[Show|Description Options][$showDickCMs = 1]]// <</if>> @@ -77,7 +77,7 @@ Volume, in CCs, of breasts is Height and length units are in <<if $showInches == 1>> - @@.green;BOTH UNITS.@@ //[[Centimeters|Description Options][$showInches = 0]]// | //[[Inches|Description Options][$showInches = 2]]// + @@.cyan;BOTH UNITS.@@ //[[Centimeters|Description Options][$showInches = 0]]// | //[[Inches|Description Options][$showInches = 2]]// <<elseif $showInches == 2>> @@.yellow;INCHES ONLY.@@ //[[Centimeters|Description Options][$showInches = 0]]// | //[[Both|Description Options][$showInches = 1]]// <<else>> @@ -86,7 +86,7 @@ Height and length units are in <br> -<<if $showNumbers == 1>>Only numbers @@.green;UP TO $showNumbersMax@@<<else>>Numbers<</if>> are displayed as +<<if $showNumbers == 1>>Only numbers @@.cyan;UP TO $showNumbersMax@@<<else>>Numbers<</if>> are displayed as <<if $showNumbers == 1>> words.<br> <<textbox "$showNumbersMax" $showNumbersMax>> //[[Words|Description Options][$showNumbers = 0]]// | //[[Integers|Description Options][$showNumbers = 2]]// @@ -100,7 +100,7 @@ Height and length units are in Attractiveness and Sexual scores are <<if $showScores == 1>> - @@.green;SHOWN.@@ //[[Hide|Description Options][$showScores = 0]]// + @@.cyan;SHOWN.@@ //[[Hide|Description Options][$showScores = 0]]// <<else>> @@.red;HIDDEN.@@ //[[Show|Description Options][$showScores = 1]]// <</if>> diff --git a/src/uncategorized/neighborsDevelopment.tw b/src/uncategorized/neighborsDevelopment.tw index 184cc19a78f182e4ee50e3dcffe9db30516910a7..41fac2215a717ff916549b01b16e07827355662d 100644 --- a/src/uncategorized/neighborsDevelopment.tw +++ b/src/uncategorized/neighborsDevelopment.tw @@ -74,7 +74,8 @@ <<set _error = 10>> <</if>> <<set _error -= 2*$assistantPower>> -has an estimated GSP of @@.yellowgreen;<<print cashFormat(Math.trunc((0.1*$arcologies[$i].prosperity*random(100-_error,100+_error))/100))>>m,@@ +<<set _prosperity = (Math.trunc((0.1*$arcologies[$i].prosperity*random(100-_error,100+_error))/100))>> +has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $showNumbers != 2>><<if ($showNumbers == 1) && (_prosperity > $showNumbersMax)>>m<<else>> million<</if>><<else>>m<</if>>,@@ <<if ($arcologies[$i].rival == 1) && ($arcologies[$i].government != "an individual")>> but it is undergoing some internal turmoil. @@.red;Resentment that has been quietly building among the arcology's elite turns into open rebellion!@@ diff --git a/src/uncategorized/remoteSurgery.tw b/src/uncategorized/remoteSurgery.tw index 7e603835792b90889c23bb7fce270f71c558f738..1bce093e79a7a3ec59872e081b766590fdb006a6 100644 --- a/src/uncategorized/remoteSurgery.tw +++ b/src/uncategorized/remoteSurgery.tw @@ -694,13 +694,13 @@ $He has <<if ($activeSlave.areolae > 0) && ($activeSlave.areolaeShape == "circle")>> They are big enough that they could be reshaped into a pattern. Graft skin to make $his areolae: [[Heart-shaped|Surgery Degradation][$activeSlave.areolaeShape = "heart",$activeSlave.areolae -= 1,cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave), $activeSlave.health -= 10,$surgeryType = "areolae"]] - | [[Star-shaped|Surgery Degradation][$activeSlave.areolaeShape = "star",$activeSlave.areolae -= 1,cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave), $activeSlave.health -= 10,$surgeryType = "areolae"]] | + | [[Star-shaped|Surgery Degradation][$activeSlave.areolaeShape = "star",$activeSlave.areolae -= 1,cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave), $activeSlave.health -= 10,$surgeryType = "areolae"]] <</if>> <<if $activeSlave.areolae > 0>> | [[Reduce areolae|Surgery Degradation][$activeSlave.areolae -= 1,cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave), $activeSlave.health -= 10,$surgeryType = "areolae"]] <</if>> <<if $activeSlave.areolae < 4>> - [[Enlarge areolae|Surgery Degradation][$activeSlave.areolae += 1,cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave), $activeSlave.health -= 10,$surgeryType = "areolae"]] + | [[Enlarge areolae|Surgery Degradation][$activeSlave.areolae += 1,cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave), $activeSlave.health -= 10,$surgeryType = "areolae"]] <</if>> <</if>> diff --git a/src/uncategorized/saLongTermEffects.tw b/src/uncategorized/saLongTermEffects.tw index fc63525ccbaca1f44d362fdcb39c150ed7ad7671..cda7a5933f45215b45f65f9d7da6b85d820b3aab 100644 --- a/src/uncategorized/saLongTermEffects.tw +++ b/src/uncategorized/saLongTermEffects.tw @@ -4174,7 +4174,7 @@ <</if>> <</if>> <</if>> - <<if $slaves[$i].pregSource != 0>> + <<if $slaves[$i].pregSource != 0 && $slaves[$i].eggType == "human">> A quick scan after a bout of morning nausea reveals that @@.lime;$he has become pregnant.@@ <<set $slaves[$i].preg = 1, $slaves[$i].pregWeek = 1, $slaves[$i].pregKnown = 1>><<set $slaves[$i].pregType = setPregType($slaves[$i])>> <<set WombImpregnate($slaves[$i], $slaves[$i].pregType, $slaves[$i].pregSource, 1)>> diff --git a/src/utility/slaveCreationWidgets.tw b/src/utility/slaveCreationWidgets.tw index fc445c9fda38d31ac0608564f74dee09da139bbc..842216fbb6350a87a0504d5cf07261d9fd1b9b90 100644 --- a/src/utility/slaveCreationWidgets.tw +++ b/src/utility/slaveCreationWidgets.tw @@ -31,653 +31,6 @@ <<set $activeSlave.boobs = Math.clamp(Math.trunc($activeSlave.boobs/50)*50, 0, 50000) || 200>> <</widget>> -/% - Call as <<StartingGirlsRefresh>> -%/ -<<widget "StartingGirlsRefresh">> - - <<replace "#devotion">> - @@.yellow;Ambivalent.@@ - <</replace>> - - <<replace "#trust">> - @@.yellow;Fearful.@@ - <</replace>> - - <<replace "#legal">> - Slave. - <</replace>> - - <<replace "#voice">> - <<if $activeSlave.voice == 0>>Mute. - <<elseif $activeSlave.voice == 1>>Deep. - <<elseif $activeSlave.voice == 2>>Normal. - <<elseif $activeSlave.voice == 3>>High. - <</if>> - <</replace>> - - <<replace "#language">> - ''$language:'' - <<if $activeSlave.voice == 0>> - <<elseif $activeSlave.accent == 0>>Unaccented. - <<elseif $activeSlave.accent == 1>>Pretty <<if $activeSlave.nationality == "a Cook Islander">>Cook Islander<<elseif $activeSlave.nationality == "a Liechtensteiner">>Liechtensteiner<<elseif $activeSlave.nationality == "a New Zealander">>New Zealander<<elseif $activeSlave.nationality == "a Solomon Islander">>Solomon Islander<<else>>$activeSlave.nationality<</if>> accent. - <<elseif $activeSlave.accent == 2>>Thick <<if $activeSlave.nationality == "a Cook Islander">>Cook Islander<<elseif $activeSlave.nationality == "a Liechtensteiner">>Liechtensteiner<<elseif $activeSlave.nationality == "a New Zealander">>New Zealander<<elseif $activeSlave.nationality == "a Solomon Islander">>Solomon Islander<<else>>$activeSlave.nationality<</if>> accent. - <<else>>Not fluent. - <</if>> - <</replace>> - - <<replace "#age">> - <<textbox "$activeSlave.actualAge" $activeSlave.actualAge "Starting Girls">> - <</replace>> - - <<replace "#health">> - @@.yellow;Healthy.@@ - <</replace>> - - <<replace "#originalSex">> - $activeSlave.genes. - <</replace>> - - <<replace "#muscles">> - Normal. - <</replace>> - - <<replace "#waist">> - Normal. - <</replace>> - - <<if $seeExtreme == 1>> - <<replace "#amp">> - <<if $activeSlave.amp == 1>>Amputee. - <<else>>Normal. - <</if>> - <</replace>> - <</if>> - - <<replace "#height">> - <<if $activeSlave.height < 150>>Petite. - <<elseif $activeSlave.height < 160>>Short. - <<elseif $activeSlave.height < 170>>Average. - <<elseif $activeSlave.height < 185>>Tall. - <<else>>Very tall. - <</if>> - <<textbox "$activeSlave.height" $activeSlave.height "Starting Girls">> <<= heightToEitherUnit($activeSlave.height)>> - <</replace>> - - <<replace "#weight">> - <<if $activeSlave.weight < -95>>@@.red;Emaciated.@@ - <<elseif $activeSlave.weight < -30>>@@.red;Skinny.@@ - <<elseif $activeSlave.weight < -10>>Thin. - <<elseif $activeSlave.weight <= 10>>Average. - <<elseif $activeSlave.weight <= 30>>Plush. - <<elseif $activeSlave.weight <= 95>>@@.red;Chubby.@@ - <<elseif $activeSlave.weight <= 130>>@@.red;Fat.@@ - <<elseif $activeSlave.weight <= 160>>@@.red;Obese.@@ - <<elseif $activeSlave.weight <= 190>>@@.red;Super obese.@@ - <<else>>@@.red;Dangerously obese.@@ - <</if>> - <</replace>> - - <<if $seeRace == 1>> - <<replace "#ethnicity">> - <<textbox "$activeSlave.race" $activeSlave.race "Starting Girls">> - <</replace>> - <</if>> - - <<replace "#skin">> - <<textbox "$activeSlave.skin" $activeSlave.skin "Starting Girls">> - <</replace>> - - <<replace "#faceShape">> - $activeSlave.faceShape - <</replace>> - - <<replace "#face">> - <<if $activeSlave.face < -95>>Very ugly. - <<elseif $activeSlave.face < -40>>Ugly. - <<elseif $activeSlave.face < -10>>Unattractive. - <<elseif $activeSlave.face <= 10>>Average. - <<elseif $activeSlave.face <= 40>>Attractive. - <<elseif $activeSlave.face <= 95>>Beautiful. - <<else>>Very beautiful. - <</if>> - <</replace>> - - <<replace "#lips">> - <<if $activeSlave.lips <= 10>>Thin. - <<elseif $activeSlave.lips <= 20>>Normal. - <<elseif $activeSlave.lips <= 40>>Pretty. - <<elseif $activeSlave.lips <= 70>>Plush. - <<elseif $activeSlave.lips <= 95>>Huge. - <<else>>Facepussy. - <</if>> - <</replace>> - - <<replace "#teeth">> - <<if $activeSlave.teeth == "crooked">>Crooked. - <<elseif $activeSlave.teeth == "gapped">>Gapped. - <<elseif $activeSlave.teeth == "straightening braces">>Braces. - <<elseif $activeSlave.teeth == "baby">>Baby. - <<elseif $activeSlave.teeth == "mixed">>Mixed. - <<else>>Straight. - <</if>> - <</replace>> - - <<replace "#vision">> - <<if $seeExtreme == 1>> - <<if $activeSlave.eyes == -2>>Blind. - <<elseif $activeSlave.eyes == -1>>Nearsighted. - <<else>>Normal. - <</if>> - <<else>> - <<if $activeSlave.eyes == -1>>Nearsighted. - <<else>>Normal. - <</if>> - <</if>> - <</replace>> - - <<replace "#hearing">> - <<if $seeExtreme == 1>> - <<if $activeSlave.hears == -2>>Deaf. - <<elseif $activeSlave.hears == -1>>Hard of hearing. - <<else>>Normal. - <</if>> - <<else>> - <<if $activeSlave.hears == -1>>Hard of hearing. - <<else>>Normal. - <</if>> - <</if>> - <</replace>> - - <<replace "#boobs">> - <<if $activeSlave.boobs <= 200>>Flat. - <<elseif $activeSlave.boobs <= 500>>Healthy. - <<elseif $activeSlave.boobs <= 800>>Large. - <<elseif $activeSlave.boobs <= 1200>>Very Large. - <<elseif $activeSlave.boobs <= 2000>>Huge. - <<elseif $activeSlave.boobs <= 4000>>Massive. - <<elseif $activeSlave.boobs <= 6000>>Monstrous. - <<else>>Science experiment. - <</if>> - <<textbox "$activeSlave.boobs" $activeSlave.boobs "Starting Girls">> CCs - <</replace>> - - <<replace "#lactation">> - <<if $activeSlave.lactation == 2>>Artificial. - <<elseif $activeSlave.lactation == 1>>Natural. - <<else>>None. - <</if>> - <</replace>> - - <<replace "#nipples">> - $activeSlave.nipples - <</replace>> - - <<replace "#areolae">> - <<if $activeSlave.areolae == 1>> - Large. - <<elseif $activeSlave.areolae == 2>> - Wide. - <<elseif $activeSlave.areolae == 3>> - Huge. - <<elseif $activeSlave.areolae == 4>> - Massive. - <<else>> - Normal. - <</if>> - <</replace>> - - <<replace "#shoulders">> - <<if $activeSlave.shoulders < -1>>Very narrow. - <<elseif $activeSlave.shoulders < 0>>Narrow. - <<elseif $activeSlave.shoulders > 1>>Very broad. - <<elseif $activeSlave.shoulders > 0>>Broad. - <<else>>Feminine. - <</if>> - <</replace>> - - <<replace "#hips">> - <<if $activeSlave.hips < -1>>Very narrow. - <<elseif $activeSlave.hips < 0>>Narrow. - <<elseif $activeSlave.hips > 1>>Very broad. - <<elseif $activeSlave.hips > 0>>Broad. - <<else>>Normal. - <</if>> - <</replace>> - - <<replace "#butt">> - <<if $activeSlave.butt == 0>>Flat. - <<elseif $activeSlave.butt < 2>>Small. - <<elseif $activeSlave.butt < 3>>Plump. - <<elseif $activeSlave.butt < 4>>Big. - <<elseif $activeSlave.butt < 5>>Huge. - <<elseif $activeSlave.butt < 6>>Enormous. - <<elseif $activeSlave.butt < 7>>Gigantic. - <<else>>Massive. - <</if>> - <</replace>> - - <<replace "#anus">> - <<if $activeSlave.anus == 0>>@@.lime;Virgin.@@ - <<elseif $activeSlave.anus == 1>>Normal. - <<elseif $activeSlave.anus == 2>>Veteran. - <<else>>Gaping. - <</if>> - <</replace>> - - <<replace "#vagina">> - <<if $activeSlave.vagina == -1>>//No vagina.// - <<elseif $activeSlave.vagina == 0>>@@.lime;Virgin.@@ - <<elseif $activeSlave.vagina == 1>>Normal. - <<elseif $activeSlave.vagina == 2>>Veteran. - <<else>>Gaping. - <</if>> - <</replace>> - - <<replace "#vaginablock">> - <<if $activeSlave.vagina > -1>> - <br> - - ''Clit:'' - <span id="clit"> - <<if $activeSlave.clit == 0>>Normal. - <<elseif $activeSlave.clit == 1>>Large. - <<else>>Huge. - <</if>> - </span> - <<link "Normal">> - <<set $activeSlave.clit = 0>> - <<replace #clit>> - Normal. - <</replace>> - <</link>> - | - <<link "Large">> - <<set $activeSlave.clit = 1>> - <<replace #clit>> - Large. - <</replace>> - <</link>> - | - <<link "Huge">> - <<set $activeSlave.clit = 2>> - <<replace #clit>> - Huge. - <</replace>> - <</link>> - <</if>> - <br> - - ''Labia:'' - <span id="labia"> - <<if $activeSlave.labia == 2>>Huge. - <<elseif $activeSlave.labia == 1>>Large. - <<else>>Normal. - <</if>> - </span> - <<link "Normal">> - <<set $activeSlave.labia = 0>> - <<replace #labia>> - Normal. - <</replace>> - <</link>> - | - <<link "Large">> - <<set $activeSlave.labia = 1>> - <<replace #labia>> - Large. - <</replace>> - <</link>> - | - <<link "Huge">> - <<set $activeSlave.labia = 2>> - <<replace #labia>> - Huge. - <</replace>> - <</link>> - - <br> - - ''Vaginal wetness:'' - <span id="wetness"> - <<if $activeSlave.vaginaLube == 0>>Dry. - <<elseif $activeSlave.vaginaLube == 1>>Normal. - <<else>>Excessive. - <</if>> - </span> - <<link "Dry">><<set $activeSlave.vaginaLube = 0>><<replace "#wetness">>Dry.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Normal">><<set $activeSlave.vaginaLube = 1>><<replace "#wetness">>Normal.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Excessive">><<set $activeSlave.vaginaLube = 2>><<replace "#wetness">>Excessive.<</replace>><<StartingGirlsCost>><</link>> - - <br> - - ''Pregnancy:'' - <span id="preg"> - <<if $activeSlave.preg > 39>>Ready to drop. - <<elseif $activeSlave.preg > 30>>Advanced. - <<elseif $activeSlave.preg > 20>>Showing. - <<elseif $activeSlave.preg > 10>>Early. - <<elseif $activeSlave.preg > -2>>None. - <<else>>Barren. - <</if>> - </span> - <<link "Ready to Drop">><<set $activeSlave.preg = 40,$activeSlave.pregType = 1,$activeSlave.pregWeek = 40,$activeSlave.pregKnown = 1,$activeSlave.belly = 15000,$activeSlave.bellyPreg = 15000,$activeSlave.pubertyXX = 1>><<replace "#preg">>Ready to drop.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Advanced">><<set $activeSlave.preg = 34,$activeSlave.pregType = 1,$activeSlave.pregWeek = 34,$activeSlave.pregKnown = 1,$activeSlave.belly = 10000,$activeSlave.bellyPreg = 10000,$activeSlave.pubertyXX = 1>><<replace "#preg">>Advanced.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Showing">><<set $activeSlave.preg = 27,$activeSlave.pregType = 1,$activeSlave.pregWeek = 27,$activeSlave.pregKnown = 1,$activeSlave.belly = 5000,$activeSlave.bellyPreg = 5000,$activeSlave.pubertyXX = 1>><<replace "#preg">>Showing.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Early">><<set $activeSlave.preg = 12,$activeSlave.pregType = 1,$activeSlave.pregWeek = 12,$activeSlave.pregKnown = 1,$activeSlave.belly = 100,$activeSlave.bellyPreg = 100,$activeSlave.pubertyXX = 1>><<replace "#preg">>Early.<</replace>><<StartingGirlsCost>><</link>> | - <<link "None">><<set $activeSlave.preg = 0,$activeSlave.pregType = 0,$activeSlave.belly = 0,$activeSlave.bellyPreg = 0,$activeSlave.pregSource = 0,$activeSlave.pregWeek = 0,$activeSlave.pregKnown = 0>><<run WombFlush($activeSlave)>><<replace "#preg">>None.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Barren">><<set $activeSlave.preg = -2,$activeSlave.pregType = 0,$activeSlave.belly = 0,$activeSlave.bellyPreg = 0,$activeSlave.pregSource = 0,$activeSlave.pregWeek = 0,$activeSlave.pregKnown = 0>><<run WombFlush($activeSlave)>><<replace "#preg">>Barren.<</replace>><<StartingGirlsCost>><</link>> - <br>''Puberty:'' - <span id="pub"> - <<if $activeSlave.pubertyXX == 1>>Postpubescent. - <<else>>Prepubescent. - <</if>> - </span> - <<textbox "$activeSlave.pubertyAgeXX" $activeSlave.pubertyAgeXX "Starting Girls">> - <<link "Postpubescent">><<set $activeSlave.pubertyXX = 1>><<replace "#pub">>Postpubescent.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Prepubescent">><<set $activeSlave.pubertyXX = 0,$activeSlave.pubertyAgeXX = $fertilityAge,$activeSlave.preg = 0,$activeSlave.pregType = 0,$activeSlave.belly = 0,$activeSlave.bellyPreg = 0,$activeSlave.pregSource = 0,$activeSlave.pregWeek = 0,$activeSlave.pregKnown = 0>><<run WombFlush($activeSlave)>><<replace "#pub">>Prepubescent.<</replace>><<StartingGirlsCost>><</link>> - <<if $PC.dick == 1>> - <br> ''Father:'' - <span id="father"> - <<if $activeSlave.pregSource == -1>>My child. - <<else>> - <</if>> - </span> - <<link "Carrying my child">><<set $activeSlave.pregSource = -1>><<replace "#father">>My child.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Clear">><<set $activeSlave.pregSource = 0>><<replace "#father">><</replace>><<StartingGirlsCost>><</link>> - <</if>> - <</replace>> - - <<replace "#dickblock">> - <<if $seeDicks != 0 || $makeDicks == 1>> - <br>''Penis:'' - <span id="dick"> - <<if $activeSlave.dick == 0>>None. - <<elseif $activeSlave.dick == 1>>Tiny. - <<elseif $activeSlave.dick == 2>>Small. - <<elseif $activeSlave.dick == 3>>Normal. - <<elseif $activeSlave.dick == 4>>Large. - <<else>>Massive.<</if>> - </span> - <<link "No penis">><<set $activeSlave.dick = 0,$activeSlave.balls = 0,$activeSlave.clit = 0,$activeSlave.pubertyXY = 0,$activeSlave.pubertyAgeXY = $potencyAge>><<replace "#dick">>None.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Tiny">><<set $activeSlave.dick = 1,$activeSlave.clit = 0>><<replace "#dick">>Tiny.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Small">><<set $activeSlave.dick = 2,$activeSlave.clit = 0>><<replace "#dick">>Small.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Normal">><<set $activeSlave.dick = 3,$activeSlave.clit = 0>><<replace "#dick">>Normal.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Large">><<set $activeSlave.dick = 4,$activeSlave.clit = 0>><<replace "#dick">>Large.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Massive">><<set $activeSlave.dick = 5,$activeSlave.clit = 0>><<replace "#dick">>Massive.<</replace>><<StartingGirlsCost>><</link>> - <<if $activeSlave.dick > 0>> - ''Foreskin:'' - <span id="foreskin"> - <<if $activeSlave.foreskin == 0>>None. - <<elseif $activeSlave.foreskin == 1>>Tiny. - <<elseif $activeSlave.foreskin == 2>>Small. - <<elseif $activeSlave.foreskin == 3>>Normal. - <<elseif $activeSlave.foreskin == 4>>Large. - <<else>>Massive.<</if>> - </span> - <<if $seeCircumcision == 1>><<link "Circumcised">><<set $activeSlave.foreskin = 0>><<replace "#foreskin">>None.<</replace>><<StartingGirlsCost>><</link>> |<</if>> - <<link "Tiny">><<set $activeSlave.foreskin = 1>><<replace "#foreskin">>Tiny.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Small">><<set $activeSlave.foreskin = 2>><<replace "#foreskin">>Small.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Normal">><<set $activeSlave.foreskin = 3>><<replace "#foreskin">>Normal.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Large">><<set $activeSlave.foreskin = 4>><<replace "#foreskin">>Large.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Massive">><<set $activeSlave.foreskin = 5>><<replace "#foreskin">>Massive.<</replace>><<StartingGirlsCost>><</link>> - <</if>> - <br>''Testicles:'' - <span id="balls"> - <<if $activeSlave.balls == 0>>None. - <<elseif $activeSlave.balls == 1>>Vestigial. - <<elseif $activeSlave.balls == 2>>Small. - <<elseif $activeSlave.balls == 3>>Normal. - <<elseif $activeSlave.balls == 4>>Large. - <<else>>Massive.<</if>> - </span> - <<link "No testicles">><<set $activeSlave.balls = 0,$activeSlave.pubertyXY = 0,$activeSlave.pubertyAgeXY = $potencyAge>><<replace "#balls">>None.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Vestigial">><<set $activeSlave.balls = 1>><<replace "#balls">>Vestigial.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Small">><<set $activeSlave.balls = 2>><<replace "#balls">>Small.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Normal">><<set $activeSlave.balls = 3>><<replace "#balls">>Normal.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Large">><<set $activeSlave.balls = 4>><<replace "#balls">>Large.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Massive">><<set $activeSlave.balls = 5>><<replace "#balls">>Massive.<</replace>><<StartingGirlsCost>><</link>> - ''Puberty:''<<textbox "$activeSlave.pubertyAgeXY" $activeSlave.pubertyAgeXY "Starting Girls">> - <<if $activeSlave.balls > 0>> - ''Ballsack:'' - <span id="scrotum"> - <<if $activeSlave.scrotum == 0>>None. - <<elseif $activeSlave.scrotum == 1>>Tiny. - <<elseif $activeSlave.scrotum == 2>>Small. - <<elseif $activeSlave.scrotum == 3>>Normal. - <<elseif $activeSlave.scrotum == 4>>Large. - <<else>>Massive.<</if>> - </span> - <<link "None">><<set $activeSlave.scrotum = 0>><<replace "#scrotum">>None.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Tiny">><<set $activeSlave.scrotum = 1>><<replace "#scrotum">>Tiny.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Small">><<set $activeSlave.scrotum = 2>><<replace "#scrotum">>Small.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Normal">><<set $activeSlave.scrotum = 3>><<replace "#scrotum">>Normal.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Large">><<set $activeSlave.scrotum = 4>><<replace "#scrotum">>Large.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Massive">><<set $activeSlave.scrotum = 5>><<replace "#scrotum">>Massive.<</replace>><<StartingGirlsCost>><</link>> - <br>''Puberty:'' - <span id="Mpub"> - <<if $activeSlave.pubertyXY == 1>>Postpubescent. - <<else>>Prepubescent. - <</if>> - </span> - <<link "Postpubescent">><<set $activeSlave.pubertyXY = 1>><<replace "#Mpub">>Postpubescent.<</replace>><<StartingGirlsCost>><</link>> | - <<link "Prepubescent">><<set $activeSlave.pubertyXY = 0,$activeSlave.pubertyAgeXY = $potencyAge>><<replace "#Mpub">>Prepubescent.<</replace>><<StartingGirlsCost>><</link>> - <</if>> - <</if>> - <</replace>> - - <<replace "#prostate">> - <<if $activeSlave.prostate == 1>>Has a prostate. - <<else>>No prostate. - <</if>> - <</replace>> - - <<replace "#analSkillsBlock">> - <<if $activeSlave.anus == 0>> - //Anal virgins cannot be given anal skills// - <<else>> - ''Anal sex:'' - <span id = "analSkill"> - <<if $activeSlave.analSkill <= 10>>Unskilled. - <<elseif $activeSlave.analSkill <= 30>>@@.cyan;Basic.@@ - <<elseif $activeSlave.analSkill <= 60>>@@.cyan;Skilled.@@ - <<else>>@@.cyan;Expert.@@ - <</if>> - </span> - <<if $activeSlave.anus < 3>><<link "Unskilled">><<set $activeSlave.analSkill = 0>><<replace "#analSkill">>Unskilled.<</replace>><<StartingGirlsCost>><</link>> |<</if>> - <<link "Basic">><<set $activeSlave.analSkill = 15>><<replace "#analSkill">>@@.cyan;Basic.@@<</replace>><<StartingGirlsCost>><</link>> | - <<link "Skilled">><<set $activeSlave.analSkill = 35>><<replace "#analSkill">>@@.cyan;Skilled.@@<</replace>><<StartingGirlsCost>><</link>> | - <<link "Expert">><<set $activeSlave.analSkill = 65>><<replace "#analSkill">>@@.cyan;Expert.@@<</replace>><<StartingGirlsCost>><</link>> - <</if>> - <</replace>> - - <<replace "#oralSkill">> - <<if $activeSlave.oralSkill <= 10>>Unskilled. - <<elseif $activeSlave.oralSkill <= 30>>@@.cyan;Basic.@@ - <<elseif $activeSlave.oralSkill <= 60>>@@.cyan;Skilled.@@ - <<else>>@@.cyan;Expert.@@ - <</if>> - <</replace>> - - <<replace "#vaginalSkillsBlock">> - <<if $activeSlave.vagina == 0>> - //Virgins cannot be given vaginal skills// - <<elseif $activeSlave.vagina == -1>> - //Must have a vagina to have vaginal skills// - <<else>> - ''Vaginal sex:'' - <span id = "vaginalSkill"> - <<if $activeSlave.vaginalSkill <= 10>>Unskilled. - <<elseif $activeSlave.vaginalSkill <= 30>>@@.cyan;Basic.@@ - <<elseif $activeSlave.vaginalSkill <= 60>>@@.cyan;Skilled.@@ - <<else>>@@.cyan;Expert.@@ - <</if>> - </span> - <<if $activeSlave.vagina < 3>><<link "Unskilled">><<set $activeSlave.vaginalSkill = 0>><<replace "#vaginalSkill">>Unskilled.<</replace>><<StartingGirlsCost>><</link>> |<</if>> - <<link "Basic">><<set $activeSlave.vaginalSkill = 15>><<replace "#vaginalSkill">>@@.cyan;Basic.@@<</replace>><<StartingGirlsCost>><</link>> | - <<link "Skilled">><<set $activeSlave.vaginalSkill = 35>><<replace "#vaginalSkill">>@@.cyan;Skilled.@@<</replace>><<StartingGirlsCost>><</link>> | - <<link "Expert">><<set $activeSlave.vaginalSkill = 65>><<replace "#vaginalSkill">>@@.cyan;Expert.@@<</replace>><<StartingGirlsCost>><</link>> - <</if>> - <</replace>> - - <<replace "#whoreSkill">> - <<if $activeSlave.whoreSkill <= 10>>Unskilled. - <<elseif $activeSlave.whoreSkill <= 30>>@@.cyan;Basic.@@ - <<elseif $activeSlave.whoreSkill <= 60>>@@.cyan;Skilled.@@ - <<else>>@@.cyan;Expert.@@ - <</if>> - <</replace>> - - <<replace "#entertainSkill">> - <<if $activeSlave.entertainSkill <= 10>>Unskilled. - <<elseif $activeSlave.entertainSkill <= 30>>@@.cyan;Basic.@@ - <<elseif $activeSlave.entertainSkill <= 60>>@@.cyan;Skilled.@@ - <<else>>@@.cyan;Expert.@@ - <</if>> - <</replace>> - - <<replace "#combatSkill">> - <<if $activeSlave.combatSkill == 0>>Unskilled. - <<else>>@@.cyan;Skilled.@@ - <</if>> - <</replace>> - - <<replace "#intelligence">> - <<if $activeSlave.intelligence > 95>>@@.deepskyblue;Brilliant.@@ - <<elseif $activeSlave.intelligence > 50>>@@.deepskyblue;Very smart.@@ - <<elseif $activeSlave.intelligence > 15>>@@.deepskyblue;Smart.@@ - <<elseif $activeSlave.intelligence >= -15>>Average. - <<elseif $activeSlave.intelligence >= -50>>@@.orangered;Stupid.@@ - <<elseif $activeSlave.intelligence >= -95>>@@.orangered;Very stupid.@@ - <<else>>@@.orangered;Moronic.@@ - <</if>> - <</replace>> - - <<replace "#intelligenceImplant">> - <<if $activeSlave.intelligenceImplant >= 30>>@@.deepskyblue;Well educated.@@ - <<elseif $activeSlave.intelligenceImplant >= 15>>@@.deepskyblue;Educated.@@ - <<else>>Uneducated. - <</if>> - <</replace>> - - <<if $activeSlave.fetishKnown == 1>> - <<ToggleFetish 1>> - <<else>> - <<ToggleFetish 0>> - <</if>> - - <<if $activeSlave.attrKnown == 1>> - <<ToggleSexuality 1>> - <<else>> - <<ToggleSexuality 0>> - <</if>> - - <<replace "#behavioralFlaw">> - <<if $activeSlave.behavioralFlaw == "none">> - //$activeSlave.behavioralFlaw.// - <<else>> - @@.red;$activeSlave.behavioralFlaw.@@ - <</if>> - <</replace>> - - <<replace "#sexualFlaw">> - <<if $activeSlave.sexualFlaw == "none">> - //$activeSlave.sexualFlaw.// - <<else>> - @@.red;$activeSlave.sexualFlaw.@@ - <</if>> - <</replace>> -<</widget>> - -/% - Call as <<StartingGirlsWarnings>> -%/ -<<widget "StartingGirlsWarnings">> - <<replace "#devotionWarning">> - <<if $activeSlave.devotion > 20>> - <br> - //@@.red;Starting slaves incur - <<if $activeSlave.devotion > 50>> - a severe cost penalty at very high - <<else>> - an additional cost penalty at high - <</if>> - levels of devotion. This slave's - <<if $activeSlave.actualAge >= 25>><<if $activeSlave.actualAge > 35>>advanced <</if>>age decreases the penalty<<else>>young age requires paying the full penalty<</if>>.@@// - <</if>> - <</replace>> - <<replace "#skillsWarning">> - <<if $activeSlave.whoreSkill+$activeSlave.entertainSkill+$activeSlave.vaginalSkill+$activeSlave.analSkill+$activeSlave.oralSkill+($activeSlave.combatSkill*100) > 200>> - <br> - //@@.red;Starting slaves incur - <<if $activeSlave.whoreSkill+$activeSlave.entertainSkill+$activeSlave.vaginalSkill+$activeSlave.analSkill+$activeSlave.oralSkill+($activeSlave.combatSkill*100) > 400>> - a severe cost penalty at for being highly - <<else>> - an additional cost penalty for being - <</if>> - skilled. This slave's - <<if $activeSlave.actualAge >= 25>><<if $activeSlave.actualAge > 35>>advanced <</if>>age decreases the penalty<<else>>young age requires paying the full penalty<</if>>.@@// - <</if>> - <</replace>> - <<replace "#prestigeWarning">> - <<if $activeSlave.prestige>> - <br> - //@@.red;Starting slaves incur an extreme cost penalty for prestige. This slave's - <<if $activeSlave.actualAge >= 25>><<if $activeSlave.actualAge > 35>>advanced <</if>>age decreases the penalty<<else>>young age requires paying the full penalty<</if>>.@@// - <</if>> - <</replace>> -<</widget>> - -/% - Call as <<StartingGirlsAnalSkill>> -%/ -<<widget "StartingGirlsAnalSkill">> - <<replace "#analSkillsBlock">> - <<if $activeSlave.anus == 0>> - //Anal virgins cannot be given anal skills// - <<else>> - ''Anal sex:'' - <span id = "analSkill"> - <<if $activeSlave.analSkill <= 10>>Unskilled. - <<elseif $activeSlave.analSkill <= 30>>@@.cyan;Basic.@@ - <<elseif $activeSlave.analSkill <= 60>>@@.cyan;Skilled.@@ - <<else>>@@.cyan;Expert.@@ - <</if>> - </span> - <<if $activeSlave.anus < 3>><<link "Unskilled">><<set $activeSlave.analSkill = 0>><<replace "#analSkill">>Unskilled.<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> |<</if>> - <<link "Basic">><<set $activeSlave.analSkill = 15>><<replace "#analSkill">>@@.cyan;Basic.@@<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | - <<link "Skilled">><<set $activeSlave.analSkill = 35>><<replace "#analSkill">>@@.cyan;Skilled.@@<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | - <<link "Expert">><<set $activeSlave.analSkill = 65>><<replace "#analSkill">>@@.cyan;Expert.@@<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> - <</if>> - <</replace>> -<</widget>> - -/% - Call as <<StartingGirlsVaginalSkill>> -%/ -<<widget "StartingGirlsVaginalSkill">> - <<replace "#vaginalSkillsBlock">> - <<if $activeSlave.vagina == 0>> - //Virgins cannot be given vaginal skills// - <<elseif $activeSlave.vagina == -1>> - //Must have a vagina to have vaginal skills// - <<else>> - ''Vaginal sex:'' - <span id = "vaginalSkill"> - <<if $activeSlave.vaginalSkill <= 10>>Unskilled. - <<elseif $activeSlave.vaginalSkill <= 30>>@@.cyan;Basic.@@ - <<elseif $activeSlave.vaginalSkill <= 60>>@@.cyan;Skilled.@@ - <<else>>@@.cyan;Expert.@@ - <</if>> - </span> - <<if $activeSlave.anus < 3>><<link "Unskilled">><<set $activeSlave.vaginalSkill = 0>><<replace "#vaginalSkill">>Unskilled.<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> |<</if>> - <<link "Basic">><<set $activeSlave.vaginalSkill = 15>><<replace "#vaginalSkill">>@@.cyan;Basic.@@<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | - <<link "Skilled">><<set $activeSlave.vaginalSkill = 35>><<replace "#vaginalSkill">>@@.cyan;Skilled.@@<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> | - <<link "Expert">><<set $activeSlave.vaginalSkill = 65>><<replace "#vaginalSkill">>@@.cyan;Expert.@@<</replace>><<StartingGirlsCost>><<StartingGirlsWarnings>><</link>> - <</if>> - <</replace>> -<</widget>> - /% Call as <<SaleDescription>> %/ @@ -706,7 +59,6 @@ <<replace "#cost">> <<SlaveCostDescription>> <</replace>> -<<replace "#finalize">> <<if $cash >= $slaveCost>> <<set $activeSlave.actualAge = Number($activeSlave.actualAge) || 18>> <<set $activeSlave.devotion = Number($activeSlave.devotion) || 0>> @@ -771,570 +123,6 @@ <</if>> <br> [[Discard this slave and continue|Acquisition]] -<</replace>> -<</widget>> - -/% - Call as <<ToggleFetish 1>> - $arg[0] is whether unknown or known. -%/ -<<widget "ToggleFetish">> - -<<if ($args[0] == 0)>> - <<set $activeSlave.fetish = either("boobs", "buttslut", "cumslut", "dom", "humiliation", "masochist", "none", "none", "none", "none", "none", "none", "none", "none", "none", "none", "pregnancy", "sadist", "submissive"), $activeSlave.fetishKnown = 0>> - <<replace "#fetishblock">> - //Not known.// - <<link "Known">> - <<ToggleFetish 1>> - <</link>> - <</replace>> -<<else>> - <<set $activeSlave.fetishKnown = 1>> - <<replace "#fetishblock">> - <span id="fetish"> - <<if $activeSlave.fetishKnown == 1>> - <<if $activeSlave.fetish == "none">> - @@.pink;$activeSlave.fetish.@@ - <<else>> - @@.lightcoral;$activeSlave.fetish.@@ - <</if>> - <<else>> - //Not known.// - <<link "Known">> - <<ToggleFetish 1>> - <</link>> - <</if>> - </span> - <br> - <<if $activeSlave.fetishKnown == 1>> - <<link "Unknown">> - <<ToggleFetish 0>> - <<StartingGirlsCost>> - <</link>> | - <<link "None">> - <<set $activeSlave.fetish = "none", $activeSlave.fetishKnown = 1>> - <<ToggleFetish 1>> - <</link>> | - <<link "Sub">> - <<set $activeSlave.fetish = "submissive", $activeSlave.fetishKnown = 1>> - <<ToggleFetish 1>> - <</link>> | - <<link "Dom">> - <<set $activeSlave.fetish = "dom", $activeSlave.fetishKnown = 1>> - <<ToggleFetish 1>> - <</link>> | - <<link "Cumslut">> - <<set $activeSlave.fetish = "cumslut", $activeSlave.fetishKnown = 1>> - <<ToggleFetish 1>> - <</link>> | - <<link "Humiliation">> - <<set $activeSlave.fetish = "humiliation", $activeSlave.fetishKnown = 1>> - <<ToggleFetish 1>> - <</link>> | - <<link "Buttslut">> - <<set $activeSlave.fetish = "buttslut", $activeSlave.fetishKnown = 1>> - <<ToggleFetish 1>> - <</link>> | - <<link "Breasts">> - <<set $activeSlave.fetish = "boobs", $activeSlave.fetishKnown = 1>> - <<ToggleFetish 1>> - <</link>> | - <<link "Pregnancy">> - <<set $activeSlave.fetish = "pregnancy", $activeSlave.fetishKnown = 1>> - <<ToggleFetish 1>> - <</link>> | - <<link "Sadism">> - <<set $activeSlave.fetish = "sadist", $activeSlave.fetishKnown = 1>> - <<ToggleFetish 1>> - <</link>> | - <<link "Masochism">> - <<set $activeSlave.fetish = "masochist", $activeSlave.fetishKnown = 1>> - <<ToggleFetish 1>> - <</link>> - <<if $seeExtreme == 1>> - | <<link "Mindbroken">> - <<set $activeSlave.fetish = "mindbroken", $activeSlave.fetishKnown = 1, $activeSlave.sexualFlaw = "none", $activeSlave.behavioralFlaw = "none", $activeSlave.sexualQuirk = "none", $activeSlave.sexualFlaw = "none">> - <<ToggleFetish 1>> - <</link>> - <</if>> - - <<if $activeSlave.fetish != "none">> - <br> - <span id="fetishStrength"> - ''Fetish strength:'' - <<if $activeSlave.fetishStrength > 95>> - @@.lightcoral;High.@@ - <<elseif $activeSlave.fetishStrength <= 60>> - @@.pink;Low.@@ - <<else>> - @@.hotpink;Normal.@@ - <</if>> - <<if $activeSlave.fetishStrength > 60>> - <<link "Decrease">> - <<ChangeFetishStrength 0>> - <</link>> - <</if>> - <<if ($activeSlave.fetishStrength > 60)>>|<</if>> - <<if $activeSlave.fetishStrength <= 95>> - <<link "Increase">> - <<ChangeFetishStrength 1>> - <</link>> - <</if>> - </span> - <</if>> - - <</if>> - <</replace>> -<</if>> - -<</widget>> - - -/% - Call as <<ChangeFetishStrength 1>> - $arg[0] is whether increase or decrease -%/ -<<widget "ChangeFetishStrength">> - -<<if ($args[0] == 0)>> - <<set $activeSlave.fetishStrength -= 5, $activeSlave.fetishKnown = 1>> - <<replace "#fetishStrength">> - ''Fetish strength:'' - <<if $activeSlave.fetishStrength > 95>> - @@.lightcoral;High.@@ - <<elseif $activeSlave.fetishStrength <= 60>> - @@.pink;Low.@@ - <<else>> - @@.hotpink;Normal.@@ - <</if>> - - <<if $activeSlave.fetishStrength > 60>> - <<link "Decrease">> - <<ChangeFetishStrength 0>> - <</link>> - <</if>> - <<if ($activeSlave.fetishStrength > 60)>>|<</if>> - <<if $activeSlave.fetishStrength <= 95>> - <<link "Increase">> - <<ChangeFetishStrength 1>> - <</link>> - <</if>> - <</replace>> - <<StartingGirlsCost>> - -<<else>> - <<set $activeSlave.fetishStrength += 5, $activeSlave.fetishKnown = 1>> - <<replace "#fetishStrength">> - ''Fetish strength:'' - <<if $activeSlave.fetishStrength > 95>> - @@.lightcoral;High.@@ - <<elseif $activeSlave.fetishStrength <= 60>> - @@.pink;Low.@@ - <<else>> - @@.hotpink;Normal.@@ - <</if>> - - <<if $activeSlave.fetishStrength > 60>> - <<link "Decrease">> - <<ChangeFetishStrength 0>> - <</link>> - <</if>> - <<if ($activeSlave.fetishStrength > 60)>>|<</if>> - <<if $activeSlave.fetishStrength <= 95>> - <<link "Increase">> - <<ChangeFetishStrength 1>> - <</link>> - <</if>> - <</replace>> - <<StartingGirlsCost>> - -<</if>> - -<</widget>> - -/% - Call as <<ToggleSexuality 1>> - $arg[0] is whether unknown or known. -%/ -<<widget "ToggleSexuality">> - -<<if ($args[0] == 0)>> - - <<set $activeSlave.attrXX = random(0,100), $activeSlave.attrXY = random(0,100), $activeSlave.energy = random(1,90), $activeSlave.attrKnown = 0>> - <<StartingGirlsCost>> - <<replace "#sexuality">> - //Not known.// - - <<link "Known">> - <<ToggleSexuality 1>> - <</link>> - <</replace>> -<<else>> - <<set $activeSlave.attrKnown = 1>> - <<replace "#sexuality">> - <span id="attrXY"> - <<if $activeSlave.attrKnown == 1>> - <<if $activeSlave.attrXY <= 5>> - @@.red;Disgusted by men,@@ - <<elseif $activeSlave.attrXY <= 15>> - @@.red;Turned off by men,@@ - <<elseif $activeSlave.attrXY <= 35>> - @@.red;Not attracted to men,@@ - <<elseif $activeSlave.attrXY <= 65>> - Indifferent to men, - <<elseif $activeSlave.attrXY <= 85>> - @@.green;Attracted to men,@@ - <<elseif $activeSlave.attrXY <= 95>> - @@.green;Aroused by men,@@ - <<else>> - @@.green;Passionate about men,@@ - <</if>> - <<else>> - //Not known.// - <</if>> - </span> - <span id="attrXX"> - <<if $activeSlave.attrKnown == 1>> - <<if $activeSlave.attrXX <= 5>> - @@.red;disgusted by women.@@ - <<elseif $activeSlave.attrXX <= 15>> - @@.red;turned off by women.@@ - <<elseif $activeSlave.attrXX <= 35>> - @@.red;not attracted to women.@@ - <<elseif $activeSlave.attrXX <= 65>> - indifferent to women. - <<elseif $activeSlave.attrXX <= 85>> - @@.green;attracted to women.@@ - <<elseif $activeSlave.attrXX <= 95>> - @@.green;aroused by women.@@ - <<else>> - @@.green;passionate about women.@@ - <</if>> - <</if>> - </span> - <<if $activeSlave.attrKnown == 1>> - <<link "Unknown">> - <<ToggleSexuality 0>> - <</link>> - - <br> - - XY attraction: - <span id="decreaseXY"> - <<link "Decrease">> - <<ChangeAttr 1 0>> - <</link>> - </span> - <span id="increaseXY"> - | - <<link "Increase">> - <<ChangeAttr 1 1>> - <</link>> - </span> - - XX attraction: - <span id="decreaseXX"> - <<link "Decrease">> - <<ChangeAttr 0 0>> - <</link>> - </span> - <span id="increaseXX"> - | - <<link "Increase">> - <<ChangeAttr 0 1>> - <</link>> - </span> - <br> - ''Sex drive:'' - <span id="energy"> - <<if $activeSlave.energy == 100>>@@.green;Nympho!@@ - <<elseif $activeSlave.energy > 80>>@@.green;Sex addict.@@ - <<elseif $activeSlave.energy > 60>>@@.green;Powerful.@@ - <<elseif $activeSlave.energy > 40>>@@.yellow;Average.@@ - <<elseif $activeSlave.energy > 20>>@@.red;Poor.@@ - <<else>>@@.red;Frigid.@@<</if>> - </span> - <<link "Nympho">> - <<set $activeSlave.energy = 100, $activeSlave.attrKnown = 1>> - <<replace "#energy">> - @@.green;Nympho!@@ - <</replace>> - <<StartingGirlsCost>> - <</link>> - | <<link "Sex addict">> - <<set $activeSlave.energy = 85, $activeSlave.attrKnown = 1>> - <<replace "#energy">> - @@.green;Sex addict.@@ - <</replace>> - <<StartingGirlsCost>> - <</link>> - | <<link "Powerful">> - <<set $activeSlave.energy = 65, $activeSlave.attrKnown = 1>> - <<replace "#energy">> - @@.green;Powerful.@@ - <</replace>> - <<StartingGirlsCost>> - <</link>> - | <<link "Average">> - <<set $activeSlave.energy = 45, $activeSlave.attrKnown = 1>> - <<replace "#energy">> - @@.yellow;Average.@@ - <</replace>> - <<StartingGirlsCost>> - <</link>> - | <<link "Poor">> - <<set $activeSlave.energy = 25, $activeSlave.attrKnown = 1>> - <<replace "#energy">> - @@.red;Poor.@@ - <</replace>> - <<StartingGirlsCost>> - <</link>> - | <<link "Frigid">> - <<set $activeSlave.energy = 5, $activeSlave.attrKnown = 1>> - <<replace "#energy">> - @@.red;Frigid.@@ - <</replace>> - <<StartingGirlsCost>> - <</link>> - <<else>> - <<link "Known">> - <<ToggleSexuality 1>> - <</link>> - <</if>> - <</replace>> - <<StartingGirlsCost>> -<</if>> -<</widget>> - - -/% - Call as <<ChangeAttr 1 1>> - $arg[0] is whether XX or XY. - $arg[1] is whether increase or decrease. -%/ -<<widget "ChangeAttr">> - -<<if ($args[0] == 0) && ($args[1] == 0)>> - <<if $activeSlave.attrXX > 0>> - <<set $activeSlave.attrXX -= 10>> - <</if>> - <<set $activeSlave.attrXX = Math.clamp($activeSlave.attrXX, 0, 100)>> - <<set $activeSlave.attrKnown = 1>> - <<replace "#attrXX">> - <<if $activeSlave.attrXX <= 5>> - @@.red;disgusted by women.@@ - <<elseif $activeSlave.attrXX <= 15>> - @@.red;turned off by women.@@ - <<elseif $activeSlave.attrXX <= 35>> - @@.red;not attracted to women.@@ - <<elseif $activeSlave.attrXX <= 65>> - indifferent to women. - <<elseif $activeSlave.attrXX <= 85>> - @@.green;attracted to women.@@ - <<elseif $activeSlave.attrXX <= 95>> - @@.green;aroused by women.@@ - <<else>> - @@.green;passionate about women.@@ - <</if>> - <</replace>> - <<StartingGirlsCost>> - <<if $activeSlave.attrXX == 100>> - <<replace "#increaseXX">> - <</replace>> - <<replace "#decreaseXX">> - <<link "Decrease">> - <<ChangeAttr 0 0>> - <</link>> - <</replace>> - <<elseif $activeSlave.attrXX == 0>> - <<replace "#decreaseXX">> - - <</replace>> - <<replace "#increaseXX">> - <<link "Increase">> - <<ChangeAttr 0 1>> - <</link>> - <</replace>> - <<else>> - <<replace "#decreaseXX">> - <<link "Decrease">> - <<ChangeAttr 0 0>> - <</link>> - <</replace>> - <<replace "#increaseXX">> - | - <<link "Increase">> - <<ChangeAttr 0 1>> - <</link>> - <</replace>> - <</if>> -<<elseif ($args[0] == 0) && ($args[1] == 1)>> - <<if $activeSlave.attrXX < 100>> - <<set $activeSlave.attrXX += 10>> - <</if>> - <<set $activeSlave.attrXX = Math.clamp($activeSlave.attrXX, 0, 100)>> - <<set $activeSlave.attrKnown = 1>> - <<replace "#attrXX">> - <<if $activeSlave.attrXX <= 5>> - @@.red;disgusted by women.@@ - <<elseif $activeSlave.attrXX <= 15>> - @@.red;turned off by women.@@ - <<elseif $activeSlave.attrXX <= 35>> - @@.red;not attracted to women.@@ - <<elseif $activeSlave.attrXX <= 65>> - indifferent to women. - <<elseif $activeSlave.attrXX <= 85>> - @@.green;attracted to women.@@ - <<elseif $activeSlave.attrXX <= 95>> - @@.green;aroused by women.@@ - <<else>> - @@.green;passionate about women.@@ - <</if>> - <</replace>> - <<StartingGirlsCost>> - <<if $activeSlave.attrXX == 100>> - <<replace "#increaseXX">> - <</replace>> - <<replace "#decreaseXX">> - <<link "Decrease">> - <<ChangeAttr 0 0>> - <</link>> - <</replace>> - <<elseif $activeSlave.attrXX == 0>> - <<replace "#decreaseXX">> - - <</replace>> - <<replace "#increaseXX">> - <<link "Increase">> - <<ChangeAttr 0 1>> - <</link>> - <</replace>> - <<else>> - <<replace "#decreaseXX">> - <<link "Decrease">> - <<ChangeAttr 0 0>> - <</link>> - <</replace>> - <<replace "#increaseXX">> - | - <<link "Increase">> - <<ChangeAttr 0 1>> - <</link>> - <</replace>> - <</if>> -<<elseif ($args[0] == 1) && ($args[1] == 0)>> - <<if $activeSlave.attrXY > 0>> - <<set $activeSlave.attrXY -= 10>> - <</if>> - - <<set $activeSlave.attrXY = Math.clamp($activeSlave.attrXY, 0, 100)>> - <<set $activeSlave.attrKnown = 1>> - <<replace "#attrXY">> - <<if $activeSlave.attrXY <= 5>> - @@.red;Disgusted by men,@@ - <<elseif $activeSlave.attrXY <= 15>> - @@.red;Turned off by men,@@ - <<elseif $activeSlave.attrXY <= 35>> - @@.red;Not attracted to men,@@ - <<elseif $activeSlave.attrXY <= 65>> - Indifferent to men, - <<elseif $activeSlave.attrXY <= 85>> - @@.green;Attracted to men,@@ - <<elseif $activeSlave.attrXY <= 95>> - @@.green;Aroused by men,@@ - <<else>> - @@.green;Passionate about men,@@ - <</if>> - <</replace>> - <<StartingGirlsCost>> - <<if $activeSlave.attrXY == 100>> - <<replace "#increaseXY">> - - <</replace>> - <<replace "#decreaseXY">> - <<link "Decrease">> - <<ChangeAttr 1 0>> - <</link>> - <</replace>> - <<elseif $activeSlave.attrXY == 0>> - <<replace "#decreaseXY">> - - <</replace>> - <<replace "#increaseXY">> - <<link "Increase">> - <<ChangeAttr 1 1>> - <</link>> - <</replace>> - <<else>> - <<replace "#decreaseXY">> - <<link "Decrease">> - <<ChangeAttr 1 0>> - <</link>> - <</replace>> - <<replace "#increaseXY">> - | - <<link "Increase">> - <<ChangeAttr 1 1>> - <</link>> - <</replace>> - <</if>> -<<elseif ($args[0] == 1) && ($args[1] == 1)>> - <<if $activeSlave.attrXY < 100>> - <<set $activeSlave.attrXY += 10>> - <</if>> - <<set $activeSlave.attrXY = Math.clamp($activeSlave.attrXY, 0, 100)>> - <<set $activeSlave.attrKnown = 1>> - <<replace "#attrXY">> - <<if $activeSlave.attrXY <= 5>> - @@.red;Disgusted by men,@@ - <<elseif $activeSlave.attrXY <= 15>> - @@.red;Turned off by men,@@ - <<elseif $activeSlave.attrXY <= 35>> - @@.red;Not attracted to men,@@ - <<elseif $activeSlave.attrXY <= 65>> - Indifferent to men, - <<elseif $activeSlave.attrXY <= 85>> - @@.green;Attracted to men,@@ - <<elseif $activeSlave.attrXY <= 95>> - @@.green;Aroused by men,@@ - <<else>> - @@.green;Passionate about men,@@ - <</if>> - <</replace>> - <<StartingGirlsCost>> - - <<if $activeSlave.attrXY == 100>> - <<replace "#increaseXY">> - - <</replace>> - <<replace "#decreaseXY">> - <<link "Decrease">> - <<ChangeAttr 1 0>> - <</link>> - <</replace>> - <<elseif $activeSlave.attrXY == 0>> - <<replace "#decreaseXY">> - - <</replace>> - <<replace "#increaseXY">> - <<link "Increase">> - <<ChangeAttr 1 1>> - <</link>> - <</replace>> - <<else>> - <<replace "#decreaseXY">> - <<link "Decrease">> - <<ChangeAttr 1 0>> - <</link>> - <</replace>> - <<replace "#increaseXY">> - | - <<link "Increase">> - <<ChangeAttr 1 1>> - <</link>> - <</replace>> - <</if>> -<</if>> <</widget>> /%