The road to v1.10: Special Actions, Lua additions and ScenEdit improvements

January 13, 2016 · Posted in Command · Comment 

scriptingThis is the last in our series of posts covering the new functionality offered by the forthcoming CMANO v1.10 update. This time we turn our attention to scenario authoring and Lua scripting.


Special Actions

Special Actions are similar to TOAW’s much beloved “Theater Options”, in the sense that they allow the player to execute a number of pre-defined actions that may bring favorable results (or not – often the best way to model such actions is as high-risk gambles that can spectacularly backfire). Contrary to TOAW, Special Actions can range from the strictly tactical (“Host this SOF squad into the building”) through operational (“request nuclear release”) all the way to grand strategic (“The Assad regime requests assistance from the Russian Federation and makes Latakia airbase and Tartus harbor available to their forces”).

Special Actions are created and edited through ScenEdit (Editor -> Event Engine -> Special Actions) and are made available to the player in normal play mode via Game -> Special Actions (disabled actions are hidden). Such an action may be one-off or repeatable (through Lua it can also be made active for only a finite number of calls, ie. “you may request this 3 times”). From a technical standpoint, Special Actions act as containers for Lua scripts so they can be very powerful. Once an action is executed a message (generated by the script) is shown to the player as to what happened as a result of the action, so scen authors are encouraged to be elaborate in their explanations.

Lua improvements

Lua scripting on Conditions: The immense power and flexibility of Lua scripting is now available not only on event actions but also on conditions. Authors can combine this with the existing event triggers to create very elaborate conditional triggers.

Lua counterparts for existing conditions: The existing “Side Posture” and “Scenario has started” event conditions now have Lua counterparts: ScenEdit_GetSidePosture(SideANameOrID, SideBNameOrID) and ScenEdit_GetScenHasStarted() respectively.

New Lua function: ScenEdit_SetSpecialAction. Usage example: ScenEdit_SetSpecialAction({ActionNameOrID=”MyAction”, IsActive=”True”, IsRepeatable=”False”, NewName=”MySpecialAction”, Description=”This is a very special action”}). This is very handy if the scen author wants to activate/deactivate special actions depending on other events happening.

New Lua method: ScenEdit_GetSideIsHuman(‘SideNameOrID’) . Returns ‘Yes’ if the referenced side is currently under human control, ‘No’ otherwise.

