Find easily your favorite gear within ACE3 Arsenal
Based on an original idea of Krogar from Arma Mod France and UnderSiege Productions
Need help ? Contact me on Discord on channel #arsenal-extended
Install mod from Steam Workshop
ACE3 Arsenal Extended is also now available in 3DEN Editor.
An additional property "Texture options (ACE Arsenal Extended)" is available. This property is used by Arsenal to store "texture options" that would be otherwise lost.
This property is an array of key-value pairs [["model_option","value"], ...]
, example : [["USP_G3C_pantscamo","M81"]]
.
Lost in configuration making ? You may try the Config Helper Application to generate configuration.
- The root object is "Model".
- Each "Model", has one or more "Options".
- Each "Option", has multiple "Values".
- Each "Model", has one unique "Config" for a combinaison of "Value" per "Option".
All these objets are found in Arma 3 configuration :
- A "Config" is a class in
CfgWeapons
/CfgGlasses
/CfgVehicle
, that have aXtdGearInfo
subclass or that have a class with the same name inXtdGearModels >> CfgWeapons
/CfgGlasses
/CfgVehicle
. - A "Model", in a class in
XtdGearModels >> CfgWeapons
/CfgGlasses
/CfgVehicle
. - An "Option" is a class within a "Model", with it's name referenced in
options
property. - A "Value" is a class within a "Option", with it's name referenced in
values
property.
"Options" and "Values" may have conventional names, referenced in XtdGearModels >> Conventional
. This allow to inherit values, without real inheritance to avoid creating a dependency to this mod. See addons/gearinfo/XtdGearModels.hpp for existing names and options.
class XtdGearModels
{
class CfgWeapons
{
class my_model
{
label = "Model label";
author = "My name";
options[] = {"camo","optionA"};
class camo // coventional name
{
values[] = {"MTP", "Tropic"};
// all values already exists, no need to create subentries
};
class optionA
{
label = "Option A label";
values[] = {"value1", "value2"};
changeingame = 0; // 1 if value can be changed in game via ACE menu
alwaysSelectable = 1; // allows the selection of the values even if there isn't an item with a complete match of options available, falling back to a weak match with this single value (optional)
// changedelay = 2; If can changeingame, wait delay before change is effective (can be 0, 0.1, or more)
// icon = "xxx"; If can changeingame, action group icon in ACE menu
class value1
{
label = "1";
description = "Value 1 for option A"; // displayed as tooltip
// image = "xxx"; Background image in Arsenal
// icon = "xxx"; If can changeingame, action icon in ACE menu
// actionlabel = "xxx"; If can changeingame, action label in ACE menu
// itemingame = "xxx"; If can changeingame, requires this item to be present in inventory. Item will be removed from inventory (added back if an other value is choosen)
// changedelay = (inherited by default); If can changeingame, wait delay before change is effective
faction[] = {"BLU_F", "BLU_T_F", "BLU_W_F"}; // shows this value only for selected factions, identified by their A3 code (optional)
};
class value2
{
label = "2";
};
};
};
};
};
class CfgWeapons
{
class baseClass;
class my_model_MTP_value1 : baseClass // you can use any name
{
class XtdGearInfo
{
model = "my_model"; // class name in XtdGearModels >> CfgWeapons
camo = "MTP";
optionA = "value1";
};
// ...
};
// ...
};
Alternative syntax to avoid impacting CfgWeapons
/CfgGlasses
/CfgVehicle
:
class XtdGearModels
{
// identical to previous sample
};
class XtdGearInfos
{
class CfgWeapons
{
class my_model_MTP_value1 // exact class name in CfgWeapons (case sensitive !)
{
model = "my_model"; // class name in XtdGearModels >> CfgWeapons
camo = "MTP";
optionA = "value1";
};
// ...
};
};
On uniforms and backback, you can add special options called "texture options". Those options will not change the "Config", but will allow you to change a texture of an hiddenselection defined in the "Config".
Those options are listed in the textureOptions
array in the "Model".
Options are defined like all others options with an additional string or number hiddenselection
.
"Values" have an additional string texture
.
Texture options does not yet support changeingame
.
class XtdGearModels
{
class CfgWeapons
{
class my_model
{
// ...
textureOptions = { "bloodtype" };
class bloodtype
{
label = "Blood type";
values[] = {"A", "B", "AB", "O"};
hiddenselection = "selectionName";
class A
{
texture = "path\to\texture.paa";
// material = "path\to\material.rvmat"; (if you use material on an option, you MUST set it on all options to avoid undefined behavior)
};
// ...
};
};
};
};
class CfgWeapons
{
class baseClass;
class my_model_MTP_value1 : baseClass
{
class XtdGearInfo
{
model = "my_model";
// ...
};
hiddenselections = { /*..., */ "selectionName" };
// ...
};
// ...
};
A texture option may impact multiple hidden selections. Instead of hiddenselection
+ texture
, specify hiddenselections
+ textures
.
class XtdGearModels
{
class CfgWeapons
{
class my_model
{
// ...
textureOptions = { "bloodtype" };
class bloodtype
{
label = "Blood type";
values[] = {"A", "B", "AB", "O"};
hiddenselections[] = { "selectionName1", "selectionName2" };
class A
{
textures[] = { "path\to\texture.paa", "" };
// materials[] = { "path\to\material.rvmat", "" }; (if you use material on an option, you MUST set it on all options to avoid undefined behavior)
};
class B
{
textures[] = { "", "path\to\texture.paa" };
// materials[] = { "", "path\to\material.rvmat" };
};
class AB
{
textures[] = { "path\to\texture.paa", "path\to\texture.paa" };
// materials[] = { "path\to\material.rvmat", "path\to\material.rvmat" };
};
// ...
};
};
};
};
A texture option can be mapped to a text to texture, it allows player to choose a custom text for texture.
It can be usefull for name or call sign. Specify a texttexture
with procedural texture value with a %1
for user-input.
class XtdGearModels
{
class CfgWeapons
{
class my_model
{
// ...
textureOptions = { "name" };
class name
{
label = "Name";
hiddenselection = "selectionName";
texttexture = "#(rgb,512,512,3)text(1,1,""PuristaBold"",0.8,""#00000000"",""#101010"",""%1"")";
// textmaterial = "path\to\material.rvmat";
};
};
};
};
You can builtin configuration for ACE3 Arsenal Extended within your mod, without creating a dependency. You may duplicate all what you need, or use conventional names.
You can also build a compat addon that overrides entries in CfgWeapons
/CfgGlasses
/CfgVehicle
to add required informations.
You can also add data to the ACEAX mod in XtdGearInfos
to extends a mod without creating a direct dependency on it (Pull-Request are welcome !).
Local event aceax_ingame_optionChanged
will be raised after a player changed his equiment with the ACE self-interaction menu.
["aceax_ingame_optionChanged", {
_this params ["_player", "_optionInfos"];
_optionInfos params ["_model", "_option", "_value"];
// ...
}] call CBA_fnc_addEventHandler;
Download the incredible HEMTT tool by BrettMayson.
Place hemtt.exe at the project root, and launch .\hemtt.exe build
For a quick start, run .\hemtt.exe launch arsenal
. Arma will start directly in the ACE Arsenal. See .hemtt\launch.toml
for additional targets.
Arsenal integration is under GNU GPL v2 License. Other parts are under the MIT License.
It includes sources files from CBA_A3 (script_macros_common.hpp) and ACE3 (defines.hpp).