Skip to content

Releases: VEAF/CTLD

CTLD v2.0.0-rc15

CTLD v2.0.0-rc15 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 27 Oct 18:29
af1fe19

CTLD 2.0.0-rc15 — release candidate

Installation

  1. Download ctld-tools.exe below — it is the only file you need.
  2. Run it: the tool opens in your browser, locally, with nothing to install.
  3. Open your .miz, adjust what you want, then Install into mission: the tool writes CTLD, the beacon sounds and your configuration into it.

Windows blocks it on the first run? The tool is not code-signed, so SmartScreen stops it: click More info → Run anyway.
If the file came through a browser you may also need right-click → Properties → tick Unblock → OK.

Prefer doing it by hand? The files are attached to this release too — see the documentation.


The Fat Cow release candidate: a CH-47 that lands in the field and becomes a forward refuel and rearm point for helicopters.
DCS still has no native Fat Cow, so CTLD brings its own.
Nothing breaks for an existing mission: the Fat Cow is a new F10 submenu, on by default, and works with a mission configuration written for an older CTLD.

Fixed since rc14

  • The Fat Cow works with a mission configuration written before it.
    In rc14, a configuration saved with an older CTLD had no Fat Cow aircraft, crates or loadouts: CTLD read the missing lists as removed on purpose.
    A list CTLD added after your configuration's version now takes its default, and the startup message names it; opening the configuration in ctld-tools adds it for good.
    A list you removed yourself stays removed.

Fat Cow

  • A player-flown CH-47F loads a ready-made loadout in a logistic zone (F10 → CTLD → Fat Cow → Load), lands, and deploys its FARP: helicopters around it refuel and rearm from what the cow carries, and nothing more.
    Pack the FARP, or take off, and what was not used goes back into the hold.
  • Ready-made loadouts, all with two 800 gal tanks (4 800 kg of fuel): Apache loadouts at the top (40 or 60 Hellfires, laser and radar, with 30 mm rounds), a Russian submenu (Vikhr for the Ka-50, Ataka or Shturm for the Mi-24P, with their rounds) and a Mixed one.
    Crates can also be requested one at a time.
  • Any pilot can request an AI Fat Cow, choosing its loadout: an AI CH-47 comes from the nearest friendly logistic zone and follows the flight, which commands it from F10 (Land here, Take off, Hold here, Join us, RTB).
  • FARP status tells what the Fat Cow FARP you are at still holds.
  • Mission makers can place a late-activated CH-47 escorting a named flight (fatCowAICows, with the loadout to carry), and change the crates and loadouts (fatCowCrates, fatCowLoadouts, with a menu field for the Russian and Mixed submenus).
  • The stock is finite and guarded: if another script refills the FARPs (as the VEAF Mission Creation Tools did on every player join), CTLD puts the cow's own count back.

See the pilot and mission-maker Fat Cow pages of the documentation.

Configuration

  • New settings fatCowEnabled, fatCowTypes, fatCowCrates, fatCowLoadouts, fatCowDeployDelay, fatCowAIType, fatCowAICows; catalogue version 2.3.0.
    An older configuration gets their defaults, from CTLD at mission start and from ctld-tools when it opens it.

