From b7b1057c92db8b34ee682058fbc2b3abca6cb77e Mon Sep 17 00:00:00 2001
From: hexall90 <hexall90@gmail.com>
Date: Sun, 17 Sep 2017 18:09:28 +0200
Subject: [PATCH] Beginning of attackReport

---
 src/SecExp/SecExpBackwardCompatibility.tw |  66 ++++---------
 src/SecExp/attackGenerator.tw             |   3 +-
 src/SecExp/attackHandler.tw               |  41 ++++----
 src/SecExp/attackReport.tw                | 111 +++++++++++++++++++---
 src/SecExp/secInit.tw                     |  57 +++++------
 5 files changed, 162 insertions(+), 116 deletions(-)

diff --git a/src/SecExp/SecExpBackwardCompatibility.tw b/src/SecExp/SecExpBackwardCompatibility.tw
index e0f18427c46..b9985b16458 100644
--- a/src/SecExp/SecExpBackwardCompatibility.tw
+++ b/src/SecExp/SecExpBackwardCompatibility.tw
@@ -59,49 +59,24 @@
 <<if ndef $expectedEquip>>
 	<<set $expectedEquip = 0>>
 <</if>>
-<<if ndef $phase>>
-	<<set $phase = 0>>
-<</if>>
-<<if ndef $recon>>
-	<<set $recon = 0>>
-<</if>>
-<<if ndef $attackV>>
-	<<set $attackV = 0>>
-<</if>>
-<<if ndef $defenseV>>
-	<<set $defenseV = 0>>
-<</if>>
-<<if ndef $morale>>
-	<<set $morale = 0>>
-<</if>>
-<<if ndef $enemyAttackV>>
-	<<set $enemyAttackV = 0>>
-<</if>>
-<<if ndef $enemyDefenseV>>
-	<<set $enemyDefenseV = 0>>
-<</if>>
-<<if ndef $enemyMorale>>
-	<<set $enemyMorale = 0>>
-<</if>>
-<<if ndef $losses>>
-	<<set $losses = 0>>
-<</if>>
 
 /* units */
-<<if ndef $secBots && $arcologyUpgrade.drones != 1>>
-	<<set $secBots = {
-	active: 0,
-	isDeployed: 0,
-	troops: 0,
-	maxTroops: 0,
-	equip: 0} >>
-<<elseif ndef $secBots && $arcologyUpgrade.drones == 1>>
-	<<set $secBots = {
-	active: 1,
-	isDeployed: 0,
-	troops: 30,
-	maxTroops: 30,
-	equip: 0} >>
+<<if ndef $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,
+		troops: 50,
+		maxTroops: 50,
+		equip: 0} >>
+	<</if>>
 <</if>>
 
 <<if ndef $militiaUnits>>
@@ -109,40 +84,37 @@
 	<<set $militiaUnits[0] = {
 	active: 0,
 	isDeployed: 0,
-	isTired: 0,
 	troops: 0,
 	maxTroops: 0,
 	equip: 0,
 	training: 0,
 	loyalty: 0,
 	medics: 0,
-	engineers: 0} >>
+	escorts: 0}>>
 <</if>>
 <<if ndef $slaveUnits>>
 	<<set $slaveUnits = []>>
 	<<set $slaveUnits[0] = {
 	active: 0,
 	isDeployed: 0,
-	isTired: 0,
 	troops: 0,
 	maxTroops: 0,
 	equip: 0,
 	training: 0,
 	loyalty: 0,
 	medics: 0,
-	engineers: 0} >>
+	escorts: 0}>>
 <</if>>
 <<if ndef $mercUnits>>
 	<<set $mercUnits = []>>
 	<<set $mercUnits[0] = {
 	active: 0,
 	isDeployed: 0,
-	isTired: 0,
 	troops: 0,
 	maxTroops: 0,
 	equip: 0,
 	training: 0,
 	loyalty: 0,
 	medics: 0,
-	engineers: 0} >>
+	escorts: 0}>>
 <</if>>
