Jump to content
Sign in to follow this  
deltagamer

[WIP] ArmA 2 Stryker Port

Recommended Posts

So I added the new car physics to the stryker and I'm getting a drive-able but levitating result. Does anyone know how to fix this?

yfscqTu.jpg

Share this post


Link to post
Share on other sites

Hard to say with just a screen but i think your MOI or Bound points are not good.

Share this post


Link to post
Share on other sites

@MrEwok Here's what I have for the config.

#include "\StrykerPack\basicdefines.hpp"
#include "\StrykerPack\CrewAnimations.hpp"
#define VIEW_GUNNER 1000
#define VIEW_PILOT 1100
#define VIEW_CARGO 1200

class CfgPatches
{
class Delta_strykerpack
{
	units[] =
	{
		"M1126_ICV_mk19_EP1","M1130_CV_EP1","M1129_MC_EP1","M1135_ATGMV_EP1","M1128_MGS_EP1","M1133_MEV_EP1"
	};
	weapons[] = {};
	requiredVersion = 0.10;
	requiredAddons[] = {"A3_Weapons_F"};
};
};

class CfgVehicleClasses
{
class Delta_StrykerPack
{
	displayName = "Stryker Pack";
};

};

//#########################################   def magazines   #########################################
#define mag_xx(a,b) class _xx_##a {magazine = a; count = b;}
#define weap_xx(a,b) class _xx_##a {weapon = a; count = b;}

#define DAMAGE_MAT(XX) 		StrykerPack\Data\##XX##.rvmat,StrykerPack\Data\##XX##_damage.rvmat,StrykerPack\Data\##XX##_destruct.rvmat,

class WeaponCloudsMGun;
//#########################################   #########################################
class CfgVehicles
{
class Land;
class LandVehicle:Land
{
	class HitPoints;
};
class car: LandVehicle
{
	class ViewOptics;
	class HitPoints
	{
		class HitLFWheel;
		class HitLBWheel;
		class HitLMWheel;
		class HitLF2Wheel;

		class HitRFWheel;
		class HitRBWheel;
		class HitRMWheel;
		class HitRF2Wheel;
	};
	class NewTurret;
	class Turrets
	{
		class MainTurret:NewTurret
		{
			class ViewGunner;
			class ViewOptics;
		};
	};
	class AnimationSources;
};
//#########################################   S T R Y K E R   B A S E	#########################################
class Wheeled_APC:car {};

class StrykerBase_EP1: wheeled_APC
{
	expansion = 1;

	class AnimationSources;

	htMin = 60;		// Minimum half-cooling time (in seconds)
	htMax = 1800;	// Maximum half-cooling time (in seconds)
	afMax = 200;	// Maximum temperature in case the model is alive (in celsius)
	mfMax = 100;	// Maximum temperature when the model is moving (in celsius)
	mFact = 1;		// Metabolism factor - number from interval <0, 1> (0 - metabolism has no influence, 1 - metabolism has full influence (no other temperature source will be considered)).
	tBody = 250;	 	// Metabolism temperature of the model (in celsius)
	scope = 0;

	displayName = $STR_DN_STRYKER;
	faction = BLU_F;

	waterLeakiness=2.5;
	normalSpeedForwardCoef=0.51999998;
	antiRollbarForceCoef=24;
	antiRollbarForceLimit=30;
	antiRollbarSpeedMin=15;
	antiRollbarSpeedMax=65;
	class complexGearbox
	{
		GearboxRatios[]=
		{
			"R1",
			-4.8400002,
			"N",
			0,
			"D1",
			3.4300001,
			"D2",
			2.01,
			"D3",
			1.42,
			"D4",
			1,
			"D5",
			0.82999998,
			"D6",
			0.58999997
		};
		TransmissionRatios[]=
		{
			"High",
			8
		};
		gearBoxMode="auto";
		moveOffGear=1;
		driveString="D";
		neutralString="N";
		reverseString="R";
	};
	simulation="carx";
	dampersBumpCoef=4.5;
	differentialType="all_limited";
	frontRearSplit=0.5;
	frontBias=1.3;
	rearBias=1.3;
	centreBias=1.3;
	clutchStrength=35;
	enginePower=405;
	maxOmega=241;
	peakTorque=2260;
	dampingRateFullThrottle=0.079999998;
	dampingRateZeroThrottleClutchEngaged=2;
	dampingRateZeroThrottleClutchDisengaged=0.050000001;
	torqueCurve[]=
	{

		{
			"(0/2300)",
			"(0/2260)"
		},

		{
			"(1200/2300)",
			"(1625/2260)"
		},

		{
			"(1400/2300)",
			"(2100/2260)"
		},

		{
			"(1500/2300)",
			"(2200/2260)"
		},

		{
			"(1550/2300)",
			"(2260/2260)"
		},

		{
			"(1600/2300)",
			"(2200/2260)"
		},

		{
			"(2300/2300)",
			"(1700/2260)"
		},

		{
			"(4700/2300)",
			"(0/2260)"
		}
	};
	changeGearMinEffectivity[]={0.5,0.15000001,0.97000003,0.97000003,0.97000003,0.97000003,0.97000003,0.98500001};
	switchTime=0.1;
	latency=1.4;
	idleRpm = 800;
	redRpm = 4500;
	brakeIdleSpeed = 1.78;
	class Wheels
	{
		class L1
		{
			boneName="wheel_1_1_damper";
			steering=1;
			side="left";
			center="wheel_1_1_axis";
			boundary="wheel_1_1_bound";
			width="0.2";
			mass=187.5;
			MOI=60;
			dampingRate=0.1;
			dampingRateDamaged=1;
			dampingRateDestroyed=1000;
			maxBrakeTorque=45000;
			maxHandBrakeTorque=0;
			suspTravelDirection[]={0,-0.99599999,-0.089000002};
			suspForceAppPointOffset="wheel_1_1_axis";
			tireForceAppPointOffset="wheel_1_1_axis";
			maxCompression=0.1125;
			mMaxDroop=0.1125;
			sprungMass=3090;
			springStrength=110000;
			springDamperRate=27900;
			longitudinalStiffnessPerUnitGravity=10000;
			latStiffX=25;
			latStiffY=180;
			frictionVsSlipGraph[]=
			{
				{0,1},
				{0.5,1},
				{1,1}
			};
		};
		class L2: L1
		{
			boneName="wheel_1_2_damper";
			steering=1;
			center="wheel_1_2_axis";
			boundary="wheel_1_2_bound";
			suspForceAppPointOffset="wheel_1_2_axis";
			tireForceAppPointOffset="wheel_1_2_axis";
		};
		class L3: L1
		{
			boneName="wheel_1_3_damper";
			steering=0;
			center="wheel_1_3_axis";
			boundary="wheel_1_3_bound";
			suspForceAppPointOffset="wheel_1_3_axis";
			tireForceAppPointOffset="wheel_1_3_axis";
			maxHandBrakeTorque=300000;
		};
		class L4: L1
		{
			boneName="wheel_1_4_damper";
			steering=0;
			center="wheel_1_4_axis";
			boundary="wheel_1_4_bound";
			suspForceAppPointOffset="wheel_1_4_axis";
			tireForceAppPointOffset="wheel_1_4_axis";
			maxHandBrakeTorque=300000;
		};
		class R1: L1
		{
			boneName="wheel_2_1_damper";
			center="wheel_2_1_axis";
			boundary="wheel_2_1_bound";
			suspForceAppPointOffset="wheel_2_1_axis";
			tireForceAppPointOffset="wheel_2_1_axis";
			steering=1;
			side="right";
		};
		class R2: R1
		{
			boneName="wheel_2_2_damper";
			steering=1;
			center="wheel_2_2_axis";
			boundary="wheel_2_2_bound";
			suspForceAppPointOffset="wheel_2_2_axis";
			tireForceAppPointOffset="wheel_2_2_axis";
		};
		class R3: R1
		{
			boneName="wheel_2_3_damper";
			steering=0;
			center="wheel_2_3_axis";
			boundary="wheel_2_3_bound";
			suspForceAppPointOffset="wheel_2_3_axis";
			tireForceAppPointOffset="wheel_2_3_axis";
			maxHandBrakeTorque=300000;
		};
		class R4: R1
		{
			boneName="wheel_2_4_damper";
			steering=0;
			center="wheel_2_4_axis";
			boundary="wheel_2_4_bound";
			suspForceAppPointOffset="wheel_2_4_axis";
			tireForceAppPointOffset="wheel_2_4_axis";
			maxHandBrakeTorque=300000;
		};
	};
	terrainCoef=3;
	canFloat=0;
	waterAngularDampingCoef=10;
	waterPPInVehicle=0;
	waterResistanceCoef=0.5;
	engineShiftY=0.5;

