Skip to content

Discover VMCT in ten minutes

You know the DCS Mission Editor. You have never opened VEAF Mission Creation Tools. This page teaches you nothing to do: it tells you what the thing is made of, so the rest makes sense.


The idea in one sentence

Your mission is no longer a .miz you edit by hand: it is a folder of text files that a tool recomposes into a .miz at every build, injecting the VEAF scripts as it goes.

flowchart LR
    ME[DCS Mission Editor] -->|extract| SRC[src/mission]
    SRC --> BUILD[veaf-tools build]
    YAML[mission.yaml] --> BUILD
    LUA[VEAF scripts] --> BUILD
    BUILD --> MIZ[playable .miz]
    MIZ -->|reopened in the editor| ME

You still place your units, zones and waypoints in the DCS editor. What you gain is everything that is described rather than placed: enemies that appear on demand, an F10 radio menu, radio frequencies consistent across the whole coalition, several weather variants of the same mission.


The six pieces

1. The mission folder

A version-controllable folder (Git) holding everything: the exploded DCS mission, your configuration, your scripts, and the tools themselves. That is your unit of work — no longer the .miz.

→ card: the mission folder

2. mission.yaml

The configuration file at the root. It declares the mission's identity and, in its modules: block, which VEAF features are active. A module that is not there is not shipped.

modules:
  UNITS:              # infrastructure: mandatory, no value
  RADIO: true         # the VEAF F10 radio menu
  SPAWN: true         # spawn units from the F10 map

→ card: mission.yaml and its modules

3. The build

veaf-tools build reads the folder, generates veaf-config.lua from mission.yaml, injects the triggers that load the VEAF scripts at start-up, then runs the optional pipeline steps whose file it finds. You never add a VEAF trigger by hand in the DCS editor.

→ card: the build and its pipeline

4. Your own Lua scripts

Whatever cannot be described in YAML is written in Lua under src/scripts/. The custom_scripts: block chooses which are loaded, and in what order.

→ card: custom scripts

5. What the pipeline injects

Each file under src/ feeds one step, and that step only runs if the file is there:

File What it produces in the mission
src/presets.yaml each aircraft's preset radio channels, plus the kneeboards
src/waypoints.yaml named, reusable flight plans
src/spawnables.yaml template aircraft groups, spawnable in game
src/dynamic-slot-templates.yaml the templates served to dynamic slots
src/warehouses.yaml which airfields open dynamic slots, and with what stock
src/spawn-groups.yaml extra ground/sea groups for _spawn
src/versions.yaml one .miz variant per declared weather/time

→ card: radio presets · card: dynamic slots · card: spawnable groups · card: weather variants

6. The VEAF scripts, in game

Once the mission is running, the injected scripts live inside DCS. Players meet them through the F10 "Other" radio menu, where the active modules put their entries (spawn, combat zones, assets, weather…). Commands can also be written as markers on the F10 map — -shilka spawns a Shilka where the marker is.

→ script catalogue, module by module · marker aliases


Two mechanisms that catch people out

Combat zones are geometric and nominal. A combat zone is a DCS trigger zone; the groups inside it are emptied at start-up and put back on activation. But a group is only captured if its name starts with the zone's name — a well-placed but badly named group is ignored.

→ card: combat zones

The pipeline fires by itself. A freshly created folder already contains a versions.yaml with a "noon" variant, so your first build produces two files, My-Mission.miz and missions/My-Mission_noon.miz. Not a bug — the weather step found its file.

→ card: weather variants


Where to go next

You want to Go to
Build your first mission, step by step Tutorial — your first mission
Write one specific piece of configuration The cards
Know everything about an option Full guide · mission.yaml reference · CLI reference
Convert a VEAF v5 mission Migration guide
Adopt a third-party mission Adopt a third-party mission