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) |