Functions Library – Arma 3
Arma 3's Functions Library is the way to declare mission, campaign or addon's Functions. The main difference from older Function Libraries is that it runs automatically and does not require a Functions module.
Function Declaration
Functions are configured within the CfgFunctions class.
Mission and campaign specific functions can be configured in Description.ext/Campaign Description.ext, while addon functions are defined in Config.cpp. Configuration structure is the same in both cases.
See a basic example config:
class CfgFunctions
{
class TAG
{
class Category
{
class functionName {};
};
};
};
- The function's name will be TAG_fnc_functionName
- The function will be loaded:
- from config: %ROOT%\Category\fn_functionName.sqf
- from description.ext: %ROOT%\Functions\Category\fn_functionName.sqf
Config Levels
A CfgFunctions config is made of three levels: Tag, Category, and Function.
Tag
To prevent duplicates, every author must create a subclass with a unique tag and create functions under it. The tag name will be used when composing a function name (e.g BIS_fnc_spawnGroup).
class CfgFunctions
{
class TAG
{
class Category
{
class myFunction {};
};
};
class TAG_WeaponManagement
{
tag = "TAG"; // the function will be named TAG_fnc_myOtherFunction
class Category
{
class myOtherFunction {};
};
};
};
Attributes
tag
- the tag attribute
Category
The category name changes the function's category in the Functions Viewer. It does not change the function's name, only the loading path.
class CfgFunctions
{
class TAG
{
class Category
{
class myFunction {};
};
class OtherCategory
{
file = "My\Category\Path";
class myFunction {}; {{cc|file path will be %ROOT%\My\Category\Path\fn_myFunction.sqf";
};
class Data
{
requiredAddons[] = { "A3_Data_F" }; // Optional requirements of CfgPatches classes. If some addons are missing, category functions will not be compiled.
class myDataFunction {};
};
};
};
Attributes
file
The file attribute can override the category's loading path segment.
requiredAddons
The category can skip loading if a required addon is missing by setting its dependency with the requiredAddons attribute.
class Data
{
requiredAddons[] = { "A3_Data_F" }; // Optional requirements of CfgPatches classes. If some addons are missing, category functions will not be compiled.
class myDataFunction {};
};
Function
class CfgFunctions
{
class TAG
{
class Category1
{
class myFunction {};
};
class Category2
{
file = "Path\To\Category";
class myFunction
{
file = "My\Function\Filepath.sqf"; // file path will be %ROOT%\My\Function\Filepath.sqf", ignoring "Path\To\Category"
};
class myOtherFunction
{
preInit = 1;
postInit = 1;
ext = ".fsm";
preStart = 1;
recompile = 1;
};
};
};
};
Attributes
| Attribute | Description |
|---|---|
| file | the file attribute can be used to manually set the file path. |
| preInit | the preInit attribute (formerly known as "forced") can be set to 1 to call the function upon mission start, before objects are initialized. Passed arguments are ["preInit"]. The function is run in an unscheduled environment.
|
| postInit | the postInit attribute can be set to 1 to call the function upon mission start, after objects are initialized. Passed arguments are ["postInit", didJIP]. The function is run in a scheduled environment so suspension is allowed, but any long term suspension will halt the mission loading until suspension is done.
|
| ext | the ext attribute can be used to set function file's type; it can be
|
The following attributes only work with config.cpp (addon) usage:
| Attribute | Description |
|---|---|
| preStart | the preStart attribute can be set to 1 to call the function upon game start, before title screen, but after all addons are loaded. |
| recompile | the recompile attribute can be set to 1 to recompile the function upon mission start (functions in Description.ext are always compiled upon mission (re)start) |