Desert Shield Simulations Part 2

Part one

For the first set of naval trials, I put the USN in an awkward position. The Iraqis used a “tethered intercept” from an airbase near Basra, while the American F-14s launched from a carrier on the other side of the Strait of Hormuz. This situation was far from ideal, and reflected the highly justified reluctance to move the carriers into the closed Gulf itself. I used lighter loadouts for the F-14s, signifying a decision to trade maximum firepower for on-station time (after all, only two AIM-54s and three AIM-7 missiles are better than zero of each because your CAP had to run back to the carrier and the attack occurred in that off-guard moment)

A series of engagements occurred. I varied them in technical violation of proper “science”, because air combat is unpredictable, and I didn’t want to see two fleets of robotic random number generators fighting to complete attrition. The engagements using my handicapped settings (high proficiency for Iraq, and no manual designation of hostile for USN) ranged from a 2.1-1 kill/loss ratio in favor of the USN to a 1.6/1 ratio in favor of the Iraqis. The average was a 1.2/1 in favor of the US. Running a “generous case” (lower Iraqi proficiency and being more generous with BVR shots), gave me a 1.9-1 ratio in favor of the Americans.

The tactics used for the USN were poor too. No jammers, no forward-deployed “red crown” ships to lend their powerful sensors, and they did a too-close patrol with reinforcements from the carrier far away. With full hindsight, keeping the Tomcats back but using a prosecution area to perform their mission of fleet defense while minimizing the danger of just such a surprise bounce would be a far better strategy.

Running the sim, compared with the experiment over Saudi Arabia, shows the comparative advantage the USAF had at long-distance identification at the time over the US Navy. Yet even in the worst-case scenarios, the USN could withstand its losses far better than the Iraqis.

Next I moved on to anti-ship scenarios. For gameplay ease, ships patrolled off the coast of Kuwait, around fifty nautical miles out. Even against low-end vessels like the Perrys, iron bomb attacks were fruitless-six MiG-21s were sent out, and all six were shot down. An Exocet attack showed the hit on the USS Stark was no fluke, as the missiles could overwhelm even a ready Perry (which the Stark was not).

The first attempt to use land-based HY-2s to attack a Perry were unsuccessful, given their size and clunkiness compared to the lower-flying, stealthier, Exocet, but it was still a close and terrifying call. The second attempt was successful.

Those cases involved “historical” levels of Iraqi anti-shipping capability-even during the Tanker War, the Iraqi air strikes were frequently small and ill-conducted, and the only strike effort in the Gulf War involved two Mirages. I did use ahistorical coordination for repeated plane vs ship encounters. For attacking a Spruance destroyer, a hit was scored with Exocets with a four-Mirage unit, but two-Mirage ones were difficult.

Against a baseline Ticonderoga, I threw twenty-four Exocets from twelve Mirages at it. The missiles overwhelmed it from a short range. The same cruiser-with the benefit of an F-14 CAP and E-2 support-, suffered only one near-miss (that still damaged it). This showed that even against a prepared opponent, the Exocet threat was still dangerous-but it also showed the attrition factor-the F-14’s shot down five of the twelve participating in the attack, doing irreparable damage to one of Iraq’s few capable platforms. Furthermore, had there been another ship with the Ticonderoga or the CAP been slightly bigger, even the single leaker would not have made it.


-The worst-case fears of coalition naval planners were justified. Although requiring ahistorically good coordination, the anti-shipping assets of Iraq did allow for a battle that would be more than a turkey shoot.

-However, General Horner’s worst-case prediction of the air war-that they could do some damage before being ground down, but would be crushed nonetheless, holds true as well for any encounter at sea.

-This is especially true considering that only the missile-carrying aircraft have any practical capability to attack at all.

-The USN’s comparative lack of target recognition compared to the Air Force at the time (which led to it only obtaining three claimed kills in the actual war) is apparent.

