Simulating the Sinking of the Moskva

On 14 April, 2022, a pair of Ukrainian Neptune ASM missiles struck the Moskva, fatally wounding the flagship of the Russian Black Sea Fleet and leading to her demise hours later.* How is it that a warship fitted with an able and capable SAM system, CIWS (close in weapons system), in a war zone, can be knocked out with so little difficulty? Lets model this in CMO and see what it looks like.

“*” – Actual details murky, we’ll try to address that.

So how did we go from that?

To this?

First off some basics, the Moskva is old. 40 years old. In ship terms this is a life time. Most of her sensors are 70’s and 80’s era. The VLS system, visible between the super structure billowing smoke above, and the secondary structure with the radar, contains the potent S-300 SAM system. We’ve seen Ukraine use this to good effect as well as the Russians on land.

The specific details of this engagement are fuzzy. Was there only 2 Neptune’s? Or did only 2 strike? Was there a drone providing target information? Did the Russians even use the fire control radar or did these missiles strike without warning? Was there Grisha escorts that also fired on the incoming Neptune’s?

The Neptune is a Ukrainian upgrade/clone of the SSC-6 Bal, or KH-35. A max range of about 80 nautical miles delivers 145 kg of explosive and incendiary package just 30 ft above the sea.

edit : 20 APR 22 Added a section about the engagement height and the Gecko SAM system.

Simulation Basics

First off, this is all in Command Modern Operations, check it out at Matrix Games or on Steam. I’ve placed the Moskva barely within range of the Neptune as well as a Bayraktar TB2 drone nearby. Sea state is a 3, close to what the weather is supposed to have been. It’s night, and for our first run we’ll assume max technical competence.

So lets get the elephant in the room up front. Russia has been like an 800 lb Offensive Lineman who tied his shoelaces together and shit his pants. In the war game community we’ve assumed a certain threshold of competence. You have to assume your opponent is a threat, and a deadly one at that. Not until an event like this comes along would you think otherwise.

Really, go back a year ago, and if someone told you that the Russian Black Sea Flagship would get sunk by two untested ASM’s you’d call me nuts. But here we are.

For the first run I’m turning on all the radars, assuming base competence, and we’ll work backwards from there. The yellow ring is the surface sensor range, and the light blue circle is our detection range for a target coming in at 30 ft ASL.

Right as predicted we detect the incoming vampire. In this case the Top Dome (Fire Control Radar), Top Pair (Search Radar), and Top Steer (Search Radar) sensors.

At about 14nm the S-300 fires.

One Neptune is intercepted at 12nm out, the second at 5nm out. Even if a giant fireball erupted from the interception I’d say there’s almost no chance that any debris could strike the outboard missile tubes on the Moskva. I’ll call that one survival.

The OODA Loop

Now let’s simulate some incompetence!

The OODA loop is Observe, Orient, Decide, and Act. First we need to see the threat. Then we orient to it. Then we decide how to respond. Lastly we respond.

local a = ScenEdit_SelectedUnits()
for k, v in pairs(a) do
    unitMoskva = (v[1].guid)
local unit = ScenEdit_GetUnit({guid=unitMoskva})

There’s a bit going on here, first I select the Moskva and run this. That’s the first line, it gets me the info on the selected unit. Then I pull out the ID from a table and get all the info. It spits out the OODA values, which gives us :

{ detection = 15, targeting = 8, evasion = 2 }

Targeting has the biggest impact in this test, as that’s the delay in how long it takes for our system to actually engage. Detection makes less difference as the radars or sensors do the work. Lastly evasion is not much of an issue as this is a boat. It’s slow.

So lets bump this up a bit. How about we double everything? All other variables remain the same. Radar is on. The radars detect the Neptune at about the same point, 18nm. This time the Neptune’s make it to within 4 nautical miles before being splashed.

Now we double it again, detection = 60, targeting = 32, and evasion = 8. Detection is at the same distance, 18 nm. But this time the SAM’s don’t respond until the Neptune’s are 6nm out. Both incoming missiles are splashed within 3 nm. Things are getting closer…

