From 751929e0af491ca7ce31ff7b0722c128f49ba44e Mon Sep 17 00:00:00 2001 From: Blank <okp57855@psoxs.com> Date: Tue, 5 Feb 2019 18:00:10 -0800 Subject: [PATCH] SF_2019 - 0 [ready for review/merge) --- devTools/AutoGitVersionUploadBackground.sh | 8 - devTools/PreCompile.sh | 8 + src/SpecialForce/ColonelSexDec.tw | 2 +- src/SpecialForce/Firebase.tw | 201 +-- src/SpecialForce/FlavourText.tw | 238 ---- src/SpecialForce/NamingColonel.tw | 30 +- src/SpecialForce/Proposal.tw | 10 +- src/SpecialForce/Report.tw | 206 --- src/SpecialForce/SpecialForce.js | 1362 ++++++++++++------- src/SpecialForce/Upgrades.tw | 243 +--- src/SpecialForce/WeeklyChoices.tw | 20 +- src/init/storyInit.tw | 4 + src/js/economyJS.js | 13 +- src/uncategorized/BackwardsCompatibility.tw | 3 - src/uncategorized/costsReport.tw | 15 +- src/uncategorized/nonRandomEvent.tw | 2 +- src/uncategorized/persBusiness.tw | 2 +- 17 files changed, 1053 insertions(+), 1314 deletions(-) delete mode 100755 devTools/AutoGitVersionUploadBackground.sh create mode 100755 devTools/PreCompile.sh delete mode 100644 src/SpecialForce/FlavourText.tw delete mode 100644 src/SpecialForce/Report.tw diff --git a/devTools/AutoGitVersionUploadBackground.sh b/devTools/AutoGitVersionUploadBackground.sh deleted file mode 100755 index 597c5ba6a29..00000000000 --- a/devTools/AutoGitVersionUploadBackground.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh Additional packages required: megatools, MEGAcmd, minify and git -U=anon@anon.anon P=13245 sdr=/tmp/FC-Dev/devTools rdr=FC/ ldr=FC/ gen='bin/*.*' rpo=https://gitgud.io/pregmodfan/fc-pregmod.git preVC=00; echo "Fresh git clone? 0:y 1:n 2:na" && read Opt && clear && mega-login $U $P > /dev/null -while true;do if [ `ls $ldr|echo $?` -eq 0 ]; then cd $ldr;fi ;clear - if [[ $Opt == 0 ]]; then mkdir $ldr; git clone -q $rpo $ldr && cd $ldr && if [ `git log -n1 --abbrev-commit|grep -m1 commit|sed 's/commit //'|sed s'/.$//'` != $preVC ]; then build=1 && sed -Ei "s/preVC=$preVC/preVC=$(git log -n1 --abbrev-commit|grep -m1 commit|sed 's/commit //'|sed s'/.$//')/" $sdr/AutoGitVersionUploadBackground.sh;fi - elif [[ $Opt > 0 || $build < 1 ]]; then git fetch -q origin && if [ `git rev-list HEAD...origin/pregmod-master --count` -gt 0 ]; then build=1 && git pull -q && sed -Ei "s/preVC=$preVC/preVC=$(git log -n1 --abbrev-commit|grep -m1 commit|sed 's/commit //'|sed s'/.$//')/" $sdr/AutoGitVersionUploadBackground.sh;fi #A tweak of https://stackoverflow.com/a/17192101 and single line conversion. - fi #sed s'/.$//' - https://stackoverflow.com/a/3675181 - if [[ $Opt > 1 || $build > 0 ]]; then rm $gen; ./compile --insane && clear && minify -o $gen $gen && mv $gen bin/"FC-pregmod-$(git log -1 --format='%cd' --date='format:%d-%m-%Y-%H-%M')-$(git log -n1 --abbrev-commit|grep -m1 commit|sed 's/commit //'|sed s'/.$//')".html && mega-put $gen $rdr && megals -u $U -p $P /Root/$rdr|sed -n '1!p'|tail -n +10|paste -sd " " -|xargs megarm -u $U -p $P;clear;fi -if [[ $build > 0 ]];then build=0;fi ; if [[ $Opt != -1 ]];then Opt=-1;fi ;sleep 30m ;done diff --git a/devTools/PreCompile.sh b/devTools/PreCompile.sh new file mode 100755 index 00000000000..c41e7a442c2 --- /dev/null +++ b/devTools/PreCompile.sh @@ -0,0 +1,8 @@ +#!/bin/sh +x='bin/*.*' V=00 #Additional packages required: MEGAcmd,minify,git. U=$1 P=$2 scrtDir=$3 remtDir=$4 locDir=$5 repo=$6 +echo "Fresh clone? 0:y 1:n 2:na" && read Opt;clear;mega-login $U $P >/dev/null +while true;do ls $5 >/dev/null 2>&1 && if [[ $? == 0 ]];then cd $5 >/dev/null 2>&1;fi + if [[ $Opt == 0 ]];then mkdir $5 && git clone -q --no-tags --depth 1 $6 $5 && cd $5 && if [ `git log -1|grep commit|cut -c 8-13` != $V ];then sed -Ei "s/V=$V/V=$(git log -1|grep commit|cut -c 8-13)/" $3/$0 && gen=1;fi + elif [[ $Opt > 0||$gen < 1 ]];then git fetch -q && if [ `git rev-list HEAD...origin/pregmod-master --count` -gt 0 ];then git reset -q --hard $V && git pull -q && sed -Ei "s/V=$V/V=$(git log -1|grep commit|cut -c 8-13)/" $3/$0 && gen=1;fi ;fi #sources: stackoverflow.com/a/17192101,stackoverflow.com/a/3675181. + if [[ $Opt > 1||$gen > 0 ]];then rm $x 2>/dev/null;minify -rao $5 $5 && ./compile --insane 1>/dev/null && minify -o $x $x && mv $x bin/"FC-pregmod-$(git log -1 --format='%cd' --date='format:%d-%m-%Y-%H-%M')-$(git log -1|grep commit|cut -c 8-13)".html && mega-put -c $x $4 && if [[ `mega-ls GitFC/|wc -l` -gt 10 && $y < 1 ]];then mega-ls $4|tail -n +11|while read link;do mega-rm $4$link && y=1;done;fi; fi +gen=0;Opt=-1;sleep 15m;done \ No newline at end of file diff --git a/src/SpecialForce/ColonelSexDec.tw b/src/SpecialForce/ColonelSexDec.tw index df4875dcef8..0525b8a74db 100644 --- a/src/SpecialForce/ColonelSexDec.tw +++ b/src/SpecialForce/ColonelSexDec.tw @@ -1,4 +1,4 @@ -:: SF.ColonelSexDec +:: SFColonelSexDec <<switch $SF.Colonel.Core>> <<case "shell shocked">> <span id="result7"> diff --git a/src/SpecialForce/Firebase.tw b/src/SpecialForce/Firebase.tw index c0415911488..de2b09e8e0f 100644 --- a/src/SpecialForce/Firebase.tw +++ b/src/SpecialForce/Firebase.tw @@ -1,145 +1,74 @@ :: Firebase [nobr] +<<if ndef $Tour>> <<set $Tour = 0>> <</if>> <<= Count()>> +<<if $Tour === 0>> + <<switch _Env>> <<case 4>> + <<set _EnvCash2 = 450,_EnvCash3 = 200,_EnvCash4 = 100,_EnvProsp = 3>> + <<case 3>> + <<set _EnvCash2 = 500,_EnvCash3 = 250,_EnvCash4 = 150,_EnvProsp = 5>> + <<case 2>> + <<set _EnvCash2 = 550,_EnvCash3 = 300,_EnvCash4 = 200,_EnvProsp = 7>> + <</switch>> <<set $nextButton = "Back to Main",$nextLink = "Main",$returnTo = "Firebase">> + + <<if $cheatMode > 0>> [[Cheat edit|CheatEdit][]] <br> <</if>> + The firebase of $arcologies[0].name's <<textbox "$SF.Lower" $SF.Lower "Firebase">> is located in the lower levels, occupying unneeded warehouse space. It is not accessible to the general citizenry, but your personal elevator has express service to it. As you step off, two soldiers in combat armor manning the entry checkpoint tense before recognizing their Marshal and stepping aside with a sharp salute.<br> + + <<if $SF.MercCon.CanAttend === 1>> The Colonel is away at her merc meetup, so <<print SFC()>> will assist you. + <<else>> + You make your way to the operations center. The Colonel is + <<if random(1,100) > 25>>glancing between her tablet and the large wallscreen, occasionally taking notes or barking orders. + <<elseif random(1,100) > 25>>is handling a minor issue.<<else>>examining a table with a map of the surrounding area, planning maneuvers in the event of an attack.<</if>> + She notices your entrance and turns her attention to you. + <</if>> - <<if ndef $Tour>> <<set $Tour = 0>> <</if>> - - <<if $Tour === 0>> - - <<= Count()>> <<if $SF.Lower != "the special force">> - - <<set $SF.Caps = $SF.Lower.replace("the ", "The ")>> <</if>> - - <<switch _Env>> <<case 4>> - - <<set _EnvCash2 = 450,_EnvCash3 = 200,_EnvCash4 = 100,_EnvProsp = 3>> - - <<case 3>> - - <<set _EnvCash2 = 500,_EnvCash3 = 250,_EnvCash4 = 150,_EnvProsp = 5>> - - <<case 2>> - - <<set _EnvCash2 = 550,_EnvCash3 = 300,_EnvCash4 = 200,_EnvProsp = 7>> - - <</switch>> <<set $nextButton = "Back to Main",$nextLink = "Main",$returnTo = "Firebase">> - - <<if $cheatMode > 0>> <<link "Cheat edit""CheatEdit">> <</link>> <br> <</if>> - - The firebase of $arcologies[0].name's <<textbox "$SF.Lower" $SF.Lower "Firebase">> is located in the lower levels, occupying unneeded warehouse space. It is not accessible to the general citizenry, but your personal elevator has express service to it. As you step off, two soldiers in combat armor manning the entry checkpoint tense before recognizing their Marshal and stepping aside with a sharp salute. - - <br><br><<if $SF.MercCon.CanAttend === 1 || ($SF.Colonel.Fun + $SF.Colonel.Talk >= 1)>> - - You make your way to the operations center, <<print SFC()>> is handling a minor issue. As you enter, she salutes. <<if $SF.MercCon.CanAttend == 1>> The Colonel is away at her merc meetup, so <<print SFC()>> will assist you.<</if>> - - <<elseif random(1,100) > 5>> - - You make your way to the operations center. The Colonel is - - <<if random(1,100) > 50>>glancing between her tablet and the large wallscreen, occasionally taking notes or barking orders. - - <<else>>examining a table with a map of the surrounding area, planning maneuvers in the event of an attack.<</if>> - - She notices your entrance and turns her attention to you. - - <<if $SF.Colonel.Core == "brazen">> - - She gives a textbook salute. "<<= properTitle()>>, how can I help you?" - - <<else>> - - "Hey boss, what do you need?"<</if>> - - <<else>> - - You make your way to the operations center, finding it empty. A short walk takes you through the barracks to the Colonel's quarters. As you approach, the Colonel <<print ColonelQuarters()>> - - <</if>> - - <<if ndef $SF.MercCon.View && ($SF.Colonel.Fun + $SF.Colonel.Talk < 1)>> - - <br><br>Her expression changes as something jogs her memory. "Before we begin <<if $SF.Colonel.Core == "brazen">><<= properTitle()>><<else>>boss<</if>>, back when I was a merc me and a couple of my old friends would have a meetup every several months. Drinking, fucking, drugs... a little poker. It eventually grew into a whole thing, and now we bring our latest and greatest toys to show off, maybe make some money off selling the schematics. I'd like to continue going, for old times' sake." - - <br>[[Grant leave|Firebase][$SF.MercCon.CanAttend = 1,$SF.MercCon.View = 1]] - - <br>[[Request she remain on base|Firebase][$SF.MercCon.CanAttend = -2,$SF.MercCon.View = 0]]<br> - - <</if>> - - <<if $SF.MercCon.History >= 1 && (Math.trunc($week/24) === ($week/24)) && $SF.MercCon.CanAttend === -1>> + <<if $SF.Colonel.Core === "brazen">> + She gives a textbook salute. "<<= properTitle()>>, how can I help you?" + <<else>> + "Hey boss, what do you need?" + <</if>> + <<include "Upgrades">> + <<print Interactions()>> + <<include "WC">> + + <<if ndef $SF.MercCon.View && ($SF.Colonel.Fun + $SF.Colonel.Talk < 1)>> + <br><br>Her expression changes as something jogs her memory. "Before we begin <<if $SF.Colonel.Core == "brazen">><<= properTitle()>><<else>>boss<</if>>, back when I was a merc me and a couple of my old friends would have a meetup every several months. Drinking, fucking, drugs... a little poker. It eventually grew into a whole thing, and now we bring our latest and greatest toys to show off, maybe make some money off selling the schematics. I'd like to continue going, for old times' sake." + <br>[[Grant leave|Firebase][$SF.MercCon.CanAttend = 1,$SF.MercCon.View = 1]] + <br>[[Request she remain on base|Firebase][$SF.MercCon.CanAttend = -2,$SF.MercCon.View = 0]]<br> + <</if>> + <<if $SF.MercCon.History >= 1>> + <<if ((Math.trunc($week/24) === ($week/24)) && $SF.MercCon.CanAttend === -1)>> <br><br>Her expression changes as something jogs her memory. "Before we begin <<if $SF.Colonel.Core == "brazen">><<= properTitle()>><<else>>boss<</if>>, that biannual merc meetup has come around again. You've already gave me leave to attend, but I just wanted to be sure I'm still clear to go." - <br>[[Grant leave.|Firebase][$SF.MercCon.CanAttend = 1]] - <br>[[Request she remain on site.|Firebase][$SF.MercCon.CanAttend = -1]]<br> - - <</if>> - - <<if $SF.MercCon.History >= 1 && ((Math.trunc(($week-1)/24) === ($week-1)/24) || (Math.trunc(($week-2)/24) === ($week-2)/24) || (Math.trunc(($week-3)/24) === ($week-3)/24))>> - - While at the recent merc meetup, the Colonel made @@.yellowgreen;<<print cashFormat(Math.ceil($SF.MercCon.Income))>>@@ selling generic schematics to her friends, <<print commaNum($SF.MercCon.Menials)>> menial slaves were won in a poker game, and <<print commaNum($SF.MercCon.TotalMercs)>> mercenaries were persuaded to join $SF.Lower. - - <br>Total earnings thus far: @@.yellowgreen;<<print cashFormat(Math.ceil($SF.MercCon.Revenue))>>@@ in income, <<print commaNum($SF.MercCon.TotalMenials)>> menial slaves and <<print commaNum($SF.MercCon.Mercs)>> mercenaries joined across $SF.MercCon.History meetups. - - <</if>> - - <<print Interactions()>> - - <<include "WC">> - - <<if $SF.UC.Lock < 1>> - <br><<switch $SF.UC.Assign>> - - <<case 0>> - <br>No soldiers are working undercover. [[Full time assignment|Firebase][$SF.UC.Lock = 1]] - <br>[[Reassign soldiers|Firebase][$SF.UC.Assign = -1]] - - <<case 1>> - <br>A small section of soldiers are working undercover. [[Full time assignment|Firebase][$SF.UC.Lock = 1]] - <br>[[Reassign soldiers|Firebase][$SF.UC.Assign = -1]] - - <<case 2>> - <br>A large section of soldiers are working undercover. [[Full time assignment|Firebase][$SF.UC.Lock = 1]] - <br>[[Reassign soldiers|Firebase][$SF.UC.Assign = -1]] - - <<default>> - - <br>Would you like to assign soldiers to undercover duty? - - <br>[[Do not assign soldiers to work undercover|Firebase][$SF.UC.Assign = 0]] - - <br>[[Assign a small section of soldiers to work undercover|Firebase][$SF.UC.Assign = 1]] - - <br>[[Assign a large section of soldiers to work undercover|Firebase][$SF.UC.Assign = 2]] - - <</switch>> - <<else>> - <br> <<if $SF.UC.Assign < 1>>''Zero''<<elseif $SF.UC.Assign < 2>>A ''small'' section<<else>>A ''large'' section<</if>> of the special force is assigned to undercover work. [[Re-allocate the units|Firebase][$SF.UC.Lock = 0]] - <</if>> - - <<if $SF.Squad.Firebase > 5 && $secExp > 0 && $SFSupportLevel >= 4 && $maxUnits === 16 && $readiness <= 10>> - - <br><br>[[Provide the security force with their own section.|Firebase][$maxUnits += 4,$readiness = 10,cashX(forceNeg(Math.ceil((750000*(1.15+($SF.Size/1000))*(1.15+($SF.Squad.Firebase/10)))*_Env)), "capEx")]] - - @@.yellowgreen;<<print cashFormat(Math.ceil((750000*(1.15+($SF.Size/1000))*(1.15+($SF.Squad.Firebase/10)))*_Env))>>@@ - <</if>> - - <br> <<if $SF.Bonus < 1>> - <<link "Provide @@.yellowgreen;<<print cashFormat(Math.ceil(_SFCashBonus))>>@@ in bonuses for basic FS acceptance amongst $SF.Lower.""Firebase">> <<set $SF.Bonus = 1>> <</link>> - <<else>> - You are providing @@.yellowgreen;<<print cashFormat(Math.ceil(_SFCashBonus))>>@@ in bonuses for basic FS acceptance amongst $SF.Lower. [[Withdraw the bonuses.|Firebase][$SF.Bonus = 0]] - <</if>> - - <<include "Upgrades">> - - <br><<link "Tour the firebase" "Firebase">><<set $Tour = 1>><</link>> - + <br>While at the recent merc meetup, The Colonel made @@.yellowgreen;<<print cashFormat(Math.ceil($SF.MercCon.Income))>>@@ selling generic schematics to her friends, <<print commaNum($SF.MercCon.Menials)>> menial slaves were won in a poker game, and <<print commaNum($SF.MercCon.TotalMercs)>> mercenaries were persuaded to join $SF.Lower. + <br>Total earnings thus far: @@.yellowgreen;<<print cashFormat(Math.ceil($SF.MercCon.Revenue))>>@@ in income, <<print commaNum($SF.MercCon.TotalMenials)>> menial slaves and <<print commaNum($SF.MercCon.Mercs)>> mercenaries joined across $SF.MercCon.History meetups. + <</if>> + + <<if $SF.UC.Lock < 1>> + <br><<switch $SF.UC.Assign>> + <<case 0>> + <br>No soldiers are working undercover. [[Full time assignment|Firebase][$SF.UC.Lock = 1]] + <br>[[Reassign soldiers|Firebase][$SF.UC.Assign = -1]] + <<case 1>> + <br>A small section of soldiers are working undercover. [[Full time assignment|Firebase][$SF.UC.Lock = 1]] + <br>[[Reassign soldiers|Firebase][$SF.UC.Assign = -1]] + <<case 2>> + <br>A large section of soldiers are working undercover. [[Full time assignment|Firebase][$SF.UC.Lock = 1]] + <br>[[Reassign soldiers|Firebase][$SF.UC.Assign = -1]] + <<default>> + <br>Would you like to assign soldiers to undercover duty? + <br>[[Do not assign soldiers to work undercover|Firebase][$SF.UC.Assign = 0]] + <br>[[Assign a small section of soldiers to work undercover|Firebase][$SF.UC.Assign = 1]] + <br>[[Assign a large section of soldiers to work undercover|Firebase][$SF.UC.Assign = 2]] + <</switch>> + <<else>> + <br> <<if $SF.UC.Assign < 1>>''Zero''<<elseif $SF.UC.Assign < 2>>A ''small'' section<<else>>A ''large'' section<</if>> of the special force is assigned to undercover work. [[Re-allocate the units|Firebase][$SF.UC.Lock = 0]] <</if>> - <<if $Tour === 1>> <<set $nextButton = " ">> - - <<=Count()>><<include "FlavourText">><br> - - [[Return to Operations|Firebase][$Tour = 0]] - - <</if>> \ No newline at end of file + <<if $SF.Squad.Firebase > 5 && $secExp > 0 && $SFSupportLevel >= 4 && $maxUnits === 16 && $readiness <= 10>> + <br><br>[[Provide the security force with their own section.|Firebase][$maxUnits += 4,$readiness = 10,cashX(forceNeg(Math.ceil((750000*(1.15+($SF.Size/1000))*(1.15+($SF.Squad.Firebase/10)))*_Env)), "capEx")]] + @@.yellowgreen;<<print cashFormat(Math.ceil((750000*(1.15+($SF.Size/1000))*(1.15+($SF.Squad.Firebase/10)))*_Env))>>@@ + <</if>> + <br>[[Tour the firebase|Firebase][$Tour = 1]] +<<else>> <<= FlavourText()>> <br>[[Return to Operations|Firebase][$Tour=0]] <</if>> \ No newline at end of file diff --git a/src/SpecialForce/FlavourText.tw b/src/SpecialForce/FlavourText.tw deleted file mode 100644 index bf9067ff47e..00000000000 --- a/src/SpecialForce/FlavourText.tw +++ /dev/null @@ -1,238 +0,0 @@ -:: FlavourText [nobr] -<br> <<if passage() === "Firebase">> - You continue towards the common area, the soldiers you pass - <<if $SF.Bonus > 0>> - <<if $arcologies[0].FSChattelReligionistLaw > 0>> - bow to the Prophet. - <<elseif $arcologies[0].FSChattelReligionist >= $FSLockinLevel*0.9>> - bow to the Keeper of the Blade and Chalice. - <<elseif $arcologies[0].FSChattelReligionist >= $FSLockinLevel*0.6>> - bow to the Champion of the Faith. - <<elseif $arcologies[0].FSRomanRevivalist >= $FSLockinLevel*0.6>> - greet you with a roman salute. - <<elseif $arcologies[0].FSAztecRevivalist >= $FSLockinLevel*0.9>> - greet the Head <<if $PC.title > 0>>Priest<<else>>Priestess<</if>>. - <<elseif $arcologies[0].FSEgyptianRevivalist >= $FSLockinLevel*0.9>> - bowing to the Living <<if $PC.title == 1>>God<<else>>Goddess<</if>>. - <<elseif $arcologies[0].FSEdoRevivalist >= $FSLockinLevel*0.9>> - greet you with saikeirei. - <<elseif $arcologies[0].FSArabianRevivalist >= $FSLockinLevel*0.9>> - bow to the <<if $PC.title > 0>>Caliph<<else>>Handmaiden of Allah<</if>>. - <<elseif $arcologies[0].FSChineseRevivalist >= $FSLockinLevel*0.9>> - bow to the <<if $PC.title > 0>>Emperor<<else>>Empress<</if>> and Holder of the Mandate of Heaven. - <<elseif $arcologies[0].FSAztecRevivalist >= $FSLockinLevel*0.6>> - greet the Tlatcani. - <<elseif $arcologies[0].FSEgyptianRevivalist >= $FSLockinLevel*0.6>> - bow to the Pharaoh. - <<elseif $arcologies[0].FSEdoRevivalist >= $FSLockinLevel*0.6>> - bow to the Shogun. - <<elseif $arcologies[0].FSArabianRevivalist >= $FSLockinLevel*0.6>> - bow to the <<if $PC.title > 0>>Sultan<<else>>Sultana<</if>>. - <<elseif $arcologies[0].FSChineseRevivalist >= $FSLockinLevel*0.6>> - bow to the <<if $PC.title > 0>>Emperor<<else>>Empress<</if>>. - <</if>> - <<else>> - nod respectfully, salute, or bow slightly, as they please. - <</if>> - You pass the briefing areas, the officers and sergeants of the force are conferring over planning tables and display screens regarding their upcoming deployments. - - <br><br><div style="margin-left:2em">The commanders are - <<if $SF.Target === "recruit">> - viewing lists of potential recruits for $SF.Lower. Mainly mercenaries and Old World soldiers who might be receptive to an offer of employment and residence within the arcology, in addition to some citizens of the arcology who wish to have some excitement in their lives. - <<elseif $SF.Target === "secure">> - reviewing maps of trade routes to the arcology as well as nearby merchant hubs, arranging their future deployments to best protect them and encourage business and trade. - <<elseif $SF.Target === "raiding">> - reviewing maps of settlements and locations reported to have choice concentrations of material loot and potential slave stock, in preparation for their coming raids. - <</if>> </div> - <div style="margin-left:2em"> <<if $SF.ROE === "hold">> - There are posted (and very strict) guidelines for the use of force against non-citizen residents, forbidding the use of heavy weapons or indiscriminate fire. - <<elseif $SF.ROE === "limited">> - There are some guidelines posted regarding the use of force against non-citizens, forbidding general indiscriminate fire. - <<elseif $SF.ROE === "free">> - Guidelines regarding the use of force are completely absent from the deployment information screens. A note affixed to the screen, probably from a soldier, says: "Pop 'em if you see 'em — better than target practice!" Another one on top of that, from The Colonel, says: "Don't shoot the pretty ones, you fucking morons, or I'll kill you myself. They're worth good money or good for fun — do you idiots really want to have to fuck month-old stock?" - <</if>> </div> - <div style="margin-left:2em"> <<if $SF.Regs === "strict">> - On several screens, there are prominent warnings regarding the severe disciplinary procedures that will be taken against soldiers who commit crimes while on deployment. - <<elseif $SF.Regs === "some">> - On several screens, there are some minor warnings regarding the mild disciplinary procedures that may be taken against soldiers who commit especially severe crimes while on deployment. - <<elseif $SF.Regs === "none">> - There are no warnings or information regarding disciplinary procedures on any of the screens. Near one of them, a waste basket has been dragged over and a soldier has posted a note above it that says: "For Old World Complaints and Warrants." - <</if>> </div> - - <br>You arrive at the firebase's common area, - <<if $SF.Bonus > 0>> - designed with the ideology of your society in mind. - <<if $arcologies[0].FSSubjugationist != "unset">> - There is a club, where $arcologies[0].FSSubjugationistRace slaves entertain the brave soldiers before and after missions. - <<elseif $arcologies[0].FSSupremacist != "unset">> - A luxurious establishment for your $arcologies[0].FSSupremacistRace soldiers, where subhumans of other races will satisfy their every whim. - <</if>> - <<if $arcologies[0].FSGenderRadicalist != "unset">> - You spot an apothecary and a diner selling drugs and food designed for hermaphrodites. - <<elseif $arcologies[0].FSGenderFundamentalist != "unset">> - You spot a brothel where pretty girls are always ready to please the brave men of the force. - <<if $arcologies[0].FSRestart != "unset">> - They are sterile and show off their fresh, stretch mark-free bellies. - <<else>> - Some of them are pregnant, caressing their bellies to entice the fathers of their progeny. - <</if>> - <</if>> - <<if $arcologies[0].FSPaternalist != "unset">> - A faint sounds of music can be heard. After following it you see soldiers and slaves alike are relaxing on the dance floor. - <<elseif $arcologies[0].FSDegradationist != "unset">> - A faint sounds of shooting can be heard. After following it you see soldiers using slaves as moving target practice. - <</if>> - <<if $arcologies[0].FSBodyPurist != "unset">> - A highly subsidized clinic is stationed here, with top-notch equipment for surgery-free treatments and blood purification. - <<elseif $arcologies[0].FSTransformationFetishist != "unset">> - A highly subsidized clinic is stationed here, with top-notch equipment for advanced surgeries and cybernetic enhancements. - <</if>> - <<if $arcologies[0].FSYouthPreferentialist != "unset">> - A grizzled veteran appears at the entrance of a love hotel with pretty minx, telling her stories of war and glory, while she clings to him waiting for the main deal. - <<elseif $arcologies[0].FSMaturityPreferentialist != "unset">> - A young recruit appears at the entrance of a love hotel with experienced cougar, being initiated into the force by one of rites of passage established among the troops. - <</if>> - <<if $arcologies[0].FSSlimnessEnthusiast != "unset">> - A racetrack was established for slaves to compete, with soldiers betting their wages and in extreme cases freedom. - <<elseif $arcologies[0].FSAssetExpansionist != "unset">> - Slaves are a common site in the gym, with their heavy and sometimes immobilizing breasts being used for muscle building and of course groping. Most female soldiers don't even need slaves for that. - <</if>> - <<if $arcologies[0].FSPastoralist != "unset">> - You can see a healthy-looking cowgirl through the window of a slave-products only store, offering the free sample of a product. - <</if>> - <<if $arcologies[0].FSPhysicalIdealist != "unset">> - You can see a buff and imposing amazon through the window of an expanded and upgraded gym, lifting and showing off her gains. - <<set _vignette++>> - <<elseif $arcologies[0].FSHedonisticDecadence != "unset">> - Laughter can be heard from the "all you can eat" buffet at the center of the area. - <</if>> - <<if $arcologies[0].FSChattelReligionist != "unset">> - A chapel, always full of worshippers fulfills the spiritual needs of your men and increases their loyalty to you. - <</if>> - <<if $arcologies[0].FSRepopulationFocus != "unset">> - In a nursery professional staff tends and cares for many children until their mothers come from the missions or finally decide to go on a maternity leave. - <<elseif $arcologies[0].FSRestart != "unset">> - Special apartment for slave breeders and female soldiers on a maternity leave due to carrying elite children ensures that the best of your troops will leave their superior offspring behind. - <</if>> - <<if $arcologies[0].FSRomanRevivalist != "unset">> - After the missions your soldiers visit thermae — a popular place to relax and socialize. - <<elseif $arcologies[0].FSAztecRevivalist != "unset">> - A sacrificial altar in the shrine of Huitzilopochtli is always wet with blood. - <<elseif $arcologies[0].FSEgyptianRevivalist != "unset">> - A shrine of Montu is often visited by the soldiers. - <<elseif $arcologies[0].FSEdoRevivalist != "unset">> - In a dojo your soldiers learn and improve their martial arts. - <<elseif $arcologies[0].FSArabianRevivalist != "unset">> - New asÄsÄ«yÅ«n are created in a facility for special training of drug usage in battle. - <<elseif $arcologies[0].FSChineseRevivalist != "unset">> - An officer school teaches the Art of War to your commanders. - <</if>> - <<else>> - a nest of bars, pleasure dens, public spaces, and other facilities catering to the soldiers' needs and giving them somewhere to spend their free time, since they do not mingle with your citizens on the higher levels or exit the arcology except on deployment. It is well-occupied by the soldiers not currently tasked with duties, and they respectfully move out of your way as you approach, clearing a path for you to move forward. - <</if>> - - <br><br><div style="margin-left:2em"> - The amenities are staffed by menial slaves, captured by the soldiers on their excursions. They are - <<if $SF.Bonus > 0>> - <<if $arcologies[0].FSRomanRevivalist != "unset">> - wearing plain and cheap tunics - <<elseif $arcologies[0].FSAztecRevivalist != "unset">> - wearing simple loincloths or dresses - <<elseif $arcologies[0].FSEgyptianRevivalist != "unset">> - wearing short linen kilts or long skirts which extend from the shoulders to the ankles - <<elseif $arcologies[0].FSEdoRevivalist != "unset">> - wearing cheap kimonos - <<elseif $arcologies[0].FSArabianRevivalist != "unset">> - either naked or wearing transparent gauzes - <<elseif $arcologies[0].FSGenderFundamentalist != "unset">> - wearing traditional housewife clothes - <<elseif $arcologies[0].FSDegradationist != "unset">> - completely nude with only scars and derogatory tattoos covering their bodies - <<elseif $arcologies[0].FSPaternalist != "unset">> - wearing plain jumpsuits and slim identification collars to set them apart from the soldiers, and look resigned but not fearful. - <</if>> - <<else>> - <<if $SF.Depravity <= 0.3 && $SF.Colonel.Core === "kind">> - wearing plain jumpsuits and slim identification collars to set them apart from the soldiers, and look resigned but not fearful. The soldiers themselves socialize at the bars, in small groups around tables, and in the gambling parlors. Many of them can be seen entering or leaving the dens occupied by the sexual slaves they have acquired. Laughter from the carousing soldiers can be heard at all times. Small groups of slaves move freely between the plaza and their basic accommodations attached to the firebase. - <<elseif $SF.Depravity <= 0.6 && $SF.Colonel.Core === "kind">> - topless, wearing only utilitarian pants and leather collars to set them apart from the soldiers, and occasionally shoot fearful looks at the soldiers. The soldiers themselves socialize at the bars, or in large groups around tables, leering at and groping slaves of interest as they pass by. Many of them can be seen entering or leaving the dens occupied by the sexual slaves they have acquired, and often emerge only partially dressed, sometimes pulling half-naked slaves out with them. - <<elseif $SF.Depravity <= 0.9>> - topless, wearing only utilitarian shorts and steel collars to set them apart from the soldiers, and often shoot fearful looks at the soldiers. The soldiers themselves socialize at the bars, or in large groups around tables, leering at and heavily groping slaves of interest as they pass by. Many of them can be seen entering or leaving the dens occupied by the sexual slaves they have acquired, and often emerge stark naked, sometimes pulling naked slaves out with them for one last servicing in public. A few soldiers stagger around in drunken hazes or drugged-out stupors. - <<elseif $SF.Depravity <= 1.2>> - topless, wearing only a single undergarment and heavy steel collars to set them apart from the soldiers, and often shoot fearful looks at the soldiers. The soldiers occupy themselves primarily with sex, pulling slaves onto benches and fucking them hard in public. Many soldiers stagger around or lie passed out from drug and alcohol abuse. - <<elseif $SF.Depravity >= 1.5 && ($SF.Colonel.Core === "Warmonger" || $SF.Colonel.Core != "Shell Shocked")>> - To a one, they are naked, and are wearing heavy shock collars to force obedience. Most are wild-eyed with fear or dull-eyed from mental collapse, and many others bear marks of abuse. Few of the slaves are here long-term, the depraved pleasures of the soldiers resulting in enormous turnover and loss of 'damaged' stock. The extreme libations of the soldiers are ever-present. Drunken soldiers stagger around everywhere, beating slaves too slow to get out of their way. Others lie sprawled out on the ground, rendered senseless from heavy drug abuse. Some walk around naked, and hold slaves down on the benches scattered around, raping or sodomizing them with their cocks or their personal strap-ons as they desire. In alcoves, some soldier-lover pairs fuck loudly, moaning in pleasure. - <<if random(1,100) > 50>> - Off to the side, a group of soldiers brutally gangbang a very young slave girl, with one soldier buried balls-deep in her ass, another brutally sawing a barbed strap-on in and out of her pussy, and a third with his cock forced deep down her throat. The slave girl struggles and gags, desperate for breath or relief. - <<elseif random(1,100) > 50>> - Off to the side, a group of soldiers cackle amongst themselves as they take turns beating a very young slave girl with heavy batons. Sickening crunches can be heard from the screaming slave. - <<elseif random(1,100) > 75>> - Off to the side, still more soldiers crowd around an above-ground pit built from empty crates, gambling on slave gladiator fights. There's a drunken cheer as one of the fighters, a very young slave girl, straddles another one and smashes her face in with a blood-slick ammo crate. As she stands, shaking from fear and adrenaline, one of the soldiers laughs and throws a small incendiary grenade at her, changing the cheers to curses as the other soldiers jump away from the flaming, screeching slave. - <<else>> - Screams and cries of pain can be heard echoing around the area as the soldiers have their fun with their property. - <</if>> - <</if>> - <</if>> </div> - - <br>In the middle of the common area is a pile of supply crates with a pavilion on top — The Colonel's personal throne and open quarters, the result of her preferring to live an extreme lifestyle amongst her soldiers rather than in her empty quarters on the upper levels. It's draped with the 'flag' of $SF.Lower, one of her inventions. Sprawled all around it is an immense quantity of; alcohol, hard drugs, clothes, electronic devices, huge amounts of cash, jewels and precious metals looted from the outside world. - <br><br><div style="margin-left:2em"> - As you approach, The Colonel - <<if random(0,100) > 50>> - raises a hand in greeting and nods. She is sprawled on a couch, wearing only her combat suit tank top and fingerless gloves. She's holding a near-empty bottle of strong liquor in her hand and you can see a naked slave girl kneeling on the floor between her legs. The Colonel has her legs wrapped tightly around the girl's head, forcing the girl to service her if she wants to breathe. The Colonel is close to her climax then suddenly tenses her lower body thus gripping the girl even tighter and throws her head back in ecstasy as she orgasms. She lets out a long breath finally releasing the girl, giving her a hard smack and shouting at her to fuck off.<br><br> The Colonel finishes off her bottle, tossing it over her shoulder then leaning back on the couch and spreading her legs wide. You look down briefly, falling into your habits of inspection. Her pussy is completely devoid of hair with heavy labia in with a very large and hard clit peaking out. Beads of moisture, the result of her excitation, are visible, and you can tell from long experience that she would be tight as a vise. You return your gaze to her face to find her smirking at you. "Like what you see, <<print SFCR()>>?" She waves her hand at the plaza around her, "So do they. But you're not here for pussy. You're here to talk business. So, what's up?" - <<elseif random(0,100) > 50>> - 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, <<print 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, <<print 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, <<print 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 <<print 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>> - is topless while reviewing the particulars of her unit on a tablet as you approach. She raises a hand in greeting. "Hey <<print 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 $SF.Squad.Firebase === 10>> - <br>The echo of simulated gun fire and explosions can be heard from the state of the art killhouse. - The quite hum of fans keeping the faster and much more efficient custom network operational can be heard throughout the firebase.<br> - <</if>> -<</if>> - -<br>__Current facilities status:__ -<br>''Firebase:'' <<print Firebase()>> - <br> The large dormitories are <<print TroopDec()>>. -<br><br>''Armory:'' <<print Armoury()>> -<br><br>''Drug Lab:'' <<print Drugs()>> -<<if $SF.Squad.Firebase >= 2 && $SF.Squad.Drones > 0>> <br><br>''Drone Bay:'' <<print LUAV()>> <</if>> - -<<if _G > 0 && $SF.Squad.Firebase >= 1>> <br><br>''Garage:'' - <<if $SF.Squad.AV+$SF.Squad.TV > 0>> <br> ''Vehicles:'' - <<if $SF.Squad.AV > 0>> <br> ''Assault:'' <<print AV()>> <</if>> - <<if $SF.Squad.TV > 0>> <br> ''Transport:'' <<print TV()>> <</if>> - <</if>> - <<if $SF.Squad.PGT > 0>> <br> ''Prototype Goliath Tank:'' <<print PGT()>> <</if>> -<</if>> - -<<if $SF.Squad.Firebase >= 4>> - <<if _H > 0>> <br><br>''Hangar:'' - <<if $SF.Squad.AA+$SF.Squad.TA > 0>> <br> ''Airforce:'' - <<if $SF.Squad.AA > 0>> <br> ''Assault:'' <<print AA()>> <</if>> - <<if $SF.Squad.TA > 0>> <br> ''Transport:'' <<print TA()>> <</if>> - <</if>> - <<if $SF.Squad.SpacePlane > 0>> <br> ''Spaceplane:'' <<print SP()>> <</if>> - <<if $SF.Squad.GunS > 0>> <br> ''Gunship:'' <<print GunS()>> <</if>> - <</if>> - <<if _LB> 0>> <br><br>''Launch Bay:'' - <<if $SF.Squad.Satellite.lv > 0>> <br> ''Satellite:'' <<print Sat()>> <<if $SF.Squad.Satellite.InOrbit < 1>><br> [[Launch it into geostationary orbit|Firebase][$SF.Squad.Satellite.InOrbit = 1]]<br> //You cannot upgrade the satellite once it has been launched.//<</if>><</if>> - <<if $SF.Squad.GiantRobot > 0>> <br> ''Giant Robot'': <<print GR()>> <</if>> - <<if $SF.Squad.MissileSilo > 0>> <br> ''Cruise Missile:'' <<print ms()>> <</if>> - <</if>> -<</if>> - -<<if _NY > 0>> <br><br>''Naval Yard:'' - <<if $SF.Squad.AircraftCarrier > 0>> <br> ''Aircraft Carrier:'' <<print AC()>> <</if>> - <<if $SF.Squad.Sub > 0>> <br> ''Submarine:'' <<print Sub()>> <</if>> - <<if $SF.Squad.HAT > 0>> <br> ''Amphibious Transport:'' <<print HAT()>> <</if>> -<</if>> - -/*<<if $SF.Facility.Toggle > 0 && $SF.Facility.Active > 0>> <br><br>''$SF.Facility.Caps:'' - <<if passage() === "Firebase">> - <br> <<link "Enter the building""SF_SupportFacility">> <</link>> - <<elseif passage() === "SF_Report">> - <<include "SF_SupportFacilityReport">> - <</if>> -<</if>>*/ \ No newline at end of file diff --git a/src/SpecialForce/NamingColonel.tw b/src/SpecialForce/NamingColonel.tw index 1fca78dbcb1..33867ce92e9 100644 --- a/src/SpecialForce/NamingColonel.tw +++ b/src/SpecialForce/NamingColonel.tw @@ -1,8 +1,7 @@ :: Security Force Naming-Colonel [nobr] -<<set $nextButton = " ">> <<if ndef $NamingColonel>> <<set $NamingColonel = -1>> <</if>> -<<if $NamingColonel < 0>> +<<set $nextButton = " ">> <<if ndef $Progresss>> <<set $Progress = -1>> <</if>> +<<if $Progresss < 0>> You instruct $assistantName to announce to the arcology's citizenry that you will be making an important announcement in the near future regarding the security situation. Given the damage still present from the Daughters' attack, everyone will be tuning in. You also instruct your assistant to begin quietly investigating potential leadership figures for the force itself. - It's been a short while since you told your citizens that you were going to talk to them about their security, and by all accounts, they've turned out in force to watch your address over the arcology's internal communications system. You wake up early, relieve your frustrations on a few slaves woken out of deep sleep, and take position behind your desk. You also call over a slave and push her under your desk. The unspoken instruction is clear, and she begins enthusiastically <<if $PC.dick == 1>> sucking your cock, taking it as deep as she can without gagging. @@ -11,18 +10,12 @@ <</if>> <br><br>A blinking light tells you that the channel is open. You take a deep breath, and begin. You greet your citizens and explain that while you believe deeply in the underlying principles of the Free Cities, recent events have forced you to modify some of your views. The Old World attack from the outside and the more recent assault by the Daughters of Liberty from within has proven that some form of permanent, organized standing force is needed to ensure the personal safety of the citizen body. - <br><br>You tell them that the Old World continues to deteriorate. You tell them that it is only a matter of time before the poor, diseased, starving, and unwashed masses try their hand at invading the arcology again. You tell them that such a force would be good for business, securing trade routes and conducting slaving raids far greater in scale than those performed by private slaving corporations. And finally, to quell their greatest fear, you tell them that you would personally support the force financially. - <br><br>As you speak, you carefully monitor the citizens' opinions as indicated on their communication devices. It is uniformly positive — they know whom they have to thank for their continued survival and dominance. You also monitor your arousal given the ministrations of your slave. A few small movements on your part communicate to your citizens what is happening without being too obvious. Free Cities business etiquette respects business conducted while being subtly serviced (and your doing so during such a public and important broadcast signals how seriously you are taking it), but a climax would be seen as a serious lack of discipline. - <br><br>You finally wrap up your speech, declaring yourself Marshal of the newly-formed <<textbox "$SF.Lower" $SF.Lower "Security Force Naming-Colonel">> - <br><br>You close the link to the communication system and read a message from your assistant that appeared during the last moments of your address. In consultation with major figures in the mercenary community, a suitable candidate for day-to-day command of the new unit has been found. Your instructions were to keep you in the dark about them so as to avoid prejudgment. They are waiting outside your office. - - <br><br>[[Invite them inside|Security Force Naming-Colonel][$NamingColonel = 1]] -<<elseif $NamingColonel < 2>> - <<if $SF.Lower != "the special force">> <<set $SF.Caps = $SF.Lower.replace("the ", "The ")>> <</if>> + <br><br>[[Invite them inside|Security Force Naming-Colonel][$Progresss = 1]] +<<elseif $Progresss < 2>> <<= SFNameCapsCheck()>> The figure that enters is not what you were expecting, given your previous experiences with the mercenary groups that work with the arcology owners of the Free Cities. Most mercenaries you've worked with have been grizzled stout men, veterans of the Old World militaries that finally had too much and went private. Instead, a woman walks in. <<if $SF.Colonel.Core == "">> She strikes you as someone who is likely to be: @@ -46,9 +39,7 @@ not bothering to put on even the semi-military air (complete with salute) that most mercenaries tend to adopt when meeting new clients. <</switch>> She is very tall and wearing the pants, boots, gloves, and the tank top undershirt of a standard female combat uniform. Her bare arms and upper body are corded with muscle, and through the tank top's thin fabric you can see both the shape of her muscled abdomen and the curves of her small but perky breasts, complete with what your experience tells you are barbell nipple piercings. Her eyes are alive with intelligence, and you can see her scanning your office, clearly impressed by its opulence. Her hair is shaved close to the scalp, and her ears and nose are heavily pierced. You can make out three long, ugly scars running over top of the mottled tissue of a previous, severe burn along one side of her face, as well as numerous smaller scars and burns on her bare arms. She's been disarmed prior to meeting you; the pistol holster on her hip lies empty, as do at least three knife holsters about her person. - <br><br>Returning your gaze to her face, she crosses her arms underneath her chest, pressing her breasts up and forward. You have her measure. Given the generally patriarchal nature of both the mercenary community, and the same nature combined with the heavily sexualized lifestyle of the Free Cities, she's decided to embrace her position rather than fight it. - <br><br>"So," she begins, "you're the boss." You invite her to sit down. "No thanks, boss. Besides," <<switch $SF.Colonel.Core>> <<case "kind">> @@ -123,23 +114,16 @@ spending my R&R time with a cold beer in one hand, a few lines of coke or a stack of pills in front of me." <</switch>> A glint runs through her eyes. "Sounds like a good fucking time." - <br><br>You quickly decide she'll do. You tap a few commands on your desk's console, assigning her personal quarters on the arcology's higher levels and transferring her first stipend to her new account. You also ask her what title she wants. - <br><br>"Title?" Another short laugh. "I guess I do need one, given that I'm all official and shit now." She thinks for a moment. "I was a major before I went freelance, and I think I'd like a promotion. Colonel sounds good." You make a note of this in her file. "You people don't seal contracts with a fuck do you?" Reassuring her you don't, she laughs again. "Good. I make it a point never to fuck the boss. It's bad for business." She turns around. "Well, I guess I'd better get to it. Your helper-thing assigned me space on the lower levels for the firebase. I brought a few squads of guys I know from the old days to start, but we'll grow fast once I put the word out, I guarantee it." - - <br><br>[[Let her leave|Security Force Naming-Colonel][$NamingColonel = 2]] + <br><br>[[Let her leave|Security Force Naming-Colonel][$Progresss = 2]] <</if>> -<<elseif $NamingColonel < 3>> - <<set $nextLink = "RIE Eligibility Check",$nextButton = "Continue">> <<unset $NamingColonel>> +<<elseif $Progresss < 3>> <<set $nextLink = "RIE Eligibility Check",$nextButton = "Continue">> <<unset $Progresss>> She turns and leaves, and you chase the slave out after her. A few minutes later, a soft chime announces the arrival of a message. It's from the Colonel. - <br><br>//Hey boss, just wanted to mention something else. In your speech you said that you were going to be paying for $SF.Lower. In my mind that means it's yours, no matter what anyone else here might think. I do what you tell me to do. I make sure the troops behave as you want them to behave. I've worked for some 'nice guys' in the past, and I can do that job if you want. It's boring, but sustainable, and I'll have the $SF.Lower turning a profit and supporting the arcology in good order. But if you let me <<if $SF.Colonel.Core === "cruel">>off the leash<<else>>do what I do<</if>> and throw any Old World complaints in the trash where they belong, I promise you'll have money pouring into your coffers, even accounting for the good amounts me and my boys will pocket along the way. You'll have an empire in short order. <<if $mercenaries > 1>> Either way, I'll keep my hands off those mercs you've already installed. I figure that you've reasons for having two different death squads under contract. <</if>> - <br><br>Oh, one last thing. I know you've got some kind of grand social experiment going on up there like all the other arco owners, and that's your own deal, but I'd appreciate it if you could keep that stuff out of the new barracks. I'll have a hard time approaching potential recruits and telling them they should come live in a Roman apartment, an Egyptian temple, a goddamn Japanese teahouse, or some of the other crazy shit I've seen in the past. They're hard, nasty people, and trust me, I can tell you from experience that changing that is just not going to happen. Like I said, though, I can hold them back a bit if you like. - - <br><br>Talk to you later, boss.// + <br><br>Talk to you later, boss.// <</if>> \ No newline at end of file diff --git a/src/SpecialForce/Proposal.tw b/src/SpecialForce/Proposal.tw index 650b4aa9064..10a9998b378 100644 --- a/src/SpecialForce/Proposal.tw +++ b/src/SpecialForce/Proposal.tw @@ -1,20 +1,14 @@ :: Security Force Proposal [nobr] <<set $nextButton = " ">> <span id="result"> The Free Cities were founded on the principles of unrestrained anarcho-capitalism. To those with such beliefs, the very idea of possessing an armed force, a key tool of government control, or weapons at all, was anathema. - <br><br>In the period since, however, your citizens have seen the value in weaponry. They watched on their news-feed as some Free Cities were sacked by the armies and mobs of the Old World, driven by their hatred of the citizens' luxurious lifestyles. They've seen other Cities toppled from within, by slave conspiracies or infighting among citizen groupings with differing beliefs. They've witnessed the distressingly rapid rise of fanatical anti-slavery organizations, who would like nothing more than to see them slowly bled by their own chattel. They are learned people, and they know what happens to slaveowners who lose their power. - <br><br>They've also seen the results of your policies. Your actions towards the arming of both yourself and the arcology proved critical, and ensured their safety when the Old World came for them. And your victory over the Daughters of Liberty, who the citizens know would have executed every single one of them, has created an opportunity. If you insisted upon the creation of a standing 'special' force for the arcology, many would support you and, more importantly, nobody of note would object. - <br><br>Such a force would solve many problems. More soldiers would mean more control, which is very good for you. More soldiers would mean more security for the arcology and the approaches to it, which is very good for business. More soldiers would mean more obedience from rebellious slaves who can see how powerless they truly are, which is very good for everybody. The force would be tiny compared to the Old World militaries that still exist, but money and technology can, of course, overcome massive numerical inferiority. This being the Free Cities, they would have other uses besides security. Perhaps, in time, you could exert some manner of influence on the Old World itself. - <br><br>''This is a unique and very important opportunity'', and is possible only because of your recent victory over the Daughters. If you do not seize it, the memories and fears of your citizens will fade,and you will not be able to raise the matter again. -<<set _price = 20000>> <<if $PC.warfare >= 100>> <<set _price = _price*.5>> -<<elseif $PC.warfare >= 50||$PC.career === "arcology owner">> -<<set _price = _price*.75>> <</if>> +<<set _price = 20000>> <<if $PC.warfare >= 100>> <<set _price *= .5>> +<<elseif $PC.warfare >= 50||$PC.career === "arcology owner">> <<set _price *= .75>> <</if>> <br><<link "Prepare for an announcement.""Security Force Naming-Colonel">> <<replace "#result">> <<= SFInit()>> <<set $SF.Active = 1>><<run cashX(forceNeg(_price), "specialForces")>> <</replace>> <</link>><br>//Initial costs are @@.yellowgreen;<<print cashFormat(_price)>>@@ and upon establishment the force will have significant support costs until it is self-sufficient.// - <br><<link "The current measures are enough.""RIE Eligibility Check">> <<replace "#result">> <<set $SF.Active = 0>> <</replace>> <</link>> </span> \ No newline at end of file diff --git a/src/SpecialForce/Report.tw b/src/SpecialForce/Report.tw deleted file mode 100644 index c19f2835d46..00000000000 --- a/src/SpecialForce/Report.tw +++ /dev/null @@ -1,206 +0,0 @@ -:: SF_Report [nobr] - -<<silently>> <<= Count()>> <<set _target = 100000>> - <<if $SF.Squad.Troops > 2000>> <<set $SF.Squad.Troops = random(1955,1999)>> <</if>> - <<if $SF.Squad.Troops < 100>> <<set $SF.Squad.Troops += Math.ceil(random(2,5))>> - <<elseif $SF.Squad.Troops < 2000>> - <<if $SF.Target == "recruit">> - <<set $SF.Squad.Troops += Math.ceil(random(-1*$SF.Squad.Troops/100,0))>> - <<elseif $SF.Target == "raiding">> - <<set $SF.Squad.Troops += Math.ceil(random(-3*$SF.Squad.Troops/100,-4*$SF.Squad.Troops/100))>> - <<else>> - <<set $SF.Squad.Troops += Math.ceil(random(-2*$SF.Squad.Troops/100,-3*$SF.Squad.Troops/100))>> - <</if>> - <</if>> - <<set _SFIncome = 75000,_actionMultiplier = 1,_troopMultiplier = 1,_unitMultiplier = 1,_depravityMultiplier = 1,_SFupkeep = 0,_FNGs = 10,_Trade = 0.025,$SFUC = 0>> - <<if $SF.UC.Assign > 0>> - <<if $SF.UC.Assign < 2>> <<set $SFUC = Math.ceil($SF.Squad.Troops*.1)>> - <<else>> <<set $SFUC = Math.ceil($SF.Squad.Troops*.25)>> <</if>> - <</if>> <<set $SF.Squad.Troops-$SFUC>> - <<if $SF.Squad.Troops > 200>> <<set _Trade += 0.05*(Math.ceil($SF.Squad.Troops/100))>> - <<set _troopMultiplier = $SF.Squad.Troops/200, _SFupkeep += $SF.Squad.Troops*25>> - <<if $secExp > 0>> - <<set $authority += 25*(Math.ceil($SF.Squad.Troops/200)),$authority = Math.clamp($authority, 0, 20000)>> - <</if>> - <</if>> - - <<if $SF.Squad.Firebase > 0>> - <<set _FNGs += $SF.Squad.Firebase,_Trade += 0.5*$SF.Squad.Firebase,_unitMultiplier += 7.5*$SF.Squad.Firebase+2*Math.pow($SF.Squad.Firebase,2),_SFupkeep += 95*(10+$SF.Squad.Firebase)>> - <</if>> - <<if $SF.Squad.Armoury > 0>> - <<set _FNGs += (2*$SF.Squad.Armoury),_Trade += 0.25*$SF.Squad.Armoury,_unitMultiplier += 7.5*$SF.Squad.Armoury+2*Math.pow($SF.Squad.Armoury,2), _SFupkeep += 55*$SF.Squad.Armoury>> - <</if>> - <<if $SF.Squad.Drugs > 0>> - <<set _FNGs += $SF.Squad.Drugs,_Trade += 0.25*$SF.Squad.Drugs,_unitMultiplier += 7.5*$SF.Squad.Drugs+2*Math.pow($SF.Squad.Drugs,2),_SFupkeep += 35*$SF.Squad.Drugs>> - <</if>> - <<if $SF.Squad.Firebase >= 1>> - <<if $SF.Squad.AV > 0>> - <<set _FNGs += $SF.Squad.AV,_Trade += 0.25*$SF.Squad.AV,_unitMultiplier += 7.5*$SF.Squad.AV+2*Math.pow($SF.Squad.AV,2),_SFupkeep += 89*$SF.Squad.AV>> - <</if>> - <<if $SF.Squad.TV > 0>> - <<set _FNGs += $SF.Squad.TV,_Trade += 0.25*$SF.Squad.TV,_unitMultiplier += 7.5*$SF.Squad.TV+2*Math.pow($SF.Squad.TV,2), _SFupkeep += 89*$SF.Squad.TV>> - <</if>> - <<if $SF.Squad.PGT > 0>> - <<set _Trade += 0.25*($SF.Squad.PGT),_unitMultiplier += 15*$SF.Squad.PGT+3*Math.pow($SF.Squad.PGT,2),_SFupkeep += 100*$SF.Squad.PGT>> - <</if>> - <</if>> - <<if $SF.Squad.Firebase >= 2 && $SF.Squad.Drones > 0>> - <<set _FNGs += $SF.Squad.Drones,_Trade += 0.5*$SF.Squad.Drones,_unitMultiplier += 7.5*$SF.Squad.Drones+2*Math.pow($SF.Squad.Drones,2),_SFupkeep += 50*$SF.Squad.Drones>> - <</if>> - - <<if $SF.Squad.Firebase >= 4>> - <<if $SF.Squad.AA > 0>> - <<set _FNGs += $SF.Squad.AA,_Trade += 0.25*$SF.Squad.AA,_unitMultiplier += 7.5*$SF.Squad.AA+2*Math.pow($SF.Squad.AA,2),_SFupkeep += 100*$SF.Squad.AA>> - <</if>> - <<if $SF.Squad.TA > 0>> - <<set _FNGs += $SF.Squad.TA,_Trade += 0.25*$SF.Squad.TA,_unitMultiplier += 7.5*$SF.Squad.TA+2*Math.pow($SF.Squad.TA,2),_SFupkeep += 80*$SF.Squad.TA>> - <</if>> - <<if $SF.Squad.SpacePlane > 0>> - <<set _FNGs += $SF.Squad.SpacePlane,_Trade += 0.25*$SF.Squad.SpacePlane,_unitMultiplier += 7.5*$SF.Squad.SpacePlane+2*Math.pow($SF.Squad.SpacePlane,2),_SFupkeep += 100*$SF.Squad.SpacePlane>> - <</if>> - <<if $SF.Squad.GunS > 0>> - <<set _FNGs += $SF.Squad.GunS,_Trade += 0.25*$SF.Squad.GunS,_unitMultiplier += 12*$SF.Squad.GunS+3*Math.pow($SF.Squad.GunS,2),_SFupkeep += 70*$SF.Squad.GunS>> - <</if>> - <<if $SF.Squad.Satellite.lv > 0 && $SF.Squad.Satellite.InOrbit > 0>> - <<set _FNGs += $SF.Squad.Satellite.lv,_Trade += 0.25*$SF.Squad.Satellite.lv,_unitMultiplier += 15*$SF.Squad.Satellite.lv+5*Math.pow($SF.Squad.Satellite.lv,2),_SFupkeep += 85*$SF.Squad.Satellite.lv>> - <</if>> - <<if $SF.Squad.GiantRobot > 0>> - <<set _FNGs += $SF.Squad.GiantRobot,_Trade += 0.25*$SF.Squad.GiantRobot,_unitMultiplier += 15*$SF.Squad.GiantRobot+5*Math.pow($SF.Squad.GiantRobot,2),_SFupkeep += 95*$SF.Squad.GiantRobot>> - <</if>> - <<if $SF.Squad.MissileSilo > 0>> - <<set _Trade += 0.25*$SF.Squad.MissileSilo,_unitMultiplier += 15*$SF.Squad.MissileSilo+5*Math.pow($SF.Squad.MissileSilo,2),_SFupkeep += 100*$SF.Squad.MissileSilo>> - <</if>> - <</if>> - - <<if $SF.Squad.AircraftCarrier > 0>> - <<set _FNGs += $SF.Squad.AircraftCarrier,_Trade += 0.25*$SF.Squad.AircraftCarrier,_unitMultiplier += 9*$SF.Squad.AircraftCarrier+3*Math.pow($SF.Squad.AircraftCarrier,2),_SFupkeep += 80*$SF.Squad.AircraftCarrier>> - <</if>> - <<if $SF.Squad.Sub > 0>> - <<set _FNGs += $SF.Squad.Sub,_Trade += 0.25*$SF.Squad.Sub,_unitMultiplier += 7.5*$SF.Squad.Sub+2*Math.pow($SF.Squad.Sub,2),_SFupkeep += 90*$SF.Squad.Sub>> - <</if>> - <<if $SF.Squad.HAT > 0>> - <<set _Trade += 0.25*$SF.Squad.HAT,_unitMultiplier += 7.5*$SF.Squad.HAT+2*Math.pow($SF.Squad.HAT,2),_SFupkeep += 70*$SF.Squad.HAT>> - <</if>> - - <<set _SFD = $SF.Depravity>> - <<switch $SF.Colonel.Core>> - <<case "kind">> - <<set _FNGs += 10,_Trade += 0.15,_SFD -= 0.15>> - <<case "cruel">> - <<set _Trade -= 0.15,_SFD += 0.15>> - <<case "brazen">> - <<set _FNGs += 15,_unitMultiplier += 0.5>> - <<case "jaded">> - <<set _Trade -= 0.05,_SFD += 0.05>> - <<case "shell shocked">> - <<set _Trade += 0.05,_SFD -= 0.05,_unitMultiplier -= 0.5>> - <</switch>> - <<if $SF.Target == "raiding">> <<set _SFD += 0.05,_actionMultiplier += 0.5>> - <<elseif $SF.Target == "secure">> <<set _SFD -= 0.05,_actionMultiplier += 0.2>> - <<else>> <<set _SFD -= 0.1,_actionMultiplier -= 0.5>> <</if>> - <<if $SF.ROE == "free">> <<set _actionMultiplier *= 0.8,_SFD += 0.05,_Trade += _Trade*.95>> - <<elseif $SF.ROE == "hold">> <<set _actionMultiplier *= 1.1,_SFD -= 0.05,_Trade += _Trade*1.05>> <</if>> - <<if $SF.Regs == "none">> <<set _actionMultiplier *= 0.8,_SFD += 0.05,_Trade += _Trade*.95>> - <<elseif $SF.Regs == "strict">> <<set _actionMultiplier *= 1.1,_SFD -= 0.05,_Trade += _Trade*1.05>> <</if>> - <<set _depravityMultiplier = 1+_SFD>> - <<if _SFD > -2>> <<set _Trade *= 1+_SFD/2>> <</if>> - - <<if $SF.Target == "recruit">> <<set _FNGs += Math.ceil((_FNGs)*.95)>> - <<else>> <<set _FNGs += Math.ceil((_FNGs)*.25)>> <</if>> - <<if $SF.Target == "secure">> <<set $rep += Math.ceil($rep*((_Trade/100)*.95))>> - <<set $arcologies[0].prosperity = Math.ceil(($arcologies[0].prosperity+(_Trade/10)*.95))>> - <<else>> <<set $rep += Math.ceil($rep*((_Trade/100)*.25))>> - <<set $arcologies[0].prosperity = Math.ceil(($arcologies[0].prosperity+(_Trade/10)*.25))>> - <</if>> - <<if $secExp > 0>> <<set $authority += $SF.Size*10,$authority = Math.clamp($authority, 0, 20000)>> <</if>> - - <<set _SFIncome += Math.ceil((_SFIncome*(_troopMultiplier/5*_unitMultiplier/5*_actionMultiplier/5*_depravityMultiplier))-_SFupkeep),$SF.Squad.Troops += Math.round(_FNGs/2)>> - /*Remove below line if hard mode ever gets fixed*/ - <<if $economy < 100>> <<set _SFIncome = Math.ceil(_SFIncome*(1+($week/100)))>> <</if>> - <<if $SF.Squad.Troops > 2000>> <<set $SF.Squad.Troops = random(1955,1999)>> <</if>> - <<if $rep > 20000>> <<set $rep = 20000>> <</if>> - <<if $arcologies[0].prosperity > $AProsperityCap>> - <<set $arcologies[0].prosperity = $AProsperityCap>> <</if>> - <<if _SFIncome >= _target>> - <<set _Profitable = 1,$SF.Subsidy = 0>> - <<run cashX(_SFIncome, "specialForces")>> - <<else>> <<set _Profitable = 0>> <</if>> - - <<if $SF.Squad.Drugs >= 8 || $SF.Squad.Drugs >= 10>> <<set _Deaths = 0,_SurvivalChance = 50>> - <<if $SF.Squad.Drugs >= 8>> <<set _SurvivalChance -= 5>> <<elseif $SF.Squad.Drugs >= 10>> - <<set _SurvivalChance += 5>> <</if>> - <<if random(0,100) > _SurvivalChance>> - <<set _Deaths = random(0,(($SF.Squad.Drugs*2)+4))>> <</if>> - <<if _Deaths > 0>> <<set $SF.Squad.Troops -= _Deaths>> <</if>> - <</if>> -<</silently>> -<br><br>__Status and Activities of $SF.Lower __: -<br>This week, $SF.Lower focused their <<print commaNum($SF.Squad.Troops)>> troops on -<<if $SF.Target === "recruit">> - recruiting and training more personnel. Smaller parties ventured out to protect the arcology's trade routes and strike targets of opportunity. -<<elseif $SF.Target === "secure">> - securing the trade routes between the arcology and the surrounding area. Smaller parties ventured out to strike targets of opportunity and process new recruits. -<<else>> - locating and striking targets of opportunity, capturing both material loot and new slaves. Smaller parties secured the most important of the arcology's trade routes and processed new recruits. -<</if>> -<<if $SF.UC.Assign > 0>> <br>A <<if $SF.UC.Assign <2>>small<<else>>large<</if>> portion of the force was assigned as <<if $SF.UC.Assign <2>>part<<else>>full<</if>> time undercover officers.<</if>> - -<<if _Deaths > 0>> -<<print (_Deaths)>> soldiers fatally overdosed on the drug cocktail - <<if $SF.MercCon.CanAttend === -1>> - , The Colonel's much heavier than average drug use saves her from this side effect - <</if>>. -<</if>> -These activities have, overall, @@.green;improved@@ your arcology's prosperity. -The goods procured by the $SF.Lower this week, after accounting for the spoils retained by individual soldiers were -<<if _Profitable>> - @@.green;more than sufficient@@ to cover expenses. Excess material and human assets totaling @@.yellowgreen;<<print cashFormat(_SFIncome)>>@@ (after liquidation) were transferred to your accounts. -<<else>> - @@.red;barely enough@@ to cover expenses. More growth will be needed to ensure profitability. - <<print SFC()>> estimates that an additional @@.yellowgreen;<<print cashFormat(_target-_SFIncome)>>@@ is required to sufficiently cover operating expenses. -<</if>> -$SF.Caps managed to recruit <<print Math.round(_FNGs/2)>> new soldiers this week, and your reputation has @@.green;increased@@ through the improvement of trade security. - -<br> //Your instructions to <<print SFC()>>:// -<br> Deployment focus: - <span id="focus"> <<if $SF.Target == "recruit">> ''Recruiting and Training''<<elseif $SF.Target == "secure">> ''Securing Trade Routes''<<else>> ''Raiding and Slaving''<</if>></span>. - <<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>> -<br> Rules of Engagement: - <span id="roe"> <<if $SF.ROE === "hold">> ''Hold Fire''<<elseif $SF.ROE === "limited">> ''Limited Fire''<<else>> ''Free Fire''<</if>></span>. - <<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>> -<br> Accountability: - <span id="accountability"> <<if $SF.Regs === "strict">> ''Strict Accountability''<<elseif $SF.Regs === "some">> ''Some Accountability''<<else>>''No Accountability''<</if>></span>. - <<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 $SF.MercCon.View > 0 && $SF.MercCon.CanAttend === 1>> <br>''TradeShow'': - <<set $SF.MercCon.Income = 0,$SF.MercCon.Menials = 0>> - <<set _TradeShowAttendes = 200,_MenialSlavesPerAttendee = 5>> - <<set _MenialSlaves = Math.ceil(random(1,((_TradeShowAttendes*_MenialSlavesPerAttendee)/10)))>> - <<set _TSProfit = Math.ceil(500000*(1+($SF.Size/1000))*(1+($arcologies[0].prosperity/1000))*_Env)>> - During a break, The Colonel managed to sell some generic schematics to the _TradeShowAttendes attendees, some decided to also give her some menial slaves as a bonus.<br> - <<set $menials += _MenialSlaves>> - <<set $SF.MercCon.Menials += _MenialSlaves,$SF.MercCon.TotalMenials += _MenialSlaves>> - <<set $SF.MercCon.Income += _TSProfit>> - <<run cashX(_TSProfit, "specialForces")>> - <<set $SF.MercCon.Revenue += _TSProfit>> - <<if $secExp > 0 && $mercenaries > 0>> <<set $SF.MercCon.Mercs = 0>> - <<set _NewMercs = random(1,(_TradeShowAttendes/10))>> - <<set $mercFreeManpower += _NewMercs,$SF.MercCon.TotalMercs += _NewMercs>> - <<set $SF.MercCon.Mercs += _NewMercs>> - <</if>> <<set $SF.MercCon.History += 1>> -<</if>> <<if $SF.UC.Assign === 1 && !$SF.UC.Lock>> <<set $SF.UC.Assign = 0>> <</if>> -<<set $SF.Upgrade = 0,$SF.Gift = 0,$SF.Colonel.Talk = 0,$SF.Colonel.Fun = 0>> \ No newline at end of file diff --git a/src/SpecialForce/SpecialForce.js b/src/SpecialForce/SpecialForce.js index 7893882dee7..9e1ab3ce960 100644 --- a/src/SpecialForce/SpecialForce.js +++ b/src/SpecialForce/SpecialForce.js @@ -1,21 +1,26 @@ -/*SecForceEX JS V = SugarCube.State.variables, T = SugarCube.State.temporary;*/ +//V=SugarCube.State.variables, T=SugarCube.State.temporary; +window.SFNameCapsCheck = function() { + const V=State.variables; + if (V.SF.Lower != "the special force") V.SF.Caps=V.SF.Lower.replace("the ", "The "); +}; + 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)>>`;} + if (V.SF.Facility.LCActive > 0) {return `Lieutenant Colonel ${SlaveFullName(V.SF.Facility.LC)}`;} else {return `a designated soldier`;}} }; 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.TroopDec = function() { - const V = State.variables, commom = "the <<print commaNum($SF.Squad.Troops)>> members of $SF.Lower", S = V.SF.Squad; + const V=State.variables, commom="the ${commaNum(V.SF.Squad.Troops)} members of ${V.SF.Lower}", S=V.SF.Squad; if (S.Troops < 100) {return `sparsely occupied, ${commom} 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 `lightly occupied, with ${commom} starting to spread out across them`;} else if (S.Troops < 800) {return `moderately occupied, though ${commom} residing within have a considerable amount of extra room`;} @@ -23,410 +28,397 @@ window.TroopDec = function() { else {return `near capacity, and ${commom} often barter their personal loot, whether it be monetary or human, for the choicest bunks`;} }; -window.HSM = function() { - const V = State.variables; - if (V.PC.hacking <= -100) {return 1.5;} - else if (V.PC.hacking <= -75) {return 1.35;} - else if (V.PC.hacking <= -50) {return 1.25;} - else if (V.PC.hacking <= -25) {return 1.15;} - else if (V.PC.hacking < 0) {return 1.10;} - else if (V.PC.hacking === 0) {return 1;} - else if (V.PC.hacking <= 10) {return 0.97;} - else if (V.PC.hacking <= 25) {return 0.95;} - else if (V.PC.hacking <= 50) {return 0.90;} - else if (V.PC.hacking <= 75) {return 0.85;} - else if (V.PC.hacking <= 100) {return 0.80;} - else {return 0.75;} +window.SFUpgradeCost = function(cost,unit) { + const V=State.variables,T=State.temporary,S=V.SF.Squad; var value=0; + //return Math.ceil(cost*T.Env*(1.15+(V.SF.Size/10))*(1.15+(unit/100))*HSM()); + 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); }; -window.Count = function() { - const V = State.variables, T = State.temporary, C = Math.clamp, S = V.SF.Squad, E = V.economy; - T.SFF = V.SF.Facility.Active; - T.SFFU = 1,T.SFF = C(T.SFF, 0, T.SFFU); - 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 += T.SFF, T.max += T.SFFU; +window.HSM = function() { + switch(State.variables.PC.hacking) { + case '<= -100': return `1.5`; + case '<= -75': return `1.35`; + case '<= -50': return `1.25`; + case '<= -25': return `1.15`; + case '< 0': return `1.10`; + case '=== 0': return `1`; + case '<= 10': return `.97`; + case '<= 25': return `.95`; + case '<= 50': return `.90`; + case '<= 75': return `.85`; + case '<= 100': return `.80`; + case '> 100': return `.75`; } +}; - if (V.terrain !== "oceanic") { T.LBU += T.GRU, T.LB += S.GiantRobot, T.Base += T.G, T.max += T.GU; - T.max += T.LBU, T.Base += T.LB;} - if (V.terrain === "oceanic" || V.terrain === "marine") { - 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, 0, T.max); - if (E > 100) {T.Env = 4;} - else if (E > 67) {T.Env = 3;} - else {T.Env = 2;} - T.ColonelCashBonus = 10000; T.inviTroop = 100; - T.TroopCashBonus = T.inviTroop*S.Troops; - T.SFCashBonus = ((T.ColonelCashBonus+(T.TroopCashBonus))*T.Env); +window.Count = function() { + const V=State.variables, T=State.temporary, C=Math.clamp, S=V.SF.Squad, E=V.economy; + T.SFF=V.SF.Facility.Active; + T.SFFU=1; T.SFF=C(T.SFF, 0, T.SFFU); + 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 += T.SFF; T.max += T.SFFU; } + + 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, 0, T.max); + if (E > 100) {T.Env=4;} + else if (E > 67) {T.Env=3;} + else {T.Env=2;} + T.SFSubsidy=5000*(1+((V.SF.Squad.Troops/100)+(V.SF.Size/100))); + SFNameCapsCheck(); }; window.Firebase = function() { - const V = State.variables, S = V.SF.Squad; - var 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 = ``; + const V=State.variables, S=V.SF.Squad; + var appear=`is currently constructed in a haphazard fashion.`; var barracks=`Soldiers' cots are mixed in with weapons crates and ammunition.`; var slave=`Cages for processing slaves lie off to one side,`; var common=`and in the center is a common area with tables for soldiers to gather around for meals or rowdy conversations.`; var garage=``; var drone=``; var hangar=``; var launch=``; var artillery=``; var comms=``; var training=``; - 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 (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 >= 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.`; + 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 (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 $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.`; + 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.`; return `The firebase ${appear} ${barracks} ${comms} ${training} ${slave} ${common} ${garage}${drone} ${hangar} ${launch} ${artillery}`; }; window.Armoury = function() { - const V = State.variables, S = V.SF.Squad; - var weapons = `The weapons are mostly worn rifles that have already seen years of service before $SF.Lower acquired them.`, armor = `The body armor is enough to stop smaller calibers, but nothing serious.`, comms = ``, helmets = ``, ammo = ``, uniforms = ``, special = ``, exo = ``; - - if (S.Armoury >= 1) comms = `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) ammo = `Tactical vests have been provided, allowing soldiers to carry additional ammo.`; - if (S.Armoury >= 4) armor = `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 $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 breatheable fabric to keep soldiers from overheating.`; - if (S.Armoury >= 7) special = `Specialized weaponry is available for various 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 $SF.Lower, far outpacing the ability of rival mercenary outfits.`; + const V=State.variables, S=V.SF.Squad; + var weapons=`The weapons are mostly worn rifles that have already seen years of service before ${V.SF.Lower} acquired them.`; var armor=`The body armor is enough to stop smaller calibers, but nothing serious.`; var comms=``; var helmets=``; var ammo=``; var uniforms=``; var special=``; var exo=``; + + if (S.Armoury >= 1) comms=`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) ammo=`Tactical vests have been provided, allowing soldiers to carry additional ammo.`; + if (S.Armoury >= 4) armor=`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 breatheable fabric to keep soldiers from overheating.`; + if (S.Armoury >= 7) special=`Specialized weaponry is available for various 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 `The armory holds soldiers' weapons and gear while not in training or combat. ${weapons} ${special} ${armor} ${comms}${helmets} ${ammo} ${uniforms} ${exo}`; }; window.Drugs = function() { - const V = State.variables, S = V.SF.Squad; - var amphet = ``, phen = ``, steroid = ``, downer = ``, concen = ``, stimpack = ``, stabilizer = ``; - - if (S.Drugs >= 1) 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 `A drug lab has been established to increase the effectiveness of $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}`; + const V=State.variables, S=V.SF.Squad; + var amphet=``; var phen=``; var steroid=``; var downer=``; var concen=``; var stimpack=``; var stabilizer=``; + + if (S.Drugs >= 1) 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 `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}`; }; window.LUAV = function() { - const V = State.variables, S = V.SF.Squad; - var a = `have been recommissioned for use by $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.`; + const V=State.variables, S=V.SF.Squad; + var a=`have been recommissioned for use by ${V.SF.Lower}`; var b=`.`; var c=``; var d=``; var e=``; var f=``; var g=``; var h=``; var i=``; var j=``; var 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 `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}`; }; window.AV = function() { - const V = State.variables, S = V.SF.Squad; - var b = `has been recommissioned for use by $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.`, engine = ``, armor = ``, armor2 = ``, ammo = ``, mg = ``, fireC0 = ``, fireC1 = ``, fireC2 = ``, fireC3 = ``, turret = ``; - - if (S.AV >= 2) engine = `The engine has been overhauled, allowing much faster maneuvering around the battlefield.`, b = ``, c = ``; - if (S.AV >= 3) armor = `A composite ceramic armor has replaced the original, offering much greater protection from attacks.`; - if (S.AV >= 4) ammo = `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) armor2 = `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.`; + const V=State.variables, S=V.SF.Squad; + var b=`has been recommissioned for use by ${V.SF.Lower}. They`; var c=`; var mechanics are methodically checking the recent purchases for battle-readiness`; var MG=`120 mm main gun is enough to handle the majority of opponents around the Free Cities.`; var engine=``; var armor=``; var armor2=``; var ammo=``; var mg=``; var fireC0=``; var fireC1=``; var fireC2=``; var fireC3=``; var turret=``; + + if (S.AV >= 2) engine=`The engine has been overhauled, allowing much faster maneuvering around the battlefield.`; b=``; c=``; + if (S.AV >= 3) armor=`A composite ceramic armor has replaced the original, offering much greater protection from attacks.`; + if (S.AV >= 4) ammo=`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) armor2=`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 `A fleet of main battle tanks ${b} are parked in the garage${c}. ${turret} The ${MG} ${ammo} ${mg} ${fireC0} ${fireC2} ${fireC3} ${fireC1} ${engine} ${armor} ${armor2}`; }; window.TV = function() { - const V = State.variables, S = V.SF.Squad; - var B = `has been recommissioned for use by $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`, engine = ``, armor = ``, tires = ``, m1 = ``, m2 = ``, pod1 = ``, pod2 = ``; - - if (S.TV >= 2) engine = `${e0} overhauled, allowing for higher mobility.`, C = ``, B = ``; - if (S.TV >= 3) armor = `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`, armor = ``, 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) engine = `${e0} replaced with the newest model, allowing the vehicle to get in and out of the conflict extremely quickly.`; + const V=State.variables, S=V.SF.Squad; + var B=`has been recommissioned for use by ${V.SF.Lower}. They`; var C=`; var mechanics are giving the new purchases a final tuneup`; var squad=`a squad`; var G1=`20`; var G2=`in a firefight`; var e0=`The engine has been`; var engine=``; var armor=``; var tires=``; var m1=``; var m2=``; var pod1=``; var pod2=``; + + if (S.TV >= 2) engine=`${e0} overhauled, allowing for higher mobility.`; C=``; B=``; + if (S.TV >= 3) armor=`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`; armor=``; 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) engine=`${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} ${engine} ${armor} ${tires} ${m1} ${m2}`; }; window.PGT = function() { - const V = State.variables, S = V.SF.Squad; - var b = `has been sold to $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`, c = ``, engines = `. 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`, armor1 = ``, armor0 = ``, cannon = ``, laser = ``, PGTframe = ``; - - if (S.PGT >= 2) c = `rests in`, b = ``, engines = ` 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) armor0 = `reinforced, increasing survivability for the crew inside.`, armor1 = `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) armor0 = `redesigned with sloping and state-of-the-art materials, allowing the Goliath to shrug off even the most advanced armor-piercing tank rounds.`; - if (S.PGT >= 9) gun1 = `firing guided projectiles`; - if (S.PGT >= 10) gun0 = `a twin-barreled railgun capable of rapidly`; + const V=State.variables, S=V.SF.Squad; + var b=`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`; var c=``; var engines=`. Two engines power the left and right sides of the tank separately, leaving it underpowered and slow`; var gun0=``; var gun1=``; var gun2=`an undersized main gun and makeshift firing system from a standard battle tank`; var armor1=``; var armor0=``; var cannon=``; var laser=``; var PGTframe=``; + + if (S.PGT >= 2) c=`rests in`; b=``; engines=` 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) armor0=`reinforced, increasing survivability for the crew inside.`; armor1=`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) armor0=`redesigned with sloping and state-of-the-art materials, allowing the Goliath to shrug off even the most advanced armor-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 ${b}${c} its own garage housing built outside the arcology. The massive bulk is spread out over 8 tracks, two for each corner of the tank${engines}. The turret is equipped with ${gun0} ${gun1} ${gun2}. ${cannon} ${armor1} ${armor0} ${laser} ${PGTframe}`; }; window.AA = function() { - const V = State.variables, S = V.SF.Squad; - var 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 $SF.Lower, enough to make up a squadron`, engines = ``, TAI = ``, lock = ``, support = ``, stealth = ``, scramble = ``, PAI = ``; - - 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.`; + const V=State.variables, S=V.SF.Squad; + var W1=`only armed`; var W2=`;`; var W3=`a poor weapon against flying targets, but enough to handle ground forces`; var group=`A small group of attack VTOL have been recommissioned for use by ${V.SF.Lower}, enough to make up a squadron`; var engines=``; var TAI=``; var lock=``; var support=``; var stealth=``; var scramble=``; var PAI=``; + + 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 `${group}. Several of the landing pads around $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}`; }; window.TA = function() { - const V = State.variables, S = V.SF.Squad; - var Num = `number`, type = `tiltrotor`, capacity = `small platoon or 15`, engines = ``, engines2 = ``, Radar = ``, Armor = ``, landing = ``, miniguns = ``, counter = ``; - - if (S.TA >= 2) engines = `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`, engines2 = `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`, engines2 = ``, engines = `The tiltrotors have been replaced with tiltjets, allowing for much greater airspeed and acceleration.`; - - return `A ${Num} of transport ${type} VTOL have been recommissioned for use by $SF.Lower. The VTOLs are resting on large pads near the base to load either a ${capacity} tons of material. ${engines} ${engines2} ${Armor} ${landing} ${counter} ${Radar} ${miniguns}`; + const V=State.variables, S=V.SF.Squad; + var Num=`number`; var type=`tiltrotor`; var capacity=`small platoon or 15`; var engines=``; var engines2=``; var Radar=``; var Armor=``; var landing=``; var miniguns=``; var counter=``; + + if (S.TA >= 2) engines=`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`; engines2=`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`; engines2=``; engines=`The tiltrotors have been replaced with tiltjets, allowing for much greater airspeed and acceleration.`; + + return `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. ${engines} ${engines2} ${Armor} ${landing} ${counter} ${Radar} ${miniguns}`; }; window.SP = function() { - const V = State.variables, S = V.SF.Squad; - var engine = `ramjet engines in the atmosphere that can reach Mach 10`, b = `has been purchased from an insolvent Old World nation. It `, shield = ``, camera = ``, efficiency = ``, camera2 = ``, drag = ``, crew = ``, engine2 = ``, skin = ``; - - if (S.SpacePlane >= 2) b = ``, 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) engine = `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`; + const V=State.variables, S=V.SF.Squad; + var engine=`ramjet engines in the atmosphere that can reach Mach 10`; var b=`has been purchased from an insolvent Old World nation. It `; var shield=``; var camera=``; var efficiency=``; var camera2=``; var drag=``; var crew=``; var engine2=``; var skin=``; + + if (S.SpacePlane >= 2) b=``; 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) engine=`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 `A prototype spaceplane ${b} rests in the hangar, its black fuselage gleaming. The craft is powered by ${engine}${engine2}. ${efficiency} ${shield} ${camera} ${camera2} ${drag} ${crew} ${skin}`; }; window.GunS = function() { - const V = State.variables, S = V.SF.Squad; - var a = `has been recommissioned for use by $SF.Lower. Currently, it `, b = ``, c = ``, 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 >= 2) b = `Infrared sensors have been added for the gunners to better pick targets.`, a = ``; - if (S.GunS >= 3) c = `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) b = `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`; + const V=State.variables, S=V.SF.Squad; + var a=`has been recommissioned for use by ${V.SF.Lower}. Currently, it `; var b=``; var c=``; var d=``; var e=`Miniguns and Gatling cannons line`; var f=`; var though the distance to ground targets renders the smaller calibers somewhat less useful`; var g=``; var h=``; var i=``; var j=``; var k=``; + + if (S.GunS >= 2) b=`Infrared sensors have been added for the gunners to better pick targets.`; a=``; + if (S.GunS >= 3) c=`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) b=`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 `A large gunship ${a} is being refueled in the hangar. ${e}${k} the port side of the fuselage${f}${j}. ${b} ${i} ${g} ${c}${h} ${d}`; }; window.Sat = function() { - const V = State.variables, S = V.SF.Squad; - var loc = `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 = ``, laser = ``, heat = ``, reactor = ``, lens = ``, kin = ``; + const V=State.variables, S=V.SF.Squad; + var loc=`An unused science satellite has been purchased from an Old World nation. While currently useless, it holds potential to be a powerful tool.`; var gyro=``; var telemetry=``; var thrusters=``; var solar=``; var surviv=``; var laser=``; var heat=``; var reactor=``; var lens=``; var kin=``; if (S.Satellite.lv >= 2) { - if (V.SF.Squad.Satellite.InOrbit < 1) {loc = `The satellite is being worked on in the Launch Bay.`;} else {loc = `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) laser = `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.`; + if (V.SF.Squad.Satellite.InOrbit < 1) {loc=`The satellite is being worked on in the Launch Bay.`;} else {loc=`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) laser=`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 `${loc} ${gyro} ${thrusters} ${telemetry} ${solar} ${reactor} ${surviv} ${laser}${heat} ${lens} ${kin}`; }; window.GR = function() { - const V = State.variables, S = V.SF.Squad; - var 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.`, armor = ``, actuator = ``, cannon = ``, heatsink = ``, ammo = ``, missile = ``; - - if (S.GiantRobot >= 2) loc = ``, armor = `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) cannon = `A custom 45 mm Gatling cannon rifle has been developed for ranged use`, ammo = `, 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) armor = ``, actuator = `Final actuator tweaks have allowed for the addition of exceptionally thick armor without any loss in speed or power.`; - if (S.GiantRobot >= 9) ammo = `, with spare ammunition drums kept along the robot's waist.`; - if (S.GiantRobot >= 10) missile = `Missile pods have been mounted on the shoulders.`; + const V=State.variables, S=V.SF.Squad; + var loc=`has been purchased from a crumbling Old World nation. It`; var power=`Large batteries mounted in oversized shoulders power the robot for up to ten minutes of use, though they make for large targets.`; var knife=`simply a 8.5 meter long knife, though additional weapons are under development.`; var armor=``; var actuator=``; var cannon=``; var heatsink=``; var ammo=``; var missile=``; + + if (S.GiantRobot >= 2) loc=``; armor=`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) cannon=`A custom 45 mm Gatling cannon rifle has been developed for ranged use`; ammo=`; 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) armor=``; actuator=`Final actuator tweaks have allowed for the addition of exceptionally thick armor without any loss in speed or power.`; + if (S.GiantRobot >= 9) ammo=`; with spare ammunition drums kept along the robot's waist.`; + if (S.GiantRobot >= 10) missile=`Missile pods have been mounted on the shoulders.`; return `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} ${armor} ${actuator} ${heatsink} The main armament is ${knife} ${cannon}${ammo} ${missile}`; }; window.ms = function() { - const V = State.variables, S = V.SF.Squad; - var a = `A cruise missile launch site has been constructed near the base of`, b = `outdated, something quickly rigged together to give the launch site something to fire in the case of an attack`, c = ``, d = ``, e = ``, f = ``, g = ``, h = ``; - - if (S.MissileSilo >= 2) b = `a modern missile`, c = `, tipped with a conventional warhead`; - if (S.MissileSilo >= 3) d = `The launch systems have been overhauled, allowing a launch within seconds of an attack order being given.`; - if (S.MissileSilo >= 4) e = `The missile engines have been tweaked, giving them a greater range.`; - if (S.MissileSilo >= 5) f = `A passive radar has been installed, allowing the missile to follow moving targets.`; - if (S.MissileSilo >= 6) a = `Several cruise missile launch sites have been constructed around`; - if (S.MissileSilo >= 7) e = `The engine has been replaced, giving the missiles greater range and supersonic speeds.`; - if (S.MissileSilo >= 8) g = `The ability to pick new targets should the original be lost has been added.`; - if (S.MissileSilo >= 9) h = `The missile now uses its remaining fuel to create a thermobaric explosion, massively increasing explosive power.`; - if (S.MissileSilo >= 10) c = ` that can be tipped with either a conventional or nuclear warhead`; + const V=State.variables, S=V.SF.Squad; + var a=`A cruise missile launch site has been constructed near the base of`; var b=`outdated, something quickly rigged together to give the launch site something to fire in the case of an attack`; var c=``; var d=``; var e=``; var f=``; var g=``; var h=``; + + if (S.MissileSilo >= 2) b=`a modern missile`; c=`; tipped with a conventional warhead`; + if (S.MissileSilo >= 3) d=`The launch systems have been overhauled, allowing a launch within seconds of an attack order being given.`; + if (S.MissileSilo >= 4) e=`The missile engines have been tweaked, giving them a greater range.`; + if (S.MissileSilo >= 5) f=`A passive radar has been installed, allowing the missile to follow moving targets.`; + if (S.MissileSilo >= 6) a=`Several cruise missile launch sites have been constructed around`; + if (S.MissileSilo >= 7) e=`The engine has been replaced, giving the missiles greater range and supersonic speeds.`; + if (S.MissileSilo >= 8) g=`The ability to pick new targets should the original be lost has been added.`; + if (S.MissileSilo >= 9) h=`The missile now uses its remaining fuel to create a thermobaric explosion, massively increasing explosive power.`; + if (S.MissileSilo >= 10) c=` that can be tipped with either a conventional or nuclear warhead`; return `${a} the arcology. The current missile armament is ${b}${c}. ${d} ${e} ${f} ${g} ${h}`; }; window.AC = function() { - const V = State.variables, S = V.SF.Squad; - var recom = `has been recommissioned from the Old World for $SF.Lower. It`, jets = `Formerly mothballed strike jets`, loc = ``, radar = ``, AA = ``, prop = ``, torp = ``, armor = ``, power = ``, scramble = ``; - - if (V.week % 6 === 0) { loc = `moored to the pier in the Naval Yard`; } else { loc = `patrolling the waters near $arcologies[0].name`; } - if (S.AircraftCarrier >= 2) radar = `The island's radar and comms have been improved.`, recom = ``; - if (S.AircraftCarrier >= 3) AA = `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) armor = `Additional armor has been added to the hull and deck.`; - if (S.AircraftCarrier >= 8) power = `The power plant has been converted to provide nuclear power.`; - if (S.AircraftCarrier >= 9) scramble = `The catapult has been converted to an electromagnetic launch system, halving the time it takes to scramble jets.`; - if (S.AircraftCarrier >= 10) jets = `Attack VTOL from the converted for carrier capability`; + const V=State.variables, S=V.SF.Squad; + var recom=`has been recommissioned from the Old World for ${V.SF.Lower}. It`; var jets=`Formerly mothballed strike jets`; var loc=``; var radar=``; var AA=``; var prop=``; var torp=``; var armor=``; var power=``; var scramble=``; + + if (V.week % 6 === 0) { loc=`moored to the pier in the Naval Yard`; } else { loc=`patrolling the waters near $arcologies[0].name`; } + if (S.AircraftCarrier >= 2) radar=`The island's radar and comms have been improved.`; recom=``; + if (S.AircraftCarrier >= 3) AA=`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) armor=`Additional armor has been added to the hull and deck.`; + if (S.AircraftCarrier >= 8) power=`The power plant has been converted to provide nuclear power.`; + if (S.AircraftCarrier >= 9) scramble=`The catapult has been converted to an electromagnetic launch system, halving the time it takes to scramble jets.`; + if (S.AircraftCarrier >= 10) jets=`Attack VTOL from the converted for carrier capability`; return `An aircraft carrier ${recom} is ${loc}. ${jets} serve as its airpower. ${scramble} ${power} ${radar} ${AA} ${torp} ${prop} ${armor}`; }; window.Sub = function() { - const V = State.variables, S = V.SF.Squad; - var recom = `has been recommissioned from the old world, and`, reactor = `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 >= 2) recom = ``, reactor = `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.`; + const V=State.variables, S=V.SF.Squad; + var recom=`has been recommissioned from the old world, and`; var reactor=`Because diesel engines provide power and breathing oxygen is kept in pressurized canisters, the sub must frequently surface.`; var reactor1=``; var cal=``; var hull=``; var tubes=``; var torpedoes=``; var sonar=``; var control=``; var missiles=``; + + if (S.Sub >= 2) recom=``; reactor=`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 `An attack submarine ${recom} is moored to the pier of the Naval Yard. ${reactor}${reactor1} ${cal} ${hull} ${tubes}${torpedoes} ${sonar} ${control} ${missiles}`; }; window.HAT = function() { - const V = State.variables, S = V.SF.Squad; - var recom = `, has been recommissioned for use by $SF.Lower. It`, tons = `200`, skirt = ``, guns = ``, guns2 = ``, fans = ``, speed = ``, turbines = ``, armor = ``, ramps = ``, HATframe = ``, loadout = ``; - - if (S.HAT >= 2) skirt = `The skirt has been upgraded to increase durability and improve cushion when traveling over uneven terrain and waves.`, recom = `,`; - 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) armor = `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.`; + const V=State.variables, S=V.SF.Squad; + var recom=`; has been recommissioned for use by ${V.SF.Lower}. It`; var tons=`200`; var skirt=``; var guns=``; var guns2=``; var fans=``; var speed=``; var turbines=``; var armor=``; var ramps=``; var HATframe=``; var loadout=``; + + if (S.HAT >= 2) skirt=`The skirt has been upgraded to increase durability and improve cushion when traveling over uneven terrain and waves.`; recom=`;`; + 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) armor=`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 `An air cushion transport vehicle, or hovercraft${recom} is parked on the pier of the Naval Yard, ready to ferry ${tons} tons of soldiers and vehicles. ${guns} ${guns2} ${fans} ${turbines} ${speed} ${skirt} ${armor} ${ramps} ${HATframe} ${loadout}`; }; window.Interactions = function() { - const V = State.variables, C = V.SF.Colonel, T = State.temporary; - var choice = ``, time = ``; - - if (V.SF.Gift > 0){ - if (V.choice == 1){ - choice = `$SF.Caps is turning over spare capital in tribute this week. `; + const V=State.variables, C=V.SF.Colonel, T=State.temporary; + var choice=``; time=``; + if (V.SF.Gift > 0) { + 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 @@.yellowgreen;<<print cashFormat(Math.ceil($CashGift))>>@@ for you, boss."`;} - else { - choice += `"We can spare@@.yellowgreen;<<print cashFormat(Math.ceil($CashGift))>>@@ in tribute this week, `; - if (V.PC.title != 1){choice += `sir."`;}else{choice += `ma'am."`;}}} - else if (V.choice == 2){ - choice = `$SF.Caps will be throwing a military parade this week. `; + 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 += `${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 @@.green;public to enjoy@@ the parade, boss."`;} - else { - choice += `"I'll have plans for an @@.green;popular parade@@ on your desk, `; - if (V.PC.title != 1){choice += `sir."`;}else{choice += `ma'am."`;}}} - else if (V.choice == 3){ - choice = `$SF.Caps will be conducting corporate sabotage on rival arcologies' businesses. `; + 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 += `${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 @@.yellowgreen;big boost,@@ boss."`;} - else { - choice += `"Your @@.yellowgreen;arcology's business prospects should see an improvement@@ this week, <<= properTitle()>>.`; - }}} - - if (C.Talk + C.Fun > 0) time = `The Colonel is busy for the rest of the week, so the Lieutenant Colonel will assist you.`; - + 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".`; } + } + } 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.ColonelQuarters = function() { - const V = State.variables, R = Math.ceil(Math.random()*100); - var out = ``; - if (R > 50){ - out = `raises a hand in greeting and nods. She is sprawled on a couch, wearing only her combat suit tank top and fingerless gloves. She's holding a near-empty bottle of strong liquor in her hand and you can see a naked slave girl kneeling on the floor between her legs. The Colonel has her legs wrapped tightly around the girl's head, forcing the girl to service her if she wants to breathe. The Colonel is close to her climax then suddenly tenses her lower body thus gripping the girl even tighter and throws her head back in ecstasy as she orgasms. She lets out a long breath finally releasing the girl, giving her a hard smack and shouting at her to fuck off.<br><br> The Colonel finishes off her bottle, tossing it over her shoulder then leaning back on the couch and spreading her legs wide. You look down briefly, falling into your habits of inspection. Her pussy is completely devoid of hair with heavy labia in with a very large and hard clit peaking out. Beads of moisture, the result of her excitation, are visible, and you can tell from long experience that she would be tight as a vise. You return your gaze to her face to find her smirking at you. "Like what you see, <<print SFCR()>>?" She waves her hand at the plaza around her, "So do they. But you're not here for pussy. You're here to talk business. So, what's up?"`; - }else if (R > 50){ - out = `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, <<print 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, <<print 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?"`; - }else if (R > 70 && V.SF.Depravity >= 1.5 && V.SF.Colonel.Core == "cruel"){ - out = `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, <<print 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 <<print 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{ - out = `is topless while reviewing the particulars of her unit on a tablet as you approach. She raises a hand in greeting. "Hey <<print 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?"`;} - return `${out}`; -}; - window.progress = function(x,max) { var out = `â`, z, i; if (max === undefined) { @@ -442,41 +434,41 @@ window.progress = function(x,max) { 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>â`;} return `${out}`; }; window.Main = function() { - const V = State.variables; - V.SF = {Toggle:V.SF.Toggle,Active:-1,Depravity:0, Bonus:0, Size:0, Upgrade:0, Gift:0, UC:{Assign:0, Lock: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}, 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:0, Income:0, Revenue:0, Menials:0, TotalMenials:0, Mercs:0, TotalMercs:0}; -} + const V=State.variables; + V.SF.MercCon={History:0, CanAttend:0, 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() { Main();Squad();Colonel();MercCon();Facility(); }; window.SFBC = function() { - const V = State.variables; + const V=State.variables; function InitClean() { delete V.SFMODToggle; delete V.securityForceActive; @@ -537,151 +529,150 @@ window.SFBC = function() { delete V.securityForceHeavyAmphibiousTransport; } - if ( (V.SF.Toggle || V.SFMODToggle) > 0 || V.SF === undefined) { - 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.SF.Active >= 1) { - Object.assign(V.SF, { - Depravity:V.securityForceDepravity, - Size:V.SFAO, - Upgrade:V.securityForceUpgradeToken, - Gift:V.securityForceGiftToken, - UC:{Assign:V.SF.SpecOps, Lock:V.SF.SpecOpsLock}, - ROE:V.securityForceRulesOfEngagement, - Target:V.securityForceFocus, - Regs:V.securityForceAccountability, - Caps:"The Special Force", - Lower:V.securityForceName, - Subsidy:V.SubsidyActive}); MainClean(); - if (V.SF.Lower !== "the special force") V.SF.Caps = V.SF.Lower.replace("the ", "The "); - - if (V.ColonelCore === undefined) V.ColonelCore = ""; - if (V.ColonelDiscussion === undefined) V.ColonelDiscussion = 0; - if (V.ColonelSexed === undefined) V.ColonelSexed = 0; - V.SF.Colonel = { - Core:V.ColonelCore, - Talk:V.securityForceColonelToken, - Fun:V.securityForceColonelSexed, - Status:V.ColonelRelationship}; ColonelClean(); - - if (V.TradeShowIncome === undefined) V.TradeShowIncome = 0; - if (V.TotalTradeShowIncome === undefined) V.TotalTradeShowIncome = 0; - if (V.TradeShowHelots === undefined) V.TradeShowHelots = 0; - if (V.TotalTradeShowHelots === undefined) V.TotalTradeShowHelots = 0; - V.SF.MercCon = { - History:V.OverallTradeShowAttendance, - CanAttend:V.CurrentTradeShowAttendance, - Income:V.TradeShowIncome, - Revenue:V.TotalTradeShowIncome, - Menials:V.TradeShowHelots, - TotalMenials:V.TotalTradeShowHelots, - Mercs:0, - TotalMercs:0}; TradeShow(); - if (V.SF.MercCon.History > 0) V.SF.MercCon.View = 1; - - if (V.securityForceHeavyBattleTank === undefined) V.securityForceHeavyBattleTank = 0; - if (V.securityForceSpacePlanePower === undefined) V.securityForceSpacePlanePower = 0; - if (V.securityForceAC130 === undefined) V.securityForceAC130 = 0; - if (V.securityForceSatellitePower === undefined) V.securityForceSatellitePower = 0; - if (V.securityForceGiantRobot === undefined) V.securityForceGiantRobot = 0; - if (V.securityForceMissileSilo === undefined) V.securityForceMissileSilo = 0; - if (V.securityForceAircraftCarrier === undefined) V.securityForceAircraftCarrier = 0; - if (V.securityForceSubmarine === undefined) V.securityForceSubmarine = 0; - if (V.securityForceHeavyAmphibiousTransport === undefined) V.securityForceHeavyAmphibiousTransport = 0; - V.SF.Squad = { - Troops:V.securityForcePersonnel, - Armoury:V.securityForceInfantryPower, - Firebase:V.securityForceArcologyUpgrades, - AV:V.securityForceVehiclePower, - TV:V.securityForceVehiclePower, - Drones:V.securityForceDronePower, - Drugs:V.securityForceStimulantPower, - PGT:V.securityForceHeavyBattleTank, - AA:V.securityForceAircraftPower, - TA:V.securityForceAircraftPower, - SpacePlane:V.securityForceSpacePlanePower, - GunS:V.securityForceAC130, - Satellite:{lv:V.securityForceSatellitePower, InOrbit:0}, - GiantRobot:V.securityForceGiantRobot, - MissileSilo:V.securityForceMissileSilo, - AircraftCarrier:V.securityForceAircraftCarrier, - Sub:V.securityForceSubmarine, - HAT:V.securityForceHeavyAmphibiousTransport}; UnitsClean(); - } else { - SFInit(); - } - Facility(); + 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.SF.Active >= 1) { + Object.assign(V.SF, { + Depravity:V.securityForceDepravity, + Size:V.SFAO, + Upgrade:V.securityForceUpgradeToken, + Gift:V.securityForceGiftToken, + UC:{Assign:V.SF.SpecOps, Lock:V.SF.SpecOpsLock}, + ROE:V.securityForceRulesOfEngagement, + Target:V.securityForceFocus, + Regs:V.securityForceAccountability, + Caps:"The Special Force", + Lower:V.securityForceName, + Subsidy:V.SubsidyActive}); MainClean(); + SFNameCapsCheck(); + + if (V.ColonelCore === undefined) V.ColonelCore=""; + if (V.ColonelDiscussion === undefined) V.ColonelDiscussion=0; + if (V.ColonelSexed === undefined) V.ColonelSexed=0; + V.SF.Colonel={ + Core:V.ColonelCore, + Talk:V.securityForceColonelToken, + Fun:V.securityForceColonelSexed, + Status:V.ColonelRelationship}; ColonelClean(); + + if (V.TradeShowIncome === undefined) V.TradeShowIncome=0; + if (V.TotalTradeShowIncome === undefined) V.TotalTradeShowIncome=0; + if (V.TradeShowHelots === undefined) V.TradeShowHelots=0; + if (V.TotalTradeShowHelots === undefined) V.TotalTradeShowHelots=0; + V.SF.MercCon={ + History:V.OverallTradeShowAttendance, + CanAttend:V.CurrentTradeShowAttendance, + Income:V.TradeShowIncome, + Revenue:V.TotalTradeShowIncome, + Menials:V.TradeShowHelots, + TotalMenials:V.TotalTradeShowHelots, + Mercs:0, + TotalMercs:0}; TradeShow(); + if (V.SF.MercCon.History > 0) V.SF.MercCon.View=1; + + if (V.securityForceHeavyBattleTank === undefined) V.securityForceHeavyBattleTank=0; + if (V.securityForceSpacePlanePower === undefined) V.securityForceSpacePlanePower=0; + if (V.securityForceAC130 === undefined) V.securityForceAC130=0; + if (V.securityForceSatellitePower === undefined) V.securityForceSatellitePower=0; + if (V.securityForceGiantRobot === undefined) V.securityForceGiantRobot=0; + if (V.securityForceMissileSilo === undefined) V.securityForceMissileSilo=0; + if (V.securityForceAircraftCarrier === undefined) V.securityForceAircraftCarrier=0; + if (V.securityForceSubmarine === undefined) V.securityForceSubmarine=0; + if (V.securityForceHeavyAmphibiousTransport === undefined) V.securityForceHeavyAmphibiousTransport=0; + V.SF.Squad={ + Troops:V.securityForcePersonnel, + Armoury:V.securityForceInfantryPower, + Firebase:V.securityForceArcologyUpgrades, + AV:V.securityForceVehiclePower, + TV:V.securityForceVehiclePower, + Drones:V.securityForceDronePower, + Drugs:V.securityForceStimulantPower, + PGT:V.securityForceHeavyBattleTank, + AA:V.securityForceAircraftPower, + TA:V.securityForceAircraftPower, + SpacePlane:V.securityForceSpacePlanePower, + GunS:V.securityForceAC130, + Satellite:{lv:V.securityForceSatellitePower, InOrbit:0}, + GiantRobot:V.securityForceGiantRobot, + MissileSilo:V.securityForceMissileSilo, + AircraftCarrier:V.securityForceAircraftCarrier, + Sub:V.securityForceSubmarine, + HAT:V.securityForceHeavyAmphibiousTransport}; UnitsClean(); } else { - 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.SF.UC === undefined) { - if (V.SF.SpecOps != undefined && V.SF.SpecOpsLock != undefined) { - V.SF.UC = {Assign:V.SF.SpecOps, Lock:V.SF.SpecOpsLock}; delete V.SF.SpecOps; - delete V.SF.SpecOpsLock; - } else if (V.SF.UC == {}) { - 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.MercCon != undefined) { - V.SF.MercCon.Menials = V.SF.MercCon.Helots; - V.SF.MercCon.TotalMenials = V.SF.MercCon.TotalHelots; - delete V.SF.MercCon.Helots;delete V.SF.MercCon.TotalHelots; + SFInit(); + } } else { - MercCon(); - } - - if (V.SF.Facility === undefined) Facility(); - if (V.SF.Bonus === undefined) V.SF.Bonus = 0; - 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.SFUnit !== undefined) { - if (V.SFUnit.AT !== undefined) delete V.SFUnit.AT; V.SFUnitTA = 0; - V.SF.Squad = V.SFUnit; delete V.SFUnit; - V.SF.Squad.Sat = {lv:V.SF.Squad.Satellite, InOrbit:V.SatLaunched}; - delete V.SatLaunched; - 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) { - delete V.SFUnit; V.SF.Squad.Sat = {lv:0, InOrbit:0}; - delete V.SatLaunched; V.SF.Squad.Satellite = V.SF.Squad.Sat; delete V.SF.Squad.Sat; - } + 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.SF.UC === undefined) { + if (V.SF.SpecOps != undefined && V.SF.SpecOpsLock != undefined) { + V.SF.UC={Assign:V.SF.SpecOps, Lock:V.SF.SpecOpsLock}; delete V.SF.SpecOps; + delete V.SF.SpecOpsLock; + } else if (V.SF.UC == {}) { + V.SF.UC={Assign:0, Lock:0}; } - 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; + } + 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; + 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; + 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.SFUnit !== undefined) { + if (V.SFUnit.AT !== undefined) delete V.SFUnit.AT; V.SFUnitTA=0; + V.SF.Squad=V.SFUnit; delete V.SFUnit; + V.SF.Squad.Sat={lv:V.SF.Squad.Satellite, InOrbit:V.SatLaunched}; + delete V.SatLaunched; + 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) { + delete V.SFUnit; V.SF.Squad.Sat={lv:0, InOrbit:0}; + delete V.SatLaunched; V.SF.Squad.Satellite=V.SF.Squad.Sat; delete V.SF.Squad.Sat; } } + 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; + } } if (V.securityForceName !== undefined) InitClean(); MainClean(); ColonelClean(); TradeShowClean(); UnitsClean(); + if (V.SF.Facility === undefined) Facility(); }; window.BadOutcome = function() { - const V = State.variables,t = `The Colonel's`; var r =``;V.SF.Active = -2; + const V=State.variables,t=`The Colonel's`; var r =``;V.SF.Active=-2; switch(V.SF.Colonel.Core) { case "Shell-Shocked": - V.SF.BadOutcome = "lockdown",V.trinkets.push("${t} explosives detonator"); + 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"),V.Rep = 0, - 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; + V.SF.BadOutcome="Revolt"; V.trinkets.push("${t} dog tags"); V.Rep=0; + 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.`; break; case "Cruel and Psychopathic": - V.SF.BadOutcome = "Revolt",V.trinkets.push("${t} dog tags"),V.Rep = 0; + V.SF.BadOutcome="Revolt"; V.trinkets.push("${t} dog tags"); V.Rep=0; 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.`; @@ -696,14 +687,471 @@ 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.`; - r += `<br>Upon your inspection of the abandoned firebase itself, most of the heavier installations have been dismantled and carried away, but about 55,000# of miscellaneous supplies and 73 menials have been left behind, presumably because the convoy had no space for them. On The Colonel's old pavilion, you see a white gift card standing upright.`; + r += `<br>Upon your inspection of the abandoned firebase itself, most of the heavier installations have been dismantled and carried away, but about ${cashFormat(55000)} in miscellaneous supplies and 73 menials have been left behind, presumably because the convoy had no space for them. On The Colonel's old pavilion, you see a white gift card standing upright.`; r += `<br>When you climb the crates to take it and read it, you see The Colonel's handwritten sentiments about the way things turned out; her gratitude for taking her in when you did, her disappointment in your actions, a detailed account of your failings, her regrets that things had to end this way, and finally, her well wishes for your future endeavors.`; r += `<br>Disgusted, you pocket the gift card and leave your employees and menials to gather up the valuables here before stalking back to your Penthouse. The former Firebase is returned to being a warehouse facility.`; break; } -} \ No newline at end of file +}; + +window.FlavourText = function() { + const V=State.variables,T=State.temporary,S=V.SF.Squad; + var r=``; + V.nextButton=" "; r += `<br>`; + r += `You continue towards the common area, the soldiers you pass, nod respectfully, salute, or bow slightly, as they please.`; + r +=`You pass the briefing areas, the officers and sergeants of the force are conferring over planning tables and display screens regarding their upcoming deployments.`; + r += `<br><br><div style="margin-left:2em">The commanders are`; if (V.SF.Target === "recruit") { + r += `viewing lists of potential recruits for ${V.SF.Lower}. Mainly mercenaries and Old World soldiers who might be receptive to an offer of employment and residence within the arcology, in addition to some citizens of the arcology who wish to have some excitement in their lives.`; + } else if (V.SF.Target === "secure") { + r += `reviewing maps of trade routes to the arcology as well as nearby merchant hubs, arranging their future deployments to best protect them and encourage business and trade.`; + } else { + r += `reviewing maps of settlements and locations reported to have choice concentrations of material loot and potential slave stock, in preparation for their coming raids.`; + } r += `</div>`; + r += `<div style="margin-left:2em">`; if (V.SF.ROE === "hold") { + r += `There are posted (and very strict) guidelines for the use of force against non-citizen residents, forbidding the use of heavy weapons or indiscriminate fire.`; + } else if (V.SF.ROE === "limited") { + r += `There are some guidelines posted regarding the use of force against non-citizens, forbidding general indiscriminate fire.`; + } else { + r += `Guidelines regarding the use of force are completely absent from the deployment information screens. A note affixed to the screen, probably from a soldier, says: "Pop 'em if you see 'em — better than target practice!" Another one on top of that, from The Colonel, says: "Don't shoot the pretty ones, you fucking morons, or I'll kill you myself. They're worth good money or good for fun — do you idiots really want to have to fuck month-old stock?"`; + } r += `</div>`; + r += `<div style="margin-left:2em">`; if (V.SF.Regs === "strict") { + r += `On several screens, there are prominent warnings regarding the severe disciplinary procedures that will be taken against soldiers who commit crimes while on deployment.`; + } else if (V.SF.Regs === "some") { + r += `On several screens, there are some minor warnings regarding the mild disciplinary procedures that may be taken against soldiers who commit especially severe crimes while on deployment.`; + } else { + r += `There are no warnings or information regarding disciplinary procedures on any of the screens. Near one of them, a waste basket has been dragged over and a soldier has posted a note above it that says: "For Old World Complaints and Warrants."`; + } r += `</div>`; + + r += `<br>You arrive at the firebase's common area, a nest of bars, pleasure dens, public spaces, and other facilities catering to the soldiers' needs and giving them somewhere to spend their free time, since they do not mingle with your citizens on the higher levels or exit the arcology except on deployment. It is well-occupied by the soldiers not currently tasked with duties, and they respectfully move out of your way as you approach, clearing a path for you to move forward.`; + r += `<br><br><div style="margin-left:2em">`; + r += `The amenities are staffed by menial slaves, captured by the soldiers on their excursions. They are`; + if (V.SF.Depravity <= 0.3 && V.SF.Colonel.Core === "kind") { + r += `wearing plain jumpsuits and slim identification collars to set them apart from the soldiers, and look resigned but not fearful. The soldiers themselves socialize at the bars, in small groups around tables, and in the gambling parlors. Many of them can be seen entering or leaving the dens occupied by the sexual slaves they have acquired. Laughter from the carousing soldiers can be heard at all times. Small groups of slaves move freely between the plaza and their basic accommodations attached to the firebase.`; + } else if (V.SF.Depravity <= 0.6 && V.SF.Colonel.Core === "kind") { + r += `topless, wearing only utilitarian pants and leather collars to set them apart from the soldiers, and occasionally shoot fearful looks at the soldiers. The soldiers themselves socialize at the bars, or in large groups around tables, leering at and groping slaves of interest as they pass by. Many of them can be seen entering or leaving the dens occupied by the sexual slaves they have acquired, and often emerge only partially dressed, sometimes pulling half-naked slaves out with them.`; + } else if (V.SF.Depravity <= 0.9) { + r += `topless, wearing only utilitarian shorts and steel collars to set them apart from the soldiers, and often shoot fearful looks at the soldiers. The soldiers themselves socialize at the bars, or in large groups around tables, leering at and heavily groping slaves of interest as they pass by. Many of them can be seen entering or leaving the dens occupied by the sexual slaves they have acquired, and often emerge stark naked, sometimes pulling naked slaves out with them for one last servicing in public. A few soldiers stagger around in drunken hazes or drugged-out stupors.`; + } else if (V.SF.Depravity <= 1.2) { + r += `topless, wearing only a single undergarment and heavy steel collars to set them apart from the soldiers, and often shoot fearful looks at the soldiers. The soldiers occupy themselves primarily with sex, pulling slaves onto benches and fucking them hard in public. Many soldiers stagger around or lie passed out from drug and alcohol abuse.`; + } else if (V.SF.Depravity >= 1.5 && (V.SF.Colonel.Core === "Warmonger" || V.SF.Colonel.Core !== "Shell Shocked") ) { + r += `To a one, they are naked, and are wearing heavy shock collars to force obedience. Most are wild-eyed with fear or dull-eyed from mental collapse, and many others bear marks of abuse. Few of the slaves are here long-term, the depraved pleasures of the soldiers resulting in enormous turnover and loss of 'damaged' stock. The extreme libations of the soldiers are ever-present. Drunken soldiers stagger around everywhere, beating slaves too slow to get out of their way. Others lie sprawled out on the ground, rendered senseless from heavy drug abuse. Some walk around naked, and hold slaves down on the benches scattered around, raping or sodomizing them with their cocks or their personal strap-ons as they desire. In alcoves, some soldier-lover pairs fuck loudly, moaning in pleasure.`; + if (jsRandom(1,100) <= 50) { + r += `Off to the side, a group of soldiers brutally gangbang a very young slave girl, with one soldier buried balls-deep in her ass, another brutally sawing a barbed strap-on in and out of her pussy, and a third with his cock forced deep down her throat. The slave girl struggles and gags, desperate for breath or relief.`; + } else if (jsRandom(1,100) > 50) { + r += `Off to the side, a group of soldiers cackle amongst themselves as they take turns beating a very young slave girl with heavy batons. Sickening crunches can be heard from the screaming slave.`; + } else if (jsRandom(1,100) > 75) { + r += `Off to the side, still more soldiers crowd around an above-ground pit built from empty crates, gambling on slave gladiator fights. There's a drunken cheer as one of the fighters, a very young slave girl, straddles another one and smashes her face in with a blood-slick ammo crate. As she stands, shaking from fear and adrenaline, one of the soldiers laughs and throws a small incendiary grenade at her, changing the cheers to curses as the other soldiers jump away from the flaming, screeching slave.`; + } else { + r += `Screams and cries of pain can be heard echoing around the area as the soldiers have their fun with their property.`; + } + } + r += `</div>`; + + r += `<br>In the middle of the common area is a pile of supply crates with a pavilion on top — The Colonel's personal throne and open quarters, the result of her preferring to live an extreme lifestyle amongst her soldiers rather than in her empty quarters on the upper levels. It's draped with the 'flag' of ${V.SF.Lower}, one of her inventions. Sprawled all around it is an immense quantity of; alcohol, hard drugs, clothes, electronic devices, huge amounts of cash, jewels and precious metals looted from the outside world.`; + r += `<br><br><div style="margin-left:2em">`; + r += `As you approach, The Colonel `; + if (jsRandom(0,100) <= 50) { + r += `raises a hand in greeting and nods. She is sprawled on a couch, wearing only her combat suit tank top and fingerless gloves. She's holding a near-empty bottle of strong liquor in her hand and you can see a naked slave girl kneeling on the floor between her legs. The Colonel has her legs wrapped tightly around the girl's head, forcing the girl to service her if she wants to breathe. The Colonel is close to her climax then suddenly tenses her lower body thus gripping the girl even tighter and throws her head back in ecstasy as she orgasms. She lets out a long breath finally releasing the girl, giving her a hard smack and shouting at her to fuck off.<br><br> The Colonel finishes off her bottle, tossing it over her shoulder then leaning back on the couch and spreading her legs wide. You look down briefly, falling into your habits of inspection. Her pussy is completely devoid of hair with heavy labia in with a very large and hard clit peaking out. Beads of moisture, the result of her excitation, are visible, and you can tell from long experience that she would be tight as a vise. You return your gaze to her face to find her smirking at you. "Like what you see, ${SFCR()}?" She waves her hand at the plaza around her, "So do they. But you're not here for pussy. You're here to talk business. So, what's up?"`; + } else if (jsRandom(0,100) > 50) { + r += `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?"`; + } else if (jsRandom(0,100) > 70 && V.SF.Depravity >= 1.5 && V.SF.Colonel.Core == "cruel") { + r += `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 { + r += `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?"`; + } r += `</div>`; + if (S.Firebase === 10) { + r += `<br>The echo of simulated gun fire and explosions can be heard from the state of the art killhouse. + The quite hum of fans keeping the faster and much more efficient custom network operational can be heard throughout the firebase.<br>`; + } + + r += `<br>__Current facilities status:__`; + r += `<br>''Firebase:'' ${Firebase()}`; + r += `<br> The large dormitories are ${TroopDec()}`; + r += `<br><br>''Armory:'' ${Armoury()}`; + r += `<br><br>''Drug Lab:'' ${Drugs()}`; + if (S.Firebase >= 2 && S.Drones > 0) r += `<br><br>''Drone Bay:'' ${LUAV()}`; + + if (T.G > 0 && S.Firebase >= 1) { r += `<br><br>''Garage:''`; + if (S.AV+S.TV > 0) { r += `<br> ''Vehicles:''`; + if (S.AV > 0) r += `<br> ''Assault:'' ${AV()}`; + if (S.TV > 0) r += `<br> ''Transport:'' ${TV()}`; + } + if (S.PGT > 0) r += `<br> ''Prototype Goliath Tank:'' ${PGT()}`; + } + + if (S.Firebase >= 4) { + if (T.H > 0) { r += r += `<br><br>''Hangar:''`; + if (S.AA+S.TA > 0) { r += `<br> ''Airforce:''`; + if (S.AA > 0) r += `<br> ''Assault:'' ${AA()}`; + if (S.TA > 0) r += `<br> ''Transport:'' ${TA()}`; + } + if (S.SpacePlane > 0) r += `<br> ''Spaceplane:'' ${SP()}`; + if (S.GunS > 0) r += `<br> ''Gunship:'' ${GunS()}`; + } + if (T.LB> 0) { r += r += `<br><br>''Launch Bay:''`; + if (S.Satellite.lv > 0) { r += `<br> ''Satellite:'' ${Sat()}`; + if (S.Satellite.InOrbit < 1) r += `<br> [[Launch it into geostationary orbit|Firebase][${S.Satellite.InOrbit=1}]] <br> //You cannot upgrade the satellite once it has been launched.//`; + } + if (S.GiantRobot > 0) r += `<br> ''Giant Robot'': ${GR()}`; + if (S.MissileSilo > 0) r += `<br> ''Cruise Missile:'' ${ms()}`; + } + } + + if (T.NY > 0) { r += `<br><br>''Naval Yard:''`; + if (S.AircraftCarrier > 0) r += `<br> ''Aircraft Carrier:'' ${AC()}`; + if (S.Sub > 0) r += `<br> ''Submarine:'' ${Sub()}`; + if (S.HAT > 0) r += `<br> ''Amphibious Transport:'' ${HAT()}`; + } + + /*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()>>][]]`; + } + } else if (passage() === "SF_Report") { + <<include "SF_.SupportFacilityReport">> + } + }*/ + return r; +}; + +window.SFReport = function() { + const V=State.variables,T=State.temporary,S=V.SF.Squad; + var incomeTarget=50000,unitCap=2500,SFIncome=5000; + var actionMultiplier=1,troopMultiplier=1,unitMultiplier=1,depravityMultiplier=1,SFupkeep=0; + var FNG=10,Trade=0.025; V.SFUC=0; Count(); + if (S.Troops > unitCap) S.Troops=unitCap; + if (S.Troops < 100) { S.Troops += Math.ceil(jsRandom(2,5)); + } else { + if (V.SF.Target === "recruit") { + S.Troops += Math.ceil(jsRandom(-1*S.Troops/100,0)); + } else if (V.SF.Target === "raiding") { + S.Troops += Math.ceil(jsRandom(-3*S.Troops/100,-4*S.Troops/100)); + } else { S.Troops += Math.ceil(jsRandom(-2*S.Troops/100,-3*S.Troops/100)); } + } + if (V.SF.UC.Assign > 0) { + if (V.SF.UC.Assign < 2) { V.SFUC=Math.ceil(S.Troops*.1); + } else { V.SFUC=Math.ceil(S.Troops*.25); } + } S.Troops -= V.SFUC; + if (S.Troops > 200) { Trade += 0.05*(Math.ceil(S.Troops/100)); + troopMultiplier=S.Troops/200; SFupkeep += S.Troops*25; + if (V.secExp > 0) { + V.authority += 25*(Math.ceil(S.Troops/200)); V.authority=Math.clamp(V.authority, 0, 20000); + } + } + + if (S.Firebase > 0) { + FNG += S.Firebase; Trade += 0.5*S.Firebase; unitMultiplier += 7.5*S.Firebase+2*Math.pow(S.Firebase,2); SFupkeep += 95*(10+S.Firebase); + } + if (S.Armoury > 0) { + FNG += 2*S.Armoury; Trade += 0.25*S.Armoury; unitMultiplier += 7.5*S.Armoury+2*Math.pow(S.Armoury,2); SFupkeep += 55*S.Armoury; + } + if (S.Drugs > 0) { + FNG += S.Drugs; Trade += 0.25*S.Drugs; unitMultiplier += 7.5*S.Drugs+2*Math.pow(S.Drugs,2); SFupkeep += 35*S.Drugs; + } + if (S.Firebase >= 1) { + if (S.AV > 0) { + FNG += S.AV; Trade += 0.25*S.AV; unitMultiplier += 7.5*S.AV+2*Math.pow(S.AV,2); SFupkeep += 89*S.AV; + } + if (S.TV > 0) { + FNG += S.TV; Trade += 0.25*S.TV; unitMultiplier += 7.5*S.TV+2*Math.pow(S.TV,2); SFupkeep += 89*S.TV; + } + if (S.PGT > 0) { + FNG += S.PGT; Trade += 0.25*S.PGT; unitMultiplier += 15*S.PGT+3*Math.pow(S.PGT,2); SFupkeep += 100*S.PGT; + } + } + if (S.Firebase >= 2 && S.Drones > 0) { + FNG += S.Drones; Trade += 0.5*S.Drones; unitMultiplier += 7.5*S.Drones+2*Math.pow(S.Drones,2); SFupkeep += 50*S.Drones; + } + + if (S.Firebase >= 4) { + if (S.AA > 0) { + FNG += S.AA; Trade += 0.25*S.AA; unitMultiplier += 7.5*S.AA+2*Math.pow(S.AA,2); SFupkeep += 100*S.AA; + } + if (S.TA > 0) { + FNG += S.TA; Trade += 0.25*S.TA; unitMultiplier += 7.5*S.TA+2*Math.pow(S.TA,2); SFupkeep += 80*S.TA; + } + if (S.SpacePlane > 0) { + FNG += S.SpacePlane; Trade += 0.25*S.SpacePlane; unitMultiplier += 7.5*S.SpacePlane+2*Math.pow(S.SpacePlane,2); SFupkeep += 100*S.SpacePlane; + } + if (S.GunS > 0) { + FNG += S.GunS; Trade += 0.25*S.GunS; unitMultiplier += 12*S.GunS+3*Math.pow(S.GunS,2); SFupkeep += 70*S.GunS; + } + if (S.Satellite.lv > 0 && S.Satellite.InOrbit > 0) { + FNG += S.Satellite.lv; Trade += 0.25*S.Satellite.lv; unitMultiplier += 15*S.Satellite.lv+5*Math.pow(S.Satellite.lv,2); SFupkeep += 85*S.Satellite.lv; + } + if (S.GiantRobot > 0) { + FNG += S.GiantRobot; Trade += 0.25*S.GiantRobot; unitMultiplier += 15*S.GiantRobot+5*Math.pow(S.GiantRobot,2); SFupkeep += 95*S.GiantRobot; + } + if (S.MissileSilo > 0) { + FNG += S.MissileSilo; Trade += 0.25*S.MissileSilo; unitMultiplier += 15*S.MissileSilo+5*Math.pow(S.MissileSilo,2); SFupkeep += 100*S.MissileSilo; + } + } + + if (S.AircraftCarrier > 0) { + FNG += S.AircraftCarrier; Trade += 0.25*S.AircraftCarrier; unitMultiplier += 9*S.AircraftCarrier+3*Math.pow(S.AircraftCarrier,2); SFupkeep += 80*S.AircraftCarrier; + } + if (S.Sub > 0) { + FNG += S.Sub; Trade += 0.25*S.Sub; unitMultiplier += 7.5*S.Sub+2*Math.pow(S.Sub,2); SFupkeep += 90*S.Sub; + } + if (S.HAT > 0) { + FNG += S.HAT; Trade += 0.25*S.HAT; unitMultiplier += 7.5*S.HAT+2*Math.pow(S.HAT,2); SFupkeep += 70*S.HAT; + } + + var SFD=V.SF.Depravity; + switch (V.SF.Colonel.Core) { + case "kind": + FNG += 10; Trade += 0.15; SFD -= 0.15; + break; + case "cruel": + Trade -= 0.15; SFD += 0.15; + break; + case "brazen": + FNG += 15; unitMultiplier += 0.5; + break; + case "jaded": + Trade -= 0.05; SFD += 0.05; + break; + case "shell shocked": + Trade += 0.05; SFD -= 0.05; unitMultiplier -= 0.5; + break; + } + if (V.SF.Target === "raiding") { SFD += 0.05; actionMultiplier += 0.5; + } else if (V.SF.Target === "secure") { SFD -= 0.05; actionMultiplier += 0.2; + } else { SFD -= 0.1; actionMultiplier -= 0.5; } + if (V.SF.ROE === "free") { actionMultiplier *= 0.8; SFD += 0.05; Trade += Trade*.95; + } else if (V.SF.ROE == "hold") { actionMultiplier *= 1.1; SFD -= 0.05; Trade += Trade*1.05; } + if (V.SF.Regs === "none") { actionMultiplier *= 0.8; SFD += 0.05; Trade += Trade*.95; + } else if (V.SF.Regs === "strict") { actionMultiplier *= 1.1; SFD -= 0.05; Trade += Trade*1.05; + depravityMultiplier=1+SFD; } + if (SFD > -2) Trade *= 1+SFD/2; + + if (V.SF.Target === "recruit") { FNG += Math.ceil(FNG*.95); + } else { FNG += Math.ceil(FNG*.25); } + if (V.SF.Target === "secure") { V.rep += Math.ceil(V.rep*((Trade/100)*.95)); + V.arcologies[0].prosperity=Math.ceil((V.arcologies[0].prosperity+(Trade/10)*.95)); + } else { V.rep += Math.ceil(V.rep*(Trade/100)*.25); + V.arcologies[0].prosperity=Math.ceil(V.arcologies[0].prosperity+(Trade/10)*.25);} + if (V.secExp > 0) V.authority += V.SF.Size*10; V.authority=Math.clamp(V.authority, 0, 20000); + + SFIncome += Math.ceil((SFIncome*(troopMultiplier/5*unitMultiplier/5*actionMultiplier/5*depravityMultiplier))-SFupkeep); S.Troops += Math.round(FNG/2); + /*Remove below line if hard mode ever gets fixed*/ + if (V.economy < 100) SFIncome=Math.ceil(SFIncome*(1+(V.week/100))); + if (S.Troops > unitCap) S.Troops=unitCap; + if (V.rep > 20000) V.rep=20000; var Profitable=1; + if (V.arcologies[0].prosperity > V.ProsperityCap) V.arcologies[0].prosperity=V.ProsperityCap; + if (SFIncome >= incomeTarget) { V.SF.Subsidy=0; + cashX(SFIncome, "specialForces"); + } else { Profitable=0; } + + var Deaths=0; + if (S.Drugs >= 8 || S.Drugs >= 10) { var 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 (Deaths > 0) S.Troops -= Deaths; + } var r=``; + r += `<br>__Week ${V.week} operational report for ${V.SF.Lower}__:`; + 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") { + r += `securing the trade routes between the arcology and the surrounding area. Smaller parties ventured out to strike targets of opportunity and process new recruits.`; + } else { + r += `locating and striking targets of opportunity, capturing both material loot and new slaves. Smaller parties secured the most important of the arcology's trade routes and processed new recruits.`; + } + if (V.SF.UC.Assign > 0) { + 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>`; + 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 `; + if (Profitable > 0) { + r += `<span class='green'>more than sufficient to cover expenses</span>. Excess material and human assets totaling <span class='yellowgreen'>${cashFormat(SFIncome)}</span> (after liquidation) were transferred to your accounts.`; + } 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 += ` ${SFC()} estimates that an additional <span class='yellowgreen'>${cashFormat(incomeTarget-SFIncome)}</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 += `<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 += `<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 += `<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>>`; + if (V.SF.MercCon.View > 0 && V.SF.MercCon.CanAttend === 1) { r += `<br>''TradeShow'':`; + V.SF.MercCon.Income=0; V.SF.MercCon.Menials=0; + var TradeShowAttendes=200, MenialSlavesPerAttendee=5, NewMercs=0; + var MenialSlaves=Math.ceil(jsRandom(1,((TradeShowAttendes*MenialSlavesPerAttendee)/10))); + var TSProfit=Math.ceil(500000*(1+(V.SF.Size/1000))*(1+(V.arcologies[0].prosperity/1000))*T.Env); + r += ` During a break, The Colonel managed to sell some generic schematics to the ${TradeShowAttendes} attendees, some decided to also give menial slaves as a bonus.<br>`; + V.menials += MenialSlaves; V.SF.MercCon.History += 1; + V.SF.MercCon.Menials += MenialSlaves; V.SF.MercCon.TotalMenials += MenialSlaves; + 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)); + V.mercFreeManpower += NewMercs; V.SF.MercCon.TotalMercs += NewMercs; + V.SF.MercCon.Mercs += NewMercs; + } + } + if (V.SF.UC.Assign === 1 && V.SF.UC.Lock < 1) V.SF.UC.Assign=0; + V.SF.Upgrade=0; V.SF.Gift=0; V.SF.Colonel.Talk=0; V.SF.Colonel.Fun=0; + return r; +}; + +/*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=``; + 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; + } 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; + if (ArraryName === 'ColonelGift') { + switch(POS) { + case 'Repopulation': FinalVisableName += ` Repopulationist`; break; + case 'Eugenics': FinalVisableName += `Eugenecist`; break; + case 'Gender radicalism': FinalVisableName += `Radicalist`; break; + case 'Gender traditionalism': FinalVisableName += `Traditionalist`; break; + case 'Paternalism': FinalVisableName += `Paternalist`; break; + case 'Degradationism': FinalVisableName += `Degredationist`; break; + case 'Body Purism': FinalVisableName += `Purist`; break; + case 'Transformation Fetishism': FinalVisableName += `Transformationist`; break; + case 'Youth Preferentialism': FinalVisableName += `Youth`; break; + case 'Maturity Preferentialism': FinalVisableName += `Maturity`; break; + case 'Slimness Enthusiasm': FinalVisableName += `Enthusiast`; break; + case 'Asset Expansionism': FinalVisableName += `Expansionist`; break; + case 'Slave Pastoralism': FinalVisableName += `Pastoralist`; break; + case 'Physical Idealism': FinalVisableName += `FS`; break; + case 'Hedonistic Decadence': FinalVisableName += `Hedonist`; break; + case 'Chattel Religionism': FinalVisableName += `Religionist`; break; + case 'Roman Revivalism': FinalVisableName += `Roman`; break; + case 'Aztec Revivalism': FinalVisableName += `Aztec`; break; + case 'Egyptian Revivalism': FinalVisableName += `Egyptian`; break; + case 'Edo Revivalism': FinalVisableName += `Edo`; break; + case 'Arabian Revivalism': FinalVisableName += `Arabian`; break; + case 'Chinese Revivalism': FinalVisableName += `Chinese`; break; + case 'Multiculturalism': FinalVisableName += `Multi-Culturalistic`; break; + } + if (POS !== 'Multiculturalism') { + FinalVisableName += `-themed` + } + FinalVisableName += ` personal gift optimized for this FS`; + } + text += `<<link "${FinalVisableName}""Firebase">> + if ([${POS}].includes(V.SF.FS.FS)) { + if ([${POS}].includes(V.SF.FS.Slaves)) { + if (ArraryName !== 'ColonelGift') { + if (ArraryName !== 'ColonelCompilance') { + V.SF.FS.Acceptance.Percent[V.SF.FS.FS.Slaves.indexOf(${POS})] += 6; + } else { + V.SF.FS.Acceptance.Percent[V.SF.FS.FS.Slaves.indexOf(${POS})] += 10; + } + } + } + } else { + V.SF.FS.Acceptance.FS.push('${POS}'); + V.SF.FS.Acceptance.Percent.push(6); + } + V.SF.FS.ArraryName.push('${POS}'); + if (ArraryName !== 'ColonelGift') { + V.SF.FS.Annoyance += 15; + } else { + V.SF.FS.Annoyance -= 15; + } + V.Cash -= cost; + 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 `; + 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]; + if (i > 0) text += `<br>`; + switch(FSPOS) { + case 'Repopulation': text += `Repopulation Efforts: focus on mass breeding in order to repopulate the future world.`; break; + case 'Eugenics': text += `Eugenics: rebuilding society using restrictive breeding programs reserved solely for society's finest. `; break; + case 'Gender radicalism': text += `Gender radicalism: a radical redefinition of gendetext that identifies powerful people as male, and everyone else as female.`; break; + case 'Gender traditionalism': text += `Gender traditionalism: a societal preference for feminine slaves and support for slave pregnancy. `; break; + case 'Paternalism': text += `Paternalism: a vision of slave improvement, including slaves' health, mental well-being, and education. `; break; + case 'Degradationism': text += `Degradationism: a belief that slaves are not human and should not be treated decently.`; break; + case 'Body Purism': text += `Body Purism: societal disapproval of implant surgery. `; break; + case 'Transformation Fetishism': text += `Transformation Fetishism: societal fetishization of implant surgery.`; break; + case 'Youth Preferentialism': text += `Youth Preferentialism: increased interest in girls just past their majority. `; break; + case 'Maturity Preferentialism': text += `Maturity Preferentialism: increased interest in mature slaves. `; break; + case 'Slimness Enthusiasm': text += `Slimness Enthusiasm: a fashion for slaves with girlish figures.`; break; + case 'Asset Expansionism': text += `Asset Expansionism: societal hungetext for huge assets of whatever origin.`; break; + case 'Slave Pastoralism': text += `Slave Pastoralism: societal acceptance of slave products like milk.`; break; + case 'Physical Idealism': text += `Physical Idealism: societal reverence for the idealized human form, including height, health and muscle.`; break; + case 'Hedonistic Decadence': text += `Hedonistic Decadence: societal acceptance of overindulgence and immediate gratification. Be it food, drink, sex, drugs or whatever one's desire may be.`; break; + case 'Chattel Religionism': text += `Chattel Religionism: a new strain of religion that emphasizes the slaveholding portions of religious history.`; break; + case 'Roman Revivalism': text += `Roman Revivalism: a vision of a new Rome.`; break; + case 'Aztec Revivalism': text += `Aztec Revivalism: a vision of a new Aztec Empire.`; break; + case 'Egyptian Revivalism': text += `Egyptian Revivalism: a vision of a Pharaoh's Egypt.`; break; + 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; + } + text += `\n Smuggle in FS-optimized : `; + const Optionslist=UpgradeOptions; + for (var 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 compilance'; cost=1000000; break; + } + if (![FSPOS].includes(V.SF.Acceptance.FS)) { + MEMU_OPTION('Slaves','Slaves',cost), text += ` `; + } else { + if (![FSPOS].includes(V.SF.FS.OptPOS)) { + 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; +};*/ diff --git a/src/SpecialForce/Upgrades.tw b/src/SpecialForce/Upgrades.tw index 11c560502b5..d2d1a3b94e1 100644 --- a/src/SpecialForce/Upgrades.tw +++ b/src/SpecialForce/Upgrades.tw @@ -1,338 +1,181 @@ :: Upgrades [nobr] - <br><br>Total upgrade progress: <<print progress($SF.Size,_max)>> - <<if $SF.Upgrade > 0 && ($SF.Size !== _max)>> <<set _cost = Math.ceil(Math.abs($cash*.05*(1.25+($SF.Size/1000))))>> <br>[[Re-unlock upgrading.|Firebase][$SF.Upgrade = 0,cashX(forceNeg(_cost), "specialForces")]] @@.yellowgreen;<<print cashFormat(_cost)>> <</if>> - <<if ($SF.Size < 30 || $SF.Size !== _max) && $SF.Upgrade < 1>> <<set _T1 = $SF.Size >= 30>> <br>Which facility or equipment do you wish to upgrade this week? <br><br> - - <<if $SF.Squad.Firebase < 5||_T1 && $SF.Squad.Firebase < _FU>> - - <<set _cF = Math.ceil(100000*_Env*(1.15+($SF.Size/10))*(1.15+($SF.Squad.Firebase/100)))>> - + <<set _cF = SFUpgradeCost(100000,$SF.Squad.Firebase)>> <<if $cash >= _cF>> - - <<link "Upgrade Firebase">> <<set $SF.Upgrade = 1, $SF.Squad.Firebase++>><<run cashX(forceNeg(_cF), "specialForces")>><<goto "Firebase">><</link>> - + [[Upgrade Firebase|Firebase][$SF.Upgrade = 1, $SF.Squad.Firebase++, cashX(forceNeg(_cF), "specialForces")]] <<else>>//Cannot afford to upgrade the Firebase.//<</if>> - //Costs @@.yellowgreen;<<print cashFormat(_cF)>>@@ // - <<elseif $SF.Squad.Firebase == _FU>>//The Firebase has been fully upgraded.// - <<else>>//More upgrades are required to unlock the next tier.// - <</if>> <span style="float:right;"> <<print progress($SF.Squad.Firebase)>> </span><br> - <<if $SF.Squad.Armoury < 5||_T1 && $SF.Squad.Armoury < _AU>> - - <<set _cA = Math.ceil(40000*_Env*(1.15+($SF.Size/10))*(1.15+($SF.Squad.Armoury/100)))>> - + <<set _cA = SFUpgradeCost(40000,$SF.Squad.Armoury)>> <<if $cash >= _cA>> - - <<link "Upgrade Armory">> <<set $SF.Upgrade = 1, $SF.Squad.Armoury++>><<run cashX(forceNeg(_cA), "specialForces")>> <<goto "Firebase">><</link>> - + [[Upgrade Armory|Firebase][$SF.Upgrade = 1, $SF.Squad.Armoury++, cashX(forceNeg(_cA), "specialForces")]] <<else>>//Cannot afford to upgrade the Armory.//<</if>> - //Costs @@.yellowgreen;<<print cashFormat(_cA)>>@@ // - <<elseif $SF.Squad.Armoury == _AU>>//The Armory has been fully upgraded.// - <<else>>//More upgrades are required to unlock the next tier.// - <</if>> <span style="float:right;"> <<print progress($SF.Squad.Armoury)>> </span><br> - <<if $SF.Squad.Drugs < 5||_T1 && $SF.Squad.Drugs < _DrugsU>> - - <<set _cDrugs = Math.ceil(40000*_Env*(1.15+($SF.Size/10))*(1.15+($SF.Squad.Drugs/100)))>> - + <<set _cDrugs = SFUpgradeCost(40000,$SF.Squad.Drugs)>> <<if $cash >= _cDrugs>> - - <<link "Upgrade Drug Lab">><<set $SF.Upgrade = 1, $SF.Squad.Drugs++>><<run cashX(forceNeg(_cDrugs), "specialForces")>> <<goto "Firebase">><</link>> - + [[Upgrade Drug Lab|Firebase][$SF.Upgrade = 1, $SF.Squad.Drugs++, cashX(forceNeg(_cDrugs), "specialForces")]] <<else>>//Cannot afford to upgrade the Drug Lab.//<</if>> - //Costs @@.yellowgreen;<<print cashFormat(_cDrugs)>>@@ // - <<elseif $SF.Squad.Drugs == _DrugsU>>//The Drug Lab has been fully upgraded.// - <<else>>//More upgrades are required to unlock the next tier.// - <</if>> <span style="float:right;"> <<print progress($SF.Squad.Drugs)>> </span><br> - <<if $SF.Squad.Firebase >= 2 && ($SF.Squad.Drones < 5 ||_T1 && $SF.Squad.Drones < _DU)>> - - <<set _cDrones = Math.ceil(45000*_Env*(1.15+($SF.Size/10))*(1.15+($SF.Squad.Drones/100))*HSM())>> - + <<set _cDrones = SFUpgradeCost(45000,$SF.Squad.Drones)>> <<if $cash >= _cDrones>> - - <<link "Upgrade Drone Bay">><<set $SF.Upgrade = 1, $SF.Squad.Drones++>><<run cashX(forceNeg(_cDrones), "specialForces")>> <<goto "Firebase">> <</link>> - + [[Upgrade Drone Bay|Firebase][$SF.Upgrade = 1, $SF.Squad.Drones++, cashX(forceNeg(_cDrones), "specialForces")]] <<else>>//Cannot afford to upgrade the Drone Bay.//<</if>> - - //Costs @@.yellowgreen;<<print cashFormat(Math.ceil(45000*_Env*(1.15+($SF.Size/10))*(1.15+($SF.Squad.Drones/100))*HSM()))>>@@ // <span style="float:right;"> <<print progress($SF.Squad.Drones)>> </span> - + //Costs @@.yellowgreen;<<print cashFormat(_cDrones)>>@@ // <span style="float:right;"> <<print progress($SF.Squad.Drones)>> </span> <<elseif $SF.Squad.Drones == _DU>>//The Drone Bay has been fully upgraded.//<span style="float:right;"> <<print progress($SF.Squad.Drones)>> </span> - <<elseif _T1 && $SF.Squad.Drones == 5>>//More upgrades are required to unlock the next tier.//<span style="float:right;"> <<print progress($SF.Squad.Drones)>> </span><</if>> - <<if $SF.Squad.Firebase >= 1 && $terrain !== "oceanic">><br>''Garage'' - <div style="margin-left:2em"><<if ($SF.Squad.AV < 5||_T1 && $SF.Squad.AV < _AVU)>> - - <<set _cAV = Math.ceil(60000*_Env*(1.15+($SF.Size/10))*(1.15+($SF.Squad.AV/100)))>> - + <<set _cAV = SFUpgradeCost(60000,$SF.Squad.AV)>> <<if $cash >= _cAV>> - - <<link "Upgrade Attack Vehicle Fleet">><<set $SF.Upgrade = 1, $SF.Squad.AV++>><<run cashX(forceNeg(_cAV), "specialForces")>> <<goto "Firebase">><</link>> - + [[Upgrade Attack Vehicle Fleet|Firebase][$SF.Upgrade = 1, $SF.Squad.AV++, cashX(forceNeg(_cAV), "specialForces")]] <<else>>//Cannot afford to upgrade the Attack Vehicle Fleet.//<</if>> - //Costs @@.yellowgreen;<<print cashFormat(_cAV)>>@@//<span style="float:right;"><<print progress($SF.Squad.AV)>></span> - <<elseif $SF.Squad.AV == _AVU>>//The Attack Vehicle Fleet has been fully upgraded.//<span style="float:right;"><<print progress($SF.Squad.AV)>></span> - <<else>>//More upgrades are required to unlock the next tier.//<span style="float:right;"><<print progress($SF.Squad.AV)>></span> - <</if>></div> - <div style="margin-left:2em"><<if ($SF.Squad.TV < 5||_T1 && $SF.Squad.TV < _TVU)>> - - <<set _cTV = Math.ceil(60000*_Env*(1.15+($SF.Size/10))*(1.15+($SF.Squad.TV/100)))>> - + <<set _cTV = SFUpgradeCost(60000,$SF.Squad.TV)>> <<if $cash >= _cTV>> - - <<link "Upgrade Transport Vehicle Fleet">><<set $SF.Upgrade = 1, $SF.Squad.TV++>><<run cashX(forceNeg(_cTV), "specialForces")>><<goto "Firebase">><</link>> - + [[Upgrade Transport Vehicle Fleet|Firebase][$SF.Upgrade = 1, $SF.Squad.TV++, cashX(forceNeg(_cTV), "specialForces")]] <<else>>//Cannot afford to upgrade Transport Vehicle Fleet.//<</if>> - //Costs @@.yellowgreen;<<print cashFormat(_cTV)>>@@//<span style="float:right;"><<print progress($SF.Squad.TV)>> </span> - <<elseif $SF.Squad.TV == _TVU>>//The Transport Vehicle Fleet has been fully upgraded.//<span style="float:right;"><<print progress($SF.Squad.TV)>></span> - <<else>>//More upgrades are required to unlock the next tier.//<span style="float:right;"> <<print progress($SF.Squad.TV)>> </span><</if>></div> - <div style="margin-left:2em"><<if _T1 && $SF.Squad.PGT < _PGTU>> - - <<set _cPGT = Math.ceil(735000*_Env*(1.15+($SF.Size/10))*(1.15+($SF.Squad.PGT/100)))>> - + <<set _cPGT = SFUpgradeCost(735000,$SF.Squad.PGT)>> <<if $cash >= _cPGT>> - - <<link "Upgrade Prototype Goliath tank">><<set $SF.Upgrade = 1, $SF.Squad.PGT++>><<run cashX(forceNeg(_cPGT), "specialForces")>> <<goto "Firebase">><</link>> - + [[Upgrade Prototype Goliath tank|Firebase][$SF.Upgrade = 1, $SF.Squad.PGT++, cashX(forceNeg(_cPGT), "specialForces")]] <<else>>//Cannot afford to upgrade Prototype Goliath Tank.//<</if>> - //Costs @@.yellowgreen;<<print cashFormat(_cPGT)>>@@ //<span style="float:right;"> <<print progress($SF.Squad.PGT)>> </span> - <<elseif $SF.Squad.PGT == _PGTU && $PC.warfare < 75>>//Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print progress($SF.Squad.PGT)>> </span> - <<elseif $SF.Squad.PGT == _PGTU>>//The Prototype Goliath Tank has been fully upgraded.//<span style="float:right;"> <<print progress($SF.Squad.PGT)>> </span><</if>></div><</if>> - <<if $SF.Squad.Firebase >= 4>>''Hangar'' - <div style="margin-left:2em"><<if $SF.Squad.AA < 5||_T1 && $SF.Squad.AA < _AAU>> - - <<set _cAA = Math.ceil(70000*_Env*(1.15+($SF.Size/10))*(1.15+($SF.Squad.AA/100)))>> - + <<set _cAA = SFUpgradeCost(70000,$SF.Squad.AA)>> <<if $cash >= _cAA>> - - <<link "Upgrade Attack Aircraft Fleet">><<set $SF.Upgrade = 1, $SF.Squad.AA++>><<run cashX(forceNeg(_cAA), "specialForces")>> <<goto "Firebase">><</link>> - + [[Upgrade Attack Aircraft Fleet|Firebase][$SF.Upgrade = 1, $SF.Squad.AA++, cashX(forceNeg(_cAA), "specialForces")]] <<else>>//Cannot afford to upgrade Attack Aircraft Fleet.//<</if>> - //Costs @@.yellowgreen;<<print cashFormat(_cAA)>>@@ //<span style="float:right;"> <<print progress($SF.Squad.AA)>> </span> - <<elseif $SF.Squad.AA == _AAU>>//The Attack Aircraft Fleet has been fully upgraded.//<span style="float:right;"> <<print progress($SF.Squad.AA)>> </span> - <<else>>//More upgrades are required to unlock the next tier.//<span style="float:right;"> <<print progress($SF.Squad.AA)>> </span><</if>></div> - <div style="margin-left:2em"><<if $SF.Squad.TA < 5||_T1 && $SF.Squad.TA < _TAU>> - - <<set _cTA = Math.ceil(70000*_Env*(1.15+($SF.Size/10))*(1.15+($SF.Squad.TA/100)))>> - + <<set _cTA = SFUpgradeCost(70000,$SF.Squad.TA)>> <<if $cash >= _cTA>> - - <<link "Upgrade Transport Aircraft Fleet">><<set $SF.Upgrade = 1, $SF.Squad.TA++>><<run cashX(forceNeg(_cTA), "specialForces")>> <<goto "Firebase">><</link>> - + [[Upgrade Transport Aircraft Fleet|Firebase][$SF.Upgrade = 1, $SF.Squad.TA++, cashX(forceNeg(_cTA), "specialForces")]] <<else>>//Cannot afford to upgrade the Transport Aircraft Fleet.//<</if>> - //Costs @@.yellowgreen;<<print cashFormat(_cTA)>>@@ //<span style="float:right;"> <<print progress($SF.Squad.TA)>> </span> - <<elseif $SF.Squad.TA == _TAU>>//The Transport Aircraft Fleet has been fully upgraded.//<span style="float:right;"> <<print progress($SF.Squad.TA)>> </span> - <<else>>//More upgrades are required to unlock the next tier.//<span style="float:right;"> <<print progress($SF.Squad.TA)>> </span><</if>></div> - <div style="margin-left:2em"><<if _T1 && $SF.Squad.SpacePlane < _SPU>> - - <<set _cSP = Math.ceil(250000*_Env*(1.15+($SF.Size/10))*(1.15+($SF.Squad.SpacePlane/100))*HSM())>> - + <<set _cSP = SFUpgradeCost(250000,$SF.Squad.SpacePlane)>> <<if $cash >= _cSP>> - - <<link "Upgrade Spaceplane">><<set $SF.Upgrade = 1, $SF.Squad.SpacePlane++>><<run cashX(forceNeg(_cSP), "specialForces")>> <<goto "Firebase">><</link>> - + [[Upgrade Spaceplane|Firebase][$SF.Upgrade = 1, $SF.Squad.SpacePlane++, cashX(forceNeg(_cSP), "specialForces")]] <<else>>//Cannot afford to upgrade the Spaceplane.//<</if>> - //Costs @@.yellowgreen;<<print cashFormat(_cSP)>>@@//<span style="float:right;"><<print progress($SF.Squad.SpacePlane)>> </span> - <<elseif $SF.Squad.SpacePlane == _SPU && $PC.warfare < 75>>//Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print progress($SF.Squad.SpacePlane)>> </span> - <<elseif $SF.Squad.SpacePlane == _SPU>>//The Spaceplane has been fully upgraded.//<span style="float:right;"> <<print progress($SF.Squad.SpacePlane)>> </span><</if>></div> - <div style="margin-left:2em"><<if _T1 && $SF.Squad.GunS < _GunSU>> - - <<set _cGunS = Math.ceil(350000*_Env*(1.15+($SF.Size/10))*(1.15+($SF.Squad.GunS/100))*HSM())>> - + <<set _cGunS = SFUpgradeCost(350000,$SF.Squad.GunS)>> <<if $cash >= _cGunS>> - - <<link "Upgrade Gunship">><<set $SF.Upgrade = 1, $SF.Squad.GunS++>><<run cashX(forceNeg(_cGunS), "specialForces")>><<goto "Firebase">><</link>> - + [[Upgrade Gunship|Firebase][$SF.Upgrade = 1, $SF.Squad.GunS++, cashX(forceNeg(_cGunS), "specialForces")]] <<else>>//Cannot afford to upgrade Gunship.//<</if>> - //Costs @@.yellowgreen;<<print cashFormat(_cGunS)>>@@ //<span style="float:right;"> <<print progress($SF.Squad.GunS)>> </span> - <<elseif $SF.Squad.GunS == _GunSU && $PC.warfare < 75>>//Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print progress($SF.Squad.GunS)>> </span> - <<elseif $SF.Squad.GunS == _GunSU>>//The Gunship has been fully upgraded.//<span style="float:right;"> <<print progress($SF.Squad.GunS)>> </span><</if>></div><</if>> - <<if _T1>>''Launch Bay'' - <div style="margin-left:2em"><<if $SF.Squad.Satellite.lv < _SatU && $SF.Squad.Satellite.InOrbit < 1>> - - <<set _cSat = Math.ceil(525000*_Env*(1.15+($SF.Size/10))*(1.15+($SF.Squad.Satellite.lv/100))*HSM())>> - + <<set _cSat = SFUpgradeCost(525000,$SF.Squad.Satellite.lv)>> <<if $cash >= _cSat>> - - <<link "Upgrade Satellite">><<set $SF.Upgrade = 1, $SF.Squad.Satellite.lv++>><<run cashX(forceNeg(_cSat), "specialForces")>> <<goto "Firebase">><</link>> - + [[Upgrade Satellite|Firebase][$SF.Upgrade = 1, $SF.Squad.Satellite.lv++, cashX(forceNeg(_cSat), "specialForces")]] <<else>>//Cannot afford to upgrade Satellite.//<</if>> - //Costs @@.yellowgreen;<<print cashFormat(_cSat)>>@@//<span style="float:right;"><<print progress($SF.Squad.Satellite.lv)>> </span> - <<elseif $SF.Squad.Satellite.lv == _SatU && $PC.warfare < 75>>//Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print progress($SF.Squad.Satellite.lv)>> </span> - <<else>>//The Satellite has been fully upgraded.//<span style="float:right;"><<print progress($SF.Squad.Satellite.lv)>></span><</if>></div> - <<if $terrain !== "oceanic">> - <div style="margin-left:2em"><<if $SF.Squad.GiantRobot < _GRU>> - - <<set _cGR = Math.ceil(550000*_Env*(1.15+($SF.Size/10))*(1.15+($SF.Squad.GiantRobot/100))*HSM())>> - + <<set _cGR = SFUpgradeCost(550000,$SF.Squad.GiantRobot)>> <<if $cash >= _cGR>> - - <<link "Upgrade Giant Robot">><<set $SF.Upgrade = 1, $SF.Squad.GiantRobot++>><<run cashX(forceNeg(_cGR), "specialForces")>> <<goto "Firebase">><</link>> - + [[Upgrade Giant Robot|Firebase][$SF.Upgrade = 1, $SF.Squad.GiantRobot++, cashX(forceNeg(_cGR), "specialForces")]] <<else>>//Cannot afford to upgrade the Giant Robot.//<</if>> - //Costs @@.yellowgreen;<<print cashFormat(_cGR)>>@@//<span style="float:right;"><<print progress($SF.Squad.GiantRobot)>></span> - <<elseif $SF.Squad.GiantRobot == _GRU && $PC.warfare < 75>>//Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print progress($SF.Squad.GiantRobot)>> </span> - <<else>>//The Giant Robot has been fully upgraded.//<span style="float:right;"> <<print progress($SF.Squad.GiantRobot)>> </span><</if>></div><</if>> - <div style="margin-left:2em"><<if $SF.Squad.MissileSilo < _MSU>> - - <<set _cMS = Math.ceil(565000*_Env*(1.15+($SF.Size/10))*(1.15+($SF.Squad.MissileSilo/100))*HSM())>> - + <<set _cMS = SFUpgradeCost(565000,$SF.Squad.MissileSilo)>> <<if $cash >= _cMS>> - - <<link "Upgrade Cruise Missile">><<set $SF.Upgrade = 1, $SF.Squad.MissileSilo++>><<run cashX(forceNeg(_cMS), "specialForces")>> <<goto "Firebase">><</link>> - + [[Upgrade Cruise Missile|Firebase][$SF.Upgrade = 1, $SF.Squad.MissileSilo++, cashX(forceNeg(_cMS), "specialForces")]] <<else>>//Cannot afford to upgrade Cruise Missile.//<</if>> - //Costs @@.yellowgreen;<<print cashFormat(_cMS)>>@@ //<span style="float:right;"><<print progress($SF.Squad.MissileSilo)>></span> - <<elseif $SF.Squad.MissileSilo == _MSU && $PC.warfare < 75>>//Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print progress($SF.Squad.MissileSilo)>> </span> - <<else>>//The Cruise Missile has been fully upgraded.//<span style="float:right;"> <<print progress($SF.Squad.MissileSilo)>> </span><</if>></div><</if>> <<if _T1 && ($terrain == "oceanic" || $terrain == "marine")>>''Naval Yard'' - <div style="margin-left:2em"><<if $SF.Squad.AircraftCarrier < _ACU>> - - <<set _cAC = Math.ceil(650000*_Env*(1.15+($SF.Size/10))*(1.15+($SF.Squad.AircraftCarrier/100))*HSM())>> - + <<set _cAC = SFUpgradeCost(650000,$SF.Squad.AircraftCarrier)>> <<if $cash >= _cAC>> - - <<link "Upgrade Aircraft Carrier">><<set $SF.Upgrade = 1, $SF.Squad.AircraftCarrier++>><<run cashX(forceNeg(_cAC), "specialForces")>> <<goto "Firebase">><</link>> - + [[Upgrade Aircraft Carrier|Firebase][$SF.Upgrade = 1, $SF.Squad.AircraftCarrier++, cashX(forceNeg(_cAC), "specialForces")]] <<else>>//Cannot afford to upgrade Aircraft Carrier.//<</if>> - - //Costs @@.yellowgreen;<<print cashFormat(Math.ceil(650000*_Env*(1.15+($SF.Size/10))*(1.15+($SF.Squad.AircraftCarrier/100))*HSM()))>>@@ //<span style="float:right;"> <<print progress($SF.Squad.AircraftCarrier)>> </span> - + //Costs @@.yellowgreen;<<print cashFormat(_cAC)>>@@ //<span style="float:right;"> <<print progress($SF.Squad.AircraftCarrier)>> </span> <<elseif $SF.Squad.AircraftCarrier == _ACU && $PC.warfare < 75>>//Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print progress($SF.Squad.AircraftCarrier)>> </span> - <<else>>//The Aircraft Carrier has been fully upgraded.//<span style="float:right;"> <<print progress($SF.Squad.AircraftCarrier)>> </span><</if>></div> - <div style="margin-left:2em"><<if $SF.Squad.Sub < _SubU>> - - <<set _cSub = Math.ceil(700000*_Env*(1.15+($SF.Size/10))*(1.15+($SF.Squad.Sub/100))*HSM())>> - + <<set _cSub = SFUpgradeCost(700000,$SF.Squad.Sub)>> <<if $cash >= _cSub>> - - <<link "Upgrade Submarine">><<set $SF.Upgrade = 1, $SF.Squad.Sub++>><<run cashX(forceNeg(_cSub), "specialForces")>> <<goto "Firebase">><</link>> - + [[Upgrade Submarine|Firebase][$SF.Upgrade = 1, $SF.Squad.Sub++, cashX(forceNeg(_cSub), "specialForces")]] <<else>>//Cannot afford to upgrade Submarine//<</if>> - //Costs @@.yellowgreen;<<print cashFormat(_cSub)>>@@ //<span style="float:right;"> <<print progress($SF.Squad.Sub)>> </span> - <<elseif $SF.Squad.Sub == _SubU && $PC.warfare < 75>>//Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print progress($SF.Squad.Sub)>> </span> - <<else>>//The Submarine has been fully upgraded.//<span style="float:right;"> <<print progress($SF.Squad.Sub)>> </span><</if>></div> - - + <div style="margin-left:2em"><<if $SF.Squad.HAT < _HATU>> - - <<set _cHAT = Math.ceil(665000*_Env*(1.15+($SF.Size/10))*(1.15+($SF.Squad.HAT/100)))>> - + <<set _cHAT = SFUpgradeCost(665000,$SF.Squad.HAT)>> <<if $cash >= _cHAT>> - - <<link "Upgrade Amphibious Transport">><<set $SF.Upgrade = 1, $SF.Squad.HAT++>><<run cashX(forceNeg(_cHAT), "specialForces")>><<goto "Firebase">><</link>> - + [[Upgrade Amphibious Transport|Firebase][$SF.Upgrade = 1, $SF.Squad.HAT++, cashX(forceNeg(_cHAT), "specialForces")]] <<else>>//Cannot afford to upgrade Amphibious Transport.//<</if>> - //Costs @@.yellowgreen;<<print cashFormat(_cHAT)>>@@ //<span style="float:right;"> <<print progress($SF.Squad.HAT)>> </span> - <<elseif $SF.Squad.HAT == _HATU && $PC.warfare < 75>>//Your warfare skill is not high enough unlock the next upgrade.//<span style="float:right;"> <<print progress($SF.Squad.HAT)>> </span> - <<else>>//The Amphibious Transport has been fully upgraded.//<span style="float:right;"> <<print progress($SF.Squad.HAT)>> </span><</if>></div> - <</if>> - <<if _T1 < 1>>//More firebase upgrades are required to unlock further upgrades.//<</if>> - <</if>> /* <div style="margin-left:2em"><<if _T1 && $SF.Facility.Toggle > 0 && $SF.Facility.Active < 1>> - - <<set _cSFF = Math.ceil(735000*_Env*(1.15+($SF.Size/10))*(1.15+($SF.Facility.Active/100)))>> - - <<if $cash >= _cSFF>> - - <<link "Build $SF.Lower's support facility">><<set $SF.Upgrade = 1, $SF.Facility.Active++>><<run cashX(forceNeg(_cSFF), "specialForces")>><<goto "Firebase">><</link>> - - <<else>>//Cannot afford to build $SF.Lower's support facility.//<</if>> - - //Costs @@.yellowgreen;<<print cashFormat(_cSFF)>>@@ // - - <</if>>*/ \ No newline at end of file + <<set _cSFF = SFUpgradeCost(735000,$SF.Facility.Active)>> + <<if $cash >= _cSFF>> + [[Build $SF.Lower's support facility|Firebase][$SF.Upgrade = 1, $SF.Facility.Active++, cashX(forceNeg(_cSFF), "specialForces")]] + <<else>>//Cannot afford to build $SF.Lower's support facility.//<</if>> + //Costs @@.yellowgreen;<<print cashFormat(_cSFF)>>@@// + <</if>>*/ \ No newline at end of file diff --git a/src/SpecialForce/WeeklyChoices.tw b/src/SpecialForce/WeeklyChoices.tw index 0ae30248eb5..92acbee0134 100644 --- a/src/SpecialForce/WeeklyChoices.tw +++ b/src/SpecialForce/WeeklyChoices.tw @@ -168,19 +168,19 @@ <br>Which orifice do you wish to target? <<link "Go back""Firebase">> <</link>> <br> <<link "Pussy">> <<replace "#result6">> - <<include "SF.ColonelSexDec">> + <<include "SFColonelSexDec">> <</replace>> <<set $SF.Colonel.Fun += 1>> <</link>> <br> <<link "Ass">> <<replace "#result6">> - <<include "SF.ColonelSexDec">> + <<include "SFColonelSexDec">> <</replace>> <<set $SF.Colonel.Fun += 1>> <</link>> <br> <<link "Both pussy and ass">> <<replace "#result6">> - <<include "SF.ColonelSexDec">> + <<include "SFColonelSexDec">> <</replace>> <<set $SF.Colonel.Fun += 2>> <</link>> <br> <<link "Mouth">> <<replace "#result6">> - <<include "SF.ColonelSexDec">> + <<include "SFColonelSexDec">> <</replace>> <<set $SF.Colonel.Fun += 1>> <</link>> <br> <<link "All three holes">> <<replace "#result6">> - <<include "SF.ColonelSexDec">> + <<include "SFColonelSexDec">> <</replace>> <<set $SF.Colonel.Fun += 3>> <</link>> </span> <</replace>> <</link>> @@ -188,19 +188,19 @@ <br>Which orifice do you wish to target? <<link "Go back""Firebase">> <</link>> <br> <<link "Pussy">> <<replace "#result6">> - <<include "SF.ColonelSexDec">> + <<include "SFColonelSexDec">> <</replace>> <<set $SF.Colonel.Fun += 1>> <</link>> <br> <<link "Ass">> <<replace "#result6">> - <<include "SF.ColonelSexDec">> + <<include "SFColonelSexDec">> <</replace>> <<set $SF.Colonel.Fun += 1>> <</link>> <br> <<link "Both pussy and ass">> <<replace "#result6">> - <<include "SF.ColonelSexDec">> + <<include "SFColonelSexDec">> <</replace>> <<set $SF.Colonel.Fun += 2>> <</link>> <br> <<link "Mouth">> <<replace "#result6">> - <<include "SF.ColonelSexDec">> + <<include "SFColonelSexDec">> <</replace>> <<set $SF.Colonel.Fun += 1>> <</link>> <br> <<link "All three holes">> <<replace "#result6">> - <<include "SF.ColonelSexDec">> + <<include "SFColonelSexDec">> <</replace>> <<set $SF.Colonel.Fun += 3>> <</link>> </span> <</replace>> </span> <</link>> </span> <</replace>> <</link>> <</if>> /*Closes fun*/ diff --git a/src/init/storyInit.tw b/src/init/storyInit.tw index f48636c0d32..d4b6a7f22cc 100644 --- a/src/init/storyInit.tw +++ b/src/init/storyInit.tw @@ -1494,4 +1494,8 @@ erectileImplant: 0 <<set $DefaultBirthDestination = "individually decided fates">> <<set $abbreviateHormoneBalance = 2>> +<<if def $SF.Toggle>> + <<set $SF = {Toggle:$SF.Toggle,Active:-1}>> +<<else>> + <<set $SF = {Toggle:0,Active:-1}>> <<goto "Alpha disclaimer">> diff --git a/src/js/economyJS.js b/src/js/economyJS.js index 64e2f4ce12f..ede978fdd40 100644 --- a/src/js/economyJS.js +++ b/src/js/economyJS.js @@ -519,16 +519,9 @@ window.getEnvironmentCosts = function(cost) { }; window.getSFCosts = function() { - var costs = 0; - if(State.variables.SF.Toggle && State.variables.SF.Active >= 1) { - if(State.variables.SF.Subsidy) { - costs += Math.ceil( (10000*(State.variables.SF.Squad.Troops/10))+(1+(State.variables.arcologies[0].prosperity/100))+(1+(State.variables.SF.Size/100)) ); - } - if(State.variables.SF.Bonus) { - const T = State.temporary; - Count(); - costs += Math.ceil(T.SFCashBonus); - } + var costs = 0; + if(State.variables.SF.Toggle && State.variables.SF.Active >= 1 && State.variables.SF.Subsidy > 0) { + Count(); costs += Math.ceil(State.temporary.SFSubsidy); } return costs; }; diff --git a/src/uncategorized/BackwardsCompatibility.tw b/src/uncategorized/BackwardsCompatibility.tw index 263690b8900..f487e5224c2 100644 --- a/src/uncategorized/BackwardsCompatibility.tw +++ b/src/uncategorized/BackwardsCompatibility.tw @@ -1081,9 +1081,6 @@ <</if>> <<= SFBC()>> -<<if def $SF && $SF.Active >= 0 && passage() === "New Game Plus">> - <<= SFInit()>> -<</if>> <<if ndef $useSlaveSummaryTabs>> <<set $useSlaveSummaryTabs = 0>> diff --git a/src/uncategorized/costsReport.tw b/src/uncategorized/costsReport.tw index 98453c9a753..71ca5d6988c 100644 --- a/src/uncategorized/costsReport.tw +++ b/src/uncategorized/costsReport.tw @@ -80,18 +80,9 @@ your personal living expenses are @@.yellowgreen;<<print cashFormat(Math.trunc($ <<set _arcologyCosts += $peacekeepers.undermining>> <</if>> -<<if $SF.Toggle && $SF.Active >= 1>> - <<if $SF.Subsidy>> - <br>__Finacinally supporting $SF.Lower until self sufficiency:__ <<print cashFormat(Math.ceil( (10000*($SF.Squad.Troops/10))+(1+($arcologies[0].prosperity/100))+(1+($SF.Size/100)) ))>> - <<set _arcologyCosts += Math.ceil( (10000*($SF.Squad.Troops/10))+(1+($arcologies[0].prosperity/100))+(1+($SF.Size/100)) )>> - <</if>> - <<if $SF.Bonus>> - <<= Count()>> - <br>__Bonuses for basic FS acceptance amongst $SF.Lower:__ <<print cashFormat(Math.ceil(_SFCashBonus))>> - <br> Colonel <<print cashFormat(_ColonelCashBonus*_Env)>>. - Troop size: <<print commaNum($SF.Squad.Troops)>> and each solider receives <<print cashFormat(_inviTroop*_Env)>>, totaling <<print cashFormat(Math.ceil(_TroopCashBonus*_Env))>>. - <<set _arcologyCosts += _SFCashBonus>> - <</if>> +<<if $SF.Toggle && $SF.Active >= 1 && $SF.Subsidy> > 0>> <<= Count()>> + <br>__Financially supporting $SF.Lower until self sufficiency:__ <<print cashFormat(Math.ceil(_SFSubsidy))>> + <<set _arcologyCosts += Math.ceil(_SFSubsidy)>> <</if>> <<if $mercenaries > 0>> <<set _mercCosts = $mercenaries*2000>> diff --git a/src/uncategorized/nonRandomEvent.tw b/src/uncategorized/nonRandomEvent.tw index 7b78eb18d72..777073ae939 100644 --- a/src/uncategorized/nonRandomEvent.tw +++ b/src/uncategorized/nonRandomEvent.tw @@ -107,7 +107,7 @@ <</if>> <<elseif (_effectiveWeek == 72)>> <<goto "P coup aftermath">> -<<elseif $SF.Toggle && _effectiveWeek >= 72 && $SF.Active === -1>> +<<elseif $SF.Toggle && $SF.Active === -1 && _effectiveWeek >= 72>> <<goto "Security Force Proposal">> <<elseif $failedElite > 300 && $eugenicsFullControl != 1>> <<goto "eliteTakeOver">> diff --git a/src/uncategorized/persBusiness.tw b/src/uncategorized/persBusiness.tw index 6b81cb056d5..91ee6c3081d 100644 --- a/src/uncategorized/persBusiness.tw +++ b/src/uncategorized/persBusiness.tw @@ -1068,5 +1068,5 @@ The RomanFS may need further tweaking (it probably got weaker). Could increase t <</if>> <</if>> -<<if $SF.Toggle && $SF.Active >= 1>> <<include "SF_Report">> <</if>> +<<if $SF.Toggle && $SF.Active >= 1>> <<= SFReport()>> <</if>> <br> -- GitLab