Arma 3 Task Enhancements

From Bohemia Interactive Community
Revision as of 17:59, 9 March 2016 by Revo (talk | contribs) (fixed typo)
Jump to navigation Jump to search

Introduced with Arma 3 version 1.541.54

This system is currently being integrated into the game engine as part of the Arma 3 Tasks Overhaul updates.

The Task Enhancements system is scheduled to be replaced by Arma 3 Tasks Overhaul in Arma 3 1.58.

Content using scripted Task Enhancements system should continue to work without any changes needed.

System Overview

In addition to the task framework optimizations and improvements that were done through 1.42-1.48 releases there are 4 new extra task related plugins being developed under the Task Enhancements label:

  1. Core
  2. 3D Markers
  3. Task Sharing
  4. Task Propagation

The main goal of the task enhancement plugins is to extend the functionality of the task framework and improve the UX by making the interaction with tasks more intuitive, rewarding and quick. The task enhancements are fully SP and MP compatible.

Controlling plugins

All enhancements are disabled by default. To override that, add CfgTaskEnhancements class into the mission's description.ext file and add at least the enable = 1; parameter to the class. The enable = 1; parameter will activate the core plugin. If you want to add the 3d markers, task sharing or propagation, you need to define the corresponding parameters (check the example below for more info).

class CfgTaskEnhancements
   enable       = 1;            //0: disable new task features (default), 1: enable new task features & add new task markers and task widgets into the map
   3d           = 1;            //0: do not use new 3D markers (default), 1: replace task waypoints with new 3D markers
   3dDrawDist   = 10000;        //3d marker draw distance (default: 2000)
   share        = 1;            //0: do not count assigned players (default), 1: count how many players have the task assigned
   propagate    = 1;            //0: do not propagate (default), 1: propagate shared tasks to subordinates


The Core plugin, as name suggests, is a prerequisite of all task enhancement plugins. But there are more logical links between the plugins:

  • the Core handles whole task type detection and visualization and because of that, they are required for 3D Markers.
  • the Task Sharing gathers and delivers task assignment data to all clients and feeds those data to Core (its in map visualization) and 3D Markers.
  • because Task Propagation works only on task that are shared and that's why having Task Sharing enabled is required for Task Propagation to work.

Plugin dependencies

Current and Future State

The current version is more or less scripted prototype. It is still in active development. There are some limitations due to being scripted system, but overall it works well and is optimized network wise.

The target state of Task Enhancements system is to move most of it into the engine. The frontend definition should stay intact as much as possible, but we cannot assure there won't be any changes. Moving a scripted system into the engine is just a very cardinal operation.

Be aware of it and use the Task Enhancements system at your own risk.


The functionality and purpose of Core plugin can be divided into 2 parts.

First, the plugin creates the shell for all task enhancement plugins to work and visualize properly by tweaking the task related scripts and extending the data structures to accommodate for additional task attributes.

Second, the Core plugin handles the improved visualization of tasks in 2D - in map, briefing and respawn dialog. This is considered to be a minimal version of tasks enhancements to be used. That’s why it is baked into the functionality of Core plugin.


If you toggle on the Core plugin, the 2D task markers will be replaced by new task markers with the task type icons. If the task doesn’t have the type associated (see parameters of BIS_fnc_taskCreate), the default task type and icon will used. In addition the task tooltip widget will now appear if you mouse over the task marker. The tooltip widget displays up to 3 information about the given task and can be used to quickly assign or unassign the player to resp. from the task.

The new 2D task marker created by the Core plugin consists of black square background and task type icon colored white, which is displayed over it. This is a default visual state. The state changes according to task and interaction states.

Check the table below for preview of different visual states.

Task State Interaction Visualization Preview Notes
unassigned - TaskEnhancements 2Dmarkers normal-default.png * default state when task is created
unassigned mouseover TaskEnhancements 2Dmarkers zoomed-default.png * mouseover task marker in default state
* task marker is enlarged
* widget is shown
unassigned selected TaskEnhancements 2Dmarkers normal-default+selected.png * task in default state is selected
* icon and background colors are swapped
unassigned selected + mouseover TaskEnhancements 2Dmarkers zoomed-default+selected.png * mouseover task marker in default state
* task marker is enlarged
* widget is shown
assigned - TaskEnhancements 2Dmarkers normal-assigned.png * assigned state when task is created
* orange replaces white color
assigned mouseover TaskEnhancements 2Dmarkers zoomed-assigned.png * mouseover task marker in assigned state
* task marker is enlarged
* widget is shown
assigned selected TaskEnhancements 2Dmarkers normal-assigned+selected.png * task in assigned state is selected
* icon and background colors are swapped
assigned selected + mouseover TaskEnhancements 2Dmarkers zoomed-assigned+selected.png * mouseover task marker in assigned state
* task marker is enlarged
* widget is shown

Task type

There are several new task attributes, but the most visual and significant attribute is the task type. The task type defines the nature or let’s say category of the task. It is visualized through Core and 3D Markers plugins in 2D resp. 3D environment and it should give player very quick overview what is the particular task most likely about.

How are the task types defined?