	picture = "\StrykerPack\Data\UI\Picture_stryker_cv_CA.paa";
	Icon = "\StrykerPack\Data\UI\Icon_stryker_cv_CA.paa";
	mapSize = 8;
	vehicleClass = "Armored";
	radarType = 4;
	commanderCanSee = CanSeeAll;
	gunnerCanSee = CanSeeAll;
	driverCanSee = CanSeeAll;
	driverOpticsModel = "\A3\Weapons_F\Reticle\Optics_Driver_01_F"; // "\A3\Weapons_F\Reticle\Optics_Driver_01_F";
	class ViewOptics : ViewOptics
	{
		visionMode[] = {"Normal","NVG","Ti"};
		thermalMode[] = {0,1};
	};
	wheelCircumference = 3.656706;

/*----SFX-----*/

	outsideSoundFilter=true;
	insideSoundCoef = 0.8;
	soundGear[]={"",db-85,1};
	soundGetIn[]={"\StrykerPack\Data\sound\stryker_door",db0,1};
	soundGetOut[]={"\StrykerPack\Data\sound\stryker_door",db0,1, 30};
	soundEngineOnInt[] = {"\StrykerPack\Data\sound\stryker_int_on", db0, 1.0};
	soundEngineOnExt[] = {"\StrykerPack\Data\sound\stryker_ext_on", db0, 1.0, 100};
	soundEngineOffInt[] ={"\StrykerPack\Data\sound\stryker_int_off", db0, 1.0};
	soundEngineOffExt[] ={"\StrykerPack\Data\sound\stryker_ext_off", db0, 1.0, 100};

	buildCrash0[]={"StrykerPack\Data\sound\tank_building_01", db-3, 1,150};
	buildCrash1[]={"StrykerPack\Data\sound\tank_building_02", db-3, 1,150};
		buildCrash2[]={"StrykerPack\Data\sound\tank_building_03", db-3, 1,150};
		buildCrash3[]={"StrykerPack\Data\sound\tank_building_04", db-3, 1,150};
		soundBuildingCrash[]={buildCrash0, 0.25, buildCrash1, 0.25, buildCrash2, 0.25, buildCrash3, 0.25};

	WoodCrash0[]={"StrykerPack\Data\sound\tank_wood_01", db-3, 1,150};
	WoodCrash1[]={"StrykerPack\Data\sound\tank_wood_02", db-3, 1,150};
	WoodCrash2[]={"StrykerPack\Data\sound\tank_wood_03", db-3, 1,150};
	WoodCrash3[]={"StrykerPack\Data\sound\tank_wood_04", db-3, 1,150};
	soundWoodCrash[]={woodCrash0, 0.25, woodCrash1, 0.25, woodCrash2, 0.25, woodCrash3, 0.25};

	ArmorCrash0[]={"StrykerPack\Data\sound\tank_vehicle_01", db-3, 1,150};
	ArmorCrash1[]={"StrykerPack\Data\sound\tank_vehicle_02", db-3, 1,150};
	ArmorCrash2[]={"StrykerPack\Data\sound\tank_vehicle_03", db-3, 1,150};
	ArmorCrash3[]={"StrykerPack\Data\sound\tank_vehicle_04", db-3, 1,150};
	soundArmorCrash[]={ArmorCrash0, 0.25, ArmorCrash1, 0.25, ArmorCrash2, 0.25, ArmorCrash3, 0.25};

	class SoundEvents
	{
		class AccelerationIn
		{
			sound[] = {"\StrykerPack\Data\sound\stryker_int_acceleration", db-5, 1.0};
			limit = "0.15";
			expression = "engineOn*(1-camPos)*2*gmeterZ*((speed factor[1.5, 5]) min (speed factor[5, 1.5]))";
		};
		class AccelerationOut
		{
			sound[] = {"\StrykerPack\Data\sound\stryker_ext_acceleration", db-5, 1.0, 300};
			limit = "0.15";
			expression = "engineOn*camPos*2*gmeterZ*((speed factor[1.5, 5]) min (speed factor[5, 1.5]))";
		};
	};

