An IADS (Integrated Air Defence System) script for DCS (Digital Combat Simulator).
This script simulates an IADS within the scripting possibilities of DCS. Early Warning Radar Stations (EW Radar) scan the sky for contacts. These contacts are correlated with SAM (Surface to Air Missile) sites. If a contact is within firing range of the SAM site it will become active.
A modern IADS also depends on command centers and datalinks to the SAM sites. The IADS can be set up with this infrastructure. Destroying it will degrade the capability of the IADS.
This all sounds gibberish to you? Watch this video by Covert Cabal on modern IADS.
Visit this DCS forum thread for development updates.
A Skynet IADS is a complete operational network. You can have multiple Skynet IADS instances per coalition in a DCS mission. A simple setup would be one IADS for the blue side and one IADS for the red side.
You can add 0-n command centers to a Skynet IADS. Once all command centers are destroyed the IADS will go in to autonomous mode.
Skynet can handle 0-n SAM sites, it will try and keep emissions to a minimum, therefore SAM sites will be turned on only if a target is in range. Every single launcher and radar unit's distance of a SAM site is analysed individually. If at least one launcher and radar is within range, the SAM Site will become active. This allows for a scattered placement of radar and launcher units as in real life.
Skynet can handle 0-n EW radars. For detection of a target the DCS radar detection logic is used. You can use any type of radar in an EW role in Skynet. Some modern SAM radars have a greater detection range than older EW radars, e.g. the S-300PS 64H6E (160 km) vs EWR 55G6 (120 km).
You can also designate SAM Sites to act as EW radars, in this case a SAM site will constantly have their radar on. Long range systems like the S-300 are used as EW radars in real life.
Nice to know: Terrain elevation around an EW radar will create blinds spots, allowing low and fast movers to penetrate radar networks through valleys.
By default Skynet IADS will run without having to add power sources. You can add 0-n power sources to SAM units, EW radars and command centers. Once a power source is fully damaged the Skynet IADS unit will stop working.
Nice to know: Taking out the power source of a command center is a real life tactic used in SEAD (Suppression of Enemy Air Defence).
By default Skynet IADS will run without having to add connection nodes. You can add 0-n connection nodes to SAM Units, EW Radars and Command Centers.
When all the unit's connection nodes are fully damaged the unit will go in to autonomous mode. For a SAM unit this means it will behave in its autonomous mode setting. If an EW Radar looses its node it will no longer contribute information to the IADS but otherwise the IADS will still work.
Nice to know: A single node can be used to connect an arbitrary number of Skynet IADS units. This way you can add a single point of failure in to an IADS.
Currently Skynet only works with ground based units. Incorporating air units is planned at a later date.
SAM sites and EW radars will shut down their radars if they believe a HARM (High speed anti radiation missile) is heading for them. For this to happen, the SAM site has to detect the HARM missile with its radar. The SAM site will then calculate the probable impact point of the HARM, if it determines it is within 100 m of a radar it will shut down.
SAM site and EW radars will react to bombs, air to ground missiles and even aircraft (when on a Kamikazee attack) in the same way. The site will shut down between 1 and 3 minutes. This implementation is closer to real life. SAM Sites like the patriot calculate the flight path and analyse the radar cross section to determine if a contact heading inbound is a HARM.
Since impact point calculation is almost always perfect in DCS there is also a reaction probability involved, newer SAM systems will have a higher probabilty than older ones in detecting an inbound HARM missile. See skynet-iads-sam-types-db-extension.lua for the probability per SAM system.
A simple form of jamming is part of the Skynet IADS package. It's off by default. The jamming works by setting the ROE state of a SAM Site. The closer you get to a SAM site the more ineffective the jamming will become. For the jammer to work it will need LOS (line of sight) to a radar unit. Older SAM sites are more susceptible to jamming. EW radars are currently not jammable.
Here is a list of SAM sites currently supported by the jammer and its effectiveness on them. When setting up a jammer you can decide which SAM sites it is able to jam. For example you could design a mission in which the jammer is not able to jam a SA-6 but is able to jam a SA-2. The jammer effeciveness is not based on any real world data I just read about the different types and made my own conclusions. In the mission editor you add the jammer to a unit. I suggest you take an F-111 as jammer plattform and add it to your strike package.
It's quite simple to setup an IADS have a look at the demo missions in the /demo-missions/ folder.
This tutorial assumes you are familiar on how to set up a SAM site in DCS. If not I suggest you watch this video by the Grim Reapers. Place the IADS elements you wish to add on the map. Currently only russian units have been tested although western units should work just as fine.
There should be only be one SAM site type per group. If differenct SAM sites are mixed in one group distance calculation for the IADS will be messed up. Don't do it you have seen the films, you know what happens when Skynet goes bananas.
The skill level you set on a SAM group is retained by Skynet. Make sure you name the SAM site group in a consistent manner with a prefix e.g. 'SAM-SA-2'.
You can use any type of radar as an EW radar. Make sure you name the unit in a consistent manner with a prefix, e.g. 'EW-center3'.
Skynet requires MIST. A version is provided in this repository or you can download the most current version here. Make sure you load MIST and the compiled skynet code in to a mission. The skynet-iads-compiled.lua and mist_4_3_74.lua files are located in the /demo-missions/ folder.
I recommend you create a text file e.g. 'my-iads-setup.lua' and then add the code needed to get the IADS runing. When updating the setup remember to reload the file in the mission editor. Otherwise changes will not become effective. You can also add the code directly in the mission editor, however that input field is quite small if you write more than a few lines of code.
For the IADS to work you need three lines of code:
create an instance of the IADS:
iranianIADS = SkynetIADS:create()
Give all SAM groups you want to add a common prefix in the mission editor eg: 'SAM-SA-10 west', then add this line of code:
iranianIADS:addSamSitesByPrefix('SAM')
Same for the EW radars, name all units with a common prefix in the mission editor eg: 'EW-radar-south':
iranianIADS:addEarlyWarningRadarsByPrefix('EW')
Activate the IADS:
iranianIADS:activate()
This is the danger zone. Call Kenny Loggins. Some experience with scripting is recommended. You can handcraft your IADS with the following functions. If you refrence units that don't exist a message will be displayed when the mission loads. The following examples use static objects for command centers and power sources, you can also use units instead.
The command center represents the place where information is collected and analysed. It if is destroyed the IADS disintegrates.
Add a command center like this:
local commandCenter = StaticObject.getByName("Command Center")
iranianIADS:addCommandCenter(commandCenter)
You can also add a command center with a power source:
local commandCenter = StaticObject.getByName("Command Center2")
local comPowerSource = StaticObject.getByName("Command Center2 Power Source")
iranianIADS:addCommandCenter(commandCenter, comPowerSource)
Once you have added a SAM site to the IADS you can set the power source and connection node like this. Call the function multiple times to add more than one power source or connection node:
local powerSource = StaticObject.getByName('Power Source')
local connectionNode = StaticObject.getByName('Connection Node')
iranIADS:setOptionsForSamSite('SAM-SA-2', powerSource, connectionNode)
If you just want to add a connection node add nil where the power station would be passed. If you just want to add a power station pass nil for the connection node parameter.
local connectionNode = StaticObject.getByName('Connection Node')
iranIADS:setOptionsForSamSite('SAM-SA-2', nil, connectionNode)
The fourth parameter sets up the SAM Site as an EW radar, meaning that it will be on by default. There is an optional 5th parameter to set the autonomus state of a SAM site:
local powerSource = StaticObject.getByName('Power Source')
local connectionNode = StaticObject.getByName('Connection Node')
iranIADS:setOptionsForSamSite('SAM-SA-2', powerSource, connectionNode, false, SkynetIADSSamSite.AUTONOMOUS_STATE_DARK)
SAM Site will go dark if it looses connection to IADS:
SkynetIADSSamSite.AUTONOMOUS_STATE_DARK
SAM Site will behave in the default DCS AI. Alarm State will be red and ROE weapons free:
SkynetIADSSamSite.AUTONOMOUS_STATE_DCS_AI
Works just like the sam site:
local powerSource = StaticObject.getByName('Power Source')
local connectionNode = StaticObject.getByName('Connection Node')
iranIADS:setOptionsForEarlyWarningRadar('EW-west', powerSource , connectionNode)
You can add IADS elements individually including connection nodes, power sources and the autonomous behaviour. Use this if of you want to add units based on some kind of some progress in a mission.
Add an early warning radar with a power source and a connection node:
local earlyWarningRadar = Unit.getByName('EWR')
local ewPower = StaticObject.getByName("EW Power Source")
local ewConnectionNode = StaticObject.getByName("EWR Connection Node")
iranIADS:addEarlyWarningRadar(earlyWarningRadar, ewPower, ewConnectionNode)
You can also just add an EW Radar omitting the power source and connection node:
local earlyWarningRadar = Unit.getByName('EWR')
iranIADS:addEarlyWarningRadar(earlyWarningRadar)
Add a SAM Site with a power source and a connection node, SAM site shall not be used as an EW radar (parameter false):
powerSource = StaticObject.getByName("SA6-PowerSource")
sa6Site2 = Group.getByName('SA6 Group2')
connectionNode = StaticObject.getByName("Connection Node")
iranIADS:addSamSite(sa6Site2, powerSource, connectionNode, false, SkynetIADSSamSite.AUTONOMOUS_STATE_DARK)
Add a SAM site (no power source, no connection node, will use default autonomous behaviour):
local sa6Site2 = Group.getByName('SA6 Group2')
iranIADS:addSamSite(sa6Site2)
The jammer is quite easy to set up. You need a unit that acts as an emitter. Once the jammer detects an emitter it starts jamming the radar. Set the coresponding debug level to see what the jammer is doing.
local jammerSource = Unit.getByName("Player Hornet")
jammer = SkynetIADSJammer:create(jammerSource)
jammer:addIADS(iranIADS)
-- sets the jammer to listen for emitters
jammer:masterArmOn()
You can disable the jammer for a certain SAM type.
The jammable SAM Types are: SA-2, SA-3, SA-6, SA-10, SA-11, SA-15:
jammer:disableFor('SA-2')
You can turn the jammer off like this:
jammer:masterArmOff()
When developing a mission I suggest you add debug output to check how the IADS reacts to threats:
local iadsDebug = iranIADS:getDebugSettings()
iadsDebug.IADSStatus = true
iadsDebug.samWentDark = true
iadsDebug.contacts = true
iadsDebug.radarWentLive = true
iadsDebug.noWorkingCommmandCenter = true
iadsDebug.ewRadarNoConnection = true
iadsDebug.samNoConnection = true
iadsDebug.jammerProbability = true
iadsDebug.addedEWRadar = true
iadsDebug.hasNoPower = true
iadsDebug.addedSAMSite = true
Special thaks to Spearzone and Coranthia for researching public available information on IADS networks and getting me up to speed on how such a system works. Also I shamelessly incorporated Grimes SAM DB from his IADS script.
In theory you can add all the types that are listed in the sam-types-db.lua file. Types without a radar (some AAA, Manpads) won't really benefit from the IADS. These are better just placed in a mission and handeled by the default AI of DCS. This is due to the short range of their weapons. By the time the IADS wakes them up, the contact has likely passed their engagement range. The strength of the Skynet IADS lies with handling long range systems that operate by radar.