Browsed by
Month: May 2017

CMANO AI and Cruise Missile Defense

CMANO AI and Cruise Missile Defense


One of the bigger issues in designing realistic and challenging scenarios is that if certain national order of battles are used they may have enough cruise missiles to win the war in one salvo. The prime example is any US Carrier Strike Group in the last 30 or so years that if you assume 4 surface combatants with VLS and at least 2 Tomahawk capable submarines with a default DB3000 database load should have 200 Tomahawk cruise missiles. This is realistic and any nation with such a capability should use it to win quickly. However, the combat model is poor when the same respect isn’t paid to the defender and a planned defense against this threat and the limitations of cruise missile technology aren’t accounted for. I hope to discuss some suggestion in this article to help address this and ultimately help produce a more accurate combat model and fun game.

Shoot the Archer

The most effective strategy to defeat cruise missile attacks is to kill the shooters before they can shoot. This strategy goes back to ancient battlefields when ranged weapons first appeared but once detected the best strategy is to Braveheart it and send the entire horde over the hill to hammer and kill the archers before the can attrit your combat power. Hanging back and taking it very rarely if ever makes sense. Giving the opposing force the benefit of using their entire offensive power does. Do it.

To successfully attack you must be able to see a target and you must have combat power in place to react to it. This means getting sensors out where the shooters may be as well as positioning your attack power in places that it can be concentrated on the shooters. This means getting as many ships, subs, and aircraft up in the air and out to sea as possible either looking for targets or being positioned to shoot. You will take losses especially to your scouts but this their job and if successful it will be worth their loss many times over. It is better to lose platforms doing something than sitting on the ground waiting.

Shoot the Arrow

Shooting the arrow became a viable defensive strategy due to advances in the modern surface to air missile. CMANO models the growth in capabilities of these missiles (guidance, rates of fire, maneuverability, speed and altitude limitations) as well as the missiles and bombs they target so it just makes sense to do some quick analysis work to understand the threat and how your systems can defend against them. You do this by experimenting with the game to determine how many weapons are likely to be fired at your facilities, how successful your SAM or gun systems might be against them from detection to kill and how geographic placement impacts line of site. While this kind of homework seems obvious you would be shocked at how many scenarios have defenses that would never work against what is being fired against them. It is worth the time and leads to a better game.

Here’s an example of the kind of input and thought that I do when defending against a known Tomahawk E Strike in CMANO. You could definitely do a more detailed analysis but just addressing the basics should accomplish the goal. If you have some things you do please do let me know. I’m always looking for good approaches.

Tomahawk Capabilities

My thoughts on the Tomahawk missile’s capabilities based on what I know from gameplay and looking at it in the DB viewer is as follows:

  • The Tomahawk is relatively slow but a low flyer that can use waypoints and terrain to mask itself effectively making it relatively stealthy. It is currently fired against known fixed targets.
  • In general, it takes 2 Tomahawks to kill a building or disable a tarmac, 4 to disable a runway access point and 10-12 to kill a hardened aircraft shelter or ammo bunker. I need to keep in mind that despite target toughness any stored aircraft or munitions have a chance of getting destroyed on any penetrating hit.
  • Any launch platform will likely carry 12+ and carrier battlegroups should have 200 or so which means large salvos. it is also fair to say the Salvo’s will not come in alone but could be supported by a concerted SEAD effort.
