Skip to content

Doctrine Field Reference

All fields available in any doctrine table (Medusa_MM_Doctrine, per-network inline tables, or named global tables). Every field is optional. Omit any field to use its default.

FieldTypeDefaultDescription
ADIZBufferNmnumber12Distance in nautical miles to project the ADIZ beyond the border. Min: 0, Max: 200
ADIZEnabledbooleantrueProject an ADIZ ring outside the border zones. Only applies when borderZones are configured on the network. The ADIZ is a convex hull expansion that smooths concave notches in the border
AutoDiscoverEwrsbooleantrueWhen true, groups with the network prefix that contain only radar units (no launchers) are automatically treated as sensors. The group still needs the prefix to be discovered
BallisticSimMaxSecnumber120Maximum lookahead in seconds for the ballistic trajectory simulation. Min: 10, Max: 600
BallisticSimStepSecnumber1.0Time step in seconds for the ballistic trajectory simulation used in HARM kinematic classification. Min: 0.1, Max: 5
BatteryTargetDatalinkbooleantrueWhen true, HOT batteries contribute their detected tracks to the network track store. Separate from SAMAsEWR (which controls whether batteries stay warm specifically to act as sensors)
DefendPknumber0.30Minimum estimated Pk for a point defense battery to activate against an inbound HARM. Min: 0, Max: 1
EMCONtablenilPer-role emission control policies. Keys are role names (EWR, GCI, VLR_SAM, LR_SAM, MR_SAM, SR_SAM, AAA), values are policy strings. If nil, each role uses its built-in default. VLR_SAM defaults to MINIMIZE
EmconRotateGroupsnumber2Number of sensor groups for COORDINATED_ROTATION. Sensors are divided into this many groups that take turns radiating
EngageTacticsstring"SHOOT_IN_DEPTH"Multi-battery engagement strategy. SHOOT_LOOK_SHOOT assigns only one battery per track. SHOOT_IN_DEPTH allows one battery per role tier (VLR, LR, MR, SR) per track. SHOOT_SHOOT assigns the two highest-Pk batteries per track regardless of role. SHOOT_SHOOT_FLOOD uses SHOOT_SHOOT rules for LR/MR (up to 2) but activates every SR_SAM and AAA in range above PkFloor without limit. VLR_SAM batteries always use SHOOT_LOOK_SHOOT among themselves regardless of this setting, but a VLR_SAM assignment never blocks other tiers from also engaging the same track. Batteries with weapon range above 250km are automatically reclassified from LR_SAM to VLR_SAM at creation
EngageTimeoutSecnumber45Seconds since last shot or assignment change before Medusa looks for any equal-or-better Pk battery to hand off to. Before this timeout, a handoff requires 50% better Pk. Min: 0, Max: 300
GuiltByAssociationbooleantrueWhen a track is promoted to BANDIT or HOSTILE, nearby tracks (within 11km) flying the same direction (within 15 degrees) at similar speed (within 20%) are promoted to match
HARMResponsestring"AUTO_DEFENSE"How batteries react to detected HARMs. AUTO_DEFENSE, SELF_DEFEND, SHUTDOWN_UNLESS_PD, SHUTDOWN, IGNORE
HARMSaturateOnAmmobooleanfalseCap a battery’s HARM defense points at its remaining ammo count. A battery with 9 defense points but only 2 missiles left can only defend against 2 HARMs. Without this, defense points are based purely on unit count
HARMShutdownMnumber15000Maximum closest point of approach (CPA) in meters between a HARM and a battery for the battery to be considered threatened. Batteries whose projected CPA is beyond this distance are not shut down. Min: 0, Max: 300000
HoldDownSecnumber15Seconds a battery stays HOT after its target goes stale or after a handoff. Also sets the duration of each last-chance salvo detection check cycle. Min: 0, Max: 300
LookaheadSecnumber8Seconds to project the target’s position forward when computing Pk. Accounts for the time the battery needs to come online and acquire the target after activation. Min: 0, Max: 30
MaxEngageRangePcttablenilPer-role cap on engagement range as a percentage of hardware max. Example: { LR_SAM = 80 } limits long-range SAMs to 80% of their weapon range. Valid role keys: VLR_SAM, LR_SAM, MR_SAM, SR_SAM, AAA. Roles not listed use full range
Namestring"Passive Defense"Label for this doctrine (appears in logs only, no behavioral effect)
PerTrackScanUpdateRatenumber5Minimum seconds between position updates for the same contact. Lower values give faster track updates at higher DCS API cost. Min: 1, Max: 60
PkFloornumber0.25Minimum estimated Pk for a battery to be assigned a target. Batteries below this threshold are not activated. Rolling Pk may adjust the effective value upward based on network kill rate. Min: 0, Max: 1
PoolDefensePointsbooleanfalseWhen enabled, nearby HARM-capable batteries pool their defense points when evaluating whether a battery can self-defend against HARMs. Point defense batteries are excluded to avoid double-counting
PoolDefensePointsRadiusnumbernilRadius in meters for the defense point pooling spatial query. Only used when PoolDefensePoints is true. Min: 1000, Max: 100000
Posturestring"HOT_WAR"Controls how fast the IADS classifies contacts and what criteria are needed to declare them hostile. See the Posture section below
QuietPeriodSecnumber0Seconds radar stays OFF between scan cycles for PERIODIC_SCAN and COORDINATED_ROTATION. Min: 0, Max: 86400
ROEstring"TIGHT"Minimum track identification for target assignment. FREE = BANDIT or HOSTILE, TIGHT = HOSTILE only, HOLD = no assignments made
RollingPkEnabledbooleantrueEnables adaptive PkFloor adjustment based on network kill rate. When false, PkFloor stays at the configured static value
SAMAsEWRstring"WHEN_NO_EWR"Whether LR_SAM and MR_SAM batteries with search radars stay warm as supplemental sensors. DISABLED = never, WHEN_NO_EWR = only if all dedicated EWR/GCI are destroyed, ALWAYS = always
ScanSecnumber30Seconds radar stays ON per cycle for PERIODIC_SCAN and COORDINATED_ROTATION. Min: 0, Max: 86400
SensorCleanupSecnumber30How often Medusa clears its internal record of contacts that have left sensor coverage. No visible effect on behavior. Only relevant if you have very long missions with thousands of contacts passing through. Min: 5, Max: 300
StickyRangePctnumber15Percentage below PkFloor that Pk must drop before a battery releases its target. At default 15, a battery with PkFloor 0.25 won’t release until Pk drops below 0.2125. Also extends the effective engagement range by the same percentage
TargetKillRatenumber0.50Target actual kill rate for the Rolling Pk control loop. If the network’s kill rate is above this, the effective PkFloor drops (more shots taken). If below, PkFloor rises (fewer shots taken). Only used when RollingPkEnabled is true. Min: 0, Max: 1
ThreatSpeedScalingnumber30Bonus threat points for fast targets. A Mach 1 target gets the full value (30 points) added to its threat score. Slower targets get proportionally less. Higher threat scores get assigned batteries first. Min: 0, Max: 100

