Jump to content
scotg

Tanks and Turrets Troubleshooting - need help!

Recommended Posts

Hi everyone. I have some unfavorable turret behaviors, but also a few other tank specific issues. See the video for better understanding and demonstrations.


EDIT: New video in most recent ScotG post.

Share this post


Link to post
Share on other sites

Aside from the turret configs, I also mentioned the need for a hidden AI driver to make it appear the commander is the only person in the tank. This was an old trick, and kind of a janky way to fake one-man tanks with turret, such as the Varmint. When you exit the tank, the AI driver has the tendency to move around and break the illusion. Today, I just discovered this:

		hasDriver = -1;

After initial testing, this seems to be exactly the solution this tank needed. It eliminates the driver and allows the top commander to drive the tank and use his turret. In a 1-man tank, that means the player has full control without running the risk of the invisible AI driving off when you get out. THANK YOU SO MUCH BIS DEVS!!! I'm not giving you guys my first child or anything, but much love to you for this simply delicious line of code!

Now... I'mma try it on my 1-man helicopter. I hope it works!
 



Further updates on the first post video:
Varmint (Small Tank)
- Speed is now adjusted. The problem was coming from having the wheel boundaries too much off the ground, and the solution was to lower the memory points about 2 cm. New problems have arisen from having too much stopping power and a super fast reverse speed. Tweaking certain values to ease the jerking makes it go faster in a curve than it can in a straight line. Tweaking it another way makes it do the endless neutral steer thing. I'm having a look at the Nyx' code to see how it handles, since it's about the same size and weight, and has the same number of wheels. More to come on that.
- Commander position not appearing in 3rd person was from a missing proxy. At some point I must have deleted it, but I never checked because I didn't have a reason to delete it on purpose. Now it's fixed.
- Head motion with turret... It's fixed. I'm not sure what it was exactly, but I just replaced a chunk of code with turret code that was working, and started tweaking it to fit the small tank's interior.

The other two tanks
- I haven't gotten to their problems, yet, but I will keep y'all updated.

Share this post


Link to post
Share on other sites

be aware hasdriver=-1 doesnt work for AI. so you may want to have a separate version for AI

Share this post


Link to post
Share on other sites
3 minutes ago, .kju said:

be aware hasdriver=-1 doesnt work for AI. so you may want to have a separate version for AI

Good to know! I'm not sure AI are suited for tank driving at all in the first place, but this is informative.
Any idea how to pull off the same feat with a 1-man attack helicopter? Also, I need the gun turret to follow freelook/TrackIR. I've got the parameter turretFollowFreelook=1; in the turret class, but it's not doing anything while I have hasDriver=-1. Haven't tried it other ways, yet.

Share this post


Link to post
Share on other sites

not sure about this but check and try different key actions in controls settings - a different set than the default assigned might help with this

 

also there was a scripted system by HeinBloed to do something similar from what i recall (basically swapped you with AI gunner/agent)

 

overall best to join discord and reach out to reyhard and X3KJ (can do also in the forum here but discord probably works better)

Share this post


Link to post
Share on other sites

@.kju Sweet. Is that the Arma 3 channel on Discord, or something more specific? I've gotten some good tips from both of them, directly and indirectly. Reyhard seems to be the aircraft guy, while X3KJ is more an armor/tracked expert.

As you replied, I was editing my post with this next bit, but I decided to just put it here: What I don't need in a helicopter is to have the flight controls to be moving the turret, too. The "aiming" commands I have set to kb, mouse, and gamepad for turrets are also used for pilot controls in planes and helis (since historically they have been available). However, I'm afraid if the turret is enabled for a pilot then there might be a conflict between flight and aiming controls, hence the need for freelook/TrackIR to be set as aiming control method in specific aircraft of my own design. I guess what I'm saying is I hope pilot turrets work, but I'm afraid they will work wrong.

Share this post


Link to post
Share on other sites

reyhard is the config wizard doing everything out there. he did tanks for RHS and BI for example.

yeah referring to configs channel on arma discord

Share this post


Link to post
Share on other sites

Thanks for pointing me in that direction, @.kju! It's a better experience on discord.

Here's the updated video:

 

Here's the latest config.cpp:

Spoiler

#define _ARMA_
#include "basicdefines_A3.hpp"
enum {
	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 Mauler
	{
		addonRootClass = "A3_Armor_F_EPB";
		units[] = {"mauler_F"};
		weapons[] = {};
		requiredVersion = 0.1;
		requiredAddons[] = {"A3_Armor_F_EPB"};
	};
};
class CfgFactionClasses
{
	class SixOneJTF
	{
		displayName = "61st JTF";
		author = "Scot Gilmore";
		icon = "data_f\faction_gijoe_co.paa";
		priority = 3;
		side = 1; 
	};
};
class CfgVehicleClasses
{
	class SixOneJTF_Armor
	{
		displayName = "61st JTF Armor";
	};
};
 class CfgMovesBasic
{
	class Default;
	class DefaultDie;
	class ManActions
	{
		mauler_Driver = "mauler_driver";
		mauler_Commander = "mauler_cmdr";
		mauler_Gunner = "mauler_gunner";
	};
}; 
class CfgMovesMaleSdr: CfgMovesBasic
{
	class States
	{
		class Crew;
		class mauler_driver: Crew
		{
			file = "vhx_armor\gijoe_mauler\anims\mauler_driver";
			actions = "CargoActions";
			aiming = "aimingNo";
			aimingBody = "aimingNo";
			//legs = "legsNo";
			//head = "headNo";
			disableWeapons = 1;
			interpolationRestart = 1;
			soundEdge[] = {0.45};
			boundingSphere = 2.5;
			canPullTrigger = 0;
			leaning = "crewShake";
			rightHandIKCurve[] = {1};
			leftHandIKCurve[] = {1};
			rightLegIKCurve[] = {1};
			leftLegIKCurve[] = {1};
			ConnectTo[] = {};
			InterpolateTo[] = {"Unconscious",0.1};
		};
		class mauler_commander: mauler_driver
		{
			file = "vhx_armor\gijoe_mauler\data\Anims\commander\mauler_commander";
			interpolateTo[] = {"mauler_KIA_Commander",1};
		};
		class mauler_commanderOut: Crew
		{
			file = "vhx_armor\gijoe_mauler\data\Anims\commanderOut\mauler_commanderOut";
			interpolateTo[] = {"mauler_KIA_CommanderOut",1};
		};
		class mauler_KIA_commanderOut: DefaultDie
		{
			file = "vhx_armor\gijoe_mauler\data\Anims\commander\mauler_commander";
			speed = 0.5;
			looped = 0;
			terminal = 1;
			soundEnabled = 0;
			connectTo[] = {"Unconscious",0.1};
		};
		class mauler_KIA_commander: mauler_KIA_CommanderOut
		{
			file = "vhx_armor\gijoe_mauler\data\Anims\commander\mauler_commander";
		};
		class mauler_KIA_gunner: mauler_KIA_CommanderOut
		{
			file = "vhx_armor\gijoe_mauler\data\Anims\mauler_gunner";
		};
		//---------------------------------------------------------
		class mauler_Gunner: mauler_driver
		{
			file = "vhx_armor\gijoe_mauler\data\Anims\mauler_gunner";
			interpolateTo[] = {"mauler_KIA_gunner",1};
		};
		class mauler_GunnerOut: Crew
		{
			file = "vhx_armor\gijoe_mauler\data\Anims\mauler_gunner";
			interpolateTo[] = {"mauler_KIA_gunnerOut",1};
		};
		class mauler_KIA_GunnerOut: mauler_KIA_CommanderOut
		{
			file = "vhx_armor\gijoe_mauler\data\Anims\mauler_KIA_gunner";
		};
	};
};

class DefaultEventhandlers;
class WeaponFireGun;
class WeaponCloudsGun;
class WeaponFireMGun;
class WeaponCloudsMGun;
class RCWSOptics;
class Optics_Armored;
class Optics_Commander_02: Optics_Armored
{
	class Wide;
	class Medium;
	class Narrow;
};
class Optics_Gunner_MBT_02: Optics_Armored
{
	class Wide;
	class Medium;
	class Narrow;
};
class CfgVehicles
{
	class LandVehicle;
	class Tank: LandVehicle
	{
		class NewTurret;
		class Sounds;
		class HitPoints;
		class CommanderOptics;
	};
	class Tank_F: Tank
	{
		class Turrets
		{
			class MainTurret: NewTurret
			{
				class ViewGunner;
				class Turrets
				{
					class CommanderOptics;
				};
			};
		};
		class AnimationSources;
		class ViewPilot;
		class ViewOptics;
		class ViewCargo;
		class HeadLimits;
		class HitPoints: HitPoints
		{
			class HitHull;
			class HitEngine;
			class HitLTrack;
			class HitRTrack;
		};
		class Sounds: Sounds
		{
			class Engine;
			class Movement;
		};
	};
	class mauler_Base: Tank_F
	{
		author = "Scot Gilmore";
		model = "vhx_armor\gijoe_mauler\mauler1.p3d";
		picture = "vhx_armor\gijoe_mauler\data\UI\pic_mauler_co.paa";
		Icon = "vhx_armor\gijoe_mauler\data\UI\map_mauler_co.paa";
		scope = 0;
		MapSize = 7;
		features = "Randomization: No						<br />Camo selections: 2 - turret, hull						<br />Script door sources: None						<br />Script animations: HideTurret						<br />Executed scripts: None						<br />Firing from vehicles: No						<br />Slingload: No						<br />Cargo proxy indexes: 1 to 7";
		textSingular = "Black Bear";
		textPlural = "Black Bears";
		nameSound = "veh_vehicle_APC_s";
		vehicleClass = "GIJoe_Armor";
		displayname = "Black Bear LT";
		accuracy = 0.3;
		#include "sounds.hpp"
// physx
		numberPhysicalWheels = 12;
		simulation = "tankX";
		normalSpeedForwardCoef = 1.0;
		slowSpeedForwardCoef = 0.45;
		torqueCurve[] = {
			{"(0/8000)","(2300/2300)"},
			{"(1143/8000)","(2300/2300)"},
			{"(2286/8000)","(2300/2300)"},
			{"(3429/8000)","(2300/2300)"},
			{"(4572/8000)","(2300/2300)"},
			{"(5715/8000)","(2300/2300)"},
			{"(6858/8000)","(2300/2300)"},
			{"(8000/8000)","(2300/2300)"}
		};
		maxOmega = 272.27;
		enginePower = 520;
		peakTorque = 1660;
		idleRPM = 850;
		redRPM = 2600;
		thrustDelay = 0.2;
		clutchStrength = 105.0;
		fuelCapacity = 640;
		brakeIdleSpeed = 1.78;
		tankTurnForce = 167531; //mass=24321. tTF = mass X 11 
		engineLosses = 25;
		transmissionLosses = 15;
		cost=1500000;
		damageResistance = 0.02;
		crewVulnerable = false;
		armor = 260;
		armorStructural = 280;
		driverAction = "mauler_driver";
		driverInAction = "mauler_driver";
		insideSoundCoef = 0.9;
		smokeLauncherGrenadeCount = 6; //Number of smoke shells launched at once
		smokeLauncherVelocity = 14; //Velocity which smoke shells are launched at
		smokeLauncherOnTurret = 1; //0 if smoke launchers are on hull, 1 if on turret
		smokeLauncherAngle = 120; //Angle within which smoke grenades are launched (actual spacing may end up smaller so use slighty higher number)
		category = "Armored";
		destrType = "DestructDefault";
		maxFordingDepth = 1.5;
		waterResistance = 0;
		waterDamageEngine = 0.2;
		waterLeakiness = 10;
		changeGearMinEffectivity[] = {0.95,0.0,0.85};
		switchTime = 0.1;
		latency = 1.0;
		crew = "mauler_driver";
		tracksSpeed = 1.375;
		maxSpeed = 73;
		viewCargoShadow = 1;
		viewCargoShadowDiff = 0.05;
		viewCargoShadowAmb = 0.5;
		transportSoldier = 0;
		getInAction = "GetInLow";
		getOutAction = "GetOutLow";
		cargoGetInAction[] = {"GetInHigh"};
		cargoGetOutAction[] = {"GetOutHigh"};
		forceHideDriver = 0;
		viewDriverInExternal = 1;
		DriverForceOptics = 0;
		driverDoor = "hatchDriver";
		radarType = 1;
		LockDetectionSystem = 4;
		IncommingMisslieDetectionSystem = 16;
		irscanrangemax = 3000;
		irscanrangemin = 500;
		irtarget = 1;
		irScanGround = 0;
		laserscanner = 0;
		threat[] = {0.9,0.9,0.4};
		//driverCompartments = "Compartment1";
		class complexGearbox
		{
			GearboxRatios[] = {"R1",-2.0,"N",0,"D1",1.0};
			TransmissionRatios[] = {"High",6.25};
			gearBoxMode = "auto";
			moveOffGear = 3;
			driveString = "D";
			neutralString = "N";
			reverseString = "R";
			transmissionDelay = 0.1;
		};
		/*
		class complexGearbox
		{
			GearboxRatios[]    = {"R2",-3.9,"N",0,"D1",4.7,"D2",3.5,"D3",2.6,"D4",2.0,"D5",1.5,"D6",1.125,"D7",0.85};
			TransmissionRatios[] = {"High",15};
			gearBoxMode        = "auto"; //gearbox can be of type: full-auto (only requires 'W' or 'S'), auto (requires shift between drive and reverse), semi-auto, manual
			moveOffGear        = 1; // defines what gear an automatic or semi-automatic gearbox will move off from stationary in. 1 by default.
			driveString        = "D"; // string to display in the HUD for forward gears.
			neutralString      = "N"; // string to display in the HUD for neutral gear.
			reverseString      = "R"; // string to display in the HUD for reverse gears.
			transmissionDelay  = 0.1;
		};
		*/
		driveOnComponent[] = {"pasoffsetL, pasoffsetP"};
		class Wheels
		{
			class L2
			{
				wheelBrakeFrictionCoef = 0.01;
				boneName = "wheel_podkoloL1";
				center = "wheel_1_2_axis";
				boundary = "wheel_1_2_bound";
				damping = 65.0;
				steering = 0;
				side = "left";
				weight = 130;
				mass = 130;
				MOI = 30;
				latStiffX = 28;
				latStiffY = 280;
				longitudinalStiffnessPerUnitGravity = 100000;
				maxBrakeTorque = 4520;
				sprungMass = 1520; // mass/12
				springStrength = 198000; // 50668.75; // sprungMass*5^2 (try 5^2 up to 10^2, then tweak)
				springDamperRate = 14811; // 2026.75; // sDR = dampingRate X 2 X sqrt(springStrength X sprungMass)
				dampingRate = 1.0; // ~0.1 to ~0.8;
				dampingRateInAir = 5000;
				dampingRateDamaged = 10;
				dampingRateDestroyed = 10000;
				maxDroop = 0.15;
				maxCompression = 0.15;
				//frictionVsSlipGraph[] = {{0.0,1.5},{0.5,1.5},{1,1.5}};
			};
			class L3: L2
			{
				boneName = "wheel_podkolol2";
				center = "wheel_1_3_axis";
				boundary = "wheel_1_3_bound";
			};
			class L4: L2
			{
				boneName = "wheel_podkolol3";
				center = "wheel_1_4_axis";
				boundary = "wheel_1_4_bound";
			};
			class L5: L2
			{
				boneName = "wheel_podkolol4";
				center = "wheel_1_5_axis";
				boundary = "wheel_1_5_bound";
			};
			class L6: L2
			{
				boneName = "wheel_podkolol5";
				center = "wheel_1_6_axis";
				boundary = "wheel_1_6_bound";
			};
			class L7: L2
			{
				boneName = "wheel_podkolol6";
				center = "wheel_1_7_axis";
				boundary = "wheel_1_7_bound";
			};
			class L1: L2
			{
				boneName = "";
				center = "wheel_1_1_axis";
				boundary = "wheel_1_1_bound";
				sprungMass = 1500.0;
				springStrength = 37500;
				springDamperRate = 7500;
				maxDroop = 0;
				maxCompression = 0;
			};
			class L9: L2
			{
				boneName = "wheel_podkoloL9";
				center = "wheel_1_9_axis";
				boundary = "wheel_1_9_bound";
				sprungMass = 1500.0;
				springStrength = 37500;
				springDamperRate = 7500;
				maxDroop = 0;
				maxCompression = 0;
			};
			//-------------------------------------------------
			class R2: L2
			{
				boneName = "wheel_podkolop1";
				center = "wheel_2_2_axis";
				boundary = "wheel_2_2_bound";
				side = "right";
			};
			class R3: R2
			{
				boneName = "wheel_podkolop2";
				center = "wheel_2_3_axis";
				boundary = "wheel_2_3_bound";
			};
			class R4: R2
			{
				boneName = "wheel_podkolop3";
				center = "wheel_2_4_axis";
				boundary = "wheel_2_4_bound";
			};
			class R5: R2
			{
				boneName = "wheel_podkolop4";
				center = "wheel_2_5_axis";
				boundary = "wheel_2_5_bound";
			};
			class R6: R2
			{
				boneName = "wheel_podkolop5";
				center = "wheel_2_6_axis";
				boundary = "wheel_2_6_bound";
			};
			class R7: R2
			{
				boneName = "wheel_podkolop6";
				center = "wheel_2_7_axis";
				boundary = "wheel_2_7_bound";
			};
			class R1: R2
			{
				boneName = "";
				center = "wheel_2_1_axis";
				boundary = "wheel_2_1_bound";
				sprungMass = 1500.0;
				springStrength = 37500;
				springDamperRate = 7500;
				maxDroop = 0;
				maxCompression = 0;
			};
			class R9: R2
			{
				boneName = "wheel_podkoloP9";
				center = "wheel_2_9_axis";
				boundary = "wheel_2_9_bound";
				sprungMass = 1500.0;
				springStrength = 37500;
				springDamperRate = 7500;
				maxDroop = 0;
				maxCompression = 0;
			};
		};
		class HitPoints: HitPoints
		{
			class HitHull: HitHull
			{
				armor = 0.4;
				material = -1;
				name = "telo";
				visual = "zbytek";
				passThrough = 0;
				minimalHit = 0.08;
				explosionShielding = 0;
				radius = 0.1;
			};
			class HitEngine: HitEngine
			{
				armor = 0.45;
				material = -1;
				name = "motor";
				passThrough = 0;
				minimalHit = 0.139;
				explosionShielding = 0.009;
				radius = 0.17;
			};
			class HitLTrack: HitLTrack
			{
				armor = 0.5;
				material = -1;
				name = "pas_L";
				passThrough = 0;
				minimalHit = 0.15;
				explosionShielding = 0.35;
				radius = 0.3;
			};
			class HitRTrack: HitRTrack
			{
				armor = 0.5;
				material = -1;
				name = "pas_P";
				passThrough = 0;
				minimalHit = 0.15;
				explosionShielding = 0.35;
				radius = 0.3;
			};
		};
		class ViewOptics: ViewOptics
		{
			visionMode[] = {"Normal","NVG"};
			initFov = 0.7;
			minFov = 0.7;
			maxFov = 0.7;
		};
		class Turrets: Turrets
		{
			class MainTurret: MainTurret
			{
				