-Interdiction of sea lines by Iraq was not directly attempted in the experiment, but seems difficult if the Coalition puts a substantial barrier/blockade of ships and naval aircraft near Kuwait and is willing to risk them for the sake of defending its logistical assets unloading farther away (as they probably would in the event of a serious war).

Desert Shield Simulations Part 1

What if Saddam Hussein had attacked south into Saudi Arabia during the early phases of Desert Shield, as commentators on the Gulf War unanimously say was the only opportunity to do more serious damage?

Command is not the right choice to model ground combat to the necessary degree that would show the truly most important part (the ground war). However, it is capable of modelling the air and naval war. As Iraq’s naval capability was negligible, the air engagements are the most important. However, the attack would be a monumental struggle. Two massive factors stand over any hypothetical conflict. These are:

  • The US-led coalition quickly deployed advanced fighters en masse. F-15Cs were among the first fighters to reach the Arabian Peninsula, and they outclassed everything in Saddam’s arsenal, whether by a little (MiG-29, Mirage) or a lot (everything else). The crews had enjoyed a decade of lavish funding and more detailed training than ever before, so even if the crew proficiency for the Iraqis is handicapped upwards, they will be facing equally skilled opponents.
  • The Iraqi Air Force was simply not built for sustained air control and support of an advancing ground army. The majority of its platforms, even modern ones like MiG-29s, were short-ranged. The offensive actions undertaken by it during the Iran-Iraq War involved small, comparatively-piecemeal strikes against single targets. The only real long-range assets (Tu-16s and Tu-22s) were both small in number and vulnerable.

With this in mind, if I was playing Iraq in a hypothetical staff wargame of this, my choice could very well be to not use the air force offensively except in cases of desperation. The air force would remain more useful as a defensive force to guard the vital logistics from the inevitable massive attack. The short-range platforms can be used in their element, the army is supported to a greater degree than a few high-risk strike sorties can provide, and it can perform a useful role in spite of the high losses.

But I will be modelling offensive strikes by the IQAF in my study of it in Command. I intend to do a set of sims. The results will be expressed in Part 2.

The methodology is as follows.

  • For the purpose of efficient scenario creation, only the “necessary” assets will be made. This takes away from strict realism, but allows more battles to be created.
  • The Iraqis will have proficiency of “regular” with a few “veterans” and the occasional “ace” for the non-Mirage fighters, and “Veteran”/”Ace” for the Mirage F1s. The Coalition will be all over the place depending on nationality and context.
  • I hope to illustrate a “defensive” engagement of supply lines in Kuwait proper, an “offensive” strike against targets in Saudi Arabia, and attacks on Coalition ships.

Once enough trials have concluded, I’ll publish the results in a subsequent post. For now, I offer the first engagement.

A force of American F-15s, 25 in total, with most set to “Regular” were placed on an AAW patrol over Saudi Arabia. “Regular”/”Veteran” MiG-29s and “Veteran”/”Ace” Mirage F1s were set up on an automated intercept mission. This was a “pure” artificial mission (The Iraqi planes even took off from an airfield in Kuwait to eliminate any range issues) and had a huge confound in that the American planes had a patrol area that only stayed over Saudi Arabia.

The result of Trial 1 was a 1.7-1 kill/loss ratio.: 17 Mirages/MiG-29s lost, 10 F-15s lost.

-The Coalition still had a positive kill/loss ratio in spite of handicaps to the Iraqi side.

-This suggests (with all the necessary caveats that an artificial simulation brings) that early-war Iraqi incursions into Saudi airspace would result in contesting of the air for at most a few days at the cost of all of their capable platforms.

-As an aside, more AIM-7s were fired in the single-day engagement in than in the entire actual Gulf War.

Part two

Cold War Battleships – Platforms That Never Were

As the USSR began its forced-industrialization in the 1930s, warships were on the list. Stalin’s plans included a grand fleet of battleships. Command makes this historical footnote playable, and thus a look at the navy is worth it.

By the time of the revolution Russia’s navy was a shambles, wrecked in World War I and the earlier conflict with Japan. Losses in the civil war continued this miserable trend, and a much higher military priority was given to readying the land forces.

