Configure HCP MACE
Open the plugin’s settings window from MACE’s toolbar (HEAT Capture Settings button, added by the plugin). Settings are written to an XML file in MACE’s own per-user settings directory when you save.
Settings are converted into the running capture pipeline exactly once, when the plugin initializes. Saving a change does not reconfigure a plugin that is already running - restart MACE (or reload the plugin) before a saved change takes effect.
Connection
| Setting | Type | Default | Effect | When to change |
|---|---|---|---|---|
CaptureBaseUrl | string | "http://localhost:5005" | Base URL for both the session REST calls and the publish WebSocket (ws:///wss:// derived automatically, path /ws/publish appended) | HEAT Capture runs on a different machine, or uses HTTPS |
AutoStartTransport | boolean | true | Starts/stops capture automatically as the MACE mission runs, pauses and stops | See caution below |
There is no manual start control anywhere else in the plugin. Setting AutoStartTransport to
false does not switch to a manual mode - it means capture never starts at all, for the entire
MACE session.
CaptureBaseUrl defaults to HEAT Capture’s own shipped default (localhost:5005); no port
correction is needed against a stock HEAT Capture install.
Capture cadence
| Setting | Type | Default | Effect | When to change |
|---|---|---|---|---|
CaptureIntervalMs | integer (ms) | 33 | Global capture tick; also the polling rate for transition detection (stall, target-lock, emission/ESM/jamming onset) regardless of any per-category interval below | 100 for 10 Hz, 200 for 5 Hz - reduces volume but can miss a transition that starts and ends between ticks |
ControlledEntityIntervalMs | integer (ms) | 0 (inherit CaptureIntervalMs) | Minimum publish interval for the entity this MACE instance is actively flying (IsInternalEntity && ManeuverState == maneuver) | Rarely - this is usually the entity you care about most |
OtherEntityIntervalMs | integer (ms) | 0 (inherit) | Minimum publish interval for every other entity | Raise to reduce volume in large scenarios without reducing the controlled aircraft’s fidelity |
EnvironmentIntervalMs | integer (ms) | 0 (inherit) | Minimum publish interval for AirData weather and CloudData, evaluated only when the owning entity is due | Raise for slow-changing weather |
ResourceStoresIntervalMs | integer (ms) | 0 (inherit) | Minimum publish interval for fuel and munition stores, evaluated only when the owning entity is due | Raise for slow-changing stores |
PlatformStateMode | FullRate | OnChange | FullRate | OnChange suppresses unchanged Health, aircraft/ground lighting, TargetData, and LinkedEntity; a disappearing value still emits one empty component as a removal marker | OnChange to cut slow-changing platform state |
Per-category intervals only reduce how often that category publishes; they never reduce
transition-detection polling, which always runs at CaptureIntervalMs. Discrete events
(weapon fire, hit, collision, lased) are callback-driven and are never throttled by any interval
setting.
Capture content
| Setting | Type | Default | Effect | When to change |
|---|---|---|---|---|
CaptureEnvironment | boolean | true | Include AirData weather and CloudData | Disable only when environmental replay is not required |
CaptureFlightDetail | boolean | true | Include fixed-wing data, control surfaces, and rotary-wing detail. Core position, dynamics, altitude and health are unaffected | Disable for reduced-fidelity capture |
ContentMode | Full | KinematicsOnly | Full | KinematicsOnly retains entity identity, position, dynamics, health and every event, omitting every other component | Reduced-fidelity capture only - see the caution on the Data produced page |
EW capture
| Setting | Type | Default | Effect | When to change |
|---|---|---|---|---|
CaptureEwEmission | boolean | true | Include EmissionComponent (per-mode emitter data), re-sent every tick for active emitters | Disable to cut frame size in EW-heavy, high-entity-count scenarios |
CaptureEwSensorContacts | boolean | true | Include SensorContactsComponent (perceived, fire-control-assigned target solutions), re-sent every tick while a target is assigned | Same |
CaptureEwReceiverEnvironment | boolean | true | Include ReceiverEnvironmentComponent (dynamic local RF conditions per receiver), re-sent every tick | Same |
Diagnostics
| Setting | Type | Default | Effect | When to change |
|---|---|---|---|---|
EnableSizeDiagnostics | boolean | false | Periodically logs aggregate wire, entity, event, and component-group byte counts | To measure actual capture volume before tuning cadence |
SizeDiagnosticsIntervalSeconds | integer (s) | 60 | Interval between size-diagnostics log entries; clamped to a 1 second minimum | Rarely |
wire in the diagnostics log is the exact serialized Any payload queued for the publish
WebSocket. Entity, event and component-group values are individual protobuf message sizes used
for attribution and exclude enclosing-field overhead, so they will not sum exactly to wire.
Buffering
| Setting | Type | Default | Effect | When to change |
|---|---|---|---|---|
MaxBufferedFrames | integer | 300 | Maximum frames held while the publish socket is reconnecting | Bounds outage memory only - see caution below |
MaxBufferedMegabytes | integer | 32 | Maximum total size of the frame buffer | Same |
MaxBufferedEvents | integer | 20000 | Maximum entity events retained while frames cannot be published or during the identity grace period below | Same |
SessionIdentityBufferTimeoutSeconds | integer (s) | 120 | How long events may be retained while HEAT Capture is starting a session with no valid user identity yet. Beyond this, pending data is discarded | Raise for a HEAT Capture instance that takes unusually long to establish a session |
Buffer size settings bound how much memory an outage can consume - they are not a capture-volume control. Shrinking them to reduce data volume produces unpredictable gaps in what reaches HEAT Capture instead of a predictable reduction.
Retry and timeouts
| Setting | Type | Default | Effect | When to change |
|---|---|---|---|---|
RetryInitialDelayMs | integer (ms) | 500 | Initial backoff delay before retrying a failed session start | Rarely |
RetryMaxDelayMs | integer (ms) | 15000 | Maximum backoff delay between session-start retries | Rarely |
RequestTimeoutMs | integer (ms) | 5000 | Timeout for REST session-control requests | Slow or remote HEAT Capture instance |
SendTimeoutMs | integer (ms) | 2000 | Timeout for sending one frame over the publish WebSocket | Same |
StopDrainTimeoutMs | integer (ms) | 3000 | Budget for flushing already-buffered frames when a mission stops, over the still-open socket. 0 discards them instead of trying | See Data produced for what happens when this expires |
HealthyPollDelayMs | integer (ms) | 250 | Delay between connection health checks while connected; clamped to a 50 ms minimum | Rarely |
SocketKeepAliveSeconds | integer (s) | 15 | WebSocket keep-alive interval | Rarely |
A 60-second session-lifecycle timeout (covering the REST session start/stop calls themselves,
distinct from RequestTimeoutMs) exists in the transport but has no corresponding setting - it
is not configurable in this version.
Capture profiles
Profile is a write-once convenience, not a persisted runtime mode - selecting one writes the
explicit values below, which is what actually gets saved and read back. Changing any one of those
values afterward makes Profile display Custom.
| Profile | Controlled / other entity interval | Environment / store interval | Platform state | Content |
|---|---|---|---|---|
FullFidelity | inherit / inherit | inherit / inherit | FullRate | Every supported group enabled |
Balanced | inherit / 200 ms | 1000 / 1000 ms | OnChange | Full content, EW enabled |
KinematicsOnly | inherit / 200 ms | 1000 / 1000 ms | OnChange | Identity, position, dynamics, health and events only |
All three profiles keep the 33 ms base tick, so transition detection cadence is identical
across all of them - only per-category publish rate and content change. KinematicsOnly is
reduced-fidelity capture: it cannot reconstruct an equivalent replay for the aircraft, environment,
stores, platform, radio, attachment, combat or EW state it omits.