Jump to content
Vespa

Arma3 Characters Modding Tutorial

Recommended Posts

Recently opened and edited my mod's models, for example my MICH helmet. The helmet now in game is coming out of my rearend... As seen in this lovely screenshot (warning large and graphic :P image)

I thought it was a model.cfg issue, and its not as it's properly being used (see below).

class CfgSkeletons
{
class Default
{
	isDiscrete = 1;
	skeletonInherit = "";
	skeletonBones[] = {};
};
class OFP2_ManSkeleton
{
	isDiscrete = 0;
	skeletonInherit = "";
	skeletonBones[] =
	{
		"Pelvis","",
		"Spine","Pelvis",
		"Spine1","Spine",
		"Spine2","Spine1",
		"Spine3","Spine2",
		"Camera","Pelvis",
		"weapon","Spine1",
		"launcher","Spine1",
	//Head skeleton in hierarchy
		"neck","Spine3",
		"neck1","neck",
		"head","neck1",
	//New facial features
		"Face_Hub","head",
			"Face_Jawbone","Face_Hub",
				"Face_Jowl","Face_Jawbone",
				"Face_chopRight","Face_Jawbone",
				"Face_chopLeft","Face_Jawbone",
				"Face_LipLowerMiddle","Face_Jawbone",
				"Face_LipLowerLeft","Face_Jawbone",
				"Face_LipLowerRight","Face_Jawbone",
				"Face_Chin","Face_Jawbone",
				"Face_Tongue","Face_Jawbone",
			"Face_CornerRight","Face_Hub",
				"Face_CheekSideRight","Face_CornerRight",
			"Face_CornerLeft","Face_Hub",
				"Face_CheekSideLeft","Face_CornerLeft",
			"Face_CheekFrontRight","Face_Hub",
			"Face_CheekFrontLeft","Face_Hub",
			"Face_CheekUpperRight","Face_Hub",
			"Face_CheekUpperLeft","Face_Hub",
			"Face_LipUpperMiddle","Face_Hub",
			"Face_LipUpperRight","Face_Hub",
			"Face_LipUpperLeft","Face_Hub",
			"Face_NostrilRight","Face_Hub",
			"Face_NostrilLeft","Face_Hub",
			"Face_Forehead","Face_Hub",
				"Face_BrowFrontRight","Face_Forehead",
				"Face_BrowFrontLeft","Face_Forehead",
				"Face_BrowMiddle","Face_Forehead",
				"Face_BrowSideRight","Face_Forehead",
				"Face_BrowSideLeft","Face_Forehead",
			"Face_Eyelids","Face_Hub",
			"Face_EyelidUpperRight","Face_Hub",
			"Face_EyelidUpperLeft","Face_Hub",
			"Face_EyelidLowerRight","Face_Hub",
			"Face_EyelidLowerLeft","Face_Hub",
			"EyeLeft","Face_Hub",
			"EyeRight","Face_Hub",			
	//Left upper side
		"LeftShoulder","Spine3",
		"LeftArm","LeftShoulder",
		"LeftArmRoll","LeftArm",
		"LeftForeArm","LeftArmRoll",
		"LeftForeArmRoll","LeftForeArm",
		"LeftHand","LeftForeArmRoll",
		"LeftHandRing","LeftHand",
		"LeftHandRing1","LeftHandRing",
		"LeftHandRing2","LeftHandRing1",
		"LeftHandRing3","LeftHandRing2",
		"LeftHandPinky1","LeftHandRing",
		"LeftHandPinky2","LeftHandPinky1",
		"LeftHandPinky3","LeftHandPinky2",
		"LeftHandMiddle1","LeftHand",
		"LeftHandMiddle2","LeftHandMiddle1",
		"LeftHandMiddle3","LeftHandMiddle2",
		"LeftHandIndex1","LeftHand",
		"LeftHandIndex2","LeftHandIndex1",
		"LeftHandIndex3","LeftHandIndex2",
		"LeftHandThumb1","LeftHand",
		"LeftHandThumb2","LeftHandThumb1",
		"LeftHandThumb3","LeftHandThumb2",
	//Right upper side
		"RightShoulder","Spine3",
		"RightArm","RightShoulder",
		"RightArmRoll","RightArm",
		"RightForeArm","RightArmRoll",
		"RightForeArmRoll","RightForeArm",
		"RightHand","RightForeArmRoll",
		"RightHandRing","RightHand",
		"RightHandRing1","RightHandRing",
		"RightHandRing2","RightHandRing1",
		"RightHandRing3","RightHandRing2",
		"RightHandPinky1","RightHandRing",
		"RightHandPinky2","RightHandPinky1",
		"RightHandPinky3","RightHandPinky2",
		"RightHandMiddle1","RightHand",
		"RightHandMiddle2","RightHandMiddle1",
		"RightHandMiddle3","RightHandMiddle2",
		"RightHandIndex1","RightHand",
		"RightHandIndex2","RightHandIndex1",
		"RightHandIndex3","RightHandIndex2",
		"RightHandThumb1","RightHand",
		"RightHandThumb2","RightHandThumb1",
		"RightHandThumb3","RightHandThumb2",
	//Left lower side
		"LeftUpLeg","Pelvis",
		"LeftUpLegRoll","LeftUpLeg",
		"LeftLeg","LeftUpLegRoll",
		"LeftLegRoll","LeftLeg",
		"LeftFoot","LeftLegRoll",
		"LeftToeBase","LeftFoot",
	//Right lower side
		"RightUpLeg","Pelvis",
		"RightUpLegRoll","RightUpLeg",
		"RightLeg","RightUpLegRoll",
		"RightLegRoll","RightLeg",
		"RightFoot","RightLegRoll",
		"RightToeBase","RightFoot"
	};
	// location of pivot points (local axes) for hierarchical animation
	pivotsModel="A3\anims_f\data\skeleton\SkeletonPivots.p3d";
 	};
};