And now we double again.

At this point both Neptune’s hit without even a response from the Moskva. Based on our OODA values it took more than 64 seconds for the Moskva to orient, decide, and act. Interestingly at a 45 second targeting time the SA-N-4B Gecko was able to engage and destroy both missiles at roughly 1 mile out.

Unfortunately I can’t cripple the damage control response time like I can with the OODA loop, though you can spawn fires in specific systems should you so desire.

It’s worth mentioning that the Moskva could not detect the TB2 drone operating 20 nm away from the ship.

Competence is Overrated

But what if the radar was off? Or broken? Or maybe someone drank the coolant? Who knows what sort of shenanigans occur. If the radar is off, and the OODA loop is strong, can the Moskva survive?

Oof. Detection isn’t until the SIGINT package receives active radar warnings from the Neptune strike.

At 1800 meters the CIWS opens up.

A single Gecko strikes one of the missiles while the other dodges the antiquated CIWS to strike the Moskva.

Lastly I turn off the radar and increase the reaction time by 10 seconds. The Moskva gets the same active radar alert at 3 nm out.

This time there is no response from the Moskva. 10 seconds was the difference between a Gecko and the CIWS striking the targets. Was the radar operator pre-occupied hunting for a TB2 in the shadows? Did the command team lose focus and divert resources to a minor threat?

If you don’t disable radar sensors at a minimum, or even just change the OODA loop, the Moskva looks much more survivable. This base level of competence is our starting point, being able to granulate the details accordingly makes it interesting.

S-300 Engagement Height

There was a comment about the engagement altitude of the S-300F battery from Statistical that I also modelled. Mainly, what if the S-300F can’t engage sea-skimming missiles? I can find some conflicting sources on engagement height on the 5R55RM missile, but ODIN gives us a floor of 25 meters.

I can’t modify the database, but I can remove all of the S-300F launchers and just let the Gecko’s engage.

After removing the S-300F, I launch 10 Neptune’s. The Moskva detects the strike at about the same distance, 17 nautical miles. It immediately engages jammers and begins evasive maneuvers.

It fires a pair of Gecko interceptors at the first two Neptune’s as soon as they are in range.

Group by group the Gecko’s strike, but they can only engage a pair of Neptune’s at a time. That flight time allows the Neptune’s to creep ever closer.

Strike! The Gecko knocked out 6 of the 10 launched missiles with the CIWS knocking out two more. The two that did hit thought made a significant dent in the Moskva.

Thanks for bringing this up Statistical, this is a great opportunity to test another theory. After this strike the Moskva is suffering severe fires, flooding, and has lost a whole slew of critical sub-systems.

Summary Sinking

What we do know is it sunk.

Interesting point, forty years ago the Belgrano sunk. These are lessons that the US Navy paid in blood to learn. Just the journey from untested navy ’41 to damage control experts ’45 is amazing and still pays dividends today. Several US ships from the Stark to the Cole have suffered strikes in recent time and managed to survive through professionalism and hard core damage control.

The above is a great Twitter thread where they look at the probable strike locations. Of particular interest is the hit on what could be the Damage Control center.

Could this have been a poor response? The Neptune’s just flopped into the sea, and some Russian seaman dropped a cigarette down a hatch which landed on some oily rags, which ignited a wire, which… you get the idea. It could totally be a bad version of “give a mouse a cookie…” except it’s “give a Moskva a Neptune…”

On the front end to assume competence you’d have needed many more Neptune’s to saturate the Moskva. (Multiple launchers. 28+ missiles total)

Now knowing the end result we can work backwards, using the best info we have, and realize that the difference between survival and sinking is a matter of less than a minute with all systems operational or seconds if incompetence through kleptocracy, training failures, or maintenance faults renders your best warning tools inoperative.