Yet the capital ship program continued. Even though Soviet industry could barely build cruisers, the battleships were still laid down. One extensive study on the program suggested that Stalin’s infamous deal with Germany was due in part to further the buildup since it had few other potential partners. (The Soviets even ordered two cruisers right from German yards, a fact made ironic by the recent fate of the Mistral amphibious ships they planned to acquire.)

In World War II, large warships would only be a waste of resources given that the war was decided on land. Stalin continued a now-anachronistic buildup after the war ended, but it progressed haltingly, and Khrushchev wasted little time in cancelling the Stalingrad battlecruisers and halting the purchase of Sverdlov gun cruisers.

The Soviet Navy would become the largest inherently asymmetric warfare force in the world, focusing on submarines, aircraft, and heavy missiles to conduct a sea denial mission rather than futilely trying to match the US in carriers.

Command contains the forces of the big-fleet. Stalingrad and Kronshtadt battlecruisers, October Revolution battleships (then you could have a real “hunt for Red October”), and several classes of carriers. There are also missile upgrades to salvage the big-gun ships.

The western powers already had their big fleets of battleships, however they would not be in service for most of the Cold War. Historically, the only long-standing ones were the Iowas. But the CWDB contains quite a few conversions of the Iowa, Alaska, and Vanguards into missile ships. In keeping with the naval doctrine, most of the conversions were “defensive” ships with SAMs to protect carriers and other high value units, opposed to the Soviet “offensive” ships with large ASMs to attack said units.

The most intriguing conversion is one that turned an Iowa into a heavy assault ship with the ability to deploy helicopters and landing craft. While still not the most practical (landing ships don’t want to go any closer than they have to, while battleship guns still have a limited range), the raw cheesiness of the ship gives it an appeal. There’s just something -interesting- about seeing 16 inch shells and attack helicopters roaring off the same ship.

(Also interesting are the nuclear missile monitors, but those would be made even more obsolete by SSBNs very quickly)

What could plausibly bring the western battleships back to life? That’s the biggest problem.

Battleships are huge and resource-intensive, and the missiles they carried could be (and were) fitted aboard cruiser hulls. For a US Navy still being overloaded by SAC during the time of the proposed upgrades, it made more sense to go with a ship that had a fifth less the displacement and half the crew. There is one military (as opposed to political pork for the shipyards) reason for the conversions, and that could be as a stopgap to get as many missile hulls into the navy as quickly as possible.

The circumstance can easily be determined-in a minor war, either jet bombers or early anti-shipping missiles score a powerful hit on a legacy ship, which triggers a panic that leads to the conversions. The luckier of them may see a bit of action in Vietnam or another Cold War crisis, but most will plausibly, once more cost-effective ships enter service, be sent to the scrapyards, having gone from hypothetical curiosities to historical curiosities.

Command 50% off!

Command: Modern Air/Naval Operations is currently 50% off on Steam and Matrix for this weekend only.

Over the last few weeks I’ve been making Command Tutorials for folks new to Command to get up to speed quickly.


Kushan Command Stream

One of my pals Kushan is going to be doing a Command stream this weekend,  Saturday 11 AM PST.

Link to stream:

Random Lua Elements-How, When, and Why

When I saw the Lua tutorial video showing how it could be used to make random elements in Command, I was excited. My excitement diminished as I started making an overambitious scenario involving random Lua and recognized both the limitations and difficulty. But with that lesson in mind, I continued using random Lua.

While still frustrating at times, in part due to me not being a programmer, I found the benefits to be worth it. (Ckfinite, who is a programmer, has been a great help in getting my Lua efforts to work, and has provided many necessary technical corrections to this post. )

Event Editor vs. Lua.

So, in layman’s terms, the existing event editor allowed for an “either or” option. Operation Square Peg: Syrian MiG-29s are sitting at Damascus International, and a probability event fires to see if they’re dumb enough to mess with F-22s. The “attempted intercept” mission switches from inactive to active, and that’s all it can do.