	class Sounds
	{
	/*EXTERNAL SOUNDS BTR*/
		class Engine
		{
			sound[] =  {"\StrykerPack\Data\sound\stryker_ext_low", db3, 0.8, 200};
			frequency = "(randomizer*0.05+0.95)*rpm";
			//volume = "engineOn*camPos*(thrust factor[0.7, 0.2])";
			volume = "camPos*engineOn*((rpm factor[0.25, 0.4]) min (rpm factor[0.7, 0.5]))";
		};
		class EngineHighOut
		{
			sound[] = {"\StrykerPack\Data\sound\stryker_ext_mid", db3, 0.9, 300};
			frequency = "(randomizer*0.05+0.95)*rpm";
			//volume = "engineOn*camPos*(thrust factor[0.5, 0.9])";
			volume = "camPos*engineOn*(rpm factor[0.5, 0.8])";
		};
		class IdleOut
		{
			sound[] = {"\StrykerPack\Data\sound\stryker_ext_idle", db3, 1.0, 100};
			frequency = "1";
			//volume = "engineOn*camPos*(rpm factor[0.4, 0])";
			volume = "engineOn*camPos*(rpm factor[0.4, 0])";
		};
		class TiresRockOut
		{
			sound[] = {"\StrykerPack\Data\sound\ext-tires-rock2", db-10, 1.0, 50};
			frequency = "1";
			volume = "camPos*rock*(speed factor[2, 20])";
		};
		class TiresSandOut
		{
			sound[] = {"\StrykerPack\Data\sound\ext-tires-sand2", db-10, 1.0, 50};
			frequency = "1";
			volume = "camPos*sand*(speed factor[2, 20])";
		};
		class TiresGrassOut
		{
			sound[] = {"\StrykerPack\Data\sound\ext-tires-grass3", db-10, 1.0, 50};
			frequency = "1";
			volume = "camPos*grass*(speed factor[2, 20])";
		};
		class TiresMudOut
		{
			sound[] = {"\StrykerPack\Data\sound\ext-tires-mud2", db-10, 1.0, 50};
			frequency = "1";
			volume = "camPos*mud*(speed factor[2, 20])";
		};
		class TiresGravelOut
		{
			sound[] = {"\StrykerPack\Data\sound\ext-tires-gravel2", db-10, 1.0, 50};
			frequency = "1";
			volume = "camPos*gravel*(speed factor[2, 20])";
		};
		class TiresAsphaltOut
		{
			sound[] = {"\StrykerPack\Data\sound\ext-tires-asphalt3", db-10, 1.0, 50};
			frequency = "1";
			volume = "camPos*asphalt*(speed factor[2, 20])";
		};
		class NoiseOut
		{
			sound[] = {"\StrykerPack\Data\sound\noise3", db-5, 1.0, 50};
			frequency = "1";
			volume = "camPos*(damper0 max 0.04)*(speed factor[0, 8])";
		};
	/*INTERNAL SOUNDS BTR*/
		class EngineLowIn
		{
			sound[] = {"\StrykerPack\Data\sound\stryker_int_low", db3, 0.8};
			frequency = "(randomizer*0.05+0.95)*rpm";
			volume = "(1-camPos)*engineOn*((rpm factor[0.25, 0.4]) min (rpm factor[0.7, 0.5]))";				//volume = "((engineOn*thrust) factor[0.65, 0.2])*(1-camPos)";
		};
		class EngineHighIn
		{
			sound[] = {"\StrykerPack\Data\sound\stryker_int_mid", db3, 0.9};
			frequency = "(randomizer*0.05+0.95)*rpm";
			volume = "(1-camPos)*engineOn*(rpm factor[0.5, 0.8])";	    //volume = "((engineOn*thrust) factor[0.55, 1.0])*(1-camPos)";
		};
		class IdleIn
		{
			sound[] = {"\StrykerPack\Data\sound\stryker_int_idle", db3, 1.0};
			frequency = "1";
			volume = "engineOn*(rpm factor[0.4, 0])*(1-camPos)";//				volume = "engineOn*(rpm factor[0.4, 0])*(1-camPos)";
		};
		class TiresRockIn
		{
			sound[] = {"\StrykerPack\Data\sound\int-tires-rock2", db-15, 1.0};
			frequency = "1";
			volume = "(1-camPos)*rock*(speed factor[2, 20])";
		};
		class TiresSandIn
		{
			sound[] = {"\StrykerPack\Data\sound\int-tires-sand2", db-15, 1.0};
			frequency = "1";
			volume = "(1-camPos)*sand*(speed factor[2, 20])";
		};
		class TiresGrassIn
		{
			sound[] = {"\StrykerPack\Data\sound\int-tires-grass3", db-15, 1.0};
			frequency = "1";
			volume = "(1-camPos)*grass*(speed factor[2, 20])";
		};
		class TiresMudIn
		{
			sound[] = {"\StrykerPack\Data\sound\int-tires-mud2", db-15, 1.0};
			frequency = "1";
			volume = "(1-camPos)*mud*(speed factor[2, 20])";
		};
		class TiresGravelIn
		{
			sound[] = {"\StrykerPack\Data\sound\int-tires-gravel2", db-15, 1.0};
			frequency = "1";
			volume = "(1-camPos)*gravel*(speed factor[2, 20])";
		};
		class TiresAsphaltIn
		{
			sound[] = {"\StrykerPack\Data\sound\int-tires-asphalt3", db-15, 1.0};
			frequency = "1";
			volume = "(1-camPos)*asphalt*(speed factor[2, 20])";
		};
		class NoiseIn
		{
			sound[] = {"\StrykerPack\Data\sound\noise4", db-5, 1.0};
			frequency = "1";
			volume = "(damper0 max 0.04)*(speed factor[0, 8])*(1-camPos)";
		};
		class Movement
		{
			sound = "soundEnviron";
			frequency = "1";
			volume = "0";
		};
	};