\ No newline at end of file
diff --git a/src/SecExp/attackGenerator.tw b/src/SecExp/attackGenerator.tw
index c3b88dc915c..e56bb27c67f 100644
--- a/src/SecExp/attackGenerator.tw
+++ b/src/SecExp/attackGenerator.tw
@@ -31,7 +31,7 @@
 	<<set $attackThisWeek = 1>>
 	<<set $lastAttackWeeks = 0>>
 	<<set $leadingTroops = "assistant">>
-	<<set $deployableUnits = 1 + $readiness>>
+	<<set $deployableUnits = 1 + $readiness>> /* +1 is for testing */
 	<<set $chosenTactic = either("Bait and Bleed", "Guerrilla", "choke Points", "Interior Lines", "Pincer Manouver", "Defense In Depth", "Blitzkrieg", "Human Wave")>>
 	
 	/* _type is the chance out of 100 of an attack of that type happening */
@@ -106,7 +106,6 @@
 		<<set $attackType = "freedom fighters">>
 	<</if>>
 <<else>>
-	<<set $attackType = "none">>
 	<<set $lastAttackWeeks++>>
 <</if>>
 	
diff --git a/src/SecExp/attackHandler.tw b/src/SecExp/attackHandler.tw
index 3f9a7fe1712..7acd82b75e4 100644
--- a/src/SecExp/attackHandler.tw
+++ b/src/SecExp/attackHandler.tw
@@ -121,22 +121,23 @@ It seems your troops and your adversary will fight
 	Unfortunately you have no good information on what is coming your way, the confused reports of your citizens gives you only a vague number. Around <strong><<print Math.round($attackTroops * (1 + either(-1,1) * random(3) * 0.1))>> men</strong> are coming.
 <</if>>
 They seems to be
+<<set _expectedEquip = 0>>
 <<if $riskSim == 1 && $riskSimExpectedAttack == $attackType>>
-	<<set $expectedEquip = $attackEquip>>
+	<<set _expectedEquip = $attackEquip>>
 <<elseif $perimeterDrones == 1>>
-	<<set $expectedEquip = $attackEquip + either(-1,1)>>
+	<<set _expectedEquip = $attackEquip + either(-1,1)>>
 <<else>>
-	<<set $expectedEquip = $attackEquip + either(-1,1) * random(2)>>
+	<<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>>
+<<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.
-<<elseif $expectedEquip == 2>>
+<<elseif _expectedEquip == 2>>
 	<strong>decently armed</strong>. good quality small arms, machine guns a few mortars. There seems to be some heavy military vehicles coming as well.
-<<elseif $expectedEquip == 3>>
+<<elseif _expectedEquip == 3>>
 	<strong>well armed</strong>. high quality small arms, snipers, demolitions teams, heavy duty machine guns and mortars. Heavy military vehicles are numerous and a few artillery piecies are accompaning the detachment. 
-<<elseif $expectedEquip == 4>>
+<<elseif _expectedEquip == 4>>
 	<strong>extremely well armed</strong>. excellent small arms and specialized teams with heavy duty infantry support weapons. Heavy presence of armored military vehicles, artillery pieces and even some attack helicopters.
 <</if>>
 
@@ -224,8 +225,11 @@ You quickly lay down a plan of action:
 <br><br>
 With your current readiness level you can <<if $deployedUnits > 0>>still<</if>> send <strong><<print $deployableUnits>></strong>. Available units:
 
+<<set _mL = $militiaUnits.length>>
+<<set _sL = $slaveUnits.length>>
+<<set _meL = $mercUnits.length>>
 <<if $deployableUnits > 0>>
-		<<if $secBots.isDeployed == 0>>
+		<<if $secBots.isDeployed == 0 && $secBots.troops > 0>>
 			<br>
 			<<secBotsDescription>>
 			<br>