My Defensive Capabilities
  • MANPADS, SA-2, SA-4, SA-6, SA-5, Roland, Rapier, SA-9, SA-13 have little or no chance due to altitude, speed or guidance restrictions. Ranged SAMS are not as worthless as they do have radar systems that can detect tomahawks at greater ranges than more effective but shorter ranged SAM Systems.
  • SA-3 systems can be fired but their percentage to hit a Tomahawk is 5-10% and limited firing channels.
  • HQ-61, I-Hawk, HQ-64, Crotale, SA-11 can engage but have 30-50% chance of hitting and limited firing channels (salvo sizes).
  • SA-8B, Pantsir, SA-15, SA-19 all excellent short range systems with a 45-65% chance of hitting along with more firing channels and secondary gun systems. Many of these systems are also very good against other fast guided munitions such as HARMS and may be more valuable defending other systems by setting their Weapon Release Authorization (WRA settings to do so). They generally have great radars with low range as well.
  • Patriot, SA-10, SA-17, SA-20, Aster 30, Aspide 2000, HQ-9A all excellent systems with good range and many firing channels. They generally have good long-range radars that can detect Tomahawks and other missile systems at long range as well.
  • Command accounts for missile energy so it is not in my best interest to take the longest range shot or shoot at awkward angles. I can adjust a position and WRA ranges to what makes sense. Tomahawks are slower so it may be best to get higher percentage shots than more of them (or not!). I will account for range and kill percentage in making this decision.
  • I may have aircraft that might have good capabilities seeing or killing missiles. I need to weight out orienting them toward cruise missile defense or carrying out other crucial roles. I need to position them in areas that make sense.
Line of Site Topography

I turn on the relief layer for visual queues for elevation changes and mouse over terrain for exact elevations. The higher your radar systems the better and always be wary of higher elevations blocking line of site. This includes evaluating the altitude of your aircraft patrols as well if you’re using them for low-level sweeps.


Any conclusion is subjective but I’ve done the homework to place or move units to where I think they ought to be given shooter capabilities, target capabilities and line of site topography. We’ll see. If I’m wrong I learned something for the next game.


Parking Dispersion

Parking dispersion may be the best defense and probably should be practiced in any wartime scenario. If you look at any air base constructed since World War 1 you’ll notice vast amounts of parking spaces and if you look any Soviet Cold War era base you’ll likely see hundreds of dug out revetments in addition to hardened structures and open tarmacs. Aircraft are typically dispersed, moved and shuffled on a regular basis to prevent targeting and the stale intelligence quickly. The practice was even used in Syria recently as the Syrian’s moved many aircraft to new spots and shelters when they learned of an incoming strike.

CMANO allows you to disperse and move aircraft for the same reasons. Aircraft can be added to any individual structures (revetments, tarmacs, shelters, hangars, open parking) within a constructed airbase and the event editor with a lua script action provides a way to periodically move them given a reason (trigger). This will increase aircraft survival and force your enemy to do more reconnaissance to make their million dollar salvos worth it.

Example: I’d like to disperse aircraft to a different bunker periodically.


  1. Create a time trigger (regular, time or random time).
  2. Create a lua action that includes the code below.
  3. Create Event and trigger and actions.
  4. Repeat if you’d like to move them to move more than once or back and forth.

Lua Script Example:

