diff --git a/src/SecExp/SecExpBackwardCompatibility.tw b/src/SecExp/SecExpBackwardCompatibility.tw index b9985b16458451f207d9a6b108f4ec2796b48422..1e382878e8353225a3581ea5048eca8f48e51ee7 100644 --- a/src/SecExp/SecExpBackwardCompatibility.tw +++ b/src/SecExp/SecExpBackwardCompatibility.tw @@ -10,6 +10,9 @@ <<if ndef $readiness>> <<set $readiness = 0>> <</if>> +<<if ndef $maxPlatoons>> + <<set $maxPlatoons = 0>> +<</if>> <<if ndef $attackType>> <<set $attackType = "none">> <</if>> @@ -53,12 +56,69 @@ <<if ndef $deployedUnits>> <<set $deployedUnits = 0>> <</if>> +<<if ndef $deployingBots>> + <<set $deployingBots = 0>> +<</if>> +<<if ndef $deployingMilitia>> + <<set $deployingMilitia = 0>> +<</if>> +<<if ndef $deployingSlaves>> + <<set $deployingSlaves = 0>> +<</if>> +<<if ndef $deployingMercs>> + <<set $deployingMercs = 0>> +<</if>> <<if ndef $battleTerrain>> <<set $battleTerrain = "none">> <</if>> -<<if ndef $expectedEquip>> - <<set $expectedEquip = 0>> +<<if ndef $maxTurns>> + <<set $maxTurns = 10>> +<</if>> +<<if ndef $PCwon>> + <<set $PCwon = 0>> <</if>> +<<if ndef $EnemyWon>> + <<set $EnemyWon = 0>> +<</if>> +<<if ndef $keepRoster>> + <<set $keepRoster = 0>> +<</if>> + +/* statistics | since these won't get modified in game, it's not necessary to check if they are defined */ +<<set $equipMod = 0.15>> +<<set $secBotsBaseAttack = 9>> +<<set $secBotsBaseDefense = 5>> +<<set $secBotsMorale = 120>> +<<set $secBotsBaseHp = 4>> +<<set $militiaBaseAttack = 7>> +<<set $militiaBaseDefense = 5>> +<<set $militiaBaseMorale = 140>> +<<set $militiaBaseHp = 3>> +<<set $slaveBaseAttack = 9>> +<<set $slaveBaseDefense = 3>> +<<set $slaveBaseMorale = 110>> +<<set $slaveBaseHp = 3>> +<<set $mercBaseAttack = 8>> +<<set $mercBaseDefense = 4>> +<<set $mercBaseMorale = 125>> +<<set $mercBaseHp = 4>> + +<<set $raBaseAttack = 8>> +<<set $raBaseDefense = 3>> +<<set $raBaseMorale = 100>> +<<set $raBaseHp = 3>> +<<set $fcBaseAttack = 7>> +<<set $fcBaseDefense = 5>> +<<set $fcBaseMorale = 130>> +<<set $fcBaseHp = 4>> +<<set $owBaseAttack = 9>> +<<set $owBaseDefense = 5>> +<<set $owBaseMorale = 110>> +<<set $owBaseHp = 3>> +<<set $ffBaseAttack = 10>> +<<set $ffBaseDefense = 3>> +<<set $ffBaseMorale = 160>> +<<set $ffBaseHp = 3>> /* units */ <<if ndef $secBots>> @@ -69,7 +129,23 @@ troops: 0, maxTroops: 0, equip: 0} >> - <elseif $arcologyUpgrade.drones == 1>> + <<elseif $arcologyUpgrade.drones == 1>> + <<set $secBots = { + active: 1, + isDeployed: 0, + troops: 50, + maxTroops: 50, + equip: 0} >> + <</if>> +<<elseif def $secBots>> + <<if $arcologyUpgrade.drones == 0>> + <<set $secBots = { + active: 0, + isDeployed: 0, + troops: 0, + maxTroops: 0, + equip: 0} >> + <<elseif $arcologyUpgrade.drones == 1>> <<set $secBots = { active: 1, isDeployed: 0, diff --git a/src/SecExp/attackGenerator.tw b/src/SecExp/attackGenerator.tw index e56bb27c67fa3aece1abf6b6a4a80ddb62ed2f94..48b79dbbf5007a4219ffba5ef41c72b5ad63ed2b 100644 --- a/src/SecExp/attackGenerator.tw +++ b/src/SecExp/attackGenerator.tw @@ -135,16 +135,26 @@ <<elseif $terrain == "oceanic">> <<set $battleTerrain = either("sea", "urban")>> <</if>> - <<set $attackTroops = random(100,200)>> - <<if $week < 60>> + <<set $attackTroops = random(50,100)>> + <<if $week < 30>> <<set $attackTroops *= random(1,2)>> - <<else>> + <<elseif $week < 60>> + <<set $attackTroops *= random(1,3)>> + <<elseif $week < 90>> + <<set $attackTroops *= random(2,3)>> + <<elseif $week < 120>> <<set $attackTroops *= random(2,4)>> + <<else>> + <<set $attackTroops *= random(3,5)>> <</if>> <<if $week < 60>> + <<set $attackEquip = random(0,1)>> + <<elseif $week < 90>> <<set $attackEquip = random(0,2)>> - <<else>> + <<elseif $week < 120>> <<set $attackEquip = random(0,3)>> + <<else>> + <<set $attackEquip = random(1,3)>> <</if>> <<elseif $attackType == "free city">> <<if $terrain == "urban">> @@ -158,15 +168,23 @@ <<elseif $terrain == "oceanic">> <<set $battleTerrain = either("sea", "urban")>> <</if>> - <<set $attackTroops = random(80,180)>> - <<if $week < 60>> + <<set $attackTroops = random(35,70)>> + <<if $week < 30>> <<set $attackTroops *= random(1,2)>> - <<else>> + <<elseif $week < 60>> + <<set $attackTroops *= random(1,3)>> + <<elseif $week < 90>> + <<set $attackTroops *= random(2,3)>> + <<elseif $week < 120>> <<set $attackTroops *= random(2,4)>> + <<else>> + <<set $attackTroops *= random(3,5)>> <</if>> <<if $week < 60>> <<set $attackEquip = random(0,1)>> <<elseif $week < 90>> + <<set $attackEquip = random(0,3)>> + <<elseif $week < 120>> <<set $attackEquip = random(1,3)>> <<else>> <<set $attackEquip = random(2,4)>> @@ -183,18 +201,26 @@ <<elseif $terrain == "oceanic">> <<set $battleTerrain = either("sea", "urban")>> <</if>> - <<set $attackTroops = random(100,200)>> - <<if $week < 60>> + <<set $attackTroops = random(35,70)>> + <<if $week < 30>> <<set $attackTroops *= random(1,2)>> - <<else>> + <<elseif $week < 60>> + <<set $attackTroops *= random(1,3)>> + <<elseif $week < 90>> + <<set $attackTroops *= random(2,3)>> + <<elseif $week < 120>> <<set $attackTroops *= random(2,4)>> + <<else>> + <<set $attackTroops *= random(3,5)>> <</if>> <<if $week < 60>> <<set $attackEquip = random(0,1)>> <<elseif $week < 90>> + <<set $attackEquip = random(0,3)>> + <<elseif $week < 120>> <<set $attackEquip = random(1,3)>> <<else>> - <<set $attackEquip = random(1,4)>> + <<set $attackEquip = random(2,4)>> <</if>> <<elseif $attackType == "freedom fighters">> <<if $terrain == "urban">> @@ -208,18 +234,26 @@ <<elseif $terrain == "oceanic">> <<set $battleTerrain = either("sea", "urban")>> <</if>> - <<set $attackTroops = random(60,160)>> - <<if $week < 60>> + <<set $attackTroops = random(40,80)>> + <<if $week < 30>> <<set $attackTroops *= random(1,2)>> - <<elseif>> + <<elseif $week < 60>> + <<set $attackTroops *= random(1,3)>> + <<elseif $week < 90>> + <<set $attackTroops *= random(2,3)>> + <<elseif $week < 120>> <<set $attackTroops *= random(2,4)>> + <<else>> + <<set $attackTroops *= random(3,5)>> <</if>> <<if $week < 60>> <<set $attackEquip = random(0,1)>> <<elseif $week < 90>> + <<set $attackEquip = random(0,3)>> + <<elseif $week < 120>> <<set $attackEquip = random(1,3)>> <<else>> - <<set $attackEquip = random(1,4)>> + <<set $attackEquip = random(2,4)>> <</if>> <</if>> <</if>> \ No newline at end of file diff --git a/src/SecExp/attackHandler.tw b/src/SecExp/attackHandler.tw index e1c18744e8a3a8bc7e8918fa0ccd62b5abf52052..a0433bfbe620877c3e102abbfb354829cc7f2e30 100644 --- a/src/SecExp/attackHandler.tw +++ b/src/SecExp/attackHandler.tw @@ -1,15 +1,18 @@ -:: attackHandler +:: attackHandler [nobr] /*Init*/ -<<set _phase = 0>> +<<set _turn = 0>> <<set _attack = 0>> <<set _defense = 0>> <<set _morale = 0>> <<set _hp = 0>> +<<set _baseHp = 0>> +<<set _losses = 0>> <<set _enemyAttack = 0>> <<set _enemyDefense = 0>> <<set _enemyMorale = 0>> <<set _enemyHp = 0>> +<<set _enemyBaseHp = 0>> <<set _mL = $militiaUnits.length>> <<set _sL = $slaveUnits.length>> <<set _meL = $mercUnits.length>> @@ -21,7 +24,7 @@ <<set _slaveMod = 1>> <<set _mercMod = 1>> <<set _enemyMod = 1>> -/*player*/ +/* Leaders */ <<if $leadingTroops == "PC">> <<if $authority <= 2500 && $authority > 1000>> <<set _slaveMod -= 0.10>> @@ -55,7 +58,7 @@ <<set _mercMod -= 0.10>> <<elseif $mercLoyalty <= 10>> <<set _mercMod -= 0.25>> - <<if $mercLoyalty >= 50 && $mercLoyalty < 75>> + <<elseif $mercLoyalty >= 50 && $mercLoyalty < 75>> <<set _mercMod += 0.10>> <<elseif $mercLoyalty >= 75>> <<set _mercMod += 0.25>> @@ -108,6 +111,7 @@ <<if !(setup.bodyguardCareers.includes($Bodyguard.career) && setup.HGCareers.includes($Bodyguard.career)) || $Bodyguard.intelligence <= -2>> <<set _atkMod -= 0.15>> <<set _defMod -= 0.15>> + <</if>> <<if !(setup.bodyguardCareers.includes($Bodyguard.career) && setup.HGCareers.includes($Bodyguard.career)) || $Bodyguard.intelligence <= -1>> <<set _atkMod -= 0.10>> <<set _defMod -= 0.10>> @@ -137,6 +141,7 @@ <<if !(setup.bodyguardCareers.includes($HeadGirl.career) && setup.HGCareers.includes($HeadGirl.career)) || $HeadGirl.intelligence <= -2>> <<set _atkMod -= 0.15>> <<set _defMod -= 0.15>> + <</if>> <<if !(setup.bodyguardCareers.includes($HeadGirl.career) && setup.HGCareers.includes($HeadGirl.career)) || $HeadGirl.intelligence <= -1>> <<set _atkMod -= 0.10>> <<set _defMod -= 0.10>> @@ -169,76 +174,312 @@ <<set _atkMod += either(-1,1) * random(10) * 0.1>> <<set _defMod += either(-1,1) * random(10) * 0.1>> <<elseif $leadingTroops == "mercenary">> + <<if $arcologies[0].FSRomanRevivalist != "unset">> + <<set _militiaMod += 0.10>> + <<else>> + <<set _militiaMod -= 0.10>> + <</if>> + <<if $arcologies[0].FSDegradationist != "unset">> + <<set _slaveMod -= 0.35>> + <</if>> + <<set _atkMod += random(15) * 0.1>> + <<set _defMod += random(15) * 0.1>> +<</if>> +/* Terrain and Tactics */ +<<if $battleTerrain == "urban">> + <<if $chosenTactic == "Bait and Bleed">> + <<set _atkMod += 0.15>> + <<set _defMod += 0.10>> + <<elseif $chosenTactic == "Guerrilla">> + <<set _atkMod += 0.10>> + <<set _defMod += 0.15>> + <<elseif $chosenTactic == "Choke Points">> + <<set _atkMod += 0.10>> + <<set _defMod += 0.15>> + <<elseif $chosenTactic == "Interior Lines">> + <<set _atkMod += 0.05>> + <<set _defMod += 0.10>> + <<elseif $chosenTactic == "Pincer Manouver">> + <<set _atkMod -= 0.05>> + <<set _defMod -= 0.10>> + <<elseif $chosenTactic == "Defense In Depth">> + <<set _atkMod -= 0.05>> + <<set _defMod -= 0.05>> + <<elseif $chosenTactic == "Blitzkrieg">> + <<set _atkMod -= 0.15>> + <<set _defMod -= 0.10>> + <<elseif $chosenTactic == "Human Wave">> + <<set _atkMod -= 0.15>> + <<set _defMod -= 0.15>> + <</if>> +<<elseif $battleTerrain == "rural">> + <<if $chosenTactic == "Bait and Bleed">> + <<set _atkMod -= 0.05>> + <<set _defMod -= 0.10>> + <<elseif $chosenTactic == "Guerrilla">> + <<set _atkMod -= 0.10>> + <<set _defMod -= 0.10>> + <<elseif $chosenTactic == "Choke Points">> + <<set _atkMod -= 0.10>> + <<set _defMod -= 0.15>> + <<elseif $chosenTactic == "Interior Lines">> + <<set _atkMod += 0.10>> + <<set _defMod += 0.15>> + <<elseif $chosenTactic == "Pincer Manouver">> + <<set _atkMod += 0.15>> + <<set _defMod += 0.10>> + <<elseif $chosenTactic == "Defense In Depth">> + <<set _atkMod += 0.15>> + <<set _defMod += 0.15>> + <<elseif $chosenTactic == "Blitzkrieg">> + <<set _atkMod += 0.15>> + <<set _defMod += 0.10>> + <<elseif $chosenTactic == "Human Wave">> + <<set _atkMod += 0.20>> + <<set _defMod += 0.05>> + <</if>> +<<elseif $battleTerrain == "hills">> + <<if $chosenTactic == "Bait and Bleed">> + <<set _atkMod += 0.05>> + <<set _defMod += 0.05>> + <<elseif $chosenTactic == "Guerrilla">> + <<set _atkMod += 0.05>> + <<set _defMod += 0.10>> + <<elseif $chosenTactic == "Choke Points">> + <<set _atkMod += 0.10>> + <<set _defMod += 0.10>> + <<elseif $chosenTactic == "Interior Lines">> + <<set _atkMod -= 0.05>> + <<set _defMod -= 0.05>> + <<elseif $chosenTactic == "Pincer Manouver">> + <<set _atkMod += 0.10>> + <<set _defMod += 0.05>> + <<elseif $chosenTactic == "Defense In Depth">> + <<set _atkMod -= 0.10>> + <<set _defMod -= 0.05>> + <<elseif $chosenTactic == "Blitzkrieg">> + <<set _atkMod -= 0.10>> + <<set _defMod -= 0.15>> + <<elseif $chosenTactic == "Human Wave">> + <<set _atkMod -= 0.15>> + <<set _defMod -= 0.15>> + <</if>> +<<elseif $battleTerrain == "coast">> + <<if $chosenTactic == "Bait and Bleed">> + <<set _atkMod -= 0.05>> + <<set _defMod -= 0.05>> + <<elseif $chosenTactic == "Guerrilla">> + <<set _atkMod += 0.05>> + <<set _defMod += 0.05>> + <<elseif $chosenTactic == "Choke Points">> + <<set _atkMod += 0.05>> + <<set _defMod += 0.15>> + <<elseif $chosenTactic == "Interior Lines">> + <<set _atkMod += 0.10>> + <<set _defMod += 0.10>> + <<elseif $chosenTactic == "Pincer Manouver">> + <<set _atkMod -= 0.10>> + <<set _defMod -= 0.10>> + <<elseif $chosenTactic == "Defense In Depth">> + <<set _atkMod += 0.10>> + <<set _defMod += 0.10>> + <<elseif $chosenTactic == "Blitzkrieg">> + <<set _atkMod -= 0.05>> + <<set _defMod -= 0.05>> + <<elseif $chosenTactic == "Human Wave">> + <<set _atkMod += 0.05>> + <<set _defMod -= 0.05>> + <</if>> +<<elseif $battleTerrain == "outskirts">> + <<if $chosenTactic == "Bait and Bleed">> + <<set _atkMod -= 0.10>> + <<set _defMod -= 0.15>> + <<elseif $chosenTactic == "Guerrilla">> + <<set _atkMod -= 0.10>> + <<set _defMod -= 0.05>> + <<elseif $chosenTactic == "Choke Points">> + <<set _atkMod += 0.10>> + <<set _defMod += 0.15>> + <<elseif $chosenTactic == "Interior Lines">> + <<set _atkMod += 0.15>> + <<set _defMod += 0.10>> + <<elseif $chosenTactic == "Pincer Manouver">> + <<set _atkMod += 0.05>> + <<set _defMod += 0.10>> + <<elseif $chosenTactic == "Defense In Depth">> + <<set _atkMod += 0.10>> + <<set _defMod += 0.15>> + <<elseif $chosenTactic == "Blitzkrieg">> + <<set _atkMod += 0.10>> + <<set _defMod -= 0.05>> + <<elseif $chosenTactic == "Human Wave">> + <<set _atkMod += 0.10>> + <<set _defMod -= 0.10>> + <</if>> +<<elseif $battleTerrain == "mountains">> + <<if $chosenTactic == "Bait and Bleed">> + <<set _atkMod += 0.10>> + <<set _defMod += 0.15>> + <<elseif $chosenTactic == "Guerrilla">> + <<set _atkMod += 0.10>> + <<set _defMod += 0.15>> + <<elseif $chosenTactic == "Choke Points">> + <<set _atkMod += 0.05>> + <<set _defMod += 0.20>> + <<elseif $chosenTactic == "Interior Lines">> + <<set _atkMod += 0.10>> + <<set _defMod += 0.10>> + <<elseif $chosenTactic == "Pincer Manouver">> + <<set _atkMod += 0.10>> + <<set _defMod -= 0.05>> + <<elseif $chosenTactic == "Defense In Depth">> + <<set _atkMod += 0.10>> + <<set _defMod += 0.10>> + <<elseif $chosenTactic == "Blitzkrieg">> + <<set _atkMod -= 0.10>> + <<set _defMod -= 0.10>> + <<elseif $chosenTactic == "Human Wave">> + <<set _atkMod -= 0.10>> + <<set _defMod -= 0.10>> + <</if>> +<<elseif $battleTerrain == "wasteland">> + <<if $chosenTactic == "Bait and Bleed">> + <<set _atkMod += 0.05>> + <<set _defMod += 0.05>> + <<elseif $chosenTactic == "Guerrilla">> + <<set _atkMod += 0.10>> + <<set _defMod += 0.05>> + <<elseif $chosenTactic == "Choke Points">> + <<set _atkMod -= 0.10>> + <<set _defMod += 0.05>> + <<elseif $chosenTactic == "Interior Lines">> + <<set _atkMod += 0.10>> + <<set _defMod += 0.15>> + <<elseif $chosenTactic == "Pincer Manouver">> + <<set _atkMod += 0.15>> + <<set _defMod += 0.10>> + <<elseif $chosenTactic == "Defense In Depth">> + <<set _atkMod += 0.05>> + <<set _defMod += 0.10>> + <<elseif $chosenTactic == "Blitzkrieg">> + <<set _atkMod += 0.15>> + <<set _defMod += 0.15>> + <<elseif $chosenTactic == "Human Wave">> + <<set _atkMod += 0.20>> + <<set _defMod += 0.05>> + <</if>> +<</if>> +/* enemy morale mods */ +<<if $week < 30>> + <<set _enemyMod += 0.15>> +<<elseif $week < 60>> + <<set _enemyMod += 0.30>> +<<elseif $week < 90>> + <<set _enemyMod += 0.45>> +<<elseif $week < 120>> + <<set _enemyMod += 0.60>> +<<else>> + <<set _enemyMod += 0.75>> <</if>> +<<set _secBotsMorale = 0>> +<<set _militiaMorale = 0>> +<<set _slaveMorale = 0>> +<<set _mercMorale = 0>> +<<set _escortBonus = 0>> + /* calculates PC army stats */ <<if $secBots.isDeployed == 1>> - <<set _attack += $secBotsBaseAttack + $secBotsBaseAttack * $secBots.equip * $equipMod>> - <<set _defense += $secBotsBaseDefense + $secBotsBaseDefense * $secBots.equip * $equipMod>> - <<set _morale += $secBotsMorale>> + <<set _attack += ($secBotsBaseAttack + $secBotsBaseAttack * $secBots.equip * $equipMod) * _atkMod>> + <<set _defense += ($secBotsBaseDefense + $secBotsBaseDefense * $secBots.equip * $equipMod) * _defMod>> <<set _hp += $secBotsBaseHp * $secBots.troops>> <</if>> <<for _i = 0; _i < _mL; _i++>> <<if $militiaUnits[_i].isDeployed == 1>> - <<set _attack += $militiaBaseAttack + $militiaBaseAttack * $militiaUnits[_i].equip * $equipMod>> - <<set _defense += $militiaBaseDefense + $militiaBaseDefense * $militiaUnits[_i].equip * $equipMod>> - <<set _morale += $militiaBaseMorale + $militiaBaseMorale * $militiaUnits[_i].escorts * $equipMod>> - <<set _hp += ($militiaBaseHp + $militiaBaseHp * $militiaUnits[_i].medics * $equipMod) * $militiaUnits[_i].troops >> + <<set _attack += ($militiaBaseAttack + $militiaBaseAttack * $militiaUnits[_i].equip * $equipMod) * _atkMod>> + <<set _defense += ($militiaBaseDefense + $militiaBaseDefense * $militiaUnits[_i].equip * $equipMod) * _defMod>> + <<set _hp += ($militiaBaseHp + $militiaBaseHp * $militiaUnits[_i].medics * $equipMod) * $militiaUnits[_i].troops>> + <<if $militiaUnits[_i].escorts == 1>> + <<set _escortBonus++>> + <</if>> <</if>> <</for>> <<for _i = 0; _i < _sL; _i++>> <<if $slaveUnits[_i].isDeployed == 1>> - <<set _attack += $slaveBaseAttack + $slaveBaseAttack * $slaveUnits[_i].equip * $equipMod>> - <<set _defense += $slaveBaseDefense + $slaveBaseDefense * $slaveUnits[_i].equip * $equipMod>> - <<set _morale += $slaveBaseMorale + $slaveBaseMorale * $slaveUnits[_i].escorts * $equipMod>> + <<set _attack += ($slaveBaseAttack + $slaveBaseAttack * $slaveUnits[_i].equip * $equipMod) * _atkMod>> + <<set _defense += ($slaveBaseDefense + $slaveBaseDefense * $slaveUnits[_i].equip * $equipMod) * _defMod>> <<set _hp += ($slaveBaseHp + $slaveBaseHp * $slaveUnits[_i].medics * 0.25) * $slaveUnits[_i].troops>> + <<if $slaveUnits[_i].escorts == 1>> + <<set _escortBonus++>> + <</if>> <</if>> <</for>> <<for _i = 0; _i < _meL; _i++>> <<if $mercUnits[_i].isDeployed == 1>> - <<set _attack += $mercBaseAttack + $mercBaseAttack * $mercUnits[_i].equip * $equipMod>> - <<set _defense += $mercBaseDefense + $mercBaseDefense * $mercUnits[_i].equip * $equipMod>> - <<set _morale += $mercBaseMorale + $mercBaseMorale * $mercUnits[_i].escorts * $equipMod>> + <<set _attack += ($mercBaseAttack + $mercBaseAttack * $mercUnits[_i].equip * $equipMod) * _atkMod>> + <<set _defense += ($mercBaseDefense + $mercBaseDefense * $mercUnits[_i].equip * $equipMod) * _defMod>> <<set _hp += ($mercBaseHp + $mercBaseHp * $mercUnits[_i].medics * 0.25) * $mercUnits[_i].troops>> + <<if $mercUnits[_i].escorts == 1>> + <<set _escortBonus++>> + <</if>> <</if>> <</for>> +/* morale and baseHp calculation */ +<<set _morale = ($secBotsMorale * $deployingBots + _militiaMorale * _militiaMod * $deployingMilitia + $slaveBaseMorale * _slaveMod * $deployingSlaves + $mercBaseMorale * _mercMod * $deployingMercs) / 4>> +<<set _morale = _morale + _morale * _escortBonus * 0.05>> /* each escort upgrade gives +5% morale */ +<<set _baseHp = ($secBotsBaseHp * $deployingBots + $militiaBaseHp * $deployingMilitia + $slaveBaseHp * $deployingSlaves + $mercBaseHp * $deployingMercs) / 4>> + /* calculates enemy army stats */ <<if $attackType == "raiders">> <<set _enemyAttack = $raBaseAttack * $raBaseAttack * $attackEquip * $equipMod>> <<set _enemyDefense = $raBaseDefense + $raBaseDefense * $attackEquip * $equipMod>> - <<set _enemyMorale = $raBaseMorale>> + <<set _enemyMorale = $raBaseMorale* _enemyMod>> <<set _enemyHp = $raBaseHp * $attackTroops>> + <<set _enemyBaseHp = $raBaseHp>> <<elseif $attackType == "free city">> <<set _enemyAttack = $fcBaseAttack * $fcBaseAttack * $attackEquip * $equipMod>> <<set _enemyDefense = $fcBaseDefense + $fcBaseDefense * $attackEquip * $equipMod>> - <<set _enemyMorale = $fcBaseMorale>> + <<set _enemyMorale = $fcBaseMorale * _enemyMod>> <<set _enemyHp = $fcBaseHp * $attackTroops>> + <<set _enemyBaseHp = $fcBaseHp>> <<elseif $attackType == "old world">> <<set _enemyAttack = $owBaseAttack + $owBaseAttack * $attackEquip * $equipMod>> <<set _enemyDefense = $owBaseDefense + $owBaseDefense * $attackEquip * $equipMod>> - <<set _enemyMorale = $owBaseMorale>> + <<set _enemyMorale = $owBaseMorale * _enemyMod>> <<set _enemyHp = $owBaseHp * $attackTroops>> + <<set _enemyBaseHp = $owBaseHp>> <<elseif $attackType == "freedom fighters">> <<set _enemyAttack = $ffBaseAttack + $ffBaseAttack * $attackEquip * $equipMod>> <<set _enemyDefense = $ffBaseDefense + $ffBaseDefense * $attackEquip * $equipMod>> - <<set _enemyMorale = $ffBaseMorale>> + <<set _enemyMorale = $ffBaseMorale * _enemyMod>> <<set _enemyHp = $ffBaseHp * $attackTroops>> + <<set _enemyBaseHp = $ffBaseHp>> <</if>> - /* simulates the combat by pitting attk against def */ <<for _i = 0; _i < $maxTurns; _i++>> - - + /* player army attacks */ + <<set _damage = _attack - _enemyDefense>> + <<set _enemyHp -= _damage>> + <<set _enemyMorale -= (_damage + _damage / _enemyBaseHp)>> + <<if _enemyHp <= 0 || _enemyMorale <= 0>> + <<set $PCwon = 1>> + <<break>> + <</if>> + + /* attacker army attacks */ + <<set _damage = _enemyAttack - _defense>> + <<set _hp -= _damage>> + <<set _losses = _damage / _baseHp>> + <<set _morale -= (_damage + _losses)>> + <<if _hp <= 0 || _morale <= 0>> + <<set $EnemyWon = 1>> + <<break>> + <</if>> <</for>> - - - - - /* resets variables */ <<set $attackType = "none">> <<set $chosenTactic = "none">> @@ -256,12 +497,16 @@ <<set $deployableUnits = 0>> <<set $deployedUnits = 0>> <<set $secBots.isDeployed = 0>> -<<for _i = 0; _i < _mL; _i++>> - <<set $militiaUnits[_i].isDeployed = 0>> -<</for>> -<<for _i = 0; _i < _sL; _i++>> - <<set $slaveUnits[_i].isDeployed = 0>> -<</for>> -<<for _i = 0; _i < _meL; _i++>> - <<set $mercUnits[_i].isDeployed = 0>> -<</for>> \ No newline at end of file +<<if $keepRoster == 0>> + <<for _i = 0; _i < _mL; _i++>> + <<set $militiaUnits[_i].isDeployed = 0>> + <</for>> + <<for _i = 0; _i < _sL; _i++>> + <<set $slaveUnits[_i].isDeployed = 0>> + <</for>> + <<for _i = 0; _i < _meL; _i++>> + <<set $mercUnits[_i].isDeployed = 0>> + <</for>> +<</if>> + +<<goto "attackReport">> \ No newline at end of file diff --git a/src/SecExp/attackOptions.tw b/src/SecExp/attackOptions.tw index c3483c3feb809f87084516afb9b08dd4ddacb1a3..0d9e239f19712fa05b3f641218704f1127c5b430 100644 --- a/src/SecExp/attackOptions.tw +++ b/src/SecExp/attackOptions.tw @@ -99,7 +99,7 @@ The ominous message dominates the screens of your office, <<print $assistantName <hr> It seems your troops and your adversary will fight <<if $battleTerrain == "urban">> - in <strong>the streets of <<if $terrain == "urban">>the old world city surroinding the arcology<<else>>of the free city<</if>>.</strong> + in <strong>the streets of <<if $terrain == "urban">>the old world city surrounding the arcology<<else>>of the free city<</if>>.</strong> <<elseif $battleTerrain == "rural">> in <strong>the rural land</strong> surrounding the free city. <<elseif $battleTerrain == "hills">> @@ -129,7 +129,7 @@ They seems to be <<else>> <<set _expectedEquip = $attackEquip + either(-1,1) * random(2)>> <</if>> -<<if _expectedEquip == 0>> +<<if _expectedEquip <= 0>> <strong>poorly armed</strong>. old rusty small arms are the norm with just a few barely working civilian vehicles. <<elseif _expectedEquip == 1>> <strong>lightly armed</strong>. mostly small arms with some repurposed civilian vehicles and a scattered few machine guns. There's no sign of heavy vehicles, artillery or aircrafts. @@ -159,66 +159,42 @@ You quickly lay down a plan of action: /* leader assignment */ <span id="leader"><strong><<print $assistantName>></strong></span> will lead your troops. <br> - <<if $leadingTroops != "PC">> - <<link "Personally join the battle">> - <<set $leadingTroops = "PC">> - <<replace "#leader">><strong><<print $PC.name>></strong><</replace>> - <</link>> - <<else>> - Personally join the battle - <</if>> + <<link "Personally join the battle">> + <<set $leadingTroops = "PC">> + <<replace "#leader">><strong><<print $PC.name>></strong><</replace>> + <</link>> | - <<if $leadingTroops != "assistant">> - <<link "Let $assistantName lead the troops">> - <<set $leadingTroops = "assistant">> - <<replace "#leader">><strong><<print $assistantName>></strong><</replace>> - <</link>> - <<else>> - Let $assistantName lead the troops - <</if>> + <<link "Let $assistantName lead the troops">> + <<set $leadingTroops = "assistant">> + <<replace "#leader">><strong><<print $assistantName>></strong><</replace>> + <</link>> <<if $Bodyguard != 0 && $slavesInArmy == 1>> | - <<if $leadingTroops != "bodyguard">> - <<link "Let your bodyguard lead your troops">> - <<set $leadingTroops = "bodyguard">> - <<replace "#leader">><strong><<print $Bodyguard.slaveName>></strong><</replace>> - <</link>> - <<else>> - Let your bodyguard lead your troops - <</if>> + <<link "Let your bodyguard lead your troops">> + <<set $leadingTroops = "bodyguard">> + <<replace "#leader">><strong><<print $Bodyguard.slaveName>></strong><</replace>> + <</link>> <</if>> <<if $HeadGirl != 0 && $slavesInArmy == 1>> | - <<if $leadingTroops != "headGirl">> - <<link "Let your head girl lead your troops">> - <<set $leadingTroops = "headGirl">> - <<replace "#leader">><strong><<print $HeadGirl.slaveName>></strong><</replace>> - <</link>> - <<else>> - Let your head girl lead your troops - <</if>> + <<link "Let your head girl lead your troops">> + <<set $leadingTroops = "headGirl">> + <<replace "#leader">><strong><<print $HeadGirl.slaveName>></strong><</replace>> + <</link>> <</if>> <<if $militiaCreated == 1>> | - <<if $leadingTroops != "citizen">> - <<link "Let the citizens' militia officers lead the troops">> - <<set $leadingTroops = "citizen">> - <<replace "#leader">><strong>The citizens' militia commander</strong><</replace>> - <</link>> - <<else>> - Let the citizens' militia officers lead the troops. - <</if>> + <<link "Let the citizens' militia officers lead the troops">> + <<set $leadingTroops = "citizen">> + <<replace "#leader">><strong>The citizens' militia commander</strong><</replace>> + <</link>> <</if>> <<if $mercenaries > 0>> | - <<if $leadingTroops != "mercenary">> - <<link "Let the mercenary officers lead the troops">> - <<set $leadingTroops = "mercenary">> - <<replace "#leader">><strong>The mercenary commander</strong><</replace>> - <</link>> - <<else>> - Let the mercenary officers lead the troops. - <</if>> + <<link "Let the mercenary officers lead the troops">> + <<set $leadingTroops = "mercenary">> + <<replace "#leader">><strong>The mercenary commander</strong><</replace>> + <</link>> <</if>> /* troop deployment */ @@ -238,7 +214,7 @@ With your current readiness level you can <<if $deployedUnits > 0>>still<</if>> <<set $deployableUnits-->> <<set $deployedUnits++>> <<set $deployingBots = 1>> - <<goto "attackHandler">> + <<goto "attackOptions">> <</link>> <</if>> <<for _i = 0; _i < _mL; _i++>> @@ -250,8 +226,7 @@ With your current readiness level you can <<if $deployedUnits > 0>>still<</if>> <<set $militiaUnits[_i].isDeployed = 1>> <<set $deployableUnits-->> <<set $deployedUnits++>> - <<set $deployingMilitia = 1>> - <<goto "attackHandler">> + <<goto "attackOptions">> <</link>> <</if>> <</for>> @@ -264,8 +239,7 @@ With your current readiness level you can <<if $deployedUnits > 0>>still<</if>> <<set $slaveUnits[_i].isDeployed = 1>> <<set $deployableUnits-->> <<set $deployedUnits++>> - <<set $deployingSlaves = 1>> - <<goto "attackHandler">> + <<goto "attackOptions">> <</link>> <</if>> <</for>> @@ -278,8 +252,7 @@ With your current readiness level you can <<if $deployedUnits > 0>>still<</if>> <<set $mercUnits[_i].isDeployed = 1>> <<set $deployableUnits-->> <<set $deployedUnits++>> - <<set $deployingMercs = 1>> - <<goto "attackHandler">> + <<goto "attackOptions">> <</link>> <</if>> <</for>> @@ -288,7 +261,7 @@ With your current readiness level you can <<if $deployedUnits > 0>>still<</if>> Unit roster full. <</if>> -<br><br> +<br> Units about to be deployed: <<if $deployedUnits > 0>> @@ -301,7 +274,7 @@ Units about to be deployed: <<set $deployableUnits++>> <<set $deployedUnits-->> <<set $deployingBots = 0>> - <<goto "attackHandler">> + <<goto "attackOptions">> <</link>> <</if>> <<for _i = 0; _i < _mL; _i++>> @@ -313,8 +286,7 @@ Units about to be deployed: <<set $militiaUnits[_i].isDeployed = 0>> <<set $deployableUnits++>> <<set $deployedUnits-->> - <<set $deployingMilitia = 0>> - <<goto "attackHandler">> + <<goto "attackOptions">> <</link>> <</if>> <</for>> @@ -327,8 +299,7 @@ Units about to be deployed: <<set $slaveUnits[_i].isDeployed = 0>> <<set $deployableUnits++>> <<set $deployedUnits-->> - <<set $deployingSlaves = 0>> - <<goto "attackHandler">> + <<goto "attackOptions">> <</link>> <</if>> <</for>> @@ -341,12 +312,42 @@ Units about to be deployed: <<set $mercUnits[_i].isDeployed = 0>> <<set $deployableUnits++>> <<set $deployedUnits-->> - <<set $deployingMercs = 0>> - <<goto "attackHandler">> + <<goto "attackOptions">> <</link>> <</if>> <</for>> <</if>> +<<for _i = 0; _i < _mL; _i++>> + <<if $militiaUnits[_i].isDeployed == 1>> + <<set $deployingMilitia = 1>> + <<break>> + <</if>> +<</for>> +<<for _i = 0; _i < _sL; _i++>> + <<if $slaveUnits[_i].isDeployed == 1>> + <<set $deployingSlaves = 1>> + <<break>> + <</if>> +<</for>> +<<for _i = 0; _i < _meL; _i++>> + <<if $mercUnits[_i].isDeployed == 1>> + <<set $deployingMercs = 1>> + <<break>> + <</if>> +<</for>> + +<br><br> +Set to <span id="keep">keep the roster between battles</span> +| +<<link "Keep roster as it is">> + <<replace "#keep">>keep the roster between battles<</replace>> + <<set $keepRoster = 1>> +<</link>> +| +<<link "Don't keep it">> + <<replace "#keep">>don't keep the roster between battles<</replace>> + <<set $keepRoster = 0>> +<</link>> <br><br> @@ -371,8 +372,8 @@ Defensive tactics <</link>> <br> //Involves using terrain knowledge and small fast attacks to hinder and weaken the enemy.// <br> -<<link "choke Points">> - <<set $chosenTactic = "choke Points">> +<<link "Choke Points">> + <<set $chosenTactic = "Choke Points">> <<replace "#tactic">><strong><<print $chosenTactic>></strong><</replace>> <</link>> <br> //Involves using terrain knowledge and strong fortifications in order to stop the enemy on its track.// @@ -411,5 +412,5 @@ Offensive Tactics <br> <br> <<link "Send your orders">> - <<goto "attackReport">> + <<goto "attackHandler">> <</link>> \ No newline at end of file diff --git a/src/SecExp/attackReport.tw b/src/SecExp/attackReport.tw index f6533565adc13468506060b868545bbaf557c75c..b4656eac90db454ff525af903cb5d004b27b97a1 100644 --- a/src/SecExp/attackReport.tw +++ b/src/SecExp/attackReport.tw @@ -1,4 +1,8 @@ :: attackReport [nobr] -<<include "attackHandler">> +<<if $PCwon == 1>> + You win! +<<elseif $EnemyWon == 1>> + The enemy won! +<</if>> diff --git a/src/SecExp/secInit.tw b/src/SecExp/secInit.tw index 83070d3e6d0e897de1741d972087be3c87b29e17..248651a58e8f2832a3f82b6a64066ab7bf14aec3 100644 --- a/src/SecExp/secInit.tw +++ b/src/SecExp/secInit.tw @@ -16,8 +16,6 @@ <<set $slaveManpower = 0>> <<set $citizenManpower = 0>> <<set $mercManpower = 0>> -<<set $slaveunits = 0>> -<<set $mercUnits = 0>> <<set $militiaLoyalty = 0>> <<set $slaveArmyLoyalty = 0>> <<set $mercLoyalty = 0>> @@ -40,6 +38,9 @@ <<set $deployingMercs = 0>> <<set $battleTerrain = "none">> <<set $maxTurns = 10>> +<<set $PCwon = 0>> +<<set $EnemyWon = 0>> +<<set $keepRoster = 0>> /* statistics */ <<set $equipMod = 0.15>>