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