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.
| Type | Description |
|---|---|
FuMG-401 | German Würzburg tracking radar |
FuSe-65 | German Freya early warning radar |
Freya_Shelter_Brick | Freya radar brick shelter (static object) |
Freya_Shelter_Concrete | Freya radar concrete shelter (static object) |
p-19 s-125 sr | P-19 early warning radar (Russian stand-in) |
KDO_Mod40 | German 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.
| Mission | Theatre | Total Radar Units | EWRS-Configured | Non-EWRS (Flak/Static) |
|---|---|---|---|---|
| 01. 3 June 1944 | Normandy 1 | 62 | 27 | 35 |
| 02. 10 June 1944 | Normandy 1 | 40 | 7 | 33 |
| 03. 18 June 1944 N2 | Normandy 1 | 45 | 7 | 38 |
| 04. 24 June 1944 N2 | Normandy 1 | 37 | 6 | 31 |
| 05. 6 July 1944 | Normandy 1 | 42 | 7 | 35 |
| 06. 25 July 1944 | Normandy 1 | 48 | 8 | 40 |
| 11. 8 August 1944 N2 | Normandy 1 | 41 | 5 | 36 |
| 12. 14 August 1944 N2 | Normandy 1 | 47 | 6 | 41 |
All missions use theatre="Normandy" (N1 map). This is the original Normandy map, not the Normandy 2 remake.
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.
| Side | Configured Group Names |
|---|---|
| Blue | Allied RADAR ENG, Allied RADAR Beaches, RT2 Radars |
| Red | FREYA, Freya 1 |
| Mission | Allied RADAR ENG | Allied RADAR Beaches | RT2 Radars | FREYA | Freya 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 1never appears in any mission. It exists inEWRS.luaconfig but is never instantiated in.mizfiles.Group.getByName("Freya 1")always returnsnil. 2.RT2 Radarsonly exists in Mission 01. 3.Allied RADAR ENGis absent from only Mission 05. 4.Allied RADAR Beachesonly appears in Mission 05 (introduced late-campaign) and then disappears — it does NOT persist across all missions as previous analysis claimed.
-- 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)
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. - 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)
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.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.
(This section retained from v0.3 — the script logic is accurate.)
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.
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
Radar scanning is strictly separated by coalition:
| Variable | Side | Source table |
|---|---|---|
ewrs.blueEwrUnits | 2 (Blue / Allied) | ewrs.blueRadarsByName |
ewrs.redEwrUnits | 1 (Red / Axis) | ewrs.redRadarsByName |
Blue radars detect red contacts; red radars detect blue contacts. No cross-coalition sharing.
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.
loadfile() table parsing instead of regex extraction.UNKNOWN-15, BShips-Convoy-1, UNKNOWN-416 — the actual group names in DCS are the string values of ["name"], not internally-generated table keys.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).Freya 1 exists in EWRS config but never in any mission .miz.Allied RADAR Beaches only appears in Mission 05, not across all missions as previously stated.theatre="Normandy" (N1 map), not N2.