a=ScenEdit_GetUnit({side=”Great Isle”, name=”Fulcrum #1″})
b=ScenEdit_GetUnit({side=”Great Isle”, name=”Gander Hardened Aircraft Shelter 13″})
if a ~= nil and b ~= nil and a.airbornetime == “0” then
ScenEdit_HostUnitToParent({HostedUnitNameOrID=”Fulcrum #1″,SelectedHostNameOrID=”Gander Hardened Aircraft Shelter 13″})

This code grabs an aircraft and a shelter and assigns them to variables. A defensive if statement is then run to see that both exist and that there is no airborne time to make sure are not airborne. If it passes the HostUnitToParent function then performs the move.

Base Dispersion

US Cold War plans had American bombers and fighter planes going to dispersed airfields in the event of nuclear and conventional war. Given the vast numbers of modern airfields, airports in this country it made sense and would have made the total destruction of forces very difficult. This can also be readily practiced in any Command scenario. You may even consider just getting units up in the air and away from a ground attack as a method of dispersion.

I hope you’ve found this article helpful and it leads to a better game. If you some great suggestions of your own feel free to post or send them along and I’ll update this entry.

CMANO Lua Key Values, Counters and Behaviors

CMANO Lua Key Values, Counters and Behaviors

Command’s Lua implementation provides a powerful tool for players and designers to capture data and use it to do many things using programming logic. Users create custom variables called keys that can be used to store strings of information. The most common example is storing numeric values for counts or a variable name to call again and again throughout their code. Keys can then be used in conditional or relational logic to call on functions to change the behavior of a unit or group.

Example: After 3 P-3 Orion’s  are destroyed I’d like to roll back their patrol mission out of harm’s way by moving the reference points assigned to the mission.


  1. Create scenario. Add sides, units, patrol mission with reference points for target side.
  2. Next create a trigger by going to editor drop down menu, selecting Event Editor and then trigger. Specify the side, target type, subtype and target class. Do not specify a specific unit.
  3. Next create an action by going back to the Event Editor drop down and selecting Actions.
  4. When the Event Actions dialog appears select Lua script from the menu at the bottom and press the create action button to open the editor.
  5. Add Lua Counter code:
  6. Build Event

Example Lua Code (Special Thanks for MichaelM for the start on this):

lastCount = ScenEdit_GetKeyValue(“Counter”);
lastCountN = tonumber(lastCount); — convert to number
if lastCountN == nil then
lastCountN = 0; — first time
lastCountN = lastCountN +1; — increment
if lastCountN >= 3 then
ScenEdit_SetReferencePoint({side=”Blue”, name=”1″,Lat = “-3.26133743974693”, Lon = “108.809990664818”})
ScenEdit_SetReferencePoint({side=”Blue”, name=”2″,Lat = “-3.51017256235771”, Lon = “109.750259905245”})
ScenEdit_SetReferencePoint({side=”Blue”, name=”3″, Lat = “-4.50056738642672”, Lon = “110.026941321177”})
ScenEdit_SetReferencePoint({side=”Blue”, name=”4″, Lat = “-4.70395785856429”, Lon = “109.031147829498”})
ScenEdit_SetKeyValue(“Counter”, tostring(lastCountN )); — save the counter

In this code a key value called Counter is created, assigned to a variable called lastCountN and then converted to a number using the “tonumber” function because keys are strings(text) types. The code then evaluates if a value exists by checking for nil and if so gives it a 0 value (zero is not nil) so that it can be used in a calculation.  The code then adds one to reflect the counter going up. We then check to see if the value is greater to or equal to three and if so move reference points using the SetReference points function. This function lets you move reference points by changing the latitude and longitude values (its a setter). The mission area is then moved to where I think it’s safe based on the latitude and longitude values I’ve specified.

Other useful things you can do in the game with counters.

  • Tracking specific unit types for scoring or a victory condition. Ex. Kill 10 Osa’s triggers a Scenedit Set Score function plus value.
  • Tracking civilian losses to impact victory conditions. Ex. Killing 10 houses triggers a Set Score function minus value.
  • Tracking target fuel storage facility losses to impact air and sea operations as well as land unit movements.
  • Tracking target destruction or losses to impact victory conditions (politics, public opinion etc.).
  • Tracking target destruction to impact morale. Loss of too much would change the quality of the units in CMANO which are configurable.
  • Costing. If you want to track the costs of units, fuel etc. and do not have the pro product this could be used.

I’m sure others will provide some other ideas but I hope this helps!













Air Base Fuel Logistics in Command: Modern Air and Naval Operations

Air Base Fuel Logistics in Command: Modern Air and Naval Operations

There has been occasional discussion on adding air base fuel logistics in Command. The valid concern from players is that fuel is a limited resource that should be a going concern for players. CMANO currently includes storage units such as tanks, bladders, bunkers and trucks but they are not actually required to refuel aircraft and likewise the aviation fuel carried on ships isn’t actually used (as of May 2017).

The reason why this was never added was that casual players would be annoyed at the added complexity of an already cerebral game and in most cases air bases are in places where aviation fuel can be shipped in quickly by truck. CMANO already includes a fairly detailed weapons logistics model where players have to account for the number of bombs, missiles and pods they have. The aircraft readiness model captures how many times they can be used in a period of time and the many reasons why in a couple of simpler variables. Casual players have been very vocal about how complicated all of this currently is and would be further pressured by adding fuel to the mix. It makes total sense why this hasn’t been added and probably won’t until a smart but painless way is implemented.

This being said if you are a modeling savage there are absolutely ways you can do this yourself using the event editor and lua and that’s what I’d like to cover.

I have two suggested methods to accomplish this:

Event Editor without Lua:

Create an event that includes a destroyed or damaged unit trigger (fuel storage unit) and change of the mission status (inactive) on one or more missions.

The upside of this method is no lua scripting is required but the downside is the OR conditions on Event triggers makes it impossible to create one event to cover complete destruction of fuel units.


  • Create scenario sides, add units (including an air base that includes fuel storage facilities and aircraft) and missions.
  • Go to target air base side and create mission deactivations for each mission at air base.
  • Go to triggers and create discrete destroyed/damaged triggers that specify the fuel holding facilities for the target side.
  • Create events that include a mix of each. Keep in mind that triggers are currently evaluated as OR statement and actions as ANDS. So any one trigger will trigger all actions in the event list. Set up separate event s if you’d like to create more distinct relationship between the destroyed units and the missions rather than all or nothing.

Event Editor with Lua

Create an event that includes a destroyed or damaged trigger (fuel storage unit) and a lua code action that checks to see if the fuel storing facilities you specify exist every time a fuel storing unit is damaged or destroyed and then deactivating missions based on that.

The upside is you can write minimal code to create one event that covers the complete destruction of fuel units as well as more discrete impacts on specific mission. People will now think you’re good looking and smart.


  • Create scenario sides, add units and missions.
  • Create destroyed or damaged triggers for each fuel storing unit.
  • Write Lua Action.
  • Build Event.

Lua Code Example:

a=ScenEdit_GetUnit({side=’Target’,name=’Air Base Tank 1′})

b=ScenEdit_GetUnit({side=’Target’,name=’Air Base Tank 2′})

if a == nil and b == nil then

ScenEdit_SetMission(“Target”,”Strike 1″,{isactive=”false”})

ScenEdit_SetMission(“Target”,”Strike 2″,{isactive=”false”})


In this case the first two lines just get the units you’d like to check. The if statement checks to see if they exist (nil means no). The ScenEdit_SetMission statements below just change the missions status (isactive) to false.
If  the side is human you may want to try a slightly different method. Reason is a human player can just reassign to a new mission and start launching aircraft again but if we set the loadout to Maintenance they cannot. A little defense programming could make that a little harder.

a=ScenEdit_GetUnit({side=’Target’,name=’Air Base Tank 1′})

b=ScenEdit_GetUnit({side=’Target’,name=’Air Base Tank 2′})


if c==false then

if a == nil and b == nil then

ScenEdit_SetMission(“Target”,”Strike 1″,{isactive=”false”})

ScenEdit_SetMission(“Target”,”Strike 2″,{isactive=”false”})


if c==true then

ScenEdit_SetLoadout({UnitNameOrID=”Mustang #1″, LoadoutID=4, TimeToReady_Minutes=0, IgnoreMagazines=”True”})

ScenEdit_SetLoadout({UnitNameOrID=”Mustang #2″, LoadoutID=4, TimeToReady_Minutes=0, IgnoreMagazines=”True”})




The c variable in this case checks to see if the player is human or AI. If it is AI it does the mission deactivation and if human it sets the units to a maintenance load out.

Hope this helped!


** Special thanks to Kushan for pointing out the SetLoadout Code which is available as a setter now!

Forum Discussion on this here.