Other fixes

  • JTAC radio messages are translated on a French, Spanish or Korean server; they came out in English.
  • Packing a FARP says how many crates were created, instead of always reporting a success.
  • Unpack Crate no longer announces a success when nothing was created (for example a JTAC refused by the coalition's limit).

Known limits

  • The Fat Cow was tested on a VEAF server on 2026-10-26; the fixes that followed that evening are in this release and have not been flown yet. Reports welcome.
  • The Russian weapon names in the warehouse come from the DCS data, not yet from a flight: a weapon the ground crew reports as out of stock is a name to fix.

Thanks to the VEAF pilots of the 2026-10-26 Fat Cow evening for their reports.

CTLD v2.0.0-rc14

CTLD v2.0.0-rc14 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 27 Oct 17:32
13d2bfc

CTLD 2.0.0-rc14 — release candidate

Installation

  1. Download ctld-tools.exe below — it is the only file you need.
  2. Run it: the tool opens in your browser, locally, with nothing to install.
  3. Open your .miz, adjust what you want, then Install into mission: the tool writes CTLD, the beacon sounds and your configuration into it.

Windows blocks it on the first run? The tool is not code-signed, so SmartScreen stops it: click More info → Run anyway.
If the file came through a browser you may also need right-click → Properties → tick Unblock → OK.

Prefer doing it by hand? The files are attached to this release too — see the documentation.


The Fat Cow release candidate: a CH-47 that lands in the field and becomes a forward refuel and rearm point for helicopters.
DCS still has no native Fat Cow, so CTLD brings its own.
Nothing breaks for an existing mission: the Fat Cow is a new F10 submenu, on by default, and ctld-tools adds its settings to an older configuration.

Fat Cow

  • A player-flown CH-47F loads a ready-made loadout in a logistic zone (F10 → CTLD → Fat Cow → Load), lands, and deploys its FARP: helicopters around it refuel and rearm from what the cow carries, and nothing more.
    Pack the FARP, or take off, and what was not used goes back into the hold.
  • Ready-made loadouts, all with two 800 gal tanks (4 800 kg of fuel): Apache loadouts at the top (40 or 60 Hellfires, laser and radar, with 30 mm rounds), a Russian submenu (Vikhr for the Ka-50, Ataka or Shturm for the Mi-24P, with their rounds) and a Mixed one.
    Crates can also be requested one at a time.
  • Any pilot can request an AI Fat Cow, choosing its loadout: an AI CH-47 comes from the nearest friendly logistic zone and follows the flight, which commands it from F10 (Land here, Take off, Hold here, Join us, RTB).
  • FARP status tells what the Fat Cow FARP you are at still holds.
  • Mission makers can place a late-activated CH-47 escorting a named flight (fatCowAICows, with the loadout to carry), and change the crates and loadouts (fatCowCrates, fatCowLoadouts, with a menu field for the Russian and Mixed submenus).
  • The stock is finite and guarded: if another script refills the FARPs (as the VEAF Mission Creation Tools did on every player join), CTLD puts the cow's own count back.

See the pilot and mission-maker Fat Cow pages of the documentation.

Configuration

  • New settings fatCowEnabled, fatCowTypes, fatCowCrates, fatCowLoadouts, fatCowDeployDelay, fatCowAIType, fatCowAICows; catalogue version 2.3.0.
    ctld-tools gives them their default when it opens an older configuration.

Other fixes

  • JTAC radio messages are translated on a French, Spanish or Korean server; they came out in English.
  • Packing a FARP says how many crates were created, instead of always reporting a success.
  • Unpack Crate no longer announces a success when nothing was created (for example a JTAC refused by the coalition's limit).

Known limits

  • The Fat Cow was tested on a VEAF server on 2026-10-26; the fixes that followed that evening are in this release and have not been flown yet. Reports welcome.
  • The Russian weapon names in the warehouse come from the DCS data, not yet from a flight: a weapon the ground crew reports as out of stock is a name to fix.

Thanks to the VEAF pilots of the 2026-10-26 Fat Cow evening for their reports.

CTLD dev build (af1fe19)

Pre-release

Choose a tag to compare

@github-actions github-actions released this 27 Oct 18:32
af1fe19

This is not a release. It is the tool built from the latest merge into develop:
unreleased, and tested only by whatever CI ran on that commit. Take it when someone asks
you to try something; otherwise download a release from the
Releases page.

ctld-tools.exe --version prints the commit this build came from — quote it in any bug
report. As with every release, Windows will flag the unsigned executable on first run;
the installation notes
say how to get past it.

CTLD.lua is attached too, for anyone wiring a mission by hand.

CTLD v2.0.0-rc13

CTLD v2.0.0-rc13 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 09 Oct 20:24
6f20cc9

CTLD 2.0.0-rc13 — release candidate

Installation

  1. Download ctld-tools.exe below — it is the only file you need.
  2. Run it: the tool opens in your browser, locally, with nothing to install.
  3. Open your .miz, adjust what you want, then Install into mission: the tool writes CTLD, the beacon sounds and your configuration into it.

Windows blocks it on the first run? The tool is not code-signed, so SmartScreen stops it: click More info → Run anyway.
If the file came through a browser you may also need right-click → Properties → tick Unblock → OK.

Prefer doing it by hand? The files are attached to this release too — see the documentation.


The biggest release candidate so far.
F10 clicks fire the command you clicked, crates for native-cargo aircraft appear where the DCS cargo window can load them, native cargo is read from DCS itself, and missions without USA or Russia in their coalitions get their crates again.
Mission scripts that name zones or read zone events need a look: see Breaking changes at the end.

An F10 click fires the command you clicked

Players reported clicking one F10 CTLD entry and getting another, sometimes another group's.
The cause is in DCS: when a menu entry is removed, its internal id goes to the next entry created anywhere on the server, and an F10 screen left open keeps the ids it was drawn with.
CTLD rebuilt its whole menu on every refresh, so a screen opened before a refresh pointed at ids now held by other commands.

A refresh now only touches the entries that changed: an unchanged entry keeps its id and fires itself.
A click on an entry that has just disappeared does nothing, instead of firing whatever took its place.
The 4-second blank menu after a background refresh, introduced in rc10 to work around this, is gone.

Crates appear where a native-cargo aircraft can load them

Crates requested for a UH-1H, Mi-8MT, CH-47F, Mi-24P or C-130J-30 used to appear 20 m or more away, out of reach of the DCS cargo window.
They now stand in a row just clear of the hull: abeam for the helicopters, behind the C-130J-30.
Request Equipment, Pack Vehicle, packing a FARP and Drop Crate(s) all follow this rule; a dropped row stands a little farther (crateDropExtraDistance, 2 m) so you can taxi or lift off without touching it.
Every crate now stands parallel to the aircraft it was created for.

Where crates appear is declared per aircraft type in capabilitiesByType (crateSpawnSector, crateSpawnDistance), with defaults for the five types above; any other type keeps the previous layout.
In a slingLoad: true mission, crates keep the previous layout, since the sling container has no measured size.

Native cargo is read from DCS itself

Crates and whole vehicles loaded through the DCS cargo window are now detected from the aircraft's own on-board cargo list, instead of a position test against a box far larger than any cargo bay.

  • A vehicle released by DCS, on the ground or by parachute, is detected and its JTAC resumes lasing.
  • Unload Vehicles, Parachute Vehicle, Drop Crate(s) and Parachute Crates apply only to what you loaded through the F10 menu: they no longer duplicate cargo DCS is carrying, and CTLD no longer adds that cargo's weight on top of DCS's own.
  • On the UH-1H and CH-47F, a crate loaded through the cargo window is handed to CTLD only once DCS has actually released it, which needs the doors open on the ground. A new F10 action, Crate Commands > Fit parachute, does it when you are ready.
  • The CH-47F now carries whole vehicles by default (the Vehicle Commands menu). Not yet checked in a live CH-47F.

Missions without USA or Russia get their crates again

In a mission whose coalitions hold neither USA nor Russia (CJTF Blue and CJTF Red, for instance), a requested crate never appeared: CTLD created it under a country DCS refused.
Crates, vehicles, JTACs, troops and beacons are now created under the country of the requesting aircraft, or a country of its coalition.
A creation DCS refuses is now logged and reported to the pilot instead of passing in silence.

JTAC: imposed laser codes and radios are respected

  • A laser code imposed on a JTAC by a script is reserved: no automatic JTAC takes it, and a JTAC that already had it moves to another code and announces it.
  • A radio passed to a JTAC by a script is used as given, as in CTLD 1.x.
  • Automatic codes leave out the digits 0 and 9.
  • A late-activated JTAC group is coded when it activates, not at mission start.

Mission Editor naming

  • TRZ_<name>_<coalition>_<stock>_<flag>_<target> now works on a static, a unit or a group, not only a trigger zone: name a bunker, a ship or a convoy and it becomes a troop pickup zone, which moves with it and disappears when it dies.
  • A pre-placed group named EXTR_<name> is extractable without an extractableGroups entry.

Configuration

  • enableParachuteDrop (default true) removes every parachute action from the F10 menu mission-wide when set to false.
  • ctld-tools completes an older configuration when it opens it: settings and fields added since it was saved get their default, listed in a summary with an Undo for each.
    A value you set is never changed.
    The header shows the configuration's version and the tool's catalogue version (now 2.2.0).

Other fixes

  • Crate requests and troop loads from auto-discovered zones (LGZ_, TRZ_) work again; zones sharing a short name are no longer mistaken for each other.
  • A troop zone whose anchor is gone, with or without a death event, is no longer offered.
  • A failed equipment request or a failed troop parachute drop tells the pilot instead of doing nothing.
  • The first seconds after entering an aircraft no longer lose clicks to a menu rebuild.
  • The native-cargo messages are translated (FR, ES, KO).
  • onUnitDead no longer floods the log.

Breaking changes (mission scripts)

  • Zones are named by their full name. TRZ_, LGZ_ and WPZ_ zones, and zones created by createTroopZoneAtObject, register under their full DCS name. The zone accessors of CTLDZoneManager and their legacy wrappers (ctld.activatePickupZone, ctld.changeRemainingGroupsForPickupZone…) expect that full name: a script passing the short name (dropzone1 for TRZ_dropzone1_B_0_nil_0) no longer finds the zone.
  • Zone events (OnZoneSmokeRefreshed, OnTroopZoneUpdated, OnLogisticZoneUpdated) identify every zone by name, its full name; the fullName, zoneName and unitName fields are gone.
  • A troop zone anchored to a unit, group or static is removed when its anchor dies, as logistic zones already were, instead of staying usable at its last position.

Thanks to FullGas for the F10 report that led to the menu fix, and to the VEAF Syria Open Training for the JTAC findings.

CTLD v2.0.0-rc12

CTLD v2.0.0-rc12 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 24 Sep 20:56
9cf2715

CTLD 2.0.0-rc12 — release candidate

Installation

  1. Download ctld-tools.exe below — it is the only file you need.
  2. Run it: the tool opens in your browser, locally, with nothing to install.
  3. Open your .miz, adjust what you want, then Install into mission: the tool writes CTLD, the
    beacon sounds and your configuration into it.

Windows blocks it on the first run? The tool is not code-signed, so SmartScreen stops it: click
More info → Run anyway. If the file came through a browser you may also need right-click →
Properties → tick Unblock → OK.

Prefer doing it by hand? The files are attached to this release too — see the
documentation.


A fix-and-polish release: two real gameplay bugs closed, extraction zones gain a naming-convention
shortcut, ctld-tools now reads your mission's zones back instead of asking you to retype them,
and its numeric fields are hardened against invalid input.

A reoccupied slot no longer inherits the previous pilot's flight state

Reported from a live session. DCS reuses unit names across a mission — if a slot's previous
occupant had taken off before leaving, the next pilot to take that same slot on the ground got an
unsolicited F10 menu rebuild about a second into his seat, for a state transition that never
happened to him.

Cause: CTLD's flight-state poller (it detects takeoff/landing faster than DCS's own events,
which lag 3–5 seconds for helicopters) keeps a small per-unit record of the last confirmed state.
Nothing cleared it when a pilot left, so a new occupant of the same unit name started from the
previous pilot's history instead of his own.

Fix: that record is now cleared in the same place CTLD already forgets a departed pilot. A
pilot with the F10 menu open in his first second in a reused slot no longer risks clicking an
entry that gets rebuilt out from under him.

Extraction zones can now be created by naming a trigger zone

EXZ_<name>_<flag>_<smoke> in the Mission Editor now works exactly like TRZ_/LGZ_/WPZ_
already do — no scripted trigger needed to set one up. <flag> (a DCS flag to increment on
extraction) and <smoke> (a smoke colour) each accept nil to mean "none".

The existing scripted ctld.createExtractZone(...) call still works unchanged — a
naming-convention zone and a scripted one behave identically once created, so you can mix both in
the same mission.

ctld-tools now reads your mission's AI-zone names for you

Every dcsZoneName field in the tool now offers an autocomplete list of your mission's real
trigger-zone names — a typo there used to surface only when DCS refused to start the mission.

For AI transport zones specifically: if you already name yours something like
AIZ_depot_B_P_V, ctld-tools recognises the pattern
(AIZ_<name>_<coalition>_<P|D>_<cargoType-or-aiDropMode>) when you scan your mission, and
pre-fills a new entry with those four fields already set — no retyping facts your zone name
already states. Keep the pattern complete if you want the pre-fill; CTLD itself never reads
meaning from the name, so an incomplete or non-matching one still works identically in DCS, it
just falls back to a blank entry from the manual + AI zone button instead. Renaming a zone (or
removing it from the mission) is picked up the same way — a removal is always flagged for your
confirmation, never applied silently.

A pickup zone missing its stock table is now flagged directly in the editor instead of only
surfacing once the mission is running: a real warning (⚠) when troop pickup is disabled for want
of a troopStock, a calmer note (ⓘ) when a vehicle zone has no vehicleStock and is quietly
falling back to whatever is physically parked there.

UH-1H no longer transports a whole vehicle — Mi-8MT does it properly instead

Requested for realism, not a bug fix: a Huey has no internal cargo bay for a ground vehicle, and
the documentation already said so — the config just disagreed with it. UH-1H's troop capacity is
raised from 8 to 10 to match the airframe's real capacity instead.

Mi-8MT's own whole-vehicle transport, on the other hand, was declared but never actually worked —
it had no weight rating or vehicle list, so it could never load one. It now carries a realistic
external sling-load rating (3000 kg) and the same loadable-vehicle list as the UH-1H.

What this means for your mission

If you relied on the UH-1H to sling-load or carry a whole vehicle, that no longer works — use
the Mi-8MT instead.
Crate-based cargo on the UH-1H (ammo, supplies, anything that isn't a whole
ground vehicle) is unaffected.

ctld-tools no longer accepts a decimal where CTLD needs a whole number

Reported by a Mission Maker: typing 6.01 into a troop template's infantry count was silently
accepted by the editor. Every whole-number-only field — troop and launcher counts, quotas, laser
codes, onboard-capacity limits, crate requirements, AI-zone stock — now enforces a whole-number
step and rounds a typed decimal on the spot. Every genuinely continuous field (weights, distances,
durations) is untouched and still accepts a decimal exactly as before. A hand-edited config that
still carries a fractional value on one of these fields now gets a validation warning explaining
which one.


Thanks to Tripack (VEAF) for testing and feedback on this release candidate.

CTLD v2.0.0-rc11

CTLD v2.0.0-rc11 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 18 Sep 15:15
e7f38b7

CTLD 2.0.0-rc11 — release candidate

Installation

  1. Download ctld-tools.exe below — it is the only file you need.
  2. Run it: the tool opens in your browser, locally, with nothing to install.
  3. Open your .miz, adjust what you want, then Install into mission: the tool writes CTLD, the
    beacon sounds and your configuration into it.

Windows blocks it on the first run? The tool is not code-signed, so SmartScreen stops it: click
More info → Run anyway. If the file came through a browser you may also need right-click →
Properties → tick Unblock → OK.

Prefer doing it by hand? The files are attached to this release too — see the
documentation.


Changing slot no longer breaks CTLD, and a fighter pilot finally has a place in it.

Changing slot or coalition raised an error and left a ghost F10 menu

Reported from a live multiplayer session. Leaving a slot — switching aircraft, changing side,
going back to spectators — threw a script error, and the CTLD menu of the pilot who had just
left stayed on the group. Multi-crew aircraft were the worst hit: the "is anyone still in this
group?" count kept counting pilots who had long since gone, so the menu was never removed.

Cause: DCS releases the aircraft about a millisecond before telling the script the player
left, so the object CTLD received still existed but answered nothing. CTLD aborted three lines
into the handler and never got to the cleanup.

Fix: the seven places that read a name straight off a departing object are now protected, and
the 30-second player scan — which until now could only ever add players — now also forgets those
whose slot no longer exists, has died, or went back to AI. The event stays the fast path; the scan
catches whatever it misses.

A fighter pilot now gets the CTLD functions that concern him

Recon works from any aircraft — but if your mission sets addPlayerAircraftByType = false, a pilot
who was not in transportPilotNames had no CTLD menu at all, and therefore no recon either. A
setting meant to reserve the transport menus for a named list was cutting off every function that
has nothing to do with transport.

From this release, such a pilot gets a CTLD menu with the functions that apply to him:

  • Recon — mark and report what you see.
  • Smoke — drops at your own position; marking a spot from a fighter is exactly what it is for.
  • List Beacons — a beacon's frequency is navigation information. Drop Beacon and Remove
    Closest Beacon
    stay transport-only.
  • JTAC Status, List active FOBs and mine clearing were already open to everyone and are
    unchanged.
  • Check Cargo is hidden from him — it could only ever report an empty hold.

The transport menus themselves are untouched: a pilot off the list does not get them back through
his aircraft type, whatever he flies.

A cancelled menu rebuild could land on the next pilot in the slot

DCS reuses the same internal group id for the next occupant of a slot. A menu rebuild that had been
scheduled for a departing pilot and then cancelled could still fire a fraction of a second later —
on a different player, whose menu was wiped and rebuilt for no reason. Fixed; the cancellation
now covers both kinds of pending rebuild.

Worth noting: this only became reachable because of the fix above — before it, the handler never
got that far.

What this means for your configuration

No setting was renamed, removed, or given a new default. One behaviour changed, though:

With addPlayerAircraftByType = false, a pilot absent from transportPilotNames used to be
invisible to CTLD entirely.
He is now tracked and gets a menu — with the non-transport functions
only. If your mission relied on that list to keep CTLD off certain pilots' F10 menu altogether,
that is no longer what it does: it decides who gets the transport functions.

CTLD v2.0.0-rc10

CTLD v2.0.0-rc10 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 16 Sep 23:55
5e9f282

CTLD 2.0.0-rc10 — release candidate

Installation

  1. Download ctld-tools.exe below — it is the only file you need.
  2. Run it: the tool opens in your browser, locally, with nothing to install.
  3. Open your .miz, adjust what you want, then Install into mission: the tool writes CTLD, the
    beacon sounds and your configuration into it.

Windows blocks it on the first run? The tool is not code-signed, so SmartScreen stops it: click
More info → Run anyway. If the file came through a browser you may also need right-click →
Properties → tick Unblock → OK.

Prefer doing it by hand? The files are attached to this release too — see the
documentation.


Two live-reported F10 menu bugs, both fixed in this release.

A transport could ask for one thing on F10 and get another

Reported live: a transport parked on a pickup zone requested "Load Standard Group" from
Troop Commands → Embark / Extract Troops, and instead a smoke grenade went off at the
aircraft's own position.

Cause: CTLD's F10 menu rebuilds itself as a whole every time something changes — a design
choice that keeps the menu always consistent. A background check (for example, noticing your
transport has parked at a supply point) could rebuild the menu at the exact moment you were
navigating it, so your next click landed on whatever now occupied that spot instead of the item
you were looking at. This is a DCS-side limitation — nothing in a mission can currently tell a
script whether a player's radio menu is open — so it could not be detected directly.

Fix: any menu rebuild that isn't the direct result of your own click now clears the menu first,
then rebuilds it a few seconds later. A click landing in that short gap now does nothing
instead of firing the wrong command — clicks tied to your own actions (loading, unloading, taking
off, landing) are unaffected and stay instant. In the rare case where this applies, you may see the
CTLD F10 menu briefly disappear before reappearing — expected, and far preferable to the old
behaviour.

A HAWK or Patriot crate could get stuck in "Unpack Crate" forever

After successfully assembling a HAWK or Patriot air-defence system, the F10 Unpack Crate menu
could keep listing one of its crates (HAWK PCP/CWAR, or the Patriot AMG) as still available — even
though the system was already fully built. Selecting it did nothing but repeat a "Cannot build"
message.

Cause: those specific crates are optional — the system assembles without them — but if one was
picked up and dropped nearby anyway, it was never cleared away once the system used it.

Fix: any such crate found near a successful assembly is now consumed along with the rest, so it
no longer lingers in the menu afterward.

Nothing to change in your configuration

No setting was renamed, removed, or given a new default in this release.

CTLD v2.0.0-rc9

CTLD v2.0.0-rc9 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 12 Sep 19:53
fc4b842

CTLD 2.0.0-rc9 — release candidate

If you installed a mission with rc8, re-install it with this version. rc8's engine does not
start: it fails while loading, and your mission ends up with no CTLD radio menu at all. Nothing in
your configuration is at fault and nothing needs changing — re-installing is the whole fix.

Installation

  1. Download ctld-tools.exe below — it is the only file you need.
  2. Run it: the tool opens in your browser, locally, with nothing to install.
  3. Open your .miz, adjust what you want, then Install into mission: the tool writes CTLD, the
    beacon sounds and your configuration into it.

Windows blocks it on the first run? The tool is not code-signed, so SmartScreen stops it: click
More info → Run anyway. If the file came through a browser you may also need right-click →
Properties → tick Unblock → OK.

Prefer doing it by hand? The files are attached to this release too — see the
documentation.


This release candidate exists for one reason: rc8 does not load. Everything rc8 brought is still
here — it simply never got the chance to run.

What was broken in rc8

The engine failed while loading, before it ever started. In game that looks like:

  • no CTLD radio menu under F10, at all;
  • everything else in the mission working normally, so nothing obviously points at CTLD;
  • a single line in dcs.log mentioning "CTLD configuration is not loaded".

It affected every mission installed with rc8 — it had nothing to do with your settings, your
theatre, or how the mission was built.

If you use VEAF Mission Creation Tools, the damage went further: VEAF loads its own scripts in the
same block, right after CTLD, so the failure took the whole VEAF framework down with it. Those
missions had no radio menu whatsoever — not CTLD's, not VEAF's. VEAF Tools 6.22.1 ships this fix;
until you update it, re-installing with ctld-tools.exe from this release works too.

Reported by Tripack (VEAF) within hours of the release — thank you.

What caused it, briefly

rc8 added a deliberate safety check: asking CTLD for a setting before the engine has started is now
refused outright, with a message saying so, instead of failing later on something unrelated. That
check was right, and it is unchanged here.

What it caught was CTLD's own logging: the engine writes a log line while registering its built-in
FARP and FOB scenes, which happens before the engine starts — and writing that line asked for a
setting. Logging now tolerates being called that early, which is what it always should have done.

And so that this cannot happen again

CTLD's continuous integration checked that the engine file existed, that it parsed, and that the
individual source modules behaved. Nothing ever ran the assembled engine — which is exactly where
the failure was. Every build now loads it end to end and refuses to publish if it does not come up.

Nothing to change in your configuration

No setting was renamed, removed or given a new default since rc8. Re-install your mission and you are
done.

CTLD v2.0.0-rc8

CTLD v2.0.0-rc8 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 26 Aug 21:21
6f5ea07

CTLD 2.0.0-rc8 — release candidate

Installation

  1. Download ctld-tools.exe below — it is the only file you need.
  2. Run it: the tool opens in your browser, locally, with nothing to install.
  3. Open your .miz, adjust what you want, then Install into mission: the tool writes CTLD, the
    beacon sounds and your configuration into it.

Windows blocks it on the first run? The tool is not code-signed, so SmartScreen stops it: click
More info → Run anyway. If the file came through a browser you may also need right-click →
Properties → tick Unblock → OK.

Prefer doing it by hand? The files are attached to this release too — see the
documentation.


Already installed a mission with rc7? Re-install it with this version. The fixes below travel
inside the engine the tool writes into your .miz — a mission installed with rc7 keeps the old one
until you install again.

This release candidate closes two troop-pickup gaps reported by the community and a beacon frequency
gap, and hardens the engine against a bad setup — a missing initialization step now tells you exactly
what to fix instead of failing on an unrelated error.

What's fixed in the mission

  • Troops can now actually be picked up at a built FOB. The "Allow troop pickup at built FOBs"
    setting has existed since the rewrite, on by default — but nothing in the F10 "Load Troops" menu
    ever consulted it, so a FOB never offered troop pickup no matter what it was set to. It now works:
    a deployed FOB registers a real pickup zone, using the FOB's own radius, exactly as it does for
    logistics.

  • Troops can now be picked up at a built FARP. FARPs had no troop-pickup capability at all —
    only FOBs did. Any of the three built-in FARP scenes (default, Alpha, Countryside) now registers a
    pickup zone the moment it finishes building, and removes it the moment DCS destroys the FARP (or
    when a Countryside FARP is packed back into crates).

  • A quarter of the FM beacon band was unreachable. The FM pool skipped four ranges —
    36.0–39.9, 46.0–49.9, 56.0–59.9 and 66.0–69.9 MHz — including ordinary frequencies like 38.00 MHz.
    Any beacon or briefing asking for one of those quietly failed or landed elsewhere. All 460 steps
    from 30.0 to 75.9 MHz are reachable now.

Under the hood: a clearer failure when CTLD isn't started correctly

If a mission's script setup skips ctld.initialize() — an integration mistake, not something a
Mission Maker using the tool can trigger — CTLD used to crash on an unrelated arithmetic error deep
inside the engine, giving no hint that initialization was the actual problem. It now fails
immediately with a message that says exactly what's missing. Reported by Zip, who also reported
the FM beacon gap above — thank you for both.

New scripted capabilities (for mission scripters)

  • A beacon placed through script (createAtPoint) can now be requested on a specific frequency
    instead of always drawing at random — useful when a frequency is already briefed to pilots on a
    kneeboard.
  • A troop pickup zone can now be added through script on any named object — a unit, a static, a
    group, or an airbase — not only through a Mission Editor trigger zone.

Nothing to change in your configuration

No existing setting was renamed or removed, and every default keeps today's behavior. FARP troop
pickup ships on by default (troopPickupAtFARP, 150 m radius) — turn it off in the tool if you
don't want it.


Thanks to Tripack (VEAF) for testing and feedback on this release candidate.

CTLD v2.0.0-rc7

CTLD v2.0.0-rc7 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 14 Aug 17:23
ee2d860

CTLD 2.0.0-rc7 — release candidate

Installation

  1. Download ctld-tools.exe below — it is the only file you need.
  2. Run it: the tool opens in your browser, locally, with nothing to install.
  3. Open your .miz, adjust what you want, then Install into mission: the tool writes CTLD, the
    beacon sounds and your configuration into it.

Windows blocks it on the first run? The tool is not code-signed, so SmartScreen stops it: click
More info → Run anyway. If the file came through a browser you may also need right-click →
Properties → tick Unblock → OK.

Prefer doing it by hand? The files are attached to this release too — see the
documentation.


Already installed a mission with rc6? Re-install it with this version. The repaired translations
and the in-mission fixes travel inside the engine the tool writes into your .miz — a mission
installed with rc6 keeps the old one until you install again.

The biggest release candidate since rc1: the translated menus are whole again, and seven in-mission
bugs are fixed — two of which silently destroyed things you had deployed.

What's fixed in the mission

  • Troops extracted from the field are counted for real. Drop ten, lose three, and you now
    re-embark seven — not the ten you originally dropped. The F10 menu also shows each group's current
    headcount (Extract: Bravo (7 troops)), so you can pick which group to pull out knowing what it
    will cost you in capacity. A group whose last real trooper is dead is no longer offered at all.

  • Two troop groups from the same template no longer delete each other. Parachuting a second
    group loaded from the same template destroyed the first one the instant it landed — DCS replaces
    any group spawned under a name already in use, and both were landing under the raw template name.
    Silent, instant, and nothing on screen explained it.

  • AA system parts no longer spawn on top of each other. Systems with more than two identical
    parts spread their units across the whole circle instead of their own arc segment — the S-300 TEL D
    landed inside the Big Bird SR.

  • The unpack menu disappears once the system is built. It stayed visible for nearby pilots after
    assembly, offering to unpack crates that no longer existed.

  • The F10 menu no longer doubles on multi-crew aircraft. A copilot joining a CH-47 after the
    pilot got a second copy of the whole CTLD menu. And when one crew member leaves a shared group, the
    remaining crew keep their menu instead of losing it.

  • Death events actually fire. onUnitDead was registered in a way that never matched a real dead
    unit in a live mission, which also disabled JTAC de-registration on death. Both work now.

What's fixed in the menus

  • The translated menus are whole again. 56 labels — every HAWK, BUK, KUB, NASAMS, Patriot and
    S-300 component, several crate, smoke and vehicle entries, and the category headers (Infantry, Air
    Defense, Ground Vehicles, Helicopters, Aircraft, Ships, FARP / FOB) — had been dropped from the
    dictionaries by a tooling bug and were falling back to English. If you fly in French, Spanish or
    Korean, those menus read in your language again. English was unaffected throughout.

  • Korean and Spanish are complete. The entries those two languages had never received — 70 per
    language, plus 29 more surfaced by the fix above — have been translated. Reported by FullGas,
    who also built the fix and the CI guard that stops it happening again: from now on a pull request
    adding a menu entry cannot merge while any of the four dictionaries is missing it.

What's new for Mission Makers

  • Your own beacon sound. The two sound settings are no longer free-text boxes naming a file the
    tool never installed: each gets a Default / Custom picker, and the .ogg you choose is written
    into the .miz with its resource key and preload trigger, exactly like the bundled ones. The file
    is checked for a real OGG signature when you pick it — a renamed .mp3 plays nothing in DCS. A
    custom sound travels inside the mission, so reopening the .miz on another machine recovers it
    even if the original file is gone.

  • "All crates" for the FOB, and crate counts everywhere. Request Equipment was missing the
    one-click "FOB Crate (x3) - All crates" entry every other multi-crate item had. Every entry now
    also shows how many crates it needs — (x3), (x1) — so you can plan a sortie without opening the
    documentation.

Nothing to change in your configuration

No setting was added, renamed or removed. A beacon sound picked through the tool is recorded
alongside the existing sound settings, so configurations written with earlier release candidates load
unchanged.