Jump to content
Sign in to follow this  
Mattastic

Modded Vehicle Config Updates for Virtual Garage

Recommended Posts

I'm looking for a solution to fix modded vehicles not being listed as an option in Virtual Garage. Some of my own modded Helicopters, well all except one, are not showing up in Virtual Garage. My problem is specifically related to the Helicopters in my own mod, but if you know of any other config related updates that need to be done for the Marksman DLC please share your findings. I did a bit of searching and did not find any thread on this topic. If there is one I apologize and would ask to be pointed to it.:cool:

Share this post


Link to post
Share on other sites

My guess is you might need to add

scopeArsenal=2;

to the config of each chopper, but that is a wild stab in the dark.

FYI: HERE may have been a better place to post as its config related.

Share this post


Link to post
Share on other sites

Thanks I Will give that a shot. That is a much better place for the thread, if a Moderator would move this thread that would be great.

Share this post


Link to post
Share on other sites
Found what i'm looking for.

Glad to hear it. Mind posting it here in the event someone else is having the same issue and hasn't found the info for themselves?

Share this post


Link to post
Share on other sites
Found what i'm looking for.

Share your findings! :)

Share this post


Link to post
Share on other sites

****CONFIRMED BREAKTHROUGH - Try "forceInGarage=1;" in your mods vehicle class.

Well I thought I found what I was looking for. I'm still having some trouble, but I am mainly looking over the latest updates to the Vehicle Customization community wiki page HERE. Also, the updates to the configs for the sample test vehicles are also something I am looking over, I'll show the car one below since the heli seems to not have had any updates to it with the release of the DLC.

#include "basicdefines_A3.hpp"
class DefaultEventhandlers;

#include "CfgPatches.hpp"

class WeaponFireGun;
class WeaponCloudsGun;
class WeaponFireMGun;
class WeaponCloudsMGun;

class CfgVehicles
{
class Car;
class Car_F: Car
{
	class HitPoints /// we want to use hitpoints predefined for all cars
	{
		class HitLFWheel;
		class HitLF2Wheel;
		class HitRFWheel;
		class HitRF2Wheel;
		class HitBody;
		class HitGlass1;
		class HitGlass2;
		class HitGlass3;
		class HitGlass4;
	};	
	class EventHandlers;
};

class Test_Car_01_base_F: Car_F
{
	model 	= "\Samples_f\Test_Car_01\Test_Car_01";  /// simple path to model
	picture	= "\A3\Weapons_F\Data\placeholder_co.paa"; /// just some icon in command bar
	Icon	= "\A3\Weapons_F\Data\placeholder_co.paa"; /// icon in map	

	displayName = "Test Car"; /// displayed in Editor

	hiddenSelections[] = {"camo1"}; ///we want to allow changing the color of this selection

	terrainCoef 	= 6.5; 	/// different surface affects this car more, stick to tarmac
	turnCoef 		= 2.5; 	/// should match the wheel turn radius
	precision 		= 10; 	/// how much freedom has the AI for its internal waypoints - lower number means more precise but slower approach to way
	brakeDistance 	= 3.0; 	/// how many internal waypoints should the AI plan braking in advance
	acceleration 	= 15; 	/// how fast acceleration does the AI think the car has

	fireResistance 	= 5; 	/// lesser protection against fire than tanks
	armor 			= 32; 	/// just some protection against missiles, collisions and explosions
	cost			= 50000; /// how likely is the enemy going to target this vehicle

	transportMaxBackpacks 	= 3; /// just some backpacks fit the trunk by default
	transportSoldier 		= 3; /// number of cargo except driver

	/// some values from parent class to show how to set them up
	wheelDamageRadiusCoef 	= 0.9; 			/// for precision tweaking of damaged wheel size
	wheelDestroyRadiusCoef 	= 0.4;			/// for tweaking of rims size to fit ground
	maxFordingDepth 		= 0.5;			/// how high water would damage the engine of the car
	waterResistance 		= 1;			/// if the depth of water is bigger than maxFordingDepth it starts to damage the engine after this time
	crewCrashProtection		= 0.25;			/// multiplier of damage to crew of the vehicle => low number means better protection
	driverLeftHandAnimName 	= "drivewheel"; /// according to what bone in model of car does hand move
	driverRightHandAnimName = "drivewheel";	/// beware, non-existent bones may cause game crashes (even if the bones are hidden during play)