@@ -236,10 +240,8 @@ With your current readiness level you can <<if $deployedUnits > 0>>still<</if>>
 				<<goto "attackHandler">>
 			<</link>>
 		<</if>>
-	<br>
-	<<set _mL = $militiaUnits.length>>
 	<<for _i = 0; _i < _mL; _i++>>
-		<<if $militiaUnits[_i].active == 1 && $militiaUnits[_i].isDeployed == 0>>
+		<<if $militiaUnits[_i].active == 1 && $militiaUnits[_i].isDeployed == 0 && $militiaUnits[_i].troops > 0>>
 			<br>
 			<<militiaUnitsDescription $militiaUnits[_i]>>
 			<br>
@@ -251,10 +253,8 @@ With your current readiness level you can <<if $deployedUnits > 0>>still<</if>>
 			<</link>>
 		<</if>>
 	<</for>>
-	<<set _ms = $slaveUnits.length>>
-	<br>
-	<<for _i = 0; _i < _mL; _i++>>
-		<<if $slaveUnits[_i].active == 1 && $slaveUnits[_i].isDeployed == 0>>
+	<<for _i = 0; _i < _sL; _i++>>
+		<<if $slaveUnits[_i].active == 1 && $slaveUnits[_i].isDeployed == 0 && $slaveUnits[_i].troops > 0>>
 			<br>
 			<<slaveUnitsDescription $slaveUnits[_i]>>
 			<br>
@@ -266,9 +266,8 @@ With your current readiness level you can <<if $deployedUnits > 0>>still<</if>>
 			<</link>>
 		<</if>>
 	<</for>>
-	<<set _mL = $mercUnits.length>>
-	<<for _i = 0; _i < _mL; _i++>>
-		<<if $mercUnits[_i].active == 1 && $mercUnits[_i].isDeployed == 0>>
+	<<for _i = 0; _i < _meL; _i++>>
+		<<if $mercUnits[_i].active == 1 && $mercUnits[_i].isDeployed == 0 && $mercUnits[_i].troops > 0>>
 			<br>
 			<<mercUnitsDescription $mercUnits[_i]>>
 			<br>
@@ -313,7 +312,7 @@ Units about to be deployed:
 			<</link>>
 		<</if>>
 	<</for>>
-	<<for _i = 0; _i < _mL; _i++>>
+	<<for _i = 0; _i < _sL; _i++>>
 		<<if $slaveUnits[_i].isDeployed == 1>>
 			<br>
 			<<slaveUnitsDescription $slaveUnits[_i]>>
@@ -326,7 +325,7 @@ Units about to be deployed:
 			<</link>>
 		<</if>>
 	<</for>>
-	<<for _i = 0; _i < _mL; _i++>>
+	<<for _i = 0; _i < _meL; _i++>>
 		<<if $mercUnits[_i].isDeployed == 1>>
 			<br>
 			<<mercUnitsDescription $mercUnits[_i]>>
diff --git a/src/SecExp/attackReport.tw b/src/SecExp/attackReport.tw
index d4d902c9413..15def66639d 100644
--- a/src/SecExp/attackReport.tw
+++ b/src/SecExp/attackReport.tw
@@ -1,17 +1,104 @@
 :: attackReport [nobr]
 
 /*Init*/
-<<set $phase = 0>>
-<<set $recon = 0>>
-<<set $attackV = 0>>
-<<set $defenseV = 0>>
-<<set $morale = 0>>
-<<set $enemyAttackV = 0>>
-<<set $enemyDefenseV = 0>>
-<<set $enemyMorale = 0>>
-<<set $totalLosses = 0>>
-<<set $militiaLosses = 0>>
-<<set $slaveLosses = 0>>
-<<set $mercLosses = 0>>
+<<set _phase = 0>>
+<<set _attack = 0>>
+<<set _defense = 0>>
+<<set _morale = $baseMorale>>
+<<set _hp = 0>>
+<<set _enemyAttack = 0>>
+<<set _enemyDefense = 0>>
+<<set _enemyMorale = 0>>
+<<set _enemyHp = 0>>
+<<set _mL = $militiaUnits.length>>
+<<set _sL = $slaveUnits.length>>
+<<set _meL = $mercUnits.length>>
 
