diff --git a/src/002-config/fc-version.js b/src/002-config/fc-version.js index b9bab4703dde9ed138eb4873f1680c42833080c0..e76fe673db4cf9b2c559a805cbd37000e8f0dd80 100644 --- a/src/002-config/fc-version.js +++ b/src/002-config/fc-version.js @@ -2,5 +2,5 @@ App.Version = { base: "0.10.7.1", // The vanilla version the mod is based off of, this should never be changed. pmod: "3.5.3", commitHash: null, - release: 1072 + release: 1073 }; diff --git a/src/Mods/SecExp/attackOptions.tw b/src/Mods/SecExp/attackOptions.tw index 3f9cf5ba9d181e09cc5c1994fe24246e2a6be603..15b05eaa48593f489b86ba7c8addfa0983d4a8be 100644 --- a/src/Mods/SecExp/attackOptions.tw +++ b/src/Mods/SecExp/attackOptions.tw @@ -259,7 +259,7 @@ __Battle Plan__: <<replace "#leader">><strong><<print _leader>></strong><</replace>> <</link>> <</if>> - <<if $SF.Toggle && $SF.Active >= 1 && $SF.MercCon.CanAttend === -1>> + <<if $SF.Toggle && $SF.Active >= 1 && $SF.MercCon.CanAttend === -2>> | <<link "Let The Colonel lead the troops">> <<set $leadingTroops = "colonel">> diff --git a/src/Mods/SpecialForce/CheatEdit.tw b/src/Mods/SpecialForce/CheatEdit.tw index f386cdc0fa136ca80a81676cc82ee640618aee12..f715f7231c124b3e9e3b25d8c9e0c300a4f6ffad 100644 --- a/src/Mods/SpecialForce/CheatEdit.tw +++ b/src/Mods/SpecialForce/CheatEdit.tw @@ -37,4 +37,8 @@ <br> ''Amphibious Transport:'' <<textbox "$SF.Squad.HAT" $SF.Squad.HAT "CheatEdit">>/_HATU <</if>> <</if>> -<</if>> \ No newline at end of file +<</if>> + +<<if $SF.FS.Tension !== -1>> + <br><br>The Colonel's current Tension: <<textbox "$SF.FS.Tension" $SF.FS.Tension "CheatEdit">> +<</if>> diff --git a/src/Mods/SpecialForce/Firebase.tw b/src/Mods/SpecialForce/Firebase.tw index 598ea69210b6bf0bef0d7d37a9f8b07d2f452a53..05013775d056916af542219e2f2fd2fd8a31d3e2 100644 --- a/src/Mods/SpecialForce/Firebase.tw +++ b/src/Mods/SpecialForce/Firebase.tw @@ -3,200 +3,112 @@ <<= App.SF.Count()>> <<if $SF.FS.Tension > 100>> <<= App.SF.fsIntegration('BadOutcome')>> <<else>> - <<if $SF.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>> + <<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">> - <<set $nextLink = "Main">> + <<set $nextButton = "Back", $nextLink = "Main">> - <<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 $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 App.SF.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>>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>> + 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>>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 $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 App.SF.Interactions()>> - <<include "WC">> + <<if $SF.Colonel.Core === "brazen">> + She gives a textbook salute. "<<= properTitle()>>, how can I help you?" + <<else>> + "Hey boss, what do you need?" + <</if>> - <<if $SF.MercCon.CanAttend === -2 && ($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]] - <br>[[Request she remain on base|Firebase][$SF.MercCon.CanAttend = -3]]<br> - <<elseif $SF.MercCon.History >= 1 && ((Math.trunc($week/24) === ($week/24)) && $SF.MercCon.CanAttend === -1)>> - <br><br>Her expression changes as something jogs her memory. "Before we begin <<if $SF.Colonel.Core == "brazen">><<= properTitle()>><<else>>boss<</if>>, that biannual merc meetup has come around again. You've already gave me leave to attend, but I just wanted to be sure I'm still clear to go." - <br>[[Grant leave|Firebase][$SF.MercCon.CanAttend = 1]] - <br>[[Request she remain on site|Firebase][$SF.MercCon.CanAttend = -1]] - <</if>> + <br> <<link "Tour the firebase" "FirebaseTour">> <</link>> <br> - <<if $SF.UC.Lock < 1>> <br> - <<switch $SF.UC.Assign>> - <<case 0>> - <br>No soldiers are working undercover, which would primarily advance your cultural goals while also slightly boosting your reputation. [[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, which will primarily advance your cultural goals while also slightly boosting your reputation. [[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, which will primarily advance your cultural goals while also slightly boosting your reputation. [[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, which will primarily advance your cultural goals while also slightly boosting your reputation? - <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, which will primarily advance your cultural goals while also slightly boosting your reputation. [[Re-allocate the units|Firebase][$SF.UC.Lock = 0]] - <</if>> + <<if $SF.Size === _max>> + <br>There are no more upgrades available. + <</if>> + <<if $SF.FS.Tension !== -1>> + The Colonel's current Tension: $SF.FS.Tension + <</if>> - <<if $SF.Squad.Firebase > 5 && $secExpEnabled > 0 && $SFSupportLevel >= 4 && App.SecExp.battle.maxUnits() === 18 && App.SecExp.battle.deploySpeed() <= 10>> - <br><br>[[Provide the security force with their own section.|Firebase][$sectionInFirebase = 1, cashX(forceNeg(Math.ceil((750000*(1.15+($SF.Size/1000))*(1.15+($SF.Squad.Firebase/10)))*_Env)), "capEx")]] - @@.red;<<print cashFormat(Math.ceil((750000*(1.15+($SF.Size/1000))*(1.15+($SF.Squad.Firebase/10)))*_Env))>>@@ + <<run App.UI.tabbar.handlePreSelectedTab($tabChoice.Firebase)>> + <div class="tabbar"> + <<if $SF.Size !== _max>> + <button class="tablinks" onclick="App.UI.tabbar.openTab(event, 'Upgrades')" id="tab Upgrades">Upgrades</button> <</if>> - <br>[[Tour the firebase|Firebase][$SF.tour = 1]] - <<else>> <br> <<set $nextButton = "Return to Operations", $nextLink = "Firebase", $SF.tour=0>> - <br>You continue towards the common area, the soldiers you pass, nod respectfully, salute, or bow slightly, as they please. 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. - <<else>> - 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. - <<else>> - 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. - <<else>> - 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> - <<= App.SF.fsIntegration('OptionsFlavourText',90)>> + <button class="tablinks" onclick="App.UI.tabbar.openTab(event, 'Actions')" id="tab Actions">Actions</button> + <button class="tablinks" onclick="App.UI.tabbar.openTab(event, 'FS')" id="tab FS">Future Socities</button> + </div> - <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. - <<= App.SF.fsIntegration('OptionsFlavourText',50)>> - <<= App.SF.fsIntegration('OptionsFlavourText',5)>> - <<= App.SF.fsIntegration('OptionsFlavourText',10)>> - <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.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 == "brazen" || $SF.Colonel.Core != "shell shocked")>> - 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. - <<setNonlocalPronouns $seeDicks>> - <<if random(1,100) <= 50>> - Off to the side, a group of soldiers brutally gangbang a very young slave _girlU, with one soldier buried balls-deep in _hisU ass, <<if _heU == "she">>another brutally sawing a barbed strap-on in and out of _hisU pussy, and a third<<else>>and another<</if>> with his cock forced deep down _hisU throat. The slave _girlU 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 _girlU 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 _girlU, straddles another one and smashes _hisU face in with a blood-slick ammo crate. As _heU stands, shaking from fear and adrenaline, one of the soldiers laughs and throws a small incendiary grenade at _himU, 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>> </div> - <<= App.SF.fsIntegration('OptionsFlavourText',15)>> - <<= App.SF.fsIntegration('OptionsFlavourText',20)>> - <<= App.SF.fsIntegration('OptionsFlavourText',25)>> - - <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"> - <<setNonlocalPronouns $seeDicks>> - 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 _girlU kneeling on the floor between her legs. The Colonel has her legs wrapped tightly around the _girlU's head, forcing the _girlU to service her if _heU wants to breathe. The Colonel is close to her climax then suddenly tenses her lower body, thus gripping the _girlU even tighter, and throws her head back in ecstasy as she orgasms. She lets out a long breath finally releasing the _girlU, giving _himU a hard smack and shouting at _himU 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, <<= App.SF.ColonelStatus()>>?" 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, <<= App.SF.ColonelStatus()>>," 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, <<= App.SF.ColonelStatus()>>," 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 _girlU being forced to eat her out. "Hey, <<= App.SF.ColonelStatus()>>, 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 _girlU in the face. She pushes the _girlU to the ground, straddling _himU then begins hitting. You hear one crunch after another as The Colonel's powerful blows shatter the _girlU'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 _girlU's neck with her powerful hands. Wordlessly, she increases the pressure and soon the _girlU begins to turn blue as _heU struggles to draw breath. Eventually _hisU 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 _girlU's body, relaxing back on the couch and putting her feet back up on the table. "Sorry about that <<= App.SF.ColonelStatus()>>," 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 <<= App.SF.ColonelStatus()>>," 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> - <<= App.SF.fsIntegration('OptionsFlavourText',40)>> - <<= App.SF.fsIntegration('OptionsFlavourText',-1)>> - <<= App.SF.fsIntegration('OptionsFlavourText')>> - <<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>> + <div id="Upgrades" class="tabcontent"> + <div class="content"> + <<include "Upgrades">> + </div> + </div> - <br>__Current facilities status:__ - <<= App.SF.UnitText('firebase')>> <<= App.SF.fsIntegration('OptionsFlavourText',30)>> - <<= App.SF.fsIntegration('OptionsFlavourText',80)>> - <<= App.SF.fsIntegration('OptionsFlavourText',85)>> - <<= App.SF.UnitText('troop')>> - <<= App.SF.UnitText('armory')>> <<= App.SF.fsIntegration('OptionsFlavourText',35)>> - <<= App.SF.UnitText('drugs')>> <<= App.SF.fsIntegration('OptionsFlavourText',45)>> - <<= App.SF.UnitText('UAV')>> <<= App.SF.fsIntegration('OptionsFlavourText',55)>> + <div id="Actions" class="tabcontent"> + <div class="content"> + <<if $SF.MercCon.CanAttend === 0>> + <br><br>Her expression changes as something jogs her memory. "Before we begin <<if $SF.Colonel.Core == "brazen">><<= properTitle()>><<else>>boss<</if>>, back when I was a merc me and a couple of my old friends would have a meetup every several months. Drinking, fucking, drugs... a little poker. It eventually grew into a whole thing, and now we bring our latest and greatest toys to show off, maybe make some money off selling the schematics. I'd like to continue going, for old times' sake." + <br>[[Grant leave|Firebase][$SF.MercCon.CanAttend = 1]] + <br>[[Request she remain on base|Firebase][$SF.MercCon.CanAttend = -2]]<br> + <<elseif $SF.MercCon.History >= 1 && ((Math.trunc($week/24) === ($week/24)) && $SF.MercCon.CanAttend === -1)>> + <br><br>Her expression changes as something jogs her memory. "Before we begin <<if $SF.Colonel.Core == "brazen">><<= properTitle()>><<else>>boss<</if>>, that biannual merc meetup has come around again. You've already gave me leave to attend, but I just wanted to be sure I'm still clear to go." + <br>[[Grant leave|Firebase][$SF.MercCon.CanAttend = 1]] + <br>[[Request she remain on site|Firebase][$SF.MercCon.CanAttend = -2]]<br> + <</if>> - <<if _G > 0 && $SF.Squad.Firebase >= 1>> <br><br>''Garage:'' - <<if $SF.Squad.AV+$SF.Squad.TV > 0>> <br> ''Vehicles:'' - <<= App.SF.UnitText('AV')>> <<= App.SF.UnitText('TV')>> - <</if>> - <<= App.SF.UnitText('PGT')>> - <<= App.SF.fsIntegration('OptionsFlavourText',60)>> - <<= App.SF.fsIntegration('OptionsFlavourText',65)>> - <</if>> + <span id="result0"> + <<if $SF.MercCon.History >= 1>> + <<link "Mercenary meetup report">> + <<replace "#result0">> + While at the recent merc meetup, The Colonel made @@.yellowgreen;<<print cashFormat(Math.ceil($SF.MercCon.Income))>>@@ selling generic schematics to her friends, <<print num($SF.MercCon.Menials)>> menial slaves were won in a poker game, and <<print num($SF.MercCon.Mercs)>> mercenaries were persuaded to join $SF.Lower. + <br>Total earnings thus far: @@.yellowgreen;<<print cashFormat(Math.ceil($SF.MercCon.Revenue))>>@@ in income, <<print num($SF.MercCon.TotalMenials)>> menial slaves and <<print num($SF.MercCon.TotalMercs)>> mercenaries joined across $SF.MercCon.History meetups. <<link "Back" "Firebase">> <</link>> + <</replace>> + <</link>> + <</if>> + </span> - <<if $SF.Squad.Firebase >= 4>> - <<if _H > 0>> <br><br>''Hangar:'' - <<if $SF.Squad.AA+$SF.Squad.TA > 0>> <br> ''Airforce:'' - <<= App.SF.UnitText('AA')>> <<= App.SF.UnitText('TA')>> - <</if>> - <<= App.SF.UnitText('SP')>> <<= App.SF.UnitText('GunS')>> + <<if $SF.UC.Lock < 1>> <br> + <<switch $SF.UC.Assign>> + <<case 0>> + <br>No soldiers are working undercover, which would primarily advance your cultural goals while also slightly boosting your reputation. + <br>[[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, which will primarily advance your cultural goals while also slightly boosting your reputation. [[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, which will primarily advance your cultural goals while also slightly boosting your reputation. [[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, which will primarily advance your cultural goals while also slightly boosting your reputation? + <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, which will primarily advance your cultural goals while also slightly boosting your reputation. [[Re-allocate the units|Firebase][$SF.UC.Lock = 0]] <</if>> - <<= App.SF.fsIntegration('OptionsFlavourText',70)>> - <<= App.SF.fsIntegration('OptionsFlavourText',75)>> - <</if>> - <<if _T1 && _LB> 0>> <br><br>''Launch Bay:'' - <<if $SF.Squad.Satellite.lv > 0>> <<= App.SF.UnitText('sat')>> - <<if $SF.Squad.Satellite.InOrbit < 1>> - <br> [[Launch it into geostationary orbit.|Firebase][$SF.Squad.Satellite.InOrbit = 1]] //You <span class='red'>cannot</span> upgrade the satellite once it has been launched.// - <<else>> - <br> [[Recall the satellite.|Firebase][$SF.Squad.Satellite.InOrbit = 0]] - <</if>> + + <<if $SF.Squad.Firebase > 5 && $secExpEnabled > 0 && $SFSupportLevel >= 4 && App.SecExp.battle.maxUnits() === 18 && App.SecExp.battle.deploySpeed() <= 10>> + <br><br>[[Provide the security force with their own section.|Firebase][$sectionInFirebase = 1, cashX(forceNeg(Math.ceil((750000*(1.15+($SF.Size/1000))*(1.15+($SF.Squad.Firebase/10)))*_Env)), "capEx")]] + @@.red;<<print cashFormat(Math.ceil((750000*(1.15+($SF.Size/1000))*(1.15+($SF.Squad.Firebase/10)))*_Env))>>@@ <</if>> - <<= App.SF.UnitText('GR')>> <<= App.SF.UnitText('ms')>> - <</if>> - <<if _NY > 0>> <br><br>''Naval Yard:'' - <<= App.SF.UnitText('AC')>> <<= App.SF.UnitText('Sub')>> <<= App.SF.UnitText('HAT')>> - <</if>> - <</if>> -<</if>> \ No newline at end of file + + <<print App.SF.Interactions()>> + <<include "WC">> + </div> + </div> + + <div id="FS" class="tabcontent"> + <div class="content"> + <<= App.SF.fsIntegration()>> + </div> + </div> +<</if>> diff --git a/src/Mods/SpecialForce/FirebaseTour.tw b/src/Mods/SpecialForce/FirebaseTour.tw new file mode 100644 index 0000000000000000000000000000000000000000..c84ff49270db220c669b848d9ea2ec886922e4ac --- /dev/null +++ b/src/Mods/SpecialForce/FirebaseTour.tw @@ -0,0 +1,131 @@ +:: FirebaseTour [nobr] + +<<set $nextButton = "Return to Operations", $nextLink = "Firebase">> + +You continue towards the common area, the soldiers you pass, nod respectfully, salute, or bow slightly, as they please. 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. + <<else>> + 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. + <<else>> + 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. + <<else>> + 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> + <<= App.SF.fsIntegration('OptionsFlavourText',90)>> + + <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. + <<= App.SF.fsIntegration('OptionsFlavourText',50)>> + <<= App.SF.fsIntegration('OptionsFlavourText',5)>> + <<= App.SF.fsIntegration('OptionsFlavourText',10)>> + <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.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 == "brazen" || $SF.Colonel.Core != "shell shocked")>> + 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. + <<setNonlocalPronouns $seeDicks>> + <<if random(1,100) <= 50>> + Off to the side, a group of soldiers brutally gangbang a very young slave _girlU, with one soldier buried balls-deep in _hisU ass, <<if _heU == "she">>another brutally sawing a barbed strap-on in and out of _hisU pussy, and a third<<else>>and another<</if>> with his cock forced deep down _hisU throat. The slave _girlU 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 _girlU 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 _girlU, straddles another one and smashes _hisU face in with a blood-slick ammo crate. As _heU stands, shaking from fear and adrenaline, one of the soldiers laughs and throws a small incendiary grenade at _himU, 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>> </div> + <<= App.SF.fsIntegration('OptionsFlavourText',15)>> + <<= App.SF.fsIntegration('OptionsFlavourText',20)>> + <<= App.SF.fsIntegration('OptionsFlavourText',25)>> + + <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"> + <<setNonlocalPronouns $seeDicks>> + 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 _girlU kneeling on the floor between her legs. The Colonel has her legs wrapped tightly around the _girlU's head, forcing the _girlU to service her if _heU wants to breathe. The Colonel is close to her climax then suddenly tenses her lower body, thus gripping the _girlU even tighter, and throws her head back in ecstasy as she orgasms. She lets out a long breath finally releasing the _girlU, giving _himU a hard smack and shouting at _himU 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, <<= App.SF.ColonelStatus()>>?" 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, <<= App.SF.ColonelStatus()>>," 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, <<= App.SF.ColonelStatus()>>," 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 _girlU being forced to eat her out. "Hey, <<= App.SF.ColonelStatus()>>, 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 _girlU in the face. She pushes the _girlU to the ground, straddling _himU then begins hitting. You hear one crunch after another as The Colonel's powerful blows shatter the _girlU'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 _girlU's neck with her powerful hands. Wordlessly, she increases the pressure and soon the _girlU begins to turn blue as _heU struggles to draw breath. Eventually _hisU 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 _girlU's body, relaxing back on the couch and putting her feet back up on the table. "Sorry about that <<= App.SF.ColonelStatus()>>," 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 <<= App.SF.ColonelStatus()>>," 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> + <<= App.SF.fsIntegration('OptionsFlavourText',40)>> + <<= App.SF.fsIntegration('OptionsFlavourText',-1)>> + <<= App.SF.fsIntegration('OptionsFlavourText')>> + <<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>> + + <br>__Current facilities status:__ + <<= App.SF.UnitText('firebase')>> <<= App.SF.fsIntegration('OptionsFlavourText',30)>> + <<= App.SF.fsIntegration('OptionsFlavourText',80)>> + <<= App.SF.fsIntegration('OptionsFlavourText',85)>> + <<= App.SF.UnitText('troop')>> + <<= App.SF.UnitText('armory')>> <<= App.SF.fsIntegration('OptionsFlavourText',35)>> + <<= App.SF.UnitText('drugs')>> <<= App.SF.fsIntegration('OptionsFlavourText',45)>> + <<= App.SF.UnitText('UAV')>> <<= App.SF.fsIntegration('OptionsFlavourText',55)>> + + <<if _G > 0 && $SF.Squad.Firebase >= 1>> <br><br>''Garage:'' + <<if $SF.Squad.AV+$SF.Squad.TV > 0>> <br> ''Vehicles:'' + <<= App.SF.UnitText('AV')>> <<= App.SF.UnitText('TV')>> + <</if>> + <<= App.SF.UnitText('PGT')>> + <<= App.SF.fsIntegration('OptionsFlavourText',60)>> + <<= App.SF.fsIntegration('OptionsFlavourText',65)>> + <</if>> + + <<if $SF.Squad.Firebase >= 4>> + <<if _H > 0>> <br><br>''Hangar:'' + <<if $SF.Squad.AA+$SF.Squad.TA > 0>> <br> ''Airforce:'' + <<= App.SF.UnitText('AA')>> <<= App.SF.UnitText('TA')>> + <</if>> + <<= App.SF.UnitText('SP')>> <<= App.SF.UnitText('GunS')>> + <</if>> + <<= App.SF.fsIntegration('OptionsFlavourText',70)>> + <<= App.SF.fsIntegration('OptionsFlavourText',75)>> + <</if>> + <<if _T1 && _LB> 0>> <br><br>''Launch Bay:'' + <<if $SF.Squad.Satellite.lv > 0>> <<= App.SF.UnitText('sat')>> + <<if $SF.Squad.Satellite.InOrbit < 1>> + <br> [[Launch it into geostationary orbit.|FirebaseTour][$SF.Squad.Satellite.InOrbit = 1]] //You <span class='red'>cannot</span> upgrade the satellite once it has been launched.// + <<else>> + <br> [[Recall the satellite.|FirebaseTour][$SF.Squad.Satellite.InOrbit = 0]] + <</if>> + <</if>> + <<= App.SF.UnitText('GR')>> <<= App.SF.UnitText('ms')>> + <</if>> + <<if _NY > 0>> <br><br>''Naval Yard:'' + <<= App.SF.UnitText('AC')>> <<= App.SF.UnitText('Sub')>> <<= App.SF.UnitText('HAT')>> + <</if>> + <</if>> diff --git a/src/Mods/SpecialForce/SpecialForce.js b/src/Mods/SpecialForce/SpecialForce.js index 66d6dd0d2a7242233299df78e9ad1926f17c9963..f47ec5531bf23bee829db3553f160f5c1388394d 100644 --- a/src/Mods/SpecialForce/SpecialForce.js +++ b/src/Mods/SpecialForce/SpecialForce.js @@ -1,79 +1,68 @@ // T=SugarCube.State.temporary; App.SF.Caps = function() { - if (V.SF.Lower) { - return capFirstChar(V.SF.Lower); - } - return "no one"; + return capFirstChar(V.SF.Lower || "the special force"); }; App.SF.Init = function() { - V.SF.Toggle = V.SF.Toggle || 0; if (passage() === "init" || passage() === "New Game Plus") { - V.SF = {Active: -1, Toggle:V.SF.Toggle}; + V.SF = {Active: -1, Toggle: 0}; } V.SF.FS = V.SF.FS || {}; V.SF.FS.Tension = V.SF.FS.Tension || -1; + if (V.SF.Toggle && V.SF.Active >= 1) { - V.SF.UC = V.SF.UC || {}; - V.SF.Depravity = V.SF.Depravity || 0; - V.SF.Size = V.SF.Size || 0; - V.SF.Upgrade = V.SF.Upgrade || 0; - V.SF.Gift = V.SF.Gift || 0; - V.SF.UC.Assign = V.SF.UC.Assign || 0; - V.SF.UC.Lock = V.SF.UC.Lock || 0; - V.SF.ROE = V.SF.ROE || "hold"; - V.SF.Target = V.SF.Target || "recruit"; - V.SF.Regs = V.SF.Regs || "strict"; - V.SF.Lower = V.SF.Lower || "the special force"; - - V.SF.ArmySize = V.SF.ArmySize || 40; - - V.SF.Squad = V.SF.Squad || {}; - V.SF.Squad.Armoury = V.SF.Squad.Armoury || 0; - V.SF.Squad.Firebase = V.SF.Squad.Firebase || 0; - V.SF.Squad.AV = V.SF.Squad.AV || 0; - V.SF.Squad.TV = V.SF.Squad.TV || 0; - V.SF.Squad.Drones = V.SF.Squad.Drones || 0; - V.SF.Squad.Drugs = V.SF.Squad.Drugs || 0; - V.SF.Squad.PGT = V.SF.Squad.PGT || 0; - V.SF.Squad.AA = V.SF.Squad.AA || 0; - V.SF.Squad.TA = V.SF.Squad.TA || 0; - V.SF.Squad.SpacePlane = V.SF.Squad.SpacePlane || 0; - V.SF.Squad.GunS = V.SF.Squad.GunS || 0; - - V.SF.Squad.Satellite = V.SF.Squad.Satellite || {}; - V.SF.Squad.Satellite.lv = V.SF.Squad.Satellite.lv || 0; - V.SF.Squad.Satellite.InOrbit = V.SF.Squad.Satellite.InOrbit || 0; - V.SF.Squad.GiantRobot = V.SF.Squad.GiantRobot || 0; - V.SF.Squad.MissileSilo = V.SF.Squad.MissileSilo || 0; - V.SF.Squad.AircraftCarrier = V.SF.Squad.AircraftCarrier || 0; - V.SF.Squad.Sub = V.SF.Squad.Sub || 0; - V.SF.Squad.HAT = V.SF.Squad.HAT || 0; - - V.SF.Colonel = V.SF.Colonel || {}; - V.SF.Colonel.Core = V.SF.Colonel.Core || ""; - V.SF.Colonel.Talk = V.SF.Colonel.Talk || 0; - V.SF.Colonel.Fun = V.SF.Colonel.Fun || 0; - V.SF.Colonel.Status = V.SF.Colonel.Status || 0; - - V.SF.MercCon = V.SF.MercCon || {}; - V.SF.MercCon.History = V.SF.MercCon.History || 0; - V.SF.MercCon.CanAttend = V.SF.MercCon.CanAttend || -2; - V.SF.MercCon.Income = V.SF.MercCon.Income || 0; - V.SF.MercCon.Revenue = V.SF.MercCon.Revenue || 0; - V.SF.MercCon.Mercs = V.SF.MercCon.Mercs || 0; - V.SF.MercCon.Menials = V.SF.MercCon.Menials || 0; - V.SF.MercCon.TotalMenials = V.SF.MercCon.TotalMenials || 0; - V.SF.MercCon.TotalMercs = V.SF.MercCon.TotalMercs || 0; + Object.assign(V.SF, { + UC: {Assign: 0, lock: 0}, + Depravity: 0, + Size: 0, + Upgrade: 0, + Gift: 0, + ROE: "hold", + Target: "recruit", + Regs: "strict", + Lower: "the special force", + ArmySize: 40, + Squad: { + 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 + }, + Colonel: { + Core: "", + Talk: 0, + Fun: 0, + Status: 0 + }, + MercCon: { + History: 0, + CanAttend: 0, + Income: 0, + Revenue: 0, + Mercs: 0, + Menials: 0, + TotalMenials: 0, + TotalMercs: 0 + } + }); } // V.arcologies[0].SFRaid = 1; V.arcologies[0].SFRaidTarget = -1; - /* if (typeof V.SF.Facility === "undefined") { - 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:[] - }; - } */ }; /* no-usedOnce */ @@ -168,7 +157,6 @@ App.SF.BC = function() { Target: V.securityForceFocus, Regs: V.securityForceAccountability, Lower: V.securityForceName, - Caps: capFirstChar(V.securityForceName), }); MainClean(); @@ -270,82 +258,139 @@ App.SF.BC = function() { App.SF.Init(); } } else if (typeof V.SF === "object") { - App.SF.Init(); - - if (jsDef(V.SF.Squad) && jsDef(V.SF.Squad.Troops)) { - V.SF.ArmySize = V.SF.Squad.Troops; - delete V.SF.Squad.Troops; - } - - if (V.SF.MercCon !== undefined) { - if( V.SF.MercCon.View !== undefined) { - delete V.SF.MercCon.View; - } - if (V.SF.MercCon.Helots !== undefined) { - V.SF.MercCon.Menials = V.SF.MercCon.Helots; - delete V.SF.MercCon.Helots; - } - if (V.SF.MercCon.TotalHelots !== undefined) { - V.SF.MercCon.TotalMenials = V.SF.MercCon.TotalHelots; - delete V.SF.MercCon.TotalHelots; + if (V.SF.Toggle && V.SF.Active >= 1) { + V.SF.UC = V.SF.UC || {}; + V.SF.Depravity = V.SF.Depravity || 0; + V.SF.Size = V.SF.Size || 0; + V.SF.Upgrade = V.SF.Upgrade || 0; + V.SF.Gift = V.SF.Gift || 0; + V.SF.UC.Assign = V.SF.UC.Assign || 0; + V.SF.UC.Lock = V.SF.UC.Lock || 0; + V.SF.ROE = V.SF.ROE || "hold"; + V.SF.Target = V.SF.Target || "recruit"; + V.SF.Regs = V.SF.Regs || "strict"; + V.SF.Lower = V.SF.Lower || "the special force"; + + V.SF.ArmySize = V.SF.ArmySize || 40; + + V.SF.Squad = V.SF.Squad || {}; + V.SF.Squad.Armoury = V.SF.Squad.Armoury || 0; + V.SF.Squad.Firebase = V.SF.Squad.Firebase || 0; + V.SF.Squad.AV = V.SF.Squad.AV || 0; + V.SF.Squad.TV = V.SF.Squad.TV || 0; + V.SF.Squad.Drones = V.SF.Squad.Drones || 0; + V.SF.Squad.Drugs = V.SF.Squad.Drugs || 0; + V.SF.Squad.PGT = V.SF.Squad.PGT || 0; + V.SF.Squad.AA = V.SF.Squad.AA || 0; + V.SF.Squad.TA = V.SF.Squad.TA || 0; + V.SF.Squad.SpacePlane = V.SF.Squad.SpacePlane || 0; + V.SF.Squad.GunS = V.SF.Squad.GunS || 0; + + V.SF.Squad.Satellite = V.SF.Squad.Satellite || {}; + V.SF.Squad.Satellite.lv = V.SF.Squad.Satellite.lv || 0; + V.SF.Squad.Satellite.InOrbit = V.SF.Squad.Satellite.InOrbit || 0; + V.SF.Squad.GiantRobot = V.SF.Squad.GiantRobot || 0; + V.SF.Squad.MissileSilo = V.SF.Squad.MissileSilo || 0; + V.SF.Squad.AircraftCarrier = V.SF.Squad.AircraftCarrier || 0; + V.SF.Squad.Sub = V.SF.Squad.Sub || 0; + V.SF.Squad.HAT = V.SF.Squad.HAT || 0; + + V.SF.Colonel = V.SF.Colonel || {}; + V.SF.Colonel.Core = V.SF.Colonel.Core || ""; + V.SF.Colonel.Talk = V.SF.Colonel.Talk || 0; + V.SF.Colonel.Fun = V.SF.Colonel.Fun || 0; + V.SF.Colonel.Status = V.SF.Colonel.Status || 0; + + V.SF.MercCon = V.SF.MercCon || {}; + V.SF.MercCon.History = V.SF.MercCon.History || 0; + V.SF.MercCon.CanAttend = V.SF.MercCon.CanAttend || 0; + if (V.SF.MercCon.History >= 1) { + V.SF.MercCon.CanAttend = -1; } + V.SF.MercCon.Income = V.SF.MercCon.Income || 0; + V.SF.MercCon.Revenue = V.SF.MercCon.Revenue || 0; + V.SF.MercCon.Mercs = V.SF.MercCon.Mercs || 0; + V.SF.MercCon.Menials = V.SF.MercCon.Menials || 0; + V.SF.MercCon.TotalMenials = V.SF.MercCon.TotalMenials || 0; + V.SF.MercCon.TotalMercs = V.SF.MercCon.TotalMercs || 0; } + } - 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; - if (V.SFUC !== undefined) { - V.SF.UC.num = V.SFUC || 0; - } - delete V.SFUC; + delete V.SF.tour; delete V.SF.Caps; delete V.SF.FS.upgrade; - if (V.SF.MWU !== undefined) { - delete V.SF.MWU; - } - if (V.SpecOpsLock !== undefined) { - V.SF.SpecOpsLock = V.SpecOpsLock; - } - delete V.SpecOpsLock; - if (V.SF.U !== undefined) { - V.SF.Upgrade = V.SF.U || 0; - } - delete V.SF.U; - if (V.SF.WG !== undefined) { - V.SF.Gift = V.SF.WG || 0; - } - delete V.SF.WG; + if (jsDef(V.SF.Squad) && jsDef(V.SF.Squad.Troops)) { + V.SF.ArmySize = V.SF.Squad.Troops; + delete V.SF.Squad.Troops; + } - if (V.SF.Bonus !== undefined) { - delete V.SF.Bonus; + if (V.SF.MercCon !== undefined) { + if( V.SF.MercCon.View !== undefined) { + delete V.SF.MercCon.View; } - if (V.SF.Depravity < 0) { - V.SF.Depravity = 0; + if (V.SF.MercCon.Helots !== undefined) { + V.SF.MercCon.Menials = V.SF.MercCon.Helots; + delete V.SF.MercCon.Helots; } - if (V.SF.Units !== undefined) { - V.SF.Size = V.SF.Units; + if (V.SF.MercCon.TotalHelots !== undefined) { + V.SF.MercCon.TotalMenials = V.SF.MercCon.TotalHelots; + delete V.SF.MercCon.TotalHelots; } - delete V.SF.Units; - if (V.SFUnit !== undefined) { - if (V.SFUnit.AT !== undefined) { - V.SFUnitTA = 0; - } - 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.Squad !== undefined && V.SF.Squad.Satellite !== undefined && V.SatLaunched !== undefined) { - V.SF.Squad.Sat = {lv: V.SF.Squad.Satellite, InOrbit: V.SatLaunched}; - V.SF.Squad.Satellite = V.SF.Squad.Sat; - delete V.SF.Squad.Sat; - delete V.SatLaunched; - delete V.SFUnit; - } + } + + 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; + if (V.SFUC !== undefined) { + V.SF.UC.num = V.SFUC || 0; + } + delete V.SFUC; + + if (V.SF.MWU !== undefined) { + delete V.SF.MWU; + } + if (V.SpecOpsLock !== undefined) { + V.SF.SpecOpsLock = V.SpecOpsLock; + } + delete V.SpecOpsLock; + if (V.SF.U !== undefined) { + V.SF.Upgrade = V.SF.U || 0; + } + delete V.SF.U; + if (V.SF.WG !== undefined) { + V.SF.Gift = V.SF.WG || 0; + } + delete V.SF.WG; + + if (V.SF.Bonus !== undefined) { + delete V.SF.Bonus; + } + if (V.SF.Depravity < 0) { + V.SF.Depravity = 0; + } + if (V.SF.Units !== undefined) { + V.SF.Size = V.SF.Units; + } + delete V.SF.Units; + if (V.SFUnit !== undefined) { + if (V.SFUnit.AT !== undefined) { + V.SFUnitTA = 0; + } + 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.Squad !== undefined && V.SF.Squad.Satellite !== undefined && V.SatLaunched !== undefined) { + V.SF.Squad.Sat = {lv: V.SF.Squad.Satellite, InOrbit: V.SatLaunched}; + V.SF.Squad.Satellite = V.SF.Squad.Sat; + delete V.SF.Squad.Sat; + delete V.SatLaunched; + delete V.SFUnit; } } InitClean(); @@ -361,10 +406,11 @@ App.SF.BC = function() { }; /* usedOnce */ -App.SF.fsIntegration = function(input = 'Menu', textDisplay = 100, text = `\n`) { +App.SF.fsIntegration = function(input = 'Menu', textDisplay = 100) { const Revivalisms = ['Arabian_Revivalism', 'Aztec_Revivalism', 'Chinese_Revivalism', 'Edo_Revivalism', 'Egyptian_Revivalism', 'Multiculturalism', 'Roman_Revivalism']; let FS_OPTIONS = ['Asset_Expansionism', 'Body_Purism', 'Chattel_Religionism', 'Degradationism', 'Eugenics', 'Gender_radicalism', 'Gender_traditionalism', 'Hedonistic_Decadence', 'Maturity_Preferentialism', 'Paternalism', 'Physical_Idealism', 'Repopulation', 'Slave_Pastoralism', 'Slimness_Enthusiasm', 'Transformation_Fetishism', 'Youth_Preferentialism']; FS_OPTIONS = FS_OPTIONS.concat(Revivalisms); + let text = ``; function validityTester() { if (V.SF.FS.Repopulation.lv > V.SF.FS.Eugenics.lv) { @@ -414,7 +460,10 @@ App.SF.fsIntegration = function(input = 'Menu', textDisplay = 100, text = `\n`) function OptionsMenu(selectedFS, fsIncrease = 5, cost = 150000) { let InputText1 = ``, - InputText0 = ``; + InputText0 = ``, + tension = 15, + gift = 0; + if (fsIncrease > 0) { if (V.SF.FS[selectedFS].lv === 0) { InputText1 += `Foods`; @@ -455,6 +504,10 @@ App.SF.fsIntegration = function(input = 'Menu', textDisplay = 100, text = `\n`) } else if (V.SF.FS[selectedFS].lv === 90) { InputText1 += `Talk The Colonel into Compliance`; } + } else { + InputText1 += `Buy The Colonel a personal gift `; + tension = -15; + gift = 1; } if (V.SF.FS[selectedFS].lv === 90) { @@ -468,6 +521,7 @@ App.SF.fsIntegration = function(input = 'Menu', textDisplay = 100, text = `\n`) cost = 50000; } + InputText0 += `\n`; switch (selectedFS) { case 'Repopulation': if (fsIncrease > 0 || V.SF.FS[selectedFS].vaildOption < 1) { @@ -586,23 +640,16 @@ App.SF.fsIntegration = function(input = 'Menu', textDisplay = 100, text = `\n`) break; } - let var0 = 15, - var1 = 0; if (V.SF.FS[selectedFS].gift > 0) { - var1 = 1; + gift = 1; } + if (fsIncrease > 0) { InputText0 += `\n Smuggle in FS-optimized (${V.SF.FS[selectedFS].lv}%): `; - } else { - var0 = -15; - var1 = 1; - InputText0 += `\n `; - InputText1 += `Buy The Colonel a personal gift `; } if (V.SF.FS[selectedFS].gift < 1 || (V.SF.FS[selectedFS].lv < 100 && V.SF.FS[selectedFS].vaildOption > 0)) { - const InputText2 = `[[${InputText1}|Firebase][cashX(-${cost}, "specialForces"), $SF.FS.Tension += ${var0}, $SF.FS.${[selectedFS]}.gift = ${var1}, $SF.FS.${[selectedFS]}.lv += ${fsIncrease}, $SF.FS.upgrade = 1]]`; - InputText0 += InputText2; + InputText0 += ` [[${InputText1}|Firebase][cashX(-${cost}, "specialForces"), $SF.FS.Tension += ${tension}, $SF.FS.${[selectedFS]}.gift = ${gift}, $SF.FS.${[selectedFS]}.lv += ${fsIncrease}]]`; if (fsIncrease > 0) { InputText0 += ` (FS acceptance:<span class='green'>+${fsIncrease}%,</span>`; } @@ -613,24 +660,20 @@ App.SF.fsIntegration = function(input = 'Menu', textDisplay = 100, text = `\n`) InputText0 += ` (`; } } - InputText0 += `<span class='red'>${cashFormat(cost)},</span> `; - InputText0 += `tension:`; + InputText0 += `<span class='red'>${cashFormat(cost)},</span> tension:`; if (fsIncrease > 0) { InputText0 += `<span class='red'>+`; } else { InputText0 += `<span class='green'>-`; } - InputText0 += `15%</span>)`; - if (fsIncrease === 0 || V.SF.FS[selectedFS].gift > 0 || V.SF.FS[selectedFS].vaildOption < 1) { - InputText0 += `\n`; - } - text += InputText0; + text += InputText0 + `15%</span>)`; } } if (input === 'Menu') { if (V.SF.FS.Tension === -1) { - text += `<<link "Talk to The Colonel about Future Society integration">> <<replace "#result0">> \n\n`; + text += `<span id="result1">`; + text += `<<link "Talk to The Colonel about Future Society integration">> <<replace "#result1">>`; text += `You bring up the topic of cultural development with The Colonel, and in doing so, you share your hopes that she might be willing to help you better acquaint the troops with your cultural mores. Her response was less than positive: `; switch (V.SF.Colonel.Core) { case "kind": @@ -650,9 +693,9 @@ App.SF.fsIntegration = function(input = 'Menu', textDisplay = 100, text = `\n`) break; } text += ` [[Fine|Firebase][$SF.FS.Tension = 0]]\n <</replace>> <</link>>`; + text += `</span>`; } else if (V.SF.FS.Tension < 100) { - text += `<<link "Chat with the Troops">> <<replace "#result0">> \n\n`; - 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:\nTension: ${V.SF.FS.Tension}%\n`; + 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.`; validityTester(); for (let i = 0; i < FS_OPTIONS.length; i++) { if (V.SF.FS[FS_OPTIONS[i]].vaildOption !== 0 && V.SF.FS[FS_OPTIONS[i]].lv < 100) { @@ -662,70 +705,70 @@ App.SF.fsIntegration = function(input = 'Menu', textDisplay = 100, text = `\n`) OptionsMenu(FS_OPTIONS[i], 0); } } - text += `<</replace>> <</link>>`; } return text; } else if (input === 'OptionsFlavourText') { - text = ``; + text += `\n`; + if (textDisplay === -1) { - text += `\n__Colonel's gift(s)__`; + text += `__Colonel's gift(s)__`; } if (textDisplay === 5) { - text += `\n__FS Foods__`; + text += `__FS Foods__`; } if (textDisplay === 10) { - text += `\n__FS Media__`; + text += `__FS Media__`; } if (textDisplay === 15) { - text += `\n__FS Slaves__`; + text += `__FS Slaves__`; } if (textDisplay === 20) { - text += `\n__Slave Processing Cages decorations__`; + text += `__Slave Processing Cages decorations__`; } if (textDisplay === 25) { - text += `\n__Common Area decorations__`; + text += `__Common Area decorations__`; } if (textDisplay === 30) { - text += `\n__Barracks decorations__`; + text += `__Barracks decorations__`; } if (textDisplay === 35) { - text += `\n__Armory decorations__`; + text += `__Armory decorations__`; } if (textDisplay === 40) { - text += `\n__Command Center decorations__`; + text += `__Command Center decorations__`; } if (textDisplay === 45) { - text += `\n__Drug Lab decorations__`; + text += `__Drug Lab decorations__`; } if (textDisplay === 50) { - text += `\n__Personal Items__`; + text += `__Personal Items__`; } if (textDisplay === 55) { - text += `\n__Drone Bay decorations__`; + text += `__Drone Bay decorations__`; } if (textDisplay === 60) { - text += `\n__Garage decorations__`; + text += `__Garage decorations__`; } if (textDisplay === 65) { - text += `\n__Vehicle modifications__`; + text += `__Vehicle modifications__`; } if (textDisplay === 70) { - text += `\n__Hangar modifications__`; + text += `__Hangar modifications__`; } if (textDisplay === 75) { - text += `\n__Aircraft modifications__`; + text += `__Aircraft modifications__`; } if (textDisplay === 80) { - text += `\n__Luxuries facilities__`; + text += `__Luxuries facilities__`; } if (textDisplay === 85) { - text += `\n__Perimeter decorations__`; + text += `__Perimeter decorations__`; } if (textDisplay === 90) { - text += `\n__Mandate FS-Roleplaying__`; + text += `__Mandate FS-Roleplaying__`; } if (textDisplay === 100) { - text += `\n__Colonel's compliance__`; + text += `__Colonel's compliance__`; } // (default value) const hyperPreg0 = V.seeHyperPreg > 0 ? 'hyper-' : ''; const hyperPreg1 = V.seeHyperPreg > 0 ? 'hyper' : ''; @@ -2623,7 +2666,7 @@ App.SF.AAR = function(endWeekCall = 1) { V.SF.MercCon.Menials += menialGifts; V.SF.MercCon.TotalMenials += menialGifts; V.menials += menialGifts; - V.SF.MercCon.History += 1; + V.SF.MercCon.History++; V.SF.MercCon.Income += TSProfit; V.SF.MercCon.Revenue += TSProfit; cashX(TSProfit, "specialForces"); @@ -2844,14 +2887,7 @@ App.SF.progress = function(x, max) { }; App.SF.SFC = function() { - if (V.SF.MercCon.CanAttend === -1) { - return `The Colonel`; - } else { - /* if (V.SF.Facility.LCActive > 0) { - * return `Lieutenant Colonel ${SlaveFullName(V.SF.Facility.LC)}`; - }*/ - return `a designated soldier`; - } + return `The Colonel`; }; App.SF.ColonelStatus = function() { @@ -2875,24 +2911,18 @@ App.SF.Interactions = function() { if (V.SF.Gift > 0) { if (V.choice === 1) { choice += `${App.SF.Caps()} is turning over spare capital in tribute this week. `; - if (V.SF.MercCon.CanAttend === -1 && (C.Talk + C.Fun !== 1)) { + if (C.Talk + C.Fun !== 1) { 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 += `${App.SF.Caps()} will be throwing a military parade this week. `; - if (V.SF.MercCon.CanAttend === -1 && (C.Talk + C.Fun !== 1)) { + if (C.Talk + C.Fun !== 1) { choice += `"I expect the <span class='green'>public to enjoy</span> the parade, boss."`; - } else { - choice += `"I'll have plans for a <span class='green'>popular parade</span> on your desk, boss".`; } } else if (V.choice === 3) { choice += `${App.SF.Caps()} will be conducting corporate sabotage on rival arcologies' businesses. `; - if (V.SF.MercCon.CanAttend === -1 && (C.Talk + C.Fun !== 1)) { + if (C.Talk + C.Fun !== 1) { 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".`; } } } diff --git a/src/Mods/SpecialForce/Upgrades.tw b/src/Mods/SpecialForce/Upgrades.tw index 9a1066dab0950fff94f59f7114d75e555b000f5c..93144aef4a84b4581149c4e5626e306dc542bcc3 100644 --- a/src/Mods/SpecialForce/Upgrades.tw +++ b/src/Mods/SpecialForce/Upgrades.tw @@ -1,11 +1,7 @@ :: Upgrades [nobr] <br><br> -<<if $SF.Size !== _max>> - Total upgrade progress: <<print App.SF.progress($SF.Size,_max)>> $SF.Size/_max(<<print ($SF.Size/_max).toFixed(2)*100>>%) <<if $SF.Size < 30>> <br>//<<print (30-$SF.Size )>> more upgrades is needed until the next tier unlocks.// <</if>> -<<else>> - There are no more upgrades available. -<</if>> +Total upgrade progress: <<print App.SF.progress($SF.Size,_max)>> $SF.Size/_max(<<print ($SF.Size/_max).toFixed(2)*100>>%) <<if $SF.Size < 30>> <br>//<<print (30-$SF.Size)>> more upgrades is needed until the next tier unlocks.// <</if>> <<if $SF.Upgrade > 0 && ($SF.Size !== _max)>> <<set _cost = Math.ceil(Math.abs($cash*.05*(1.25+($SF.Size/1000))))>> @@ -273,11 +269,4 @@ <</if>> /*Closes Naval Yard.*/ <</if>> -<</if>> -/* <div style="margin-left:2em"><<if _T1 && $SF.Facility.Toggle > 0 && $SF.Facility.Active < 1>> -<<set _cSFF = App.SF.UpgradeCost(735000,$SF.Facility.Active)>> - <<if $cash >= _cSFF>> - [[Build $SF.Lower's support facility|Firebase][$SF.Upgrade = 1, $SF.Colonel.Talk += 1, $SF.Facility.Active++, cashX(-(_cSFF), "specialForces")]] - <<else>> //Cannot afford to build $SF.Lower's support facility.// <</if>> -//Costs @@.red;<<print cashFormat(_cSFF)>>@@// -<</if>>*/ \ No newline at end of file +<</if>> \ No newline at end of file diff --git a/src/Mods/SpecialForce/WeeklyChoices.tw b/src/Mods/SpecialForce/WeeklyChoices.tw index 606e4f9b723f1d73499fdac704a996063efd03ca..d33b39eda5a8a62ef3c713f556aff5b86e559ded 100644 --- a/src/Mods/SpecialForce/WeeklyChoices.tw +++ b/src/Mods/SpecialForce/WeeklyChoices.tw @@ -2,49 +2,42 @@ <<set _colonelTalkTensionRuction = $SF.FS.Tension !== -1 ? 5 : 0>> -<<if $SF.Gift === 0 && $SF.MercCon.CanAttend === -1 && ($SF.Colonel.Talk + $SF.Colonel.Fun !== 1)>> - The Colonel looks down a list on her tablet. "There's some things we can do to help you out, boss. - <br>We've had some good prizes turn up, that's made us some extra money we could turn over. | <<link "Request cash" "Firebase">> +<<if $SF.Gift === 0>> + <<if $SF.Colonel.Talk + $SF.Colonel.Fun !== 1>> + The Colonel looks down a list on her tablet. "There's some things we can do to help you out, boss. + <br>We've had some good prizes turn up, that's made us some extra money we could turn over. + <<else>> + <br>He looks down a list on his tablet. "<<= properTitle()>>, how can $SF.Lower help you this week? + <br> <<= App.SF.Caps()>> can spare some profits from our recent operations. + <</if>> + | <<link "Request cash" "Firebase">> /*<<set $CashGift = ((Math.ceil((Math.abs($cash)*0.05)*(Math.max(0.99,$SF.Size))))*($arcologies[0].prosperity/100))*_Env>> OLD*/ <<set $CashGift = Math.ceil(25000*($SF.Size/10)*_Env),$SF.Gift = 1,$choice = 1>> <<set $CashGift = ($CashGift > 5000 ? $CashGift : 5000)>> <<run cashX($CashGift, "specialForces")>> <</link>> + <<if $rep < 20000>> - <br>If you want we could throw a quick military parade, get the people feeling extra patriotic. | <<link "Request military parade" "Firebase">> + <<if $SF.Colonel.Talk + $SF.Colonel.Fun !== 1>> + <br>If you want we could throw a quick military parade, get the people feeling extra patriotic. + <<else>> + <br>We can set some units aside for a ceremonial march through the arcology. + <</if>> + | <<link "Request military parade" "Firebase">> <<set $GoodWords1 += 50*(Math.ceil($SF.Size*0.03*_Env))>> <<set $GoodWords1 = (Number($GoodWords1) ? $GoodWords1 : 500),$SF.Gift = 1>> <<set $choice = 2>> <<run repX($GoodWords1, "specialForces")>> <</link>> <</if>> + <<if $arcologies[0].prosperity < $AProsperityCap>> - <br>Or we could hit some businesses that rival the ones in $arcologies[0].name with some sabotage. | <<link "Request sabotage" "Firebase">> - <<set $GoodWords2 = _EnvProsp+(Math.ceil($SF.Size/100*_Env)),$SF.Gift = 1,$choice = 3>> - <<if $arcologies[0].prosperity + $GoodWords2 > $AProsperityCap>> - <<set $arcologies[0].prosperity = $AProsperityCap>> - <<else>> - <<set $arcologies[0].prosperity += $GoodWords2>> - <</if>> - <</link>> - <</if>> -<<elseif $SF.Gift == 0 && ($SF.MercCon.CanAttend > -1 || ($SF.Colonel.Talk + $SF.Colonel.Fun > 0))>> - <br>He looks down a list on his tablet. "<<= properTitle()>>, how can $SF.Lower help you this week? - <br> <<= App.SF.Caps()>> can spare some profits from our recent operations. | <<link "Request cash" "Firebase">> - <<set $CashGift = 25000*($SF.Size/10)*_Env,$SF.Gift = 1,$choice = 1>> - <<set $CashGift = ($CashGift > 5000 ? $CashGift : 5000)>> - <<run cashX(Math.ceil($CashGift * 0.8), "specialForces")>> - <</link>> - <<if $rep < 20000>> - <br>We can set some units aside for a ceremonial march through the arcology. | <<link "Request a parade" "Firebase">> - <<set $GoodWords1 += 50*(Math.ceil($SF.Size*0.03*_Env))>> - <<set $GoodWords1 = (Number($GoodWords1) ? $GoodWords1 : 500),$SF.Gift = 1>> - <<set $choice = 2>> - <<run repX(Math.ceil($GoodWords1*0.8), "specialForces")>> - <</link>> - <</if>> - <<if $arcologies[0].prosperity < $AProsperityCap>> - <br>Or we can target rival businesses for sabotage. | <<link "Request sabotage" "Firebase">> + <<if $SF.Colonel.Talk + $SF.Colonel.Fun !== 1>> + <br>Or we could hit some businesses that rival the ones in $arcologies[0].name with some sabotage. + <<else>> + <br>Or we can target rival businesses for sabotage. + <</if>> + | <<link "Request sabotage" "Firebase">> <<set $GoodWords2 = _EnvProsp+(Math.ceil($SF.Size/100*_Env)),$SF.Gift = 1,$choice = 3>> <<if $arcologies[0].prosperity + $GoodWords2 * 0.8 > $AProsperityCap>> <<set $arcologies[0].prosperity = $AProsperityCap>> @@ -55,17 +48,9 @@ <</if>> <</if>> -<<if $SF.Colonel.Talk === 0 && $SF.Colonel.Fun === 0 && $SF.MercCon.CanAttend === -1>> <span id="result0"> +<<if $SF.Colonel.Talk === 0 && $SF.Colonel.Fun === 0>> + <span id="result0"> <br>"If you need me for anything else, let me know." - <<= App.SF.fsIntegration()>> - <<if $SF.MercCon.History >= 1>> <br> - <<link "Mercenary meetup report">> - <<replace "#result0">> - <br><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 num($SF.MercCon.Menials)>> menial slaves were won in a poker game, and <<print num($SF.MercCon.Mercs)>> mercenaries were persuaded to join $SF.Lower. - <br>Total earnings thus far: @@.yellowgreen;<<print cashFormat(Math.ceil($SF.MercCon.Revenue))>>@@ in income, <<print num($SF.MercCon.TotalMenials)>> menial slaves and <<print num($SF.MercCon.TotalMercs)>> mercenaries joined across $SF.MercCon.History meetups. - <</replace>> - <</link>> - <</if>> <<if $SF.Colonel.Status >= 25>> <br><<link "Walk with The Colonel on the surface">> @@ -291,4 +276,4 @@ <</replace>> <</link>> /*Closes talk*/ </span> -<</if>> /*Closes spend time with The Colonel*/ +<</if>> /*Closes spend time with The Colonel*/ \ No newline at end of file diff --git a/src/events/intro/introSummary.tw b/src/events/intro/introSummary.tw index e7e4b28fa322e8d96f8f5887d46c7b72279b1138..be921e5753767cd93b71fca18f57ce4b420626b7 100644 --- a/src/events/intro/introSummary.tw +++ b/src/events/intro/introSummary.tw @@ -355,13 +355,6 @@ You may review your settings before clicking "Continue" to begin.<br> <<run _options.addOption("The Special Force Mod is", "Toggle", $SF).addComment("This mod is initially from anon1888 but expanded by SFanon offers a lategame special (started out as security but changed to special in order to try and reduce confusion with CrimeAnon's separate Security Expansion (SecExp) mod) force, that is triggered after week 80. It is non-canon where it conflicts with canonical updates to the base game.") .addValue("Enabled", 1).on().addValue("Disabled", 0).off()>> - /*The support facility is - <<if $SF.Facility.Toggle < 1>> - @@.red;DISABLED.@@ [[Enable|Intro Summary][$SF.Facility.Toggle = 1]] - <<else>> - @@.cyan;ENABLED.@@ [[Disable|Intro Summary][$SF.Facility.Toggle = 0]] - <</if>> //Prep for future content.*/ - <<run _options.addOption("The Security Expansion Mod is", "secExpEnabled").addComment("This mod introduces security and crime in the arcology, as well as attacks and battles.") .addValue("Enabled", 1).on().addValue("Disabled", 0).off()>> diff --git a/src/gui/options/options.tw b/src/gui/options/options.tw index dfef7055c5c1571dde07bdfb74f29aefbb05ba80..af9ccc48610198cac88a1be5228d35df034fe4ea 100644 --- a/src/gui/options/options.tw +++ b/src/gui/options/options.tw @@ -38,13 +38,6 @@ <<if $secExpEnabled == 1>> <br>[[Apply Security Expansion mod backwards compatibility |SecExpBackwardCompatibility]] <</if>> - <<if $SF.Toggle && $SF.Active >= 1>> - <br> - <<link "Apply Special Force Expansion mod backwards compatibility">> - <<= App.SF.BC()>> - <<goto "Options">> - <</link>> - <</if>> </div> <<link "Reset extended family mode controllers">> <<run resetFamilyCounters()>> @@ -395,16 +388,6 @@ <<run _options.addOption("The Special Force Mod is currently", "Toggle", $SF) .addValue("Enabled", 1).on().addValue("Disabled", 0).off()>> - /* - <<if $SF.Toggle > 0>> - <<options $SF.Facility.Toggle>> - <br> The support facility is - <<option 1 "Enabled">> - <<option 0 "Disabled">> - <</options>> - <</if>> //Prep for future content.// - */ - <<run _options.addOption("The Security Expansion mod is", "secExpEnabled") .addValue("Enabled", 1).on().addValue("Disabled", 0).off() .addComment("<div>The mod can be activated in any moment, but it may result in unbalanced gameplay if activated very late in the game.</div> diff --git a/src/init/storyInit.tw b/src/init/storyInit.tw index ec134ed408094c618cd53e4dc0f92c2049bc3e43..326153feebfb9de116e42e385fa908fcc02ddb89 100644 --- a/src/init/storyInit.tw +++ b/src/init/storyInit.tw @@ -47,7 +47,7 @@ You should have received a copy of the GNU General Public License along with thi })>> <<set $JobIDMap = makeJobIdMap()>> -/*SFVAR*/ <<set $SF = Object.assign({}, $SF, {Toggle:0, Active: -1}), $SF.Facility = Object.assign({}, $SF.Facility, {Toggle:0, Active:0})>> +<<= App.SF.Init()>> <<set $foodConsumption = (($lowerClass*$foodRate.lower) + ($middleClass*$foodRate.middle) + ($upperClass*$foodRate.upper) + ($topClass*$foodRate.top))>> /* total amount food consumed per week */ @@ -58,6 +58,4 @@ You should have received a copy of the GNU General Public License along with thi <<set $customSlave = new App.Entity.CustomSlaveOrder()>> <<set $huskSlave = new App.Entity.CustomSlaveOrder()>> -<<= App.SF.Init()>> - -<<goto "Alpha disclaimer">> +<<goto "Alpha disclaimer">> \ No newline at end of file diff --git a/src/pregmod/JobFulfillmentCenter/JobFulfillmentCenterOrder.tw b/src/pregmod/JobFulfillmentCenter/JobFulfillmentCenterOrder.tw index a361ce1163fd08123bc2dbfaa5cb5805a20c7a3a..38241c44967539aa07c76ea336c22033a61e424a 100644 --- a/src/pregmod/JobFulfillmentCenter/JobFulfillmentCenterOrder.tw +++ b/src/pregmod/JobFulfillmentCenter/JobFulfillmentCenterOrder.tw @@ -12,9 +12,6 @@ <<link "Security">> <<replace "#JobType">> <br> - /*<<if $SF.Toggle && $SF.Active >= 1 && $SF.Facility.Toggle > 0 && $SF.Facility.Active > 0 && $SF.Facility.LCActive < 1>> - <br>[[Lieutenant Colonel|JobFulfillmentCenterOrder][$JFCOrder = 1, $Role = "Lieutenant Colonel"]] - <</if>>*/ <br>[[Bodyguard|JobFulfillmentCenterOrder][$JFCOrder = 1, $Role = "Bodyguard"]] <br>[[Wardeness|JobFulfillmentCenterOrder][$JFCOrder = 1, $Role = "Wardeness"]] <br>[[Return|JobFulfillmentCenterOrder]] diff --git a/src/pregmod/eliteTakeOverResult.tw b/src/pregmod/eliteTakeOverResult.tw index 2c0534278c1176a026b73ee129e073b4abc433a2..dfd398604c6ef006b027e5a5120fefdf8c601e4a 100644 --- a/src/pregmod/eliteTakeOverResult.tw +++ b/src/pregmod/eliteTakeOverResult.tw @@ -93,7 +93,7 @@ <</replace>> <</link>> </span> - <<if $SF.MercCon.CanAttend === -1>> + <<if $SF.MercCon.CanAttend === -2>> <<switch $SF.Colonel.Core>> <<case "kind">> The Colonel is shocked that you would allow her troops to do this but understands that it comes with the territory.<<if _SFHappyEverAfter == 1>> "Thanks for being kind to one of my soldiers."<</if>>