	memoryPointsGetInDriver = "pos driver";
	memoryPointsGetInDriverDir = "pos driver dir";
	memoryPointsGetInCommander = "pos commander";
	memoryPointsGetInCommanderDir = "pos commander dir";
//		memoryPointsGetInGunner = "pos_gunner"; //ToDo: might be obsolete
//		memoryPointsGetInGunnerDir = "pos_gunner_dir"; //ToDo: might be obsolete
	memoryPointsGetInCargo = "pos cargo";
	memoryPointsGetInCargoDir = "pos cargo dir";
	memoryPointsGetInCoDriver = "pos codriver";
	memoryPointsGetInCoDriverDir = "pos codriver dir";
	getInAction = GetInHigh;
	getOutAction = GetOutHigh;
	cargoGetInAction[] = {"GetInLow"};
	cargoGetOutAction[] = {"GetOutLow"};

	memoryPointSupply = "supply";
		selectionFireAnim = "zasleh";
//  		selectionBrakeLights = "brzdove svetlo";
//		selectionBackLights = "zadni svetlo";
	memoryPointExhaust = "exhaust_start";
	memoryPointExhaustDir = "exhaust_end";
/*		memoryPointTrackFLL = "tyreTrack_1_1l"; // front left track, left offset
	memoryPointTrackFLR = "tyreTrack_1_1r"; // front left track, right offset
	memoryPointTrackBLL = "tyreTrack_1_2l"; // back left track, left offset
	memoryPointTrackBLR = "tyreTrack_1_2r"; // back left track, right offset
	memoryPointTrackFRL = "tyreTrack_2_1l"; // front right track, left offset
	memoryPointTrackFRR = "tyreTrack_2_1r"; // front right track, right offset
	memoryPointTrackBRL = "tyreTrack_2_2l"; // back right track, left offset
	memoryPointTrackBRR = "tyreTrack_2_2r"; // back right track, right offset */

	//For smoke launchers
	smokeLauncherGrenadeCount=6; //Number of smoke shells launched at once
	smokeLauncherVelocity=15; //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)

	damperSize = .1;
	damperForce = 1;

	turnCoef=4.0;
	steerAheadSimul=0.2;
	steerAheadPlan=0.3;

	//predictTurnSimul=1.5; // brake before turns
	//predictTurnPlan=1.5;

	enableGPS = true;

	transportSoldier = 0;
	side = 1; //West.
	crew = "B_crew_F";
	fuelCapacity = 246;
	armor = 150;
	damageResistance = 0.01199;
	crewVulnerable = false;
	maxSpeed = 100;
	threat[] = {1, 0.5, 0.5};
	viewCargoShadow = true;
	viewCargoShadowDiff = 0.05;
	viewDriverShadowDiff = 0.05;
	viewGunnerShadowDiff = 0.05;
	hideProxyInCombat = 1;
	driverIsCommander = 0;
	weapons[]={};
	magazines[]={};

	driverForceOptics = True;
	driverAction = Stryker_DriverOut_EP1;
	driverInAction = Stryker_Driver_EP1;
	// viewDriverInExternal = true;

	cargoAction[] = {BTR60_Cargo01};
	typicalCargo[]={B_Soldier_F, B_Soldier_F, B_Soldier_F, B_Soldier_F};
	gunnerHasFlares = true;

	LODTurnedOut = VIEW_PILOT;

	class HitPoints : HitPoints
	{
		class HitLFWheel:HitLFWheel{armor=0.3;};
		class HitLBWheel:HitLBWheel{armor=0.3;};
		class HitLMWheel:HitLMWheel{armor=0.3;};
		class HitLF2Wheel:HitLF2Wheel{armor=0.3;};

		class HitRFWheel:HitRFWheel{armor=0.3;};
		class HitRBWheel:HitRBWheel{armor=0.3;};
		class HitRMWheel:HitRMWheel{armor=0.3;};
		class HitRF2Wheel:HitRF2Wheel{armor=0.3;};

		class HitFuel {armor=0.14;material=-1;name="palivo";visual="";passThrough=1;};
		class HitEngine {armor=0.5;material=-1;name="motor";visual="";passThrough=1;};
	};

	class Turrets: Turrets
	{
		class MainTurret: MainTurret
		{
			body = "mainTurret";
			gun = "mainGun";
			gunnerAction = "Stryker_GunnerOut";
			gunnerInAction = "Stryker_Gunner";
			gunnerGetInAction = GetInHigh;
			gunnerGetOutAction = GetOutHigh;
			gunBeg = "muzzle"; //gunBeg = endpoint of the gun
			gunEnd = "chamber"; //gunEnd = chamber of the gun
			memoryPointsGetInGunner = "pos gunner";
			memoryPointsGetInGunnerDir = "pos gunner dir";
			memoryPointGun = "machinegun";
			selectionFireAnim = "zasleh";
			gunnerForceOptics = true;
			outGunnerMayFire = false;
			forcehidegunner = true;
			memoryPointGunnerOptics= "gunnerview";
			// gunnerOpticsModel = "\A3\Weapons_F\Reticle\Optics_Gunner_02_F";
			gunnerOpticsModel = "\A3\Weapons_F\Reticle\Optics_Gunner_02_F";
			memoryPointGunnerOutOptics= "";
			gunnerOutOpticsModel = "";
			hasGunner = true;
			castGunnerShadow = true;
			minElev = -25; maxElev = +60;
			minTurn = -360; maxTurn = +360;
			initElev=0;
			initTurn=0;
			gunnerFireAlsoInInternalCamera = true;
			// viewGunnerInExternal = true;
			gunnerOpticsEffect[] = {};
			class ViewOptics : ViewOptics
			{
				visionMode[] = {"Normal","NVG","Ti"};
				thermalMode[] = {0,1};
			};
			/*
			class ViewGunner: ViewGunner
			{
				minAngleY=-100; maxAngleY=100;
				initFov=0.42; minFov=0.22; maxFov=0.64;
			};
			*/
		};
	};

	class NVGMarkers
	{
		class NVGMarker01
		{
			name = "nvg_marker";
			color[] = {0.03, 0.003, 0.003, 1};
			ambient[] = {0.003, 0.0003, 0.0003, 1};
			brightness = 0.001;
			blinking = 1;
		};
	};

