Table of Contents
- Mission Maker Function Reference
- Quick Examples
- Common Notes
- Reports and Markers
- Friendly Units and Groups
- Digital Pointer
- Drawing Tools
- armatak_fnc_draw_circle
- armatak_fnc_draw_ellipse
- armatak_fnc_draw_rectangle
- armatak_fnc_draw_polyline
- armatak_fnc_draw_route
- armatak_fnc_draw_tactical_graphic
- Registered CoTs and Cleanup
- UAS and Video CoT
- armatak_fnc_send_drone_cot
- armatak_fnc_send_uas_platform_cot
- armatak_fnc_send_uas_video_cot
- armatak_fnc_send_uas_sensor_cot
- armatak_fnc_set_uas_camera_override
- Socket Control
- Useful Extractors
- armatak_fnc_extract_unit_callsign
- armatak_fnc_extract_marker_callsign
- armatak_fnc_extract_role
- armatak_fnc_extract_marker_video_url
- armatak_fnc_extract_uuid
- Runtime Variables
- armatak_disable_sensor_data
- armatak_current_side
- UAS camera tuning
- UAS home and armed state
- Dynamic router entity list
- Stable custom CoT identity
- Variables to avoid editing directly
- 3DEN Attributes for Mission Makers
Mission Maker Function Reference
This page documents ARMATAK SQF functions that are useful from mission scripts. Function names follow the Arma 3 call convention:
[arg1, arg2] call armatak_fnc_function_name;
Most functions send data immediately to TAK through the ARMATAK TCP extension. Positions can usually be passed as either an Arma object or an [x, y, z] position. ARMATAK converts the in-game map position to real-world coordinates before sending the CoT.
Quick Examples
// Report an enemy tank at the object under the cursor for 1 hour.
[cursorObject, "enemy", "tank", "Enemy Tank", "Observed near MSR"] call armatak_fnc_report_marker;
// Draw a 300 m risk circle centered on a marker.
private _pos = getMarkerPos "mortar_risk";
[_pos, 300, "Mortar Risk Area"] call armatak_fnc_draw_circle;
// Draw a route through editor markers.
private _route = [
getMarkerPos "route_sp",
getMarkerPos "route_cp1",
getMarkerPos "route_vdo"
];
[_route, "Patrol Route Alpha"] call armatak_fnc_draw_route;
Common Notes
- Stale time values are in seconds. After that time, TAK clients may expire the item.
- Colors are signed ARGB integers, as expected by ATAK drawing details. Defaults are usually white stroke and translucent fill.
- Functions that call the extension assume the ARMATAK TCP socket/router is already configured and running.
- 3DEN attributes can override callsigns, marker types, group colors, roles, and vehicle video URLs.
Reports and Markers
armatak_fnc_report_marker
Sends a one-shot TAK report marker with its own stale time. This is the most useful function for scripted intelligence reports, trigger-created enemy sightings, objectives, and temporary points of interest.
[_source, _affiliationOrType, _kind, _callsign, _remarks, _staleSeconds] call armatak_fnc_report_marker;
Supported affiliations are "friendly", "enemy", "hostile", "neutral", and "unknown". You can also pass a raw CoT type starting with a-. Supported simple marker kinds are "infantry", "tank", "car", "apc", "helicopter", "plane", "ship", and "static".
[cursorObject, "enemy", "tank", "Enemy Tank", "Reported enemy armor"] call armatak_fnc_report_marker;
[screenToWorld [0.5, 0.5], "unknown", "infantry", "Unknown Contact", "Reported by patrol", 7200] call armatak_fnc_report_marker;
[cursorObject, "a-h-G-U-C-A-T", "T-140 Angara", "Confirmed armor", 7200] call armatak_fnc_report_marker;
armatak_fnc_send_marker_cot
Sends a live marker CoT for an object using an explicit CoT type and callsign. It uses the object's current position, course, speed, UUID, and optional 3DEN video URL.
[_unitOrVehicle, _cotType, _callsign] call armatak_fnc_send_marker_cot;
[enemyTank1, "a-h-G-U-C-A-T", "Enemy Tank 1"] call armatak_fnc_send_marker_cot;
armatak_fnc_send_enemy_cot
Sends a marker CoT for a unit or vehicle using ARMATAK's automatic marker type and marker callsign extraction. Despite the name, the function uses the object's side and overrides to determine the CoT type.
[_unitOrVehicle] call armatak_fnc_send_enemy_cot;
{ [_x] call armatak_fnc_send_enemy_cot } forEach units enemyPatrol;
Friendly Units and Groups
armatak_fnc_send_eud_cot
Sends an EUD-style CoT for a unit with a callsign, group color/name, and group role. This is the lower-level function used by group sync.
[_unit, _callsign, _groupName, _groupRole] call armatak_fnc_send_eud_cot;
[player, "Alpha 1-1", "Blue", "Team Lead"] call armatak_fnc_send_eud_cot;
armatak_fnc_send_group_cots
Sends EUD CoTs for every unit in a group. ARMATAK derives each unit's callsign and role, and derives or assigns the group color.
[_group] call armatak_fnc_send_group_cots;
[group player] call armatak_fnc_send_group_cots;
[] spawn {
while {true} do {
[group alphaLead] call armatak_fnc_send_group_cots;
sleep 5;
};
};
Digital Pointer
armatak_fnc_send_digital_pointer_cot
Sends a TAK digital pointer for a unit's current laser target. Nothing is sent if the unit has no active laser target.
[_unit] call armatak_fnc_send_digital_pointer_cot;
[player] call armatak_fnc_send_digital_pointer_cot;
Drawing Tools
armatak_fnc_draw_circle
Draws an ATAK Drawing Tools circle.
[_center, _radius, _callsign, _staleSeconds, _strokeColor, _fillColor, _strokeWeight] call armatak_fnc_draw_circle;
[player, 300, "Mortar Risk Area"] call armatak_fnc_draw_circle;
[getMarkerPos "objective", 150, "OBJ Security Bubble", 10800] call armatak_fnc_draw_circle;
armatak_fnc_draw_ellipse
Draws an ATAK Drawing Tools ellipse or circle. Use it for support-by-fire areas, search areas, or oriented zones.
[_center, _majorRadius, _minorRadius, _angle, _callsign, _staleSeconds, _strokeColor, _fillColor, _strokeWeight, _milsym, _cotType] call armatak_fnc_draw_ellipse;
[screenToWorld [0.5, 0.5], 250, 100, 45, "Support by Fire"] call armatak_fnc_draw_ellipse;
armatak_fnc_draw_rectangle
Draws an ATAK Drawing Tools rectangle from a center point, width, length, and bearing.
[_center, _width, _length, _bearing, _callsign, _staleSeconds, _strokeColor, _fillColor, _strokeWeight, _milsym] call armatak_fnc_draw_rectangle;
[getMarkerPos "ea_center", 200, 500, 30, "Engagement Area"] call armatak_fnc_draw_rectangle;
armatak_fnc_draw_polyline
Draws an ATAK Drawing Tools freeform line or polygon from two or more positions or objects.
[_points, _callsign, _closed, _staleSeconds, _strokeColor, _fillColor, _strokeWeight, _strokeStyle, _milsym, _cotType] call armatak_fnc_draw_polyline;
[[pos player, screenToWorld [0.5, 0.5]], "Phase Line Blue"] call armatak_fnc_draw_polyline;
private _polygon = [
getMarkerPos "zone_1",
getMarkerPos "zone_2",
getMarkerPos "zone_3"
];
[_polygon, "Restricted Area", true] call armatak_fnc_draw_polyline;
armatak_fnc_draw_route
Sends an ATAK navigable route. The function creates route links, start point, final destination, and optional checkpoints along the route.
[_points, _callsign, _staleSeconds, _color, _strokeWeight, _method, _routeType, _direction, _checkpointInterval] call armatak_fnc_draw_route;
[[pos player, getMarkerPos "cp1", getMarkerPos "vdo"], "Patrol Route"] call armatak_fnc_draw_route;
[_routePoints, "Convoy Route", 86400, -1, 4, "Driving", "Primary", "Infil", 2] call armatak_fnc_draw_route;
armatak_fnc_draw_tactical_graphic
Draws an ATAK shape with a MilSym tactical graphic overlay. Use this when the TAK symbol matters, such as axis of advance, boundaries, and other tactical graphics.
[_points, _milsymSidc, _callsign, _closed, _staleSeconds, _strokeColor, _fillColor, _strokeWeight] call armatak_fnc_draw_tactical_graphic;
[[pos player, screenToWorld [0.5, 0.5]], "GFGPOLAGM-----X", "Axis of Advance"] call armatak_fnc_draw_tactical_graphic;
Registered CoTs and Cleanup
armatak_fnc_register_cot
Registers a CoT UID under a mission-defined scope so it can be deleted later with armatak_fnc_delete_registered_cots. This is useful when scripts create persistent TAK objects and need to clean them up when an objective ends.
[_scope, _uid, _cotType, _lat, _lon, _hae] call armatak_fnc_register_cot;
private _registered = ["objective_alpha", _uid, "a-h-G-U-C-I", _lat, _lon, _hae] call armatak_fnc_register_cot;
Returns true when registration succeeds, otherwise false.
armatak_fnc_delete_registered_cots
Sends forced delete CoTs for all registered CoTs in a scope, then removes them from the local registry.
[_scope] call armatak_fnc_delete_registered_cots;
private _deletedCount = ["objective_alpha"] call armatak_fnc_delete_registered_cots;
systemChat format ["Deleted %1 TAK objects for objective_alpha", _deletedCount];
Returns the number of delete CoTs sent.
UAS and Video CoT
armatak_fnc_send_drone_cot
Compatibility wrapper that sends UAS platform CoT for a drone. New scripts can call armatak_fnc_send_uas_platform_cot directly.
[_drone] call armatak_fnc_send_drone_cot;
[uav1] call armatak_fnc_send_drone_cot;
armatak_fnc_send_uas_platform_cot
Sends the UAS platform CoT for a drone, including callsign, position, course, speed, camera azimuth/elevation/FOV/range, flight state, controller UID, and optional video URL metadata.
[_drone] call armatak_fnc_send_uas_platform_cot;
[] spawn {
while {alive uav1} do {
[uav1] call armatak_fnc_send_uas_platform_cot;
sleep 1;
};
};
armatak_fnc_send_uas_video_cot
Publishes the UAS video feed CoT for a drone that has armatak_attribute_marker_video_url set. The function throttles refreshes and exits without sending if no video URL is configured.
[_drone] call armatak_fnc_send_uas_video_cot;
uav1 setVariable ["armatak_attribute_marker_video_url", "rtsp://192.168.1.50:8554/uav1", true];
[uav1] call armatak_fnc_send_uas_video_cot;
armatak_fnc_send_uas_sensor_cot
Sends the UAS sensor CoT for a drone with a configured video URL. It links the sensor UID to the video UID and includes the sensor point of interest data derived from camera direction/range.
[_drone] call armatak_fnc_send_uas_sensor_cot;
[uav1] call armatak_fnc_send_uas_video_cot;
[uav1] call armatak_fnc_send_uas_sensor_cot;
armatak_fnc_set_uas_camera_override
Overrides the camera data used by UAS CoT generation. Pass at least six values: azimuth, elevation, FOV, range, SPI ASL, and SPI geo. Pass an empty array to clear the override.
[_drone, _cameraData] call armatak_fnc_set_uas_camera_override;
private _spiAsl = getPosASL target1;
private _spiGeo = (getPosATL target1) call armatak_client_fnc_convertClientLocation;
[uav1, [120, -25, 45, 1800, _spiAsl, _spiGeo]] call armatak_fnc_set_uas_camera_override;
[uav1, []] call armatak_fnc_set_uas_camera_override;
Socket Control
armatak_fnc_stop_tcp_socket
Stops the ARMATAK TCP socket if it is running and updates the mission namespace running flag. This is mainly useful for admin/debug scripts or mission cleanup logic.
[] call armatak_fnc_stop_tcp_socket;
Useful Extractors
These helpers are useful when mission scripts need the same values ARMATAK uses internally.
armatak_fnc_extract_unit_callsign
Returns the TAK callsign for a playable unit. It uses role description/name and can be overridden with the 3DEN Unit Callsign attribute.
private _callsign = [player] call armatak_fnc_extract_unit_callsign;
armatak_fnc_extract_marker_callsign
Returns the TAK marker callsign for a vehicle, UAV, or object. It considers 3DEN Marker Callsign, vehicle variable name, display name, driver, UAV controller, and UAV connection state.
private _callsign = [uav1] call armatak_fnc_extract_marker_callsign;
armatak_fnc_extract_role
Returns the CoT type/SIDC-like role ARMATAK will use for a unit or vehicle. It considers side, object type, vehicle type, and the 3DEN Marker Type override.
private _type = [cursorObject] call armatak_fnc_extract_role;
armatak_fnc_extract_marker_video_url
Returns the video URL configured on a vehicle through the 3DEN Video Feed URL attribute or by setting armatak_attribute_marker_video_url.
private _url = [uav1] call armatak_fnc_extract_marker_video_url;
armatak_fnc_extract_uuid
Returns the stable ARMATAK UUID used for a unit, vehicle, or object. Use it when you need to correlate scripted TAK objects with ARMATAK-generated CoTs.
private _uid = [player] call armatak_fnc_extract_uuid;
Runtime Variables
Runtime variables let mission scripts tune how ARMATAK publishes specific entities without changing addon code. Use setVariable on the entity that owns the behavior, or missionNamespace setVariable for global router state.
When the value must be visible across machines, use the public flag:
_entity setVariable ["armatak_variable_name", _value, true];
missionNamespace setVariable ["armatak_variable_name", _value, true];
For server-side router behavior, set these on the server or publish them with the third setVariable argument set to true.
| Variable | Scope | Type | Safe to write? | Description |
|---|---|---|---|---|
armatak_disable_sensor_data |
Routed entity | Boolean | Yes | Disables additional sensor-detected contact publishing for that entity. |
armatak_current_side |
Unit/vehicle | Side | Yes | Overrides the side ARMATAK uses when deriving affiliation for a marker. |
armatak_uas_fov |
UAV | Number | Yes | Horizontal camera FOV in degrees used by UAS CoT and MAVLink camera data. |
armatak_uas_vfov |
UAV | Number | Yes | Vertical camera FOV in degrees. Defaults to armatak_uas_fov * 0.5625. |
armatak_uas_max_range |
UAV | Number | Yes | Max range in meters used when projecting the UAS sensor point. |
armatak_uas_controller_uid |
UAV | String | Advanced | Fallback controller UID used when no live UAV controller is found. |
armatak_uas_armed |
UAV | Boolean | Advanced | Armed state mirrored to UAS Tool. Usually managed by ARMATAK and UAS Tool callbacks. |
armatak_uas_home_atl |
UAV | Position ATL | Advanced | Home/RTL point used by UAS Tool commands. Usually initialized automatically. |
armatak_uas_home_geo |
UAV | [lat, lon, alt] |
Advanced | Geographic home point reported to UAS Tool. Keep in sync with armatak_uas_home_atl if writing it. |
armatak_uas_spi_asl |
UAV | Position ASL | Read/debug | Last sensor point of interest in ASL, written by camera extraction. |
armatak_uas_spi_geo |
UAV | [lat, lon, hae] |
Read/debug | Last sensor point of interest in TAK coordinates, written by camera extraction. |
armatak_uav_mavlink_broadcasting |
UAV | Boolean | Read/debug | True while the client-side MAVLink broadcaster owns this UAV. The server router uses it to avoid duplicate UAS CoT. |
_atak_uid |
Entity | String | Advanced | Stable UID used by ARMATAK for CoT identity. Prefer armatak_fnc_extract_uuid unless you deliberately need a custom fixed UID. |
armatak_server_syncedUnits |
missionNamespace |
Array of objects | Yes | Current server-side router entity list. Useful for dynamic mission routing. |
armatak_tcp_socket_is_running |
missionNamespace |
Boolean | Read/debug | True while the TCP router is considered running. Prefer router modules and armatak_fnc_stop_tcp_socket for control. |
armatak_registered_cots |
missionNamespace |
Array | Internal | Registry used by armatak_fnc_register_cot and armatak_fnc_delete_registered_cots. Use the functions instead of editing directly. |
armatak_server_clientClaimedEuds |
missionNamespace |
Array of UIDs | Internal | Tracks EUDs claimed by client-side connection logic to avoid duplicate server EUD CoTs. |
armatak_uas_mission_items |
UAV | Array | Internal | Route items received from UAS Tool mission upload. Managed by MAVLink callbacks. |
armatak_disable_sensor_data
Set this variable on a routed entity to stop ARMATAK from publishing additional sensor-detected contacts for that entity. The entity itself can still be routed normally; only the extra contacts produced by getSensorTargets are suppressed.
This is useful for scripted mission targets such as convoy vehicles where you want TAK to show only the vehicle marker, not every crewman or passenger detected by that vehicle.
_convoyVehicle setVariable ["armatak_disable_sensor_data", true, true];
Clear or set it to false if you want the entity to publish sensor contacts again.
_convoyVehicle setVariable ["armatak_disable_sensor_data", false, true];
armatak_current_side
Overrides the side ARMATAK uses when it derives a CoT affiliation from an object. This is useful for scripted captures, undercover units, spawned targets, or cases where the engine side does not match what TAK should display.
// Force a civilian-looking object to publish as hostile.
_target setVariable ["armatak_current_side", east, true];
// Restore normal side-derived behavior.
_target setVariable ["armatak_current_side", nil, true];
UAS camera tuning
Use these variables on UAVs when the default camera model is too generic for the platform:
uav1 setVariable ["armatak_uas_fov", 45, true];
uav1 setVariable ["armatak_uas_vfov", 25, true];
uav1 setVariable ["armatak_uas_max_range", 8000, true];
armatak_uas_fov and armatak_uas_vfov affect the camera/video metadata sent to TAK and UAS Tool. armatak_uas_max_range limits how far ARMATAK projects the sensor point when the camera is not looking directly at terrain.
For a temporary exact camera solution, prefer armatak_fnc_set_uas_camera_override instead of setting armatak_uas_spi_asl or armatak_uas_spi_geo manually.
private _spiAsl = getPosASL target1;
private _spiGeo = (getPosATL target1) call armatak_client_fnc_convertClientLocation;
[uav1, [120, -25, 45, 1800, _spiAsl, _spiGeo]] call armatak_fnc_set_uas_camera_override;
UAS home and armed state
ARMATAK initializes armatak_uas_home_atl and armatak_uas_home_geo automatically when a UAV starts broadcasting. UAS Tool can also update home through supported MAVLink commands.
Mission scripts can pre-seed or override home if needed:
private _homeAtl = getMarkerPos "uav_home";
_homeAtl set [2, 75];
private _homeGeo = _homeAtl call armatak_client_fnc_convertClientLocation;
uav1 setVariable ["armatak_uas_home_atl", _homeAtl, true];
uav1 setVariable ["armatak_uas_home_geo", _homeGeo, true];
armatak_uas_armed is normally managed by ARMATAK when UAS Tool sends arm/disarm commands. If a mission script force-starts a UAV and you want UAS Tool to see it as armed:
uav1 engineOn true;
uav1 setVariable ["armatak_uas_armed", true, true];
Dynamic router entity list
armatak_server_syncedUnits is the server-side router list used by the CoT router loop. You can update it from mission scripts when entities are spawned, deleted, captured, or moved between mission systems.
private _routed = missionNamespace getVariable ["armatak_server_syncedUnits", []];
_routed pushBackUnique _newVehicle;
missionNamespace setVariable ["armatak_server_syncedUnits", _routed, true];
To remove an entity:
private _routed = missionNamespace getVariable ["armatak_server_syncedUnits", []];
_routed = _routed - [_oldVehicle];
missionNamespace setVariable ["armatak_server_syncedUnits", _routed, true];
For periodic dynamic missions, rebuild the list from your mission state and remove null/dead objects before publishing it:
private _entities = playableUnits + (missionNamespace getVariable ["myMission_routedVehicles", []]);
_entities = _entities arrayIntersect _entities;
_entities = _entities select {!isNull _x && {alive _x}};
missionNamespace setVariable ["armatak_server_syncedUnits", _entities, true];
Stable custom CoT identity
ARMATAK stores each entity UUID in _atak_uid. Most scripts should read it through armatak_fnc_extract_uuid:
private _uid = [uav1] call armatak_fnc_extract_uuid;
Only set _atak_uid yourself when you intentionally need a deterministic TAK identity across respawns or recreated objects:
_newVehicle setVariable ["_atak_uid", "mission-convoy-vehicle-01", true];
Do this before the entity is first published. Reusing the same UID for two live entities will make TAK clients treat them as the same object.
Variables to avoid editing directly
Do not directly edit armatak_registered_cots; use:
[_scope, _uid, _cotType, _lat, _lon, _hae] call armatak_fnc_register_cot;
[_scope] call armatak_fnc_delete_registered_cots;
Avoid direct writes to armatak_uas_mission_items, armatak_server_clientClaimedEuds, armatak_uas_spi_asl, and armatak_uas_spi_geo unless you are debugging ARMATAK internals. Those values are maintained by the router, camera extractor, or MAVLink callbacks.
3DEN Attributes for Mission Makers
ARMATAK adds these editor attributes:
| Scope | Attribute | Variable | Use |
|---|---|---|---|
| Unit | Unit Callsign | armatak_attribute_unit_callsign |
Overrides EUD/unit callsign. |
| Unit | Unit Role | armatak_attribute_unit_role |
Sets the intended group role. |
| Vehicle/Object | Marker Callsign | armatak_attribute_marker_callsign |
Overrides marker or UAS callsign. |
| Vehicle/Object | Marker Type | armatak_attribute_marker_type |
Overrides CoT marker type. |
| Vehicle/Object | Video Feed URL | armatak_attribute_marker_video_url |
Adds a shared video URL for marker/UAS video CoTs. |
| Group | Color | armatak_attribute_group_color |
Sets TAK group color/name. |
You can also set the same values from scripts:
player setVariable ["armatak_attribute_unit_callsign", "Alpha 1-1 Actual", true];
uav1 setVariable ["armatak_attribute_marker_callsign", "Raven 1", true];
uav1 setVariable ["armatak_attribute_marker_video_url", "rtsp://192.168.1.50:8554/raven1", true];
ARMATAK
Arma 3 addon for streaming game data into the TAK ecosystem.