				class Turrets: Turrets
				{
					class CommanderOptics: CommanderOptics
					{
						memoryPointGunnerOutOptics = ""; //"commanderview";
						memoryPointGunnerOptics = "pip4_pos"; //"commanderview";
						minElev = -5;
						maxElev = 30;
						initElev = 0;
						minTurn = -360;
						maxTurn = 360;
						initTurn = 0;
						weapons[] = {"SmokeLauncher"};
						magazines[] = {"SmokeLauncherMag","SmokeLauncherMag"};
						outGunnerMayFire = 0;
						inGunnerMayFire = 1;
						gunnerAction = "mauler_commanderOut";
						gunnerInAction = "mauler_commander";
						gunnerGetInAction = "GetInHigh";
						gunnerGetOutAction = "GetOutHigh";
						gunnerOpticsModel = "\A3\weapons_f\reticle\Optics_Commander_02_F";
						gunnerOutOpticsModel = "";
						gunnerOpticsEffect[] = {};
						isPersonTurret = 1;
						personTurretAction = "vehicle_turnout_1";
						minOutElev = -10;
						maxOutElev = 15;
						initOutElev = 0;
						minOutTurn = -45;
						maxOutTurn = 90;
						initOutTurn = 0;
						gunnerForceOptics = 0;
						usePip = 1;
						animationSourceStickX = "com_turret_control_x";
						animationSourceStickY = "com_turret_control_y";
						gunnerRightHandAnimName = "com_turret_control";
						turretFollowFreeLook = 2;
						viewGunnerShadowAmb = 0.5;
						viewGunnerShadowDiff = 0.05;
						LODTurnedIn = 1000;
						LODTurnedOut = 1000;
						LODOpticsIn = 0;
						class ViewGunner: ViewGunner
						{
							initAngleX = -5;
							initAngleY = 0;
							initFov = 0.9;
							minFov = 0.25;
							maxFov = 1.25;
							minAngleX = -65;
							maxAngleX = 85;
							minAngleY = -150;
							maxAngleY = 150;
							minMoveX = -0.075;
							maxMoveX = 0.075;
							minMoveY = -0.075;
							maxMoveY = 0.075;
							minMoveZ = -0.075;
							maxMoveZ = 0.1;
						};
						class ViewOptics: ViewOptics
						{
							initAngleX = 0;
							minAngleX = -30;
							maxAngleX = 30;
							initAngleY = 0;
							minAngleY = -100;
							maxAngleY = 100;
							initFov = 0.31;
							minFov = 0.034;
							maxFov = 0.31;
							visionMode[] = {"Normal","TI"};
							thermalMode[] = {2,3};
						};
						class OpticsIn: Optics_Commander_02
						{
							class Wide: Wide{};
							class Medium: Medium{};
							class Narrow: Narrow{};
						};
						turretInfoType = "RscWeaponRangeFinder";
						showCrewAim = 1;
						startEngine = 0;
						gunnerHasFlares = 1;
						stabilizedInAxes = 3;
						maxHorizontalRotSpeed = 1.8;
						maxVerticalRotSpeed = 1.8;
						viewGunnerInExternal = 1;
						/*  
						body = "obsTurret";
						gun = "obsGun";
						animationSourceBody = "obsTurret";
						animationSourceGun = "obsGun";
						memoryPointsGetInGunner = "pos commander";
						memoryPointsGetInGunnerDir = "pos commander dir";
						gunnerDoor = "hatch_cmdr";
						//gunnerCompartments = "Compartment3";
						*/
						class HitPoints
						{
							class HitTurret
							{
								armor = 0.3;
								material = -1;
								name = "vezVelitele";
								visual = "vezVelitele";
								passThrough = 0;
								minimalHit = 0.03;
								explosionShielding = 0.001;
								radius = 0.25;
							};
							class HitGun
							{
								armor = 0.3;
								material = -1;
								name = "zbranVelitele";
								visual = "zbranVelitele";
								passThrough = 0;
								minimalHit = 0.03;
								explosionShielding = 0.001;
								radius = 0.25;
							};
						};
					};
				};
				gunBeg = "Usti hlavne";
				gunEnd = "Konec hlavne";
				memoryPointGun = "usti hlavne3";
				weapons[] = {"cannon_125mm","LMG_coax"};
				magazines[] = {"24Rnd_125mm_APFSDS_T_Green","24Rnd_125mm_APFSDS_T_Green","2000Rnd_762x51_Belt_Green","2000Rnd_762x51_Belt_Green"};
				soundServo[] = {"A3\sounds_f\dummysound",0.031622775,1.0,30};
				minElev = -9;
				maxElev = 62;
				initElev = 0;
				gunnerForceOptics = 0;
				gunnerAction = "mauler_gunner";
				gunnerInAction = "mauler_gunner";
				gunnerGetInAction = "GetInHigh";
				gunnerGetOutAction = "GetOutHigh";
				gunnerDoor = "hatch_gunner";
				memoryPointsGetInGunner = "pos gunner";
				memoryPointsGetInGunnerDir = "pos gunner dir";
				memoryPointGunnerOutOptics = ""; //"commanderview";
				memoryPointGunnerOptics = "scopeGNR"; //"commanderview";
				lodTurnedIn = 1100;
				LODTurnedOut = 1100;
				hideWeaponsGunner = 1;
				outGunnerMayFire = 1;
				inGunnerMayFire = 1;
				viewGunnerInExternal = 1;
				castGunnerShadow = 1;
				forceHideGunner = 0;
				stabilizedinaxes = 3;
				gunnerOpticsModel = "\A3\weapons_f\reticle\Optics_Gunner_02_F";
				gunnerOutOpticsModel = "";
				turretInfoType = "RscOptics_MBT_01_gunner";
				discreteDistance[] = {100,200,300,400,500,600,700,800,900,1000,1200,1400,1600,1800,2000,2400,2800};
				discreteDistanceInitIndex = 5;
				selectionFireAnim = "zasleh";
				lockWhenDriverOut = 0;
				usePip = 1;
				gunnerHasFlares = 0;
				maxhorizontalrotspeed = 1.3;
				maxverticalrotspeed = 1.3;
				startengine = 0;
				class OpticsIn
				{
					class Wide
					{
						initAngleX = 0;
						minAngleX = -30;
						maxAngleX = 30;
						initAngleY = 0;
						minAngleY = -100;
						maxAngleY = 100;
						initfov = "0.33333/ 4";
						minFov = 0.117;
						maxFov = 0.117;
						visionMode[] = {"Normal","Ti"};
						thermalMode[] = {4};
						gunnerOpticsModel = "\rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\gunnerOptics_M2A2";
						gunnerOpticsEffect[] = {};
					};
					class Narrow: Wide
					{
						gunnerOpticsModel = "\rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\gunnerOptics_M2A2_2";
						initfov = "0.33333/ 12";
						minFov = 0.039;
						maxFov = 0.039;
					};
				};
				class HitPoints
				{
					class HitTurret
					{
						armor = 0.5;
						material = -1;
						name = "vez";
						visual = "vez";
						passThrough = 0;
						minimalHit = 0.14;
						explosionShielding = 0.001;
						radius = 0.08;
					};
					class HitGun
					{
						armor = 1.2;
						material = -1;
						name = "zbran";
						visual = "";
						passThrough = 0;
						minimalHit = 0.13;
						explosionShielding = 0.001;
						radius = 0.1;
					};
				};
			};
		};
		class AnimationSources : AnimationSources
		{
			class muzzle_rot_cannon {source = "ammorandom"; weapon = "cannon_120mm";};
			class muzzle_rot_coax {source = "ammorandom"; weapon = "LMG_M200";};
			class muzzle_rot_HMG {source = "ammorandom"; weapon = "HMG_NSVT";};
			class recoil_source {source = "reload"; weapon = "cannon_120mm";};
		};
		class Damage {
			tex[] = {};
			mat[] = {
				"A3\Armor_F_Gamma\MBT_02\Data\MBT_02.rvmat",
				"A3\Armor_F_Gamma\MBT_02\Data\MBT_02_damage.rvmat",
				"A3\Armor_F_Gamma\MBT_02\Data\MBT_02_destruct.rvmat",

				"A3\Armor_F_Gamma\MBT_02\Data\MBT_02_body.rvmat",
				"A3\Armor_F_Gamma\MBT_02\Data\MBT_02_body_damage.rvmat",
				"A3\Armor_F_Gamma\MBT_02\Data\MBT_02_body_destruct.rvmat",

				"A3\Armor_F_Gamma\MBT_02\Data\MBT_02_tracks.rvmat",
				"A3\Armor_F_Gamma\MBT_02\Data\MBT_02_tracks_damage.rvmat",
				"A3\Armor_F_Gamma\MBT_02\Data\MBT_02_tracks_destruct.rvmat",

				"A3\Armor_F_Gamma\MBT_02\Data\MBT_02_turret.rvmat",
				"A3\Armor_F_Gamma\MBT_02\Data\MBT_02_turret_damage.rvmat",
				"A3\Armor_F_Gamma\MBT_02\Data\MBT_02_turret_destruct.rvmat",

				"A3\Armor_F_Gamma\MBT_01\Data\MBT_01_scorcher.rvmat",
				"A3\Armor_F_Gamma\MBT_01\Data\MBT_01_scorcher_damage.rvmat",
				"A3\Armor_F_Gamma\MBT_01\Data\MBT_01_scorcher_destruct.rvmat"
			};
		};
		class RenderTargets
		{
			class BackUpCam
			{
				renderTarget = "rendertarget0";
				class CameraView0
				{
					pointPosition = "pip0_pos";
					pointDirection = "pip0_dir";
					renderQuality = 2;
					renderVisionMode = 0;
					fov = 1.0;
				};
			};
			class DriverCam
			{
				renderTarget = "rendertarget1";
				class CameraView1
				{
					pointPosition = "pip1_pos";
					pointDirection = "pip1_dir";
					renderQuality = 2;
					renderVisionMode = 0;
					fov = 0.8;
				};
			}; 
			class MGCam
			{
				renderTarget = "rendertarget2";
				class CameraView2
				{
					pointPosition = "pip2_pos";
					pointDirection = "pip2_dir";
					renderQuality = 2;
					renderVisionMode = 0;
					fov = 0.2;
				};
			};
			class CannonCam
			{
				renderTarget = "rendertarget3";
				class GunnerMainView
				{
					pointPosition = "pip3_pos";
					pointDirection = "pip3_dir";
					renderQuality = 2;
					renderVisionMode = 0;
					fov = 0.2;
				};
			};
			class CommanderCam
			{
				renderTarget = "rendertarget4";
				class CommanderView
				{
					pointPosition = "pip4_pos";
					pointDirection = "pip4_dir";
					renderQuality = 2;
					renderVisionMode = 0;
					fov = 1.0;
				};
			};
			class GunnerClone
			{
				renderTarget = "rendertarget5";
				class MainView
				{
					pointPosition = "pip3_pos";
					pointDirection = "pip3_dir";
					renderQuality = 2;
					renderVisionMode = 0;
					fov = 1.5;
				};
			};
		};
		class Exhausts
		{
			class Exhaust1
			{
				position = "exhaust1";
				direction = "exhaust1_end";
				effect = "ExhaustEffectTankSide";
			};
			class Exhaust2
			{
				position = "exhaust2";
				direction = "exhaust2_end";
				effect = "ExhaustEffectTankSide";
			};
		};
		class Reflectors {
			class Left {
				color[] 	= {1900, 1300, 950};
				ambient[]	= {5,5,5};
				position 	= "Light_L";
				direction 	= "Light_L_end";
				hitpoint 	= "Light_L";
				selection	= "Light_L";
				size 		= 1;
				innerAngle 	= 100;
				outerAngle 	= 179;
				coneFadeCoef = 10;
				intensity 	= 1; //17.5
				useFlare 	= 0;
				dayLight 	= 0;
				flareSize 	= 1.0;
				class Attenuation {
					start 		= 1.0;
					constant 	= 0;
					linear 		= 0;
					quadratic 	= 0.25;
					hardLimitStart = 30;
					hardLimitEnd = 60;
				};
			};
			class Right: Left {
				position 	= "Light_R";
				direction 	= "Light_R_end";
				hitpoint 	= "Light_R";
				selection 	= "Light_R";
			};
			class Right2: Right {
				position 	= "light_R_flare";
				useFlare 	= 1;
			};
			class Left2: Left {
				position 	= "light_L_flare";
				useFlare 	= 1;
			};
		};
		aggregateReflectors[] = {{"Left","Right","Left2","Right2"}};
		armorLights = 0.1;
		class ViewPilot: ViewPilot
		{
			initAngleX = 7;
			minAngleX = -15;
			maxAngleX = 25;
			initAngleY = 0;
			minAngleY = -90;
			maxAngleY = 90;
		};		
		class TransportBackpacks
		{};
		class TransportMagazines
		{};
		class TransportItems
		{};		
		class TransportWeapons
		{};		
		class EventHandlers
		{
			hitpart = "_this call SLX_XEH_EH_HitPart;_this call rhs_fnc_hitHandler";
			getIn = "_this call SLX_XEH_EH_GetIn;_this call rhs_fnc_m2_doors";
			getOut = "_this call SLX_XEH_EH_GetOut;_this call rhs_fnc_m2_doors";
		};
		
	};
	class mauler_F: mauler_Base
	{
		scope = 2;
		faction = "SixOneJTF";
		vehicleClass = "SixOneJTF_Armor";
		crew = "mauler_driver";
		author = "Scot Gilmore";
		displayName = "== Black Bear LT ==";
		side = 1;
		class Library
		{
			libTextDesc = "The Mauler Light Tank exists because much of GIJOE's purpose hinges on the ability to move quickly into a hot zone. A re-evaluation of the Rapid Deployment Force/Light Tank project (RDF/LT) caught the attention of GIJOE brass. The US DoD had long decided not to renew the tank's development contract in an official capacity, but it was far enough along in development to be picked up for ''other uses''. After another five years of development, the RDF/LT would start to roll off top secret assembly lines, and became the Mauler LT. The original RDF/LT had accounted for future planning since its inception, and the Mauler features technological upgrades that had been expensive and unreliable during the project's early phases - such as digital displays for all crew, automatic fire extinguisher systems, and 3D holographic projection display to name a few.";
		};
		model = "vhx_armor\gijoe_mauler\mauler1.p3d";
		armor = 400;
		class Damage
		{
			tex[] = {};
			mat[] = {"rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\data\brad_UV1.rvmat","rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\data\brad_UV1_damage.rvmat","rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\data\brad_UV1_destruct.rvmat","rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\data\brad_UV2.rvmat","rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\data\brad_UV2_damage.rvmat","rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\data\brad_UV2_destruct.rvmat","rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\data\brad_UV2_ERAon.rvmat","rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\data\brad_UV2_ERAon_damage.rvmat","rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\data\brad_UV2_ERAon_destruct.rvmat","rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\data\M2_tracks.rvmat","rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\data\M2_tracks_damage.rvmat","rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\data\M2_tracks_destruct.rvmat","a3\data_f\default.rvmat","a3\data_f\default.rvmat","a3\data_f\default_destruct.rvmat"};
		};
		class AnimationSources
		{
			class recoil_source
			{
				source = "reload";
				weapon = "RHS_weap_M242BC";
			};
			class muzzle_hide_hmg: recoil_source{};
			class muzzle_rot_hmg: recoil_source
			{
				source = "ammorandom";
			};
			class muzzle_rot_hmg2: muzzle_rot_hmg
			{
				weapon = "rhs_weap_m240veh";
			};
			class HatchC
			{
				source = "door";
				animPeriod = 0.8;
			};
			class HatchG: HatchC{};
			class HatchDriver: HatchC{};
			class ramp
			{
				source = "door";
				animPeriod = 5;
				initPhase = 0;
				sound = "ServoRampSound_2";
				soundPosition = "ramp_axis";
			};
		};
	};
};

 