class CfgModels
{
class Default
{
	sectionsInherit="";
	sections[] = {};
	skeletonName = "";
};
class ArmaMan : Default
{
	htMin = 60;          // Minimum half-cooling time (in seconds)
	htMax = 1800;        // Maximum half-cooling time (in seconds)
	afMax = 30;          // Maximum temperature in case the model is alive (in celsius)
	mfMax = 0;           // Maximum temperature when the model is moving (in celsius)
	mFact = 1;           // Metabolism factor - number from interval <0, 1> (0 - metabolism has no influence, 1 - metabolism has full influence (no other temperature source will be considered)).
	tBody = 37;  // Metabolism temperature of the model (in celsius)

	sections[] =
	{
		"osobnost","Head_Injury","Body_Injury","l_leg_injury","l_arm_injury","r_arm_injury","r_leg_injury","injury_body", "injury_legs", "injury_hands",
		"clan","clan_sign","Camo","CamoB","Camo1","Camo2","personality","hl", "injury_head"
	};
	skeletonName = "OFP2_ManSkeleton";
};
class mich : ArmaMan {};
};

The config remained untouched and in the specific section for this helmet it's:

class TFA_Mich_Black: H_HelmetB_Light
{
	scope = 2;
	displayName = "TFA MICH (BLK)";
	model = "\TFA_Gear\data\models\mich\mich.p3d";
	hiddenSelections[] = {"camo1"};
	hiddenSelectionsTextures[] = {"\TFA_Gear\data\models\mich\mich_blk_co.paa"};
	class ItemInfo: ItemInfo
	{
		mass = 2;
		uniformModel = "\TFA_Gear\data\models\mich\mich.p3d";
		hiddenSelections[] = {"camo1"};
		hiddenSelectionsTextures[] = {"\TFA_Gear\data\models\mich\mich_blk_co.paa"};
		modelSides[] = {3,1};
		armor = 500;
		passThrough = 0.5;
	};
};

Theres no inheritance errors that pop up.

Does anyone have a clue why the helmet is doing this all of a sudden? The Head selection is in all LODs except viewpilot, geometery and memory. And I added: autocenter = 0 as a property in the geometry LOD.

Edit/Update 1: We ruled out it potentially being a config issue, unless its something we're not remembering.

Edit/Update 2: I believe this to be an issue with the new Object Builder tool... anyone have any idea?

Edit/Update 3: We made sure the head selection in the resolution LODs is correct.

Edited by SpectreRSG

Share this post


Link to post
Share on other sites

Does anyone have a clue why the helmet is doing this all of a sudden? The Head selection is in all LODs except viewpilot, geometery and memory. And I added: autocenter = 0 as a property in the geometry LOD.

Edit/Update 1: We ruled out it potentially being a config issue, unless its something we're not remembering.

Edit/Update 2: I believe this to be an issue with the new Object Builder tool... anyone have any idea?

Edit/Update 3: We made sure the head selection in the resolution LODs is correct.

Make sure the helmet is in the appropriate place in 3d space in the source, and that it is weighted 100% to the "head" bone/named selection.

Pressing 'n' in Object Builder opens the weight paint tool. Increase it's strength and color to red, paint the helm's verts entirely, right-click the "head" named selection and "redefine".

Make sure the helmet is in the appropriate place in 3d space

Make sure the helmet is in the appropriate place in 3d space

Edited by Sequisha

Share this post


Link to post
Share on other sites

you have not named the model in model config it has to be the name of the .p3d

Share this post


Link to post
Share on other sites
you have not named the model in model config it has to be the name of the .p3d

Model name is mich. I did at the bottom?

Share this post


Link to post
Share on other sites
Make sure the helmet is in the appropriate place in 3d space in the source, and that it is weighted 100% to the "head" bone/named selection.

Pressing 'n' in Object Builder opens the weight paint tool. Increase it's strength and color to red, paint the helm's verts entirely, right-click the "head" named selection and "redefine".

Make sure the helmet is in the appropriate place in 3d space

Did exactly that and still the issue occurs. http://i.imgur.com/XnKJocN.png

Edited by SpectreRSG

Share this post


Link to post
Share on other sites

Attempted to resave the model in O2 instead of Object Builder, and packed it with BinPBO. Same issue applies. Does anyone have any further ideas?

Edit: figured it out. autocenter = 0 was defined in the 0.000 LOD and the Geo LOD. It can ONLY be in the Geo LOD.

Edited by SpectreRSG

Share this post


Link to post
Share on other sites

I just want to make a config remixing some of the items into a particular unit, are there any complete, functional configs that I can use as a template?

Share this post


Link to post
Share on other sites

I dug through the thread and did some searching, but didn't find what I was looking for. Basically I'm just looking to tweak the skin tone of some AI models. I don't even mind if all the AI have the same face/skin, I just want to change the skin color. There a simple way to do that without using an addon and just through script? I _think_ I can setObjectTexture on the unit when it's spawned, but I'm not sure where to find the skin textures in the first place and how to configure the mission to use them.

Any help would be mucho appreciato. :)

Share this post


Link to post
Share on other sites

I'm a complete beginner with addon making/modding. I know to use these resources:

Arma 3 Modding Characters

Mondkalb's Addon Tutorial