	class Library{libTextDesc = $STR_LIB_STRYKER;};
};
//#########################################  M 1 1 2 6  I C V   M 2   #########################################
class M1126_ICV_BASE_EP1: StrykerBase_EP1
{
	scope = 0;
	displayName= "M1126 ICV M2 CROWS";
	armor = 160; // slat armor
	damageResistance = 0.00820;
	transportSoldier = 9;
	class Turrets: Turrets
	{
		class ObsTurret: NewTurret
		{
			body = "ObsTurret";
			gun = "ObsGun";
			animationSourceBody="ObsTurret";
			animationSourceGun="ObsGun";

			proxyType = CPCommander;
			proxyIndex = 1;
			gunnerName = M1126 M2 Gunner;
			primaryGunner = 1;
			primaryObserver = 1;
			gunBeg = "gun_muzzle"; //gunBeg = endpoint of the gun
			gunEnd = "gun_chamber"; //gunEnd = chamber of the gun
			animationSourceHatch = "hatchCommander";
			minElev=-15; maxElev=+20; initElev=0;
			commanding = 2;
			outGunnerMayFire = false;
			// viewGunnerInExternal = 1;
			// gunnerOpticsModel = "\A3\Weapons_F\Reticle\Optics_Gunner_02_F.p3d"; // "\ca\tracked\optika_stryker_gunner";
			gunnerOpticsModel = "\A3\Weapons_F\Reticle\Optics_Gunner_02_F";
			gunnerForceOptics = true;
			memoryPointGunnerOptics= "gunnerview";
			memoryPointsGetInGunner= "pos gunner";
			memoryPointsGetInGunnerDir= "pos gunner dir";
			gunnerGetInAction = GetInHigh;
			gunnerGetOutAction = GetOutHigh;
			gunnerAction = Stryker_CommanderOut_EP1;
			gunnerInAction = Stryker_Commander_EP1;

			gunnerOpticsEffect[] = {};
			class ViewOptics
			{
				initAngleX=0; minAngleX=-30; maxAngleX=+30;
				initAngleY=0; minAngleY=-100; maxAngleY=+100;
				initFov=0.300; minFov=0.015; maxFov=0.300;
				visionMode[] = {"Normal","NVG","Ti"};
				thermalMode[] = {0,1};
			};
			soundServo[]={\StrykerPack\Data\sound\servo3, db-35, 1.0};
		};
	};
	class AnimationSources:AnimationSources
	{
		class ReloadAnim{source="reload";weapon="HMG_M2";};
		class ReloadMagazine{source="reloadmagazine";weapon="HMG_M2";};
		class Revolving{source="revolving";weapon="HMG_M2";};
	};

	class TransportMagazines
	{

	};

	class TransportWeapons
	{

	};

	class Damage
	{
		tex[]={};
		mat[]=
		{
			DAMAGE_MAT(ICV)
			DAMAGE_MAT(stryker_body1_green)
			DAMAGE_MAT(stryker_body2_green)
			DAMAGE_MAT(stryker_alfa_green)
			DAMAGE_MAT(stryker_interior1)
			DAMAGE_MAT(stryker_command_green)

			"a3\data_f\default.rvmat",
			"a3\data_f\default.rvmat",
			"StrykerPack\Data\default_destruct.rvmat",
		};
	};
};
class M1126_ICV_M2_EP1: M1126_ICV_BASE_EP1
{
	scope = 2;
	displayName= "M1126 ICV M2 CROWS";
	model = "\StrykerPack\M1126_ICV_m2";
	Icon = "\StrykerPack\Data\UI\Icon_stryker_cv_CA.paa";

	class Turrets:Turrets
	{
		class ObsTurret: ObsTurret
		{
			weapons[] = {HMG_M2,SmokeLauncher};
			turretInfoType = "RscWeaponRangeZeroing";
			discreteDistance[] = {100,200,300,400,500,600,700,800,900,1000};
			discreteDistanceInitIndex = 1;
			magazines[] = {100Rnd_127x99_mag_Tracer_Red,100Rnd_127x99_mag_Tracer_Red,100Rnd_127x99_mag_Tracer_Red,100Rnd_127x99_mag_Tracer_Red,100Rnd_127x99_mag_Tracer_Red,100Rnd_127x99_mag_Tracer_Red,SmokeLauncherMag,SmokeLauncherMag};
		};
	};

	HiddenSelections[] = {"camo", "camo1"};
	HiddenSelectionsTextures[] =
	{
		"StrykerPack\Data\stryker_body1_des_co.paa",
		"StrykerPack\Data\stryker_body2_des_co.paa",
	};
};

//#########################################   M 1 1 2 6  I C V  M K 1 9 #########################################
class M1126_ICV_mk19_EP1: M1126_ICV_BASE_EP1
{
	scope = 2;
	model = "\StrykerPack\M1126_ICV_mk19";
	picture = "\StrykerPack\Data\UI\Picture_stryker_cv_CA.paa";
	Icon = "\StrykerPack\Data\UI\Icon_stryker_cv_CA.paa";
	displayName= "M1126 ICV MK19 CROWS";
	threat[] = {1, 0.5, 0};

	class Turrets:Turrets
	{
		class ObsTurret: ObsTurret
		{
			weapons[]={GMG_40mm,SmokeLauncher};
			turretInfoType = "RscWeaponRangeZeroing";
			discreteDistance[] = {100,200,300,400,500,600};
			discreteDistanceInitIndex = 1;
			magazines[]={64Rnd_40mm_G_belt,64Rnd_40mm_G_belt,64Rnd_40mm_G_belt,64Rnd_40mm_G_belt,SmokeLauncherMag,SmokeLauncherMag};
			class GunFire :WeaponCloudsMGun{interval = 0.01;};
		};
	};

	HiddenSelections[] = {"camo", "camo1"};
	HiddenSelectionsTextures[] =
	{
		"StrykerPack\Data\stryker_body1_des_co.paa",
		"StrykerPack\Data\stryker_body2_des_co.paa",
	};

};

//#########################################   M 1 1 3 0  C V   #########################################
class M1130_CV_EP1: M1126_ICV_M2_EP1
{
	scope = 2;
	model = "\StrykerPack\M1130_CV";
	picture = "\StrykerPack\Data\UI\Picture_stryker_cv_CA.paa";
	Icon = "\StrykerPack\Data\UI\Icon_stryker_cv_CA.paa";
	displayName= "M1130 CV M2 CROWS";
	transportSoldier = 0;

