diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js index c7ee0825544a7b14dba4cfdbf8f2b63351e86c43..2c8d35a6332f00dda4d142a304578f744c60dfd1 100644 --- a/js/003-data/gameVariableData.js +++ b/js/003-data/gameVariableData.js @@ -434,16 +434,9 @@ App.Data.resetOnNGPlus = { PCrebLoss: 0, /* armed forces stats */ - targetUnit: 0, - targetIndex: 0, - secBotsCost: 500, - secBotsUpgradeCost: 250, - equipUpgradeCost: 250, - maxTroops: 30, militiaFreeManpower: 0, militiaTotalCasualties: 0, slavesTotalCasualties: 0, - slavesMaxTroops: 30, mercFreeManpower: 0, mercTotalCasualties: 0, createdSlavesUnits: 0, @@ -1467,6 +1460,11 @@ App.Data.resetOnNGPlus = { slave: 0 /* { type: string, company: string */ }, tempEventToggle: 0, + /** + * Assignments texts for slaves who choose their own assignment, set at during the first pass in App.SlaveAssignment.choosesOwnJob() + * @type {Object.<number, string>} + */ + choosesOwnAssignmentText: {}, }; App.Data.ignoreGameStateVariables = [ diff --git a/src/Mods/SecExp/buildings/propagandaHub.tw b/src/Mods/SecExp/buildings/propagandaHub.tw index 6b72a7bc9e6edadef51bbf0853161806145f35d4..da3f9f3668003ada274cdb18c54b6a367772d136 100644 --- a/src/Mods/SecExp/buildings/propagandaHub.tw +++ b/src/Mods/SecExp/buildings/propagandaHub.tw @@ -62,13 +62,15 @@ The propaganda hub is a surprisingly inconspicuous building, dimly lit from the <<set $SecExp.buildings.propHub.focus = "enslavement">> <</link>> <</if>> - | - <<if $SecExp.buildings.propHub.focus == "recruitment">> - recruitment - <<else>> - <<link "recruitment" "propagandaHub">> - <<set $SecExp.buildings.propHub.focus = "recruitment">> - <</link>> + <<if $militiaFounded == 1>> + | + <<if $SecExp.buildings.propHub.focus == "recruitment">> + recruitment + <<else>> + <<link "recruitment" "propagandaHub">> + <<set $SecExp.buildings.propHub.focus = "recruitment">> + <</link>> + <</if>> <</if>> <br> You are concentrating your propaganda efforts towards diff --git a/src/Mods/SecExp/buildings/secBarracks.tw b/src/Mods/SecExp/buildings/secBarracks.tw index 0fbe76bf1a140780ea578f17e03b84edec1c5da8..e747527ba4757d49d7ef0633679e22c8eb0c5234 100644 --- a/src/Mods/SecExp/buildings/secBarracks.tw +++ b/src/Mods/SecExp/buildings/secBarracks.tw @@ -1,12 +1,9 @@ :: secBarracks [nobr jump-to-safe jump-from-safe] -<<set $nextButton = "Back">> -<<set $nextLink = "Main">> +<<set $nextButton = "Back", $nextLink = "Main">> The Barracks -<hr> -__Upgrades__ -<br> +<hr>__Upgrades__<br> While this a sore sight for many citizens of $arcologies[0].name, the barracks stand proud before you. <<if $SecExp.buildings.barracks.upgrades.size == 0>> The building is relatively small and able to house a limited number of units. @@ -46,8 +43,7 @@ While this a sore sight for many citizens of $arcologies[0].name, the barracks s <<else>> The barracks have been fitted with an advanced indoctrination facility. <</if>> -<br> -<br> +<br><br> <<if $SecExp.buildings.barracks.upgrades.size < 5>> <<link "Increase the size of the barracks" "secBarracks">> <<run cashX(forceNeg(Math.trunc((5000 * ($SecExp.buildings.barracks.upgrades.size + 1))*$upgradeMultiplierArcology)), "capEx")>> @@ -118,9 +114,7 @@ While this a sore sight for many citizens of $arcologies[0].name, the barracks s You have improved the indoctrination facility to the limit. <</if>> -<hr> -__Units__ -<br> +<hr>__Units__<br> Your current maximum number of units is <<print App.SecExp.battle.maxUnits()>> (<<print num($secBots.maxTroops+(50*App.SecExp.battle.maxUnits()))>> troops), <<print App.SecExp.battle.activeUnits()>> (<<print num($secBots.maxTroops+App.SecExp.Manpower.employedOverall)>> troops) are active and <<print (2 * App.SecExp.battle.deploySpeed())>> units can be deployed. <<if $SecExp.buildings.barracks.upgrades.luxury > 0>>The barracks provides <<print $SecExp.buildings.barracks.upgrades.luxury * 5>>% bonus morale when battle occurs.<</if>> <<if $SecExp.buildings.barracks.upgrades.training > 0>>The training facility will increase the effectiveness of your units with time.<</if>> <br> <<set _options = new App.UI.OptionsGroup()>> @@ -132,349 +126,312 @@ Your current maximum number of units is <<print App.SecExp.battle.maxUnits()>> ( <</if>> <<if $arcologies[0].FSRomanRevivalist != "unset" || $arcologies[0].FSChineseRevivalist != "unset" || $arcologies[0].FSArabianRevivalist != "unset" || $arcologies[0].FSEdoRevivalist != "unset" || $arcologies[0].FSEgyptianRevivalist != "unset" || $arcologies[0].FSAztecRevivalist != "unset">> <</if>> -<br> -<<replenishAllUnits>> -<br>__Security Drones__ -/* drones */ -<br> +<<replenishAllUnits>> -<<if $arcologyUpgrade.drones == 1>> - <<= App.SecExp.getUnit("Bots").describe()>> - <br> - <<if $secBots.active == 1>> - <<link "Review Equipment and upgrades" "seeUnit">> - <<set $targetUnit = "secBots">> - <</link>> - <<if $secBots.troops < $secBots.maxTroops>> - | - <<link "Replenish the unit" "secBarracks">> - <<run cashX(forceNeg(($secBots.maxTroops - $secBots.troops) * $secBotsCost), "securityExpansion")>> - <<set $secBots.troops = $secBots.maxTroops>> - <</link>> - <</if>> - <<else>> - <<link "Rebuild the unit" "secBarracks">> - <<run cashX(forceNeg(($secBots.maxTroops - $secBots.troops) * $secBotsCost), "securityExpansion")>> - <<set $secBots.troops = $secBots.maxTroops>> - <<set $secBots.active = 1>> - <</link>> - <</if>> -<<else>> +<<if $arcologyUpgrade.drones === 0>> You have not yet installed a drone security system in your arcology, you will not be able to form a unit of drones. <</if>> - -<br><br>__Slaves__ -<br>/* slaves */ -You are free to organize your menial slaves into fighting units. Currently you have <<print num($menials)>> slaves available, while <<print num(App.SecExp.Manpower.employedSlave)>> are already employed as soldiers. During all your battles you lost a total of <<print num($slavesTotalCasualties)>>. -<<run MenialPopCap()>> -<<set _menialPrice = menialSlaveCost()>> -<<set _bulkMax = $PopCap-$menials-$fuckdolls-$menialBioreactors>> -<<if $cash > _menialPrice>> - <<if _bulkMax > 0>> - <br> - [[Buy|secBarracks][$menials+=1,$menialSupplyFactor-=1,cashX(forceNeg(_menialPrice), "menialTransfer")]] - <<if $cash > (menialSlaveCost(10))*10>> - [[(x10)|secBarracks][$menials+=10,$menialSupplyFactor-=10,cashX(forceNeg((menialSlaveCost(10))*10), "menialTransfer")]] - <</if>> - <<if $cash > (menialSlaveCost(100))*100>> - [[(x100)|secBarracks][$menials+=100,$menialSupplyFactor-=100,cashX(forceNeg((menialSlaveCost(100))*100), "menialTransfer")]] - <</if>> - <<if $cash > (_menialPrice+1)*2>> - <<set _menialBulkPremium = Math.trunc(1 + Math.clamp($cash/_menialPrice,0,_bulkMax)/400)>> - [[(max)|secBarracks][$menials+=Math.trunc(Math.clamp($cash/(_menialPrice+_menialBulkPremium),0,_bulkMax)),$menialSupplyFactor-=Math.trunc(Math.clamp($cash/(_menialPrice+_menialBulkPremium),0,_bulkMax)),cashX(forceNeg(Math.trunc(Math.clamp($cash/(_menialPrice+_menialBulkPremium),0,_bulkMax)*(_menialPrice+_menialBulkPremium))), "menialTransfer")]] - <</if>> - //Bulk transactions may require offering a premium.// - <</if>> +<<if $militiaFounded === 0>> + <br>You have not yet founded the militia, you will not be able to form citizens units. <</if>> -<br> -<<set _sL = $slaveUnits.length>> -<<if $menials > 0 && App.SecExp.battle.activeUnits() < App.SecExp.battle.maxUnits()>> - <br> - <<link "Form a new unit" "secBarracks">> - <<set _newUnit = { - ID: App.SecExp.generateUnitID(), - platoonName: ordinalSuffix(++$createdSlavesUnits) + " slave platoon", - active: 1, - isDeployed: 0, - troops: Math.min($maxTroops, $menials), - maxTroops: $maxTroops, - equip: 0, - training: 0, - loyalty: random(40,60), - cyber: 0, - medics: 0, - SF: 0, - commissars: 0, - battlesFought: 0}>> - <<set $slaveUnits.push(_newUnit)>> - <<set $menials -= _newUnit.troops>> - <</link>> +<<if $mercenaries === 0>> + <br>Mercenaries are not allowed inside the arcology. You will not be able to recruit mercenary units. <</if>> -<<for _i = 0; _i < _sL; _i++>> - <<capture _i>> - <<= App.SecExp.getUnit("Slaves", _i).describe()>> - <<if $slaveUnits[_i].active == 1>> - <br> - <<link "Disband the unit" "secBarracks">> - <<set $menials += $slaveUnits[_i].troops>> - <<set $slaveUnits.deleteAt(_i)>> - <</link>> - | - <<link "Review Equipment and upgrades" "seeUnit">> - <<set $targetUnit = "slaveUnits">> - <<set $targetIndex = _i>> - <</link>> - - <<if $slaveUnits[_i].troops < $slaveUnits[_i].maxTroops && $menials > 0>> - | - <<link "Replenish unit" "secBarracks">> - <<if $menials >= $slaveUnits[_i].maxTroops - $slaveUnits[_i].troops>> - <<set $menials -= $slaveUnits[_i].maxTroops - $slaveUnits[_i].troops>> - <<set _expLoss = ($slaveUnits[_i].maxTroops - $slaveUnits[_i].troops) / $slaveUnits[_i].troops>> - <<set $slaveUnits[_i].training -= $slaveUnits[_i].training * _expLoss>> - <<set $slaveUnits[_i].troops = $slaveUnits[_i].maxTroops>> - <<else>> - <<set _expLoss = $menials / $slaveUnits[_i].troops>> - <<set $slaveUnits[_i].training -= $slaveUnits[_i].training * _expLoss>> - <<set $slaveUnits[_i].troops += $menials>> - <<set $menials = 0>> - <</if>> - <</link>> - <</if>> - - <<else>> - <br> - <<link "Disband the unit" "secBarracks">> - <<set _elimUnit = $slaveUnits[_i]>> - <<set _newSlaveUnits = []>> - <<for _y = 0; _y < _sL; _y++>> - <<if $slaveUnits[_y] != _elimUnit>> - <<set _newSlaveUnits.push($slaveUnits[_y])>> - <</if>> - <</for>> - <<set $slaveUnits = _newSlaveUnits>> - <</link>> - - <<if $menials > 0>> - | - <<link "Reform the unit" "secBarracks">> - <<if $menials >= $slaveUnits[_i].maxTroops>> - <<set $menials -= $slaveUnits[_i].maxTroops>> - <<set $slaveUnits[_i].troops = $slaveUnits[_i].maxTroops>> - <<set $slaveUnits[_i].training = 0>> - <<else>> - <<set $slaveUnits[_i].troops += $menials>> - <<set $menials = 0>> - <<set $slaveUnits[_i].training = 0>> - <</if>> - <<set $slaveUnits[_i].active = 1>> - <</link>> - <</if>> +<div class="tabbar"> + <<if $arcologyUpgrade.drones == 1>> + <button class="tablinks" onclick="App.UI.tabbar.openTab(event, 'Bots')" id="tab Bots">Security Drones</button> <</if>> - <</capture>> -<</for>> - -<<if $militiaFounded == 1>> -<br> -__Militia__ -<br>/* militia */ - You founded the $arcologies[0].name free militia. You are now able to organize your citizens into fighting units. - <<if $recruitVolunteers == 1>> - The militia is composed entirely of volunteers, your manpower is approximately 1.5% of the citizens population of your arcology. - <<elseif $conscription == 1>> - With the establishment of conscription, your available manpower has increased to now approximately 3% of the arcology's citizens population. - <<elseif $militaryService == 1>> - By establishing obligatory military service to obtain citizenship you have enlarged your manpower pool to be approximately 5% of the arcology's citizens population. - <<elseif $militarizedSociety == 1>> - With the adoption of a militarized society, your available manpower has swelled to be approximately 15% of the arcology's citizens population. + <<if $militiaFounded == 1>> + <button class="tablinks" onclick="App.UI.tabbar.openTab(event, 'Militia')" id="tab Militia">Militia: ($militiaUnits.length)</button> <</if>> - Your current total manpower is <<print num(App.SecExp.Manpower.totalMilitia)>>, of which <<print num(App.SecExp.Manpower.employedMilitia)>> is in active duty. You lost in total <<print num($militiaTotalCasualties)>> citizens, leaving you with <<print num($militiaFreeManpower)>> available citizens. - <<set _mL = $militiaUnits.length>> - <<if $militiaFreeManpower > 0 && App.SecExp.battle.activeUnits() < App.SecExp.battle.maxUnits()>> - <br><br> - <<link "Form a new unit" "secBarracks">> - <<set _newUnit = { - ID: App.SecExp.generateUnitID(), - platoonName: ordinalSuffix(++$createdMilitiaUnits) + " citizens' platoon", - active: 1, - isDeployed: 0, - troops: Math.min($maxTroops, $militiaFreeManpower), - maxTroops: $maxTroops, - equip: 0, - training: 0, - loyalty: random(40,60), - cyber: 0, - medics: 0, - SF: 0, - commissars: 0, - battlesFought: 0}>> - <<set $militiaUnits.push(_newUnit)>> - <<set $militiaFreeManpower -= _newUnit.troops>> - <</link>> + <<if $mercenaries >= 1>> + <button class="tablinks" onclick="App.UI.tabbar.openTab(event, 'Mercs')" id="tab Mercs">Mercenaries: ($mercUnits.length)</button> <</if>> - <<for _i = 0; _i < _mL; _i++>> - <<capture _i>> - <<= App.SecExp.getUnit("Militia", _i).describe()>> - <<if $militiaUnits[_i].active == 1>> + <button class="tablinks" onclick="App.UI.tabbar.openTab(event, 'Slaves')" id="tab Slaves">Slaves: ($slaveUnits.length)</button> +</div> +<<run App.UI.tabbar.handlePreSelectedTab($tabChoice.secBarracks)>> +<div id="Bots" class="tabcontent"> + <div class="content"> + <<set _secBotsCost = 500, _secBotsUpgradeCost = 250>> + <<= App.SecExp.getUnit("Bots").describe()>> <br> + <<if $secBots.active == 1>> + <<if $secBots.maxTroops > $secBots.troops>> <br> + <<link "Replenish the unit" "seeUnit">> + <<run cashX(forceNeg(($secBots.maxTroops - $secBots.troops) * _secBotsCost), "securityExpansion")>> + <<set $secBots.troops = $secBots.maxTroops>> + <</link>> + <</if>> <br> - <<link "Disband the unit" "secBarracks">> - <<set $militiaFreeManpower += $militiaUnits[_i].troops>> - <<set $militiaUnits.deleteAt(_i)>> - <</link>> - | - <<link "Review Equipment and upgrades" "seeUnit">> - <<set $targetUnit = "militiaUnits">> - <<set $targetIndex = _i>> - <</link>> - - <<if $militiaUnits[_i].troops < $militiaUnits[_i].maxTroops && $militiaFreeManpower > 0>> + <<if $secBots.maxTroops < 80>> <br> + <<link "Improve the digital control matrix" "seeUnit">> + <<set $secBots.maxTroops += 10>> + <<run cashX(-5000, "securityExpansion")>> + <</link>> + Invest in the development of more refined controls for your drones to increase the maximum number of drones in the unit. + <br>//Costs <<print cashFormat(5000)>> per upgrade and each will increase the max by 10// + <<elseif $SF.Toggle && $SF.Active >= 1 && $secBots.maxTroops < 100 && $SecExp.edicts.SFSupportLevel >= 1>> <br> + <<link "Refine the drone network with $SF.Lower assistance" "seeUnit">> + <<set $secBots.maxTroops += 10>> + <<run cashX(forceNeg(5000 + 10 * _secBotsUpgradeCost * $secBots.equip), "securityExpansion")>> + <</link>> + Utilize the technological developments made by $SF.Lower to further improve the control matrix of the security drones. + <br>//Costs <<print cashFormat(5000 + 10 * _secBotsUpgradeCost * $secBots.equip)>> and will increase the max by 10// + <<elseif $SF.Toggle && $SF.Active >= 1 && $SecExp.edicts.SFSupportLevel < 1>> + There's little left to improve in the matrix. However support from $SF.Lower might give some more room from improvement. + <<else>> + There's little left to improve in the matrix. Your control systems are at top capacity and won't be able to handle a bigger drone unit. + <</if>> + <<if $secBots.equip < 3>> <br> + <<link "Improve drone weaponry and armor" "seeUnit">> + <<set $secBots.equip += 1>> + <<run cashX(forceNeg((_secBotsUpgradeCost * $secBots.maxTroops) + 1000), "securityExpansion")>> + <</link>> + Invest in better equipment for your drones to increase their battle effectiveness. + <br>//Costs <<print cashFormat((_secBotsUpgradeCost * $secBots.maxTroops) + 1000)>> and will increase attack and defense value of the unit by 15% for every upgrade.// + <<else>> + <br>Your drones are equipped with top tier weaponry and armor. + <</if>> + <<if $SecExp.settings.showStats == 1>> + <br><<= _App.SecExp.getUnit("Bots").printStats()>> + <</if>> + <<if $secBots.troops < $secBots.maxTroops>> | - <<link "Replenish unit" "secBarracks">> - <<if $militiaFreeManpower >= $militiaUnits[_i].maxTroops - $militiaUnits[_i].troops>> - <<set $militiaFreeManpower -= $militiaUnits[_i].maxTroops - $militiaUnits[_i].troops>> - <<set _expLoss = ($militiaUnits[_i].maxTroops - $militiaUnits[_i].troops) / $militiaUnits[_i].troops>> - <<set $militiaUnits[_i].training -= $militiaUnits[_i].training * _expLoss>> - <<set $militiaUnits[_i].troops = $militiaUnits[_i].maxTroops>> - <<else>> - <<set _expLoss = $militiaFreeManpower / $militiaUnits[_i].troops>> - <<set $militiaUnits[_i].training -= $militiaUnits[_i].training * _expLoss>> - <<set $militiaUnits[_i].troops += $militiaFreeManpower>> - <<set $militiaFreeManpower = 0>> - <</if>> + <<link "Replenish the unit" "secBarracks">> + <<run cashX(forceNeg(($secBots.maxTroops - $secBots.troops) * _secBotsCost), "securityExpansion")>> + <<set $secBots.troops = $secBots.maxTroops>> <</link>> <</if>> <<else>> - <br> - <<link "Disband the unit" "secBarracks">> - <<set $militiaFreeManpower += $militiaUnits[_i].troops>> - <<set _elimUnit = $militiaUnits[_i]>> - <<set _newMilitiaUnits = []>> - <<for _y = 0; _y < _sL; _y++>> - <<if $militiaUnits[_y] != _elimUnit>> - <<set _newMilitiaUnits.push($militiaUnits[_y])>> - <</if>> - <</for>> - <<set $militiaUnits = _newMilitiaUnits>> + <<link "Rebuild the unit" "secBarracks">> + <<run cashX(forceNeg(($secBots.maxTroops - $secBots.troops) * _secBotsCost), "securityExpansion")>> + <<set $secBots.troops = $secBots.maxTroops>> + <<set $secBots.active = 1>> <</link>> - - <<if $militiaFreeManpower > 0>> - | - <<link "Reform the unit" "secBarracks">> - <<if $militiaFreeManpower >= $militiaUnits[_i].maxTroops>> - <<set $militiaFreeManpower -= $militiaUnits[_i].maxTroops>> - <<set $militiaUnits[_i].troops = $militiaUnits[_i].maxTroops>> - <<set $militiaUnits[_i].training = 0>> - <<else>> - <<set $militiaUnits[_i].troops += $militiaFreeManpower>> - <<set $militiaFreeManpower = 0>> - <<set $militiaUnits[_i].training = 0>> - <</if>> - <<set $militiaUnits[_i].active = 1>> - <</link>> + <</if>> + </div> +</div> +<div id="Slaves" class="tabcontent"> + <div class="content"> + You are free to organize your menial slaves into fighting units. Currently you have <<print num($menials)>> slaves available, while <<print num(App.SecExp.Manpower.employedSlave)>> are already employed as soldiers. During all your battles you lost a total of <<print num($slavesTotalCasualties)>>. + <<if $menials > 0 && App.SecExp.battle.activeUnits() < App.SecExp.battle.maxUnits()>> + <<link "Form a new unit" "secBarracks">> + <<set $slaveUnits.push(App.SecExp.generateUnit("slaves"))>> + <</link>> + <</if>> + <<run MenialPopCap()>> + <<set _menialPrice = menialSlaveCost()>> + <<set _bulkMax = $PopCap-$menials-$fuckdolls-$menialBioreactors>> + <<if $cash > _menialPrice>> + <<if _bulkMax > 0>> <br> + [[Buy|secBarracks][$menials+=1,$menialSupplyFactor-=1,cashX(forceNeg(_menialPrice), "menialTransfer")]] + <<if $cash > (menialSlaveCost(10))*10>> + [[(x10)|secBarracks][$menials+=10,$menialSupplyFactor-=10,cashX(forceNeg((menialSlaveCost(10))*10), "menialTransfer")]] + <</if>> + <<if $cash > (menialSlaveCost(100))*100>> + [[(x100)|secBarracks][$menials+=100,$menialSupplyFactor-=100,cashX(forceNeg((menialSlaveCost(100))*100), "menialTransfer")]] + <</if>> + <<if $cash > (_menialPrice+1)*2>> + <<set _menialBulkPremium = Math.trunc(1 + Math.clamp($cash/_menialPrice,0,_bulkMax)/400)>> + [[(max)|secBarracks][$menials+=Math.trunc(Math.clamp($cash/(_menialPrice+_menialBulkPremium),0,_bulkMax)),$menialSupplyFactor-=Math.trunc(Math.clamp($cash/(_menialPrice+_menialBulkPremium),0,_bulkMax)),cashX(forceNeg(Math.trunc(Math.clamp($cash/(_menialPrice+_menialBulkPremium),0,_bulkMax)*(_menialPrice+_menialBulkPremium))), "menialTransfer")]] + <</if>> + //Bulk transactions may require offering a premium.// <</if>> <</if>> - <</capture>> - <</for>> - <br> -<<else>> - <br><br> - You have not yet founded the militia, you will not be able to form citizens units. -<</if>> - -<<if $mercenaries >= 1>> -<br> -__Mercenaries__ -<br>/* mercenaries */ - With the installation of a mercenary company in the arcology, many other are attracted to your free city, hoping to land a contract with you. - You are able to organize them in units to use in the defense of the arcology. Excluding the defense force you set up, there are <<print num(App.SecExp.Manpower.totalMerc)>> mercenaries in your arcology, of which <<print num(App.SecExp.Manpower.employedMerc)>> actively employed and <<print num($mercFreeManpower)>> not yet under contract. In total <<print num($mercTotalCasualties)>> mercenaries have died defending your arcology. - <<set _meL = $mercUnits.length>> - <<if $mercFreeManpower > 0 && App.SecExp.battle.activeUnits() < App.SecExp.battle.maxUnits()>> - <br><br> - <<link "Form a new unit" "secBarracks">> - <<set _newUnit = { - ID: App.SecExp.generateUnitID(), - platoonName: ordinalSuffix(++$createdMercUnits) + " mercenary platoon", - active: 1, - isDeployed: 0, - troops: Math.min($maxTroops, $mercFreeManpower), - maxTroops: $maxTroops, - equip: 0, - training: 0, - loyalty: random(40,60), - cyber: 0, - medics: 0, - SF: 0, - commissars: 0, - battlesFought: 0}>> - <<set $mercUnits.push(_newUnit)>> - <<set $mercFreeManpower -= _newUnit.troops>> - <</link>> - <</if>> - <<for _i = 0; _i < _meL; _i++>> - <<capture _i>> - <<= App.SecExp.getUnit("Mercs", _i).describe()>> - <<if $mercUnits[_i].active == 1>> - <br> - <<link "Disband the unit" "secBarracks">> - <<set $mercFreeManpower += $mercUnits[_i].troops>> - <<set $mercUnits.deleteAt(_i)>> + <<set _sL = $slaveUnits.length>> + <<for _i = 0; _i < _sL; _i++>> + <<capture _i>> + <<= App.SecExp.getUnit("Slaves", _i).describe()>> <br> + Rename unit <<textbox "$slaveUnits[_i].platoonName" $slaveUnits[_i].platoonName "secBarracks">> + | <<link "Disband the unit" "secBarracks">> + <<set $menials += $slaveUnits[_i].troops>> + <<set $slaveUnits.deleteAt(_i)>> <</link>> - | - <<link "Review Equipment and upgrades" "seeUnit">> - <<set $targetUnit = "mercUnits">> - <<set $targetIndex = _i>> + <<if $slaveUnits[_i].active == 1>> + <<if $slaveUnits[_i].troops < $slaveUnits[_i].maxTroops && $menials > 0>> + | + <<link "Replenish unit" "secBarracks">> + <<if $menials >= $slaveUnits[_i].maxTroops - $slaveUnits[_i].troops>> + <<set $menials -= $slaveUnits[_i].maxTroops - $slaveUnits[_i].troops>> + <<set _expLoss = ($slaveUnits[_i].maxTroops - $slaveUnits[_i].troops) / $slaveUnits[_i].troops>> + <<set $slaveUnits[_i].training -= $slaveUnits[_i].training * _expLoss>> + <<set $slaveUnits[_i].troops = $slaveUnits[_i].maxTroops>> + <<else>> + <<set _expLoss = $menials / $slaveUnits[_i].troops>> + <<set $slaveUnits[_i].training -= $slaveUnits[_i].training * _expLoss>> + <<set $slaveUnits[_i].troops += $menials>> + <<set $menials = 0>> + <</if>> + <</link>> + <</if>> + <<if $SecExp.settings.showStats == 1>> + <br><<= App.SecExp.getUnit("Slaves", _i).printStats()>> + <</if>> + <<includeDOM App.SecExp.humanUnitUpgradeList($slaveUnits[_i])>> + <<else>> + <<if $menials > 0>> + | + <<link "Reform the unit" "secBarracks">> + <<if $menials >= $slaveUnits[_i].maxTroops>> + <<set $menials -= $slaveUnits[_i].maxTroops>> + <<set $slaveUnits[_i].troops = $slaveUnits[_i].maxTroops>> + <<set $slaveUnits[_i].training = 0>> + <<else>> + <<set $slaveUnits[_i].troops += $menials>> + <<set $menials = 0>> + <<set $slaveUnits[_i].training = 0>> + <</if>> + <<set $slaveUnits[_i].active = 1>> + <</link>> + <</if>> + <</if>> + <</capture>> + <</for>> + </div> +</div> +<div id="Militia" class="tabcontent"> + <div class="content"> + You founded the $arcologies[0].name free militia. You are now able to organize your citizens into fighting units. + <<if $recruitVolunteers == 1>> + The militia is composed entirely of volunteers, your manpower is approximately 1.5% of the citizens population of your arcology. + <<elseif $conscription == 1>> + With the establishment of conscription, your available manpower has increased to now approximately 3% of the arcology's citizens population. + <<elseif $militaryService == 1>> + By establishing obligatory military service to obtain citizenship you have enlarged your manpower pool to be approximately 5% of the arcology's citizens population. + <<elseif $militarizedSociety == 1>> + With the adoption of a militarized society, your available manpower has swelled to be approximately 15% of the arcology's citizens population. + <</if>> + Your current total manpower is <<print num(App.SecExp.Manpower.totalMilitia)>>, of which <<print num(App.SecExp.Manpower.employedMilitia)>> is in active duty. You lost in total <<print num($militiaTotalCasualties)>> citizens, leaving you with <<print num($militiaFreeManpower)>> available citizens. + <<if $militiaFreeManpower > 0 && App.SecExp.battle.activeUnits() < App.SecExp.battle.maxUnits()>> <br><br> + <<link "Form a new unit" "secBarracks">> + <<set $militiaUnits.push(App.SecExp.generateUnit("militia"))>> <</link>> - - <<if $mercUnits[_i].troops < $mercUnits[_i].maxTroops && $mercFreeManpower > 0>> - | - <<link "Replenish unit" "secBarracks">> - <<if $mercFreeManpower >= $mercUnits[_i].maxTroops - $mercUnits[_i].troops>> - <<set $mercFreeManpower -= $mercUnits[_i].maxTroops - $mercUnits[_i].troops>> - <<set _expLoss = ($mercUnits[_i].maxTroops - $mercUnits[_i].troops) / $mercUnits[_i].troops>> - <<set $mercUnits[_i].training -= $mercUnits[_i].training * _expLoss>> - <<set $mercUnits[_i].troops = $mercUnits[_i].maxTroops>> - <<else>> - <<set _expLoss = $mercFreeManpower / $mercUnits[_i].troops>> - <<set $mercUnits[_i].training -= $mercUnits[_i].training * _expLoss>> - <<set $mercUnits[_i].troops += $mercFreeManpower>> - <<set $mercFreeManpower = 0>> - <</if>> - <</link>> + <</if>> + <<set _mL = $militiaUnits.length>> + <<for _i = 0; _i < _mL; _i++>> + <<capture _i>> + <<= App.SecExp.getUnit("Militia", _i).describe()>> <br> + Rename unit <<textbox "$militiaUnits[_i].platoonName" $militiaUnits[_i].platoonName "secBarracks">> + | <<link "Disband the unit" "secBarracks">> + <<set $militiaFreeManpower += $militiaUnits[_i].troops>> + <<set $militiaUnits.deleteAt(_i)>> + <</link>> + <<if $militiaUnits[_i].active == 1>> + <<if $militiaUnits[_i].troops < $militiaUnits[_i].maxTroops && $militiaFreeManpower > 0>> + | + <<link "Replenish unit" "secBarracks">> + <<if $militiaFreeManpower >= $militiaUnits[_i].maxTroops - $militiaUnits[_i].troops>> + <<set $militiaFreeManpower -= $militiaUnits[_i].maxTroops - $militiaUnits[_i].troops>> + <<set _expLoss = ($militiaUnits[_i].maxTroops - $militiaUnits[_i].troops) / $militiaUnits[_i].troops>> + <<set $militiaUnits[_i].training -= $militiaUnits[_i].training * _expLoss>> + <<set $militiaUnits[_i].troops = $militiaUnits[_i].maxTroops>> + <<else>> + <<set _expLoss = $militiaFreeManpower / $militiaUnits[_i].troops>> + <<set $militiaUnits[_i].training -= $militiaUnits[_i].training * _expLoss>> + <<set $militiaUnits[_i].troops += $militiaFreeManpower>> + <<set $militiaFreeManpower = 0>> + <</if>> + <</link>> + <</if>> + <<if $SecExp.settings.showStats == 1>> + <br><<= App.SecExp.getUnit("Militia", _i).printStats()>> + <</if>> + <<includeDOM App.SecExp.humanUnitUpgradeList($militiaUnits[_i])>> + <<else>> + <<if $militiaFreeManpower > 0>> + | + <<link "Reform the unit" "secBarracks">> + <<if $militiaFreeManpower >= $militiaUnits[_i].maxTroops>> + <<set $militiaFreeManpower -= $militiaUnits[_i].maxTroops>> + <<set $militiaUnits[_i].troops = $militiaUnits[_i].maxTroops>> + <<set $militiaUnits[_i].training = 0>> + <<else>> + <<set $militiaUnits[_i].troops += $militiaFreeManpower>> + <<set $militiaFreeManpower = 0>> + <<set $militiaUnits[_i].training = 0>> + <</if>> + <<set $militiaUnits[_i].active = 1>> + <</link>> + <</if>> <</if>> - - <<else>> - <br> - <<link "Disband the unit" "secBarracks">> - <<set _elimUnit = $mercUnits[_i]>> - <<set _newMercUnits = []>> - <<for _y = 0; _y < _sL; _y++>> - <<if $mercUnits[_y] != _elimUnit>> - <<set _newMercUnits.push($mercUnits[_y])>> - <</if>> - <</for>> - <<set $mercUnits = _newMercUnits>> + <</capture>> + <</for>> + </div> +</div> +<div id="Mercs" class="tabcontent"> + <div class="content"> + With the installation of a mercenary company in the arcology, many other are attracted to your free city, hoping to land a contract with you. + You are able to organize them in units to use in the defense of the arcology. Excluding the defense force you set up, there are <<print num(App.SecExp.Manpower.totalMerc)>> mercenaries in your arcology, of which <<print num(App.SecExp.Manpower.employedMerc)>> actively employed and <<print num($mercFreeManpower)>> not yet under contract. In total <<print num($mercTotalCasualties)>> mercenaries have died defending your arcology. + <<if $mercFreeManpower > 0 && App.SecExp.battle.activeUnits() < App.SecExp.battle.maxUnits()>> <br><br> + <<link "Form a new unit" "secBarracks">> + <<set $mercUnits.push(App.SecExp.generateUnit("mercs"))>> <</link>> + <</if>> + <<set _meL = $mercUnits.length>> + <<for _i = 0; _i < _meL; _i++>> + <<capture _i>> + <<= App.SecExp.getUnit("Mercs", _i).describe()>> <br> + Rename unit <<textbox "$mercUnits[_i].platoonName" $mercUnits[_i].platoonName "secBarracks">> + | <<link "Disband the unit" "secBarracks">> + <<set $mercFreeManpower += $mercUnits[_i].troops>> + <<set $mercUnits.deleteAt(_i)>> + <</link>> + <<if $mercUnits[_i].active == 1>> + <<if $mercUnits[_i].troops < $mercUnits[_i].maxTroops && $mercFreeManpower > 0>> + | + <<link "Replenish unit" "secBarracks">> + <<if $mercFreeManpower >= $mercUnits[_i].maxTroops - $mercUnits[_i].troops>> + <<set $mercFreeManpower -= $mercUnits[_i].maxTroops - $mercUnits[_i].troops>> + <<set _expLoss = ($mercUnits[_i].maxTroops - $mercUnits[_i].troops) / $mercUnits[_i].troops>> + <<set $mercUnits[_i].training -= $mercUnits[_i].training * _expLoss>> + <<set $mercUnits[_i].troops = $mercUnits[_i].maxTroops>> + <<else>> + <<set _expLoss = $mercFreeManpower / $mercUnits[_i].troops>> + <<set $mercUnits[_i].training -= $mercUnits[_i].training * _expLoss>> + <<set $mercUnits[_i].troops += $mercFreeManpower>> + <<set $mercFreeManpower = 0>> + <</if>> + <</link>> + <</if>> + <<if $SecExp.settings.showStats == 1>> + <br><<= App.SecExp.getUnit("Mercs", _i).printStats()>> + <</if>> + <<includeDOM App.SecExp.humanUnitUpgradeList($mercUnits[_i])>> - <<if $mercFreeManpower > 0>> - | - <<link "Reform the unit" "secBarracks">> - <<if $mercFreeManpower >= $mercUnits[_i].maxTroops>> - <<set $mercFreeManpower -= $mercUnits[_i].maxTroops>> - <<set $mercUnits[_i].troops = $mercUnits[_i].maxTroops>> - <<set $mercUnits[_i].training = 0>> - <<else>> - <<set $mercUnits[_i].troops += $mercFreeManpower>> - <<set $mercFreeManpower = 0>> - <<set $mercUnits[_i].training = 0>> - <</if>> - <<set $mercUnits[_i].active = 1>> - <</link>> + <<if $mercUnits[_i].troops < $mercUnits[_i].maxTroops && $mercFreeManpower > 0>> + | + <<link "Replenish unit" "secBarracks">> + <<if $mercFreeManpower >= $mercUnits[_i].maxTroops - $mercUnits[_i].troops>> + <<set $mercFreeManpower -= $mercUnits[_i].maxTroops - $mercUnits[_i].troops>> + <<set _expLoss = ($mercUnits[_i].maxTroops - $mercUnits[_i].troops) / $mercUnits[_i].troops>> + <<set $mercUnits[_i].training -= $mercUnits[_i].training * _expLoss>> + <<set $mercUnits[_i].troops = $mercUnits[_i].maxTroops>> + <<else>> + <<set _expLoss = $mercFreeManpower / $mercUnits[_i].troops>> + <<set $mercUnits[_i].training -= $mercUnits[_i].training * _expLoss>> + <<set $mercUnits[_i].troops += $mercFreeManpower>> + <<set $mercFreeManpower = 0>> + <</if>> + <</link>> + <</if>> + <<else>> + <<if $mercFreeManpower > 0>> + | + <<link "Reform the unit" "secBarracks">> + <<if $mercFreeManpower >= $mercUnits[_i].maxTroops>> + <<set $mercFreeManpower -= $mercUnits[_i].maxTroops>> + <<set $mercUnits[_i].troops = $mercUnits[_i].maxTroops>> + <<set $mercUnits[_i].training = 0>> + <<else>> + <<set $mercUnits[_i].troops += $mercFreeManpower>> + <<set $mercFreeManpower = 0>> + <<set $mercUnits[_i].training = 0>> + <</if>> + <<set $mercUnits[_i].active = 1>> + <</link>> + <</if>> <</if>> - <</if>> - <</capture>> - <</for>> -<<else>> - <br><br> - Mercenaries are not allowed inside the arcology. You will not be able to recruit mercenary units. -<</if>> \ No newline at end of file + <</capture>> + <</for>> + </div> +</div> \ No newline at end of file diff --git a/src/Mods/SecExp/js/Unit.js b/src/Mods/SecExp/js/Unit.js index 2eedd7203ea99d7c5725ce05430f8a3ffd83fabb..b1c34c32b2b97e243ce43b87f375d2ec81052074 100644 --- a/src/Mods/SecExp/js/Unit.js +++ b/src/Mods/SecExp/js/Unit.js @@ -1,3 +1,149 @@ +/** Creates the requested unit object. + * @param {string} [type] the unit type to be created. +*/ +App.SecExp.generateUnit = function(type) { + let newUnit = {ID: -1, equip: 0, active: 1, isDeployed: 0, maxTroops:30, troops: 30}; + if (type !== "bots") { + Object.assign(newUnit, { + training: 0, cyber: 0, medics: 0, + SF: 0, commissars: 0, battlesFought: 0, + loyalty: jsRandom(40, 60), + ID: App.SecExp.generateUnitID() + }); + + if (type === "slaves") { + newUnit.platoonName = ordinalSuffix(++V.createdSlavesUnits) + " slave platoon"; + newUnit.troops = Math.min(newUnit.maxTroops, V.menials); + V.menials -= newUnit.troops; + } else if (type === "militia") { + newUnit.platoonName = ordinalSuffix(++V.createdMilitiaUnits) + " citizens' platoon"; + newUnit.troops = Math.min(newUnit.maxTroops, V.militiaFreeManpower); + V.militiaFreeManpower -= newUnit.troops; + } else if (type === "mercs") { + newUnit.platoonName = ordinalSuffix(++V.createdMercUnits) + " mercenary platoon"; + newUnit.troops = Math.min(newUnit.maxTroops, V.mercFreeManpower); + V.mercFreeManpower -= newUnit.troops; + } + } + return newUnit; +}; + +/** Prints a list of upgrades that can be applied to the passed human unit. + * @param {object} [input] the human unit to be checked. +*/ +App.SecExp.humanUnitUpgradeList = function(input) { + const equipUpgradeCost = 250; let options, el = options = document.createElement("div"); + + options = document.createElement("div"); + if (input.maxTroops < 50) { + options.append(`For ${cashFormat(5000 + 10 * equipUpgradeCost * (input.equip + input.commissars + input.cyber + input.SF))} provide this unit's `); + options.append(App.UI.DOM.link("officers with intensive training", () => { + input.maxTroops += 10, + cashX(-(5000 + 10 * equipUpgradeCost * (input.equip + input.commissars + input.cyber + input.SF)), "securityExpansion"); + }, + [], passage() + )); + options.append(` to increase the maximum number of soldiers in the unit by 10.`); + } else { + options.append(`Your officers reached their peak. Further training will have little impact on the number of troops they can effectively lead.`); + } + el.append(options); + + options = document.createElement("div"); + if (input.equip < 3) { + options.append(`For ${cashFormat(equipUpgradeCost * input.maxTroops + 1000)} invest in `); + options.append(App.UI.DOM.link("better equipment", () => { + input.equip++, + cashX(-(equipUpgradeCost * input.maxTroops + 1000), "securityExpansion"); + }, + [], passage() + )); + options.append(` to increase this unit's attack and defense by 15% per investement.`); + } else { + options.append(`The unit is equipped with state of the art weaponry and equipment.`); + } + el.append(options); + + options = document.createElement("div"); + if (input.commissars === 0) { + options.append(`For ${cashFormat(equipUpgradeCost * input.maxTroops + 1000)} attach `); + options.append(App.UI.DOM.link("commissars", () => { + input.commissars++, + cashX(-(equipUpgradeCost * input.maxTroops + 1000), "securityExpansion"); + }, + [], passage() + )); + options.append(` to slowly increase this unit's loyalty.`); + } else if (input.commissars < 2) { + options.append(`For ${cashFormat(equipUpgradeCost * input.maxTroops + 1000)} attach `); + options.append(App.UI.DOM.link("commissars", () => { + input.commissars++, + cashX(-(equipUpgradeCost * input.maxTroops + 1000), "securityExpansion"); + }, + [], passage() + )); + options.append(` to slowly increase this unit's even loyalty.`); + } + if (input.commissars === 1) { + options.append("The unit has a commissar detachment, keeping under control the ambitions of the unit's officers."); + } else if (input.commissars === 2) { + options.append("The unit has a perfectly trained and loyal commissar detachment, keeping under control the ambitions of the unit's officers."); + } + el.append(options); + + options = document.createElement("div"); + if (V.prostheticsUpgrade >= 2 || V.researchLab.advCombatPLimb == 1) { + if (input.cyber === 0) { + options.append(`For ${cashFormat(equipUpgradeCost * input.maxTroops + 1000)} `); + options.append(App.UI.DOM.link("augment all soldiers of the unit", () => { + input.cyber++, + cashX(-(equipUpgradeCost * input.maxTroops + 2000), "securityExpansion"); + }, + [], passage() + )); + options.append(` with high tech cyber enhancements that will increase attack, defense and base hp values.`); + } else { + options.append('The unit is equipped with advanced cybernetic enhancements.'); + } + } + el.append(options); + + options = document.createElement("div"); + if (input.medics === 0) { + options.append(`For ${cashFormat(equipUpgradeCost * input.maxTroops + 1000)} `); + options.append(App.UI.DOM.link("attach trained medics to the unit", () => { + input.medics++, + cashX(-(equipUpgradeCost * input.maxTroops + 1000), "securityExpansion"); + }, + [], passage() + )); + options.append(' which will decrease the number of casualties suffered during battle.'); + } else { + options.append('The unit has a medic detachment following it into battle, decreasing the number of casualties the unit suffers'); + } + el.append(options); + + if (V.SF.Toggle && V.SF.Active >= 1) { + options = document.createElement("div"); + + if (input.SF === 0) { + options.append(`For ${cashFormat(equipUpgradeCost * input.maxTroops + 5000)} `); + options.append(App.UI.DOM.link("attach Special Force advisors", () => { + input.SF++, + cashX(-(equipUpgradeCost * input.maxTroops + 5000), "securityExpansion"); + }, + [], passage() + )); + options.append(' which will slightly increase the base stats of the unit.'); + } else { + options.append('The unit has attached advisors from $SF.Lower that will help the squad remain tactically aware and active.'); + } + el.append(options); + } + + return el; +}; + /** Generate a unit ID for a new unit * @returns {number} */ diff --git a/src/Mods/SecExp/potentialToDo.txt b/src/Mods/SecExp/potentialToDo.txt new file mode 100644 index 0000000000000000000000000000000000000000..f296e0340642562128b2a5585a1306d336a060e5 --- /dev/null +++ b/src/Mods/SecExp/potentialToDo.txt @@ -0,0 +1,40 @@ +Hexall90's last merged commit: 52dde0b3 + +- My personal asst keeps getting the credit, even though I choose to personally lead my forces. (Has been this way for a fewish days): Military01.swf +- Enable oceanic battles + Fine, I'll Do It Myself + Pirates? Enemy navies? - 328279 + Pirates could raid trade routs and such ,even could capture a high class cruise liner and you have to move retake it with an army similar to the ground battles. you could have an event where you gain a old world port to ship your goods to , and you have to defend it . -328413 +- How to make threads - 355452 + A suggestion for prisoners of war after winning the battle: maybe add an option to execute them on the spot for authority gains? + And how about giving a chance (depending on the amount of captives) to actually make one or two of them that aren't as hateful or wounded as your sex slaves instead of just menials? Perhaps you may even turn (hypothetical) female captives into sex dolls or bioreactors too. It can be an optional button. + Also, maybe make some of them actually surrender so it will be possible to get captives even when you completely overwhelm their forces in numbers/efficiency? +- How to make threads - 355478 +- One thing I find to be weird/stupid is that facilities must be manned with menial slaves. I think that it instead should be an option, like with armies, to man them with free citizens instead who then do a better job but instead require a monthly wage. +- Oni-girl soldiers. +- Modify DOL battle scene to recognise SecExp units. +- Update encyclopedia entry to reflect above. +- Add suicide units. +- Add WarAnimal's units - Optimally Functioning Code, 254511 - 3rd Military Animal Platoon. +- Loli unit - Unlocked from Black market, origin Wedding edition - 310602. +- Feature Request: Attack Imminent Layout (GUI suggestion done) - https://gitgud.io/pregmodfan/fc-pregmod/issues/1145 +- Feature Request: Potential for damage to Security Expansion Upgrades - https://gitgud.io/pregmodfan/fc-pregmod/issues/1146 +- Special Forces Morale Bonus - https://gitgud.io/pregmodfan/fc-pregmod/issues/1165 +- Suggestion - Specialized Schools, Fortifications and Militia Edicts -https://gitgud.io/pregmodfan/fc-pregmod/issues/763 +- Suggestion - Arcology Conquest - https://gitgud.io/pregmodfan/fc-pregmod/issues/760 +- Does forcing every citizen to be in military raise appeal of slaves that know how to fight? +- And if I am a master tactician, maybe I could get an estimate how effective the various tacticts could be? +- make https://gitgud.io/pregmodfan/fc-pregmod/issues/1431 and https://gitgud.io/pregmodfan/fc-pregmod/issues/1436 more visible +- Suggestion - Weapon Manufacturing Research Queue - https://gitgud.io/pregmodfan/fc-pregmod/issues/1618 +- Ability to create more drone squads. +- Increase base maximum units to 18, 20 with SF. +- Suggestion - Gradual Battle Frequency - https://gitgud.io/pregmodfan/fc-pregmod/issues/1245#note_82504 +- Option to send slaves into military unit to gain some nice scars and experience wold be nice (with retrieval). +- So would be taking slaves from slave units as personal ones. The slave units would pretty much be menial slaves I'd imagine, not sex slaves. +- If I think about it having a squad of personal slaves that you equip in whatever gear you want and send out to capture new slaves, raid caravans and cities and shit would be pretty sweet, I would even call it special forces but that's taken, also the combat skill is still a binary thing which makes the whole thing pointless. + How about to start off with option to send one or two of your combat trained slaves to assist the merc's when they are on a raid with the possibility of receiving battle wounds. +- It would be a start if the tactics talking about the size difference of the armies actually took the size difference into account. +- How about to start off with option to send one or two of your combat trained slaves to assist the merc's when they are on a raid with the possibility of receiving battle wounds. +- If there are choices, they should be along the lines of "higher risk, higher reward" (defeating the enemy with fewer casualties and damage if it goes right, but suffering higher casualties and damage if it goes wrong), or things like accepting more/less military casualties for better/worse protection of economic assets (costing money/damaging economy) and civilians (costing reputation/damaging population). +- The ability to send units to the general to increase relationship as an alternative to sending slaves. +- Unrelated minor suggestion: Could we perhaps set default unit names somewhere? Just a small thing so I don't have to change each new unit to (slave/citizen/mercenary) Legion in my Roman society whenever I make new ones. \ No newline at end of file diff --git a/src/Mods/SecExp/rebellionOptions.tw b/src/Mods/SecExp/rebellionOptions.tw index 834b91f0092fa0900d5fd2d34cbff62192e1183f..aef6f210007f6077516fb43285c2beb1a54ad299 100644 --- a/src/Mods/SecExp/rebellionOptions.tw +++ b/src/Mods/SecExp/rebellionOptions.tw @@ -287,8 +287,7 @@ We can dedicate some of our forces to the protection of the vital parts of the a <br><br> <<replenishAllUnits>> -<br> -<br> +<br><br> <<link "Proceed" "rebellionHandler">> <<set $battleResult = 4>> /* sets $battleResult value outside accepted range to avoid evaluation problems */ <<set $foughtThisWeek = 1>> diff --git a/src/Mods/SecExp/seeUnit.tw b/src/Mods/SecExp/seeUnit.tw deleted file mode 100644 index bd9769539bb0916bc37b44d90f6c5b43af821caf..0000000000000000000000000000000000000000 --- a/src/Mods/SecExp/seeUnit.tw +++ /dev/null @@ -1,372 +0,0 @@ -:: seeUnit [nobr] - -<<if $attackThisWeek == 1>> - <<set $nextButton = "Back", $nextLink = "attackOptions", $returnTo = "secBarracks">> -<<else>> - <<set $nextButton = "Back", $nextLink = "secBarracks", $returnTo = "secBarracks">> -<</if>> - -<<if $targetUnit == "secBots">> - <<set _unit = App.SecExp.getUnit("Bots")>> - <<= _unit.describe()>> - <<if $secBots.maxTroops > $secBots.troops>> - <br> - <<link "Replenish the unit" "seeUnit">> - <<run cashX(forceNeg(($secBots.maxTroops - $secBots.troops) * $secBotsCost), "securityExpansion")>> - <<set $secBots.troops = $secBots.maxTroops>> - <</link>> - <</if>> - <br> - <<if $secBots.maxTroops < 80>> - <br> - <<link "Improve the digital control matrix" "seeUnit">> - <<set $secBots.maxTroops += 10>> - <<run cashX(-5000, "securityExpansion")>> - <</link>> - Invest in the development of more refined controls for your drones to increase the maximum number of drones in the unit. - <br>//Costs <<print cashFormat(5000)>> per upgrade and each will increase the max by 10// - <<elseif $SF.Toggle && $SF.Active >= 1 && $secBots.maxTroops < 100 && $SecExp.edicts.SFSupportLevel >= 1>> - <br> - <<link "Refine the drone network with $SF.Lower assistance" "seeUnit">> - <<set $secBots.maxTroops += 10>> - <<run cashX(forceNeg(5000 + 10 * $secBotsUpgradeCost * $secBots.equip), "securityExpansion")>> - <</link>> - Utilize the technological developments made by $SF.Lower to further improve the control matrix of the security drones. - <br>//Costs <<print cashFormat(5000 + 10 * $secBotsUpgradeCost * $secBots.equip)>> and will increase the max by 10// - <<elseif $SF.Toggle && $SF.Active >= 1 && $SecExp.edicts.SFSupportLevel < 1>> - There's little left to improve in the matrix. However support from $SF.Lower might give some more room from improvement. - <<else>> - There's little left to improve in the matrix. Your control systems are at top capacity and won't be able to handle a bigger drone unit. - <</if>> - <<if $secBots.equip < 3>> - <br> - <<link "Improve drone weaponry and armor" "seeUnit">> - <<set $secBots.equip += 1>> - <<run cashX(forceNeg(($secBotsUpgradeCost * $secBots.maxTroops) + 1000), "securityExpansion")>> - <</link>> - Invest in better equipment for your drones to increase their battle effectiveness. - <br>//Costs <<print cashFormat(($secBotsUpgradeCost * $secBots.maxTroops) + 1000)>> and will increase attack and defense value of the unit by 15% for every upgrade.// - <<else>> - <br> - Your drones are equipped with top tier weaponry and armor. - <</if>> - <<if $SecExp.settings.showStats == 1>> - <br><<= _unit.printStats()>> - <</if>> -<<elseif $targetUnit == "militiaUnits">> - <<set _unit = App.SecExp.getUnit("Militia", $targetIndex)>> - <<= _unit.describe()>> - Rename unit <<textbox "$militiaUnits[$targetIndex].platoonName" $militiaUnits[$targetIndex].platoonName "seeUnit">> - <<if $militiaUnits[$targetIndex].maxTroops > $militiaUnits[$targetIndex].troops && $militiaFreeManpower > 0>> - <br> - <<link "Replenish unit" "seeUnit">> - <<if $militiaFreeManpower >= $militiaUnits[$targetIndex].maxTroops - $militiaUnits[$targetIndex].troops>> - <<set $militiaFreeManpower -= $militiaUnits[$targetIndex].maxTroops - $militiaUnits[$targetIndex].troops>> - <<set _expLoss = ($militiaUnits[$targetIndex].maxTroops - $militiaUnits[$targetIndex].troops) / $militiaUnits[$targetIndex].troops>> - <<set $militiaUnits[$targetIndex].training -= $militiaUnits[$targetIndex].training * _expLoss>> - <<set $militiaUnits[$targetIndex].troops = $militiaUnits[$targetIndex].maxTroops>> - <<else>> - <<set _expLoss = $militiaFreeManpower / $militiaUnits[$targetIndex].troops>> - <<set $militiaUnits[$targetIndex].training -= $militiaUnits[$targetIndex].training * _expLoss>> - <<set $militiaUnits[$targetIndex].troops += $militiaFreeManpower>> - <<set $militiaFreeManpower = 0>> - <</if>> - <</link>> - <</if>> - <br> - <<if $militiaUnits[$targetIndex].maxTroops < 50>> - <br> - <<link "Intensive officers training" "seeUnit">> - <<set $militiaUnits[$targetIndex].maxTroops += 10>> - <<run cashX(forceNeg(5000 + 10 * $equipUpgradeCost * ($militiaUnits[$targetIndex].equip + $militiaUnits[$targetIndex].commissars + $militiaUnits[$targetIndex].cyber + $militiaUnits[$targetIndex].SF)), "securityExpansion")>> - <</link>> - Invest in the training of your officers to increase the maximum number of soldiers in the unit. - <br>//Costs <<print cashFormat(5000 + 10 * $equipUpgradeCost * ($militiaUnits[$targetIndex].equip + $militiaUnits[$targetIndex].commissars + $militiaUnits[$targetIndex].cyber + $militiaUnits[$targetIndex].SF))>> and will increase the max by 10// - <<else>> - <br> - Your officers reached their peak. Further training will have little impact on the number of troops they can effectively lead. - <</if>> - <<if $militiaUnits[$targetIndex].equip < 3>> - <br> - <<link "Improve weaponry and equipment" "seeUnit">> - <<set $militiaUnits[$targetIndex].equip += 1>> - <<run cashX(forceNeg(($equipUpgradeCost * $militiaUnits[$targetIndex].maxTroops) + 1000), "securityExpansion")>> - <</link>> - Invest in better equipment for your soldiers to increase their battle effectiveness. - <br>//Costs <<print cashFormat(($equipUpgradeCost * $militiaUnits[$targetIndex].maxTroops) + 1000)>> and will increase attack and defense value of the unit by 15% for every upgrade.// - <<else>> - <br> - The unit is equipped with state of the art weaponry and equipment. - <</if>> - <<if $militiaUnits[$targetIndex].commissars == 0>> - <br> - <<link "Attach commissars to the unit" "seeUnit">> - <<set $militiaUnits[$targetIndex].commissars = 1>> - <<run cashX(forceNeg($equipUpgradeCost * $militiaUnits[$targetIndex].maxTroops + 1000), "securityExpansion")>> - <</link>> - Attach a small squad of commissars to the unit. - <br>//Costs <<print cashFormat(($equipUpgradeCost * $militiaUnits[$targetIndex].maxTroops) + 1000)>> and will slowly increase the loyalty of the unit.// - <<elseif $militiaUnits[$targetIndex].commissars < 2>> - <br> - <<link "Intensive loyalty training" "seeUnit">> - <<set $militiaUnits[$targetIndex].commissars += 1>> - <<run cashX(forceNeg($equipUpgradeCost * $militiaUnits[$targetIndex].maxTroops + 1000), "securityExpansion")>> - <</link>> - Provide special training for the officers and the commissars of the unit. - <br>//Costs <<print cashFormat(($equipUpgradeCost * $militiaUnits[$targetIndex].maxTroops) + 1000)>> and will increase the loyalty of the unit faster.// - <<elseif $militiaUnits[$targetIndex].commissars == 1>> - <br>The unit has a commissar detachment, keeping under control the ambitions of the unit's officers. - <<else>> - <br>The unit has a perfectly trained and loyal commissar detachment, keeping under control the ambitions of the unit's officers. - <</if>> - <<if $prostheticsUpgrade >= 2 || $researchLab.advCombatPLimb == 1>> - <<if $militiaUnits[$targetIndex].cyber == 0>> - <br> - <<link "Provide enhanced cybernetic enhancements" "seeUnit">> - <<set $militiaUnits[$targetIndex].cyber += 1>> - <<run cashX(forceNeg($equipUpgradeCost * $militiaUnits[$targetIndex].maxTroops + 2000), "securityExpansion")>> - <</link>> - Will augment all soldiers of the unit with high tech cyber enhancements. - <br>//Costs <<print cashFormat(($equipUpgradeCost * $militiaUnits[$targetIndex].maxTroops) + 2000)>> and will increase attack, defense and base hp values of the unit.// - <<else>> - <br>The unit is equipped with advanced cybernetic enhancements. - <</if>> - <</if>> - <<if $militiaUnits[$targetIndex].medics == 0>> - <br> - <<link "Attach trained medics to the unit" "seeUnit">> - <<set $militiaUnits[$targetIndex].medics = 1>> - <<run cashX(forceNeg($equipUpgradeCost * $militiaUnits[$targetIndex].maxTroops + 1000), "securityExpansion")>> - <</link>> - Attach a small squad of trained medics to the unit. - <br>//Costs <<print cashFormat(($equipUpgradeCost * $militiaUnits[$targetIndex].maxTroops) + 1000)>> and will decrease the number of casualties suffered during battle.// - <<else>> - <br>The unit has a medic detachment following it into battle, decreasing the number of casualties the unit suffers. - <</if>> - <<if $SF.Toggle && $SF.Active >= 1>> - <<if $militiaUnits[$targetIndex].SF == 0>> - <br> - <<link "Attach Special Force advisors" "seeUnit">> - <<set $militiaUnits[$targetIndex].SF = 1>> - <<run cashX(forceNeg(($equipUpgradeCost * $militiaUnits[$targetIndex].maxTroops) + 5000), "securityExpansion")>> - <</link>> - Attach $SF.Lower advisors to the unit. - <br>//Costs <<print cashFormat(($equipUpgradeCost * $militiaUnits[$targetIndex].maxTroops) + 5000)>> and will slightly increase the base stats of the unit.// - <<else>> - <br>The unit has attached advisors from $SF.Lower that will help the squad remain tactically aware and active. - <</if>> - <</if>> - <<if $SecExp.settings.showStats == 1>> - <br><<= _unit.printStats()>> - <</if>> -<<elseif $targetUnit == "slaveUnits">> - <<set _unit = App.SecExp.getUnit("Slaves", $targetIndex)>> - <<= _unit.describe()>> - <br> - Rename unit <<textbox "$slaveUnits[$targetIndex].platoonName" $slaveUnits[$targetIndex].platoonName "seeUnit">> - <<if $slaveUnits[$targetIndex].maxTroops > $slaveUnits[$targetIndex].troops && $menials > 0>> - <br> - <<link "Replenish unit" "seeUnit">> - <<if $menials >= $slaveUnits[$targetIndex].maxTroops - $slaveUnits[$targetIndex].troops>> - <<set $menials -= $slaveUnits[$targetIndex].maxTroops - $slaveUnits[$targetIndex].troops>> - <<set _expLoss = ($slaveUnits[$targetIndex].maxTroops - $slaveUnits[$targetIndex].troops) / $slaveUnits[$targetIndex].troops>> - <<set $slaveUnits[$targetIndex].training -= $slaveUnits[$targetIndex].training * _expLoss>> - <<set $slaveUnits[$targetIndex].troops = $slaveUnits[$targetIndex].maxTroops>> - <<else>> - <<set _expLoss = $menials / $slaveUnits[$targetIndex].troops>> - <<set $slaveUnits[$targetIndex].training -= $slaveUnits[$targetIndex].training * _expLoss>> - <<set $slaveUnits[$targetIndex].troops += $menials>> - <<set $menials = 0>> - <</if>> - <</link>> - <</if>> - <br> - <<if $slaveUnits[$targetIndex].maxTroops < 50>> - <br> - <<link "Intensive officers training" "seeUnit">> - <<set $slaveUnits[$targetIndex].maxTroops += 10>> - <<run cashX(forceNeg(5000 + 10 * $equipUpgradeCost * ($slaveUnits[$targetIndex].equip + $slaveUnits[$targetIndex].commissars + $slaveUnits[$targetIndex].cyber + $slaveUnits[$targetIndex].SF)), "securityExpansion")>> - <</link>> - Invest in the training of your officers to increase the maximum number of soldiers in the unit. - <br>//Costs <<print cashFormat(5000 + 10 * $equipUpgradeCost * ($slaveUnits[$targetIndex].equip + $slaveUnits[$targetIndex].commissars + $slaveUnits[$targetIndex].cyber + $slaveUnits[$targetIndex].SF))>> and will increase the max by 10// - <<else>> - <br>Your officers reached their peak. Further training will have little impact on the number of troops they can effectively lead. - <</if>> - <<if $slaveUnits[$targetIndex].equip < 3>> - <br> - <<link "Improve weaponry and equipment">> - <<set $slaveUnits[$targetIndex].equip += 1>> - <<run cashX(forceNeg($equipUpgradeCost * $slaveUnits[$targetIndex].maxTroops + 1000), "securityExpansion")>> - <<goto "seeUnit">> - <</link>> - Invest in better equipment for your soldiers to increase their battle effectiveness. - <br>//Costs <<print cashFormat(($equipUpgradeCost * $slaveUnits[$targetIndex].maxTroops) + 1000)>> and will increase attack and defense value of the unit by 15% for every upgrade.// - <<else>> - <br>The unit is equipped with state of the art weaponry and equipment. - <</if>> - <<if $slaveUnits[$targetIndex].commissars == 0>> - <br> - <<link "Attach commissars to the unit" "seeUnit">> - <<set $slaveUnits[$targetIndex].commissars = 1>> - <<run cashX(forceNeg($equipUpgradeCost * $slaveUnits[$targetIndex].maxTroops + 1000), "securityExpansion")>> - <</link>> - Attach a small squad of commissars to the unit. - <br>//Costs <<print cashFormat(($equipUpgradeCost * $slaveUnits[$targetIndex].maxTroops) + 1000)>> and will slowly increase the loyalty of the unit.// - <<elseif $slaveUnits[$targetIndex].commissars < 2>> - <br> - <<link "Intensive loyalty training" "seeUnit">> - <<set $slaveUnits[$targetIndex].commissars += 1>> - <<run cashX(forceNeg($equipUpgradeCost * $slaveUnits[$targetIndex].maxTroops + 1000), "securityExpansion")>> - <</link>> - Provide special training for the officers and the commissars of the unit. - <br>//Costs <<print cashFormat(($equipUpgradeCost * $slaveUnits[$targetIndex].maxTroops) + 1000)>> and will increase the loyalty of the unit faster.// - <<elseif $slaveUnits[$targetIndex].commissars == 1>> - <br>The unit has a commissar detachment, keeping under control the ambitions of the unit's officers. - <<else>> - <br>The unit has a perfectly trained and loyal commissar detachment, keeping under control the ambitions of the unit's officers. - <</if>> - <<if $prostheticsUpgrade >= 2 || $researchLab.advCombatPLimb == 1>> - <<if $slaveUnits[$targetIndex].cyber == 0>> - <br> - <<link "Provide enhanced cybernetic enhancements" "seeUnit">> - <<set $slaveUnits[$targetIndex].cyber += 1>> - <<run cashX(forceNeg($equipUpgradeCost * $slaveUnits[$targetIndex].maxTroops + 2000), "securityExpansion")>> - <</link>> - Will augment all soldiers of the unit with high tech cyber enhancements. - <br>//Costs <<print cashFormat(($equipUpgradeCost * $slaveUnits[$targetIndex].maxTroops) + 2000)>> and will increase attack, defense and base hp values of the unit.// - <<else>> - <br>The unit is equipped with advanced cybernetic enhancements. - <</if>> - <</if>> - <<if $slaveUnits[$targetIndex].medics == 0>> - <br> - <<link "Attach trained medics to the unit" "seeUnit">> - <<set $slaveUnits[$targetIndex].medics = 1>> - <<run cashX(forceNeg($equipUpgradeCost * $slaveUnits[$targetIndex].maxTroops + 1000), "securityExpansion")>> - <</link>> - Attach a small squad of trained medics to the unit. - <br>//Costs <<print cashFormat(($equipUpgradeCost * $slaveUnits[$targetIndex].maxTroops) + 1000)>> and will decrease the number of casualties suffered during battle.// - <<else>> - <br>The unit has a medic detachment following it into battle, decreasing the number of casualties the unit suffers. - <</if>> - <<if $SF.Toggle && $SF.Active >= 1>> - <<if $slaveUnits[$targetIndex].SF == 0>> - <br> - <<link "Attach Special Force advisors" "seeUnit">> - <<set $slaveUnits[$targetIndex].SF = 1>> - <<run cashX(forceNeg(($equipUpgradeCost * $slaveUnits[$targetIndex].maxTroops) + 5000), "securityExpansion")>> - <</link>> - Attach $SF.Lower advisors to the unit. - <br>//Costs <<print cashFormat(($equipUpgradeCost * $slaveUnits[$targetIndex].maxTroops) + 5000)>> and will slightly increase the base stats of the unit.// - <<else>> - <br>The unit has attached advisors from $SF.Lower that will help the squad remain tactically aware and active. - <</if>> - <</if>> - <<if $SecExp.settings.showStats == 1>> - <br><<= _unit.printStats()>> - <</if>> -<<elseif $targetUnit == "mercUnits">> - <<set _unit = App.SecExp.getUnit("Mercs", $targetIndex)>> - <<= _unit.describe()>> - <br> - Rename unit <<textbox "$mercUnits[$targetIndex].platoonName" $mercUnits[$targetIndex].platoonName "seeUnit">> - <<if $mercUnits[$targetIndex].troops < $mercUnits[$targetIndex].maxTroops && $mercFreeManpower > 0>> - <br> - <<link "Replenish unit" "seeUnit">> - <<if $mercFreeManpower >= $mercUnits[$targetIndex].maxTroops - $mercUnits[$targetIndex].troops>> - <<set $mercFreeManpower -= $mercUnits[$targetIndex].maxTroops - $mercUnits[$targetIndex].troops>> - <<set _expLoss = ($mercUnits[$targetIndex].maxTroops - $mercUnits[$targetIndex].troops) / $mercUnits[$targetIndex].troops>> - <<set $mercUnits[$targetIndex].training -= $mercUnits[$targetIndex].training * _expLoss>> - <<set $mercUnits[$targetIndex].troops = $mercUnits[$targetIndex].maxTroops>> - <<else>> - <<set _expLoss = $mercFreeManpower / $mercUnits[$targetIndex].troops>> - <<set $mercUnits[$targetIndex].training -= $mercUnits[$targetIndex].training * _expLoss>> - <<set $mercUnits[$targetIndex].troops += $mercFreeManpower>> - <<set $mercFreeManpower = 0>> - <</if>> - <</link>> - <</if>> - <br> - <<if $mercUnits[$targetIndex].maxTroops < 50>> - <br> - <<link "Intensive officers training" "seeUnit">> - <<set $mercUnits[$targetIndex].maxTroops += 10>> - <<run cashX(forceNeg(5000 + 10 * $equipUpgradeCost * ($mercUnits[$targetIndex].equip + $mercUnits[$targetIndex].commissars + $mercUnits[$targetIndex].cyber + $mercUnits[$targetIndex].SF)), "securityExpansion")>> - <</link>> - Invest in the training of your officers to increase the maximum number of soldiers in the unit. - <br>//Costs <<print cashFormat(5000 + 10 * $equipUpgradeCost * ($mercUnits[$targetIndex].equip + $mercUnits[$targetIndex].commissars + $mercUnits[$targetIndex].cyber + $mercUnits[$targetIndex].SF))>> and will increase the max by 10// - <<else>> - <br>Your officers reached their peak. Further training will have little impact on the number of troops they can effectively lead. - <</if>> - <<if $mercUnits[$targetIndex].equip < 3>> - <br> - <<link "Improve weaponry and equipment" "seeUnit">> - <<set $mercUnits[$targetIndex].equip += 1>> - <<run cashX(forceNeg(($equipUpgradeCost * $mercUnits[$targetIndex].maxTroops) + 1000), "securityExpansion")>> - <</link>> - Invest in better equipment for your soldiers to increase their battle effectiveness. - <br>//Costs <<print cashFormat(($equipUpgradeCost * $mercUnits[$targetIndex].maxTroops) + 1000)>> and will increase attack and defense value of the unit by 15% for every upgrade.// - <<else>> - <br>The unit is equipped with state of the art weaponry and equipment. - <</if>> - <<if $mercUnits[$targetIndex].commissars == 0>> - <br> - <<link "Attach commissars to the unit" "seeUnit">> - <<set $mercUnits[$targetIndex].commissars = 1>> - <<run cashX(forceNeg($equipUpgradeCost * $mercUnits[$targetIndex].maxTroops + 1000), "securityExpansion")>> - <</link>> - Attach a small squad of commissars to the unit. - <br>//Costs <<print cashFormat(($equipUpgradeCost * $mercUnits[$targetIndex].maxTroops) + 1000)>> and will slowly increase the loyalty of the unit.// - <<elseif $mercUnits[$targetIndex].commissars < 2>> - <br> - <<link "Intensive loyalty training" "seeUnit">> - <<set $mercUnits[$targetIndex].commissars += 1>> - <<run cashX(forceNeg($equipUpgradeCost * $mercUnits[$targetIndex].maxTroops + 1000), "securityExpansion")>> - <</link>> - Provide special training for the officers and the commissars of the unit. - <br>//Costs <<print cashFormat(($equipUpgradeCost * $mercUnits[$targetIndex].maxTroops) + 1000)>> and will increase the loyalty of the unit faster.// - <<elseif $mercUnits[$targetIndex].commissars == 1>> - <br>The unit has a commissar detachment, keeping under control the ambitions of the unit's officers. - <<else>> - <br>The unit has a perfectly trained and loyal commissar detachment, keeping under control the ambitions of the unit's officers. - <</if>> - <<if $prostheticsUpgrade >= 2 || $researchLab.advCombatPLimb == 1>> - <<if $mercUnits[$targetIndex].cyber == 0>> - <br> - <<link "Provide enhanced cybernetic enhancements" "seeUnit">> - <<set $mercUnits[$targetIndex].cyber += 1>> - <<run cashX(forceNeg($equipUpgradeCost * $mercUnits[$targetIndex].maxTroops + 2000), "securityExpansion")>> - <</link>>Will augment all soldiers of the unit with high tech cyber enhancements. - <br>//Costs <<print cashFormat(($equipUpgradeCost * $mercUnits[$targetIndex].maxTroops) + 2000)>> and will increase attack, defense and base hp values of the unit.// - <<else>> - <br>The unit is equipped with advanced cybernetic enhancements. - <</if>> - <</if>> - <<if $mercUnits[$targetIndex].medics == 0>> - <br> - <<link "Attach trained medics to the unit" "seeUnit">> - <<set $mercUnits[$targetIndex].medics = 1>> - <<run cashX(forceNeg(($equipUpgradeCost * $mercUnits[$targetIndex].maxTroops) + 5000), "securityExpansion")>> - <</link>> - Attach a small squad of trained medics to the unit. - <br>//Costs <<print cashFormat(($equipUpgradeCost * $mercUnits[$targetIndex].maxTroops) + 5000)>> and will decrease the number of casualties suffered during battle.// - <<else>> - <br>The unit has a medic detachment following it into battle, decreasing the number of casualties the unit suffers. - <</if>> - <<if $SF.Toggle && $SF.Active >= 1>> - <<if $mercUnits[$targetIndex].SF == 0>> - <br> - <<link "Attach Special Force advisors" "seeUnit">> - <<set $mercUnits[$targetIndex].SF = 1>> - <<run cashX(forceNeg(($equipUpgradeCost * $mercUnits[$targetIndex].maxTroops) + 5000), "securityExpansion")>> - <</link>> - Attach $SF.Lower advisors to the unit. - <br>//Costs <<print cashFormat(($equipUpgradeCost * $mercUnits[$targetIndex].maxTroops) + 5000)>> and will slightly increase the base stats of the unit.// - <<else>> - <br>The unit has attached advisors from $SF.Lower that will help the squad remain tactically aware and active. - <</if>> - <</if>> - <<if $SecExp.settings.showStats == 1>> - <br><<= _unit.printStats()>> - <</if>> -<</if>> \ No newline at end of file diff --git a/src/Mods/SecExp/widgets/miscSecExpWidgets.tw b/src/Mods/SecExp/widgets/miscSecExpWidgets.tw index 868c0d95573227608e32957f8c686ff7a994426d..8f7fee5c2bab3354ba3718486844719d1710bb25 100644 --- a/src/Mods/SecExp/widgets/miscSecExpWidgets.tw +++ b/src/Mods/SecExp/widgets/miscSecExpWidgets.tw @@ -159,7 +159,7 @@ <</for>> <<if _hasLossesBots == 1 || _hasLossesM == 1 || _hasLossesS == 1 || _hasLossesMe == 1>> - <br><br><<link "Replenish all units">> + <<link "Replenish all units">> <<if _hasLossesBots == 1>> <<run cashX(-(($secBots.maxTroops - $secBots.troops) * 500), "securityExpansion")>> <<set $secBots.troops = $secBots.maxTroops>> diff --git a/src/Mods/SpecialForce/ColonelSexDec.tw b/src/Mods/SpecialForce/ColonelSexDec.tw index 8ed3b8a6392af87e4083643f77bc470aef0583ae..51d463073b68636bc0b272fefa2291671a9890e8 100644 --- a/src/Mods/SpecialForce/ColonelSexDec.tw +++ b/src/Mods/SpecialForce/ColonelSexDec.tw @@ -3,7 +3,7 @@ <<switch $SF.Colonel.Core>> <<case "shell shocked">> <span id="result7"> - The entire time it is obvious that The Colonel is reliving a horrible event. + <br>The entire time it is obvious that The Colonel is reliving a horrible event. <br><<link "Try to bring her back">> <<replace "#result7">> "You made an attempt to try to bring her back to the present." @@ -18,5 +18,5 @@ </span> <<default>> - Inset sex noises here. + <br>Inset sex noises here. <</switch>> \ No newline at end of file diff --git a/src/Mods/SpecialForce/Firebase.tw b/src/Mods/SpecialForce/Firebase.tw index b3304a0f61fbfd4d2c9d9a2cc18a73a2753a582f..68e85c00ecc247dcbb188e5efd088b7fb130df94 100644 --- a/src/Mods/SpecialForce/Firebase.tw +++ b/src/Mods/SpecialForce/Firebase.tw @@ -60,7 +60,7 @@ , that biannual merc meetup has come around again. You've already gave me leave to attend, but I just wanted to be sure I'm still clear to go." <</if>> <br>[[Grant leave|Firebase][$SF.MercCon.CanAttend = 1]] - <br>[[Request she remain on site|Firebase][$SF.MercCon.CanAttend = -2]]<br> + <br>[[Request she remain on site|Firebase][$SF.MercCon.CanAttend = -2]] <</if>> <span id="result0"> @@ -109,4 +109,4 @@ <div id="FS" class="tabcontent"> <div class="content"> <<= App.SF.fsIntegration()>> </div> </div> -<</if>> +<</if>> \ No newline at end of file diff --git a/src/Mods/SpecialForce/Upgrades.tw b/src/Mods/SpecialForce/Upgrades.tw index 1f338a6ff95cf12712a31cd98bd0d1ec24aa176c..9e49660808b28e0f93c772ff0b9656417bc041e1 100644 --- a/src/Mods/SpecialForce/Upgrades.tw +++ b/src/Mods/SpecialForce/Upgrades.tw @@ -6,7 +6,7 @@ <<if $SF.Squad.Firebase < App.SF.upgrades.currentUnitMax('Firebase')>> <<set _cF = App.SF.UpgradeCost(125000/_upgradeDiv,$SF.Squad.Firebase)>> <<if $cash >= _cF>> <br> - [[Upgrade Firebase|Firebase][$SF.Upgrade = 1, $SF.Colonel.Talk += 1, $SF.Squad.Firebase++, $SF.CreditsInvested += (_cF), cashX(forceNeg(_cF), "specialForcesCap")]] + [[Upgrade Firebase|Firebase][$SF.Upgrade = 1, $SF.Squad.Firebase++, $SF.CreditsInvested += (_cF), cashX(forceNeg(_cF), "specialForcesCap")]] <<else>> //Cannot afford to upgrade the Firebase.// <</if>> @@ -18,7 +18,7 @@ <<if $SF.Squad.Armoury < App.SF.upgrades.currentUnitMax('Armoury')>> <<set _cA = App.SF.UpgradeCost(40000/_upgradeDiv,$SF.Squad.Armoury)>> <<if $cash >= _cA>> - [[Upgrade Armory|Firebase][$SF.Upgrade = 1, $SF.Colonel.Talk += 1, $SF.Squad.Armoury++, $SF.CreditsInvested += (_cA), cashX(forceNeg(_cA), "specialForcesCap")]] + [[Upgrade Armory|Firebase][$SF.Upgrade = 1, $SF.Squad.Armoury++, $SF.CreditsInvested += (_cA), cashX(forceNeg(_cA), "specialForcesCap")]] <<else>> //Cannot afford to upgrade the Armory.// <</if>> @@ -30,7 +30,7 @@ <<if $SF.Squad.Drugs < App.SF.upgrades.currentUnitMax('Drugs')>> <<set _cDrugs = App.SF.UpgradeCost(40000/_upgradeDiv,$SF.Squad.Drugs)>> <<if $cash >= _cDrugs>> - [[Upgrade Drug Lab|Firebase][$SF.Upgrade = 1, $SF.Colonel.Talk += 1, $SF.Squad.Drugs++, $SF.CreditsInvested += (_cDrugs), cashX(forceNeg(_cDrugs), "specialForcesCap")]] + [[Upgrade Drug Lab|Firebase][$SF.Upgrade = 1, $SF.Squad.Drugs++, $SF.CreditsInvested += (_cDrugs), cashX(forceNeg(_cDrugs), "specialForcesCap")]] <<else>> //Cannot afford to upgrade the Drug Lab.// <</if>> @@ -42,7 +42,7 @@ <<if $SF.Squad.Firebase >= 2 && $SF.Squad.Drones < App.SF.upgrades.currentUnitMax('Drones')>> <<set _cDrones = App.SF.UpgradeCost(45000/_upgradeDiv,$SF.Squad.Drones)>> <<if $cash >= _cDrones>> - [[Upgrade Drone Bay|Firebase][$SF.Upgrade = 1, $SF.Colonel.Talk += 1, $SF.Squad.Drones++, $SF.CreditsInvested += (_cDrones), cashX(forceNeg(_cDrones), "specialForcesCap")]] + [[Upgrade Drone Bay|Firebase][$SF.Upgrade = 1, $SF.Squad.Drones++, $SF.CreditsInvested += (_cDrones), cashX(forceNeg(_cDrones), "specialForcesCap")]] <<else>> //Cannot afford to upgrade the Drone Bay.// <</if>> @@ -56,7 +56,7 @@ <<if $SF.Squad.AV < App.SF.upgrades.currentUnitMax('AV')>> <<set _cAV = App.SF.UpgradeCost(60000/_upgradeDiv,$SF.Squad.AV)>> <<if $cash >= _cAV>> - [[Upgrade Attack Vehicle Fleet|Firebase][$SF.Upgrade = 1, $SF.Colonel.Talk += 1, $SF.Squad.AV++, $SF.CreditsInvested += (_cAV), cashX(forceNeg(_cAV), "specialForcesCap")]] + [[Upgrade Attack Vehicle Fleet|Firebase][$SF.Upgrade = 1, $SF.Squad.AV++, $SF.CreditsInvested += (_cAV), cashX(forceNeg(_cAV), "specialForcesCap")]] <<else>> //Cannot afford to upgrade the Attack Vehicle Fleet.// <</if>> @@ -70,7 +70,7 @@ <<if $SF.Squad.TV < App.SF.upgrades.currentUnitMax('TV')>> <<set _cTV = App.SF.UpgradeCost(60000/_upgradeDiv,$SF.Squad.TV)>> <<if $cash >= _cTV>> - [[Upgrade Transport Vehicle Fleet|Firebase][$SF.Upgrade = 1, $SF.Colonel.Talk += 1, $SF.Squad.TV++, $SF.CreditsInvested += (_cTV), cashX(forceNeg(_cTV), "specialForcesCap")]] + [[Upgrade Transport Vehicle Fleet|Firebase][$SF.Upgrade = 1, $SF.Squad.TV++, $SF.CreditsInvested += (_cTV), cashX(forceNeg(_cTV), "specialForcesCap")]] <<else>> //Cannot afford to upgrade Transport Vehicle Fleet.// <</if>> @@ -85,7 +85,7 @@ <<if $SF.Squad.PGT < _PGTU>> <<set _cPGT = App.SF.UpgradeCost(735000/_upgradeDiv,$SF.Squad.PGT)>> <<if $cash >= _cPGT>> - [[Upgrade Prototype Goliath tank|Firebase][$SF.Upgrade = 1, $SF.Colonel.Talk += 1, $SF.Squad.PGT++, $SF.CreditsInvested += (_cPGT), cashX(forceNeg(_cPGT), "specialForcesCap")]] + [[Upgrade Prototype Goliath tank|Firebase][$SF.Upgrade = 1, $SF.Squad.PGT++, $SF.CreditsInvested += (_cPGT), cashX(forceNeg(_cPGT), "specialForcesCap")]] <<else>> //Cannot afford to upgrade Prototype Goliath Tank.// <</if>> @@ -103,7 +103,7 @@ <<if $SF.Squad.AA < App.SF.upgrades.currentUnitMax('AA')>> <<set _cAA = App.SF.UpgradeCost(70000/_upgradeDiv,$SF.Squad.AA)>> <<if $cash >= _cAA>> - [[Upgrade Attack Aircraft Fleet|Firebase][$SF.Upgrade = 1, $SF.Colonel.Talk += 1, $SF.Squad.AA++, $SF.CreditsInvested += (_cAA), cashX(forceNeg(_cAA), "specialForcesCap")]] + [[Upgrade Attack Aircraft Fleet|Firebase][$SF.Upgrade = 1, $SF.Squad.AA++, $SF.CreditsInvested += (_cAA), cashX(forceNeg(_cAA), "specialForcesCap")]] <<else>> //Cannot afford to upgrade Attack Aircraft Fleet.// <</if>> @@ -117,7 +117,7 @@ <<if $SF.Squad.TA < App.SF.upgrades.currentUnitMax('TA')>> <<set _cTA = App.SF.UpgradeCost(70000/_upgradeDiv,$SF.Squad.TA)>> <<if $cash >= _cTA>> - [[Upgrade Transport Aircraft Fleet|Firebase][$SF.Upgrade = 1, $SF.Colonel.Talk += 1, $SF.Squad.TA++, $SF.CreditsInvested += (_cTA), cashX(forceNeg(_cTA), "specialForcesCap")]] + [[Upgrade Transport Aircraft Fleet|Firebase][$SF.Upgrade = 1, $SF.Squad.TA++, $SF.CreditsInvested += (_cTA), cashX(forceNeg(_cTA), "specialForcesCap")]] <<else>> //Cannot afford to upgrade the Transport Aircraft Fleet.// <</if>> @@ -132,7 +132,7 @@ <<if $SF.Squad.SpacePlane < _SPU>> <<set _cSP = App.SF.UpgradeCost(250000/_upgradeDiv,$SF.Squad.SpacePlane)>> <<if $cash >= _cSP>> - [[Upgrade Spaceplane|Firebase][$SF.Upgrade = 1, $SF.Colonel.Talk += 1, $SF.Squad.SpacePlane++, $SF.CreditsInvested += (_cSP), cashX(forceNeg(_cSP), "specialForcesCap")]] + [[Upgrade Spaceplane|Firebase][$SF.Upgrade = 1, $SF.Squad.SpacePlane++, $SF.CreditsInvested += (_cSP), cashX(forceNeg(_cSP), "specialForcesCap")]] <<else>> //Cannot afford to upgrade the Spaceplane.// <</if>> @@ -149,7 +149,7 @@ <<if $SF.Squad.GunS < _GunSU>> <<set _cGunS = App.SF.UpgradeCost(350000/_upgradeDiv,$SF.Squad.GunS)>> <<if $cash >= _cGunS>> - [[Upgrade Gunship|Firebase][$SF.Upgrade = 1, $SF.Colonel.Talk += 1, $SF.Squad.GunS++, $SF.CreditsInvested += (_cGunS), cashX(forceNeg(_cGunS), "specialForcesCap")]] + [[Upgrade Gunship|Firebase][$SF.Upgrade = 1, $SF.Squad.GunS++, $SF.CreditsInvested += (_cGunS), cashX(forceNeg(_cGunS), "specialForcesCap")]] <<else>> //Cannot afford to upgrade Gunship.// <</if>> @@ -168,7 +168,7 @@ <<if $SF.Squad.Satellite < _SatU && $SF.SatLaunched < 1>> <<set _cSat = App.SF.UpgradeCost(525000/_upgradeDiv,$SF.Squad.Satellite)>> <<if $cash >= _cSat>> - [[Upgrade Satellite|Firebase][$SF.Upgrade = 1, $SF.Colonel.Talk += 1, $SF.Squad.Satellite++, $SF.CreditsInvested += (_cSat), cashX(forceNeg(_cSat), "specialForcesCap")]] + [[Upgrade Satellite|Firebase][$SF.Upgrade = 1, $SF.Squad.Satellite++, $SF.CreditsInvested += (_cSat), cashX(forceNeg(_cSat), "specialForcesCap")]] <<else>> //Cannot afford to upgrade Satellite.// <</if>> @@ -186,7 +186,7 @@ <<if $SF.Squad.GiantRobot < _GRU>> <<set _cGR = App.SF.UpgradeCost(550000/_upgradeDiv,$SF.Squad.GiantRobot)>> <<if $cash >= _cGR>> - [[Upgrade Giant Robot|Firebase][$SF.Upgrade = 1, $SF.Colonel.Talk += 1, $SF.Squad.GiantRobot++, $SF.CreditsInvested += (_cGR), cashX(forceNeg(_cGR), "specialForcesCap")]] + [[Upgrade Giant Robot|Firebase][$SF.Upgrade = 1, $SF.Squad.GiantRobot++, $SF.CreditsInvested += (_cGR), cashX(forceNeg(_cGR), "specialForcesCap")]] <<else>> //Cannot afford to upgrade the Giant Robot.// <</if>> @@ -203,7 +203,7 @@ <<if $SF.Squad.MissileSilo < _MSU>> <<set _cMS = App.SF.UpgradeCost(565000/_upgradeDiv,$SF.Squad.MissileSilo)>> <<if $cash >= _cMS>> - [[Upgrade Cruise Missile|Firebase][$SF.Upgrade = 1, $SF.Colonel.Talk += 1, $SF.Squad.MissileSilo++, $SF.CreditsInvested += (_cMS), cashX(forceNeg(_cMS), "specialForcesCap")]] + [[Upgrade Cruise Missile|Firebase][$SF.Upgrade = 1, $SF.Squad.MissileSilo++, $SF.CreditsInvested += (_cMS), cashX(forceNeg(_cMS), "specialForcesCap")]] <<else>> //Cannot afford to upgrade Cruise Missile.// <</if>> @@ -223,7 +223,7 @@ <<if $SF.Squad.AircraftCarrier < _ACU>> <<set _cAC = App.SF.UpgradeCost(650000/_upgradeDiv,$SF.Squad.AircraftCarrier)>> <<if $cash >= _cAC>> - [[Upgrade Aircraft Carrier|Firebase][$SF.Upgrade = 1, $SF.Colonel.Talk += 1, $SF.Squad.AircraftCarrier++, $SF.CreditsInvested += (_cAC), cashX(forceNeg(_cAC), "specialForcesCap")]] + [[Upgrade Aircraft Carrier|Firebase][$SF.Upgrade = 1, $SF.Squad.AircraftCarrier++, $SF.CreditsInvested += (_cAC), cashX(forceNeg(_cAC), "specialForcesCap")]] <<else>> //Cannot afford to upgrade Aircraft Carrier.// <</if>> @@ -240,7 +240,7 @@ <<if $SF.Squad.Sub < _SubU>> <<set _cSub = App.SF.UpgradeCost(700000/_upgradeDiv,$SF.Squad.Sub)>> <<if $cash >= _cSub>> - [[Upgrade Submarine|Firebase][$SF.Upgrade = 1, $SF.Colonel.Talk += 1, $SF.Squad.Sub++, $SF.CreditsInvested += (_cSub), cashX(forceNeg(_cSub), "specialForcesCap")]] + [[Upgrade Submarine|Firebase][$SF.Upgrade = 1, $SF.Squad.Sub++, $SF.CreditsInvested += (_cSub), cashX(forceNeg(_cSub), "specialForcesCap")]] <<else>> //Cannot afford to upgrade Submarine// <</if>> @@ -257,7 +257,7 @@ <<if $SF.Squad.HAT < _HATU>> <<set _cHAT = App.SF.UpgradeCost(665000/_upgradeDiv,$SF.Squad.HAT)>> <<if $cash >= _cHAT>> - [[Upgrade Amphibious Transport|Firebase][$SF.Upgrade = 1, $SF.Colonel.Talk += 1, $SF.Squad.HAT++, $SF.CreditsInvested += (_cHAT), cashX(forceNeg(_cHAT), "specialForcesCap")]] + [[Upgrade Amphibious Transport|Firebase][$SF.Upgrade = 1, $SF.Squad.HAT++, $SF.CreditsInvested += (_cHAT), cashX(forceNeg(_cHAT), "specialForcesCap")]] <<else>> //Cannot afford to upgrade Amphibious Transport.// <</if>> diff --git a/src/Mods/SpecialForce/WeeklyChoices.tw b/src/Mods/SpecialForce/WeeklyChoices.tw index 91436ee7527f0e510a2253b5797bf66b295dfff8..956faa2a90f81e3167f2cb48bd7a225c800823c7 100644 --- a/src/Mods/SpecialForce/WeeklyChoices.tw +++ b/src/Mods/SpecialForce/WeeklyChoices.tw @@ -51,232 +51,230 @@ <</if>> <</if>> +<span id="result1"> <<if $SF.Colonel.Talk + $SF.Colonel.Fun === 0>> - <span id="result0"> - <br>"If you need me for anything else, let me know." + <span id="result2"> + <br><br>"If you need me for anything else, let me know." <<if $SF.Colonel.Status >= 25>> - <br><<link "Walk with The Colonel on the surface">> - <<replace "#result0">> + <br><<link "Walk with The Colonel on the surface" "Firebase">> <<set $SF.Colonel.Talk = 1, $SF.Colonel.Status += 2, $SF.FS.Tension -= _colonelTalkTensionRuction>> - <br><br>You ask The Colonel if she would like to stretch her legs up on the surface. It doesn't take much effort for her to agree. - <<if $PC.skill.warfare >= 100 && $PC.career == "mercenary">> - Your mastery of wet work and prior experience in a PMC satisfies The Colonel that between you<<if _S.Bodyguard>>, _S.Bodyguard.slaveName,<</if>> and her, there should be little threat to walking around the arcology. Being able to see and interact with the arcology owner directly maintains the false idea that you're just like one of them while also giving them an increased opportunity to try gaining your favor. - <<run repX(10, "specialForces")>> - <<run cashX(_EnvCash2, "specialForces")>> - <<elseif $PC.skill.warfare >= 100>> - Your mastery of wet work satisfies The Colonel that you only need two soldiers <<if _S.Bodyguard>> plus _S.Bodyguard.slaveName<</if>> to walk safely around the arcology. Being able to see and interact with the arcology owner directly maintains the false idea that you're just like one of them while also giving them an increased opportunity to try gaining your favor. - <<run repX(5, "specialForces")>> - <<run cashX(_EnvCash3, "specialForces")>> - <<elseif $PC.skill.warfare >= 60>> - With some expertise in warfare, The Colonel believes <<if _S.Bodyguard>>with _S.Bodyguard.slaveName <</if>>you only need a squad of armed soldiers for a walk through the arcology. - <<elseif $PC.skill.warfare >= 30>> - As you have some skill in warfare, The Colonel believes<<if _S.Bodyguard>> with _S.Bodyguard.slaveName<</if>> you only need two full squads of armed soldiers for a walk around the arcology. - <<elseif $PC.skill.warfare >= 10>> - Your minor skill in warfare convinces The Colonel that <<if _S.Bodyguard>>in addition to _S.Bodyguard.slaveName, <</if>>you need two full squads of armed soldiers and an armored car escort for a simple walk around the arcology. - <<else>> - Your complete lack of combat skill convinces The Colonel that <<if _S.Bodyguard>>in addition to _S.Bodyguard.slaveName, <</if>>you need two full squads of armed soldiers, an armored car escort, and a sniper overwatch for a simple walk around the arcology. - <</if>> - - <br>As you make your way through the arcology you stop at a - <<if $arcologies[0].FSPaternalist != "unset">> - paternalist shop, <<if $SF.Colonel.Core == "cruel">>earning a sneer from The Colonel<<else>>helping The Colonel select some luxurious and relaxing slave treatments<</if>>. - <<elseif $arcologies[0].FSPastoralist != "unset">> - pastoralist shop, helping The Colonel select a more comfortable breast pump. - <<else>> - shop that catches The Colonel's eye. - <</if>> - <<if $PC.skill.slaving >= 100 && $PC.career == "slaver">> - Your mastery and extensive history of slaving allows you to assist The Colonel greatly. The shop owner is so impressed by your understanding of slavery that she asks you for some advice. Before you leave, you manage to pass on a few tips, helping the business with future customers. - <<if $arcologies[0].prosperity < $AProsperityCap>> - <<set $arcologies[0].prosperity++>> - <</if>> - <<elseif $PC.skill.slaving >= 100>> - Your mastery and extensive history of slaving allows you to assist The Colonel greatly. The shop owner is so impressed by your understanding of slavery that she asks you for some advice. Before you leave, you manage to pass on a few tips, helping the business with future customers. - <<if $arcologies[0].prosperity < $AProsperityCap>> - <<set $arcologies[0].prosperity++>> - <</if>> - <<elseif $PC.skill.slaving >= 60>> - Your expertise in slavery allows you to help The Colonel decide what to buy for her main slave. - <<elseif $PC.skill.slaving >= 30>> - Your moderate skill in slavery makes you somewhat helpful to The Colonel in deciding what to buy for her main slave. - <<elseif $PC.skill.slaving >= 10>> - Your basic skill level of slavery doesn't allow you to help The Colonel at all. - <<elseif $PC.skill.slaving < 10>> - Your total lack of slavery skill (which is very unusual and very concerning for an arcology owner) means that you are of little to no help or even a hindrance. The shopkeeper notices your complete ineptitude, and as soon as you've left the rumor mill begins. - <<run repX(-20, "PCactions")>> - <</if>> - <br>Soon the entourage heads back to the HQ of $SF.Lower. - <<if random(1,100) > 50>> - Along the route you see a homeless citizen with a serious injury begging for help. - <<if $PC.skill.medicine >= 100 && $PC.career == "medicine">> - Your expertise in surgery ensures that the citizen receives the best care they'll ever experience in their life. They are so grateful that they are more than happy to try and compensate your time. Word quickly spreads of the kindly medically trained arcology owner who took the time to heal a citizen, providing confidence to the rest of the citizens. - <<run repX(10, "specialForces")>> - <<run cashX(_EnvCash4, "specialForces")>> - <<elseif $PC.skill.medicine >= 100>> - Your expertise in surgery ensures that the citizen receives the best care they'll ever experience in their life. Word quickly spreads of the kindly arcology owner who took the time to heal a citizen. - <<run repX(5, "specialForces")>> - <<elseif $PC.skill.medicine >= 60>> - Your proficiency in surgery allows you to properly close their wound with minimal trauma to the patient. - <<elseif $PC.skill.medicine >= 30>> - Your moderate surgical skill ensures that you can close the citizen's wound, though not without likely scarring. - <<elseif $PC.skill.medicine >= 10>> - Your basic surgical skill in medicine is sufficient only to stabilize the citizen's wounds before medical assistance arrives. - <<else>> - Your total lack of surgical skill causes the death of the citizen through repeated medical blunders. - <<set $arcologies[0].prosperity -= .25>> - <</if>> - <</if>> - <</replace>> <</link>> <</if>> <br><<link "Talk in $SF.Lower's HQ">> - <<replace "#result0">> - <span id="result1"> - <br><br>What do you want to do with The Colonel in the HQ? - <br><<link "Talk">> - <<replace "#result1">> - <<set $SF.Colonel.Talk = 1, $SF.Colonel.Status += 3, $SF.FS.Tension -= _colonelTalkTensionRuction>> - <br><br>You and The Colonel talk over some $PC.refreshment, where she ends up talking about her past. You learn a little more about her. - <<switch random(1,6)>> - <<case 1>> - <<= IncreasePCSkills(['medicine', 'trading', 'slaving'], 1)>> - <<case 2>> - <<= IncreasePCSkills(['trading', 'slaving', 'engineering'], 1)>> - <<case 3>> - <<= IncreasePCSkills(['slaving', 'engineering', 'hacking'], 1)>> - <<case 4>> - <<= IncreasePCSkills(['engineering', 'hacking', 'warfare'], 1)>> - <<case 5>> - <<= IncreasePCSkills(['hacking', 'warfare', 'medicine'], 1)>> - <<case 6>> - <<= IncreasePCSkills(['warfare', 'medicine', 'trading'], 1)>> - <</switch>> - <</replace>> - <</link>> + <<replace "#result2">> + <span id="result3"> + <br><br>What do you want to do with The Colonel in the HQ? + <br><<link "Talk" "Firebase">> + <<set $SF.Colonel.Talk = 2, $SF.Colonel.Status += 3, $SF.FS.Tension -= _colonelTalkTensionRuction>> + <</link>> - <br><<link "Learn">> - <<replace "#result1">> - <<set $SF.Colonel.Talk = 1,$SF.Colonel.Status += 1, $SF.FS.Tension -= _colonelTalkTensionRuction>> - <br><br>"Sure boss, I can use a break from all of this," she laughs. The Colonel tells a story about one time when she - <<switch random(1,6)>> - <<case 1>> - used field medicine to save another merc's life, teaching you some medical procedures in the process. - <<= IncreasePCSkills('medicine', 5)>> - <<case 2>> - haggled for necessary gear with a stingy quartermaster, teaching you how to get what you want from traders. - <<= IncreasePCSkills('trading', 5)>> - <<case 3>> - found a load of human chattel in a raid and had to manage them before they could later be unloaded, teaching you how to better care for your slaves. - <<= IncreasePCSkills('slaving', 5)>> - <<case 4>> - was responsible for rebuilding a fort she had seized, teaching you how to better manage construction in your arcology. - <<= IncreasePCSkills('engineering', 5)>> - <<case 5>> - was forced to hack her way out of a trap, teaching you how to better penetrate digital security. - <<= IncreasePCSkills('hacking', 5)>> - <<case 6>> - fought off an entire battalion with only a small squad, teaching you how to think tactically in battle. - <<= IncreasePCSkills('warfare', 5)>> - <</switch>> - <</replace>> - <</link>> + <br><<link "Learn" "Firebase">> + <<set $SF.Colonel.Talk = 3,$SF.Colonel.Status += 1, $SF.FS.Tension -= _colonelTalkTensionRuction>> + <</link>> - <<if $SF.Colonel.Status >= 45>> - <br><<link "Have some fun">> - <<replace "#result1">> - <span id="result4"> - <<set $SF.Colonel.Fun = 1,$SF.Colonel.Talk = 1,$SF.Colonel.Status += 3, $SF.FS.Tension -= _colonelTalkTensionRuction>> - <br>Where should this fun take place? - <<link "Go back" "Firebase">> - <<set $SF.Colonel.Fun = 0, $SF.Colonel.Talk = 0,$SF.Colonel.Status -= 3, $SF.FS.Tension += _colonelTalkTensionRuction>> - <</link>> - <br><<link "In private">> - <<replace "#result4">> - <span id="result6"> - <br>Which orifice do you wish to target? - <<link "Go back" "Firebase">> - <</link>> - <br><<link "Pussy">> - <<replace "#result6">> - <<include "SFColonelSexDec">> - <</replace>> - <<set $SF.Colonel.Fun += 1>> - <</link>> - <br><<link "Ass">> - <<replace "#result6">> - <<include "SFColonelSexDec">> - <</replace>> - <<set $SF.Colonel.Fun += 1>> - <</link>> - <br><<link "Both pussy and ass">> - <<replace "#result6">> - <<include "SFColonelSexDec">> - <</replace>> - <<set $SF.Colonel.Fun += 2>> - <</link>> - <br><<link "Mouth">> - <<replace "#result6">> - <<include "SFColonelSexDec">> - <</replace>> - <<set $SF.Colonel.Fun += 1>> - <</link>> - <br><<link "All three holes">> - <<replace "#result6">> - <<include "SFColonelSexDec">> - <</replace>> - <<set $SF.Colonel.Fun += 3>> - <</link>> - </span> - <</replace>> - <</link>> + <<if $SF.Colonel.Status >= 45>> <br> + <<link "Have some fun">> + <<replace "#result3">> + <span id="result4"> + <<set $SF.Colonel.Fun = 1, $SF.Colonel.Status += 3, $SF.FS.Tension -= _colonelTalkTensionRuction>> + <br><br>Where should this fun take place? + <<link "Go back" "Firebase">> + <<set $SF.Colonel.Fun = 0, $SF.Colonel.Talk = 0,$SF.Colonel.Status -= 3, $SF.FS.Tension += _colonelTalkTensionRuction>> + <</link>> + <br><<link "In private">> + <<replace "#result4">> + <span id="result6"> + <br><br>Which orifice do you wish to target? + <<link "Go back" "Firebase">> <</link>> + <br><<link "Pussy">> + <<replace "#result6">> + <<include "SFColonelSexDec">> + <</replace>> + <<set $SF.Colonel.Fun += 1>> + <</link>> + <br><<link "Ass">> + <<replace "#result6">> + <<include "SFColonelSexDec">> + <</replace>> + <<set $SF.Colonel.Fun += 1>> + <</link>> + <br><<link "Both pussy and ass">> + <<replace "#result6">> + <<include "SFColonelSexDec">> + <</replace>> + <<set $SF.Colonel.Fun += 2>> + <</link>> + <br><<link "Mouth">> + <<replace "#result6">> + <<include "SFColonelSexDec">> + <</replace>> + <<set $SF.Colonel.Fun += 1>> + <</link>> + <br><<link "All three holes">> + <<replace "#result6">> + <<include "SFColonelSexDec">> + <</replace>> + <<set $SF.Colonel.Fun += 3>> + <</link>> + </span> + <</replace>> + <</link>> - <br><<link "On The Colonel's throne">> - <<replace "#result4">> - <span id="result6"> - <br>Which orifice do you wish to target? - <<link "Go back" "Firebase">> - <</link>> - <br><<link "Pussy">> - <<replace "#result6">> - <<include "SFColonelSexDec">> - <</replace>> - <<set $SF.Colonel.Fun += 1>> - <</link>> - <br><<link "Ass">> - <<replace "#result6">> - <<include "SFColonelSexDec">> - <</replace>> - <<set $SF.Colonel.Fun += 1>> - <</link>> - <br><<link "Both pussy and ass">> - <<replace "#result6">> - <<include "SFColonelSexDec">> - <</replace>> - <<set $SF.Colonel.Fun += 2>> - <</link>> - <br><<link "Mouth">> - <<replace "#result6">> - <<include "SFColonelSexDec">> - <</replace>> - <<set $SF.Colonel.Fun += 1>> - <</link>> - <br><<link "All three holes">> - <<replace "#result6">> - <<include "SFColonelSexDec">> - <</replace>> - <<set $SF.Colonel.Fun += 3>> - <</link>> - </span> - <</replace>> - <</link>> + <br><<link "On The Colonel's throne">> + <<replace "#result4">> + <span id="result6"> + <br><br>Which orifice do you wish to target? + <<link "Go back" "Firebase">> <</link>> + <br><<link "Pussy">> + <<replace "#result6">> + <<include "SFColonelSexDec">> + <</replace>> + <<set $SF.Colonel.Fun += 1>> + <</link>> + <br><<link "Ass">> + <<replace "#result6">> + <<include "SFColonelSexDec">> + <</replace>> + <<set $SF.Colonel.Fun += 1>> + <</link>> + <br><<link "Both pussy and ass">> + <<replace "#result6">> + <<include "SFColonelSexDec">> + <</replace>> + <<set $SF.Colonel.Fun += 2>> + <</link>> + <br><<link "Mouth">> + <<replace "#result6">> + <<include "SFColonelSexDec">> + <</replace>> + <<set $SF.Colonel.Fun += 1>> + <</link>> + <br><<link "All three holes">> + <<replace "#result6">> + <<include "SFColonelSexDec">> + <</replace>> + <<set $SF.Colonel.Fun += 3>> + <</link>> </span> <</replace>> <</link>> - <</if>> /*Closes fun*/ + </span> + <</replace>> + <</link>> + <</if>> /*Closes fun*/ + </span> <</replace>> - <</link>> /*Closes talk*/ + <</link>> /*Closes talk*/ </span> -<</if>> /*Closes spend time with The Colonel*/ \ No newline at end of file +<</if>> /*Closes spend time with The Colonel*/ +</span> + +<<if $SF.Colonel.Talk === 1>> + <br><br>You ask The Colonel if she would like to stretch her legs up on the surface. It doesn't take much effort for her to agree. + <<if $PC.skill.warfare >= 100 && $PC.career == "mercenary">> + Your mastery of wet work and prior experience in a PMC satisfies The Colonel that between you<<if _S.Bodyguard>>, _S.Bodyguard.slaveName,<</if>> and her, there should be little threat to walking around the arcology. Being able to see and interact with the arcology owner directly maintains the false idea that you're just like one of them while also giving them an increased opportunity to try gaining your favor. + <<run repX(10, "specialForces"), cashX(_EnvCash2, "specialForces")>> + <<elseif $PC.skill.warfare >= 100>> + Your mastery of wet work satisfies The Colonel that you only need two soldiers <<if _S.Bodyguard>> plus _S.Bodyguard.slaveName<</if>> to walk safely around the arcology. Being able to see and interact with the arcology owner directly maintains the false idea that you're just like one of them while also giving them an increased opportunity to try gaining your favor. + <<run repX(5, "specialForces"), cashX(_EnvCash3, "specialForces")>> + <<elseif $PC.skill.warfare >= 60>> + With some expertise in warfare, The Colonel believes <<if _S.Bodyguard>>with _S.Bodyguard.slaveName <</if>>you only need a squad of armed soldiers for a walk through the arcology. + <<elseif $PC.skill.warfare >= 30>> + As you have some skill in warfare, The Colonel believes<<if _S.Bodyguard>> with _S.Bodyguard.slaveName<</if>> you only need two full squads of armed soldiers for a walk around the arcology. + <<elseif $PC.skill.warfare >= 10>> + Your minor skill in warfare convinces The Colonel that <<if _S.Bodyguard>>in addition to _S.Bodyguard.slaveName, <</if>>you need two full squads of armed soldiers and an armored car escort for a simple walk around the arcology. + <<else>> + Your complete lack of combat skill convinces The Colonel that <<if _S.Bodyguard>>in addition to _S.Bodyguard.slaveName, <</if>>you need two full squads of armed soldiers, an armored car escort, and a sniper overwatch for a simple walk around the arcology. + <</if>> + + <br>As you make your way through the arcology you stop at a + <<if $arcologies[0].FSPaternalist != "unset">> + paternalist shop, <<if $SF.Colonel.Core == "cruel">>earning a sneer from The Colonel<<else>>helping The Colonel select some luxurious and relaxing slave treatments<</if>>. + <<elseif $arcologies[0].FSPastoralist != "unset">> + pastoralist shop, helping The Colonel select a more comfortable breast pump. + <<else>> + shop that catches The Colonel's eye. + <</if>> + <<if $PC.skill.slaving >= 100 && $PC.career == "slaver">> + Your mastery and extensive history of slaving allows you to assist The Colonel greatly. The shop owner is so impressed by your understanding of slavery that she asks you for some advice. Before you leave, you manage to pass on a few tips, helping the business with future customers. + <<if $arcologies[0].prosperity < $AProsperityCap>> + <<set $arcologies[0].prosperity++>> + <</if>> + <<elseif $PC.skill.slaving >= 100>> + Your mastery and extensive history of slaving allows you to assist The Colonel greatly. The shop owner is so impressed by your understanding of slavery that she asks you for some advice. Before you leave, you manage to pass on a few tips, helping the business with future customers. + <<if $arcologies[0].prosperity < $AProsperityCap>> + <<set $arcologies[0].prosperity++>> + <</if>> + <<elseif $PC.skill.slaving >= 60>> + Your expertise in slavery allows you to help The Colonel decide what to buy for her main slave. + <<elseif $PC.skill.slaving >= 30>> + Your moderate skill in slavery makes you somewhat helpful to The Colonel in deciding what to buy for her main slave. + <<elseif $PC.skill.slaving >= 10>> + Your basic skill level of slavery doesn't allow you to help The Colonel at all. + <<elseif $PC.skill.slaving < 10>> + Your total lack of slavery skill (which is very unusual and very concerning for an arcology owner) means that you are of little to no help or even a hindrance. The shopkeeper notices your complete ineptitude, and as soon as you've left the rumor mill begins. + <<run repX(-20, "PCactions")>> + <</if>> + <br>Soon the entourage heads back to the HQ of $SF.Lower. + <<if random(1,100) > 50>> + Along the route you see a homeless citizen with a serious injury begging for help. + <<if $PC.skill.medicine >= 100 && $PC.career == "medicine">> + Your expertise in surgery ensures that the citizen receives the best care they'll ever experience in their life. They are so grateful that they are more than happy to try and compensate your time. Word quickly spreads of the kindly medically trained arcology owner who took the time to heal a citizen, providing confidence to the rest of the citizens. + <<run repX(10, "specialForces")>> + <<run cashX(_EnvCash4, "specialForces")>> + <<elseif $PC.skill.medicine >= 100>> + Your expertise in surgery ensures that the citizen receives the best care they'll ever experience in their life. Word quickly spreads of the kindly arcology owner who took the time to heal a citizen. + <<run repX(5, "specialForces")>> + <<elseif $PC.skill.medicine >= 60>> + Your proficiency in surgery allows you to properly close their wound with minimal trauma to the patient. + <<elseif $PC.skill.medicine >= 30>> + Your moderate surgical skill ensures that you can close the citizen's wound, though not without likely scarring. + <<elseif $PC.skill.medicine >= 10>> + Your basic surgical skill in medicine is sufficient only to stabilize the citizen's wounds before medical assistance arrives. + <<else>> + Your total lack of surgical skill causes the death of the citizen through repeated medical blunders. + <<set $arcologies[0].prosperity -= .25>> + <</if>> + <</if>> +<<elseif $SF.Colonel.Talk === 2>> + <br><br>You and The Colonel talk over some $PC.refreshment, where she ends up talking about her past. You learn a little more about her. + <<switch random(1,6)>> + <<case 1>> + <<= IncreasePCSkills(['medicine', 'trading', 'slaving'], 1)>> + <<case 2>> + <<= IncreasePCSkills(['trading', 'slaving', 'engineering'], 1)>> + <<case 3>> + <<= IncreasePCSkills(['slaving', 'engineering', 'hacking'], 1)>> + <<case 4>> + <<= IncreasePCSkills(['engineering', 'hacking', 'warfare'], 1)>> + <<case 5>> + <<= IncreasePCSkills(['hacking', 'warfare', 'medicine'], 1)>> + <<case 6>> + <<= IncreasePCSkills(['warfare', 'medicine', 'trading'], 1)>> + <</switch>> +<<elseif $SF.Colonel.Talk === 3>> + <br><br>"Sure boss, I can use a break from all of this," she laughs. The Colonel tells a story about one time when she + <<switch random(1,6)>> + <<case 1>> + used field medicine to save another merc's life, teaching you some medical procedures in the process. + <<= IncreasePCSkills('medicine', 5)>> + <<case 2>> + haggled for necessary gear with a stingy quartermaster, teaching you how to get what you want from traders. + <<= IncreasePCSkills('trading', 5)>> + <<case 3>> + found a load of human chattel in a raid and had to manage them before they could later be unloaded, teaching you how to better care for your slaves. + <<= IncreasePCSkills('slaving', 5)>> + <<case 4>> + was responsible for rebuilding a fort she had seized, teaching you how to better manage construction in your arcology. + <<= IncreasePCSkills('engineering', 5)>> + <<case 5>> + was forced to hack her way out of a trap, teaching you how to better penetrate digital security. + <<= IncreasePCSkills('hacking', 5)>> + <<case 6>> + fought off an entire battalion with only a small squad, teaching you how to think tactically in battle. + <<= IncreasePCSkills('warfare', 5)>> + <</switch>> +<</if>> \ No newline at end of file diff --git a/src/data/backwardsCompatibility/backwardsCompatibility.js b/src/data/backwardsCompatibility/backwardsCompatibility.js index 5d39d3c5b0494a40e0327a4bbfb85dbb4ef95b0e..e10008d8b8db09c2662726a27667290d2eb263aa 100644 --- a/src/data/backwardsCompatibility/backwardsCompatibility.js +++ b/src/data/backwardsCompatibility/backwardsCompatibility.js @@ -1260,6 +1260,10 @@ App.Update.globalVariables = function(node) { V.boughtItem.toys.buttPlugs = V.boughtItem.toys.buttPlugs || V.toysBoughtButtPlugs || 0; V.boughtItem.toys.buttPlugTails = V.boughtItem.toys.buttPlugTails || V.toysBoughtButtPlugTails || 0; + V.boughtItem.toys.buckets = V.boughtItem.toys.buckets || V.buckets || 0; + V.boughtItem.toys.enema = V.boughtItem.toys.enema || V.enema || 0; + V.boughtItem.toys.medicalEnema = V.boughtItem.toys.medicalEnema || V.medicalEnema || 0; + node.append(`Done!`); }; diff --git a/src/descriptions/arcologyDescription.js b/src/descriptions/arcologyDescription.js index 12ef6da75cb1446e4732db60814a6c5fdaeb4773..c013250fc54ee4b9d32730dd072cbc739d544bc0 100644 --- a/src/descriptions/arcologyDescription.js +++ b/src/descriptions/arcologyDescription.js @@ -324,7 +324,7 @@ App.Desc.playerArcology = function(lastElement) { } if (V.seePreg === 1) { if (V.brothelAdsPreg === 1) { - buffer.push(`Most of slaves have firm, rounded bellies.`); + buffer.push(`Most of the slaves have firm, rounded bellies.`); } else if (V.brothelAdsPreg === -1) { buffer.push(`Most of the slaves have firm, flat bellies.`); } else { diff --git a/src/endWeek/saChoosesOwnJob.js b/src/endWeek/saChoosesOwnJob.js index 88d92960c58d6ea1f81c0855351a694c8f7e5ba0..6e2447dfa7f5b0ade1d8669b321ebd70d4ec16f8 100644 --- a/src/endWeek/saChoosesOwnJob.js +++ b/src/endWeek/saChoosesOwnJob.js @@ -48,15 +48,15 @@ App.SlaveAssignment.choosesOwnJob = (function() { } else if (slave.choosesOwnAssignment === 2) { // second pass happens visibly during weekly report for the location where this slave decided to go (or stay) // display text but don't change assignment (already done) - r.push(slave.choosesOwnAssignmentText); - slave.choosesOwnAssignmentText = ""; + r.push(V.choosesOwnAssignmentText[slave.ID]); + delete V.choosesOwnAssignmentText[slave.ID]; slave.choosesOwnAssignment = 1; // continue cycle for next week } else { // first pass happens silently before all reports: give stats bonus, construct decision string for display during second pass, actually change assignment slave.devotion++; slave.trust++; - slave.choosesOwnAssignmentText = jobSelection(slave); + V.choosesOwnAssignmentText[slave.ID] = jobSelection(slave); } return r.join(" "); diff --git a/src/events/RECI/butthole.js b/src/events/RECI/butthole.js index f797aaf8ab36d24816c040243ff3622c22f964fa..dca2c363224f201aa2877b846fdc47bba205cfcc 100644 --- a/src/events/RECI/butthole.js +++ b/src/events/RECI/butthole.js @@ -233,13 +233,13 @@ App.Events.RECIButthole = class RECIButthole extends App.Events.BaseEvent { (eventSlave.chastityAnus) ? new App.Events.Result(`Remind ${him} of ${his} chastity`, chaste) : new App.Events.Result(), - (eventSlave.ID !== V.HeadGirlID) + (S.HeadGirl && eventSlave.ID !== V.HeadGirlID) ? new App.Events.Result(`Double anal with the Head Girl`, () => DoubleTeam(S.HeadGirl)) : new App.Events.Result(), - (eventSlave.ID !== V.ConcubineID && hasAnyLegs(S.Concubine) && hasAnyArms(S.Concubine) && S.Concubine.fetish !== "mindbroken") + (S.Concubine && eventSlave.ID !== V.ConcubineID && hasAnyLegs(S.Concubine) && hasAnyArms(S.Concubine) && S.Concubine.fetish !== "mindbroken") ? new App.Events.Result(`Double anal with your Concubine`, () => DoubleTeam(S.Concubine)) : new App.Events.Result(), - (eventSlave.ID !== V.BodyguardID) + (S.Bodyguard && eventSlave.ID !== V.BodyguardID) ? new App.Events.Result(`Double anal with your Body Guard`, () => DoubleTeam(S.Bodyguard)) : new App.Events.Result(), new App.Events.Result(`Chat about ${his} ass`, talk), diff --git a/src/events/intro/initNationalities.js b/src/events/intro/initNationalities.js index b34f9d8f003f924eaddb302bcae69b86d8dddcfe..ecb9fbe0686d0235dd9f121954946eb463fce6ea 100644 --- a/src/events/intro/initNationalities.js +++ b/src/events/intro/initNationalities.js @@ -96,9 +96,7 @@ App.Intro.initNationalities = function() { V.arcologyUpgrade.drones = 1; V.arcologyUpgrade.hydro = 1; if (V.secExpEnabled > 0) { - V.secBots.active = 1; - V.secBots.troops = 30; - V.secBots.maxTroops = 30; + V.secBots = App.SecExp.generateUnit("bots"); } } else if (V.PC.career === "medicine") { V.trinkets.push("a framed postsurgical x-ray"); diff --git a/src/events/intro/introSummary.tw b/src/events/intro/introSummary.tw index be921e5753767cd93b71fca18f57ce4b420626b7..748d8d845e215e8175a3da6668053112582177a1 100644 --- a/src/events/intro/introSummary.tw +++ b/src/events/intro/introSummary.tw @@ -352,11 +352,17 @@ You may review your settings before clicking "Continue" to begin.<br> <h2>Mods</h2> <<set _options = new App.UI.OptionsGroup()>> - <<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()>> + <<run _options.addOption("The Special Force Mod is", "Toggle", $SF) + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + .addComment("<div>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 72.</div> + <div>It is non-canon where it conflicts with canonical updates to the base game.</div>") + >> - <<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()>> + <<run _options.addOption("The Security Expansion Mod is", "secExpEnabled") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + .addComment("<div>This mod introduces security and crime in the arcology, as well as attacks and battles.</div> + <div>The mod can be activated in any moment, but it may result in unbalanced gameplay if activated very late in the game.<div>") + >> <<includeDOM _options.render()>> </div> diff --git a/src/gui/options/options.tw b/src/gui/options/options.tw index ffbeac3eb3930d080d1ed43fd5bb528b8e055cb0..928a523ac5de7fe46c20d28898ba559c78bcc9a2 100644 --- a/src/gui/options/options.tw +++ b/src/gui/options/options.tw @@ -389,7 +389,8 @@ <<set _options = new App.UI.OptionsGroup()>> <<run _options.addOption("The Special Force Mod is currently", "Toggle", $SF) - .addValue("Enabled", 1).on().addValue("Disabled", 0).off()>> + .addValue("Enabled", 1).on().addValue("Disabled", 0).off() + .addComment("<div>This mod is triggered after week 72. It is non-canon where it conflicts with canonical updates to the base game.</div>")>> <<run _options.addOption("The Security Expansion mod is", "secExpEnabled") .addValue("Enabled", 1).on().addValue("Disabled", 0).off() diff --git a/src/gui/storyCaption.tw b/src/gui/storyCaption.tw index c73a92b0d4a98ec45195ad8eca0f36e41d353ef3..d4562a07d4b16235cf7f46c4c076745d5c430a6c 100644 --- a/src/gui/storyCaption.tw +++ b/src/gui/storyCaption.tw @@ -182,52 +182,53 @@ </div> <</if>> - <<if $secExpEnabled > 0 && ($sideBarOptions.Authority + $sideBarOptions.Security + $sideBarOptions.Crime > 0)>> + <<if $secExpEnabled == 1 && ($sideBarOptions.Authority + $sideBarOptions.Security + $sideBarOptions.Crime > 0)>> <<if $sideBarOptions.Authority > 0>> <div> - @@.darkviolet;Auth@@ | + @@.darkviolet;Auth@@ | @@.darkviolet; <<set $SecExp.core.authority = Math.clamp(Math.trunc($SecExp.core.authority), 0, 20000)>> <<if $SecExp.core.authority > 19500>> - @@color:rgb(148, 0, 211);divine will@@ + divine will <<elseif $SecExp.core.authority > 19000>> - @@color:rgb(148, 0, 211);sovereign@@ + sovereign <<elseif $SecExp.core.authority > 18000>> - @@color:rgb(148, 0, 211);monarch@@ + monarch <<elseif $SecExp.core.authority > 17000>> - @@color:rgb(148, 0, 211);tyrant@@ + tyrant <<elseif $SecExp.core.authority > 15000>> - @@color:rgb(148, 0, 211);dictator@@ + dictator <<elseif $SecExp.core.authority > 14000>> - @@color:rgb(148, 0, 211);prince@@ + prince <<elseif $SecExp.core.authority > 13000>> - @@color:rgb(183, 0, 211);master@@ + master <<elseif $SecExp.core.authority > 12000>> - @@color:rgb(183, 0, 211);leader@@ + leader <<elseif $SecExp.core.authority > 11000>> - @@color:rgb(183, 0, 211);director@@ + director <<elseif $SecExp.core.authority > 10000>> - @@color:rgb(183, 0, 211);overseer@@ + overseer <<elseif $SecExp.core.authority > 9000>> - @@color:rgb(183, 0, 211);chief@@ + chief <<elseif $SecExp.core.authority > 8000>> - @@color:rgb(183, 0, 211);manager@@ + manager <<elseif $SecExp.core.authority > 7000>> - @@color:rgb(211,0,204);principal@@ + principal <<elseif $SecExp.core.authority > 6000>> - @@color:rgb(211,0,204);auxiliary@@ + auxiliary <<elseif $SecExp.core.authority > 5000>> - @@color:rgb(211,0,204);subordinate@@ + subordinate <<elseif $SecExp.core.authority > 4000>> - @@color:rgb(211,0,204);follower@@ + follower <<elseif $SecExp.core.authority > 3000>> - @@color:rgb(211,0,204);powerless@@ + powerless <<elseif $SecExp.core.authority > 2000>> - @@color:rgb(211,0,204);toothless@@ + toothless <<elseif $SecExp.core.authority > 1000>> - @@color:rgb(211,0,204);mostly harmless@@ + mostly harmless <<else>> - @@color:rgb(211,0,204);harmless@@ + harmless <</if>> + @@ (<<= num($SecExp.core.authority)>>) <<if _Pass == "Main" && $cheatMode && $cheatModeM>> <<set _TAuth = $SecExp.core.authority>> diff --git a/src/js/itemAvailability.js b/src/js/itemAvailability.js index 044139009a3433d6a5d7cd8594ea80513be4eec8..8a05c65810293bc13806680888ae134218090353 100644 --- a/src/js/itemAvailability.js +++ b/src/js/itemAvailability.js @@ -104,7 +104,7 @@ globalThis.isItemAccessible = (function() { return true; } if (item.hasOwnProperty("rs")) { - if (item.rs) { + if (item.rs === true) { return true; } } @@ -113,7 +113,7 @@ globalThis.isItemAccessible = (function() { return true; } } - if (slaveResults) { // If we still haven't returned true or false, then we display why this particular slave can't use the item. + if (slaveResults && slaveResults !== true) { // If we still haven't returned true or false, then we display why this particular slave can't use the item. return slaveResults; } return false; diff --git a/src/npc/interaction/forceFeeding.tw b/src/npc/interaction/forceFeeding.tw index 89a56c3a1a869d80a8219ff79528b1d988863cbe..fb793eb0b178b4e78b5454ba4164f9b4027b5616 100644 --- a/src/npc/interaction/forceFeeding.tw +++ b/src/npc/interaction/forceFeeding.tw @@ -2,6 +2,7 @@ <<set $AS = $activeSlave.ID>> <<setLocalPronouns $activeSlave>> +<<set $desc = SlaveTitle(getSlave($AS))>> <<set _belly = bellyAdjective(getSlave($AS))>> <<set getSlave($AS).bellyAccessory = "none", _isDone = getSlave($AS).inflation-1, _pregDiscovery = 0>> diff --git a/src/pregmod/FCTV/FCTV.js b/src/pregmod/FCTV/FCTV.js index d2a769c5a5f583c3e979357884998d87f91675fd..5fdf17baca015bacd3fd40686d847a85b54c46f2 100644 --- a/src/pregmod/FCTV/FCTV.js +++ b/src/pregmod/FCTV/FCTV.js @@ -23,14 +23,10 @@ globalThis.FCTV = (function() { }; /** Produce an array of numbers representing all available channels in App.Data.FCTV.channels - * @returns {Array} + * @returns {number[]} */ function channels() { - const array = []; - for (const channel in App.Data.FCTV.channels) { - array.push(parseInt(channel, 10)); - } - return array; + return Object.keys(App.Data.FCTV.channels).map(chStr => parseInt(chStr, 10)); } function initChannels() { @@ -161,7 +157,7 @@ globalThis.FctvDisplay = function({usedRemote = 0, seeAll = 0, selectedChannel = return jQuery("#FctvWatch").empty().append(frag); /** Creates a remote control for FCTV - * @returns {node} + * @returns {HTMLParagraphElement} */ function createRemote() { const p = document.createElement("p"); @@ -175,7 +171,7 @@ globalThis.FctvDisplay = function({usedRemote = 0, seeAll = 0, selectedChannel = if (selectedChannel !== i) { // Selected button buttons.push( App.UI.DOM.link( - i, + i.toFixed(0), () => { watch({usedRemote: 1, seeAll: seeAll, selectedChannel: i}); } @@ -187,7 +183,7 @@ globalThis.FctvDisplay = function({usedRemote = 0, seeAll = 0, selectedChannel = span.style.fontWeight = "bold"; span.append( App.UI.DOM.link( - i, + i.toFixed(0), () => { watch({usedRemote: 1, seeAll: seeAll, selectedChannel: i}); }, @@ -200,7 +196,7 @@ globalThis.FctvDisplay = function({usedRemote = 0, seeAll = 0, selectedChannel = } } else { // Channel you cannot choose buttons.push( - App.UI.DOM.disabledLink(i, [showChannel(i).text]) + App.UI.DOM.disabledLink(i.toFixed(0), [showChannel(i).text]) ); } } @@ -302,7 +298,7 @@ globalThis.FctvDisplay = function({usedRemote = 0, seeAll = 0, selectedChannel = /** * Text to frame if content won't work due to tags. * @param {string} text Reason this channel/episode can't be shown - * @returns {node} + * @returns {Node} */ function channelFailed(text) { const frag = new DocumentFragment; @@ -314,7 +310,7 @@ globalThis.FctvDisplay = function({usedRemote = 0, seeAll = 0, selectedChannel = /** * Displays just the channel itself, including art - * @returns {node} + * @returns {Node} */ function displayShow() { const frag = new DocumentFragment(); @@ -343,11 +339,12 @@ globalThis.FctvDisplay = function({usedRemote = 0, seeAll = 0, selectedChannel = if (channel.intro) { $(frag).append(channel.intro); } - if (channel.episode[epToShow].text) { - if (typeof channel.episode[epToShow].text === 'function') { - $(frag).append(channel.episode[epToShow].text(slave)); + const episodeText = channel.episode[epToShow].text; + if (episodeText) { + if (typeof episodeText === 'function') { + $(frag).append(episodeText(slave)); } else { - $(frag).append(channel.episode[epToShow].text); + $(frag).append(episodeText); } } if (channel.outro) { diff --git a/src/pregmod/FCTV/FCTVshows.js b/src/pregmod/FCTV/FCTVshows.js index e2a55380f317ccb66af951e6da832d9bc41bac91..1922a44e77c1dad5cef7a4c87b8283973195dd38 100644 --- a/src/pregmod/FCTV/FCTVshows.js +++ b/src/pregmod/FCTV/FCTVshows.js @@ -1,8 +1,4 @@ -/** - * @typedef {object<string, App.Entity.SlaveState>} FctvActor - */ - -/** @type {object.<string, FctvActor>} */ +/** @type {Object.<string, App.Entity.SlaveState>} */ App.Data.FCTV.actors = { get millie() { const slave = BaseSlave(); @@ -109,7 +105,7 @@ App.Data.FCTV.actors = { }, get premiumVirgin() { let slave = GenerateNewSlave("XX", { - disableDisability: 1, slaveOneTimeMinAge: (V.fertilityAge + 2), slaveOneTimeMaxAge: 18, ageOverridesPedoMode: 1 + disableDisability: 1, minAge: (V.fertilityAge + 2), maxAge: 18, ageOverridesPedoMode: 1 }); slave.devotion = jsRandom(60, 90); slave.weight = jsRandom(-10, 10); @@ -154,7 +150,7 @@ App.Data.FCTV.actors = { }, get hyperPregnant() { let slave = GenerateNewSlave("XX", { - disableDisability: 1, slaveOneTimeMinAge: (V.fertilityAge + 3), slaveOneTimeMaxAge: 20, ageOverridesPedoMode: 1 + disableDisability: 1, minAge: (V.fertilityAge + 3), maxAge: 20, ageOverridesPedoMode: 1 }); slave.weight = jsRandom(10, 20); slave.waist = jsRandom(-25, 25); @@ -203,7 +199,7 @@ App.Data.FCTV.actors = { }, get superfetation() { // superfetation let slave = GenerateNewSlave("XX", { - disableDisability: 1, slaveOneTimeMinAge: (V.fertilityAge + 4), slaveOneTimeMaxAge: 24, ageOverridesPedoMode: 1 + disableDisability: 1, minAge: (V.fertilityAge + 4), maxAge: 24, ageOverridesPedoMode: 1 }); slave.weight = jsRandom(20, 40); @@ -246,7 +242,7 @@ App.Data.FCTV.actors = { }, get MILF() { // MILF let slave = GenerateNewSlave("XX", { - disableDisability: 1, slaveOneTimeMinAge: 36, slaveOneTimeMaxAge: 40, ageOverridesPedoMode: 1 + disableDisability: 1, minAge: 36, maxAge: 40, ageOverridesPedoMode: 1 }); slave.weight = jsRandom(20, 90); slave.waist = jsRandom(-45, 45); @@ -284,7 +280,7 @@ App.Data.FCTV.actors = { return slave; }, get youngHottie() { // discount young hottie - let slave = GenerateNewSlave("XX", {disableDisability: 1, slaveOneTimeMaxAge: 25, ageOverridesPedoMode: 1}); + let slave = GenerateNewSlave("XX", {disableDisability: 1, maxAge: 25, ageOverridesPedoMode: 1}); slave.face = jsRandom(70, 100); slave.weight = jsRandom(-5, 10); @@ -318,7 +314,7 @@ App.Data.FCTV.actors = { return slave; }, get hugeBalls() { // huge balls - let slave = GenerateNewSlave("XY", {disableDisability: 1, slaveOneTimeMaxAge: 25, ageOverridesPedoMode: 1}); + let slave = GenerateNewSlave("XY", {disableDisability: 1, maxAge: 25, ageOverridesPedoMode: 1}); slave.anus = 2; slave.balls = jsRandom(20, 35); @@ -334,7 +330,7 @@ App.Data.FCTV.actors = { return slave; }, get mpreg() { // mpreg dickgirl - let slave = GenerateNewSlave("XY", {disableDisability: 1, slaveOneTimeMaxAge: 22, ageOverridesPedoMode: 1}); + let slave = GenerateNewSlave("XY", {disableDisability: 1, maxAge: 22, ageOverridesPedoMode: 1}); slave.anus = 2; slave.vagina = 1; slave.ovaries = 0; @@ -409,14 +405,14 @@ App.Data.FCTV.actors = { }, get hostess() { const gender = (V.seeDicks === 100) ? "XY" : "XX"; - let races = 0; + let races = []; if (V.arcologies[0].FSSupremacistLawME === 1) { - races = V.arcologies[0].FSSupremacistRace; + races = [V.arcologies[0].FSSupremacistRace]; } else if (V.arcologies[0].FSSubjugationistLawME === 1) { races = setup.filterRacesLowercase.filter(race => race !== V.arcologies[0].FSSubjugationistRace); } const slave = GenerateNewSlave(gender, { - ageOverridesPedoMode: 1, oneTimeDisableDisability: 1, slaveOneTimeMinAge: 25, slaveOneTimeMaxAge: 35, fixedRace: races.jsRandom() + ageOverridesPedoMode: 1, disableDisability: 1, minAge: 25, maxAge: 35, race: races.random() }); slave.devotion = 45; slave.trust = 55; @@ -438,14 +434,14 @@ App.Data.FCTV.actors = { }, get scientist() { const gender = (V.seeDicks === 0) ? "XY" : "XX"; - let races = 0; + let races = []; if (V.arcologies[0].FSSupremacistLawME === 1) { - races = V.arcologies[0].FSSupremacistRace; + races = [V.arcologies[0].FSSupremacistRace]; } else if (V.arcologies[0].FSSubjugationistLawME === 1) { races = setup.filterRacesLowercase.filter(race => race !== V.arcologies[0].FSSubjugationistRace); } const slave = GenerateNewSlave(gender, { - ageOverridesPedoMode: 1, oneTimeDisableDisability: 1, slaveOneTimeMinAge: 25, slaveOneTimeMaxAge: 35, fixedRace: races.jsRandom() + ageOverridesPedoMode: 1, disableDisability: 1, minAge: 25, maxAge: 35, race: races.random() }); slave.devotion = 0; @@ -470,18 +466,18 @@ App.Data.FCTV.actors = { }, get nun() { const gender = (V.seeDicks === 100) ? "XY" : "XX"; - let races = 0; + let races = []; if (V.arcologies[0].FSSupremacistLawME === 1) { - races = V.arcologies[0].FSSupremacistRace; + races = [V.arcologies[0].FSSupremacistRace]; } else if (V.arcologies[0].FSSubjugationistLawME === 1) { races = setup.filterRacesLowercase.filter(race => race !== V.arcologies[0].FSSubjugationistRace); } const slave = GenerateNewSlave(gender, { - ageOverridesPedoMode: 1, oneTimeDisableDisability: 1, slaveOneTimeMinAge: 25, slaveOneTimeMaxAge: 35, fixedRace: races.jsRandom() + ageOverridesPedoMode: 1, disableDisability: 1, minAge: 25, maxAge: 35, race: races.random() }); slave.devotion = jsRandom(45, 60); - slave.trust = jsRandom(-10); + slave.trust = jsRandom(-10, 0); slave.muscles = 30; slave.hLength = 1; slave.hStyle = "buzzcut"; @@ -517,17 +513,18 @@ App.Data.FCTV.actors = { /** * @typedef {object} FctvChannel * @property {FctvTags} [tags] + * @property {boolean} [disableSelection] * @property {boolean} loop After an initial viewing, should the episodes continue to play in order? - * @property {string} intro + * @property {string} [intro] * @property {FctvEpisode[]} episode - * @property {function(App.Entity.SlaveState, [number]):string} outro Takes slave and episode number + * @property {function(App.Entity.SlaveState, number):string | Node} [outro] Takes slave and episode number */ /** * @typedef {object} FctvEpisode * @property {FctvTags} [tags] * @property {App.Entity.SlaveState[]} [slaves] - * @property {string} text HTML embedded + * @property {(function(App.Entity.SlaveState):string) | string} text HTML embedded */ /** @@ -537,9 +534,10 @@ App.Data.FCTV.actors = { * @property {boolean} [loli] * @property {boolean} [extreme] * @property {boolean} [dicks] + * @property {boolean} [incest] */ -/** @type {object.<number, FctvChannel>} */ +/** @type {Object.<number, FctvChannel>} */ App.Data.FCTV.channels = { 0: { // News tags: {}, @@ -662,17 +660,17 @@ App.Data.FCTV.channels = { r.push(`<p>The montage is overlaid with a narrator's voice: "12 of Canadia Arcology's most attractive women are all competing for the privilege of having the arcology owner's children. Clint Miles has desirable genes, and these ladies are determined to prove their worth as gestators. And here in Canadia, there are no restrictions on fertility drugs for the winner, so the competition this season is fierce! ${V.FCTV.channel.two} ladies have already been sent packing, who will be Canadia's... Next Top Breeder!?" The title finally pops up, redundantly labeling the show as 'Next Top Breeder: Canadia'.`); if (MSL >= 1) { r.push(`</p><p>You don't spend very much time actually watching the show; the randy opening, perverted competitions, and constant talk of creampies quickly has`); - if (MSL >= 1 && S.Concubine !== 0) { + if (MSL >= 1 && S.Concubine) { r.push(`<span class="pink">${S.Concubine.slaveName}</span> eager for some attention from ${getPronouns(S.Concubine).possessive} own arcology owner. Of course, the same could be said for the other eager slaves living in your bedroom, and the situation quickly devolves into a lust-filled`); if (MSL > 1) { r.push(`orgy.`); } else { r.push(`threesome.`); } - } else if (MSL === 0 && S.Concubine !== 0) { + } else if (MSL === 0 && S.Concubine) { const {his2, him2, he2} = getPronouns(S.Concubine).appendSuffix(`2`); r.push(`<span class="pink">${S.Concubine.slaveName}</span> eager for some attention from ${his2} own arcology owner. You've trained ${him2} well, and ${he2} knows exactly how to please you. You spend the rest of the evening doing something a lot more fun than watching reality TV.`); - } else if (MSL >= 1 && S.Concubine === 0) { + } else if (MSL >= 1 && !S.Concubine) { r.push(`the pleasure slaves in your bed eager for some attention from their own arcology owner. You spend the rest of the evening doing something a lot more fun than watching reality TV.`); } } @@ -1169,6 +1167,7 @@ App.Data.FCTV.channels = { intro: `which is currently showing a preview of the how-to series "Extreme Gestation for Fun and Profit", hosted by Millie. It seems like the show's going to cover topics ranging from hyper-pregnancy to broodmother implants, and even hints and some sort of medical technique to allow anal pregnancy in males.`, episode: [ { + text: null, slaves: [ App.Data.FCTV.actors.millie ], @@ -1501,8 +1500,8 @@ App.Data.FCTV.channels = { }, get text() { const r = []; - const {his} = S.Concubine ? getPronouns(S.Concubine) : {}; - const {title: Master} = canTalk(S.Concubine) ? getEnunciation(S.Concubine) : {}; + const {He = '', him = '', his = ''} = S.Concubine ? getPronouns(S.Concubine) : {}; + const {title: Master = ''} = canTalk(S.Concubine) ? getEnunciation(S.Concubine) : {}; if (FCTV.channelCount(11, 1, 'gt')) { r.push(`, once again,`); @@ -1510,7 +1509,7 @@ App.Data.FCTV.channels = { r.push(`which is currently showing an infomercial attempting to sell a product named "sag-B-gone" that claims to be able to prevent breasts from naturally sagging under their own weight.</p><p>`); if (V.purchasedSagBGone === 1) { r.push(`You've already made the mistake of ordering the sham of a product. While it gave you a great excuse to fondle breasts, it's not like you needed one in the first place.</p>`); - if (S.Concubine !== 0 && canTalk(S.Concubine)) { + if (S.Concubine && canTalk(S.Concubine)) { r.push(`<p>`); r.push(Spoken(S.Concubine, `"I told you it wouldn't work, ${Master}. Plus you know you can touch these anytime!"`)); r.push(`${S.Concubine.slaveName} shakes ${his} chest at you.</p>`); @@ -1526,7 +1525,7 @@ App.Data.FCTV.channels = { if (V.PC.dick !== 0) { r.push(`At the very least it should make for some decent lubricant for a titfuck.`); } - if (S.Concubine !== 0) { + if (S.Concubine) { r.push(`</p><p>`); if (S.Concubine.boobs > 2000 && S.Concubine.boobShape === "saggy") { r.push(S.Concubine.slaveName); @@ -1942,7 +1941,7 @@ App.Data.FCTV.channels = { r.push(`<p>"Jason, I'm sorry you had to find out like this, but I had no other choice. I didn't want to fight about this, and I didn't want you to think you could change my mind. I'm leaving, and this time I'm not coming back. I tried for so many years to make this work, but I never really wanted a family to begin with. I'm no mother, and I never could be. By the time you read this I'll already be in another arcology, much too far away for you to find me. Please take care of Jessica in all the ways I couldn't."</p>`); r.push(`<p>After finishing the note, Jason weeps into his hands before the camera transitions to a shot showing him in a rather nice kitchen explaining to his daughter where her mother went. His deep sadness is all displayed right there on his face, much to the actor's credit. His daughter leaves for school, but not before looking back through the doorway at her depressed father with pity. The camera pans to one of the large windows illuminating the kitchen, and zooms in on some street whores before dissolving into a shot of Jason walking that same street.</p>`); r.push(`<p>He stops just short of a few prostitutes, seeing one that remarkably resembles his now ex-wife. He seems torn, but quickly replaces the hesitant look on his face with one of determination. He approaches the whore with a few ¤ in hand, and in less than a minute she's dragging him by the hand down a nearby alley. She stops right in the middle of it, hikes up her short skirt, and bends over with her hands against the steel wall in front of her before turning her head to Jason and speaking.</p>`); - r.push(`<p>"I don't care if anyone sees, but most customers prefer this way." she giggles, as Jason undoes his pants. Despite the fact that he has a rear-view of a perfect, smooth pussy and a taut, pink asshole, Jason can't achieve an erection. "What's the matter?" the hooker asks him. "Need me to take care of you?" A short flashback sequence plays, centered on the note from earlier. "Take care of Jessica." his wife's disembodied voice implores him, the audio mixed to sound haunting and reverberate.</p>`); + r.push(`<p>"I don't care if anyone sees, but most customers prefer this way." she giggles, as Jason undoes his pants. Despite the fact that he has a rear-view of a perfect, smooth pussy and a taut, pink asshole, Jason can't achieve an erection. "What's the matter?" the hooker asks him. "Need me to take care of you?" A short flashback sequence plays, centered on the note from earlier. "Take care of Jessica." his wife's disembodied voice implores him, the audio mixed to reverberate hauntingly.</p>`); r.push(`<p>"Keep the money." Jason says before he immediately runs off, leaving the hooker looking perplexed and then bored in the dingy alley. With a quick cut he's back in his apartment, watching an in-universe parody of a popular real-world FCTV show. His daughter conveniently gets home at that exact time, throwing open the door and kicking off the shoes to her school uniform. "Hi Daddy!" she says, far too jubilant considering the events of that morning. "Hi Jessica." he replies sullenly.</p>`); r.push(`<p>You start wondering if you should even be playing this, as the sadness has utterly killed the mood in the room.`); if (V.fuckSlaves > 0) { @@ -2008,26 +2007,26 @@ App.Data.FCTV.channels = { r.push(`appreciating the life growing within you and what future prospects may await it.</p>`); } else if (V.PC.dick >= 1) { r.push(`<p>Stunned and fully erect, you inexplicably feel the urge to creampie a pussy, so you`); - if (S.Concubine !== 0 && S.Concubine.vagina > 0 && canDoVaginal(S.Concubine)) { + if (S.Concubine && S.Concubine.vagina > 0 && canDoVaginal(S.Concubine)) { const {him} = getPronouns(S.Concubine); r.push(`grab ${S.Concubine.slaveName} and recreate the entire ending with ${him}.`); S.Concubine.counter.vaginal++; V.vaginalTotal++; if (canImpreg(S.Concubine, V.PC)) { - r.push(knockMeUp(S.Concubine, 10, 0, -1, 1)); + r.push(knockMeUp(S.Concubine, 10, 0, -1, true)); } } else if (V.fuckSlaves > 0) { r.push(`grab the nearest slave watching with you, who is overjoyed to recreate the entire ending with you.`); } else { - r.push(`make your way to the slave dormitory and pick out the perfect ${slave}.`); + r.push(`make your way to the slave dormitory and pick out the perfect slave.`); } r.push(`You've never had a more hope-filled orgasm.</p>`); } else if (V.PC.vagina >= 1) { r.push(`<p>Stunned and soaking wet, you hurry to`); - if (S.Concubine !== 0 && canPenetrate(S.Concubine) && canImpreg(V.PC, S.Concubine) && (V.policies.sexualOpenness === 1 || S.Concubine.toyHole === "dick")) { + if (S.Concubine && canPenetrate(S.Concubine) && canImpreg(V.PC, S.Concubine) && (V.policies.sexualOpenness === 1 || S.Concubine.toyHole === "dick")) { const {him} = getPronouns(S.Concubine); r.push(`get ${S.Concubine.slaveName} nice and hard before recreating the entire ending with ${him}. You've never had a more hope-filled orgasm.`); - r.push(knockMeUp(V.PC, 10, 0, S.Concubine.ID, 1)); + r.push(knockMeUp(V.PC, 10, 0, S.Concubine.ID, true)); S.Concubine.counter.penetrative++; V.penetrativeTotal++; } else if (V.policies.sexualOpenness === 1) { @@ -2113,7 +2112,7 @@ App.Data.FCTV.channels = { // All actors are at least 18 const r = []; r.push(`<p>As you snuggle in for the night`); - if (S.Concubine !== 0) { + if (S.Concubine) { r.push(`with your concubine, you`); } else { r.push(`you`); diff --git a/src/uncategorized/RESS.tw b/src/uncategorized/RESS.tw index 7797dc30398c96397b640c12533b8d93db685048..217ffb489b191d7cf6efd07d1a17ffef76330b13 100644 --- a/src/uncategorized/RESS.tw +++ b/src/uncategorized/RESS.tw @@ -15676,7 +15676,7 @@ brought in to you. This time <<= App.UI.slaveDescriptionDialog($activeSlave)>> h <<if canDoAnal($activeSlave)>> <<link "Fuck $him">> <<replace "#result">> - You announce that you're going to fuck $his <<if $activeSlave.anus == 0>>virgin <</if>>asspussy. To your complete lack of surprise, $he can't hide $his horror at the prospect of <<if $PC.dick != 0>>having a cock inside $his<<else>>being fucked with a strap-on<</if>>, and $his <<if canSee($activeSlave)>>wide, <<= App.Desc.eyesColor($activeSlave)>> track<<else>>terrified face follows<</if>> your movements closely as you stand up and <<if $PC.dick != 0>>reveal the formidable member<<else>>don the strap-on<</if>> you're about to breed $him with. You order $him to <<if hasAnyLegs($activeSlave)>>kneel<<else>>get<</if>> on the couch, which $he does, @@.gold;cringing in fear of being buttfucked, but knowing disobedience will be worse;@@ and then you order $him to reach down and spread $his butt for you, as wide as it'll go. $He complies, + You announce that you're going to fuck $his <<if $activeSlave.anus == 0>>virgin <</if>>asspussy. To your complete lack of surprise, $he can't hide $his horror at the prospect of <<if $PC.dick != 0>>having a cock inside $him<<else>>being fucked with a strap-on<</if>>, and $his <<if canSee($activeSlave)>>wide, <<= App.Desc.eyesColor($activeSlave)>> track<<else>>terrified face follows<</if>> your movements closely as you stand up and <<if $PC.dick != 0>>reveal the formidable member<<else>>don the strap-on<</if>> you're about to breed $him with. You order $him to <<if hasAnyLegs($activeSlave)>>kneel<<else>>get<</if>> on the couch, which $he does, @@.gold;cringing in fear of being buttfucked, but knowing disobedience will be worse;@@ and then you order $him to reach down and spread $his butt for you, as wide as it'll go. $He complies, <<if $activeSlave.butt > 12>> grabbing as much flesh as $he can of each monstrous buttock and heaving them as far apart as $he can manage in an attempt <<elseif $activeSlave.butt > 6>> diff --git a/src/uncategorized/brothel.tw b/src/uncategorized/brothel.tw index 88eabec01bd81ec3ed06e73ef9b92bc8f78e0bc4..7d41fd1475a5989dfdfcca77dc1d6592e04b33a9 100644 --- a/src/uncategorized/brothel.tw +++ b/src/uncategorized/brothel.tw @@ -98,7 +98,7 @@ <</if>> <<if $seePreg == 1>> <<if $brothelAdsPreg == 1>> - Most of slaves have firm, rounded bellies. + Most of the slaves have firm, rounded bellies. <<elseif $brothelAdsPreg == -1>> Most of the slaves have firm, flat bellies. <<else>> diff --git a/src/uncategorized/brothelAdvertisement.tw b/src/uncategorized/brothelAdvertisement.tw index 6578d5031a708863ca4d0914c2ca146846bb7577..cf03039aafb9c8617bbfb9073dcbcee7efbec6a7 100644 --- a/src/uncategorized/brothelAdvertisement.tw +++ b/src/uncategorized/brothelAdvertisement.tw @@ -90,7 +90,7 @@ <</if>> <<if $seePreg == 1>> <<if $brothelAdsPreg == 1>> - Most of slaves have firm, rounded bellies. + Most of the slaves have firm, rounded bellies. <<elseif $brothelAdsPreg == -1>> Most of the slaves have firm, flat bellies. <<else>> diff --git a/src/uncategorized/manageArcology.tw b/src/uncategorized/manageArcology.tw index c27d239ff46364b1dc9bcdc4a2ae909ac9e108c4..9a50bee0d2bd6655f69d86b29f1a1f02a937fde5 100644 --- a/src/uncategorized/manageArcology.tw +++ b/src/uncategorized/manageArcology.tw @@ -52,9 +52,8 @@ <<link "Install drone security system" "Manage Arcology">> <<run cashX(forceNeg(Math.trunc(5000*$upgradeMultiplierArcology)), "capEx")>> <<set $arcologyUpgrade.drones = 1, $PC.skill.engineering += 1>> - <<if $secExpEnabled == 1>> - <<run App.SecExp.Check.general()>> - <<set $secBots.active = 1, $secBots.troops = $secBots.maxTroops = 30>> + <<if $secExpEnabled > 0>> + <<set $secBots = App.SecExp.generateUnit("bots")>> <</if>> <</link>> <<elseif $arcologyUpgrade.hydro != 1>>