I will be using Blender as I find Oxygen to be very difficult to work with even though I realise you need it to align/set-up LODs, geometry and so forth (?). I do have the "Low Poly Game Character Training Series" and "Vehicle Modeling Series" by Blender Cookie to start me off. I know there's the ArmA 3 Toolbox/plugins to have a .P3d model for ArmA 3. Besides needing to read up on scripting, config files, animation and texturing, have I missed anything else?

Is there a guide on how to use B.I's ArmA 3 Tools?

Share this post


Link to post
Share on other sites

Hi,

I was trying to do a retexture again using the NATO uniforms and vests. The uniforms work perfectly, only when trying to add the vest retexture like i did some months ago, the vests wont show up in the list of vests in the virtual arsenal. When trying to find the problem i used the full example config posted in this thread to see if it would work if i didnt change anything. I found that both the example uniform and example helmet show up but the example vest doesnt. Could it be that some things have changed regarding the config of vests?

this is the example config i used. I havent changed anything.

enum {

// = 2, // Error parsing: Empty enum name

DESTRUCTENGINE = 2,

DESTRUCTDEFAULT = 6,

DESTRUCTWRECK = 7,

DESTRUCTTREE = 3,

DESTRUCTTENT = 4,

STABILIZEDINAXISX = 1,

STABILIZEDINAXESXYZ = 4,

STABILIZEDINAXISY = 2,

STABILIZEDINAXESBOTH = 3,

DESTRUCTNO = 0,

STABILIZEDINAXESNONE = 0,

DESTRUCTMAN = 5,

DESTRUCTBUILDING = 1,

};

class CfgPatches {

class example_retexture_config {

units[] = {};

weapons[] = {};

requiredVersion = 0.1;

requiredAddons[] = {"A3_Characters_F_BLUFOR"};

};

};

class CfgVehicles {

class B_Soldier_base_F;

class Example_Soldier_F : B_Soldier_base_F {

_generalMacro = "B_Soldier_F"; //unsure what this does

scope = 2;

displayName = "Uniform Test Soldier";

nakedUniform = "U_BasicBody"; //class for "naked" body

uniformClass = "Example_CombatUniform_mcam"; //the uniform item

hiddenSelections[] = {"Camo"};

hiddenSelectionsTextures[] = {"pathtoyouraddonretexturefile.paa"};

linkedItems[] = {"example_PlateCarrier1_rgr", "example_HelmetB", "NVGoggles", "ItemMap", "ItemCompass", "ItemWatch", "ItemRadio"};

respawnLinkedItems[] = {"example_PlateCarrier1_rgr", "example_HelmetB", "NVGoggles", "ItemMap", "ItemCompass", "ItemWatch", "ItemRadio"};

};

};

class cfgWeapons {

class Uniform_Base;

class UniformItem;

class Example_CombatUniform_mcam : Uniform_Base {

scope = 2;

displayName = "Example Mcam uniform";

picture = "\A3\characters_f\data\ui\icon_U_B_CombatUniform_mcam_ca.paa";

model = "\A3\Characters_F\Common\Suitpacks\suitpack_blufor_diver";

class ItemInfo : UniformItem {

uniformModel = "-";

uniformClass = "Example_Soldier_F"; //would be same as our made soldier class

containerClass = "Supply20"; //how much it can carry

mass = 80; //how much it weights

};

};

class ItemCore;

class HeadgearItem;

class example_HelmetB : ItemCore {

scope = 2;

weaponPoolAvailable = 1;

displayName = "Example helmet";

picture = "\A3\characters_f\Data\UI\icon_H_HelmetB_CA.paa";

model = "\A3\Characters_F\BLUFOR\headgear_b_helmet_ballistic";

hiddenSelections[] = {"camo"};

hiddenSelectionsTextures[] = {"pathtoyouraddonretexturefile.paa"};

class ItemInfo : HeadgearItem {

mass = 100;

uniformModel = "\A3\Characters_F\BLUFOR\headgear_b_helmet_ballistic";

modelSides[] = {3, 1};

armor = 3*0.5;

passThrough = 0.8;

hiddenSelections[] = {"camo"};

};

};

class Vest_Base;

class VestItem;

class example_PlateCarrier1_rgr : Vest_Base {

scope = 2;

displayName = "Example Platecarrier";

picture = "\A3\characters_f\Data\UI\icon_V_plate_carrier_1_CA.paa";

model = "\A3\Characters_F\BLUFOR\equip_b_vest02";

hiddenSelections[] = {"camo"};

hiddenSelectionsTextures[] = {"pathtoyouraddonretexturefile.paa"};

class ItemInfo : VestItem {

uniformModel = "\A3\Characters_F\BLUFOR\equip_b_vest02";

containerClass = "Supply100";

mass = 50;

armor = 5*0.5;

passThrough = 0.7;

hiddenSelections[] = {"camo"};

};

};

};

thanks in advance

Share this post


Link to post
Share on other sites

Hi, on one of my retextures that I'm working on, I have run into a small problem. I learned how to retexture backpacks, helmets, uniforms, and vests, but the problem I have run into is that I do not understand how to add multiple retextures of headgear in one config. I have retextured a helmet and tested the retextures ingame and it works fine, but the config stopped working as soon as a put in the lines for the patrol cap retexture. How would I properly implement this?

Here's my config:

enum {
    //  = 2,    // Error parsing: Empty enum name
   DESTRUCTENGINE = 2,
   DESTRUCTDEFAULT = 6,
   DESTRUCTWRECK = 7,
   DESTRUCTTREE = 3,
   DESTRUCTTENT = 4,
   STABILIZEDINAXISX = 1,
   STABILIZEDINAXESXYZ = 4,
   STABILIZEDINAXISY = 2,
   STABILIZEDINAXESBOTH = 3,
   DESTRUCTNO = 0,
   STABILIZEDINAXESNONE = 0,
   DESTRUCTMAN = 5,
   DESTRUCTBUILDING = 1,
};