	class TransportItems /// some first aid kits in trunk according to safety regulations
	{
		item_xx(FirstAidKit,4);
	};

	class Turrets{}; /// doesn't have any gunner nor commander
	class HitPoints: HitPoints
	{
		class HitLFWheel: HitLFWheel	{armor=0.125; passThrough=0;}; /// it is easier to destroy wheels than hull of the vehicle
		class HitLF2Wheel: HitLF2Wheel	{armor=0.125; passThrough=0;};

		class HitRFWheel: HitRFWheel	{armor=0.125; passThrough=0;};
		class HitRF2Wheel: HitRF2Wheel 	{armor=0.125; passThrough=0;}; 

		class HitFuel 			{armor=0.50; material=-1; name="fueltank"; visual=""; passThrough=0.2;}; /// correct points for fuel tank, some of the damage is aFRLied to the whole
		class HitEngine 		{armor=0.50; material=-1; name="engine"; visual=""; passThrough=0.2;};
		class HitBody: HitBody 	{name = "body"; visual="camo1"; passThrough=1;}; /// all damage to the hull is aFRLied to total damage

		class HitGlass1: HitGlass1 {armor=0.25;}; /// it is pretty easy to puncture the glass but not so easy to remove it
		class HitGlass2: HitGlass2 {armor=0.25;};
		class HitGlass3: HitGlass3 {armor=0.25;};
		class HitGlass4: HitGlass4 {armor=0.25;};
	};

	driverAction 		= driver_offroad01; /// what action is going the driver take inside the vehicle. Non-existent action makes the vehicle inaccessible
	cargoAction[] 		= {passenger_low01, passenger_generic01_leanleft, passenger_generic01_foldhands}; /// the same of all the crew
	getInAction 		= GetInLow; 		/// how does driver look while getting in
	getOutAction 		= GetOutLow; 		/// and out
	cargoGetInAction[] 	= {"GetInLow"}; 	/// and the same for the rest, if the array has fewer members than the count of crew, the last one is used for the rest
	cargoGetOutAction[] = {"GetOutLow"}; 	/// that means all use the same in this case

	#include "sounds.hpp"	/// sounds are in a separate file to make this one simple
	#include "pip.hpp"		/// PiPs are in a separate file to make this one simple
	#include "physx.hpp"	/// PhysX settings are in a separate file to make this one simple

	/// memory points where do tracks of the wheel appear
	// front left track, left offset
	memoryPointTrackFLL = "TrackFLL"; 
	// front left track, right offset
	memoryPointTrackFLR = "TrackFLR"; 
	// back left track, left offset
	memoryPointTrackBLL = "TrackBLL"; 
	// back left track, right offset
	memoryPointTrackBLR = "TrackBLR"; 
	// front right track, left offset
	memoryPointTrackFRL = "TrackFRL"; 
	// front right track, right offset
	memoryPointTrackFRR = "TrackFRR"; 
	// back right track, left offset
	memoryPointTrackBRL = "TrackBRL"; 
	// back right track, right offset
	memoryPointTrackBRR = "TrackBRR"; 		

	class Damage /// damage changes material in specific places (visual in hitPoint)
	{
		tex[]={};
		mat[]=
		{
			"A3\data_f\glass_veh_int.rvmat", 		/// material mapped in model
			"A3\data_f\Glass_veh_damage.rvmat", 	/// changes to this one once damage of the part reaches 0.5
			"A3\data_f\Glass_veh_damage.rvmat",		/// changes to this one once damage of the part reaches 1

			"A3\data_f\glass_veh.rvmat",			/// another material
			"A3\data_f\Glass_veh_damage.rvmat",		/// changes into different ones
			"A3\data_f\Glass_veh_damage.rvmat"
		};
	};