...and my model.cfg here:

Spoiler

class cfgSkeletons
{
	class blackbear_Skeleton
	{
		skeletonInherit = "";
		isDiscrete = 0;
		SkeletonBones[]=
		{
			"kolL1"	,"",
			"kolL2","",
			"kolL3","",
			"kolP1","",
			"kolP2","",
			"kolP3","",
			"podkoloL1","",
			"podkoloL2","",
			"podkoloL3","",
			"podkoloL4","",
			"podkoloL5","",
			"podkoloL6","",
			"podkoloL7","",
			"podkoloL8","",
			"podkoloL9","",
			"podkoloP1","",
			"podkoloP2","",
			"podkoloP3","",
			"podkoloP4","",
			"podkoloP5","",
			"podkoloP6","",
			"podkoloP7","",
			"podkoloP8","",
			"podkoloP9","",
			"koloL1","podkoloL1",
			"koloL2","podkoloL2",
			"koloL3","podkoloL3",
			"koloL4","podkoloL4",
			"koloL5","podkoloL5",
			"koloL6","podkoloL6",
			"koloP1","podkoloP1",
			"koloP2","podkoloP2",
			"koloP3","podkoloP3",
			"koloP4","podkoloP4",
			"koloP5","podkoloP5",
			"koloP6","podkoloP6",
			"podkoloL1_hide","podkoloL1",
			"podkoloL2_hide","podkoloL2",
			"podkoloL3_hide","podkoloL3",
			"podkoloL4_hide","podkoloL4",
			"podkoloL5_hide","podkoloL5",
			"podkoloL6_hide","podkoloL6",
			"podkoloP1_hide","podkoloP1",
			"podkoloP2_hide","podkoloP2",
			"podkoloP3_hide","podkoloP3",
			"podkoloP4_hide","podkoloP4",
			"podkoloP5_hide","podkoloP5",
			"podkoloP6_hide","podkoloP6",
			"i_speed"	,"",
			"i_speed2"	,"",
			"i_rpm"	,"",
			"i_radar"	,"",
			"i_compass"	,"",
			"damagehide"	,"",
			"mainturret"	,"",
			"maingun"	,"mainturret",
			"stick_cmdr" ,"mainturret",
			"kb_cmdr"	,"mainturret",
			"hatch_lock"	,"mainturret",
			"commander_turret"	,"mainturret",
			"scopeCMDR"	,"commander_turret",
			"scopeGNR"	,"mainturret",
			"scopeGdoorL"	,"mainturret",
			"scopeGdoorR"	,"mainturret",
			"gunFan"	,"maingun",
			"gunrecoil"	,"maingun",
			"muzzleflash"	,"gunrecoil",
			"muzzlehmg"	,"gunrecoil",
			"hatch_cmdr"	,"mainturret",
			"hatch_driver"	,"",
			"hatch_gunner"	,"",
			"scopeDriver"	,"",
			"podkoloL1_solid"	,"",
			"podkoloP1_solid"	,"",
			"turbine1"	,"",
			"turbine2"	,"",
			"i_mph"	,"",
			"i_fuel"	,"",
			"i_rpm1"	,"",
			"i_rpm2"	,"",
			"i_rpm3"	,""
		};
	};
};
class CfgModels
{
	class Default
	{
		sections[] = {};
		sectionsInherit="";
		skeletonName = "";
	};
	class mauler1:Default
	{
		skeletonName="blackbear_Skeleton";
		sections[]=
		{
			"zbytek",
			"vez",
			"pas_p",
			"pas_l",
			"motor",
			"l svetlo",
			"p svetlo",
			"zbran",
			"podsvit pristroju",
			"camo2",
			"camo1",
			"pasoffsetL",
			"pasoffsetP",
			"brzdove svetlo",
			"zadni svetlo",
			"zasleh2"
		};

		class Animations
		{
			class damageHide
			{
				type="hide";
				source="damage";
				selection="damagehide";
//				sourceAddress = clamp;// (default)
				minValue = 0.0;//rad 0.0
				maxValue = 1.0;//rad 57.29578
				hideValue = 1.0;
//				unHideValue = -1.0;//(default)
				animPeriod = 0.0;
				initPhase = 0.0;
			};
			class Wheel_kolL1 {
				type="rotationX";
				source="wheelL";
				selection="kolL1";
				axis="";
				memory="false";
				animPeriod=0;
				minvalue=0.5;
				maxvalue = 1.0;
				angle0=0;
				angle1="rad -360";
				sourceAddress="loop";
			};
			class Wheel_kolL2: Wheel_kolL1 {
				selection="kolL2";
			};
			class Wheel_kolL3: Wheel_kolL1 {
				selection="kolL3";
			};
			
			class Wheel_koloL1: Wheel_kolL1 {
				selection="koloL1";
			};
			class Wheel_koloL2: Wheel_koloL1 {
				selection="koloL2";
			};
			class Wheel_koloL3: Wheel_koloL1 {
				selection="koloL3";
			};
			class Wheel_koloL4: Wheel_koloL1 {
				selection="koloL4";
			};
			class Wheel_koloL5: Wheel_koloL1 {
				selection="koloL5";
			};
			class Wheel_koloL6: Wheel_koloL1 {
				selection="koloL6";
			};
			class Wheel_koloL7: Wheel_koloL1 {
				selection="koloL7";
			};
			class Wheel_koloL8: Wheel_koloL1 {
				selection="koloL8";
			};
			
			class Wheel_kolP1: Wheel_kolL1 {
				source="wheelR";
				selection="kolP1";
			};
			class Wheel_kolP2: Wheel_kolP1 {
				selection="kolP2";
			};
			class Wheel_kolP3: Wheel_kolP1 {
				selection="kolP3";
			};
			
			class Wheel_koloP1: Wheel_koloL1 {
				source="wheelR";
				selection="koloP1";
			};
			class Wheel_koloP2: Wheel_koloP1 {
				selection="koloP2";
			};
			class Wheel_koloP3: Wheel_koloP1 {
				selection="koloP3";
			};
			class Wheel_koloP4: Wheel_koloP1 {
				selection="koloP4";
			};
			class Wheel_koloP5: Wheel_koloP1 {
				selection="koloP5";
			};
			class Wheel_koloP6: Wheel_koloP1 {
				selection="koloP6";
			};
			class Wheel_koloP7: Wheel_koloP1 {
				selection="koloP7";
			};
			class Wheel_koloP8: Wheel_koloP1 {
				selection="koloP8";
			};
			