class CfgPatches {
   class example_retexture_config {
       units[] = {};
       weapons[] = {};
       requiredVersion = 0.1;
       requiredAddons[] = {"A3_Characters_F_BLUFOR"};
   };
};

class CfgVehicles {

   class B_Soldier_base_F;

   class Example_Soldier_F : B_Soldier_base_F {
       _generalMacro = "B_Soldier_F"; 
       scope = 2;
       displayName = "Ukraine";
       nakedUniform = "U_BasicBody"; 
       uniformClass = "Example_CombatUniform_mcam";
model = "\a3\characters_f_beta\indep\ia_soldier_01";
       hiddenSelections[] = {"Camo"};
       hiddenSelectionsTextures[] = {"Ukraine\data\Ukraine_Uniform_co.paa"};

       linkedItems[] = {"example_PlateCarrier1_rgr", "example_HelmetB", "NVGoggles", "ItemMap", "ItemCompass", "ItemWatch", "ItemRadio"};
       respawnLinkedItems[] = {"example_PlateCarrier1_rgr", "example_HelmetB", "NVGoggles", "ItemMap", "ItemCompass", "ItemWatch", "ItemRadio"};
};

	class B_Carryall_oli;
	class Ukraine_carryall: B_Carryall_oli {
		displayname = "Ukrainian Carryall";
		model = "\A3\weapons_f\Ammoboxes\bags\Backpack_Tortila";
		picture = "\a3_weapons_f\ammoboxes\bags\data\UI\icon_b_c_tortila_hex.paa";
		hiddenSelections[] = {"camo"};
		hiddenSelectionsTextures[] = {"\Ukraine\data\Ukrainian_Carryall.paa"};

   };

};

class cfgWeapons {
   class Uniform_Base;
   class UniformItem;

   class Example_CombatUniform_mcam : Uniform_Base {
       scope = 2;
       displayName = "Ukraine Digital Uniform";
       picture = "\A3\characters_f_beta\data\ui\icon_u_ir_combatuniform_rucamo_ca.paa";
       model = "\A3\Characters_F\Common\Suitpacks\suitpack_universal_F";

       class ItemInfo : UniformItem {
           uniformModel = "-";
           uniformClass = "Example_Soldier_F";
           containerClass = "Supply20";
           mass = 80; 
       };
   };

   class ItemCore;
   class HeadgearItem;

   class example_HelmetB : ItemCore {
       scope = 2;
       weaponPoolAvailable = 1;
       displayName = "Ukraine Digital Helmet";
       picture = "\A3\characters_f\Data\UI\icon_H_HelmetB_CA.paa";
       model = "\Ukraine\models\Helmet1";
       hiddenSelections[] = {"Camo"};
       hiddenSelectionsTextures[] = {"Ukraine\data\Ukraine_Helmet2_co.paa"};

       class ItemInfo : HeadgearItem {
           mass = 100;
           uniformModel = "\Ukraine\models\Helmet1";
           modelSides[] = {3, 1};
           armor = 3*0.5;
           passThrough = 0.8;
           hiddenSelections[] = {"Camo"};
       };

class ItemCore;
class HeadgearItem;

class Ukrainian_Patrolcap :ItemCore {
scope = 2;
weaponPoolAvailable = 1;
displayName = "Ukrainian Patrol Cap";
picture = "\a3\characters_f\data\ui\icon_h_cap_patrol_ocamo_ca.paa";
model = "\a3\characters_f\Common\cappatrol";
hiddenSelections{} = {"Camo"};
hiddenSelectionsTextures{} = {"Ukraine\data\Ukrainian_Patrolcap.paa"};

class ItemInfo : HeadgearItem {
	mass = 10;
	uniformModel = "\Ukraine\models\Ukrainian_Patrolcap";
	modelSites[] = {3,1};
	armor = 2*0.5;
	passThrough = 0.5;
	hiddenSelections[] {"Camo"};

	};
   };

   class Vest_Camo_Base;
   class VestItem;

   class example_PlateCarrier1_rgr : Vest_Camo_Base {
       scope = 2;
       displayName = "Ukraine Digital Platecarrier";
       picture = "\A3\characters_f\Data\UI\icon_V_plate_carrier_1_CA.paa";
       model = "\A3\Characters_F\BLUFOR\equip_b_vest02";
       hiddenSelections[] = {"Camo"};
       hiddenSelectionsTextures[] = {"Ukraine\data\Ukraine_Vest_co.paa"};

       class ItemInfo : VestItem {
           uniformModel = "\A3\Characters_F\BLUFOR\equip_b_vest02";
           containerClass = "Supply100";
           mass = 50;
           armor = 5*0.5;
           passThrough = 0.7;
           hiddenSelections[] = {"Camo"};
       };
   };
};  

Share this post


Link to post
Share on other sites

Class example_HelmetB is missing a closing bracket.

class example_HelmetB : ItemCore {
       scope = 2;
       weaponPoolAvailable = 1;
       displayName = "Ukraine Digital Helmet";
       picture = "\A3\characters_f\Data\UI\icon_H_HelmetB_CA.paa";
       model = "\Ukraine\models\Helmet1";
       hiddenSelections[] = {"Camo"};
       hiddenSelectionsTextures[] = {"Ukraine\data\Ukraine_Helmet2_co.paa"};

