Event Stream

A training vignette publishes one record for every engagement event, in order, to every in-process subscriber. It can also append each record to a JSONL file: one complete JSON object per line, with no line breaks inside it.

The on-screen engagement log, the positional-audio system and external scorers all read the same stream. The line format is a stable contract, so a scoring or after-action application can consume a run without touching the engine.

Event kinds

kind Meaning
spawn A unit is placed
lase A unit lases a target (range acquired)
fire A round or missile is fired
impact A round lands or detonates
hit The round struck its target
miss The round missed
damage A target is damaged
kill The target was killed
call_for_fire A spotter calls for indirect fire
reload A weapon reloads
withdraw A unit breaks contact under a stated rule
run_end The run is over

Fields

Field Type Meaning
kind string One of the kinds above
t_sec number Simulation time, seconds from the start of the run
unit string The unit the event belongs to (shooter, spotter, unit placed)
target string The target, where there is one; otherwise ""
round string The round type, where there is one; otherwise ""
ecef_m [x, y, z] Where it happened, ECEF metres
lat_deg, lon_deg, alt_m numbers The same place, geodetic
range_m number Shooter-to-target range, where it applies
tof_sec number The round's time of flight, where it applies
ph, pk numbers The hit and kill probabilities the shot was taken under (0 when unset)
note string Present only when set: a stated rule or reason, in words

Fields that do not apply to a kind are present with zero values, so every line has every field except note. All numbers are 64-bit floating point.

Example

{"alt_m":712,"ecef_m":[-2400000,-4500000,3600000],"kind":"fire","lat_deg":35.33,"lon_deg":-116.47,"ph":0.88,"pk":0.8,"range_m":1850,"round":"m829","t_sec":12.25,"target":"R1","tof_sec":1.32,"unit":"A11"}

Determinism

Hit, kill and dispersion draws come from a seeded generator (the vignette's seed). The same configuration and seed produce the same event stream, so a run can be replayed and audited, and conformance tests are repeatable.