	class Exhausts /// specific exhaust effects for the car
	{
		class Exhaust1 /// the car has two exhausts - each on one side
		{
			position 	= "exhaust";  		/// name of initial memory point
			direction 	= "exhaust_dir";	/// name of memory point for exhaust direction
			effect 		= "ExhaustsEffect";	/// what particle effect is it going to use
		};

		class Exhaust2
		{
			position 	= "exhaust2_pos";
			direction 	= "exhaust2_dir";
			effect 		= "ExhaustsEffect";
		};				
	};

	class Reflectors	/// only front lights are considered to be reflectors to save CPU
	{
		class LightCarHeadL01 	/// lights on each side consist of two bulbs with different flares
		{
			color[] 		= {1900, 1800, 1700};		/// approximate colour of standard lights
			ambient[]		= {5, 5, 5};				/// nearly a white one
			position 		= "LightCarHeadL01";		/// memory point for start of the light and flare
			direction 		= "LightCarHeadL01_end";	/// memory point for the light direction
			hitpoint 		= "Light_L";				/// point(s) in hitpoint lod for the light (hitPoints are created by engine)
			selection 		= "Light_L";				/// selection for artificial glow around the bulb, not much used any more
			size 			= 1;						/// size of the light point seen from distance
			innerAngle 		= 100;						/// angle of full light
			outerAngle 		= 179;						/// angle of some light
			coneFadeCoef 	= 10;						/// attenuation of light between the above angles
			intensity 		= 1;						/// strength of the light
			useFlare 		= true;						/// does the light use flare?
			dayLight 		= false;					/// switching light off during day saves CPU a lot
			flareSize 		= 1.0;						/// how big is the flare

			class Attenuation
			{
				start 			= 1.0;
				constant 		= 0; 
				linear 			= 0; 
				quadratic 		= 0.25; 
				hardLimitStart 	= 30;		/// it is good to have some limit otherwise the light would shine to infinite distance
				hardLimitEnd 	= 60;		/// this allows adding more lights into scene
			};
		};

		class LightCarHeadL02: LightCarHeadL01
		{
			position 	= "LightCarHeadL02";
			direction 	= "LightCarHeadL02_end";
			FlareSize 	= 0.5;						/// side bulbs aren't that strong
		};

		class LightCarHeadR01: LightCarHeadL01
		{
			position 	= "LightCarHeadR01";
			direction 	= "LightCarHeadR01_end";
			hitpoint 	= "Light_R";
			selection 	= "Light_R";
		};

		class LightCarHeadR02: LightCarHeadR01
		{
			position 	= "LightCarHeadR02";
			direction 	= "LightCarHeadR02_end";
			FlareSize 	= 0.5;
		};
	};

	aggregateReflectors[] = {{"LightCarHeadL01", "LightCarHeadL02"}, {"LightCarHeadR01", "LightCarHeadR02"}}; /// aggregating reflectors helps the engine a lot
	/// it might be even good to aggregate all lights into one source as it is done for most of the cars