Lua would allow that same group of MiG-29s to either all take off,  none of them take off, have a portion of them take off, or have them take off to fly to another airbase rather than engaging the attackers.

How To Make Random Lua Events

First, a necessary warning is in order. Even with the best scripting available, the random elements will still not be as random as you’d probably think they’d be-and the effectiveness of a simple “math.random” can vary a lot by computer.  Thus, one should have modest expectations.

That being said, now onto the detail of the scripts.

-First, use the event editor. The script will be typed/copied into the “action”, and the trigger will be at the start of the scenario. You can either do the more recently added “scenario loaded” trigger or a classic “scenario start + 1 second time” one. I’ve used both and personally find the latter a little easier to handle.

To help prevent a “stuck” result, one can use a random seed generation. The example is math.randomseed( os.time() )

However, it is vital not to overseed. Only make sure the randomseed activates once at the beginning of the scenario. (For my existing scenarios, which have only one random script at the beginning anyway, it’s not such a big deal, but for a scenario with, for instance, repeated random spawns, do not use a randomseed in each spawn event)

Now for the random elements themselves. I’ll begin with the sub generation event from Best of the West, Worst of the East, touched up a bit:


math.randomseed( os.time() )
a = math.random(1,2)
if a == 1 then
  ScenEdit_AddUnit({type='Sub', side='USSR', name='B-23', dbid='187', latitude='49.3812997111192', longitude='-36.8903957715054'})
elseif a == 2 then
  ScenEdit_AddUnit({type='Sub', side='USSR', name='B-25', dbid='147', latitude='49.3812997111192', longitude='-36.8903957715054'})
a = math.random(1,3)
if a == 1 then
  ScenEdit_AddUnit({type='Sub', side='USSR',name='B-10', dbid='278', latitude='50.52351341355', longitude='-37.177899984719'})
elseif a == 2 then
  ScenEdit_AddUnit({type='Sub', side='USSR',name='B-15', dbid='278', latitude='50.52351341355', longitude='-37.177899984719'})
elseif a == 3 then
  ScenEdit_AddUnit({type='Sub', side='USSR',name='K-115', dbid='391', latitude='50.52351341355', longitude='-37.177899984719'})

a = math.random(1,3)

if a == 1 then
  ScenEdit_AddUnit({type='Sub', side='USSR', name='K-18', dbid='159', latitude='49.8531552461574', longitude='-36.2143146634912'})
if a == 1 then
  ScenEdit_AddUnit({type='Sub', side='USSR', name='K-16', dbid='363', latitude='50.1531552461574', longitude='-36.3143146634912'})
elseif a == 2 then
  ScenEdit_AddUnit({type='Sub', side='USSR', name='K-5', dbid='363', latitude='50.1531552461574', longitude='-36.3143146634912'})
ScenEdit_AddUnit({type='Sub', side='USSR', name='B-8', dbid='287', latitude='48.9941488964394', longitude='-35.8765853708755'})
a= math.random(1,2)
if a == 1 then
  ScenEdit_AddUnit({type='Sub', side='USSR', name='B-7', dbid='287', latitude='50.051014008713', longitude='-41.5623833495527'})
a= math.random(1,50)
if a <40 then
  ScenEdit_AddUnit({type='Sub', side='USSR', name='B-104', dbid='187', latitude='49.4764836877471', longitude='-38.8365478377241'})
elseif a>=40 then
  ScenEdit_AddUnit({type='Sub', side='USSR', name='K-474', dbid='117', latitude='49.4764836877471', longitude='-38.8365478377241'})


What all that code represents is the following (on-paper) formula:

-50% chance of either a weak Foxtrot or much stronger Kilo being included.

-2/3rds chance of a Juliett, 1/3 chance of an Echo II.

-1/3 chance of a low-tech but fast November

-A Hotel II SSN mod will always appear, but its name will be different.

-A Whiskey named B-8 will always appear.

-A Whiskey named B-7 has a 50% chance of appearing.