+/* calculates PC army stats */
+<<if $secBots.isDeployed == 1>>
+	<<set _attack += $secBotsBaseAttack + $secBotsBaseAttack * $secBots.equip * 0.5>>
+	<<set _defense += $secBotsBaseDefense + $secBotsBaseDefense * $secBots.equip * 0.5>>
+	<<set _morale += $secBotsMorale>>
+	<<set _hp += $secBotsBaseHp * $secBots.troops>>
+<</if>>
+<<for _i = 0; _i < _mL; _i++>>
+	<<if $militiaUnits[_i].isDeployed == 1>>
+		<<set _attack += $militiaBaseAttack + $militiaBaseAttack * $militiaUnits[_i].equip * 0.5>>
+		<<set _defense += $militiaBaseDefense + $militiaBaseDefense * $militiaUnits[_i].equip * 0.5>>
+		<<set _morale += $militiaBaseMorale + $militiaBaseMorale * $militiaUnits[_i].escorts * 0.5>>
+		<<set _hp += ($militiaBaseHp + $militiaBaseHp * $militiaUnits[_i].medics * 0.5) * $militiaUnits[_i].troops >>
+	<</if>>
+<</for>>
+<<for _i = 0; _i < _sL; _i++>>
+	<<if $slaveUnits[_i].isDeployed == 1>>
+		<<set _attack += $slaveBaseAttack + $slaveBaseAttack * $slaveUnits[_i].equip * 0.5>>
+		<<set _defense += $slaveBaseDefense + $slaveBaseDefense * $slaveUnits[_i].equip * 0.5>>
+		<<set _morale += $slaveBaseMorale + $slaveBaseMorale * $slaveUnits[_i].escorts * 0.5>>
+		<<set _hp += ($slaveBaseHp + $slaveBaseHp * $slaveUnits[_i].medics * 0.25) * $slaveUnits[_i].troops>>
+	<</if>>
+<</for>>
+<<for _i = 0; _i < _meL; _i++>>
+	<<if $mercUnits[_i].isDeployed == 1>>
+		<<set _attack += $mercBaseAttack + $mercBaseAttack * $mercUnits[_i].equip * 0.5>>
+		<<set _defense += $mercBaseDefense + $mercBaseDefense * $mercUnits[_i].equip * 0.5>>
+		<<set _morale += $mercBaseMorale + $mercBaseMorale * $mercUnits[_i].escorts * 0.5>>
+		<<set _hp += ($mercBaseHp + $mercBaseHp * $slaveUnits[_i].medics * 0.25) * $mercUnits[_i].troops>>
+	<</if>>
+<</for>>
 
