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.


The Range of Results in Scenarios

While making a post on the Steam forums (probably against my better judgment) defending the plausibility of Command, I pointed out that in two my scenarios I frequently achieved similar results to comparable historical battles. The two were Regaining Honor and They Came From The Museum.

 They Came From The Museum

Average loss when playtesting: Two aircraft, one day. Sometimes more due to the “endgame-factor”

Compared to: Russo-Georgian War, Russia loses six aircraft, maximum of four in a day.

Commentary: The “museum men”, using Soviet-surplus aircraft against an air defense system of a similar level, albeit an ill-maintained one with sloppy crews, suffer an average of two to three losses in the day of battle. Russian aircraft of a similar vintage in the war with Georgia suffered a maximum of four in one day, but the biggest source of losses (friendly fire from jittered ground troops) is not an issue, due to the nature of the scenario.


Regaining Honor

Average loss when playtesting: ca. 20 Yemeni aircraft, 0-4 American aircraft

Compared to: Desert Storm: 1 confirmed coalition air/air loss, 20-30 Iraqi air/air losses, several close calls.

Commentary: This is interesting, for even though the opponents are similar, the American circumstances are quite different. On the plus side, they have AMRAAMs, and later models of said AMRAAM than the early 1990s versions that barely missed the real Gulf War. (These, of course, are still failure-prone: I’ve had an old jammer on a Yemeni Su-22 successfully decoy a futuristic AIM-120D in a playthrough).

On the minus side, there are a lot fewer American fighters and – more importantly – they’re armed with fewer missiles in their loadouts, with a “the most air resistance we’ll meet is a few fighters that’ll probably just get the hint and turn back” mindset vs. “multiple squadrons”.

Losing all your fighters with no kills is quite possible-one point I’ve found is that nearly all my four-kill (I’ve never managed any more) scenarios occurred in an awkward spot where the Americans had run out of ammo, but before the next wave of patrolling fighters could quite get there (once they do, the YAF is toast). This is of course the scenario any aviation commander dreads, regardless of their total overall strength, and one of the reasons why Horner and Schwarzkopf put so much effort into creating their “Big Blue Blanket”.

So, we’ve gotten similar results. But I’d want to examine range in a little more detail. One of the inspirations besides the Steam argument was the post by a developer about such ranges, and the dangers of trying to “fit” an exact historical situation at the expense of flexibility. (Ironically, a Bekaa scenario draft was posted, and AAR logs show the Israelis losing a few more fighters than they did historically).

Results are one thing, but analysis of the true range can go beyond them.

-If an endgame calc happens at all, that’s a sign of vulnerability. Yes, an 80% final chance of hitting is different than a 4% one, but it still indicates a threat is there, that isn’t in a less advanced scenario where the enemy never gets a chance to attack. So you dodged the missiles, but that they had a chance to hit means you were a few dice rolls away from disaster.

-Range concerning historical accuracy is one thing, but so is range concerning scenario difficulty. Everyone will find some scenarios to be more or less difficult than others, so it’s important that the designer go for a range rather than a specific exact difficulty.

-A lot of the range depends on the scenario designer’s intentions. Often when making a scenario, I go “do I want this to be hard or easy”. If I go with “easy” it doesn’t mean I make it a no-loss stomp, but if I notice that say, one component is relatively ineffective, I don’t try to change it to make it deadlier. If I go with hard, it means that if I lose a lot of equipment while testing it, I don’t necessarily change it. (if I do change anything in either , it’s frequently altering the scoring criteria rather than anything in-game).

-For gauging the range, it helps a lot to know what the range historically was. I’m especially thinking of air-to-air missiles. A lot of pop-culture media gives the impression of said missiles being incredibly accurate (especially if it’s anything American fired at anything non-American). In truth, the AIM-7 never had more than a 33% success rate against even the easiest targets, while the AMRAAM has had a circa 50% hit rate against similarly weak opposition (and some notable misses like one incident over Serbia where a MiG-29 dodged them repeatedly). With that in mind, missile rates don’t look so surprising.

-The game comes full circle when you go into completely hypothetical scenarios. Instead of speculating if Command matches the engagement, there’s speculation if the engagement would match Command.

Platforms That Never Were: F-20

The F-20 started off as an upgraded version of the F-5, a low-end fighter that had enjoyed great quantities of export success. The F-5 saw only limited use (largely as an “aggressor” trainer) in US service, but was used extensively by the South Vietnamese and Iranian air forces.

The F-20 grew more advanced, to the point where it kept the basic appearance and layout of the F-5 but little else. Promoted as an economical, reliable fighter, it nonetheless attracted only tentative sales that were cancelled when it was clear the production run would not be large enough to be profitable.

Was the F-20’s fate cruel, a can-do little fighter sacrificed for the sake of shallow shininess? Maybe. First, it was always a “loophole” fighter, being most intensely pursued during a period of Carter administration policy that prevented the widespread export of “first-line” equipment. Once the F-16 could be sold to more than just the closest allies, it was. For all of the advances of the F-20, it was still an older design compared to the much newer and more upgradable F-16.

A RAND Corporation study on the F-20 was somewhat sympathetic but still remained skeptical. The paper noted that the claimed serviceability and reliability figures were from a handful of prototypes in an environment where any fighter could be made to look good (rather than many fighters in a field environment, or, in the case of the F-16, actual combat over Osirak and Lebanon). Also, it noted that by trying to match and even exceed the F-16, the Tigershark was getting more and more complex.

Finally, while the US Air Force did have a vested interest in getting as much of an economy of scale for the F-16 as possible, this was not necessarily a bad thing. A huge dual F-16/F-20 buy for the Air National Guard would have created logistical issues and given the appearance of even more pork politics in an industry already notorious for its porcine qualities.

With the addition of the F-20 to the Command Database, it can be used. The question is who would use it? The plane historically was shopped around to nearly everyone from India to Venezuela.

The most obvious users of the F-20 are:

  • Users of the F-5 replacing it with the F-20.
  • Air Forces that historically bought the F-16, but chose the F-20 instead.

If one is willing to be more fanciful, it can be put in the hands of anyone not politically wedded to non-Western aircraft. One paper even proposed donating two hundred Tigersharks to mainland China to pin down greater numbers of Soviet planes away from the European theater.

As for whether it would be a good choice, well, that’s for the scenario designers and players to find out.