New Lua method: ScenEdit_SetLoadout. Usage example: ScenEdit_SetLoadout({UnitNameOrID=”Viper #1″, LoadoutID=631, TimeToReady_Minutes=45, IgnoreMagazines=”False”})

Length limit of Lua scripts: The limit has been raised to tens of millions of characters.

You can now order a unit to RTB via Lua: Using the existing ScenEdit_SetUnit method, use the “RTB” key (e.g. RTB=’Yes’)

You can now host a unit to a suitable parent unit/group via Lua (e.g. aircraft to airbase, small boat to larger ship etc.). The new method is: ScenEdit_HostUnitToParent(table). Usage example: ScenEdit_HostUnitToParent({HostedUnitNameOrID=’Eagle 1′, SelectedHostNameOrID=’Bitburg AFB’}) . The unit to be hosted is ‘snatched’ either from mid-air or from its current host.

You can now edit a unit’s fuel level through Lua. Usage examples:
{ [3001] = { current = 240000, max = 240000 }, [4001] = { current = 3750, max = 3750 } }
fuel = a.fuel
a.fuel = fuel

ScenEdit and Event Engine improvements

* An extra criterion, “minimum classification level”, has been added to the “Unit Detected” trigger. This allows the scenario author to tailor the desired level of target classification reached (everything from simply “detected” all the way to “precise ID”) before the trigger is actually fired. For backwards compatibility, the default level is “Detected – Known Domain”.

* You can now clone events, triggers, conditions and actions.

The v1.10 update for CMANO will soon be available as a Release Candidate on the MatrixGames forum. Stay tuned!

The new features of Chains Of War: Communications disruption

April 15, 2017 · Posted in Command · Comment 

The first few “Release Candidate” (ie. public beta) builds of the v1.12 update (the companion to the upcoming “Chains Of War” DLC pack) have began being distributed on the MatrixGames forum and we’re happy to say the feedback so far has been very encouraging. Additions like the new 2x time compression step and much improved 4K/UHD support have long been favorite requests and it is good to see them well received. Chains of War, however, will introduce a number of major new features with significant effects on scenario design and gameplay. Today we are looking at one of them; communications disruption.



Static on the radio

The US Navy’s vision for modern operations. What happens if the data pipes break?

Most wargames and simulations accustom their users to the idea of omnipresent, instant, always-on communications. The battle may be lost – your forces & assets may be in disarray – but you are always in control of them and aware of their whereabouts, activities and condition. You are always in the know and in power. The pawns in the chessboard are always at your disposal.

But what happens when the lights go out? When the only thing on the radio is static? When the datalink is dead?

This is fast becoming an ever-important question, both because the western armed forces are increasing their reliance on distributed, hyper-connected force concepts (the F-35 and the US Navy’s NIFC-CA being fine examples) and because potential peer competitors, fully aware of this trend, are rapidly improving their electronic attack and cyber-warfare capabilities. The ever-evolving chess game of electronic warfare has never been limited to the radar bands, but more recently communications and datalinks are becoming increasingly appealing targets.

Beginning with v1.12, Command makes a bold step forward in exploring this domain. We want to show players both the “how” and the “why” of communication lines breaking, and the practical effects of units being isolated from their parent side’s common picture.


A unit can have its communications disrupted in a number of ways:

  • If all its onboard comm devices and datalinks become non-operational (damaged or destroyed):



This frigate is about to become very lonely


  • Through the Lua scripting API: As an example: ScenEdit_SetUnit({Name=”USS Vigilant”, OutOfComms=”True”}). This is a very versatile technique as it can be used to model any number of factors, both man-made and natural, that can cause a unit to go “off-grid”:
    • A submarine hooking up to HF or satellite communications when it goes to periscope depth, and breaking contact again when it submerges.
    • A satellite linking only temporarily with its ground station to dump its intelligence product and receive new tasking instructions, then again going in isolation in space (contrary to popular fiction, even modern intelligence satellites are rarely, if ever, in constant link with their ground control stations).
    • A cyber attack directed at the internal comms infrastructure of the targeted platform. (Your comm devices may be physically untouched, but the server at the core of the comms exchange just got taken over. Tough world! Chains Of War has strong examples of this.)
    • Physical incapacitation (damage/destruction) of a critical C3I node leading to other units dependent on it going offline (remember that many of the first-night targets in Desert Storm were headquarters, C3 bunkers and comm buildings? You can now recreate why this was a critical action).
  • Through the scenario editor GUI, by selecting the unit and marking it as “out of comms”:image
    This is less powerful than using the Lua API but a simpler and faster way for quick setups. So for example you may use this to configure a unit to be “off grid” at the start of a scenario, and follow-up with a Lua script depending on some later action that changes this unit’s connectivity.
  • By jamming its comm devices, using communications jamming equipment similar to existing OECM systems. [NOTE: Integrated comms-jamming is a feature reserved for the Professional Edition. However, with a bit of creative work you can use the Lua API to approximate this in the commercial version of Command.]

…and Effects

So what are the results of a unit going “off-grid”?

The most obvious effect is that the unit is no longer under your positive control. You no longer know where it is currently located (you only know where it was when it last checked-in, and if any of your other still-connected assets manages to make contact with it, this “last datum” is updated). You don’t know what it is doing, what its fuel, weapons or damage status is. You don’t know if it is peacefully loitering with not a care in the world or if it is fighting for its life. You will know its fate with certainty only when it comes back to its base – or is destroyed first.


“Last we heard from Garry he was somewhere there… and that’s all we know.”

For its part, the cut-off unit loses all the benefits of the common side-wide operational picture; its situational awareness now reaches out just to the limit of its own sensors and no further. It has no idea what is going on “out there”. It can still detect, investigate and prosecute contacts on its own and proceed with its assigned mission if it has one, but all the benefits of mutual support are gone. Cooperatively patrolling a large area to split up areas? Nope. Efficient fire coordination? (“You shoot bandit #1 and I’ll take #2”) Forget about it. Even worse, it now has to be really careful with anything that shows up on the scope. Is that new contact a friendly or an enemy? You’d better hope its RoE and doctrine settings take such a situation into account – or prepare for blue-on-blues!


Meanwhile, Garry is now alone and trying to adjust to the sudden loss of SA from the nearby AWACS. Notice the only contact still “fresh” is the one that the F-15 is actually detecting on its own; the other contacts, hitherto provided by the E-3, are now deteriorating fast.

Units that lose their comms connectivity retain local copies of the contacts that were available to them before they went offline; essentially they inherit a snapshot of their parent side’s theater picture at the moment of their breakaway. However, without the benefit of information exchange with their parent network, this snapshot immediately starts to lose its currency and most of the contacts will soon vanish unless refreshed by the unit’s own sensors. (It’s like walking down a busy street, taking a last look around and closing your eyes. The longer you remain blind, the less relevant & useful your last memory will become.)

Units that manage to get through their “isolation” and re-join their side comms network share their contact information. You can use this to model things like film-return satellites (the Russians still use them!), a submarine sharing its intelligence take after rejoining its battlegroup etc. If the parent side already has these contacts, the updated information (including BDA – very handy!) is merged and used to refine the contact information.

As mentioned, the player has no control over his “disconnected” units. However, playing out a scenario in ScenEdit mode (which is essentially “cheating” but also very useful for analysis) affords an additional ability: To literally jump into the cockpit/CIC of the isolated unit and experience its “loneliness” first-hand (Editor –> Isolated POV view. This menu selection is only available when the “Comms Disruption” feature is enabled for the scenario). This is an excellent way to understand how a comms-isolated unit perceives its environment and reacts to it (which is usually quite different from when it operates as part of an integrated network). Quickly switching between “side-wide common picture” and “isolated POV view” can be a real eye-opener as to the value of a well-connected battleforce and the hazards and challenges of “comms off”. It is simple enough to say “we’ll not transmit so the bad guys cannot sniff us out”. But how well can you really fight in the dark?

Living with vulnerable comms

During the course of our internal testing, we realized players using this new feature will probably have to adjust to a different mindset as well as absorb the new options it affords them. A few random thoughts:

  • Non-kinetic options are now significantly more expanded. Forget jamming radars; now you can do some real sneaky tricks. It is remarkable how much more brittle and inefficient, say, an IADS becomes when you can selectively take any of its critical nodes offline. Michael Scofield would _love_ to be able to brick the guards’ phones during his break-out/break-in escapades. Put another way: Going ultra-stealth or swarming cruise missiles over every radar & SAM site are no longer your only, or even your best options.
  • An initial tempting thought was to freely use comms disruption as a standard built-in feature to all existing scenarios. We soon discovered, in hilarious ways, how this can wreck scenarios that were not designed with this factor in mind. As an example, in the standalone scenario “Duelists”, we “flipped the switch” on the Soviet surface group just to see what would happen. Because the group had a standing “forbidden zone” around it that automatically marked violators as hostile, and in combination with very liberal “shoot first” ROEs, the ships in the group almost immediately proceeded to blow each other out of the water with righteous fury, with even a distant Oscar sub joining the action with its beastly antiship missiles. It really was blue-on-blue in its most pure, raw form.
  • Apart from the obvious step of making this new feature optional so that existing scenarios can function as before, we also added a lot of “reasonable smarts” to the AI crews so that events like the above Soviet shootout were less likely to happen. So for example, when detecting a new contact close to where a friendly off-grid unit was last known/reported, the side-wide AI is now a bit more careful even if the new contact is a violator of a forbidden zone (“easy on the trigger, guys… maybe it’s Garry after all”). Likewise, cut-off units compare their new contacts with the most recent datum of their known comrades and will ignore contacts that seem to be right on top of where their buddies were when they last heard from them. After putting together such refinements and re-trying the Duelists test, the isolated Soviet units were now significantly more restrained on how they prosecuted sudden new contacts after their breakaway.

    (On the flip side, if you are the one creating the chaos, this creates excellent “false flag” opportunities for exploiting it. For example, if you can swiftly and unobserved dispatch comms-isolated units that are part of an enemy distributed force, the longer you can remain in their general location the longer it may take for their friends to get suspicious of you. Cloak and dagger fans rejoice!)

  • Comms vulnerability really drives home the dirty little secret of most network-based CONOPS. People talk about swarms, distributed lethality and all the rest of current jargon – but all of this assumes reliable communications.
    This also reinforces the importance of sufficient individual capability: A modern warship, even when comms-isolated, is still a powerful unit. It has a fair chance of accomplishing its mission even without the obvious benefits of cooperation with its consorts. On the other hand, a “swarm” unit (be it a small speedboat, a drone etc.) that relies on the “my strength is in the pack” principle? Take comms off and its power drops precipitously (it is not an accident that comms-jammers are rather more favored for counter-drone defence than hard-kill measures).

Some other scenario-editing ideas for taking advantage of this feature:

  • Special actions, with units on the opposing side getting their comms knocked out. This is used to simulate a computer network attack, but could also represent saboteurs physically disrupting the comms network.
  • A “unit enters area” trigger where a friendly unit representing a jammer (ie, an EA-6B Prowler or similar) arrives on station. The script is fired, and representing its jamming capabilities, units on the opposing side have their comms taken out.
  • A “unit enters area” trigger where run-off the mill friendly units get their comms knocked out, forcing them to continuing prearranged missions or move aimlessly in circles until they run low on fuel and return to base. This, especially in earlier-period scenarios, simulates units outrunning their lines of communication. It can also be used to simulate submarine operations.

Looking forward

Further improvements to the comms-disruption feature are already planned and underway, but most of them are currently restricted to the Professional Edition. In the meantime, it is obvious that this feature represents a huge step forward in modeling the intricacies of modern operations, and scenario authors are likely going to have a creative blast with it just like with other existing features. What are YOU going to do with it?

Manual Addendum: Scenario Editor

July 5, 2014 · Posted in · Comment 

* The “Add Unit” window now remembers all selection filters used on the last unit addition and re-applies them whenever called up. This makes it easier to rapidly add different but similar units.

Window - Air Ops 001

* You can now edit aircraft names and delete specific aircraft directly through the Air-Ops window.

* New event trigger: Unit Detected. Fires when a unit (flexibly filtered from side-wide down to specific unit) is detected by the specified side.

* New event-engine addition: Event Conditions. Conditions are managed and added to/removed from events just like triggers and actions. An event without conditions fires normally (probability check etc.). If conditions are present, all of them must be satisfied in order for the event to fire.

* Added new realism option: Unlimited Aircraft Weapons. When enabled, aircraft have unlimited loadout packs available even if their bases are not loaded with weapons at all. This is not recommended for realistic prolonged scenarios (it makes airpower too omnipotent) but can be useful for quick experimentation.

* Added first event condition: Side posture. (e.g. Side-A must consider Side-B as [friendly|neutral|unfriendly|hostile]). The condition also has an optional “NOT” operator (e.g. Side-A must not consider Side-B as friendly).

* Significant addition to patrol missions: Prosecution Area. Prosecution Areas (PAs) act much like a forbidden zone in that contacts appearing within them are marked for interception, but they also _restrict_ the extent at which interceptions will happen. So if you want your fighters to e.g. be triggered only by bandits within 200nm of a protected HVU instead of “waking up” to contacts thousands of miles away, PAs are the solution.

PAs Act as a “leash” for assets on a patrol; they effectively determine the extent to which the patrol assets can give chase to receding targets. If the bandit moves out of the PA, the defender is forbidden to follow (though it can still engage with weapons if feasible). This solves the problem of patrol assets over-extending themselves during interception, quite often falling victims to feints/traps.

PAs are supported in the UI by modifications to the Mission Editor UI, and are populated by reference points in the same way as existing patrol areas. They are empty by default, and in this case the AI behavior is the same as before (intercept bandits far away etc.), to facilitate existing scenarios. Units that are assigned to a patrol with a prosecution area will target & engage only contacts that are within this area (or their patrol area). If they are not on patrol or their patrol does not have a prosecution area, the existing AI rules apply. This makes it possible to create SAM ambushes (shoot at far less than max range), divide areas of responsibility for multiple patrol forces etc.

For PAs to work, the patrol option “Investigate targets outside contact area” needs to be enabled. The doctrine option “engage targets of opportunity” _overrides_ the prosecution area limit.

* Grouping land units with ammo dump type units with matching weapons records  for replenishment. This allows for reloads which means that SAM, artillery and land units can be replenished.

* Added sprint-and-drift behavior for units that are part of a surface or sub group (the most common case requiring this behavior). This behavior is enabled by going in the formation editor, selecting the desired unit, and ticking the checkbox “Sprint and Drift” on the formation editor toolbar.

*When rebuilding a scenario with the latest database, the simulator will automatically re-shuffle the aircraft and move those that are ready in less than 60 minutes to the flight deck. Ditto when readying an aircraft in the scenario editor and selecting ‘Ready Immediately’. It may be worth noting that the simulator is not topping up the deck completely, it is keeping some free space on the deck for the recovery cycles since landing aircraft may have to park there in case all elevators are busy.

* Major new addition: Lua scripting. See here for details and examples: Special reserved variable for Event Engine: UnitX. This is a global (scenario-wide) variable representing the active unit responsible for firing any of these triggers:

  • Unit is damaged
  • Unit is destroyed
  • Unit is detected
  • Unit enters an area
  • Unit remains in area

So whichever unit causes of the above triggers to fire, it gets tagged as “UnitX”. You can then use this special variable as a reference in any Lua-mapped function that takes a unit’s name/ObjectID as a parameter (so for example you can dictate “whichever unit enters this area will get assigned to this mission”).

* New Event Trigger type: “Scenario is loaded”. This fires immediately once a scenario is loaded from file and before it is presented to the player/editor, _if_ the scenario current datetime is at or before the “start of scenario” datetime. This enables doing initial setup actions (e.g. randomize unit locations) before the player starts the scenario.

* New Scen-Edit feature: Clone a unit (ie. copy a unit and also copy all customizations of the original). The keyboard shortcut is Shift + C. The only limitaton currently is that modifications to an aircraft’s loadout (extra weapons etc.) are not copied.

* Major new ScenEdit feature in v1.07: Scenario Attachments (a.k.a. auto-bundling). See detailed description here:


NEW IN v1.08

* Added “Reset All Side Scores” button on Losses & Expenditures window.

* New side-level option (editable on “Edit Sides” window): Can Auto-track civilians. When enabled, the selected side automatically detects and tracks civilian/commercial units. This simulates access to publicly available traffic sources like AIS, and can be handy for piracy & law-enforcement scenarios.

* Various tweaks to mission editor UI.


NEW IN v1.09

* New Lua action: Change the side of a unit

* New Lua action: Explode a warhead.

* New event condition: “Scenario Has Started”. Useful for scripting actions that you want to happen only at the very beginning of a scenario (e.g randomizing start positions).

* New attachment type: Local video file (local = stored on hard drive, not streamed e.g. YouTube). Has option for full-screen or windowed mode, and optional delay before playing. The video file must be in WMV format (the “Movie Maker” application included in Windows can easily convert almost any media format to WMV).

* When adding new aircraft, if the player does not specify a callsign, one is automatically assigned.

* FIXED: Right-click while in “add unit” status opens up the “Add Unit” window in addition to panning the map.


NEW IN v1.10

* NEW MAJOR FEATURE: Special Actions. These are very similar to TOAW’s “Theater Options”, in the sense that they allow the player to execute a number of pre-defined special actions that may bring favorable results (or not – often the best way to model such actions is as high-risk gambles that can spectacularly backfire). Contrary to TOAW, Special Actions can range from the strictly tactical (“Host this SOF squad into the building”) through operational (“request nuclear release“) all the way to grand strategic (“The Assad regime requests assistance from the Russian Federation and makes Latakia airbase and Tartus harbor available to their forces”).
Special Actions are created and edited through ScenEdit (Editor -> Event Engine -> Special Actions) and are made available to the player in normal play mode via Game -> Special Actions (disabled actions are hidden). Such an action may be one-off or repeatable (through Lua it can also be made active for only a finite number of calls, ie. “you may request this 3 times”). From a technical standpoint, Special Actions act as containers for Lua scripts so they can be very powerful. Once an action is executed a message (generated by the script) is shown to the player as to what happened as a result of the action, so scen authors are encouraged to be elaborate in their explanations.
* You can now add a new magazine to a unit directly through the ScenEdit UI (instead of using the SBR). To do this, select the unit, bring up the “Magazines” window and click on the “Add Magazine” button.
* Major new EE feature: Lua scripting on Conditions. You can combine this with the existing event triggers to create very elaborate conditional triggers.
* The existing “Side Posture” and “Scenario has started” event conditions now have Lua counterparts: ScenEdit_GetSidePosture(SideANameOrID, SideBNameOrID) and ScenEdit_GetScenHasStarted() respectively.
* You can now order a unit to RTB via Lua: Using the existing ScenEdit_SetUnit method, use the “RTB” key (e.g. RTB=’Yes’)
* You can now host a unit to a suitable parent unit/group (e.g. aircraft to airbase, small boat to larger ship etc.) via Lua. The new method is: ScenEdit_HostUnitToParent(table). Usage example: ScenEdit_HostUnitToParent({HostedUnitNameOrID=’Eagle 1′, SelectedHostNameOrID=’Bitburg AFB’}) . The unit to be hosted is ‘snatched’ either from mid-air or from its current host.
* The editor textboxes for Lua scripts now have a much larger character limit (tens of millions).
* New EE feature: You can now clone events, triggers, conditions and actions
* New Lua method: ScenEdit_SetSpecialAction. Usage example: ScenEdit_SetSpecialAction({ActionNameOrID=”MyAction”, IsActive=”True”, IsRepeatable=”False”}). This is very handy if the scen author wants to activate/deactivate special actions depending on other events happening.
* New Lua method: ScenEdit_GetSideIsHuman(‘SideNameOrID’) . Returns ‘Yes’ if the referenced side is currently under human control, ‘No’ otherwise.
* New Lua method: ScenEdit_SetLoadout. Usage example: ScenEdit_SetLoadout({UnitNameOrID=”Viper #1″, LoadoutID=631, TimeToReady_Minutes=45, IgnoreMagazines=”False”})
* Scenario authors can now edit a unit’s fuel level through Lua. Usage examples:
{ [3001] = { current = 240000, max = 240000 }, [4001] = { current = 3750, max = 3750 } }
fuel = a.fuel
a.fuel = fuel
* Added “Copy unit ID to clipboard” command to the ScenEdit section of the unit-context menu. This makes it much faster to grab a specific unit’s unique ID and start using it on Lua scripts (vs. getting it from the SBR template file).
* An extra criterion, “minimum classification level”, has been added to the “Unit Detected” trigger. This allows the scenario author to tailor the desired level of target classification reached (everything from simply “detected” all the way to “precise ID”) before the trigger is actually fired. For backwards compatibility, the default level is “Detected – Known Domain”.

NEW IN v1.11

* NEW: Spatial polygon validation: All windows with area editors now have a ‘Validate Area’ button that allows the player to quickly determine if the polygon used for the area (exclusion zone etc.) is valid or not. The simulator will also display the polygon in the tactical map. This includes areas used by the event engine. Furthermore, all areas in a scenario are validated on load, and the player will be presented with warnings if the scenario contains invalid polygons.

* FIXED: When cloning an EE SimEvent, the lists of Triggers/Conditions/Actions pointed to the very same instances (thus when e.g. removing a trigger, the trigger would be removed from both events).

NEW IN v1.11 SR1

* SBR/Clone tweak: The cloned unit gets the same heading as the original unit.

* You can now enable/disable non-navigation zones and exclusion zones, in two ways:
a) Through the UI, as the grids on the relevant windows have an extra “Is Active” checkbox for each zone entry.
b) Through Lua. Usage example:
mySide = VP_GetSide({Name=”US”})
myZone = mySide:getnonavzone(“AAW Zone 1”) [Alternative for excl. zone: myZone = mySide:getexclusionzone(“Forbidden Zone 1”)]
myZone.isactive = “True”/”False”

Inactive no-navigation zones are not rendered on the map at all. Inactive exclusion zones are rendered with a dash line (instead of solid).

NEW IN v1.11 SR4

* ScenEdit Tweak: The “DB Migration” window displays visual confirmation of the target DB.


NEW IN v1.11 SR7

Large number of new & updated Lua methods:

Updated Lua function: ScenEdit_SetUnit() – added keys: COURSE, SPEED/THROTTLE, PROFICIENCY, DEPTH, REFUEL, FUEL
Updated Lua function: ScenEdit_AddUnit() – added keys: BASE
Updated Lua function: ScenEdit_AssignUnitToMission() – added keys: ESCORT (for strike missions)
Updated Lua function: ScenEdit_SetDoctrine() – added keys: ESCORT, additional doctrines, withdraw/docking
Updated Lua function: ScenEdit_SetReferencePoint() – added keys: TYPE, RELATIVETO, LOCKED
Updated Lua function: ScenEdit_SetLoadout() – allow READYING a/c to be updated
Updated Lua function: ScenEdit_RunScript() – allow to run from attachmentRepo attached to scenario
Updated Lua function: ScenEdit_UseAttachment() – fixed to allow Lua Scripts

New Lua function: ScenEdit_AddWeaponToUnitMagazine(table) – reload magazines
New Lua function: ScenEdit_AddReloadsToUnit(table) – reload unit mounts
New Lua function: ScenEdit_GetSideOptions(table) / ScenEdit_SetSideOptions(table) – adjust side awareness, proficiency
New Lua function: ScenEdit_SetUnitDamage(table) – damage components
New Lua function: ScenEdit_AddMission(side,..) / ScenEdit_GetMission(side,mission,…) / ScenEdit_SetMission(side,mission,…)
New Lua function: ScenEdit_DeleteMission(side,mission,…)
New Lua function: ScenEdit_AssignUnitAsTarget(contact(s),mission)
New Lua function: ScenEdit_GetReferencePoints(table) – returns table of reference point details
New Lua function: VP_GetContact(table) – get table of contacts
New Lua function: ScenEdit_RefuelUnit(table) – make unit refuel as per AAR doctrine
New Lua function: ScenEdit_SetEvent(‘EventNameOrId’, table) / ScenEdit_GetEvent(‘EventNameOrId’)
New Lua function: ScenEdit_GetSpecialAction(table) / ScenEdit_ExecuteSpecialAction(‘EventNameOrId’)
New Lua function: ScenEdit_GetContacts(side) – contacts from the side’s perspective
New Lua function: ScenEdit_GetContact(table) – a contact’s details
New Lua function: ScenEdit_FillMagsForLoadout(table) – fill magazine with a number of a specific loadout
New Lua function: ScenEdit_AttackContact(attacker, contact, table) – automatic or using specific weapon
New Lua function: ScenEdit_UpdateUnit(table) – updates sensor/mounts on unit
New Lua function: ScenEdit_SetDoctrineWRA(table) / ScenEdit_GetDoctrineWRA(table) – WRA doctrine
New Lua function: ScenEdit_UpdateEvent(eventName, table) – update Lua script on selected event
New Lua function: ScenEdit_GetWeather( table ) – at scenario or unit level
New Lua function: Tool_DumpEvents() – dumps out all events to an XML file in ‘\Scenarios’; useful to examine all events without clicking-through the ScenEdit UI

New exposed Lua object: unit [ mounts, magazines, base (hosted at), proficiency, components, mission (returns mission object rather than name),group (returns mission object rather than name), fuelstate, weaponstate, manualSpeed, manualAltitude, AirborneTime, loadoutdbid, throttle, weather, method :filterOnComponent (filter components on a type eg sensor), :rangetotarget( contact id) ]
New exposed Lua object: side [ awareness, proficiency ]
New Lua object: group [ unitlist ]
New Lua object: mission [ unitlist, targetlist, starttime, endtime, active, SISH, AAR, plus ‘mission specific details’ ]
New exposed Lua object: referencePoint [ locked, relativeTo ]
New exposed Lua object: contact [ type, potentialmatches, side (contact’s), missile_defence, age, fromside (who made the contact), FilterOut, weather, method :DropContact() ]
New exposed Lua object: doctrine [ additional doctrines ]

General Lua:
* ADDED: Lua: Add plotted course when inserting unit
* ADDED: Lua Function: Return to port
* Lua commands and response (incl. errors) are now stored to text files on [CMANO]\Logs\LuaHistory_[date & time] .
* NLua library upgraded to 1.3.2 (kudos to MichaelM!)
* Improved error reporting – attempts to show which command and/or line failed
* Improved in-event error handling
* Added Lua history file in \Logs folder
* Allow true/false for boolean values
* Added executing Lua scripts to log (note that this may cause large files!)
* “Copy unit ID from editor” method can handle multiple units
* Added option on Event that can controls logging to the game log; ON by default, but useful for an event that fires quite often
* Lua: Tool_DumpEvents writes to a file (file located in \scenarios as “[scenario title] + events.xml”)
* Lua: Contact type as string and number
* Lua: Doctrine – withdraw & deploy settings
* Lua: Added event names to RunScript
* Lua: carry over event name to RunScript in Sandbox
* Lua: Fixed unitname keyword for SetLoadout()
* Lua: Added ‘unitname’ to Doctrine inline with standard naming
* Lua: Improved error handling. Errors are displayed and execution stops when running in console mode. When running from special-actions, the function returns NIL but the script continues to run. The error is shown in the Lua variable ‘_errmsg_’ and the function in ‘_errfnc_’

Refer to Command Lua ( for more detailed explanation of exposed objects and functions.


NEW IN v1.12

* Lua: Fix manual/desired speed on SetUnit()
* Lua: Enhance EndScenario trigger/action
* Lua: Enhanced “Unit Detected” event trigger



NEW IN v1.13

* MAJOR NEW: All-new Lua Console v2

* Added warning pop-up to scen authors: When activating AC damage, make sure to deep-rebuild scenario

* Lua: added OODA to unit wrapper
* Lua: SE_AddZone() for no-nav and exclusion zones
* Lua: Added Event handling through Lua
* Lua: Zone wrapper: add property .markas
* Lua: SetUnit() allow .base to be set to change assigned base (using base=nil will make it pick the closest base)
* Lua: SetUnit() – don’t add contact for own side
* Lua: Unit wrapper .autodetectable property (Added new contact code as per the SetUnit() one)
* Lua: Time triggers firing multiplle times (For specific time trigger, it needs to only fire once. If it then fails a condition or probability check, it wont fire this trigger again.)
* Lua: User-driven function checks
* Lua Event: 6,12,24 hour events
* Lua: Option to TransferCargo() (Only for crossloading to ships at the moment. Added property ‘hostedUnits’ to unit wrapper to show boat/aircraft embarked.
* Add hotkey for copying GUID on map (Ctrl+C). This is useful outside of the editor when trying to write Lua scripts.
* Lua: SE_TransferCargo handles other platforms (Improved. Now uses aircraft, facility,ship,submarine platforms. Allows multiple loads to destination unit accounting for existing space used.)
* Lua: TargetFilter() infer subtype from unitclass
* Lua: add weapon details to unit wrapper
* Lua: Contact wrapper – fix and additional properties: speed, heading, altitude, detectedBySide, BDA, emmissions, detectionBy, fixed the side returns that gave the actual object rather than the matching Lua wrapper.
* Lua: Added property firingAt, firedOn
* Lua: tweaked SetLoadout(), property readytime on unit wrapper
* Lua: TransferCargo, UnloadCargo
* Lua: added unitType filters to VP_Side() object (fixed case where weapon target is null, e.g. when weapon is a sonobouy)
* Lua: added new property to all Lua wrappers – .fields (Lists the name of all properties and methods in the wrapper. Useful for verifying names if in doubt!)
* Lua: added new mode to UpdateUnit() (Can now add/remove weapon records)
* Lua: SetUnitSide – handle changing a group unit
* Lua: add :inArea(zone) to unit and contact wrapper
* Lua: added reference to current event on condition (Should be possible to refer to event attributes when checking conditions. The current event reference is called for actions and
-SetLoadout() to default some values if passed
-TimeToReady defaults to the loadout ready time
-IgnoreMagazines defaults to false
-unit.readytime – time for aircraft/ship to be ready
* Lua: added wrapper for events, EventX
* Lua: Fixed SE_DeleteMission causing exception
* Lua: Fixed error in XML parsing for SE_GetEvent()
* Lua: Fixed Clone of Event Condition LuaScript
* Lua: added ‘Base’ to SE_SetUnit() + added option to HostParent() to assign a base rather than ‘host’ it. [Not really needed as the new SetUnit() handles setting a base now]
* Fixed: Lua mission wrapper ‘OnStation’ missing (Added to Patrol and Support)
* Lua: SE_GetFormation() and unit/group wrapper
1. Gets info about a formation
2. unit.formation – can change info on unit station keeping
3. group.lead – change group’s lead unit
* Lua: Tool_Bearing()
* Lua: Add LUA_World_GetPointFromBearing()
* Lua: AddReferncePoint() – allow multiple points and bearing/distance
* Lua: Added Area to UnitDetected trigger
* Lua: Fix interactive console printing if old console not opened
* Lua: suppress the doubling up in the history file
* Lua: use of dynamic event for air/ship ops state changing (e.g. aircraft landing)
* Lua: ActiveUnit wrapper now also exposes a unit’s sensors (.sensors property)
* Lua: Added “isOperating” property to ActiveUnit wrapper

Triple whopper: Updated Community Scenario Pack with 28 new scenarios

October 16, 2020 · Posted in Command · Comment 

It has been a busy week, that’s for sure. Yesterday we had the release of the massive v1.02 update and the new Command-LIVE “Sahel Slugfest” scenario, and today it’s the turn of another Command stable, the Community Scenario Pack (CSP). Brandon Johnson (Kushan) has updated the pack with updates & refreshes to existing scenarios, as well as 28 brand-new creations. Let’s take a look:

Airstrikes on Zinder, 2025 – This scenario assumes that in the near future Niger will experience a civil war.  An organization known as the ZLA seeks to establish a separate country in the Nigerien territory of Zinder.  It has already occupied the largest city in the region, also known as Zinder, and is presently operating as a de facto state.

Assalto in Pakistan, 2018 – After the multiple terrorist attacks by Pakistan .. NATO has decided to teach him a lesson .. by sending the nearby Italian fleet.

Baltic Fury 2 – Borscht on Bornholm – In this scenario you are playing the Soviet side and are charged with conducting an airborne and amphibious landing on Bornholm. NATO is on the backfoot so this should be a quick and relatively simple operation, but it’s essential that the island is seized and secured rapidly to allow for future operations.

Carrier Hunt, 2024 – China’s surprise attack hit every US-alliances in North-East Asia. While major military assets in Japan and South Korea took severe damage by Chinese ballistic missile strikes, Chinese forces have captured the Japanese Okinawa Islands and seized control.
Although the United States and its allies have suffered significant losses, they are still far from beaten…
This is a medium, single-sided battleset scenario with a duration of 2 days. You have two US Carrier Strike Groups with mostly three anti-ship weaponry: AARGM, LRASM, and Multi-Mission Tomahawk. Your primary target is Chinese Carrier ‘Shandong’ around Okinawa.

Galveston Gets a Mission, 1960 – Nikita Khrushchev believed that the role of the Soviet Navy was to support the Army, and once referred to surface warships as “molten coffins.”  He did, however, believe that submarines, especially those armed with nuclear missiles, were a good idea.
During the Cold War, both the Soviets and the Americans used submarines to gather intelligence on each other and often tried to sneak submarines close to the territory of their rivals as possible.  They also used cruisers and destroyers to find those submarines and to chase them away.

Greek-Turkish EEZ Conflict, 2021 – In late November, 2019 a diplomatic crisis erupted between Greece and Turkey when Turkey announced it had signed a memorandum of understanding with Libya outlining their maritime boundaries. This particular dispute, amongst all of the other conflicts simmering between the two rivals involved an agreement between Turkey and Libya that defined oil right for a newly found oil field in an area Greece claimed as part of its Maritime Zone (MZ).

Hell of the East, 2019 – In this alternate future, the dispute and arguments between Turkey and the United States of America lead the Presidential Republic to leave NATO in favor of its alliance with Russia.
Due to growing military actions from the Turkish armed forces in the contested waters, Greece agreed to allow the Italian forces to field it’s air defense batteries and part of it’s air force in Greek territories and move it’s Ocean-Capable fleet in International waters.

Leathernecks are Watching, 2025 – This scenario assumes that Indonesia is going through a period of civil unrest.  Separatists in western New Guinea have renewed their efforts to force Indonesia to give them independence.
There is evidence that China is providing the rebels with financial and material support.
The rebels recently seized control of the town of Jayapura and nearby Sentani Airport.  They have also taken two groups of American civilians hostage.
The only American vessels in the immediate vicinity are a surface group centered on (LHA 6) and the attack submarine (SSN 766).

Nile Delta Strikeback, 2012 – Israeli-Egyptian relations, in a grudging peace for 33 years, have once again flared into war. The Israeli Navy has deployed in force off the Nile Delta. Opposing it is only a pair of old Romeo submarines. Command either side for a different experience.

Operation Cachalot, 2023 – Pakistan is in the middle of a civil war between the loyal moderate government and the islamic radicals and the latter are winning. European Union, with France on the front line, is helping the loyal and trying to defuse the situation. Radicals allied groups conduct a surprise attack to France forces in Djibouti and hijack the French research ship Cachalot with 50 sailors on board in the Gulf of Aden, asking for France disengagement and sailing toward Pakistan. The negotiations do not produce any useful results and in a few hours the French merchant Cachalot will reach the main Pakistani port of Karachi. The French carrier group centered on Charles de Gaulle just arrived in the area of operation and is ready to take the merchant back and teach the Pakistan radicals a harsh lesson.

Operation El Dorado Canyon, 1986 – A highly detailed recreation of the April 1986 US air strikes on Libya.
On the 5th of April 1986 terrorists detonated a bomb in a Berlin nightclub. The bomb killed 2 American soldiers and a Turkish woman and injured 229 others, 79 of whom were American.
In response, citing evidence that the government of Libya was responsible, US president Ronald Reagan ordered airstrikes against Libya on the night of April 14/15, codenamed OPERATION EL DORADO CANYON.

Operation Locusta, 1990 – Following the invasion and annexation of Kuwait by Iraq, on September 25, 1990, the Italian Government sent eight multi-role Panzer Tornado IDS fighters (plus two in reserve) belonging to the 6th, 36th and 50th Wing in the Persian Gulf. Operation Desert Shield, which were deployed at the Al-Dhafra air base near Abu Dhabi in the United Arab Emirates.
The use of Italian aircraft in the Desert Storm operation represented the first operational use in combat missions of Italian Air Force aircraft after the end of the Second World War.

Operation Northern Stork, 2018 – Four EuroFighter aircraft from the Italian Air Force took off yesterday from the Grosseto military airport to the airport of Keflavik, in Iceland, to launch the NATO Interim Air Policing operation, called “Northern Stork”. The aim of the operation is to preserve the integrity of NATO’s airspace by strengthening Iceland’s skies surveillance, which does not have the capability and autonomous air defense structures. Italy contributes, with periodic shifts with the other countries of the Alliance, to this NATO mission.

Putin’s War – In the Jaws of the Bear, 2022 – The time had come to take the war to Russia. MAG-31 was to launch SEAD attacks from its base in Norway attacking from the landward flank. The USAF aircraft in Iceland would fly a circular route north of Jan Mayan Island launching a SEAD attack with their decoys, jammers and JASSMs and the USN would follow up that attack with a Tomahawk strike on the major Kola Peninsula naval bases and air fields.

Putin’s War – Midnight Sun, 2022 – The Baltic Crisis finally erupted into a full-scale NATO-Russian/Belorussia conflict on the morning of June 6th. The Baltics and the Suwalki Gap were rapidly overrun by the evening of the 7th with Russian forces reaching Kaliningrad by advancing west along Highway A16/E28 from Vilnius to Kybartai. They then turned southwestward reaching Highway 63 in Poland on the 11th, where they paused.
Under the midnight sun on the 7th Russian air forces bombed the Norwegian expeditionary air base at Banak and ports near Nordkapp.   The war above the Arctic circle had begun…

Putin’s War – Operation Exodus, 2022 – After the onset of Russian military operations against Norway it was decided to move Norwegian Vessels, under maintenance or damaged, to Royal Navy ports and shipyards in the United Kingdom.  Norwegian and British yard workers worked 24/7 to get as many of the vessel’s systems up as possible, and propulsion back online. By the 14th escorts were in place and the exodus to the UK ready.

Putin’s War – The Bodo Express, 2022 – On the morning of the 7th Russian air forces bombed the Norwegian expeditionary air base and port at Banak, near the Nord Kapp. By afternoon Russian paratroopers had seized the air field with Northern Fleet’s 61st Naval Infantry Brigade conducting a follow up landing at the port that evening. The 200th Separate Motor Rifle Brigade crossed the Norway-Russian border that morning brushing aside the tripwire Norwegian outposts. More follow up forces from 80th Independent Motor Rifle Brigade follow on advancing west.

Putin’s War – Threading the Needle, 2022 – As chaos continued to descend upon the Baltic all three nations jointly invoked NATO Article Five asking Brussels for aide. Debate raged in NATO General Council during the late week (June 1st and 2nd) until it was proven on Friday (June 3rd) that “Little Green Men” were appearing more and more frequently in the growing civil unrest. To date, the crisis had been confined to the Baltic States but at 18:00 UTC a French satellite pass noted the Russian SSBNs getting underway from the Kola Peninsula and other satellite passes confirmed the rest of the Northern and Baltic Fleets getting ready to stand up…

Royal Problems, 1962 – Following the Coup of September, 26th, 1962. Egypt immediately recognized the newly declared Republic of Yemen. Supposedly concerned over a possible Saudi intervention from the north and a British move from the south from the Protectorate Aden, Egypt actively supported the new Republic of Yemen.
In October 1962 the situation escalated quickly as the pro-royalist forces gained more and more support from Saudi Arabia. Additionally the United States of America sent weapons and aircrafts to the Kingdom of Saudi Arabia.

South Atlantic War, 1982 – Sneaky Beakies in South Georgia – Following the successful Argentinian occupation of the Falklands Islands and South Georgia, the first steps in the UK military response was to start to gain ground-level intelligence on the occupying forces.
This scenario is playable by the UK side only and re-creates the covert insertion of SBS reconnaissance teams by the SSN HMS Conqueror on the night of 18/19 April 1982.

Sumatra Crisis 1 – Mayday, 2022 – Indonesia is under a civil war, facing separatist rebels in North Eastern Sumatra, getting extensive support from abroad, against the official government. To stop the foreign assistance, Indonesian Navy started to board and inspect some merchant ships passing through Strait of Malacca and along the western Sumatran coast that could provide help to the rebels. More than one time ships coming and going from Singapore port were harrassed, causing considerable concern and tension. After a few days Singapore Navy started patrols along their line of communication to ensure freedom of navigation. The next time an Indonesia patrol boat stops and inspect a friendly merchant, hopefully Singapore Navy will be in position to perform a show of force.

Sumatra Crisis 2 – Trade Paralisis, 2022 – After the strong Singapore reaction to Indonesia inspections and harassment to merchant traffic around Singapore, Indonesia government stopped using ships for the activity and resorted to submarines, sinking any vessel suspected to bring equipment to the rebels in the Strait of Malacca. This is a inacceptable limitation for Singapore lines of communication, heavily dependent on naval traffic transiting in the strait. A special task force is immediately assembled to hunt the enemy submarines.

Sumatra Crisis 3 – Singapore Surprise, 2022 – In a final step to reduce merchant traffic providing help to Sumatran rebels, Indonesian Navy started placing mines East of Palau Lingga Island in Malaccan Strait. Singapore Navy immediately moved heavily escorted mine countermeasures vessels (MCV) to remove the weapons and establish full freedom of navigation in the area. This time Indonesia forces are ready to react in force and teach Singapore a harsh lesson.

The Desperate Hours December, 1985 – World War Three is entering its third month. Amazingly neither side has yet resorted to nuclear weapons but the balance of power is gradually shifting. Younger members of the Politburo prevented the old guard from implementing the “Seven Days to the Rhine” plan with its first use of over 600 nuclear weapons, arguing the Warsaw Pact’s conventional forces can carry the day.
In Moscow, the balance of power is shifting, the ministers who opposed the “Seven Days to the Rhine” plan have now been discredited and the nuclear war hawks have neutralized them. NATO intelligence begins to pick up indications of Soviet preparations for a nuclear strike on the Continental United States (CONUS), Alaska, the UK and France. NATO navies are out of position for this with most forces involved in the Battle of the Atlantic and reinforcing Israel in the Med. USS Pharris FF-1094, charged with defending the GIUK Gap, and a few P-3s are all that stands between a Soviet Yankee reinforcing Soviet nuclear forces in the Atlantic and maybe the tipping point in the balance to nuclear war.

The Laser Dance, 2024 – A few hours ago, China declared war on the United States and its two major alliances in the Pacific. Right after the war declaration, a massive Chinese ballistic missile strike had initiated. Many air bases in Japan and South Korea have neutralized, their air forces in the region suffered critical losses.
When a large scale of Chinese naval activity is detected near Okinawa Island, the United States Pacific Command made a decision to save one of its hidden cards, a Surface Action Group which was conducting tests of new weaponry in the region.

The Missiles of October Part Deux, 2020 – During the Spring of 2020, the new Coronavirus “COVID-19” strain caused serious disruption to the world order and economic systems, diverting the West’s attention from military matters to lock downs, market crashes and sealed borders. Quietly ties between Russia’s President Putin and Partido Comunista de Cuba (PPC), First Secretary, Raúl Castro warmed over this period of disruption. By late May, Russian engineers began construction on a series of bunkers south of Habana (Havana) which bore a striking resemblance to similar bunkers recently completed in Kaliningrad.
In mid-August Russian antishipping missiles took up position along the Florida Straits. Between 15 to 25 September, as chaos reigned in American and European cities, several Russian ships docked in Cuban ports disgorging Intermediate Range Cruise Missiles and their Transporter-Erector-Launchers (TELs). Satellite imagery took several days to analyze, due to the virus, but by October 3rd it was obvious that Iskandar missiles were being positioned in Cuba. The clock had been turned back 58 years!

The Olutanga Rebellion, 2020 – The Philippines has long struggled with civil unrest.
This scenario assumes that a separatist group has seized control of much of the island of Olutanga.

Two Cutters in the Gulf of Mexico, 2020 – In war and peace, the United States Coast Guard wages an endless battle to protect America and Americans from criminals and, sometimes, their own stupidity.

The new community scenario pack is, as always, available for download at the WS site: , and also on the Steam workshop.

The CSP now proudly counts 549 scenarios in its stable!

Command: Modern Operations – The new simulation & editor features

October 22, 2019 · Posted in Command · Comment 

Command: Modern Operations (CMO, aka CMANO2) is coming soon! Are you ready? As part of our pre-launch coverage, we explore the main features of this new milestone release in the Command franchise.

We have already covered the massive UI/UX changes and improvements in CMO in a previous twoparter piece. We also saw the significant improvements in ground operations.  But at the end of the day, Command’s beating heart remains an elaborate simulation engine of air, naval, strategic and joint operations at the tactical and operational/theater level, together with a powerful editor for manipulating and creating with it. So let us take a look at some of the major new features in this area.


Turbo-charged for your pleasure

One of the most immediately noticeable features, especially when running large or elaborate scenarios, is the jump in performance. Command now offers both greater absolute speed in simulation execution (ie. reduced “pulse time” as displayed when the “Show Diagnostics” option is enabled) as well as significantly increased CPU utilization, as a result of improved parallelism. (As an example of the latter, on a recent trial run of “Northern Fury #9: Hold the line”, CPU load was observed fluctuating between 65%-75% on a Core i7-6700 system. This may vary across different systems, of course). Maximum practical unit count has also increased thanks to better memory management, with the result that even more massive scenarios are now feasible.


Until the COWs come home: Comms disruption, aircraft damage & new weapons

As we previously mentioned, it was decided to merge the previously DLC-locked features of “Chains Of War” to the core simulation available with Command. This allow both scenario authors and players to make extensive use of these features without any licensing concerns. We’ve covered these features extensively before, and we included cargo, amphibious and airdrop operations on our previous article on ground warfare, so here is a short summary of the others:

  • Comms disruption explores the different & numerous ways that a unit can be isolated from its parent side’s communications grid, and the repercussions of “going offline” (spoiler: none of them are pleasant). This feature has been used very successfully on COW, Shifting Sands and The Silent Service, and now it can be used on any scenario. One of the post-launch improvements of this feature is that when a unit re-joins the comms grid, the UI provides much more finegrained feedback on what type of information was updated for a contact (if any), and skips mentioning contact merges that produce no new info. Ready to feel a cold sweat as your units abruptly go out of visibility and out of your control?
  • Detailed aircraft damage is arguably the most popular feature of the bunch, enabling a much more finegrained level of damage & attrition on aircraft than classic CMANO’s “kill on first hit” paradigm. Since its original introduction, this feature has been significantly enriched with feedback from both commercial & professional users.
  • Advanced weapon types: High-energy lasers, railguns & HVPs, and tactical EMPs are now available at your disposal, to mindlessly include in the next Transformers flick use in all scenarios addressing the challenges of warfare in the foreseeable future.


Alone and unafraid: Realistic submarine comms

One of the benefits of absorbing the COW features is that now we can freely use them as building blocks for additional functionality, inserting features & mechanics that would previously require some non-trivial Lua elbow grease. Realistic sub comms are one such example.

When this feature is enabled, submarines who go below 40m depth go off the communications grid. As in other cases of comms disruption, they are no longer under direct player control, and only their last reported location is available (this BTW means that sending them deep without first tasking them with a mission may be pointless, since they will simply sit there). The player can, at any time, send a “bell-ringer” ELF signal to a no-comms submarine to recall it to re-establish comms (right-click on sub icon, click on “Summon to re-establish comms”). The sub will attempt to rise to shallow depth to rejoin (this may not be immediate, as it will try to evade nearby hostiles). Once it rejoins, the sub will share its contact updates with its parent side.


Never stray from the path

One of the more persistent problem of CMANO’s navigation AI was that its pathfinder was binary-based: Either a spot was passable by a unit, or it was not. This resulted in a tendency in units to aggressively cut corners in their plotted paths in order to travel to their destination as efficiently as possible, sometimes coming dangerously close to shore or other obstacles. This can result in some unintended “beach surfing”, as this example demonstrates:

In this case, the Freedom is placed in the mouth of the Hormuz straits and ordered to travel inside the Persian Gulf. It plots an efficient path — too efficient, as it nearly clips the shoreline at Khasab. There is a possibility that the ship may get stuck on the shore, if left unattended. Ships generally don’t navigate this way if they can help it.

To address this issue, we implemented a new cost-based pathfinder that evaluates a location’s suitability based on a number of different factors. In the case of ships, a primary concern is local depth and proximity to terrain; generally large ships tend to prefer to maximize both, while smaller ships are somewhat more freewheeling. Using this new logic, ships are now able to plot much more realistic (and gameplay-friendly) courses, as the very same example played out in CMO demonstrates:


Stay in formation

This has been a popular request, which we are finally happy to oblige: The formation editor can now also been used to define and edit aircraft formations. It sounds like a simple change, but in reality we had to go through extensive reviews of the mission AI logics to make sure that this did not interfere with aircraft assembly & grouping logics (in some places it did, and we had to make adjustments). But we think it’s worth it, and you will probably agree: This opens up new opportunities for formation tactics and optimum placement & distribution of air assets in a group, both for regular transit or surveillance as well as combat.

A patrol of four MiG-31B sweeps over the sea north of Murmansk. The group is in loose line abreast formation, to widen the search area. Lead and the nearest wingman are already in position, while the two outer members race to catch up to their stations.


I like the way you move (and think)

Various tweaks & improvements have been applied to the kinematics models & AI routines, with a strong emphasis on aircraft and missiles. Among other items:

  • Numerous tweaks to aircraft flight model, specifically for “combat” conditions. For example, aircraft no longer “wiggle” between headings as they must first roll towards the turn direction before committing to a turn. This in turn makes inherent roll-rate more important to close air combat maneuvers (This is easier to observe in the Tacview window).
  • Helicopter diving rates have been reduced (they were previously dropping like a stone)
  • Surface- and underwater-launched missiles now use the same improved pitch kinematics as air-launched missiles, resulting is more realistic trajectories.
  • Lofted AAW missiles now begin their terminal dive earlier, to avoid a too-steep approach to the target.
  • Air combat AI improvement: Aircraft now consider approaching fighters/interceptors as imminent threat, not just missiles. This helps AI-controlled aircraft perform more proactive evasive maneuvers against fighters about to perform gun attacks on them (e.g. MiG-17 vs F-105).
  • Significant change in unit AI logic: The “evaluate targets” and “evaluate threats” logics are now not performed on every sim pulse, but instead on regular intervals dictated by the OODA-Targeting (modified by crew proficiency) and OODA-Evasion values respectively. Therefore these two OODA values, combined with crew proficiency, become even more critical to a unit’s effectiveness and survivability.


Feeling the strain: Aircrew G-tolerance

If you have ever closely watched a dogfight in CMANO, one of the things that may seem odd if you are familiar with real-world ACM is the seemingly iron-man constitution of the virtual fighter pilots; they seem to be constantly engaging in turns, climbs and dives as tight as their airframes will allow them, without regard for their own fatigue from the continuous high-G acceleration loads. This isn’t how close air combat works in real life; even the best pilots need a breather between aggressive maneuvering in order to allow their bodies to recover, otherwise they become more dangerous to themselves and their side than to the enemy (yes UCAV fanboys, you can laugh now). So we set out to model this nuance in CMO.

When an aircraft is considered to be performing “combat maneuvers”, an extra UI element is shown on unit status panel:

This represents the crew’s tolerance to hard maneuvering. The longer the aircraft is continuously pulling a hard turn, the more this buffer fills up. (Getting out of a hard maneuver, e.g. reversing a turn, reduces this strain and allows recovering. This is one of the reasons that scissors are a popular practice in RL dogfights.)

Once the tolerance is exhausted, the crew begin suffering G-LOC and have to significantly relax the turn (this is easier to notice in Tacview, as the aircraft wing bank visibly changes, but you should also observe a noticeably larger turn radius on the map’s top-down view as well), while regaining their senses and control of the aircraft. Of course the aircraft is particularly more vulnerable during this recovery period, which makes cooperative tactics and mutual support all the more important. The maximum tolerance level depends on aircrew proficiency, so experienced pilots get one more significant advantage against greener adversaries (Ed: Like they need one more…).


Radar frequency agility

Not all radars are created equal. One particular feature that became quite important during the Cold War for radar performance against jamming and other countermeasures was its ability to “frequency hop”, ie. shift its operating frequency to a different value within its feasible operating range. CMO now models this, and two particular operational benefits of this ability:

  • Frequency-agile radars are significantly harder to noise-jam, as they can shift to a new frequency once their existing one gets flooded with static. The jammer has to either start hunting for the new frequency, effectively hopping after the radar operator, or alternatively flood the entire frequency range with jamming power to make hopping pointless; both counter-actions are feasible but they both have complications of their own.
  • These radars are significantly less susceptible to doppler-notching maneuvers (more on this below).

This feature became so important to radar engineering & operations from the mid-1960s that, quite often, the main difference between a very capable domestic radar set and its export-cleared variant was the physical removal of the frequency-hopping circuits in the latter kit.

As in other cases, electronic-scan arrays and especially AESAs get massive advantages; in this case, all P/AESAs are automatically considered as being frequency-agile, while older mechanical-scan sets have to explicitly have this declared in the simulation databases.


A notch on the bedpost

Doppler notching, a maneuver designed to exploit a fundamental flaw in pulse-doppler radars in look-down mode, has been included until now abstractly in CMANO as part of the weapon endgame calculations. This time, however, it can be actively and preemptively used as a maneuver, both for missile track lock-break and for general surveillance radar detection avoidance.

Aircraft can attempt to fly perpendicular to an emitter using doppler filtering in order to hide inside its “blind” velocity gate. The effectiveness of the maneuver varies with crew skill (an “ace” pilot will execute it far more effectively than a novice), to discourage manual micromanagement by players. Aircraft under missile attack with a doppler radar guiding the missile will also actively try to beam the radar instead of the missile (the geometry of the two axes can vary significantly). The maneuver is ineffective against pulse-only radars and less effective against frequency-agile radars.

Players can also deliberately plot courses for aircraft that fly perpendicular to known PD search radars, to reduce the actual detection range. (If you’re a Microprose F-19/F-117 virtual vet this may bring back some memories).


Patrolling in style

This has been another popular request: “I like the flexibility of the patrol mission, but sometimes I want to enforce my custom patrol movement patterns instead of the ‘random within defined area’ logic, even at the cost of predictability”. Well ask, and ye shall receive – in the form of an extra patrol mission option: movement style.

This option has two settings: “Random within area” (default) and “Repetable loop”. “Random within area” is the patrol behavior you are already familiar with. If “Repetable loop” is selected instead, the assigned units treat the reference points of the patrol area as a racetrack, just like in a support mission. This allows the player (or scenario author) to define precise, consistent patrol patterns (figure-8, expanding spiral, ladder etc.) while also retaining the “investigate & prosecute” behavior that distinguishes patrol missions from support ones.

When the “Repeatable loop” setting is active, the patrol area is depicted very similarly to support mission racetracks, to emphasize the difference:


Till death do us part: Merge scenarios

This is another gift from the PE world, and we bet it will be a much-appreciated one. If you are a scenario author, you are already familiar with the base & group import/export (ie. the .inst files), and how convenient and time-saving they can be when putting together the elements of a scenario. This “construct once, re-use everywhere” concept has now been taken a step further: You can make individual scenarios and then merge them into a single scenario.

Scenario #1 is treated as the “base” for the merge, so behind the scenes you are essentially cherry-picking all transferable items from scen #2 and adding them to scen #1 (the log output also makes this clear). Elements that are “atomic” or otherwise hard to merge (date & time, weather, title & description etc.) will, on the output, be those of scenario #1.

The power & versatility of this tool should be readily apparent to anyone who’s delved in scenario editing. Now you can create once, store and re-use not just groups or bases, but multiple foundational scenario elements: Sides, missions, events, actions, conditions etc. We have been repeatedly amused by the wacky, quite unforeseen ways the original import/export functionality has been employed by industrious scenario creators, so naturally we are curious to observe how they’ll bend this one to their will.


Lua loco

The Lua API continues its expansion in CMO and offers additional hooks into the simulation engine as well as various methods for pulling the strings of the running scenario. One of the new hooks ties directly into the AI model: You can individually instruct units to, quite literally, not think for themselves (You in the back, quipping “you mean they do this now?” – SIT DOWN!). More specifically, you can set individual units to skip their AI routines for evaluating valid targets and picking out the primary one among them. This has two direct benefits:

  • It makes it easier to implement custom targeting AI routines in Lua, since an author not longer has to “compete” with the build-in AI for this.
  • As these routines are among the most CPU-expensive pieces of the simulation pipeline, disabling them can have a drastic effect on the speed & scalability of a large scenario. For example, if you disable the AI cycles of all static/inactive buildings, then only “active” units will use the CPU for this work (internally Command already does a lot of such optimizations, but since it cannot “intrinsically” know which units are static & inactive, it has to check them, which itself is not free).

Additionally, this ability can allow simulating “dormant” states for units (e.g. units begin a scenario in a “comatose” state, but later because of XYZ they become activated).

Stay tuned for more articles & news on Command: Modern Operations soon!

Next Page »