			class Wheel_podkoloL1 {
				type="translation";
				source="damper";
				selection="podkoloL1";
				axis="Basic_Damper_Destruct_Axis";
				memory="true";
				animPeriod=0;
				minValue="0";
				maxValue="0.83";
				offset0= "0.18";
				offset1= "-0.15";
			};
			class Wheel_podkoloL2: Wheel_podkoloL1 {
				selection="podkoloL2";
				axis="Basic_Damper_Destruct_Axis";
			};
			class Wheel_podkoloL3: Wheel_podkoloL1 {
				selection="podkoloL3";
				axis="Basic_Damper_Destruct_Axis";
			};
			class Wheel_podkoloL4: Wheel_podkoloL1 {
				selection="podkoloL4";
				axis="Basic_Damper_Destruct_Axis";
			};
			class Wheel_podkoloL5: Wheel_podkoloL1 {
				selection="podkoloL5";
				axis="Basic_Damper_Destruct_Axis";
			};
			class Wheel_podkoloL6: Wheel_podkoloL1 {
				selection="podkoloL6";
				axis="Basic_Damper_Destruct_Axis";
			};
			
			
			class Wheel_podkoloP1 {
				type="translation";
				source="damper";
				selection="podkoloP1";
				axis="Basic_Damper_Destruct_Axis";
				memory="true";
				animPeriod=0;
				minValue="0";
				maxValue="0.83";
				offset0= "0.18";
				offset1= "-0.15";
			};
			class Wheel_podkoloP2: Wheel_podkoloP1 {
				selection="podkoloP2";
				axis="Basic_Damper_Destruct_Axis";
			};
			class Wheel_podkoloP3: Wheel_podkoloP1 {
				selection="podkoloP3";
				axis="Basic_Damper_Destruct_Axis";
			};
			class Wheel_podkoloP4: Wheel_podkoloP1 {
				selection="podkoloP4";
				axis="Basic_Damper_Destruct_Axis";
			};
			class Wheel_podkoloP5: Wheel_podkoloP1 {
				selection="podkoloP5";
				axis="Basic_Damper_Destruct_Axis";
			};
			class Wheel_podkoloP6: Wheel_podkoloP1 {
				selection="podkoloP6";
				axis="Basic_Damper_Destruct_Axis";
			};
			
			class podkoloL1_hide_damage: damageHide {
				selection="podkoloL1_hide";
			};
			class podkoloL2_hide_damage: damageHide {
				selection="podkoloL2_hide";
			};
			class podkoloL3_hide_damage: damageHide {
				selection="podkoloL3_hide";
			};
			class podkoloL4_hide_damage: damageHide {
				selection="podkoloL4_hide";
			};
			class podkoloL5_hide_damage: damageHide {
				selection="podkoloL5_hide";
			};
			class podkoloL6_hide_damage: damageHide {
				selection="podkoloL6_hide";
			};
			class podkoloP1_hide_damage: damageHide {
				selection="podkoloP1_hide";
			};
			class podkoloP2_hide_damage: damageHide {
				selection="podkoloP2_hide";
			};
			class podkoloP3_hide_damage: damageHide {
				selection="podkoloP3_hide";
			};
			class podkoloP4_hide_damage: damageHide {
				selection="podkoloP4_hide";
			};
			class podkoloP5_hide_damage: damageHide {
				selection="podkoloP5_hide";
			};
			class podkoloP6_hide_damage: damageHide {
				selection="podkoloP6_hide";
			};
			