	HiddenSelections[] = {"camo", "camo1"};
	HiddenSelectionsTextures[] =
	{
		"StrykerPack\Data\stryker_body1_des_co.paa",
		"StrykerPack\Data\stryker_body2_des_co.paa",
	};
};

//#########################################   M 1 1 2 9  M C   #########################################
class M1129_MC_EP1: M1126_ICV_mk19_EP1
{
	scope = 2; //public
	model = "\StrykerPack\M1129_MC";
	picture = "\StrykerPack\Data\UI\Picture_stryker_mc_CA.paa";
	Icon = "\StrykerPack\Data\UI\Icon_stryker_mc_CA.paa";
	displayName= "M1129 MC MK19 CROWS";
	transportSoldier = 0;
	threat[] = {1, 0.5, 0};

	artilleryScanner = 1;
	ARTY_IsArtyVehicle = 0;

	class Damage
	{
		tex[]={};
		mat[]=
		{
			DAMAGE_MAT(ICV)
			DAMAGE_MAT(stryker_body1_green)
			DAMAGE_MAT(stryker_body2_green)
			DAMAGE_MAT(stryker_alfa_green)
			DAMAGE_MAT(stryker_command_green)

			DAMAGE_MAT(stryker_body1_mortar_green)
			DAMAGE_MAT(stryker_interior1_mortar_green)
			DAMAGE_MAT(stryker_interior2)
			DAMAGE_MAT(stryker_interior3_mortar)
			DAMAGE_MAT(stryker_interior4_mortar)

			"a3\data_f\default.rvmat",
			"a3\data_f\default.rvmat",
			"StrykerPack\Data\default_destruct.rvmat",
		};
	};
	class Turrets:Turrets
	{
		class MainTurret: MainTurret
		{
			weapons[]={mortar_82mm};
			turretInfoType = "RscWeaponRangeFinder";
			soundServo[]={\StrykerPack\Data\sound\servo3, db-35, 1.0};
			magazines[]={8Rnd_82mm_Mo_shells, 8Rnd_82mm_Mo_shells, 8Rnd_82mm_Mo_shells, 8Rnd_82mm_Mo_Smoke_white, 8Rnd_82mm_Mo_Flare_white};
			gunnerOpticsModel = "\A3\Weapons_F\Reticle\optics_empty";
			memoryPointGunnerOptics= "gunnerview";
			visionMode[] = {};
			minTurn=-100; maxTurn=+100; initTurn=0;
			minElev=-5; maxElev=+35; initElev=0;
			gunBeg = "muzzle"; //gunBeg = endpoint of the gun
			gunEnd = "chamber"; //gunEnd = chamber of the gun
			outGunnerMayFire = false;
			inGunnerMayFire = true;
		};
		class ObsTurret: ObsTurret
		{
			gunnerName = M1129 MC MK19 Commander;
			memoryPointGunnerOptics= "commanderview";
		};
	};

	HiddenSelections[] = {"camo", "camo1"};
	HiddenSelectionsTextures[] =
	{
		"StrykerPack\Data\stryker_body1_mortar_des_co.paa",
		"StrykerPack\Data\stryker_body2_des_co.paa",
	};
};

//#########################################   M 1 1 3 5   A T G M V   #########################################
class M1135_ATGMV_EP1: StrykerBase_EP1
{
	scope = 2; //public
	model = "\StrykerPack\M1135_ATGMV";
	picture = "\StrykerPack\Data\UI\Picture_stryker_atg_mv_CA.paa";
	Icon = "\StrykerPack\Data\UI\Icon_stryker_atgmv_CA.paa";
	mapSize = 8;
	displayName= "M1135 ATGMV";
	transportSoldier = 0;
	memoryPointMissile[] = {"rocket_begin",""};
	memoryPointMissileDir[] = {"rocket_end",""};
	armor = 160; // slat armor
	damageResistance = 0.00820;
	threat[] = {0, 1, 0};
	class Damage
	{
		tex[]={};
		mat[]=
		{
			DAMAGE_MAT(stryker_tow_green)
			DAMAGE_MAT(stryker_body1_green)
			DAMAGE_MAT(stryker_body2_green)
			DAMAGE_MAT(stryker_alfa_green)

			"a3\data_f\default.rvmat",
			"a3\data_f\default.rvmat",
			"StrykerPack\Data\default_destruct.rvmat",
		};
	};
	class Turrets:Turrets
	{
		class MainTurret: MainTurret
		{
			gunBeg = "rocket_end";
			gunEnd = "rocket_begin";
			weapons[]={missiles_titan,SmokeLauncher};
			soundServo[]={\StrykerPack\Data\sound\servo3, db-35, 1.0};
			magazines[] = {2Rnd_GAT_missiles,2Rnd_GAT_missiles, 2Rnd_GAT_missiles, SmokeLauncherMag, SmokeLauncherMag};
			gunnerOpticsModel = "\A3\Weapons_F\Reticle\optics_TOW_TI";
			gunnerOpticsEffect[] = {"TankGunnerOptics2","OpticsBlur1","OpticsCHAbera1"};
			gunnerForceOptics = true;
			animationSourceHatch = "hatchCommander";
			class ViewOptics
			{
				initAngleX=0; minAngleX=-30; maxAngleX=+30;
				initAngleY=0; minAngleY=-100; maxAngleY=+100;
				initFov=0.200; minFov=0.025; maxFov=0.200;
				visionMode[] = {"Normal","Ti"};
				thermalMode[] = {0,1};
			};
		};
	};

	class TransportMagazines
	{

	};

	class TransportWeapons
	{

	};

	HiddenSelections[] = {"camo", "camo1"};
	HiddenSelectionsTextures[] =
	{
		"StrykerPack\Data\stryker_body1_des_co.paa",
		"StrykerPack\Data\stryker_body2_des_co.paa",
	};

