Radar Units Reference

Radar units extracted from all mission .miz files using Lua table parsing (DCS mission table loaded via loadfile()).

Version: 1.0 — corrected from v0.3 which used regex parsing and incorrectly produced fictional group names.


Radar Types Observed Across Missions

TypeDescription
FuMG-401German Würzburg tracking radar
FuSe-65German Freya early warning radar
Freya_Shelter_BrickFreya radar brick shelter (static object)
Freya_Shelter_ConcreteFreya radar concrete shelter (static object)
p-19 s-125 srP-19 early warning radar (Russian stand-in)
KDO_Mod40German fire-control radar (Flak Kommandogerät 40) — Flak direction finder, not early-warning

Important: KDO_Mod40 is a fire-control radar for heavy Flak, not an EWR site. The script filters radar types at line 716.


Summary

MissionTheatreTotal Radar UnitsEWRS-ConfiguredNon-EWRS (Flak/Static)
01. 3 June 1944Normandy 1622735
02. 10 June 1944Normandy 140733
03. 18 June 1944 N2Normandy 145738
04. 24 June 1944 N2Normandy 137631
05. 6 July 1944Normandy 142735
06. 25 July 1944Normandy 148840
11. 8 August 1944 N2Normandy 141536
12. 14 August 1944 N2Normandy 147641
All missions use theatre="Normandy" (N1 map). This is the original Normandy map, not the Normandy 2 remake.

EWRS Coverage Analysis

The EWRS.lua script retrieves radar groups by calling Group.getByName() against the hardcoded names in ewrs.blueRadarsByName and ewrs.redRadarsByName. Any radar unit whose group name is not in those lists is invisible to the script.

EWRS Configured Group Names

SideConfigured Group Names
BlueAllied RADAR ENG, Allied RADAR Beaches, RT2 Radars
RedFREYA, Freya 1

Which Missions Contain Each Configured Name?

MissionAllied RADAR ENGAllied RADAR BeachesRT2 RadarsFREYAFreya 1
01. 3 June 1944✓ (12x FuMG-401)✓ (3x FuMG-401)✓ (12x mixed)
02. 10 June 1944✓ (2x p-19)✓ (5x p-19)
03. 18 June 1944 N2✓ (2x p-19)✓ (5x p-19)
04. 24 June 1944 N2✓ (2x p-19)✓ (4x p-19)
05. 6 July 1944✓ (2x p-19)✓ (5x p-19)
06. 25 July 1944✓ (3x p-19)✓ (5x p-19)
11. 8 August 1944 N2✓ (2x p-19)✓ (3x p-19)
12. 14 August 1944 N2✓ (3x p-19)✓ (3x p-19)
Key findings: 1. Freya 1 never appears in any mission. It exists in EWRS.lua config but is never instantiated in .miz files. Group.getByName("Freya 1") always returns nil. 2. RT2 Radars only exists in Mission 01. 3. Allied RADAR ENG is absent from only Mission 05. 4. Allied RADAR Beaches only appears in Mission 05 (introduced late-campaign) and then disappears — it does NOT persist across all missions as previous analysis claimed.

EWRS Script Logic


-- EWRS.lua (lines 55-64)
ewrs.blueRadarsByName = {
    "Allied RADAR ENG",
    "Allied RADAR Beaches",
    "RT2 Radars",
}

ewrs.redRadarsByName = {
    "FREYA",
    "Freya 1",
}

-- EWRS.lua (lines 715-731)
local function scanSide(list, targetTable)
    for i = 1, #list do
        local group = Group.getByName(list[i])
        if group then
            local units = Group.getUnits(group)
            for j = 1, #units do
                -- unit is added to targetTable for processing
            end
        end
    end
end

scanSide(ewrs.blueRadarsByName, blueUnits)
scanSide(ewrs.redRadarsByName, redUnits)