			class damageVez
			{
				type="hide";
				source="damage";
				selection="damagevez";
//				sourceAddress = clamp;// (default)
				minValue = 0.0;//rad 0.0
				maxValue = 1.0;//rad 57.29578
				hideValue = 1.0;
//				unHideValue = -1.0;//(default)
				animPeriod = 0.0;
				initPhase = 0.0;
			};
			class IndicatorSpeed
			{
				type="rotation";
				source="speed";
				selection="mph";
				axis="mph_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = 0.0;//rad 0.0
				maxValue = 16.67;//rad 955.12067
				angle0 = 0.0;//rad 0.0;
				angle1 = 5.061455;//rad 290.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class RPM1
			{
				type="rotation";
				source="rpm";
				selection="rpm1";
				axis="rpm1_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = 0.0;//rad 0.0
				maxValue = 3.0;//rad 171.88734
				angle0 = 0.0;//rad 0.0;
				angle1 = 1.5707964;//rad 90.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class RPM2
			{
				type="rotation";
				source="rpm";
				selection="rpm2";
				axis="rpm2_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = 0.0;//rad 0.0
				maxValue = 2.0;//rad 114.59156
				angle0 = 0.0;//rad 0.0;
				angle1 = 1.5707964;//rad 90.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class RPM3
			{
				type="rotation";
				source="rpm";
				selection="rpm3";
				axis="rpm3_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = 0.0;//rad 0.0
				maxValue = 3.0;//rad 171.88734
				angle0 = 0.0;//rad 0.0;
				angle1 = 1.5707964;//rad 90.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class IndicatorFuel
			{
				type="rotation";
				source="fuel";
				selection="fuel";
				axis="fuel_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = 0.0;//rad 0.0
				maxValue = 1.0;//rad 57.29578
				angle0 = 0.0;//rad 0.0;
				angle1 = 1.5707964;//rad 90.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class hatch_driver_1
			{
				type="translation";
				source="hatchDriver";
				selection="hatch_driver";
				axis="hatch_driver_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = 0.0;//rad 0.0
				maxValue = 0.05;//rad 57.29578
				offset0 = 0.0;//
				offset1 = 0.215;//
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class hatch_driver_2
			{
				type="rotation";
				source="hatchDriver";
				selection="hatch_driver";
				axis="hatch_driver_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = 0.20001;//rad 0.0
				maxValue = 1.0;//rad 57.29578
				angle0 = 0.0;//
				angle1 = -1.623;// rad -93
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class Hatch_Gunner_1
			{
				type="translation";
				source="hatchGunner";
				selection="hatch_gunner";
				axis="hatch_gunner_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = 0.0;//rad 0.0
				maxValue = 0.05;//rad 57.29578
				offset0 = 0.0;//
				offset1 = 0.215;//
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class Hatch_Gunner_2
			{
				type="rotation";
				source="hatchGunner";
				selection="hatch_gunner";
				axis="hatch_gunner_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = 0.20001;//rad 0.0
				maxValue = 1.0;//rad 57.29578
				angle0 = 0.0;//
				angle1 = 1.623;// rad 93
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class HatchCommander
			{
				type="rotation";
				source="hatchCommander";
				selection="hatch_cmdr";
				axis="hatch_cmdr_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = 0.0;//rad 0.0
				maxValue = 1.0;//rad 57.29578
				angle0 = 0.0;//rad 75.0;
				angle1 = -3.264;//rad -187.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class MainTurret
			{
				type="rotationY";
				source="mainTurret";
				selection="mainturret";
				axis="mainturret_axis";//*probably*
				sourceAddress = loop;
				minValue = -6.2831855;//rad -360.0
				maxValue = 6.2831855;//rad 360.0
				angle0 = -6.2831855;//rad -360.0;
				angle1 = 6.2831855;//rad 360.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class MainGun
			{
				type="rotationX";
				source="mainGun";
				selection="maingun";
				axis="maingun_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = -6.2831855;//rad -360.0
				maxValue = 6.2831855;//rad 360.0
				angle0 = -6.2831855;//rad -360.0;
				angle1 = 6.2831855;//rad 360.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class GunnerScope
			{
				type="rotationX";
				source="mainGun";
				selection="scopeGNR";
				axis="scopeGNR_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = -6.2831855;//rad -360.0
				maxValue = 6.2831855;//rad 360.0
				angle0 = -6.2831855;//rad -360.0;
				angle1 = 6.2831855;//rad 360.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class ObsGun
			{
				type="rotationX";
				source="obsGun";
				selection="maingunvelitele";
				axis="maingunvelitele_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = -6.2831855;//rad -360.0
				maxValue = 6.2831855;//rad 360.0
				angle0 = -6.2831855;//rad -360.0;
				angle1 = 6.2831855;//rad 360.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class CommanderScope
			{
				type="rotationX";
				source="obsGun";
				selection="scopeCMDR";
				axis="scopeCMDR_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = -6.2831855;//rad -360.0
				maxValue = 6.2831855;//rad 360.0
				angle0 = ‪-6.2831855;//rad -360.0
				angle1 = 6.2831855;//rad 360.0
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class recoilL_BEGIN
			{
				type="translation";
				source="recoil_source";
				selection="gunrecoilL";
				axis="gunrecoilL_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = 0.5;//rad 28.64789
				maxValue = 0.8;//rad 45.836624
				offset0 = 0.0;
				offset1 = 0.2;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class recoilL_END
			{
				type="translation";
				source="recoil_source";
				selection="gunrecoilL";
				axis="gunrecoilL_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = 0.85;//rad 48.701412
				maxValue = 1.0;//rad 57.29578
				offset0 = 0.0;
				offset1 = -0.2;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class recoilR_BEGIN
			{
				type="translation";
				source="recoil_source";
				selection="gunrecoilR";
				axis="gunrecoilR_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = 0.5;//rad 28.64789
				maxValue = 0.8;//rad 45.836624
				offset0 = 0.0;
				offset1 = 0.2;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class recoilR_END
			{
				type="translation";
				source="recoil_source";
				selection="gunrecoilR";
				axis="gunrecoilR_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = 0.85;//rad 48.701412
				maxValue = 1.0;//rad 57.29578
				offset0 = 0.0;
				offset1 = -0.2;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class ObsTurret
			{
				type="rotationY";
				source="obsTurret";
				selection="commander_turret";
				axis="commander_turret_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = -6.2831855;//rad -360.0
				maxValue = 6.2831855;//rad 360.0
				angle0 = -6.2831855;//rad -360.0;
				angle1 = 6.2831855;//rad 360.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class FLIRTurret
			{
				type="rotationY";
				source="obsTurret";
				selection="flir_turret";
				axis="flir_turret_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = -6.2831855;//rad -360.0
				maxValue = 6.2831855;//rad 360.0
				angle0 = -6.2831855;//rad -360.0;
				angle1 = 6.2831855;//rad 360.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class FLIRGun
			{
				type="rotationX";
				source="obsGun";
				selection="flir_gun";
				axis="flir_gun_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = -6.2831855;//rad -360.0
				maxValue = 6.2831855;//rad 360.0
				angle0 = -6.2831855;//rad -360.0;
				angle1 = 6.2831855;//rad 360.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class podkoloL1_solid_hide_damage
			{
				type="hide";
				source="damage";
				selection="podkoloL1_solid";
//				sourceAddress = clamp;// (default)
				minValue = 0.0;//rad 0.0
				maxValue = 1.0;//rad 57.29578
				hideValue = 1.0;
//				unHideValue = -1.0;//(default)
				animPeriod = 0.0;
				initPhase = 0.0;
			};
			class podkoloP1_solid_hide_damage
			{
				type="hide";
				source="damage";
				selection="podkoloP1_solid";
//				sourceAddress = clamp;// (default)
				minValue = 0.0;//rad 0.0
				maxValue = 1.0;//rad 57.29578
				hideValue = 1.0;
//				unHideValue = -1.0;//(default)
				animPeriod = 0.0;
				initPhase = 0.0;
			};
			class hmg_muzzle_flash
			{
				type="hide";
				source="muzzle_hide_hmg";
				selection="muzzleflash";
//				sourceAddress = clamp;// (default)
				minValue = 0.0;//rad 0.0
				maxValue = 1.0;//rad 57.29578
				hideValue = 0.0;
				unHideValue = 0.93;
				animPeriod = 0.0;
				initPhase = 0.0;
			};
			class hmg_muzzleFlashROT
			{
				type="rotationZ";
				source="muzzle_rot_hmg";
				selection="muzzleflash";
				axis="muzzleflash_axis";//*probably*
				sourceAddress = loop;
				minValue = 0.0;//rad 0.0
				maxValue = 4.0;//rad 229.18312
				angle0 = 0.0;//rad 0.0;
				angle1 = 6.2831855;//rad 360.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class zaslehROT_HMG2
			{
				type="rotationZ";
				source="muzzle_rot_HMG2";
				selection="muzzlehmg";
				axis="muzzlehmg_axis";//*probably*
				sourceAddress = loop;
				minValue = 0.0;//rad 0.0
				maxValue = 4.0;//rad 229.18312
				angle0 = 0.0;//rad 0.0;
				angle1 = 6.2831855;//rad 360.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
		};//Animations
	};//modelclass
};//CfgModels

 


 

 

Share this post


Link to post
Share on other sites
On 10/13/2018 at 4:31 PM, scotg said:

Aside from the turret configs, I also mentioned the need for a hidden AI driver to make it appear the commander is the only person in the tank. This was an old trick, and kind of a janky way to fake one-man tanks with turret, such as the Varmint. When you exit the tank, the AI driver has the tendency to move around and break the illusion. Today, I just discovered this:


		hasDriver = -1;

After initial testing, this seems to be exactly the solution this tank needed. It eliminates the driver and allows the top commander to drive the tank and use his turret. In a 1-man tank, that means the player has full control without running the risk of the invisible AI driving off when you get out. THANK YOU SO MUCH BIS DEVS!!! I'm not giving you guys my first child or anything, but much love to you for this simply delicious line of code!

Now... I'mma try it on my 1-man helicopter. I hope it works!
 



Further updates on the first post video:
Varmint (Small Tank)
- Speed is now adjusted. The problem was coming from having the wheel boundaries too much off the ground, and the solution was to lower the memory points about 2 cm. New problems have arisen from having too much stopping power and a super fast reverse speed. Tweaking certain values to ease the jerking makes it go faster in a curve than it can in a straight line. Tweaking it another way makes it do the endless neutral steer thing. I'm having a look at the Nyx' code to see how it handles, since it's about the same size and weight, and has the same number of wheels. More to come on that.
- Commander position not appearing in 3rd person was from a missing proxy. At some point I must have deleted it, but I never checked because I didn't have a reason to delete it on purpose. Now it's fixed.
- Head motion with turret... It's fixed. I'm not sure what it was exactly, but I just replaced a chunk of code with turret code that was working, and started tweaking it to fit the small tank's interior.

The other two tanks
- I haven't gotten to their problems, yet, but I will keep y'all updated.

We're you able to get this working with a helicopter?

Share this post


Link to post
Share on other sites

Nope. All I could figure out was how to move a searchlight connected to a turret the pilot can move, and it was done using the pilot cam feature instead of hasDriver = -1;. Binding it to the TrackIR was kind of conflicting with normal head movements in other situations (non-pilot). If light is all you need to move, then it's kind of a cool set up.

Share this post


Link to post
Share on other sites

It's been almost a year, and I'm still having problems with my tank commander position. I had taken a step away from the tanks for most of that time, but now I'm revisiting them and hoping to get this resolved once and for all. To assist in the explanation, I've once again created a video explaining the problem, so please watch:

 

 

config.cpp:

Spoiler

#define _ARMA_
#include "basicdefines_A3.hpp"
/* The Black Bear Light Tank exists because much of the 61st JTF's purpose hinges on the ability to move quickly into a hot zone. 
A re-evaluation of the Rapid Deployment Force/Light Tank project (RDF/LT) caught the attention of the unit's brass. The US 
DoD had long decided not to renew the tank's development contract in an official capacity, but it was far enough along 
in development to be picked up for "other uses". After another five years of development, the RDF/LT would start to 
roll off top secret assembly lines, and became the Black Bear LT. The original RDF/LT had accounted for future planning 
since its inception, and the Black Bear features technological upgrades that were previously expensive and unreliable during the 
project's early phases. These upgrades include digital displays for all crew, automatic fire extinguisher systems, and 3D holographic 
projection display, to name a few. */
enum 
{
	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 Mauler
	{
		addonRootClass = "A3_Armor_F_EPB";
		units[] = {"mauler_F"};
		weapons[] = {};
		requiredVersion = 0.1;
		requiredAddons[] = {"A3_Armor_F_EPB"};
	};
};
 class CfgMovesBasic
{
	class Default;
	class DefaultDie;
	class ManActions
	{
		mauler_Driver = "mauler_driver";
		mauler_Commander = "mauler_commander";
		mauler_Gunner = "mauler_gunner";
	};
}; 
class CfgMovesMaleSdr: CfgMovesBasic
{
	class States
	{
		class Crew;
		class mauler_driver: Crew
		{
			file = "vhx_armor\gijoe_mauler\anims\mauler_driver";
			actions = "CargoActions";
			aiming = "aimingNo";
			aimingBody = "aimingNo";
			//legs = "legsNo";
			//head = "headNo";
			disableWeapons = 1;
			interpolationRestart = 1;
			soundEdge[] = {0.45};
			boundingSphere = 2.5;
			canPullTrigger = 0;
			leaning = "crewShake";
			rightHandIKCurve[] = {1};
			leftHandIKCurve[] = {1};
			rightLegIKCurve[] = {1};
			leftLegIKCurve[] = {1};
			ConnectTo[] = {};
			InterpolateTo[] = {"Unconscious",0.1};
		};
		class mauler_commander: mauler_driver
		{
			file = "vhx_armor\gijoe_mauler\data\Anims\commander\mauler_commander";
			interpolateTo[] = {"mauler_KIA_Commander",1};
		};
		class mauler_commanderOut: Crew
		{
			file = "vhx_armor\gijoe_mauler\data\Anims\commanderOut\mauler_commanderOut";
			interpolateTo[] = {"mauler_KIA_CommanderOut",1};
		};
		class mauler_KIA_commanderOut: DefaultDie
		{
			file = "vhx_armor\gijoe_mauler\data\Anims\commander\mauler_commander";
			speed = 0.5;
			looped = 0;
			terminal = 1;
			soundEnabled = 0;
			connectTo[] = {"Unconscious",0.1};
		};
		class mauler_KIA_commander: mauler_KIA_CommanderOut
		{
			file = "vhx_armor\gijoe_mauler\data\Anims\commander\mauler_commander";
		};
		class mauler_KIA_gunner: mauler_KIA_CommanderOut
		{
			file = "vhx_armor\gijoe_mauler\data\Anims\mauler_gunner";
		};
		//---------------------------------------------------------
		class mauler_Gunner: mauler_driver
		{
			file = "vhx_armor\gijoe_mauler\data\Anims\mauler_gunner";
			interpolateTo[] = {"mauler_KIA_gunner",1};
		};
		class mauler_GunnerOut: Crew
		{
			file = "vhx_armor\gijoe_mauler\data\Anims\mauler_gunner";
			interpolateTo[] = {"mauler_KIA_gunnerOut",1};
		};
		class mauler_KIA_GunnerOut: mauler_KIA_CommanderOut
		{
			file = "vhx_armor\gijoe_mauler\data\Anims\mauler_KIA_gunner";
		};
	};
};

class DefaultEventhandlers;
class WeaponFireGun;
class WeaponCloudsGun;
class WeaponFireMGun;
class WeaponCloudsMGun;
class RCWSOptics;
class Optics_Armored;
class Optics_Commander_01: Optics_Armored
{
	class Wide;
	class Medium;
	class Narrow;
};
class Optics_Gunner_MBT_02: Optics_Armored
{
	class Wide;
	class Medium;
	class Narrow;
};
class CfgVehicles
{
	class LandVehicle;
	class Tank: LandVehicle
	{
		class NewTurret;
		class Sounds;
		class HitPoints;
	};
	class Tank_F: Tank
	{
		class Turrets
		{
			class MainTurret: NewTurret
			{
				class ViewGunner;
				class Turrets
				{
					class CommanderOptics;
				};
			};
		};
		class AnimationSources;
		class ViewPilot;
		class ViewOptics;
		class ViewCargo;
		class HeadLimits;
		class HitPoints: HitPoints
		{
			class HitHull;
			class HitFuel;
			class HitEngine;
			class HitLTrack;
			class HitRTrack;
		};
		class Sounds: Sounds
		{
			class Engine;
			class Movement;
		};
	};
	class mauler_Base: Tank_F
	{
		author = "Scot Gilmore";
		model = "vhx_armor\gijoe_mauler\mauler1.p3d";
		picture = "vhx_armor\gijoe_mauler\data\UI\pic_blackbear_ca.paa";
		Icon = "vhx_armor\gijoe_mauler\data\UI\map_blackbear_ca.paa";
		scope = 0;
		MapSize = 7;
		//features = "Randomization: No<br />Camo selections: 2 - turret, hull<br />Script door sources: None	<br />Script animations: HideTurret	<br />Executed scripts: None	<br />Firing from vehicles: No	<br />Slingload: No	<br />Cargo proxy indexes: 1 to 7";
		textSingular = "Black Bear";
		textPlural = "Black Bears";
		nameSound = "tank";
		vehicleClass = "61JTF_Armor";
		displayname = "Black Bear LT";
		accuracy = 0.3;
		fuelCapacity = 640;
		#include "sounds.hpp"
		insideSoundCoef = 0.9;

/// Offense/Defense		
		smokeLauncherGrenadeCount = 6; //Number of smoke shells launched at once
		smokeLauncherVelocity = 14; //Velocity which smoke shells are launched at
		smokeLauncherOnTurret = 1; //0 if smoke launchers are on hull, 1 if on turret
		smokeLauncherAngle = 120; //Angle within which smoke grenades are launched (actual spacing may end up smaller so use slighty higher number)
		threat[] = {0.9,0.9,0.4};
		
/// Strength and Durability		
		cost=1500000;
		damageResistance = 0.02;
		armor = 260;
		armorStructural = 280;
		category = "Armored";
		camouflage = 5;
		destrType = "DestructDefault";
		
/// Sensor Stuff
		radarType = 1;
		LockDetectionSystem = 4;
		IncommingMisslieDetectionSystem = 16;
		irscanrangemax = 3000;
		irscanrangemin = 500;
		irtarget = 1;
		irScanGround = 0;
		laserscanner = 0;
		
/// Fording
		maxFordingDepth = 1.5;
		waterResistance = 0;
		waterDamageEngine = 0.2;
		waterLeakiness = 10;
		
///Crew Stuff
		driverAction = "mauler_driver";
		driverInAction = "mauler_driver";
		//crew = "mauler_driver";
		viewCargoShadow = 1;
		viewCargoShadowDiff = 0.05;
		viewCargoShadowAmb = 0.5;
		transportSoldier = 0;
		getInAction = "GetInLow";
		getOutAction = "GetOutLow";
		cargoGetInAction[] = {"GetInHigh"};
		cargoGetOutAction[] = {"GetOutHigh"};
		forceHideDriver = 0;
		viewDriverInExternal = 1;
		DriverForceOptics = 0;
		driverDoor = "hatchDriver";
		crewVulnerable = false;
		crewExplosionProtection = 0.9999;
		
///Powertrain
		simulation = "tankX";
		normalSpeedForwardCoef = 0.7;
		slowSpeedForwardCoef = 0.45;
		/*
		torqueCurve[] = 
		{
			{"(0/8000)","(2300/2300)"},
			{"(1143/8000)","(2300/2300)"},
			{"(2286/8000)","(2300/2300)"},
			{"(3429/8000)","(2300/2300)"},
			{"(4572/8000)","(2300/2300)"},
			{"(5715/8000)","(2300/2300)"},
			{"(6858/8000)","(2300/2300)"},
			{"(8000/8000)","(2300/2300)"}
		};
		*/
		torqueCurve[] = 
		{
			{0.363636,0.68},
			{0.454545,0.8},
			{0.545455,0.95},
			{0.606061,0.98},
			{0.666667,1},
			{0.727273,0.94},
			{0.848485,0.8},
			{1,0.64}
		};
		
		maxOmega = 272.27;
		engineMOI = 9.0;
		enginePower = 1230;
		peakTorque = 1660;
		idleRPM = 850;
		redRPM = 2600;
		thrustDelay = 0.2;
		engineLosses = 25;
		switchTime = 0.1;
		clutchStrength = 105.0;
		changeGearMinEffectivity[] = {0.95,0.0,0.85};
		transmissionLosses = 15;
		latency = 1.0;
		//tankTurnForce = 1.28e+006;
		tankTurnForce = 210000;
		tankTurnForceAngMinSpd = 0.6;
		tankTurnForceAngSpd = 0.91;
		accelAidForceCoef = 1.0;
		accelAidForceYOffset = -2.0;
		accelAidForceSpd = 1.6;
		
		tracksSpeed = 1.375;
		maxSpeed = 95;
		brakeIdleSpeed = 1.78;
		
		class complexGearbox
		{
			///GearboxRatios[] = {"R1",-2.0,"N",0,"D1",1.0};
			///GearboxRatios[] = {"R1",-2.235,"N",0,"CD0","2*(0.75^(-10))","CD1","2*(0.75^(-9))","CD2","2*(0.75^(-8))","CD3","2*(0.75^(-7))","CD4","2*(0.75^(-6))","CD5","2*(0.75^(-5))","CD6","2*(0.75^(-4))","CD7","2*(0.75^(-3))","CD8","2*(0.75^(-2))","CD9","2*(0.75^(-1))","D1","2*(0.75^0)","D2","2*(0.75^1)","D3","2*(0.75^2)","D4","2*(0.75^3)","D5","2*(0.75^4)"};
			GearboxRatios[] = {"R1",-3.5,"N",0,"D1",4.7,"D2",2.9,"D3",1.9,"D4",1.05};
			TransmissionRatios[] = {"High",12};
			gearBoxMode = "auto";
			moveOffGear = 1;
			driveString = "D";
			neutralString = "N";
			reverseString = "R";
		};
		numberPhysicalWheels = 12;
		
		class Wheels
		{
			class L2
			{
				//wheelBrakeFrictionCoef = 0.01;
				boneName = "wheel_podkoloL1";
				center = "wheel_1_2_axis";
				boundary = "wheel_1_2_bound";
				//damping = 65.0;
				steering = 0;
				width = 0.5;
				side = "left";
				mass = 130;
				MOI = 30;
				latStiffX = 15;
				latStiffY = 180;
				longitudinalStiffnessPerUnitGravity = 200000; //100000;
				maxBrakeTorque = 4520;
				sprungMass = 1520; // mass/12
				springStrength = 198000; // 50668.75; // sprungMass*5^2 (try 5^2 up to 10^2, then tweak)
				springDamperRate = 14811; // 2026.75; // sDR = dampingRate X 2 X sqrt(springStrength X sprungMass)
				dampingRate = 1080; // ~0.1 to ~0.8;
				dampingRateInAir = 4780;
				dampingRateDamaged = 10;
				dampingRateDestroyed = 10000;
				maxDroop = 0.15;
				maxCompression = 0.15;
				///frictionVsSlipGraph[] = {{0.0,1.5},{0.5,1.5},{1,1.5}};
			};
			class L3: L2
			{
				boneName = "wheel_podkolol2";
				center = "wheel_1_3_axis";
				boundary = "wheel_1_3_bound";
			};
			class L4: L2
			{
				boneName = "wheel_podkolol3";
				center = "wheel_1_4_axis";
				boundary = "wheel_1_4_bound";
			};
			class L5: L2
			{
				boneName = "wheel_podkolol4";
				center = "wheel_1_5_axis";
				boundary = "wheel_1_5_bound";
			};
			class L6: L2
			{
				boneName = "wheel_podkolol5";
				center = "wheel_1_6_axis";
				boundary = "wheel_1_6_bound";
			};
			class L7: L2
			{
				boneName = "wheel_podkolol6";
				center = "wheel_1_7_axis";
				boundary = "wheel_1_7_bound";
			};
			class L1: L2
			{
				boneName = "";
				center = "wheel_1_1_axis";
				boundary = "wheel_1_1_bound";
				sprungMass = 1500.0;
				springStrength = 37500;
				springDamperRate = 7500;
				maxDroop = 0;
				maxCompression = 0;
			};
			class L9: L2
			{
				boneName = "wheel_podkoloL9";
				center = "wheel_1_9_axis";
				boundary = "wheel_1_9_bound";
				sprungMass = 1500.0;
				springStrength = 37500;
				springDamperRate = 7500;
				maxDroop = 0;
				maxCompression = 0;
			};
			//-------------------------------------------------
			class R2: L2
			{
				boneName = "wheel_podkolop1";
				center = "wheel_2_2_axis";
				boundary = "wheel_2_2_bound";
				side = "right";
			};
			class R3: R2
			{
				boneName = "wheel_podkolop2";
				center = "wheel_2_3_axis";
				boundary = "wheel_2_3_bound";
			};
			class R4: R2
			{
				boneName = "wheel_podkolop3";
				center = "wheel_2_4_axis";
				boundary = "wheel_2_4_bound";
			};
			class R5: R2
			{
				boneName = "wheel_podkolop4";
				center = "wheel_2_5_axis";
				boundary = "wheel_2_5_bound";
			};
			class R6: R2
			{
				boneName = "wheel_podkolop5";
				center = "wheel_2_6_axis";
				boundary = "wheel_2_6_bound";
			};
			class R7: R2
			{
				boneName = "wheel_podkolop6";
				center = "wheel_2_7_axis";
				boundary = "wheel_2_7_bound";
			};
			class R1: R2
			{
				boneName = "";
				center = "wheel_2_1_axis";
				boundary = "wheel_2_1_bound";
				sprungMass = 1500.0;
				springStrength = 37500;
				springDamperRate = 7500;
				maxDroop = 0;
				maxCompression = 0;
			};
			class R9: R2
			{
				boneName = "wheel_podkoloP9";
				center = "wheel_2_9_axis";
				boundary = "wheel_2_9_bound";
				sprungMass = 1500.0;
				springStrength = 37500;
				springDamperRate = 7500;
				maxDroop = 0;
				maxCompression = 0;
			};
		};
		class HitPoints: HitPoints
		{
			class HitHull: HitHull
			{
				armor = 1.8;
				material = -1;
				armorComponent = "hit_hull";
				name = "hit_hull_point";
				visual = "zbytek";
				passThrough = 1;
				minimalHit = 0.2;
				explosionShielding = 0.2;
				radius = 0.3;
			};
			class HitEngine: HitEngine
			{
				armor = 0.4;
				material = -1;
				armorComponent = "hit_engine";
				name = "hit_engine_point";
				visual = "-";
				passThrough = 0.2;
				minimalHit = 0.2;
				explosionShielding = 0.2;
				radius = 0.3;
			};
			class HitFuel: HitFuel
			{
				armor = 0.3;
				material = -1;
				armorComponent = "hit_fuel";
				name = "hit_fuel_point";
				visual = "-";
				passThrough = 0.1;
				minimalHit = 0.1;
				explosionShielding = 0.6;
				radius = 0.3;
			};
			class HitLTrack: HitLTrack
			{
				material = -1;
				armorComponent = "hit_trackL";
				name = "hit_trackL_point";
				visual = "-";
				radius = 0.2;
				armor = -650;
				minimalHit = 0.0738462;
				explosionShielding = 0.8;
				passThrough = 0;
			};
			class HitRTrack: HitRTrack
			{
				material = -1;
				armorComponent = "hit_trackR";
				name = "hit_trackR_point";
				visual = "-";
				radius = 0.2;
				armor = -650;
				minimalHit = 0.0738462;
				explosionShielding = 0.8;
				passThrough = 0;
			};
		};
		class ViewOptics: ViewOptics
		{
			visionMode[] = {"Normal","NVG"};
			initFov = 0.25;
			minFov = 0.15;
			maxFov = 0.25;
		};
		
		class Turrets: Turrets
		{
			class MainTurret: MainTurret
			{
				
				class Turrets: Turrets
				{
					class CommanderOptics: CommanderOptics
					{
						memoryPointGunnerOutOptics = "commanderview";
						memoryPointGunnerOptics = "commanderview";
						minElev = -15;
						maxElev = 45;
						initElev = 0;
						minTurn = -360;
						maxTurn = 360;
						initTurn = 0;
						weapons[] = {"SmokeLauncher"};
						magazines[] = {"SmokeLauncherMag","SmokeLauncherMag"};
						outGunnerMayFire = 0;
						inGunnerMayFire = 1;
						memoryPointsGetInCommander = "pos commander";
						memoryPointsGetInCommander = "pos commander dir";
						gunnerAction = "mauler_commanderOut";
						gunnerInAction = "mauler_commander";
						gunnerGetInAction = "GetInHigh";
						gunnerGetOutAction = "GetOutHigh";
						gunnerOpticsModel = "\A3\weapons_f\reticle\Optics_Commander_02_F";
						gunnerOutOpticsModel = "";
						gunnerOpticsEffect[] = {};
						turretFollowFreeLook = 2;
						gunnerForceOptics = 0;
						usePip = 2;
						//animationSourceStickX = "com_turret_control_x";
						//animationSourceStickY = "com_turret_control_y";
						//gunnerRightHandAnimName = "com_turret_control";
						LODTurnedIn = 1000;
						LODTurnedOut = 1100;
						LODOpticsIn = 0;
						viewGunnerShadowAmb = 0.5;
						viewGunnerShadowDiff = 0.05;
						isPersonTurret = 1;
						//personTurretAction = "mauler_commanderOut";
						minOutElev = -10;
						maxOutElev = 25;
						initOutElev = 0;
						minOutTurn = -95;
						maxOutTurn = 95;
						initOutTurn = 0;
						class ViewGunner: ViewGunner
						{
							initAngleX = -5;
							initAngleY = 0;
							initFov = 0.9;
							minFov = 0.25;
							maxFov = 1.25;
							minAngleX = -65;
							maxAngleX = 85;
							minAngleY = -150;
							maxAngleY = 150;
							minMoveX = -0.075;
							maxMoveX = 0.075;
							minMoveY = -0.075;
							maxMoveY = 0.075;
							minMoveZ = -0.075;
							maxMoveZ = 0.1;
						};
						class ViewOptics: ViewOptics
						{
							initAngleX = 0;
							minAngleX = -30;
							maxAngleX = 30;
							initAngleY = 0;
							minAngleY = -100;
							maxAngleY = 100;
							initFov = 0.31;
							minFov = 0.034;
							maxFov = 0.31;
							visionMode[] = {"Normal","TI"};
							thermalMode[] = {2,3};
						};
						class OpticsIn: Optics_Commander_01
						{
							class Wide: Wide{};
							class Medium: Medium{};
							class Narrow: Narrow{};
						};
						turretInfoType = "RscOptics_MBT_01_commander";
						showCrewAim = 1;
						startEngine = 0;
						gunnerHasFlares = 1;
						stabilizedInAxes = 3;
						maxHorizontalRotSpeed = 1.8;
						maxVerticalRotSpeed = 1.8;
						viewGunnerInExternal = 1;
						/* 
						gun = "obsGun";
						body = "commander_turret";
						animationSourceBody = "obsTurret";
						animationSourceGun = "obsGun";
						gunnerDoor = "hatch_cmdr";
						*/
						//gunnerCompartments = "Compartment3";
						class HitPoints
						{
							class HitComTurret
							{
								armor = -250;
								material = -1;
								armorComponent = "hit_com_turret";
								name = "hit_com_turret_point";
								visual = "commander_turret";
								passThrough = 0;
								minimalHit = 0.03;
								explosionShielding = 0.4;
								radius = 0.25;
								isTurret = 1;
							};
							class HitComGun
							{
								armor = -250;
								material = -1;
								armorComponent = "hit_com_gun";
								name = "hit_com_gun_point";
								visual = "commander_gun";
								passThrough = 0;
								minimalHit = 0.03;
								explosionShielding = 0.2;
								radius = 0.2;
								isGun = 1;
							};
						};
					};
				};
				class ViewGunner: ViewGunner
				{
					initAngleX = -17;
					initAngleY = 0;
					initFov = 0.9;
					minFov = 0.25;
					maxFov = 1.25;
					minAngleX = -65;
					maxAngleX = 85;
					minAngleY = -150;
					maxAngleY = 150;
					minMoveX = 0.0;
					maxMoveX = 0.0;
					minMoveY = 0.0;
					maxMoveY = 0.0;
					minMoveZ = 0.0;
					maxMoveZ = 0.0;
				};
				memoryPointGun[] = {"usti hlavne3"};
				gunBeg = "Usti hlavne";
				gunEnd = "Konec hlavne";
				weapons[] = {"cannon_125mm","LMG_coax"};
				magazines[] = {"24Rnd_125mm_APFSDS_T_Green","24Rnd_125mm_APFSDS_T_Green","2000Rnd_762x51_Belt_Green","2000Rnd_762x51_Belt_Green"};
				soundServo[] = {"A3\sounds_f\dummysound",0.031622775,1.0,30};
				minElev = -8;
				maxElev = 62;
				initElev = 0;
				gunnerForceOptics = 0;
				gunnerAction = "mauler_gunner";
				gunnerInAction = "mauler_gunner";
				gunnerGetInAction = "GetInHigh";
				gunnerGetOutAction = "GetOutHigh";
				gunnerDoor = "hatch_gunner";
				memoryPointsGetInGunner = "pos gunner";
				memoryPointsGetInGunnerDir = "pos gunner dir";
				memoryPointGunnerOutOptics = ""; //"commanderview";
				memoryPointGunnerOptics = "pip3_pos"; //"commanderview";
				lodTurnedIn = 1100;
				LODTurnedOut = 1100;
				LODOpticsIn = 0;
				hideWeaponsGunner = 1;
				outGunnerMayFire = 1;
				inGunnerMayFire = 1;
				viewGunnerInExternal = 1;
				castGunnerShadow = 1;
				forceHideGunner = 0;
				stabilizedinaxes = 3;
				gunnerOpticsModel = "\A3\weapons_f\reticle\Optics_Gunner_02_F";
				gunnerOutOpticsModel = "";
				turretInfoType = "RscOptics_MBT_01_gunner";
				discreteDistance[] = {100,200,300,400,500,600,700,800,900,1000,1200,1400,1600,1800,2000,2400,2800};
				discreteDistanceInitIndex = 5;
				selectionFireAnim = "zasleh";
				lockWhenDriverOut = 0;
				usePip = 1;
				gunnerHasFlares = 0;
				maxhorizontalrotspeed = 1.3;
				maxverticalrotspeed = 1.3;
				startengine = 0;
				showCrewAim = 2;
				class OpticsIn
				{
					class Wide
					{
						initAngleX = 0;
						minAngleX = -30;
						maxAngleX = 30;
						initAngleY = 0;
						minAngleY = -100;
						maxAngleY = 100;
						initfov = "0.33333/ 4";
						minFov = 0.117;
						maxFov = 0.117;
						visionMode[] = {"Normal","Ti"};
						thermalMode[] = {4};
						gunnerOpticsModel = ""; //"\rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\gunnerOptics_M2A2";
						gunnerOpticsEffect[] = {};
					};
					class Narrow: Wide
					{
						gunnerOpticsModel = ""; //"\rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\gunnerOptics_M2A2_2";
						initfov = "0.33333/ 12";
						minFov = 0.039;
						maxFov = 0.039;
					};
				};
				class HitPoints
				{
					class HitTurret
					{
						armor = 0.5;
						material = -1;
						name = "vez";
						visual = "vez";
						passThrough = 0;
						minimalHit = 0.14;
						explosionShielding = 0.001;
						radius = 0.08;
					};
					class HitGun
					{
						armor = 1.2;
						material = -1;
						name = "zbran";
						visual = "";
						passThrough = 0;
						minimalHit = 0.13;
						explosionShielding = 0.001;
						radius = 0.1;
					};
				};
			};
		};
		
		
		class AnimationSources : AnimationSources
		{
			class muzzle_rot_cannon {source = "ammorandom"; weapon = "cannon_120mm";};
			class muzzle_rot_coax {source = "ammorandom"; weapon = "LMG_M200";};
			class muzzle_rot_HMG {source = "ammorandom"; weapon = "HMG_NSVT";};
			class recoil_source {source = "reload"; weapon = "cannon_120mm";};
		};
		class Damage {
			tex[] = {};
			mat[] = {/*
				"A3\Armor_F_Gamma\MBT_02\Data\MBT_02.rvmat",
				"A3\Armor_F_Gamma\MBT_02\Data\MBT_02_damage.rvmat",
				"A3\Armor_F_Gamma\MBT_02\Data\MBT_02_destruct.rvmat",

				"A3\Armor_F_Gamma\MBT_02\Data\MBT_02_body.rvmat",
				"A3\Armor_F_Gamma\MBT_02\Data\MBT_02_body_damage.rvmat",
				"A3\Armor_F_Gamma\MBT_02\Data\MBT_02_body_destruct.rvmat",

				"A3\Armor_F_Gamma\MBT_02\Data\MBT_02_tracks.rvmat",
				"A3\Armor_F_Gamma\MBT_02\Data\MBT_02_tracks_damage.rvmat",
				"A3\Armor_F_Gamma\MBT_02\Data\MBT_02_tracks_destruct.rvmat",

				"A3\Armor_F_Gamma\MBT_02\Data\MBT_02_turret.rvmat",
				"A3\Armor_F_Gamma\MBT_02\Data\MBT_02_turret_damage.rvmat",
				"A3\Armor_F_Gamma\MBT_02\Data\MBT_02_turret_destruct.rvmat",

				"A3\Armor_F_Gamma\MBT_01\Data\MBT_01_scorcher.rvmat",
				"A3\Armor_F_Gamma\MBT_01\Data\MBT_01_scorcher_damage.rvmat",
				"A3\Armor_F_Gamma\MBT_01\Data\MBT_01_scorcher_destruct.rvmat"*/
			};
		};
		class RenderTargets
		{
			class BackUpCam
			{
				renderTarget = "rendertarget0";
				class DriverBackUp
				{
					pointPosition = "pip0_pos";
					pointDirection = "pip0_dir";
					renderQuality = 2;
					renderVisionMode = 0;
					fov = 1.0;
				};
			};
			class DriverCam
			{
				renderTarget = "rendertarget1";
				class DriverView
				{
					pointPosition = "pip1_pos";
					pointDirection = "pip1_dir";
					renderQuality = 2;
					renderVisionMode = 0;
					fov = 0.8;
				};
			}; 
			class MGCam
			{
				renderTarget = "rendertarget2";
				class GunnerCoax
				{
					pointPosition = "pip2_pos";
					pointDirection = "pip2_dir";
					renderQuality = 2;
					renderVisionMode = 0;
					fov = 0.2;
				};
			};
			class CannonCam
			{
				renderTarget = "rendertarget3";
				class GunnerCannon
				{
					pointPosition = "pip3_pos";
					pointDirection = "pip3_dir";
					renderQuality = 2;
					renderVisionMode = 0;
					fov = 0.2;
				};
			};
			class CommanderCam
			{
				renderTarget = "rendertarget4";
				class CommanderView
				{
					pointPosition = "commanderview";
					pointDirection = "commanderview_dir";
					renderQuality = 2;
					renderVisionMode = 0;
					fov = 0.5;
				};
			};
			class CommanderCamGunner
			{
				renderTarget = "rendertarget5";
				class CommanderViewCannon
				{
					pointPosition = "pip3_pos";
					pointDirection = "pip3_dir";
					renderQuality = 2;
					renderVisionMode = 0;
					fov = 0.5;
				};
			};
		};
		class Exhausts
		{
			class Exhaust1
			{
				position = "exhaust1";
				direction = "exhaust1_end";
				effect = "ExhaustEffectTankSide";
			};
			class Exhaust2
			{
				position = "exhaust2";
				direction = "exhaust2_end";
				effect = "ExhaustEffectTankSide";
			};
		};
		class Reflectors {
			class Left {
				color[] 	= {1900, 1300, 950};
				ambient[]	= {5,5,5};
				position 	= "Light_L";
				direction 	= "Light_L_end";
				hitpoint 	= "Light_L";
				selection	= "Light_L";
				size 		= 1;
				innerAngle 	= 100;
				outerAngle 	= 179;
				coneFadeCoef = 10;
				intensity 	= 1; //17.5
				useFlare 	= 0;
				dayLight 	= 0;
				flareSize 	= 1.0;
				class Attenuation 
				{
					start 		= 1.0;
					constant 	= 0;
					linear 		= 0;
					quadratic 	= 0.25;
					hardLimitStart = 30;
					hardLimitEnd = 60;
				};
			};
			class Right: Left {
				position 	= "Light_R";
				direction 	= "Light_R_end";
				hitpoint 	= "Light_R";
				selection 	= "Light_R";
			};
			class Right2: Right {
				position 	= "light_R_flare";
				useFlare 	= 1;
			};
			class Left2: Left {
				position 	= "light_L_flare";
				useFlare 	= 1;
			};
		};
		aggregateReflectors[] = {{"Left","Right","Left2","Right2"}};
		armorLights = 0.1;
		/*
		class ViewPilot: ViewPilot
		{
			initAngleX = 7;
			minAngleX = -15;
			maxAngleX = 25;
			initAngleY = 0;
			minAngleY = -90;
			maxAngleY = 90;
		};
		*/
		class ViewPilot: ViewPilot
		{
			initAngleX = -3;
			initAngleY = 0;
			initFov = 0.9;
			minFov = 0.25;
			maxFov = 1.25;
			minAngleX = -65;
			maxAngleX = 85;
			minAngleY = -150;
			maxAngleY = 150;
			minMoveX = 0.0;
			maxMoveX = 0.0;
			minMoveY = -0.075;
			maxMoveY = 0.075;
			minMoveZ = -0.075;
			maxMoveZ = 0.1;
		};
		
		class TransportBackpacks
		{};
		class TransportMagazines
		{};
		class TransportItems
		{};		
		class TransportWeapons
		{};		
		class EventHandlers
		{
			/* 
			hitpart = "_this call SLX_XEH_EH_HitPart;_this call rhs_fnc_hitHandler";
			getIn = "_this call SLX_XEH_EH_GetIn;_this call rhs_fnc_m2_doors";
			getOut = "_this call SLX_XEH_EH_GetOut;_this call rhs_fnc_m2_doors";
			 */
		};
		
	};
	class mauler_F: mauler_Base
	{
		author = "Scot Gilmore";
		class SimpleObject
		{
			eden = 1;
			animate[] = {{"damagehide",0},{"wheel_koll1",0},{"wheel_kolol1",0},{"wheel_podkolol1",0},{"wheel_kolp1",0},{"wheel_kolop1",0},{"wheel_podkolop1",0},{"wheel_koll2",0},{"wheel_kolp2",0},{"wheel_kolol2",0},{"wheel_kolol3",0},{"wheel_kolol4",0},{"wheel_kolol5",0},{"wheel_kolol6",0},{"wheel_kolop2",0},{"wheel_kolop3",0},{"wheel_kolop4",0},{"wheel_kolop5",0},{"wheel_kolop6",0},{"wheel_podkolol2",0},{"wheel_podkolol3",0},{"wheel_podkolol4",0},{"wheel_podkolol5",0},{"wheel_podkolol6",0},{"wheel_podkolop2",0},{"wheel_podkolop3",0},{"wheel_podkolop4",0},{"wheel_podkolop5",0},{"wheel_podkolop6",0},{"podkolol1_hide_damage",0},{"podkolol2_hide_damage",0},{"podkolol3_hide_damage",0},{"podkolol4_hide_damage",0},{"podkolol5_hide_damage",0},{"podkolol6_hide_damage",0},{"podkolol7_hide_damage",0},{"podkolol8_hide_damage",0},{"podkolop1_hide_damage",0},{"podkolop2_hide_damage",0},{"podkolop3_hide_damage",0},{"podkolop4_hide_damage",0},{"podkolop5_hide_damage",0},{"podkolop6_hide_damage",0},{"podkolop7_hide_damage",0},{"podkolop8_hide_damage",0},{"damagevez",0},{"mainturret",0},{"maingun",0.17},{"hatchcommander",0},{"recoil",0},{"obsturret",0},{"obsgun",0},{"maingunoptics",0.17},{"maingunint",0.17},{"damagevezvelitele",0},{"poklop_commander_damage",0},{"poklop_driver_damage",0},{"hatchdriver",0},{"plates_1_y",0},{"plates_2_y",0},{"plates_1_x",0},{"plates_2_x",0},{"plates_1_bank",0},{"plates_2_bank",0},{"drivingwheel",0},{"indicatorspeed_mfd_driver",0},{"indicatorrpm",0},{"indicatorrpm_mfd_driver",0},{"lights_driver",0},{"lights_driver_off",0},{"lights_turret",0},{"dmg_com_halo_unhide",0},{"engine_damage_indicator",0},{"main_gun_damage_indicator",0},{"track_damage_indicator",0},{"pedal_thrust",0},{"pedal_brake",0},{"indicatortempwater_mfd_driver",0},{"indicatorfuel_mfd_driver",1},{"indicator_hull_direction_mfd_driver",0},{"indicator_main_turret_mfd_driver",0},{"indicator_hull_direction_mfd_com",0},{"indicator_main_turret_mfd_com",0},{"indicator_main_turret_onscreen_com",0},{"indicator_com_turret_mfd_com",0},{"indicator_com_turret_onscreen_com",0},{"indicator_com_turret_counter_mfd_com",0},{"indicator_hull_direction_mfd_gunner",0},{"indicator_main_turret_mfd_gunner",0},{"indicator_com_smoke_1",1},{"indicator_com_smoke_2",1},{"indicator_damage_engine",0},{"indicator_damage_fuel",0},{"indicator_damage_tracks",0},{"indicator_turret_damage_hull",0},{"lights_turret2",0},{"indicator_turret_damage_engine",0},{"indicator_turret_damage_fuel",0},{"indicator_turret_damage_main_gun",0},{"indicator_turret_damage_track",0},{"indicator_turret_damage_turret",0},{"indicator_turret_damage_comturret",0},{"hide_mfd_and_pip_screen_driver",1},{"hide_mfd_and_pip_screen_gunner",1},{"hide_mfd_elements",1},{"cannon_muzzle_flash",0},{"zaslehrot_cannon",325},{"cannon_ready_light",0},{"turret_control_x",0},{"turret_control_y",0},{"com_turret_control_x",0},{"com_turret_control_y",0},{"indicator_com_turret_mfd_gunner",0},{"indicator_com_turret_counter_mfd_gunner",0},{"indicator_com_turret_mfd_driver",0},{"indicator_com_turret_counter_mfd_driver",0}};
			hide[] = {"clan","zasleh","zasleh_1","light_l","light_r","zadni svetlo","brzdove svetlo","podsvit pristroju","poskozeni"};
			verticalOffset = 2.475;
			verticalOffsetWorld = -0.211;
			init = "[this, '', []] call bis_fnc_initVehicle";
		};
		scope = 2;
		faction = "SixOneJTF";
		vehicleClass = "SixOneJTF_Armor";
		//crew = "mauler_driver";
		displayName = "[61] Black Bear LT";
		side = 1;
		class Library
		{
			libTextDesc = "The Black Bear Light Tank";
		};
		model = "vhx_armor\gijoe_mauler\mauler1.p3d";
		armor = 700;
		class Damage
		{
			tex[] = {};
			mat[] = {};///{"rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\data\brad_UV1.rvmat","rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\data\brad_UV1_damage.rvmat","rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\data\brad_UV1_destruct.rvmat","rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\data\brad_UV2.rvmat","rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\data\brad_UV2_damage.rvmat","rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\data\brad_UV2_destruct.rvmat","rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\data\brad_UV2_ERAon.rvmat","rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\data\brad_UV2_ERAon_damage.rvmat","rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\data\brad_UV2_ERAon_destruct.rvmat","rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\data\M2_tracks.rvmat","rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\data\M2_tracks_damage.rvmat","rhsusf\addons\rhsusf_a2port_armor\M2A2_Bradley\data\M2_tracks_destruct.rvmat","a3\data_f\default.rvmat","a3\data_f\default.rvmat","a3\data_f\default_destruct.rvmat"};
		};
		class AnimationSources
		{
			/* 
			class recoil_source
			{
				source = "reload";
				weapon = "RHS_weap_M242BC";
			};
			class muzzle_hide_hmg: recoil_source{};
			class muzzle_rot_hmg: recoil_source
			{
				source = "ammorandom";
			};
			class muzzle_rot_hmg2: muzzle_rot_hmg
			{
				weapon = "rhs_weap_m240veh";
			};
			*/
			class HatchC
			{
				source = "door";
				animPeriod = 0.8;
			};
			class HatchG: HatchC{};
			class HatchDriver: HatchC{};
			
		};
	};
};

 

 

model.cfg:

Spoiler


class cfgSkeletons
{
	class blackbear_Skeleton
	{
		skeletonInherit = "";
		isDiscrete = 0;
		SkeletonBones[]=
		{
			"kolL1"	,"",
			"kolL2","",
			"kolL3","",
			"kolP1","",
			"kolP2","",
			"kolP3","",
			"podkoloL1","",
			"podkoloL2","",
			"podkoloL3","",
			"podkoloL4","",
			"podkoloL5","",
			"podkoloL6","",
			"podkoloL7","",
			"podkoloL8","",
			"podkoloL9","",
			"podkoloP1","",
			"podkoloP2","",
			"podkoloP3","",
			"podkoloP4","",
			"podkoloP5","",
			"podkoloP6","",
			"podkoloP7","",
			"podkoloP8","",
			"podkoloP9","",
			"koloL1","podkoloL1",
			"koloL2","podkoloL2",
			"koloL3","podkoloL3",
			"koloL4","podkoloL4",
			"koloL5","podkoloL5",
			"koloL6","podkoloL6",
			"koloP1","podkoloP1",
			"koloP2","podkoloP2",
			"koloP3","podkoloP3",
			"koloP4","podkoloP4",
			"koloP5","podkoloP5",
			"koloP6","podkoloP6",
			"podkoloL1_hide","podkoloL1",
			"podkoloL2_hide","podkoloL2",
			"podkoloL3_hide","podkoloL3",
			"podkoloL4_hide","podkoloL4",
			"podkoloL5_hide","podkoloL5",
			"podkoloL6_hide","podkoloL6",
			"podkoloP1_hide","podkoloP1",
			"podkoloP2_hide","podkoloP2",
			"podkoloP3_hide","podkoloP3",
			"podkoloP4_hide","podkoloP4",
			"podkoloP5_hide","podkoloP5",
			"podkoloP6_hide","podkoloP6",
			"i_speed"	,"",
			"i_speed2"	,"",
			"i_rpm"	,"",
			"i_radar"	,"",
			"i_compass"	,"",
			"damagehide"	,"",
			"otocvez"	,"",
			"otochlaven"	,"otocvez",
			"stick_cmdr" ,"otocvez",
			"kb_cmdr"	,"otocvez",
			"hatch_lock"	,"otocvez",
			"commander_turret"	,"otocvez",
			"commander_gun"	,"commander_turret",
			"gunner_view"	,"otocvez",
			"gunner_view_doorL"	,"otocvez",
			"gunner_view_doorR"	,"otocvez",
			"gunFan"	,"otochlaven",
			"gunrecoil"	,"otochlaven",
			"muzzleflash"	,"gunrecoil",
			"muzzlehmg"	,"gunrecoil",
			"hatch_cmdr"	,"otocvez",
			"hatch_driver"	,"",
			"hatch_gunner"	,"",
			"scopeDriver"	,"",
			"podkoloL1_solid"	,"",
			"podkoloP1_solid"	,"",
			"turbine1"	,"",
			"turbine2"	,"",
			"i_mph"	,"",
			"i_fuel"	,"",
			"i_rpm1"	,"",
			"i_rpm2"	,"",
			"i_rpm3"	,""
		};
	};
};
class CfgModels
{
	class Default
	{
		sections[] = {};
		sectionsInherit="";
		skeletonName = "";
	};
	class mauler1:Default
	{
		skeletonName="blackbear_Skeleton";
		sections[]=
		{
			"zbytek",
			"vez",
			"pas_p",
			"pas_l",
			"motor",
			"l svetlo",
			"p svetlo",
			"zbran",
			"podsvit pristroju",
			"camo2",
			"camo1",
			"pasoffsetl",
			"pasoffsetp",
			"brzdove svetlo",
			"zadni svetlo",
			"commander_turret",
			"zasleh2"
		};

		class Animations
		{
			class damageHide
			{
				type="hide";
				source="damage";
				selection="damagehide";
//				sourceAddress = clamp;// (default)
				minValue = 0.0;//rad 0.0
				maxValue = 1.0;//rad 57.29578
				hideValue = 1.0;
//				unHideValue = -1.0;//(default)
				animPeriod = 0.0;
				initPhase = 0.0;
			};
			class Wheel_kolL1 {
				type="rotationX";
				source="wheelL";
				selection="kolL1";
				axis="";
				memory="false";
				animPeriod=0;
				minvalue=0.5;
				maxvalue = 1.0;
				angle0=0;
				angle1="rad -360";
				sourceAddress="loop";
			};
			class Wheel_kolL2: Wheel_kolL1 {
				selection="kolL2";
			};
			class Wheel_kolL3: Wheel_kolL1 {
				selection="kolL3";
			};
			
			class Wheel_koloL1: Wheel_kolL1 {
				selection="koloL1";
			};
			class Wheel_koloL2: Wheel_koloL1 {
				selection="koloL2";
			};
			class Wheel_koloL3: Wheel_koloL1 {
				selection="koloL3";
			};
			class Wheel_koloL4: Wheel_koloL1 {
				selection="koloL4";
			};
			class Wheel_koloL5: Wheel_koloL1 {
				selection="koloL5";
			};
			class Wheel_koloL6: Wheel_koloL1 {
				selection="koloL6";
			};
			class Wheel_koloL7: Wheel_koloL1 {
				selection="koloL7";
			};
			class Wheel_koloL8: Wheel_koloL1 {
				selection="koloL8";
			};
			
			class Wheel_kolP1: Wheel_kolL1 {
				source="wheelR";
				selection="kolP1";
			};
			class Wheel_kolP2: Wheel_kolP1 {
				selection="kolP2";
			};
			class Wheel_kolP3: Wheel_kolP1 {
				selection="kolP3";
			};
			
			class Wheel_koloP1: Wheel_koloL1 {
				source="wheelR";
				selection="koloP1";
			};
			class Wheel_koloP2: Wheel_koloP1 {
				selection="koloP2";
			};
			class Wheel_koloP3: Wheel_koloP1 {
				selection="koloP3";
			};
			class Wheel_koloP4: Wheel_koloP1 {
				selection="koloP4";
			};
			class Wheel_koloP5: Wheel_koloP1 {
				selection="koloP5";
			};
			class Wheel_koloP6: Wheel_koloP1 {
				selection="koloP6";
			};
			class Wheel_koloP7: Wheel_koloP1 {
				selection="koloP7";
			};
			class Wheel_koloP8: Wheel_koloP1 {
				selection="koloP8";
			};
			
			class Wheel_podkoloL1 {
				type="translation";
				source="damper";
				selection="podkoloL1";
				axis="Basic_Damper_Destruct_Axis";
				memory="true";
				animPeriod=0;
				minValue="0";
				maxValue="0.83";
				offset0= "0.18";
				offset1= "-0.15";
			};
			class Wheel_podkoloL2: Wheel_podkoloL1 {
				selection="podkoloL2";
				axis="Basic_Damper_Destruct_Axis";
			};
			class Wheel_podkoloL3: Wheel_podkoloL1 {
				selection="podkoloL3";
				axis="Basic_Damper_Destruct_Axis";
			};
			class Wheel_podkoloL4: Wheel_podkoloL1 {
				selection="podkoloL4";
				axis="Basic_Damper_Destruct_Axis";
			};
			class Wheel_podkoloL5: Wheel_podkoloL1 {
				selection="podkoloL5";
				axis="Basic_Damper_Destruct_Axis";
			};
			class Wheel_podkoloL6: Wheel_podkoloL1 {
				selection="podkoloL6";
				axis="Basic_Damper_Destruct_Axis";
			};
			
			
			class Wheel_podkoloP1 {
				type="translation";
				source="damper";
				selection="podkoloP1";
				axis="Basic_Damper_Destruct_Axis";
				memory="true";
				animPeriod=0;
				minValue="0";
				maxValue="0.83";
				offset0= "0.18";
				offset1= "-0.15";
			};
			class Wheel_podkoloP2: Wheel_podkoloP1 {
				selection="podkoloP2";
				axis="Basic_Damper_Destruct_Axis";
			};
			class Wheel_podkoloP3: Wheel_podkoloP1 {
				selection="podkoloP3";
				axis="Basic_Damper_Destruct_Axis";
			};
			class Wheel_podkoloP4: Wheel_podkoloP1 {
				selection="podkoloP4";
				axis="Basic_Damper_Destruct_Axis";
			};
			class Wheel_podkoloP5: Wheel_podkoloP1 {
				selection="podkoloP5";
				axis="Basic_Damper_Destruct_Axis";
			};
			class Wheel_podkoloP6: Wheel_podkoloP1 {
				selection="podkoloP6";
				axis="Basic_Damper_Destruct_Axis";
			};
			
			class podkoloL1_hide_damage: damageHide {
				selection="podkoloL1_hide";
			};
			class podkoloL2_hide_damage: damageHide {
				selection="podkoloL2_hide";
			};
			class podkoloL3_hide_damage: damageHide {
				selection="podkoloL3_hide";
			};
			class podkoloL4_hide_damage: damageHide {
				selection="podkoloL4_hide";
			};
			class podkoloL5_hide_damage: damageHide {
				selection="podkoloL5_hide";
			};
			class podkoloL6_hide_damage: damageHide {
				selection="podkoloL6_hide";
			};
			class podkoloP1_hide_damage: damageHide {
				selection="podkoloP1_hide";
			};
			class podkoloP2_hide_damage: damageHide {
				selection="podkoloP2_hide";
			};
			class podkoloP3_hide_damage: damageHide {
				selection="podkoloP3_hide";
			};
			class podkoloP4_hide_damage: damageHide {
				selection="podkoloP4_hide";
			};
			class podkoloP5_hide_damage: damageHide {
				selection="podkoloP5_hide";
			};
			class podkoloP6_hide_damage: damageHide {
				selection="podkoloP6_hide";
			};
			
			class damageVez
			{
				type="hide";
				source="damage";
				selection="damagevez";
//				sourceAddress = clamp;// (default)
				minValue = 0.0;//rad 0.0
				maxValue = 1.0;//rad 57.29578
				hideValue = 1.0;
//				unHideValue = -1.0;//(default)
				animPeriod = 0.0;
				initPhase = 0.0;
			};
			class IndicatorSpeed
			{
				type="rotation";
				source="speed";
				selection="mph";
				axis="mph_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = 0.0;//rad 0.0
				maxValue = 16.67;//rad 955.12067
				angle0 = 0.0;//rad 0.0;
				angle1 = 5.061455;//rad 290.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class RPM1
			{
				type="rotation";
				source="rpm";
				selection="rpm1";
				axis="rpm1_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = 0.0;//rad 0.0
				maxValue = 3.0;//rad 171.88734
				angle0 = 0.0;//rad 0.0;
				angle1 = 1.5707964;//rad 90.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class RPM2
			{
				type="rotation";
				source="rpm";
				selection="rpm2";
				axis="rpm2_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = 0.0;//rad 0.0
				maxValue = 2.0;//rad 114.59156
				angle0 = 0.0;//rad 0.0;
				angle1 = 1.5707964;//rad 90.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class RPM3
			{
				type="rotation";
				source="rpm";
				selection="rpm3";
				axis="rpm3_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = 0.0;//rad 0.0
				maxValue = 3.0;//rad 171.88734
				angle0 = 0.0;//rad 0.0;
				angle1 = 1.5707964;//rad 90.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class IndicatorFuel
			{
				type="rotation";
				source="fuel";
				selection="fuel";
				axis="fuel_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = 0.0;//rad 0.0
				maxValue = 1.0;//rad 57.29578
				angle0 = 0.0;//rad 0.0;
				angle1 = 1.5707964;//rad 90.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class hatch_driver_1
			{
				type="translation";
				source="hatchDriver";
				selection="hatch_driver";
				axis="hatch_driver_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = 0.0;//rad 0.0
				maxValue = 0.05;//rad 57.29578
				offset0 = 0.0;//
				offset1 = 0.215;//
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class hatch_driver_2
			{
				type="rotation";
				source="hatchDriver";
				selection="hatch_driver";
				axis="hatch_driver_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = 0.20001;//rad 0.0
				maxValue = 1.0;//rad 57.29578
				angle0 = 0.0;//
				angle1 = -1.623;// rad -93
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class Hatch_Gunner_1
			{
				type="translation";
				source="hatchGunner";
				selection="hatch_gunner";
				axis="hatch_gunner_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = 0.0;//rad 0.0
				maxValue = 0.05;//rad 57.29578
				offset0 = 0.0;//
				offset1 = 0.215;//
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class Hatch_Gunner_2
			{
				type="rotation";
				source="hatchGunner";
				selection="hatch_gunner";
				axis="hatch_gunner_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = 0.20001;//rad 0.0
				maxValue = 1.0;//rad 57.29578
				angle0 = 0.0;//
				angle1 = 1.623;// rad 93
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class HatchCommander
			{
				type="rotation";
				source="hatchCommander";
				selection="hatch_cmdr";
				axis="hatch_cmdr_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = 0.0;//rad 0.0
				maxValue = 1.0;//rad 57.29578
				angle0 = 0.0;//rad 75.0;
				angle1 = -3.264;//rad -187.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class MainTurret
			{
				type="rotationY";
				source="mainTurret";
				selection="otocvez";
				axis="otocvez_axis";//*probably*
				sourceAddress = loop;
				minValue = -6.2831855;//rad -360.0
				maxValue = 6.2831855;//rad 360.0
				angle0 = -6.2831855;//rad -360.0;
				angle1 = 6.2831855;//rad 360.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class MainGun
			{
				type="rotationX";
				source="mainGun";
				selection="otochlaven";
				axis="otochlaven_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = -6.2831855;//rad -360.0
				maxValue = 6.2831855;//rad 360.0
				angle0 = -6.2831855;//rad -360.0;
				angle1 = 6.2831855;//rad 360.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class maingunoptics
			{
				type="rotation";
				source="mainGun";
				selection="gunner_view";
				axis="gunner_view_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = -6.2831855;//rad -360.0
				maxValue = 6.2831855;//rad 360.0
				angle0 = -6.2831855;//rad -360.0;
				angle1 = 6.2831855;//rad 360.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class obsturret
			{
				type="rotation";
				source="obsturret";
				selection="commander_turret";
				axis="commander_turret_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = -6.2831855;//rad -360.0
				maxValue = 6.2831855;//rad 360.0
				angle0 = 6.2831855;//rad -360.0;
				angle1 = -6.2831855;//rad 360.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class obsgun
			{
				type="rotation";
				source="obsGun";
				selection="commander_gun";
				axis="commander_gun_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = -6.2831855;//rad -360.0
				maxValue = 6.2831855;//rad 360.0
				angle0 = 6.2831855;//rad -360.0
				angle1 = -6.2831855;//rad 360.0
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class recoil_BEGIN
			{
				type="translation";
				source="recoil_source";
				selection="gunrecoil";
				axis="gunrecoil_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = 0.5;//rad 28.64789
				maxValue = 0.8;//rad 45.836624
				offset0 = 0.0;
				offset1 = 0.2;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class recoil_END
			{
				type="translation";
				source="recoil_source";
				selection="gunrecoil";
				axis="gunrecoil_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = 0.85;//rad 48.701412
				maxValue = 1.0;//rad 57.29578
				offset0 = 0.0;
				offset1 = -0.2;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class ObsTurret
			{
				type="rotationY";
				source="obsTurret";
				selection="commander_turret";
				axis="commander_turret_axis";//*probably*
//				sourceAddress = clamp;// (default)
				minValue = -6.2831855;//rad -360.0
				maxValue = 6.2831855;//rad 360.0
				angle0 = -6.2831855;//rad -360.0;
				angle1 = 6.2831855;//rad 360.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			
			class podkoloL1_solid_hide_damage
			{
				type="hide";
				source="damage";
				selection="podkoloL1_solid";
//				sourceAddress = clamp;// (default)
				minValue = 0.0;//rad 0.0
				maxValue = 1.0;//rad 57.29578
				hideValue = 1.0;
//				unHideValue = -1.0;//(default)
				animPeriod = 0.0;
				initPhase = 0.0;
			};
			class podkoloP1_solid_hide_damage
			{
				type="hide";
				source="damage";
				selection="podkoloP1_solid";
//				sourceAddress = clamp;// (default)
				minValue = 0.0;//rad 0.0
				maxValue = 1.0;//rad 57.29578
				hideValue = 1.0;
//				unHideValue = -1.0;//(default)
				animPeriod = 0.0;
				initPhase = 0.0;
			};
			class hmg_muzzle_flash
			{
				type="hide";
				source="muzzle_hide_hmg";
				selection="muzzleflash";
//				sourceAddress = clamp;// (default)
				minValue = 0.0;//rad 0.0
				maxValue = 1.0;//rad 57.29578
				hideValue = 0.0;
				unHideValue = 0.93;
				animPeriod = 0.0;
				initPhase = 0.0;
			};
			class hmg_muzzleFlashROT
			{
				type="rotationZ";
				source="muzzle_rot_hmg";
				selection="muzzleflash";
				axis="muzzleflash_axis";//*probably*
				sourceAddress = loop;
				minValue = 0.0;//rad 0.0
				maxValue = 4.0;//rad 229.18312
				angle0 = 0.0;//rad 0.0;
				angle1 = 6.2831855;//rad 360.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
			class zaslehROT_HMG2
			{
				type="rotationZ";
				source="muzzle_rot_HMG2";
				selection="muzzlehmg";
				axis="muzzlehmg_axis";//*probably*
				sourceAddress = loop;
				minValue = 0.0;//rad 0.0
				maxValue = 4.0;//rad 229.18312
				angle0 = 0.0;//rad 0.0;
				angle1 = 6.2831855;//rad 360.0;
				animPeriod = 0.0;
				initPhase = 0.0;
//				memory = true;//(default assumed)
			};
		};//Animations
	};//modelclass
};//CfgModels

 

 

Share this post


Link to post
Share on other sites

In model.cfg, under obsturret and obsgun, do you deliberately have angle0 as positive and angle1 as negative, rather than the other way around?

                angle0 = 6.2831855;              //rad -360.0;
                angle1 = -6.2831855;             //rad 360.0;

Share this post


Link to post
Share on other sites

yes because I was trying to see if that might fix the upside down prob. All it did was make the mouse controls go the opposite way.

Share this post


Link to post
Share on other sites

What are gunBeg and gunEnd set to for the turret with the backwards view? (check with in game config viewer). These are often counter-intuitive and can be backwards, but I'm not entirely clear if they're relevant to your case.

Share this post


Link to post
Share on other sites
1 minute ago, UK_Apollo said:

... gunBeg and gunEnd ... I'm not entirely clear if they're relevant to your case. 

They're not relevant, as I found out. AFAICT, they affect the direction any projectile would travel, but there's no commander weapon assigned to the commander "gun" which results in nothing. They are used for single barrel vehicle guns, whereas "memoryPointGun[]" is used for multiple barrels (hence the array brackets), or for a secondary gun. "gunBeg" and "gunEnd" might also have something to do with where the muzzle flash is and where the casing ejects. I had them in // before the video and just never put it back.

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

×