2
Mission Maker Function Reference
Valmo Trindade edited this page 2026-05-25 03:15:46 -03:00

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];