+/* calculates enemy army stats */
+<<if $attackType == "raiders">>
+
+<<elseif $attackType == "free city">>
+	<<set _enemyAttack = $fcBaseAttack * $fcBaseAttack * $attackEquip * 0.5>>
+	<<set _enemyDefense = $fcBaseDefense + $fcBaseDefense * $attackEquip * 0.5>>
+	<<set _enemyMorale = $fcBaseMorale>>
+	<<set _enemyHp = $fcBaseHp * $attackTroops>>
+<<elseif $attackType == "old world">>
+	<<set _enemyAttack = $owBaseAttack + $owBaseAttack * $attackEquip * 0.5>>
+	<<set _enemyDefense = $owBaseDefense + $owBaseDefense * $attackEquip * 0.5>>
+	<<set _enemyMorale = $owBaseMorale>>
+	<<set _enemyHp = $owBaseHp * $attackTroops>>
+<<elseif $attackType == "freedom fighters">>
+	<<set _enemyAttack = $ffBaseAttack + $ffBaseAttack * $attackEquip * 0.5>>
+	<<set _enemyDefense = $ffBaseDefense + $ffBaseDefense * $attackEquip * 0.5>>
+	<<set _enemyMorale = $ffBaseMorale>>
+	<<set _enemyHp = $ffBaseHp * $attackTroops>>
+<</if>>
+
+/* apply leader, terrain and tactics bonuses */
+
+
+/* simulates the combat by pitting attk against def
+<<for _i = 0; _i < $maxTurns; _i++>>
+
+
+<</for>>
+
+
+
+
+
+
+/* resets variables */
+<<set $attackType = "none">>
+<<set $chosenTactic = "none">>
+<<set $leadingTroops = "none">>
+<<set $attackTroops = 0>>
+<<set $attackEquip = 0>>
+<<set $deployableUnits = 0>>
+<<set $deployedUnits = 0>>
+<<set $battleTerrain = "none">>
+<<set $attackThisWeek = 0>>
+<<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
diff --git a/src/SecExp/secInit.tw b/src/SecExp/secInit.tw
index ff00f58841b..2f7178fc2a0 100644
--- a/src/SecExp/secInit.tw
+++ b/src/SecExp/secInit.tw
@@ -35,16 +35,7 @@
 <<set $deployableUnits = 0>>
 <<set $deployedUnits = 0>>
 <<set $battleTerrain = "none">>
-<<set $expectedEquip = 0>>
-<<set $phase = 0>>
-<<set $recon = 0>>
-<<set $attackV = 0>>
-<<set $defenseV = 0>>
-<<set $morale = 0>>
-<<set $enemyAttackV = 0>>
-<<set $enemyDefenseV = 0>>
-<<set $enemyMorale = 0>>
-<<set $losses = 0>>
+<<set $maxTurns = 10>>
 
 /* Units */
 <<if def $secBots>>
@@ -55,6 +46,7 @@
 	<<set $secBots.equip = 0>>
 <<else>>
 	<<set $secBots = {
+	platoonName: "security drones",
 	active: 0,
 	isDeployed: 0,
 	troops: 0,
@@ -65,109 +57,106 @@
 <<if def $militiaUnits>>
 	<<set _mL = $militiaUnits.length>>
 	<<for _i = 0; _i < _mL; _i++>>
-		<<if _i == 1>>
-			<<set $militiaUnits[_i].platoonName = _i + "st Citizens' platoon">>
+		<<if _i == 0>>
+			<<set $militiaUnits[_i].platoonName = _i + "st citizens' platoon">>
+		<<elseif _i == 1>>
+			<<set $militiaUnits[_i].platoonName = _i + "nd citizens' platoon">>
 		<<elseif _i == 2>>
-			<<set $militiaUnits[_i].platoonName = _i + "nd Citizens' platoon">>
-		<<elseif _i == 3>>
-			<<set $militiaUnits[_i].platoonName = _i + "rd Citizens' platoon">>
+			<<set $militiaUnits[_i].platoonName = _i + "rd citizens' platoon">>
 		<<else>>
-			<<set $militiaUnits[_i].platoonName = _i + "th Citizens' platoon">>
+			<<set $militiaUnits[_i].platoonName = _i + "th citizens' platoon">>
 		<</if>>
 		<<set $militiaUnits[_i].active = 0>>
 		<<set $militiaUnits[_i].isDeployed = 0>>
-		<<set $militiaUnits[_i].isTired = 0>>
 		<<set $militiaUnits[_i].troops = 0>>
 		<<set $militiaUnits[_i].maxTroops = 0>>
 		<<set $militiaUnits[_i].equip = 0>>
 		<<set $militiaUnits[_i].training = 0>>
 		<<set $militiaUnits[_i].loyalty = 0>>
 		<<set $militiaUnits[_i].medics = 0>>
-		<<set $militiaUnits[_i].engineers = 0>>
+		<<set $militiaUnits[_i].escorts = 0>>
 	<</for>>
 <<else>>
 	<<set $militiaUnits = []>>
 	<<set $militiaUnits[0] = {
+	platoonName: "1st citizens' platoon",
 	active: 0,
 	isDeployed: 0,
-	isTired: 0,
 	troops: 0,
 	maxTroops: 0,
 	equip: 0,
 	training: 0,
 	loyalty: 0,
 	medics: 0,
-	engineers: 0} >>	
+	escorts: 0} >>	
 <</if>>
 
 <<if def $slaveUnits>>
 	<<set _mL = $slaveUnits.length>>
 	<<for _i = 0; _i < _mL; _i++>>