       class ItemInfo : HeadgearItem {
           mass = 100;
           uniformModel = "\Ukraine\models\Helmet1";
           modelSides[] = {3, 1};
           armor = 3*0.5;
           passThrough = 0.8;
           hiddenSelections[] = {"Camo"};
       };
}; // Missing bracket

Share this post


Link to post
Share on other sites

I added the missing bracket, but when I launch the game I get this error:

File ukraine\config.cpp, line 104:

'/cfgWeapons/example_HelmetB/Ukrainian_Patrolcap.hiddenSelections ': '{' encountered instead of '='

Share this post


Link to post
Share on other sites

You are using the wrong bracket type in the Ukrainian_Patrolcap class.

Should be.

hiddenSelections[] = {"Camo"};
hiddenSelectionsTextures[] = {"Ukraine\data\Ukrainian_Patrolcap.paa"};

Share this post


Link to post
Share on other sites

Thanks again surpher, there are no longer error codes when launching the game, but the new problem is that I can only see the first set of retextured items in the game. When I go into the arsenal, the retextured helmet, vest, uniform, and backpack appear, but I cannot find the retextured patrol cap. I'm not exactly sure if I closed the bracket correctly or if it might be from some other problem.:confused:

Here's an updated config:

enum {
    //  = 2,    // Error parsing: Empty enum name
   DESTRUCTENGINE = 2,
   DESTRUCTDEFAULT = 6,
   DESTRUCTWRECK = 7,
   DESTRUCTTREE = 3,
   DESTRUCTTENT = 4,
   STABILIZEDINAXISX = 1,
   STABILIZEDINAXESXYZ = 4,
   STABILIZEDINAXISY = 2,
   STABILIZEDINAXESBOTH = 3,
   DESTRUCTNO = 0,
   STABILIZEDINAXESNONE = 0,
   DESTRUCTMAN = 5,
   DESTRUCTBUILDING = 1,
};

class CfgPatches {
   class example_retexture_config {
       units[] = {};
       weapons[] = {};
       requiredVersion = 0.1;
       requiredAddons[] = {"A3_Characters_F_BLUFOR"};
   };
};

class CfgVehicles {

   class B_Soldier_base_F;

   class Example_Soldier_F : B_Soldier_base_F {
       _generalMacro = "B_Soldier_F"; 
       scope = 2;
       displayName = "Ukraine";
       nakedUniform = "U_BasicBody"; 
       uniformClass = "Example_CombatUniform_mcam";
model = "\a3\characters_f_beta\indep\ia_soldier_01";
       hiddenSelections[] = {"Camo"};
       hiddenSelectionsTextures[] = {"Ukraine\data\Ukraine_Uniform_co.paa"};

       linkedItems[] = {"example_PlateCarrier1_rgr", "example_HelmetB", "NVGoggles", "ItemMap", "ItemCompass", "ItemWatch", "ItemRadio"};
       respawnLinkedItems[] = {"example_PlateCarrier1_rgr", "example_HelmetB", "NVGoggles", "ItemMap", "ItemCompass", "ItemWatch", "ItemRadio"};
};

	class B_Carryall_oli;
	class Ukraine_carryall: B_Carryall_oli {
		displayname = "Ukrainian Carryall";
		model = "\A3\weapons_f\Ammoboxes\bags\Backpack_Tortila";
		picture = "\a3_weapons_f\ammoboxes\bags\data\UI\icon_b_c_tortila_hex.paa";
		hiddenSelections[] = {"camo"};
		hiddenSelectionsTextures[] = {"\Ukraine\data\Ukrainian_Carryall.paa"};

   };

};

class cfgWeapons {
   class Uniform_Base;
   class UniformItem;

   class Example_CombatUniform_mcam : Uniform_Base {
       scope = 2;
       displayName = "Ukraine Digital Uniform";
       picture = "\A3\characters_f_beta\data\ui\icon_u_ir_combatuniform_rucamo_ca.paa";
       model = "\A3\Characters_F\Common\Suitpacks\suitpack_universal_F";

       class ItemInfo : UniformItem {
           uniformModel = "-";
           uniformClass = "Example_Soldier_F";
           containerClass = "Supply20";
           mass = 80; 
       };
   };

   class ItemCore;
   class HeadgearItem;

   class example_HelmetB : ItemCore {
       scope = 2;
       weaponPoolAvailable = 1;
       displayName = "Ukraine Digital Helmet";
       picture = "\A3\characters_f\Data\UI\icon_H_HelmetB_CA.paa";
       model = "\Ukraine\models\Cha_6b7_1";
       hiddenSelections[] = {"Camo"};
       hiddenSelectionsTextures[] = {"Ukraine\data\Ukraine_Helmet2_co.paa"};

       class ItemInfo : HeadgearItem {
           mass = 100;
           uniformModel = "\Ukraine\models\Cha_6b7_1";
           modelSides[] = {3, 1};
           armor = 3*0.5;
           passThrough = 0.8;
           hiddenSelections[] = {"Camo"};
       };

	class ItemCore;
class HeadgearItem;

class Ukrainian_Patrolcap :ItemCore {
scope = 2;
weaponPoolAvailable = 1;
displayName = "Ukrainian Patrol Cap";
picture = "\a3\characters_f\data\ui\icon_h_cap_patrol_ocamo_ca.paa";
model = "\a3\characters_f\Common\cappatrol";
hiddenSelections[] = {"Camo"};
hiddenSelectionsTextures[] = {"Ukraine\data\Ukrainian_Patrolcap.paa"};

class ItemInfo : HeadgearItem {
	mass = 10;
	uniformModel = "\Ukraine\models\Ukrainian_Patrolcap";
	modelSites[] = {3,1};
	armor = 2*0.5;
	passThrough = 0.5;
	hiddenSelections[] = {"Camo"};

	};
};	}

