Nomenclature¶
Regions (RG_)¶
A region is a polygon trigger zone (4 vertices), named with 8 segments separated by _ or
- (both are equivalent, but never let two separators touch):
RG_[R/B]_[NAME]_[FREQ]_[FB/NOFB]_[SEG6]_[MAX_C]_[VIS]
| # | Segment | Values | Effect |
|---|---|---|---|
| 1 | Prefix | RG |
Required, case-insensitive |
| 2 | Origin coalition | R or B |
The region defends that side; players of the other side are the "enemies" it detects |
| 3 | Short name | alphanumeric | Readable identifier, shown in the F10 menu |
| 4 | Cycle frequency | seconds | How often the region checks for enemy presence and decides to spawn. Invalid value → silent fallback to 30s |
| 5 | Mode | FB or NOFB |
See NOFB vs FB mode |
| 6 | Depends on mode | integer (NOFB) or decimal (FB) | See NOFB vs FB mode — an invalid value rejects the entire region, unlike segment 4 |
| 7 | Max waves | integer | After this many spawn waves, the region stops permanently (attrition). Falls back to 10 if invalid |
| 8 | Visible on F10 | 1 or other |
1 draws the region's outline on the F10 map, colored by whichever coalition currently controls its bases |
Case and overlap
- Segments 1, 2, and 5 are case-insensitive (
RG_r_kutaisi_30_nofb_5_10_1works). - Segment 3 (the name) must be strictly alphanumeric — no spaces, no accents.
- Two regions whose polygons overlap, even partially, block the startup of the whole mission, not just the two regions involved — see Startup validation.
Worked examples, segment by segment¶
These examples all share the same base and change only one variable at a time, to show exactly what each segment does.
Coalition (segment 2)¶
| Name | Effect |
|---|---|
RG_R_Kutaisi_30_NOFB_5_10_1 |
Red region — Blue players entering the polygon are detected as enemies, the spawned AI is Red |
RG_B_Kutaisi_30_NOFB_5_10_1 |
Blue region — Red players are the detected enemies, the spawned AI is Blue |
NOFB vs FB mode (segments 5 and 6)¶
- NOFB (Non Force-Balancing) — segment 6 is a fixed cap you choose. The region spawns up to that many simultaneous groups as long as at least one enemy player is present, and stops permanently after the number of waves in segment 7.
- FB (Force Balancing) — segment 6 is a decimal ratio; the number of AI groups follows the number of enemy players present in the region. There is no absolute cap in this mode — this is a deliberate design choice, not an oversight. This ratio belongs to each region individually (its own segment 6) — there is no global ratio applied to every FB region at once.
| Name | Segment 6 | Effect |
|---|---|---|
RG_R_Kutaisi_30_NOFB_5_10_1 |
5 (fixed cap) |
Up to 5 simultaneous AI groups, regardless of how many enemy players are present (1 or 10, the cap doesn't change) |
RG_R_Kutaisi_30_FB_1.5_10_1 |
1.5 (ratio) |
1.5 AI groups per enemy player present — 2 players → up to 3 AI groups; 4 players → up to 6 AI groups; no upper cap |
RG_R_Kutaisi_30_FB_0.5_10_1 |
0.5 (low ratio) |
Light opposition — it takes 2 enemy players present to get a single AI group |
RG_R_Kutaisi_30_NOFB_abc_10_1 |
invalid | The entire region is rejected at startup — unlike segment 4 (frequency), an invalid segment 6 has no silent fallback |
FB and aircraft type
In FB mode, the MG_ template selected can additionally adapt to the aircraft type of the
detected players (via an internal aircraft-to-tags mapping table), to offer opposition
consistent with what they're flying.
F10 map visibility (segment 8)¶
| Name | Segment 8 | Effect |
|---|---|---|
RG_R_Kutaisi_30_NOFB_5_10_1 |
1 |
The polygon's outline is drawn on the F10 map, colored by whichever coalition currently controls the region's bases (not the origin coalition) |
RG_R_Kutaisi_30_NOFB_5_10_0 |
0 (or any value other than 1) |
The outline is never drawn — the region works normally, but stays invisible on the map |
Cycle frequency (segment 4)¶
| Name | Segment 4 | Effect |
|---|---|---|
RG_R_Kutaisi_10_NOFB_5_10_1 |
10 |
The region checks for enemy presence and decides to spawn every 10 seconds — responsive, but more expensive |
RG_R_Kutaisi_120_NOFB_5_10_1 |
120 |
Checked every 2 minutes — cheaper, slower to ramp up |
RG_R_Kutaisi_xyz_NOFB_5_10_1 |
invalid | Silent fallback to 30 seconds (DM.Config.REGION_TICK_INTERVAL) — the region still starts, unlike an invalid segment 6 |
Spawn templates (MG_ — Model Group)¶
- Place the template group in the editor, with delayed activation — it must never appear as-is in game, it only serves as a template to clone.
- Name it
MG_[TAG]_[ID], where[TAG]is an identifier of your choice (e.g.AA,AG,CONVOY,TROOP) that links this template to its spawn zones. - Give it a route — the route's first waypoint (WP0) can carry a name: that text gets displayed in-game the moment it spawns (useful for a narrative alert, e.g. "Armored column inbound").
- Place at least one
SZ_[TAG]_[ID]zone (circular) inside the region, with the same[TAG]— that's where the template's clones will appear, randomly dispersed within the zone's radius (DM.Config.SPAWN_DISPERSION_RADIUS, see Configuration).
The template can be any DCS category: plane, helicopter, ground vehicle, ship — armed or not.
| Name | Effect |
|---|---|
MG_AA_1 + SZ_AA_1 |
Valid pair — MG_AA_1 can be cloned into SZ_AA_1 |
MG_AA_1 + SZ_AG_1 (different tags) |
Invalid pair — no zone shares the AA tag, the mission refuses to start if this template is used in a region (see Startup validation) |
Airbase defenses (AD_)¶
Bases linked to a region (those whose point falls inside its polygon) automatically receive ground defenses, on three distinct triggers:
- On landing by an enemy player at an undefended base — protects the intruder once they've touched down.
- By proximity — an enemy unit detected within 20 km of an allied base (or an already anchored neutral one) triggers a defensive reinforcement (adjustable range, see Configuration).
- On capture — the base's coalition changes immediately, but no defense is placed at that exact moment; it will appear afterward through one of the two triggers above, if the situation calls for it.
Defense templates are named AD_[description]_[maxSpawn] (e.g. AD_SA10_1) and are global
per coalition — any base of that coalition can draw from it, with the coalition read from the
DCS group itself, not from its name.
| Name | maxSpawn |
Effect |
|---|---|---|
AD_SA10_1 |
1 |
At most 1 instance of this template placed at a time, across every defense slot |
AD_ManTeam_0 |
0 |
Unlimited — this template can be placed on as many slots as needed |
A neutral base linked to a region is visually "anchored" at mission start by a static object (a Jerrycan), which flips its coalition without placing any defenses until one of the three triggers above fires.
Startup validation¶
When the mission loads, the script automatically checks:
- that no region polygon overlaps another;
- that every
MG_tag used in a region has at least one matchingSZ_zone.
Blocking failure
If either check fails, the entire mission fails to initialize — not just the offending region or template. Check the DCS message history right after startup: the errors are listed there with the name of the region/zone involved.
End-to-end example¶
A minimal, complete region to copy into the editor and see the mechanism run:
- Polygon trigger zone (4 vertices), named
RG_R_Example_30_NOFB_2_5_1— Red region, 30s cycle, fixed cap of 2 simultaneous groups, 5 waves, visible on F10. - A group (e.g. a pair of fighters), placed anywhere on the map, with delayed
activation, named
MG_AA_1. - A circular zone, named
SZ_AA_1, placed inside the region's polygon.
Start the mission with an aircraft from a Blue slot. As soon as you enter the RG_R_Example
polygon (default TERRAIN mode, see Configuration), the region goes ACTIVE
and clones MG_AA_1 into SZ_AA_1 — you should see a group of Red fighters appear in the zone,
up to 2 simultaneous groups, then nothing more after 5 waves. Leave the polygon: after
IDLE_LIMIT (300s by default) with no enemy detected, the region goes back to sleep.