    dammageHalf[]={};
	dammageFull[]={};

};

//#########################################  M 1 1 2 8  M G S  #########################################
class M1128_MGS_EP1: StrykerBase_EP1
{
	scope = 2; //public
	model = "\StrykerPack\M1128_MGS";
	picture = "\StrykerPack\Data\UI\Picture_stryker_mgs_CA.paa";
	Icon = "\StrykerPack\Data\UI\Icon_stryker_mgs_CA.paa";
	mapSize = 8;
	displayName= "M1128 MGS";
	threat[] = {1, 1, 0.3};
	class Damage
	{
		tex[]={};
		mat[]=
		{
			DAMAGE_MAT(ICV)
			DAMAGE_MAT(stryker_mgs_body1_green)
			DAMAGE_MAT(stryker_body2_green)
			DAMAGE_MAT(stryker_mgs_green)
			DAMAGE_MAT(stryker_alfa_green)
			DAMAGE_MAT(stryker_interior1)

			"a3\data_f\default.rvmat",
			"a3\data_f\default.rvmat",
			"StrykerPack\Data\default_destruct.rvmat",
		};
	};

	class AnimationSources:AnimationSources
	{
		class ReloadAnim{source="reload";weapon="HMG_M2";};
		class ReloadMagazine{source="reloadmagazine";weapon="HMG_M2";};
		class Revolving{source="revolving";weapon="HMG_M2";};
		class recoil_source{source="reload";weapon="cannon_105mm";};
	};

	class Turrets: Turrets
	{
		class MainTurret: MainTurret
		{
			weapons[]={cannon_105mm,HMG_M2,SmokeLauncher};
			magazines[]={40Rnd_105mm_APFSDS_T_Red,20Rnd_105mm_HEAT_MP_T_Red,100Rnd_127x99_mag_Tracer_Red,100Rnd_127x99_mag_Tracer_Red,100Rnd_127x99_mag_Tracer_Red,100Rnd_127x99_mag_Tracer_Red,100Rnd_127x99_mag_Tracer_Red,100Rnd_127x99_mag_Tracer_Red,SmokeLauncherMag,SmokeLauncherMag};
			soundServo[]={\StrykerPack\Data\sound\servo3, db-35, 1.0};
			minElev=-5; maxElev=+50; initElev=0;
/*				minTurn=-360; maxTurn=+360;
			gunnerAction = Stryker_CommanderOut_EP1;
			gunnerInAction = Stryker_Commander_EP1;
			forceHideGunner = false;
			gunnerOutOpticsModel = "";*/
			memoryPointGun = "machinegun";
			selectionFireAnim = "zasleh_1";
			gunBeg = "konec hlavne";
			gunEnd = "usti hlavne";
			body = "MainTurret";
			gun =  "MainGun";
			animationSourceBody = "MainTurret";
			animationSourceGun =  "MainGun";
			gunnerForceOptics = true;
			outGunnerMayFire = 0;
			startEngine = 1;
			primaryGunner = 0;
			primaryObserver = 1;
			commanding = 1;
			gunnerOpticsEffect[] = {"TankGunnerOptics2","OpticsBlur1","OpticsCHAbera1"};
			class OpticsIn
			{
				class Wide //3x
				{
					initAngleX=0; minAngleX=-30; maxAngleX=+30;
					initAngleY=0; minAngleY=-100; maxAngleY=+100;
					initFov=0.155; minFov=0.155; maxFov=0.155;
					visionMode[] = {"Normal","NVG","Ti"};
					thermalMode[] = {0,1};
					gunnerOpticsModel = "\A3\Weapons_F\Reticle\Optics_Gunner_APC_01_w_F";
					gunnerOpticsEffect[] = {"TankGunnerOptics2","OpticsBlur1","OpticsCHAbera1"};
				};
				class Narrow : Wide //10x
				{
					gunnerOpticsModel = "\A3\Weapons_F\Reticle\Optics_Gunner_APC_01_n_F";
					gunnerOpticsEffect[] = {"TankGunnerOptics2","OpticsBlur1","OpticsCHAbera1"};
					initFov=0.047; minFov=0.047; maxFov=0.047;
				};
			};
			class Turrets{};
			/*
			class Turrets
			{
				class CommanderOptics: NewTurret
				{
					weapons[] = {SmokeLauncher};
					magazines[] = {SmokeLauncherMag,SmokeLauncherMag};
					proxyType = CPCommander;
					proxyIndex = 1;
					gunnerName = M1128 MGS Gunner;
					primaryGunner = 0;
					primaryObserver = 1;
					gunnerOpticsShowCursor=0;
					body = "obsTurret";
					gun = "obsGun";
					animationSourceBody =  "obsTurret";
					animationSourceGun =   "obsGun";
					animationSourceHatch = "hatchCommander";
					soundServo[] = {"", db-50, 1.0};
					startEngine = 0;

					minElev=-15; maxElev=+20; initElev=0;
					minTurn=-360; maxTurn=+360; initTurn=0;
					commanding = 2;
					// viewGunnerInExternal = 1;
					gunnerOpticsModel = "\ca\weapons\2Dscope_com2";
					gunnerOutOpticsModel = "";
					visionMode[] = {};
					gunnerOutOpticsColor[] = {0, 0, 0, 1};
					gunnerForceOptics = true;
					gunnerOutForceOptics = false;
					gunnerOutOpticsShowCursor = false;
					memoryPointGunnerOutOptics = "commander_weapon_view";
					memoryPointGunnerOptics= "commanderview";
					memoryPointsGetInGunner= "pos driver";
					memoryPointsGetInGunnerDir= "pos driver dir";
					gunnerOpticsEffect[] = {};
//						gunnerInAction = Stryker_Gunner;
//						gunnerAction = Stryker_GunnerOut;
					outGunnerMayFire = false;
					inGunnerMayFire = true;
					class ViewOptics : ViewOptics
					{
						initFov=0.155; minFov=0.155; maxFov=0.155;
					};
					stabilizedInAxes = 0;
				};
			};
			*/
		};
	};
	HiddenSelections[] = {"camo", "camo1", "camo2"};
	HiddenSelectionsTextures[] =
	{
		"StrykerPack\Data\stryker_mgs_body1_des_co.paa",
		"StrykerPack\Data\stryker_body2_des_co.paa",
		"StrykerPack\Data\stryker_mgs_des_co.paa"
	};

	dammageHalf[]={};
	dammageFull[]={};

};

//#########################################   M 1 1 3 3  M E V   #########################################
class M1133_MEV_EP1: StrykerBase_EP1
{
	scope = 2; //public
	model = "\StrykerPack\M1133_MEV";
	picture = "\StrykerPack\Data\UI\Picture_stryker_mev_CA.paa";
	Icon = "\StrykerPack\Data\UI\Icon_stryker_mev_CA.paa";
	mapSize = 8;
	displayName= "M1133 MEV";
	vehicleClass = "Support";
	armor = 160; // slat armor
	damageResistance = 0.00820;
	threat[] = {0, 0, 0};