   class Vest_Camo_Base;
   class VestItem;

   class example_PlateCarrier1_rgr : Vest_Camo_Base {
       scope = 2;
       displayName = "Ukraine Digital Platecarrier";
       picture = "\A3\characters_f\Data\UI\icon_V_plate_carrier_1_CA.paa";
       model = "\A3\Characters_F\BLUFOR\equip_b_vest02";
       hiddenSelections[] = {"Camo"};
       hiddenSelectionsTextures[] = {"Ukraine\data\Ukraine_Vest_co.paa"};

       class ItemInfo : VestItem {
           uniformModel = "\A3\Characters_F\BLUFOR\equip_b_vest02";
           containerClass = "Supply100";
           mass = 50;
           armor = 5*0.5;
           passThrough = 0.7;
           hiddenSelections[] = {"Camo"};
       };
   };
};  

Share this post


Link to post
Share on other sites

Yeah, you have not closed the example_HelmetB class correctly, this should be ok.

class CfgPatches {
   class example_retexture_config {
       units[] = {};
       weapons[] = {};
       requiredVersion = 0.1;
       requiredAddons[] = {"A3_Characters_F_BLUFOR"};
   };
};

class CfgVehicles {

   class B_Soldier_base_F;

   class Example_Soldier_F : B_Soldier_base_F {
       _generalMacro = "B_Soldier_F"; 
       scope = 2;
       displayName = "Ukraine";
       nakedUniform = "U_BasicBody"; 
       uniformClass = "Example_CombatUniform_mcam";
   model = "\a3\characters_f_beta\indep\ia_soldier_01";
       hiddenSelections[] = {"Camo"};
       hiddenSelectionsTextures[] = {"Ukraine\data\Ukraine_Uniform_co.paa"};

       linkedItems[] = {"example_PlateCarrier1_rgr", "example_HelmetB", "NVGoggles", "ItemMap", "ItemCompass", "ItemWatch", "ItemRadio"};
       respawnLinkedItems[] = {"example_PlateCarrier1_rgr", "example_HelmetB", "NVGoggles", "ItemMap", "ItemCompass", "ItemWatch", "ItemRadio"};
   };

       class B_Carryall_oli;
       class Ukraine_carryall: B_Carryall_oli {
           displayname = "Ukrainian Carryall";
           model = "\A3\weapons_f\Ammoboxes\bags\Backpack_Tortila";
           picture = "\a3_weapons_f\ammoboxes\bags\data\UI\icon_b_c_tortila_hex.paa";
           hiddenSelections[] = {"camo"};
           hiddenSelectionsTextures[] = {"\Ukraine\data\Ukrainian_Carryall.paa"};

   };

};

class cfgWeapons {
   class Uniform_Base;
   class UniformItem;

   class Example_CombatUniform_mcam : Uniform_Base {
       scope = 2;
       displayName = "Ukraine Digital Uniform";
       picture = "\A3\characters_f_beta\data\ui\icon_u_ir_combatuniform_rucamo_ca.paa";
       model = "\A3\Characters_F\Common\Suitpacks\suitpack_universal_F";

       class ItemInfo : UniformItem {
           uniformModel = "-";
           uniformClass = "Example_Soldier_F";
           containerClass = "Supply20";
           mass = 80; 
       };
   };

   class ItemCore;
   class HeadgearItem;

   class example_HelmetB : ItemCore {
       scope = 2;
       weaponPoolAvailable = 1;
       displayName = "Ukraine Digital Helmet";
       picture = "\A3\characters_f\Data\UI\icon_H_HelmetB_CA.paa";
       model = "\Ukraine\models\Cha_6b7_1";
       hiddenSelections[] = {"Camo"};
       hiddenSelectionsTextures[] = {"Ukraine\data\Ukraine_Helmet2_co.paa"};

       class ItemInfo : HeadgearItem {
           mass = 100;
           uniformModel = "\Ukraine\models\Cha_6b7_1";
           modelSides[] = {3, 1};
           armor = 3*0.5;
           passThrough = 0.8;
           hiddenSelections[] = {"Camo"};
       };
};

   class Ukrainian_Patrolcap :ItemCore {
   scope = 2;
   weaponPoolAvailable = 1;
   displayName = "Ukrainian Patrol Cap";
   picture = "\a3\characters_f\data\ui\icon_h_cap_patrol_ocamo_ca.paa";
   model = "\a3\characters_f\Common\cappatrol";
   hiddenSelections[] = {"Camo"};
   hiddenSelectionsTextures[] = {"Ukraine\data\Ukrainian_Patrolcap.paa"};

   class ItemInfo : HeadgearItem {
       mass = 10;
       uniformModel = "\Ukraine\models\Ukrainian_Patrolcap";
       modelSites[] = {3,1};
       armor = 2*0.5;
       passThrough = 0.5;
       hiddenSelections[] = {"Camo"};

       };
   };

   class Vest_Camo_Base;
   class VestItem;

   class example_PlateCarrier1_rgr : Vest_Camo_Base {
       scope = 2;
       displayName = "Ukraine Digital Platecarrier";
       picture = "\A3\characters_f\Data\UI\icon_V_plate_carrier_1_CA.paa";
       model = "\A3\Characters_F\BLUFOR\equip_b_vest02";
       hiddenSelections[] = {"Camo"};
       hiddenSelectionsTextures[] = {"Ukraine\data\Ukraine_Vest_co.paa"};

