Vignette Configuration

A training vignette is one JSON file that describes a site, its terrain, the rounds, the units and aircraft, and a timeline of cues. Launch it with --vignette <file.json> (add --run to start in simulation mode and play).

In edit mode every unit and round type appears in the scene tree. Selecting one shows its parameters in the property pane: bounded values are drawn as sliders, and edits are saved as overrides in a case file (--case <file.case.json>). The baseline JSON is never rewritten.

Top level

Key Meaning
title Display name
site {lat, lon, alt_m}: the vignette's origin; the local frame is the tangent plane here
seed Integer seed for every random draw (dispersion, hit, kill), so runs are repeatable
terrain Lidar DEM terrain; see Terrain
models Per model type: path, real-world length_m / width_m, up axis and yaw_deg fix-ups, optional interior crew-view model, turret_root and recoil meshes
rounds Per round type (below)
units Ground units (below)
aircraft Rotorcraft (below)
cues Timed actions (below)

Rounds

Key Meaning
name Display name
muzzle_mps, mass_kg, drag_coeff, area_m2 Point-mass ballistics with drag
dispersion_mil Seeded Gaussian dispersion
reload_sec Reload time
ph_at_reference, ph_reference_range_m, ph_falloff_per_km, ph_moving_penalty Hit probability as an operator input
pk_given_hit Kill probability given a hit

Effectiveness values (pH, pK, dispersion and timings) are inputs that the operator or Government data set. They are not derived by the software. Shipped values are labelled placeholders.

Units

{"id": "A11", "name": "Abrams A11", "type": "m1a2", "side": "blue",
 "lat": 35.3282784, "lon": -116.4680858, "alt_m": 700, "heading_deg": 90,
 "speed_mps": 0, "primary_round": "m829", "ammo": {"m829": 12},
 "sector_az_deg": [55, 125], "sector_max_m": 3000, "lase_sec": 0.0}

sector_az_deg and sector_max_m define the unit's fire-distribution sector: it engages live targets inside that sector. Optional waypoints move a unit.

Aircraft

{"id": "H1", "name": "Apache H1", "type": "ah64", "side": "blue",
 "lat": 35.332316, "lon": -116.473836, "heading_deg": 90, "liftoff_sec": 3,
 "primary_round": "hellfire", "ammo": {"hellfire": 8, "m789": 300},
 "hold": {"lat": 35.332316, "lon": -116.473836, "masked_agl_ft": 40, "unmasked_agl_ft": 180}}

Cues

action Fields Effect
engage unit, target, optional rounds, range_error_m The unit lases and engages the target
designate unit, target A spotter designates a target and hands it over
call_for_fire unit, target, battery, round, rounds, delay_s A spotter calls for fire; the battery fires after the delay
unmask / mask unit An aircraft rises from or returns behind cover
move unit A unit starts along its waypoints

Every cue has a time t in seconds. Each engagement publishes records on the event stream.