	attendant = 1;
	memoryPointSupply = "ramp";

	transportSoldier = 4;

	class Turrets {};
	class Damage
	{
		tex[]={};
		mat[]=
		{
			DAMAGE_MAT(stryker_body1_green)
			DAMAGE_MAT(stryker_body2_green)
			DAMAGE_MAT(stryker_alfa_green)
			DAMAGE_MAT(stryker_medevac_green)

			"a3\data_f\default.rvmat",
			"a3\data_f\default.rvmat",
			"StrykerPack\Data\default_destruct.rvmat",
		};
	};

	HiddenSelections[] = {"camo", "camo1"};
	HiddenSelectionsTextures[] =
	{
		"StrykerPack\Data\stryker_body1_des_co.paa",
		"StrykerPack\Data\stryker_body2_des_co.paa",
	};

	dammageHalf[]={};
	dammageFull[]={};
};
};

Share this post


Link to post
Share on other sites

Yes maybe i can find something.

to calculate MOI:

MOI = 0.5 * (Wheel mass) * (Wheel Radius) * (Wheel Radius);

Share this post


Link to post
Share on other sites

It seems to drive fine however the model has spawned 1m or so in the air, I'm thinking it was something to do with the land contacts but I could be wrong as I don't normally do car mods.

Share this post


Link to post
Share on other sites

Maybe your wheelCircumference is a little bit too high but exept this all seems good.

This is how i calculate my MOI:

Determinate wheel radius:

http://i39.servimg.com/u/f39/18/84/74/35/tuto_m10.png

Then : MOI = 0.5 * (Wheel mass) * (Wheel Radius) * (Wheel Radius);

It's of course not perfect so you are gonna need to tweak it but it gives you a base.

Edited by MrEwok

Share this post


Link to post
Share on other sites

I removed simulation = "carx" and it was back on the ground. I'm guessing it has something to do with the config.

Share this post


Link to post
Share on other sites

It's can be a geophysx Lod issue.

Be sur that you physx lod have convex topology , without mass and wheels.

Also i already have issues when my bound points where set too low.

Share this post


Link to post
Share on other sites

@MrEwok Thanks again for all your help, I think I have it figured out now :)

Share this post


Link to post
Share on other sites

hey man let me know if you need any testing done with them. I cant wait to see strykers back on the game. Hella happy you are bringing not just the stryker but all variants ^^

Share this post


Link to post
Share on other sites

This sounds really good, I've been waiting for someone to create a Stryker or port them from A2! Simple question, are all of the variants going to have the SLATTS? If so that would be cool. But don't want to put to much work on your back.

Best of luck, looking forward to this release :D

Share this post


Link to post
Share on other sites

Thanks everyone :)

@Drifter Yeah there will be versions with and without SLAT armour. If you check the op you can see what I have planned for this mod.

@lincolnlou I'll let you know if I ever need any testers.

Edited by deltagamer

Share this post


Link to post
Share on other sites

Almost ready for the first initial release.

BWiQpXa.jpg

What I need to finish:

- Sound echo - Now Fixed

- Wheels not spinning when accelerating (model.cfg issue)

- A few minor errors

Once I have those out of the way I will release it and wait to get some feedback on the vehicles. Then I will start adding the new features I planned to add mentioned on the op.

Edited by deltagamer

Share this post


Link to post
Share on other sites
Almost ready for the first initial release.

http://i.imgur.com/BWiQpXa.jpg

What I need to finish:

- Sound echo

- Wheels not spinning when accelerating (model.cfg issue)

- A few minor errors

Once I have those out of the way I will release it and wait to get some feedback on the vehicles. Then I will start adding the new features I planned to add mentioned on the op.

Looking great!

Can't wait for you to release these! Good work. Glad to see all these variants instead of only having like, 1 or 2 variants. Keeping my eye out on PlayWithSix and this post.

Share this post


Link to post
Share on other sites

Sound Echo? you mean in interior view?

If Yes just add: attenuationEffectType = "TankAttenuation"; before your sounds in baseClass

Edited by MrEwok

Share this post


Link to post
Share on other sites

Have you thought at long term to include the Firing from Vehicles feature, it would be awesome to be aboe to shoot from the hatches ( as BTW soldiers in Strykers do ).

Share this post


Link to post
Share on other sites

@Drifter Thanks :)

@MrEwok Thanks that might just help :D

@MistyRonin Yeah I have thought about it. I was thinking about taking the MC variant and removing the mortar and having soldiers stand in the back however I'm not sure yet but I'am open to ideas.

---------- Post added at 23:00 ---------- Previous post was at 22:54 ----------

@MrEwok Thanks again that fixed it :ok:

Share this post


Link to post
Share on other sites
@MistyRonin Yeah I have thought about it. I was thinking about taking the MC variant and removing the mortar and having soldiers stand in the back however I'm not sure yet but I'am open to ideas.

That would be a great first step, but as far as I know, in combat soldiers use all hatches available even in the "normal" strykers.

A good first hand account on how Strykers are used and how soldiers fight on them in this book:

Stryker: The Siege of Sadr City

If you can't or don't want to buy the book, the prologue is for free, and gives already some nice hints.

Share this post


Link to post
Share on other sites

@MistyRonin Thanks for the recommendation of the book I will have to look into that :) As for the hatches if I took a MC model and removed the mortar I could have at least 4 - 5 soldiers in the back using the new FFV feature. If I did the normal ICV model then I would only have 2 to 3 soldiers using the FFV feature. However I could do both I'm still looking into it but I may post some pictures of what I have experimented with.

I found this and it helped me out with the use of hatches as you can see the soldiers using it.

Share this post


Link to post
Share on other sites

Great to see you´re taking care of the Strykers deltagamer! I was hoping to see them soon, since they would also fit in the ARMA 3 storyline IMO. I have four questions I´d like to ask.

1. Do you mean the OD green paint by "woodland camo"?

2. Would you mind replacing the red diamond with the red cross on the MEV?

3. Would you consider adding this Stryker with the 30mm turret to your list? -->

4. How about the "2035 NATO" brown paint job?

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×