-A Foxtrot has a 4/5ths chance of appearing, and a Charlie II a 1/5th chance.


You can try this in the console-all you need is the DB3K and a side named “USSR”. Go and see what subs come up. As you can see, this is a large series of Math.random commands, accompanying basic Scenedit-addunit scripts.

Remember to:

-Make sure each math.random is “contained” with its own end line.

Changing AI Missions:

Now for the Lua script in They Came From The Museum.


math.randomseed( os.time() )

a = math.random(1,10)

if a<5 then

ScenEdit_AssignUnitToMission(‘Ukrainian Flanker #1′, ‘NONE’)

ScenEdit_AssignUnitToMission(‘Ukrainian Flanker #2′, ‘NONE’)

ScenEdit_AssignUnitToMission(‘Ukrainian Flanker #3′, ‘NONE’)

ScenEdit_AssignUnitToMission(‘Ukrainian Flanker #4′, ‘NONE’)

ScenEdit_AssignUnitToMission(‘Ukrainian Flanker #5′, ‘NONE’)

ScenEdit_AssignUnitToMission(‘Ukrainian Flanker #6′, ‘NONE’)

elseif a>=5  and a<8 then

ScenEdit_AssignUnitToMission(‘Ukrainian Flanker #1′, ‘Close Patrol’)

ScenEdit_AssignUnitToMission(‘Ukrainian Flanker #2′, ‘Close Patrol’)

ScenEdit_AssignUnitToMission(‘Ukrainian Flanker #3′, ‘Close Patrol’)

ScenEdit_AssignUnitToMission(‘Ukrainian Flanker #4′, ‘Close Patrol’)

ScenEdit_AssignUnitToMission(‘Ukrainian Flanker #5′, ‘Close Patrol’)

ScenEdit_AssignUnitToMission(‘Ukrainian Flanker #6′, ‘Close Patrol’)

elseif a>=8 then

ScenEdit_AssignUnitToMission(‘Ukrainian Flanker #1′, ‘Aggressive Patrol’)

ScenEdit_AssignUnitToMission(‘Ukrainian Flanker #2′, ‘Aggressive Patrol’)

ScenEdit_AssignUnitToMission(‘Ukrainian Flanker #3′, ‘Aggressive Patrol’)

ScenEdit_AssignUnitToMission(‘Ukrainian Flanker #4′, ‘Aggressive Patrol’)

ScenEdit_AssignUnitToMission(‘Ukrainian Flanker #5′, ‘Aggressive Patrol’)

ScenEdit_AssignUnitToMission(‘Ukrainian Flanker #6′, ‘Aggressive Patrol’)



This is all part of a single “math.random” element, so unlike the submarine example, there’s no need to punctuate it with “Math.random (_,_), ends. If A is 4 or less, the Ukrainian Su-27s just stay at their base and don’t participate in the battle at all. If it’s 5 to 7, they launch, but do so as part of a timid patrol over their own heartland. If it’s 8 to 10, they are assigned to a patrol which has a large prosecution area.

Note that, for the extra work, making sure there’s an option to explicitly remove the units from the missions is essential-especially if you’re using a “scenario loaded” startup event. Otherwise, if it activates “Close Patrol” and the scenario developer saves, and it rolls a 3 next time, rather than cancel the mission, it will just stick with the status quo (in this case, ‘Close Patrol’)-so include a “Assign to none” option.

Also, I got tripped up by the numbers when making the script. Make sure there’s no overlapping values.

For both, you can accomplish this with a ScenEdit_Addunit(Name1) and a Scenedit_AssignunitToMission (Name1), (Mission1) command in the same script. A simple version involves going to the Bering Sea, making a patrol with the exact name NorthPatrol (no spaces), and running the following.

ScenEdit_AddUnit({type=’Ship’, side=’USN’, name=’USS Joachim Pease’, dbid=’562′, latitude=’57.9134536696492′, longitude=’-165.17805145352′})
ScenEdit_AssignUnitToMission(‘USS Joachim Pease’, ‘NorthPatrol’)

This should create a Bainbridge-class cruiser called the “USS Joachim Pease”, and immediatley assign it to the “NorthPatrol” mission (whatever that is)

Pitfalls and Promise

Best of the West, Worst of the East was a sour first start-not unplayable or unreleasable, but a learning experience. There were technical issues (the earliest Lua release had a tendency to get “stuck” on certain combinations, since fixed, especially with randomseeds added), and gameplay ones (I’ve felt I was so obsessed with the random Lua part of the scenario that I neglected the actual playtesting of it.)

Beyond that, there were issues where I felt wrong. First, in my quest to make as random and diverse a fleet as possible, I went too far from the original concept of seeing how capable the older submarines of the USSR were. A Kilo is not anyone’s idea of the “worst” sub, and neither is an Echo with heavy ASMs.

While specific details like those could be easily fixed with changes to the spawning script, I felt the issues went deeper than that. Simply making the random units happen on the player’s side at the very beginning of the scenario had its issues. This is double the case if the random units are extremely varied, as was the case in that scenario. A win-at-all-costs player could easily reload the scenario until they got the best units, and even someone who took what the scenario gave them would have the experience differ drastically based on nothing they did.

So when I next turned to Lua, I chose to limit it. Only a small portion of the scenario was actually affected by the random script, it occurred on the opponents side rather than the players, and two out of the three outcomes were not immediately obvious.

Such an experience was a lot more satisfying-adding just enough variance to a scenario without consuming it. While there are of course exceptions to every rule, my general principle after the Lua scenarios-and by seeing variance in other games-is that they should alter the difficulty or direct experience but not fundamentally change it so that its outcome becomes more determined by the random changes than by the player’s actions.

Another advantage a Lua script has over a conventional event is that it’s more easily hidden without the need to change message settings. “Event A was triggered but not fire-failed probability check” is displayed right there, but Lua just gives “Event A has been fired”, while the real roll is not noticeable (right away).

One should start small with Lua and not get discouraged, for it can do so much.

Geography and Scenario Locations

There’s nothing in the editor constraining the geographical deployment of units in Command. If I want to put ten airfields full of B-52s in Bulgaria, I can do that. But even if there aren’t hard-coded restrictions on units in Command, there’s a lot of factors that push scenarios to specific areas.

The two biggest factors are:

-Objectives. Unless it’s an open-ocean scenario (more on that later), it will be focused around the objective. So if the objective is in one country, then that’s where the scenario will have to take place. Of course, the objective could be ships at sea, in which case it’s the waters they could conceivably be in.

-Capabilities. The US Navy deploying carriers around the world is quite different from two small nations participating in a war with only short-ranged planes and boats at their command. So while the American carrier launching strikes against a target in Central Asia is able to be in multiple locations, the Uzbek airfield also launching strikes cannot be, with the limitations that implies.

Open-ocean battles are a unique experience. They can be thought of as either broad area-scenarios, or as scenarios whose locales are still specific, only specific in an expansive way. Open-sea scenarios change the objectives from geographical areas (i.e, gain control of the water around Iceland) to ships (i.e, either escort the convoy across the ocean safely or sink it). This is because there’s little point in just venturing out into the sea for its own sake. These game-changers and the huge areas involved give them a unique feeling of play.

Then there’s the issue of “exercise scenarios”, which involve fictional nations. Most of these take place in the nation where the exercise’s “Blue Force” originates in, understandable given Blue’s normal objective of defending itself. A few times exercises take place seemingly in random locations, whether to use a certain type of terrain or for ease on the part of the scenario creator.

So there’s nothing strange about scenarios seeming to take place in certain areas often-some areas just are important and simultaneously in the reach of the combatants. The archetypical example of this is the GIUK gap. Because it is an extremely important objective (controlling access to the Atlantic from the Russian mainland) and within the capabilities of both sides to reach (Just within range of Soviet land-based aviation and plentiful NATO bases in the UK, to saying nothing of submarines), it’s not surprising that in real life and fiction alike, it has been the center of naval strategy.