Training versions, one per role¶
A mission night is shorter when the pilots have already flown its setting.
With a training: block in mission.yaml, the build produces, beside the night's mission, training versions on the same setting: same theatre, same date and time, same weather and wind, same scripted events, same flight plans and same slots.
Each version puts the mission in the state "the other roles have done their job", and what the briefing does not state changes at every launch: pilots train without learning the night's mission by heart.
What the build produces¶
| File | For | What changes from the night |
|---|---|---|
<mission>.miz |
the night | nothing: it is the definitive mission |
<mission>_TRAINING_A2G.miz |
air-to-ground pilots | no enemy CAP, no QRA, no long-range SAM |
<mission>_TRAINING_CAP.miz |
air-to-air pilots | no A2G target, but all their air defences stay; the QRA is armed from the start |
<mission>_TRAINING_SEAD.miz |
SEAD pilots | no enemy CAP, no QRA, no A2G target; the long-range SAMs stay |
<mission>_TRAINING_ALL.miz |
training together | nothing is taken out |
The briefing is the same for all of them. In the training versions that keep them, the elements the briefing describes vaguely are drawn again at every launch (see below).
Classifying the mission: elements¶
Each entry says what an element of the night is, with exactly one selector:
| Selector | Names |
|---|---|
groups |
Mission Editor groups, by exact name or pattern ("SA-10 *") |
zone |
a combat zone declared in modules.COMBATZONE, with every group it captures |
qra |
a QRA declared in modules.QRA.definitions, by its name |
cap_mission |
an on-demand CAP of cap_missions, by its group_name |
And a kind among:
kind |
A2G | CAP | SEAD | Common |
|---|---|---|---|---|
enemy_cap — enemy CAP, an AI flight or an on-demand CAP |
taken out | kept | taken out | kept |
qra |
taken out | kept and armed | taken out | kept |
sam_lr — long-range SAM |
taken out | kept | kept | kept |
a2g_target — air-to-ground target |
kept | taken out | taken out | kept |
sam_threat — a SAM protecting an A2G zone, or a SEAD secondary objective |
kept | kept | kept | kept |
An element nobody declares stays in every version.
In CAP, every air defence stays — a SAM, its radar or AAA, declared or not, even inside an a2g_target zone: a CAP flies through the zone's SAMs whatever the strikers have done.
A group counts as air defence when every unit is an air defence or support (radar, supply truck): a column of tanks escorted by a Tunguska is a target, and goes.
In SEAD, only the declared SAMs stay (sam_lr, sam_threat): the zone's other groups go with its targets.
Vague elements: randomize¶
What the briefing states (type and number: "4 tanks covered by an SA-8") stays as it is.
What it describes vaguely ("an SA-6 with defences around it", "an armoured column") is declared in randomize: in the training versions, the groups it replaces leave their place, and a combat zone draws among its candidates at every launch.
training:
elements:
- groups: ["SA-10 Gudauta"]
kind: sam_lr
- zone: Factory
kind: a2g_target
- groups: ["Factory-SA-6"]
kind: sam_threat
randomize:
- name: factory-def # letters, digits, - and _
replaces: ["Factory-SA-8 *"] # the night's fixed groups
pool:
- group: "Factory-SA-8 #1" # a group of the night, taken as it is
- command: -sa15 # a VEAF shortcut (list_shortcuts)
- units: [{type: Strela-10M3, count: 2}] # a group made from DCS types
count: 1-2 # how many to draw: a number or min-max
radius: 500-2000 # scatter around their position, in metres
Three kinds of candidates:
group: one of the replaced groups, taken as it is — type, units, loadout, skill. It must be listed byreplaces.command: a VEAF shortcut, carried by a unit of the same kind as the replaced groups (an SA-8 for-sa15), so the editor draws the right threat ring;carrier: <DCS type>picks another.units: a ground group the build creates from DCS types.
The draw happens when the mission starts, through the combat-zone markers (#spawngroup, #spawncount, #spawnradius) the build writes into the unit names: each launch gives another result.
When the replaced groups already belong to a combat zone of the night, the draw happens in that zone; otherwise the build lays a TRAINING-<name> zone around them, active from the start, with no radio menu.
at: {x, y} places the draw somewhere other than on the replaced groups.
A draw is what it draws, and follows the rules of that kind: armour drawn in an a2g_target zone is an A2G target, and leaves the CAP and SEAD versions with the groups it replaces.
By default a draw takes the kind of the combat zone it lives in; when it replaces only air defences ("defences around the SA-6") it is a threat (sam_threat) and stays everywhere; outside any zone it stays everywhere.
kind: on the entry sets the kind yourself.
label: on an element or a draw gives the name a pilot reads in the briefing ("Tanks and BMP-2 of Khan Arnabah"); without it, the briefing shows the zone's, the QRA's or the groups' names.
In the briefing¶
build_mission_briefing adds one page per version at the end of the deck and of the PDF: each declared element and what it becomes in the version (kept, taken out, targets out with air defences kept, drawn), then the mission to load.
The content is computed with the build's own rules: it says what the .miz holds.
What is refused, and why¶
The build and validate_mission refuse the block, naming each problem:
- a selector that names nothing, an unknown zone, QRA or CAP;
- a group declared twice with two different
kinds, or both classified and drawn; - a
groupcandidate missing fromreplaces, an unknown shortcut, a DCS type that is unknown or not a ground unit; - a
countlarger than the number of candidates; - a group taken into a draw and named elsewhere — by a trigger's script, a module of
mission.yamlor a mission script. For the zone to capture it the build must rename it, which would break that reference with no message from DCS; keep it fixed, or replace it with new candidates; - a taken group carrying a
#veafInterpreter: its command runs once at mission start, so there is nothing left to draw; training:besidebuild_variants:: the combination would make eight missions nobody asked for.
Building¶
Nothing more than the usual build, from the mission folder:
.\veaf-tools.exe build
The build announces the five missions then, for each training version, how many groups it took out and how many draws it laid.
For one version only: .\veaf-tools.exe build --profile TRAINING_SEAD.
With the AI assistant¶
Tell it "also build the training versions".
It proposes a classification from the mission's data (propose_training_plan), checks it against the briefing to sort what is stated from what is vague, shows it to you, then writes it (set_training_plan) and builds.
See the action catalogue.