-		<<if _i == 1>>
+		<<if _i == 0>>
 			<<set $slaveUnits[_i].platoonName = _i + "st slave platoon">>
-		<<elseif _i == 2>>
+		<<elseif _i == 1>>
 			<<set $slaveUnits[_i].platoonName = _i + "nd slave platoon">>
-		<<elseif _i == 3>>
+		<<elseif _i == 2>>
 			<<set $slaveUnits[_i].platoonName = _i + "rd slave platoon">>
 		<<else>>
 			<<set $slaveUnits[_i].platoonName = _i + "th slave platoon">>
 		<</if>>
 		<<set $slaveUnits[_i].isDeployed = 0>>
-		<<set $slaveUnits[_i].isTired = 0>>
 		<<set $slaveUnits[_i].troops = 0>>
 		<<set $slaveUnits[_i].equip = 0>>
 		<<set $slaveUnits[_i].training = 0>>
 		<<set $slaveUnits[_i].loyalty = 0>>
 		<<set $slaveUnits[_i].medics = 0>>
-		<<set $slaveUnits[_i].engineers = 0>>
+		<<set $slaveUnits[_i].escorts = 0>>
 	<</for>>
 <<else>>
 	<<set $slaveUnits = []>>
 	<<set $slaveUnits[0] = {
+	platoonName: "1st slave platoon",
 	active: 0,
 	isDeployed: 0,
-	isTired: 0,
 	troops: 0,
 	maxTroops: 0,
 	equip: 0,
 	training: 0,
 	loyalty: 0,
 	medics: 0,
-	engineers: 0} >>	
+	escorts: 0} >>	
 <</if>>
 
 <<if def $mercUnits>>
 	<<set _mL = $mercUnits.length>>
 	<<for _i = 0; _i < _mL; _i++>>
-		<<if _i == 1>>
+		<<if _i == 0>>
 			<<set $mercUnits[_i].platoonName = _i + "st mercenary platoon">>
-		<<elseif _i == 2>>
+		<<elseif _i == 1>>
 			<<set $mercUnits[_i].platoonName = _i + "nd mercenary platoon">>
-		<<elseif _i == 3>>
+		<<elseif _i == 2>>
 			<<set $mercUnits[_i].platoonName = _i + "rd mercenary platoon">>
 		<<else>>
 			<<set $mercUnits[_i].platoonName = _i + "th mercenary platoon">>
 		<</if>>
 		<<set $mercUnits[_i].isDeployed = 0>>
-		<<set $mercUnits[_i].isTired = 0>>
 		<<set $mercUnits[_i].troops = 0>>
 		<<set $mercUnits[_i].equip = 0>>
 		<<set $mercUnits[_i].training = 0>>
 		<<set $mercUnits[_i].loyalty = 0>>
 		<<set $mercUnits[_i].medics = 0>>
-		<<set $mercUnits[_i].engineers = 0>>
+		<<set $mercUnits[_i].escorts = 0>>
 	<</for>>
 <<else>>
 	<<set $mercUnits = []>>
 	<<set $mercUnits[0] = {
+	platoonName: "1st mercenary platoon",
 	active: 0,
 	isDeployed: 0,
-	isTired: 0,
 	troops: 0,
 	maxTroops: 0,
 	equip: 0,
 	training: 0,
 	loyalty: 0,
 	medics: 0,
-	engineers: 0} >>
+	escorts: 0} >>
 <</if>>
\ No newline at end of file
-- 
GitLab