DCS_MissionDev/Moose_CTLD_Pure
2025-11-05 12:16:47 -06:00
..
2025-11-05 11:57:00 -06:00
2025-11-05 10:45:02 -06:00
2025-11-05 11:24:21 -06:00
2025-11-04 09:16:49 -06:00

Moose_CTLD_Pure

Pure-MOOSE CTLD-style logistics and FAC/RECCE without MIST or mission editor templates. Drop-in, config-driven.

What this is

  • Logistics and troop transport similar to popular CTLD scripts, implemented directly on MOOSE.
  • No MIST. No mission editor templates. Unit compositions are defined in config tables.
  • Optional FAC/RECCE module that auto-marks targets in zones and can drive artillery marking and JTAC auto-lase.

Quick start

  1. Load Moose.lua first, then include these files (order matters). Easiest path: load the crate catalog first so CTLD auto-detects it.
  • Moose_CTLD_Pure/catalogs/CrateCatalog_CTLD_Extract.lua (sets _CTLD_EXTRACTED_CATALOG)
  • Moose_CTLD_Pure/Moose_CTLD.lua
  • Moose_CTLD_Pure/Moose_CTLD_FAC.lua (optional, for FAC/RECCE)
  1. Initialize CTLD with minimal config:
local CTLD = dofile(lfs.writedir()..[[Scripts\Moose_CTLD_Pure\Moose_CTLD.lua]])
local ctld = CTLD:New({
  CoalitionSide = coalition.side.BLUE,
  -- If you want to rely ONLY on the external catalog, disable built-ins
  -- UseBuiltinCatalog = false,
  Zones = {
    PickupZones = { { name = 'PICKUP_BLUE_MAIN' } },
    DropZones   = { { name = 'DROP_BLUE_1' } },
  },
})

-- No manual merge needed if you loaded the catalog file before CTLD.lua.
-- Supported globals that auto-merge: _CTLD_EXTRACTED_CATALOG, CTLD_CATALOG, MOOSE_CTLD_CATALOG
  • If you don't have ME trigger zones, define by coordinates:
Zones = {
  PickupZones = {
    { coord = { x=123456, y=0, z=654321 }, radius=150, name='ScriptPickup1' },
  }
}
  1. (Optional) FAC/RECCE:
local FAC = dofile(lfs.writedir()..[[Scripts\Moose_CTLD_Pure\Moose_CTLD_FAC.lua]])
local fac = FAC:New(ctld, {
  CoalitionSide = coalition.side.BLUE,
  Arty = { Enabled = true, Groups = { 'BLUE_ARTY_1' }, Rounds = 3, Spread = 100 },
})
fac:AddRecceZone({ name = 'RECCE_ZONE_1' })
fac:Run()
  1. In mission, pilots of allowed aircraft (configured in AllowedAircraft) will see F10 menus:
  • CTLD > Request Crate > [Type]
  • CTLD > Load Troops / Unload Troops
  • CTLD > Build Here
  • FAC/RECCE > List Recce Zones / Mark Contacts (all zones)

Configuring crates and builds (no templates)

Edit CrateCatalog in Moose_CTLD.lua. Each entry defines:

  • required: how many crates to assemble
  • weight: informational
  • dcsCargoType: DCS static cargo type string (e.g., uh1h_cargo, container_cargo); tweak per map/mods
  • build(point, headingDeg): function returning a DCS group table for coalition.addGroup

Example snippet:

CrateCatalog = {
  MANPADS = {
    description = '2x Crates -> MANPADS team',
    weight = 120,
    dcsCargoType = 'uh1h_cargo',
    required = 2,
    side = coalition.side.BLUE,
    category = Group.Category.GROUND,
    build = function(point, headingDeg)
      return { visible=false, lateActivation=false, units={
        { type='Soldier stinger', name='CTLD-MANPADS-1', x=point.x, y=point.z, heading=math.rad(headingDeg or 0) }
      } }
    end,
  },
}

Notes and limitations

  • This avoids sling-load event dependency by using a player command "Build Here" that consumes nearby crates within a radius. You can still sling crates physically.
  • Cargo static types vary across DCS versions. If a spawned crate isnt sling-loadable, change dcsCargoType strings in CrateCatalog (e.g., uh1h_cargo, container_cargo, ammo_cargo, container_20ft depending on map/version).
  • Troops are virtually loaded and spawned on unload. Adjust capacity logic if you want type-based capacities.
  • FAC/RECCE detection leverages Moose DETECTION_AREAS. Tweak ScanInterval, DetectionRadius, and MinReportSeparation to balance spam/performance.
  • Artillery marking uses Controller.setTask('FireAtPoint') on configured groups. Ensure those groups exist and are artillery-capable.
  • JTAC Auto-Lase helper provided: fac:StartJTACOnGroup(groupName, laserCode, smokeColor) uses FAC_AUTO.

Catalog sources and precedence

  • By default, CTLD includes a small built-in sample catalog so it works out-of-the-box.
  • If you load a catalog file before calling CTLD:New(), CTLD auto-merges the global catalog (no extra code needed).
  • To use only your external catalog and avoid sample entries, set UseBuiltinCatalog = false in the CTLD:New({...}) config.

Extending

  • Add radio beacons, FOB build recipes, fuel/ammo crates, and CSAR hooks by registering more CrateCatalog entries and/or adding helper methods.
  • To support per-airframe capacities and sling-only rules, extend AllowedAircraft and add a type->capacity map.

Changelog

  • 0.1.0-alpha: Initial release: CTLD crate/troops/build, FAC recce zones + arty mark + JTAC bootstrap.