The task type attribute is defined in CfgTaskTypes (see example below) as a class that currently has these 2 attributes:

  1. icon - path to the task type icon used in 2D
  2. icon3D - path to the task type icon used in 3D
class CfgTaskTypes
   class Attack
       icon     = \A3\UI_F_MP_Mark\Data\Tasks\Types\Attack_ca.paa;
       icon3D   = \A3\UI_F_MP_Mark\Data\Tasks\Types3D\Attack_ca.paa;
   class Defend
       icon     = \A3\UI_F_MP_Mark\Data\Tasks\Types\Defend_ca.paa;
       icon3D   = \A3\UI_F_MP_Mark\Data\Tasks\Types3D\Defend_ca.paa;

What task types are available?

There are currently these 8 archetype task types defined:

  1. Default
  2. Attack
  3. Defend
  4. Destroy
  5. Interact
  6. Move
  7. Search
  8. Support

And there is a pre-defined task type for every capital letter in latin alphabet.

How to extend the list of task types?

The list of available task types can be extended through new CfgTaskTypes definition in mission description.ext, campaign description.ext or global (addon) config.


  • Even if the system was designed to be easy to extend, be careful with adding and using too many task types. If there will be 20 different task types used in the scenario, players might get confused by all the different icons in the map/on the screen.

How to create the new task type textures?

There are currently 2 textures needed to define a task type. This is due to limitation of the scripted solution. When the feature will be moved into the engine, only single texture will most likely be needed.

2D texture

  • texture size is 64x64
  • format .paa
  • texture is centered, positioned in the middle of the canvas area, with approx. 4 px margins
  • foreground (texture) color is white
  • alpha 100%
  • background transparent

3D texture

  • texture size is 128x128
  • format .paa
  • texture is positioned in the top half of the canvas area, bottom half is empty
  • foreground (texture) color is white
  • alpha 100%
  • background transparent

System, network traffic & BattlEye filters

The system doesn’t create any network traffic, all is done locally. If Task Sharing is used, the system reuses the data provided by the Task Sharing plugin.

3D Markers

The 3D Markers plugin extends functionality of the Core plugin by bringing the new task markers with task type icons into 3D environment. The 3D Markers if active replace the classic task waypoints with markers consisting of task type texture and distance indicator.

The goal of 3D Markers is to provide player with more useful, functional and visually appealing info about the tasks around him.


The current visualization is subject to change and some extra control mechanics can be put on top of it. Currently the system shows all tasks in set radius, define by config parameter 3dDrawDist=10000; (default 10km). Depending on the circumstances, this can feel like too much of the screen clutter. To counter that the draw distance can be lowered or even set to 0.


  • The currently assigned task is always visible. The draw distance doesn't matter.
Task State Visualization Preview Notes
Unassigned TaskEnhancements 3dmarkers unassigned.png * 3D marker for unassigned task uses the same color scheme as the 2D marker.
* Notice the marker is quite transparent, to lower the screen cluttering if multiple tasks are around (they are all visualized).
Assigned TaskEnhancements 3dmarkers assigned.png * 3D marker for assigned task uses the same color scheme as the 2D marker.
* Notice the 3D marker for assigned task is less transparent then is used for unassigned task.

System, network traffic & BattlEye filters

The system doesn’t create any network traffic, all is done locally. If Task Sharing is used, the system reuses the data provided by the Task Sharing plugin.

Task Sharing (MP)

The goal of Task sharing is to handle gathering and distribution of information about task assignments - who is assigned to what task.


This information is visualized in 2 ways:

  1. by 2D markers as the counter of players assigned to particular task in its map widget
  2. by 3D markers by colorizing task 3D marker icon, if the task is assigned to at least one friendly player

Controlling task sharing

Task sharing is controlled in two levels:

  1. global level - by setting the config property
  2. local level - by flagging the task for sharing when it is created (see the BIS_fnc_taskCreate)

The global settings takes the precedence. If the description.ext param share=0;, the task sharing will be completely disabled. If share=1; sharing will be unlocked and the local - per task - setting kicks in.

By default all tasks are allowed for sharing, so all what is needed is to set the global config property.

System, network traffic & BattlEye filters

The information about player’s assigned task is stored in the player’s namespace under variable @. This variable gets broadcasted every time player’s assigns himself or is assigned to different task.


  • All changes of assigned tasks are processed immediately, but the broadcast is slightly postponed and only the last/final value is being send.
  • The variable used for storing and broadcasting of the player’s assigned task is only 1 char long to save the network data size.
  • Processing of information about who and how many people are assigned to given task is handled locally.


  • If the task sharing is being used, server admins should setup a filter exception for the player’s variable @ to allow broadcast of the task assignment data.

Task Propagation (MP)

The goal of Task Propagation plugin is to support the squad based team play by allowing only the squad leader to assign tasks.

If squad leader assigned task changes, the plugin automatically updates the assigned task on all his subordinates.

Known issues:

  • Subordinates can assign tasks to them from the task description panel by clicking the “Assign as current” link.

System, network traffic & BattlEye filters

The system doesn’t create any network traffic, all is done locally. If Task Sharing is used, the system re-uses the data provided by the Task Sharing plugin.