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>&nbsp;&nbsp;&nbsp;&nbsp;
-	<<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>&nbsp;&nbsp;&nbsp;&nbsp;//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>&nbsp;&nbsp;&nbsp;&nbsp;//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>>