	class EventHandlers: EventHandlers 
	{
		// (_this select 0): the vehicle
		// """" Random texture source (pick one from the property textureList[])
		// []: randomize the animation sources (accordingly to the property animationList[])
		// false: Don't change the mass even if an animation source has a defined mass
		init="if (local (_this select 0)) then {[(_this select 0), """", [], false] call bis_fnc_initVehicle;};";
	};

	// Must be kept as fail-safe in case of issue with the function 
	hiddenSelectionsTextures[]={"\A3\Weapons_F\Data\placeholder_co.paa"};	 /// we could use any texture to cover the car

	// Definition of texture sources (skins), used for the VhC (Vehicle customization)
	// Also, because the Garage uses the VhC, it will make them available from the garage
	class textureSources
	{
		class red // Source class
		{
			displayName="Red"; // name displayed, among other, from the garage
			author=$STR_A3_Bohemia_Interactive; // Author of the skin
			textures[]=// List of textures, in the same order as the hiddenSelections definition
			{
				"#(rgb,8,8,3)color(1,0,0,1)" // This is procedural texture, can be useful to set placeholder
			};
			factions[]=// This source should be available only for these factions
			{
				"OPF_F", "OPF_G_F" // Side Opfor
			};
		};
		class blue
		{
			displayName="BBBBLue";
			author=$STR_A3_Bohemia_Interactive; 
			textures[]= 
			{
				"#(rgb,8,8,3)color(0,0,1,1)"
			};
			factions[]=
			{
				"BLU_F", "BLU_G_F" // Side Blufor
			};
		};
		class green
		{
			displayName="Green";
			author=$STR_A3_Bohemia_Interactive;
			textures[]= 
			{
				"#(rgb,8,8,3)color(0,1,0,1)"
			};
			factions[]= 
			{
				"IND_F", "IND_G_F" // Side independent
			};
		};	
		class yellow
		{
			displayName="Yellow power";
			author=$STR_A3_Bohemia_Interactive;
			textures[]= 
			{
				"#(rgb,8,8,3)color(0,1,0,1)"
			};
			factions[]= 
			{
				// Guerilla only
				"BLU_G_F", 
				"OPF_G_F",
				"IND_G_F"
			};
		};
		class white
		{
			displayName="White is white";
			author="Another name";
			textures[]=
			{
				"#(rgb,8,8,3)color(1,1,1,1)"
			};
			factions[]=
			{
				"CIV_F" // side civilian
			};
		};
		class black
		{
			displayName="Dark side";
			author="Tom_48_97";
			textures[]= 
			{
				"#(rgb,8,8,3)color(0,0,0,1)"
			};
			factions[]= {}; // Should be available for every factions
		};
	};
	// [_textureSourceClass1, _probability1, _textureSourceClass2, _probability2, ...]
	// Default behavior of the VhC is to select one of these sources, with a weighted random
	textureList[]=
	{
		"red", 1,
		"green", __EVAL(1/3), // You can also use EVAL to evaluate an expression
		"blue", 1,
		"black", 1
		// You can noticed that the white source is missing, therefore, it won't be part of the random
	};
};
class Test_Car_Alt_base_F: Test_Car_01_base_F
{
	hiddenSelections[] = {"camo1","camo2","camo3"}; ///we want to allow changing the color of this selection
	hiddenSelectionsTextures[]=
	{
		"#(rgb,8,8,3)color(1,0,0,1)",
		"#(rgb,8,8,3)color(0,1,0,1)",
		"#(rgb,8,8,3)color(0,0,1,1)"
	};	 
	class textureSources
	{
		class RedGreenBlue
		{
			displayname="Red Green Blue";
			author="You don't want to know";
			textures[]=
			{
				"#(rgb,8,8,3)color(1,0,0,1)",
				"#(rgb,8,8,3)color(0,1,0,1)",
				"#(rgb,8,8,3)color(0,0,1,1)"
			};
			factions[]={};
		};
		class BlueGreenRed
		{
			displayname="Blue Green Red";
			author="You don't want to know";
			textures[]=
			{
				"#(rgb,8,8,3)color(0,0,1,1)",
				"#(rgb,8,8,3)color(0,1,0,1)",
				"#(rgb,8,8,3)color(1,0,0,1)"
			};
			factions[]={};
		};
	};
};
// Derivate from the base class
class C_Test_Car_01_F: Test_Car_01_base_F /// some class that is going to be visible in editor
{	
	scope	= 2; 			/// makes the car visible in editor
	scopeCurator=2;			// scope 2 means it's available in Zeus mode (0 means hidden)
	crew 	= "C_man_1"; 	/// we need someone to fit into the car
	side	= 3; 			/// civilian car should be on civilian side
	faction	= CIV_F;		/// and with civilian faction
};
// Derivate from the base class
class C_Test_Car_01_Black_F: Test_Car_01_base_F /// some class that is going to be visible in editor
{	
	forceInGarage=1; 	// This will force the garage to display this vehicle, otherwise it won't because it shares the same p3d as the previous
	displayName="Test Car (Black)";
	scope=2; 			/// makes the car visible in editor
	scopeCurator=2;		// scope 2 means it's available in Zeus mode (0 means hidden)
	crew="C_man_1"; 	/// we need someone to fit into the car
	side=3; 			/// civilian car should be on civilian side
	faction	= CIV_F;	/// and with civilian faction
	// the texture source used will be the green one, whatever it probability because it's the only one defined here
	textureList[]=
	{
		"black", 1
	};
};
// Derivate from the base class
class C_test_Car_01_anotherVariant_F: Test_Car_01_base_F
{
	forceInGarage=0; 	// 0 has no effect at all
	displayName="Test Car (black or white)";
	scope=2; 			
	scopeCurator=0;		// It isn't shown in curator UI
	crew="C_man_1"; 	
	side=3; 			
	faction	= CIV_F;	
	// this can be black or white
	textureList[]=
	{
		"black", 0.75,
		"white", 0.5
	};
};
// This car won't  be available from the editor but its class name can be used with the VhC function
// E.g. [MyTestCar, "C_test_Car_01_white_F"] call bis_fnc_initVehicle;
class C_test_Car_01_white_F: Test_Car_01_base_F
{
	forceInGarage=0; 	// 0 has no effect at all
	displayName="Test Car (white)";
	scope=1; 			
	scopeCurator=0;		// It isn't shown in curator UI
	crew="C_man_1"; 	
	side=3; 			
	faction	= CIV_F;	
	// this can be black or white
	textureList[]=
	{
		"white", 0.5
	};
};
// Other delivery of the car with differents hidden selections
class C_Test_Car_01_alt_F: Test_Car_Alt_base_F
{	
	forceInGarage=1;
	displayName="Test Car (RGB)";
	scope	= 2;
	scopeCurator=2;
	crew 	= "C_man_1";
	side	= 3;
	faction	= CIV_F;
	textureList[]= {"RedGreenBlue",1};
};
class C_Test_Car_01_alt_V2_F: C_Test_Car_01_alt_F
{
	displayName="Test Car (BGR)";
	textureList[]= {"BlueGreenRed",1};
};
};

I am a bit stumped though because one of my helicopter shows in VG just fine, bu the other 4 do not. On the back end for all the birds the config is uniform and all done the same way. Below is my configs portion for the birds. I'm not an expert so if anything there could be improved, let me know.

class MEF_USMC_Huron: B_Heli_Transport_03_F
			{
				_generalMacro = "B_Heli_Transport_03_F";
				side = 1;
				scope = public;
				scopeCurator = public;
				faction = "MEF";
				vehicleClass = "MEF_A3_Units_4";
				crew = "B_Helipilot_F";
				displayName = "MEF Huron [CH-67]";
				typicalCargo[] = {"B_Helipilot_F"};
				hiddenSelectionsTextures[] = {"mef_mod\textures\air\mef_Heli_Transport_03_CO.paa","mef_mod\textures\air\mef_Heli_Transport2_03_CO.paa"};
				incomingMissileDetectionSystem = 16;
				weapons[] = {"CMFlareLauncher"};
				magazines[] = {"300Rnd_CMFlare_Chaff_Magazine"};
				maximumLoad = 10000;
				transportMaxWeapons = 8;
				transportMaxMagazines = 200;
				transportMaxBackpacks = 10;
			};
			class MEF_USMC_Ghosthawk: B_Heli_Transport_01_F
			{
				_generalMacro = "B_Heli_Transport_01_F";
				side = 1;
				scope = 2;
				scopeCurator = 2;
				faction = "MEF";
				vehicleClass = "MEF_A3_Units_4";
				crew = "B_Helipilot_F";
				displayName = "MEF Ghosthawk [uH-80]";
				typicalCargo[] = {"B_Helipilot_F"};
				hiddenSelectionsTextures[] = {"mef_mod\textures\air\mef_heli_transport_01_ext01_co.paa","mef_mod\textures\air\mef_heli_transport_01_ext02_co.paa"};
				incomingMissileDetectionSystem = 16;
				weapons[] = {"CMFlareLauncher"};
				magazines[] = {"300Rnd_CMFlare_Chaff_Magazine"};
				maximumLoad = 10000;
				transportMaxWeapons = 8;
				transportMaxMagazines = 200;
				transportMaxBackpacks = 10;
			};
			class MEF_USMC_Hummingbird: B_Heli_Light_01_F
			{
				_generalMacro = "B_Heli_Light_01_F";
				side = 1;
				scope = 2;
				scopeCurator = 2;
				faction = "MEF";
				vehicleClass = "MEF_A3_Units_4";
				crew = "B_Helipilot_F";
				displayName = "MEF Hummingbird [MH-9]";
				typicalCargo[] = {"B_Helipilot_F"};
				hiddenSelectionsTextures[] = {"mef_mod\textures\air\mef_heli_light_01_ext_blufor_co.paa"};
				incomingMissileDetectionSystem = 16;
				weapons[] = {"CMFlareLauncher"};
				magazines[] = {"300Rnd_CMFlare_Chaff_Magazine"};
				maximumLoad = 1000;
				transportMaxWeapons = 8;
				transportMaxMagazines = 200;
				transportMaxBackpacks = 10;
			};
			class MEF_USMC_Pawnee: B_Heli_Light_01_armed_F
			{
				_generalMacro = "B_Heli_Light_01_F";
				side = 1;
				scope = 2;
				faction = "MEF";
				vehicleClass = "MEF_A3_Units_4";
				crew = "B_Helipilot_F";
				displayName = "MEF Pawnee [AH-9]";
				typicalCargo[] = {"B_Helipilot_F"};
				hiddenSelectionsTextures[] = {"mef_mod\textures\air\mef_heli_light_01_ext_blufor_co.paa"};
				incomingMissileDetectionSystem = 16;
				weapons[] = {"M134_minigun","missiles_DAR","CMFlareLauncher"};
				magazines[] = {"5000Rnd_762x51_Belt","24Rnd_missiles","300Rnd_CMFlare_Chaff_Magazine"};
				maximumLoad = 1000;
				transportMaxWeapons = 8;
				transportMaxMagazines = 200;
				transportMaxBackpacks = 10;
			};
			class MEF_USMC_Blackfoot: B_Heli_Attack_01_F
			{
				_generalMacro = "B_Heli_Attack_01_F";
				side = 1;
				scope = 2;
				faction = "MEF";
				vehicleClass = "MEF_A3_Units_4";
				crew = "B_Helipilot_F";
				displayName = "MEF Blackfoot [AH-99]";
				typicalCargo[] = {"B_Helipilot_F"};
				hiddenSelectionsTextures[] = {"mef_mod\textures\air\mef_heli_attack_01_co.paa"};
				incomingMissileDetectionSystem = 16;
				weapons[] = {"gatling_20mm","missiles_DAGR","missiles_ASRAAM","CMFlareLauncher"};
				magazines[] = {"1000Rnd_20mm_shells","4Rnd_AAA_missiles","24Rnd_PG_missiles","300Rnd_CMFlare_Chaff_Magazine"};
				maximumLoad = 1000;
				transportMaxWeapons = 8;
				transportMaxMagazines = 200;
				transportMaxBackpacks = 10;
			};
};

To me if one is working they all should, but that's not the case here. The 2 new helicopters that I am adding to my mod also work fine, and those are ported A2 birds. To me it's looking like this is an update that would need to occur with the base class for the birds, but then thats A3 content and it should be good to go. Considering the class-names that my birds inherit from are the same as the ones that are displaying. I will continue to search for a solution for this and post any breakthroughs that I have.

****POSSIBLE BREAKTHROUGH - Try "forceInGarage=1;" in your mods vehicle class.

Edited by Mattastic

Share this post


Link to post
Share on other sites

Out of curiosity, which one displays?

EDIT: Doesn't matter, it seems you've sorted it with your breakthrough.

Share this post


Link to post
Share on other sites

Yes it seems since retextured vehicles call upon .p3d models that are also used by the vanilla birds and only one will display. In order to "force the retextured vehicle to show you need to insert "forceInGarage=1" with the modded vehicle class in config. I appreciate your help Jackal.;)

Share this post


Link to post
Share on other sites
Thanks I Will give that a shot. That is a much better place for the thread, if a Moderator would move this thread that would be great.

Thread moved, please report your post for a faster response. Moderators don't necessary have the time to read every thread. ;)

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
Sign in to follow this  

×