       class ItemInfo : VestItem {
           uniformModel = "\A3\Characters_F\BLUFOR\equip_b_vest02";
           containerClass = "Supply100";
           mass = 50;
           armor = 5*0.5;
           passThrough = 0.7;
           hiddenSelections[] = {"Camo"};
       };
   };
};  

Share this post


Link to post
Share on other sites

Thanks it works perfectly. I have two separate retextures and when I activate both of them only the Ukrainian one works, but If I don't activate the Ukrainian one, then the other retexture that I made works. What would I have to change in order for both of the mods to be functioning in the game at the same time. Sorry for asking so many questions, I'm just finding it hard to wrap my head around certain parts of the config.

Here is the config for the other retexture if you need to compare them:

class CfgPatches {
   class example_retexture_config {
       units[] = {};
       weapons[] = {};
       requiredVersion = 0.1;
       requiredAddons[] = {"A3_Characters_F_BLUFOR"};
   };
};

class CfgVehicles {

   class B_Soldier_base_F;

   class Example_Soldier_F : B_Soldier_base_F {
       _generalMacro = "B_Soldier_F"; 
       scope = 2;
       displayName = "Forest Ops";
       nakedUniform = "U_BasicBody"; 
       uniformClass = "Example_CombatUniform_mcam";
model = "\a3\characters_f_beta\indep\ia_soldier_01";
       hiddenSelections[] = {"Camo"};
       hiddenSelectionsTextures[] = {"Forestops\data\clothing1_needle_co.paa"};

       linkedItems[] = {"example_PlateCarrier1_rgr", "example_HelmetB", "NVGoggles", "ItemMap", "ItemCompass", "ItemWatch", "ItemRadio"};
       respawnLinkedItems[] = {"example_PlateCarrier1_rgr", "example_HelmetB", "NVGoggles", "ItemMap", "ItemCompass", "ItemWatch", "ItemRadio"};
   };

};

class cfgWeapons {
   class Uniform_Base;
   class UniformItem;

   class Example_CombatUniform_mcam : Uniform_Base {
       scope = 2;
       displayName = "Pine Uniform";
       picture = "\A3\characters_f_beta\data\ui\icon_u_ir_combatuniform_rucamo_ca.paa";
       model = "\A3\Characters_F\Common\Suitpacks\suitpack_universal_F";

       class ItemInfo : UniformItem {
           uniformModel = "-";
           uniformClass = "Example_Soldier_F";
           containerClass = "Supply20";
           mass = 80; 
       };
   };

   class ItemCore;
   class HeadgearItem;

   class example_HelmetB : ItemCore {
       scope = 2;
       weaponPoolAvailable = 1;
       displayName = "Pine Helmet";
       picture = "\A3\characters_f\Data\UI\icon_H_HelmetB_CA.paa";
       model = "\A3\Characters_F\BLUFOR\headgear_b_helmet_ballistic";
       hiddenSelections[] = {"Camo"};
       hiddenSelectionsTextures[] = {"Forestops\data\equip1_co.paa"};

       class ItemInfo : HeadgearItem {
           mass = 100;
           uniformModel = "\A3\Characters_F\BLUFOR\headgear_b_helmet_ballistic";
           modelSides[] = {3, 1};
           armor = 3*0.5;
           passThrough = 0.8;
           hiddenSelections[] = {"Camo"};
       };
   };

   class Vest_Camo_Base;
   class VestItem;

   class example_PlateCarrier1_rgr : Vest_Camo_Base {
       scope = 2;
       displayName = "Pine Camo Platecarrier";
       picture = "\A3\characters_f\Data\UI\icon_V_plate_carrier_1_CA.paa";
       model = "\A3\Characters_F\BLUFOR\equip_b_vest02";
       hiddenSelections[] = {"Camo"};
       hiddenSelectionsTextures[] = {"Forestops\data\Vest_Needle_co.paa"};