Gamer, Author, Engineer, Dad.


  1. Dale

    You don’t even need to double the reaction time. Lets assume you ONLY double the time, but its 1:11 am. And…the seas are choppy (they were) which massively impacts radar detection range and chance to detect. Newer radars deal with the sea state better, but these are old.

    Also make sure to put the snake island nearby, and allow the missile to use that to increase the background clutter. Suddenly you realize, this wasn’t even necessarily bad crew performance. Just weather, and knowing EXACTLY the weaknesses of the target. Small reminder-Ukrain built the Moskva, and have a 90% complete slava they were working on-that had better radars. They knew EXACTLY how to hit this thing.

    • Yooper

      Great points! The force multipliers here really highlight how sharp the Ukrainians have been throughout the conflict.

  2. jeeger

    It’s called “Belgrano”, not “Belgrano”.

    • Yooper

      Got it, thanks!

  3. mekanopsis

    Nice work. I have seen it claimed the Moskva’s primary search radar was limited to a 180 degree arc. Can CMO simulate that? A factoid I have seen on Twitter is that the search radar was tracking the TB2, hence pointing its arc away from the coast. We know that the TB2 is a challenge for the Moskva to even detect, so I’m not sure how that “drone distraction theory” works. I’m also not sure which specific search radar is directional, or whether both are.

    If I run this sandbox sim in Command the Moskva always jams the active radar head on the AShMs. Can we assume the Neptune (not in DB sadly) would be more jam resistant than Kh-35?

    Details aside though, honestly I would put money on a “someone drinking the cooling fluid” level explanation here.

    • Yooper

      So the Top Pair search radar does have a 360 degree view. The FCR 3P41 Volna for the S300 has a 180 degree arc, in my testing the Moskva could engage targets coming from both sides.

      I think the FCR could have been task saturated by focusing on a TB2, especially if they were really hunting for it. Like Dale said, this plan was damn well done and likely tuned in on flaws we’re not even aware of.

  4. John

    Your model seems to assume the Neptune is identical to the 1980’s vintage KH-35 Kayak. It isn’t. It has a linger range and very different flight profile than the Kayak.

    • Yooper

      Great point John, the Neptune itself is not in the database so I’m using the 2009 version of the SSC-6 Sennight (3K60 Bal-E). This is what devs recommended as having similar flight profiles. A future database update will have the Neptune in it.

  5. Harry

    Quote of the day “So lets get the elephant in the room up front. Russia has been like an 800 lb Offensive Lineman who tied his shoelaces together and shit his pants.” …Bravo!

  6. statistical

    Is the S-300 capable of hitting sea skimming targets? My understanding is even the newer S-300 missiles have a minimum target altitude of 25m (older ones were 100m+). If the S-300 was ineffective that would limit it to the Gecko launchers and due to track radar arc limitations only one of the Gecko launchers would be usable.

    • Yooper

      Perfect question, in CMO the minimum engagement altitude is 30 ft ASL for the S-300F on the Moskva. US Army ODIN defines the ground based system as having a minimum altitude of 25 meters. The upgraded S-300, starting in 1999, uses the 48N6E missile which is capable of engaging targets as low as 10 meters. To my knowledge only the Kirov’s have this. I have seen the minimum altitude on the earlier sea based S-300F system called out at 10-25m, or just 25m. The database calls out 10m, so that’s what I ran with, but that could be a gray area for engagement envelope.

      Thanks for bringing it up! I ran a quick simulation on my lunch break and came up with similar results with the standard OODA loop.

  7. John

    Curious why you didn’t factor EW/radar jamming into your analysis at all?

    If I remember correctly, the TB2 does have EW capabilities. Ukraine may have land based capabilities as well.

    • Yooper

      The Moskva had jammers that were active against the incoming Neptune’s but they did not spoof any of the incoming rounds. The TB2’s in the CMO database are recon or have the MAM-L missile, there are none in the database I can use and I wasn’t comfortable substituting another EW system. Thanks for bringing it up!

Comments are closed.