Important Observations

  • Group-level only — The script looks up *group names*, not individual unit names. A radar unit named Axis BT1 Radars-1-1 inside a group called Axis BT1 Radars will only be detected if the group name Axis BT1 Radars is added to ewrs.redRadarsByName.
  • Non-EWRS radar units in Mission 01 — Groups with actual radar units that are NOT in the EWRS config (missed by script):
  • - Axis BT1 Radars (3x FuSe-65/FuMG-401)

    - St. Vaast Coastwatcher-1 (3x FuMG-401 + FuSe-65)

    - Static Freya shelters (Static Freya Shelter Brick-1, Static Freya Shelter Concrete-2/3)

  • Later missions (02-12) — Beyond the EWRS-configured groups, there are zero additional radar groups. All remaining KDO_Mod40 units in these missions belong to Heavy AA / Flak groups and are NOT early-warning radars.
  • KDO_Mod40 is not a radar for EWRS purposes — It is a fire-control radar for heavy Flak batteries. The script's type filter at line 716 (getDetectedTargets(Controller.Detection.RADAR)) may still pick it up as a detector if added to the config, but it is not deployed as a standalone EWR site.
  • Bottom Line

    EWRS.lua is using a hardcoded whitelist of radar group names. The actual radar counts across missions are much higher than shown in v0.3 analysis. Mission 01 has 62 radar total (not 37); missions 02–12 have 37–48 total, but the majority are KDO_Mod40 Flak fire-control radars, not EWR sites.

    The true EWRS-configured radar count is relatively low — typically 5–12 units per mission. The only group names that need to be tracked by EWRS are Allied RADAR ENG, Allied RADAR Beaches, RT2 Radars, and FREYA. Freya 1 is dead config.


    EWRS Detection Technical Analysis

    (This section retained from v0.3 — the script logic is accurate.)

    Scanning Ranges

    EWRS.lua delegates detection to DCS's built-in AI sensor API (Controller.Detection.RADAR), then applies a post-filter for earth curvature / radar horizon.

    
    -- EWRS.lua (lines 684-685)
    local ewrControl = ewrUnit:getController()
    local detectedTargets = ewrControl:getDetectedTargets(Controller.Detection.RADAR)
    

    The script then filters contacts below the radar horizon:

    
    -- EWRS.lua (lines 697-700)
    if Alt > ((6371000 * (1 - mathCos(0.000157 * RangeKm))) - 5) then
        tableInsert(units, v)
    end
    

    Key implications:

    * Effective max range is determined by the radar unit type in the mission editor.

    * The script only trims contacts geometrically below the radar horizon.

    * Low-altitude contacts can still be detected within ~4–20 km depending on radar height and target altitude.

    Terrain Masking / Line of Sight

    Radar detection is already terrain-masked by the DCS AI sensor model. The script adds a second LOS check for the player-facing display loop (displayMessageToAll):

    
    -- EWRS.lua (lines 553-567)
    local radarList = (Side == 1) and ewrs.redEwrUnits or ewrs.blueEwrUnits
    if #radarList > 0 then
        for r = 1, #radarList do
            local radarUnit = UnitGetByName(radarList[r])
            if radarUnit then
                local RadarPoint = radarUnit:getPoint()
                RadarPoint.y = RadarPoint.y + 4
                if land.isVisible(PlayerPoint, RadarPoint) then
                    isLOS = true
                    break
                end
            end
        end
    end
    

    Coalition Limits

    Radar scanning is strictly separated by coalition:

    VariableSideSource table
    ewrs.blueEwrUnits2 (Blue / Allied)ewrs.blueRadarsByName
    ewrs.redEwrUnits1 (Red / Axis)ewrs.redRadarsByName

    Blue radars detect red contacts; red radars detect blue contacts. No cross-coalition sharing.

    Radar Coverage Logic (Picture Reports)

    After detection, contacts are sorted into 23 named polygon zones. Only the top ewrs.NoOfPictures zones (default 2) are printed in the player's picture report.

    Key implications:

    * Zone membership is determined purely by the contact's (x, z) position.

    * Contacts outside all 23 zones are silently discarded from picture reports.

    * Because zones are large geographic areas, a zone can show "8 plus bandits" even if the detecting radars are 100 km away.


    Changelog

    1.0 (2026-04-30)

  • Corrected group names and unit counts by using proper Lua loadfile() table parsing instead of regex extraction.
  • Previous v0.3 regex-based extraction produced fictional group names like UNKNOWN-15, BShips-Convoy-1, UNKNOWN-416 — the actual group names in DCS are the string values of ["name"], not internally-generated table keys.
  • Added KDO_Mod40 (Flak fire-control radar) to the radar type list — it was previously missed entirely. This explains the large jump in total counts (e.g., Mission 01: 37 → 62).
  • Updated EWRS coverage matrix with accurate per-mission group presence.
  • Identified that Freya 1 exists in EWRS config but never in any mission .miz.
  • Clarified that Allied RADAR Beaches only appears in Mission 05, not across all missions as previously stated.
  • Confirmed all missions use theatre="Normandy" (N1 map), not N2.