Posture controls how quickly the IADS moves contacts through the identification ladder (UNKNOWN, BOGEY, BANDIT, HOSTILE) and what conditions allow engagement.

PostureMeaningIdentification speedBorder behavior
HOT_WARActive conflictFast. IFF confirms in 3-8 seconds, BANDIT in 15-45 seconds, HOSTILE via 30-second dwell timerBorder zones have no effect on identification. All contacts are processed at full speed
WARM_WARHeightened tensionsModerate. IFF confirms in 10-30 seconds, BANDIT in 45-120 seconds. Crossing the border starts a 15-45 second timer before HOSTILE (contact must still be inside when timer expires)Contacts outside the ADIZ are tracked but cannot advance past BOGEY until they enter the ADIZ
COLD_WARPeacetime patrolSlow. IFF confirms in 30-60 seconds, BANDIT in 120-300 seconds. Crossing the border starts a 30-120 second timer before HOSTILE (contact must still be inside when timer expires)ADIZ entry forces immediate BOGEY promotion. Radar illumination does not count as identification evidence

Contacts identified as having launched an anti-radiation missile (via kinematic backtracking) are declared HOSTILE instantly regardless of posture or position. Contacts heading directly toward a defended site at combat speed for 60 seconds (120 seconds in COLD_WAR) are declared HOSTILE via hostile intent.

HOSTILE is permanent. Once a contact is declared hostile, the classification is never reversed regardless of posture or position.

Change posture mid-mission with the runtime API:

Medusa.API.setPosture("SyADF", "HOT_WAR")