       class ItemInfo : VestItem {
           uniformModel = "\A3\Characters_F\BLUFOR\equip_b_vest02";
           containerClass = "Supply100";
           mass = 50;
           armor = 5*0.5;
           passThrough = 0.7;
           hiddenSelections[] = {"Camo"};
       };
   };
};  

Share this post


Link to post
Share on other sites

You need to use unique classnames or they will overwrite each other.

Currently you have a class named Example_Soldier_F in both configs, one of those classes will be overwritten by the other and as a result you will only see one of the units. Simply rename one of the classes, you should also consider tagging your classes to make them unique to you (i.e. SilentAssassin_Example_Soldier_F).

Edited by surpher

Share this post


Link to post
Share on other sites

wondering someone can help me with an error im getting

Warning Message: No entry 'bin\config.bin/CfgWeapons/SAS_PlateCarrier1_rgr.nameSound'.
Warning Message: '/' is not a value
Warning Message: No entry 'bin\config.bin/CfgWeapons/SAS_PlateCarrier1_rgr.type'.
Warning Message: '/' is not a value
Warning Message: No entry 'bin\config.bin/CfgWeapons/SAS_PlateCarrier1_rgr.Library'.
Warning Message: No entry '.libTextDesc'.
Warning Message: '/' is not a value
Warning Message: No entry 'bin\config.bin/CfgWeapons/SAS_PlateCarrier1_rgr.simulation'.
Warning Message: '/' is not a value
Warning Message: No entry 'bin\config.bin/CfgWeapons/SAS_PlateCarrier1_rgr.fireLightDuration'.
Warning Message: '/' is not a value
Warning Message: No entry 'bin\config.bin/CfgWeapons/SAS_PlateCarrier1_rgr.fireLightIntensity'.
Warning Message: '/' is not a value
Warning Message: No entry 'bin\config.bin/CfgWeapons/SAS_PlateCarrier1_rgr.fireLightDiffuse'.
Warning Message: Size: '/' not an array
Warning Message: Size: '/' not an array
Warning Message: No entry 'bin\config.bin/CfgWeapons/SAS_PlateCarrier1_rgr.fireLightAmbient'.
Warning Message: Size: '/' not an array
Warning Message: Size: '/' not an array
Warning Message: No entry 'bin\config.bin/CfgWeapons/SAS_PlateCarrier1_rgr.weaponLockDelay'.
Warning Message: '/' is not a value
Warning Message: No entry 'bin\config.bin/CfgWeapons/SAS_PlateCarrier1_rgr.weaponLockSystem'.
Warning Message: '/' is not a value
Warning Message: No entry 'bin\config.bin/CfgWeapons/SAS_PlateCarrier1_rgr.cmImmunity'.
Warning Message: '/' is not a value
Warning Message: No entry 'bin\config.bin/CfgWeapons/SAS_PlateCarrier1_rgr.weight'.
Warning Message: '/' is not a value
Warning Message: No entry 'bin\config.bin/CfgWeapons/SAS_PlateCarrier1_rgr.lockingTargetSound'.
Warning Message: Size: '/' not an array
Warning Message: No entry 'bin\config.bin/CfgWeapons/SAS_PlateCarrier1_rgr.lockedTargetSound'.
Warning Message: Size: '/' not an array
Warning Message: No entry 'bin\config.bin/CfgWeapons/SAS_PlateCarrier1_rgr.detectRange'.
Warning Message: '/' is not a value
Warning Message: No entry 'bin\config.bin/CfgWeapons/SAS_PlateCarrier1_rgr.muzzles'.
Warning Message: Size: '/' not an array
Warning Message: No entry 'bin\config.bin/CfgWeapons/SAS_PlateCarrier1_rgr.selectionFireAnim'.
Warning Message: '/' is not a value

my script

enum {
 //  = 2,	// Error parsing: Empty enum name
DESTRUCTENGINE = 2,
DESTRUCTDEFAULT = 6,
DESTRUCTWRECK = 7,
DESTRUCTTREE = 3,
DESTRUCTTENT = 4,
STABILIZEDINAXISX = 1,
STABILIZEDINAXESXYZ = 4,
STABILIZEDINAXISY = 2,
STABILIZEDINAXESBOTH = 3,
DESTRUCTNO = 0,
STABILIZEDINAXESNONE = 0,
DESTRUCTMAN = 5,
DESTRUCTBUILDING = 1,
};

class CfgPatches
{
class SAS
{
	units[] = {};
	weapons[] = {};
	requiredVersion = 0.1;
	requiredAddons[] = {"A3_Characters_F_BLUFOR"};
};
};

class CfgVehicles
{
class B_Soldier_base_F;
class SAS_Soldier_F : B_Soldier_base_F
{
	_generalMacro = "B_Soldier_F"; //unsure what this does
	scope = 2;
	displayName = "SAS Rifleman";
	nakedUniform = "U_BasicBody"; //class for "naked" body
	uniformClass = "SAS_Uniform"; //the uniform item
	hiddenSelections[] = {"Camo"};
	hiddenSelectionsTextures[] = {"\sas\Textures\sas_urban.paa"};

};
};

class cfgWeapons
{
class Uniform_Base;
class UniformItem;

class SAS_Uniform: Uniform_Base
{
	scope = 2;
	displayName = "SAS Uniform";
	picture = "\sas\Textures\sas_urban.paa";
	model = "\A3\Characters_F\Common\Suitpacks\suitpack_blufor_diver";

	class ItemInfo : UniformItem
	{
		uniformModel = "-";
		uniformClass = "SAS_Soldier_F"; //would be same as our made soldier class
		containerClass = "Supply20"; //how much it can carry
		mass = 80; //how much it weights
	};
};

class ItemCore;
class HeadgearItem;

class SAS_HelmetB: ItemCore
{
	scope = 2;
	weaponPoolAvailable = 1;
	displayName = "sas helmet";
	picture = "\A3\characters_f\Data\UI\icon_H_HelmetB_CA.paa";
	model = "\A3\Characters_F\BLUFOR\headgear_b_helmet_ballistic";
	hiddenSelections[] = {"camo"};
	hiddenSelectionsTextures[] = {""};

	class ItemInfo : HeadgearItem
	{
		mass = 100;
		uniformModel = "\A3\Characters_F\BLUFOR\headgear_b_helmet_ballistic";
		modelSides[] = {3, 1};
		armor = 3*0.5;
		passThrough = 0.8;
		hiddenSelections[] = {"camo"};
	};
};

class Vest_Base;
class VestItem;

   class SAS_PlateCarrier1_rgr: Vest_Base {
       scope = 2;
       displayName = "SAS Platecarrier";
       picture = "\A3\characters_f\Data\UI\icon_V_plate_carrier_1_CA.paa";
       model = "\A3\Characters_F\BLUFOR\equip_b_vest02";
       hiddenSelections[] = {"camo"};
       hiddenSelectionsTextures[] = {"\sas\Textures\sas_urban_vest.paa"};

       class ItemInfo : VestItem {
           uniformModel = "\A3\Characters_F\BLUFOR\equip_b_vest02";
           containerClass = "Supply50";
           mass = 50;
           armor = 5*0.5;
           passThrough = 0.7;
           hiddenSelections[] = {"camo"};

	};
};
};

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

×