#include "BIS_AddonInfo.hpp" #include "basicdefines_A3.hpp" class DefaultEventhandlers; #include "CfgPatches.hpp" class WeaponFireGun; class WeaponCloudsGun; class WeaponFireMGun; class WeaponCloudsMGun; class CfgVehicles { class LandVehicle; class Car: LandVehicle { class HitPoints; class NewTurret; }; class Car_F: Car { class Turrets { class MainTurret: NewTurret { class ViewOptics; class ViewGunner; }; }; class HitPoints /// we want to use hitpoints predefined for all cars { class HitLFWheel; class HitLF2Wheel; class HitRFWheel; class HitRF2Wheel; class HitBody; class HitFuel; class HitEngine; class HitGlass1{}; class HitGlass2; class HitGlass3; class HitGlass4; }; class EventHandlers; class AnimationSources; }; class Offroad_01_base_F: car_f {}; class BRAF_LR_01_Base: Offroad_01_base_F { selectionBackLights = "zadni svetlo"; selectionBrakeLights = "brzdove svetlo"; model = "braf\braf_soft\braf_land_rover\braf_LR.p3d"; /// simple path to model picture = "braf\braf_soft\braf_land_rover\DATA\UI\Picture_lr_CA.paa"; /// just some icon in command bar icon = "braf\braf_soft\braf_land_rover\data\UI\icon_lr_transport_ca.paa"; /// icon in map // imcompleto precisa ser feito vehicleClass = "BRAF_Car"; displayName = "Defender 110 SW"; /// displayed in Editor hiddenSelections[] = { "camo1", "camo2" }; hiddenSelectionsTextures[] = { "braf\braf_soft\braf_land_rover\data\braf_landrover_out_co.paa", "braf\braf_soft\braf_land_rover\data\braf_landrover_in_co.paa" }; terrainCoef = 2.5; /// different surface affects this car more, stick to tarmac turnCoef = 2.5; /// should match the wheel turn radius precision = 10; /// how much freedom has the AI for its internal waypoints - lower number means more precise but slower approach to way brakeDistance = 3.0; /// how many internal waypoints should the AI plan braking in advance acceleration = 15; /// how fast acceleration does the AI think the car has fireResistance = 5; /// lesser protection against fire than tanks armor = 32; /// just some protection against missiles, collisions and explosions cost = 50000; /// how likely is the enemy going to target this vehicle afmax = 100; transportMaxBackpacks = 8; /// just some backpacks fit the trunk by default transportSoldier = 4; /// number of cargo except driver cargoProxyIndexes[] = {4,5,6,7}; getInProxyOrder[] = {1,2,3,4,5,6,7}; class CargoTurret; class Turrets: Turrets { class CargoTurret_01: CargoTurret { gunnerAction = "passenger_inside_7"; memoryPointsGetInGunner = "pos cargo RF"; memoryPointsGetInGunnerDir = "pos cargo RF dir"; gunnerName = "$STR_A3_TURRETS_CARGOTURRET_R1"; gunnerCompartments = "Compartment2"; proxyIndex = 1; isPersonTurret = 3; canHideGunner = 0; allowLauncherIn = 0; allowLauncherOut = 0; class TurnIn { limitsArrayTop[] = {{23.9621,-61.2561},{14.3315,-18.7728}}; limitsArrayBottom[] = {{-19.6203,-79.3331},{-16.2632,-23.6018}}; }; class dynamicViewLimits { CargoTurret_02[] = {-65,75}; }; }; class CargoTurret_02: CargoTurret_01 { gunnerAction = "passenger_inside_7"; gunnerName = "$STR_A3_TURRETS_CARGOTURRET_L2"; memoryPointsGetInGunner = "pos cargo LR"; memoryPointsGetInGunnerDir = "pos cargo LR dir"; proxyIndex = 2; class TurnIn { limitsArrayTop[] = {{37.1488,-71.9003},{36.4967,92.2757}}; limitsArrayBottom[] = {{-22.1832,-70.0989},{-13.9068,-22.8107},{-7.1236,75.6849},{-7.8564,102.5826}}; }; class dynamicViewLimits { CargoTurret_01[] = {-75,65}; }; }; class CargoTurret_03: CargoTurret_01 { gunnerAction = "passenger_inside_7"; gunnerName = "$STR_A3_TURRETS_CARGOTURRET_R2"; memoryPointsGetInGunner = "pos cargo RR"; memoryPointsGetInGunnerDir = "pos cargo RR dir"; proxyIndex = 3; class TurnIn { limitsArrayTop[] = {{23.9621,-61.2561},{14.3315,-18.7728}}; limitsArrayBottom[] = {{-19.6203,-79.3331},{-16.2632,-23.6018}}; }; class dynamicViewLimits { CargoTurret_01[] = {5,75}; CargoTurret_02[] = {-15,75}; CargoTurret_04[] = {-75,75}; }; }; }; /// some values from parent class to show how to set them up wheelDamageRadiusCoef = 0.9; /// for precision tweaking of damaged wheel size wheelDestroyRadiusCoef = 0.4; /// for tweaking of rims size to fit ground maxFordingDepth = 0.5; /// how high water would damage the engine of the car waterResistance = 1; /// if the depth of water is bigger than maxFordingDepth it starts to damage the engine after this time crewCrashProtection = 0.25; /// multiplier of damage to crew of the vehicle => low number means better protection driverLeftHandAnimName = "drivewheel"; /// according to what bone in model of car does hand move driverRightHandAnimName = "drivewheel"; /// beware, non-existent bones may cause game crashes (even if the bones are hidden during play) class TransportItems /// some first aid kits in trunk according to safety regulations { item_xx(FirstAidKit,4); }; #include "cfg_TextureSources.hpp" driverAction = driver_offroad01; /// what action is going the driver take inside the vehicle. Non-existent action makes the vehicle inaccessible cargoAction[] = { passenger_generic01_foldhands, passenger_generic01_foldhands, passenger_generic01_foldhands, passenger_generic01_foldhands, passenger_generic01_foldhands}; /// the same of all the crew getInAction = GetInLow; /// how does driver look while getting in getOutAction = GetOutLow; /// and out cargoGetInAction[] = {"GetInLow"}; /// and the same for the rest, if the array has fewer members than the count of crew, the last one is used for the rest cargoGetOutAction[] = {"GetOutLow"}; /// that means all use the same in this case #include "sounds.hpp" /// sounds are in a separate file to make this one simple #include "pip.hpp" /// PiPs are in a separate file to make this one simple #include "physx.hpp" /// PhysX settings are in a separate file to make this one simple class PlayerSteeringCoefficients /// steering sensitivity configuration { turnIncreaseConst = 0.3; // basic sensitivity value, higher value = faster steering turnIncreaseLinear = 1.0; // higher value means less sensitive steering in higher speed, more sensitive in lower speeds turnIncreaseTime = 1.0; // higher value means smoother steering around the center and more sensitive when the actual steering angle gets closer to the max. steering angle turnDecreaseConst = 5.0; // basic caster effect value, higher value = the faster the wheels align in the direction of travel turnDecreaseLinear = 3.0; // higher value means faster wheel re-centering in higher speed, slower in lower speeds turnDecreaseTime = 0.0; // higher value means stronger caster effect at the max. steering angle and weaker once the wheels are closer to centered position maxTurnHundred = 0.7; // coefficient of the maximum turning angle @ 100km/h; limit goes linearly to the default max. turn. angle @ 0km/h }; /// memory points where do tracks of the wheel appear *****(complete by OdyseusBR)****** // front left track, left offset memoryPointTrackFLL = "TrackFLL"; // front left track, right offset memoryPointTrackFLR = "TrackFLR"; // back left track, left offset memoryPointTrackBLL = "TrackBLL"; // back left track, right offset memoryPointTrackBLR = "TrackBLR"; // front right track, left offset memoryPointTrackFRL = "TrackFRL"; // front right track, right offset memoryPointTrackFRR = "TrackFRR"; // back right track, left offset memoryPointTrackBRL = "TrackBRL"; // back right track, right offset memoryPointTrackBRR = "TrackBRR"; class Damage /// damage changes material in specific places (visual in hitPoint) { tex[]={}; mat[]= { "braf\braf_soft\braf_land_rover\data\braf_landrover_out.rvmat", "braf\braf_soft\braf_land_rover\data\LR_base_damage.rvmat", "braf\braf_soft\braf_land_rover\data\LR_base_destruct.rvmat", "braf\braf_soft\braf_land_rover\data\braf_landrover_glass.rvmat", "braf\braf_soft\braf_land_rover\data\LR_glass_damage.rvmat", "braf\braf_soft\braf_land_rover\data\LR_glass_destruct.rvmat", /*"braf\braf_soft\braf_land_rover\data\LR_Special.rvmat", "braf\braf_soft\braf_land_rover\data\LR_Special_damage.rvmat", "braf\braf_soft\braf_land_rover\data\LR_Special_destruct.rvmat",*/ "a3\data_f\default.rvmat", "a3\data_f\default.rvmat", "a3\data_f\default_destruct.rvmat" }; }; /// class exhaust is complete ****(Complete by Bento)***** class Exhausts /// specific exhaust effects for the car { class Exhaust1 /// the car has two exhausts - each on one side { position = "vyfuk start"; /// name of initial memory point direction = "vyfuk konec"; /// name of memory point for exhaust direction effect = "ExhaustsEffect"; /// what particle effect is it going to use }; }; class Reflectors /// only front lights are considered to be reflectors to save CPU { class LightCarHeadL01 /// lights on each side consist of two bulbs with different flares { color[] = {1900, 1800, 1700}; /// approximate colour of standard lights ambient[] = {5, 5, 5}; /// nearly a white one position = "LightCarHeadL01"; /// memory point for start of the light and flare direction = "LightCarHeadL01_end"; /// memory point for the light direction hitpoint = "Light_L"; /// point(s) in hitpoint lod for the light (hitPoints are created by engine) selection = "Light_L"; /// selection for artificial glow around the bulb, not much used any more size = 1; /// size of the light point seen from distance innerAngle = 100; /// angle of full light outerAngle = 179; /// angle of some light coneFadeCoef = 10; /// attenuation of light between the above angles intensity = 1; /// strength of the light useFlare = true; /// does the light use flare? dayLight = false; /// switching light off during day saves CPU a lot flareSize = 1.0; /// how big is the flare class Attenuation { start = 1.0; constant = 0; linear = 0; quadratic = 0.25; hardLimitStart = 30; /// it is good to have some limit otherwise the light would shine to infinite distance hardLimitEnd = 60; /// this allows adding more lights into scene }; }; class LightCarHeadR01: LightCarHeadL01 { position = "LightCarHeadR01"; direction = "LightCarHeadR01_end"; hitpoint = "Light_R"; selection = "Light_R"; }; }; aggregateReflectors[] = {{"LightCarHeadL01", "LightCarHeadL02"}, {"LightCarHeadR01", "LightCarHeadR02"}}; /// aggregating reflectors helps the engine a lot /// it might be even good to aggregate all lights into one source as it is done for most of the cars class EventHandlers: EventHandlers { postInit = "if (local (_this select 0)) then { [(_this select 0), """", [], false] call BIS_fnc_initVehicle; };"; }; /* // Must be kept as fail-safe in case of issue with the function hiddenSelectionsTextures[]={"\A3\Weapons_F\Data\placeholder_co.paa"}; /// we could use any texture to cover the car // Definition of texture sources (skins), used for the VhC (Vehicle customization) // Also, because the Garage uses the VhC, it will make them available from the garage class textureSources { class red // Source class { displayName="Red"; // name displayed, among other, from the garage author=$STR_A3_Bohemia_Interactive; // Author of the skin textures[]=// List of textures, in the same order as the hiddenSelections definition { "braf\braf_soft\braf_land_rover\data\BRAF_LANDROVER_BASE_co.paa", "braf\braf_soft\braf_land_rover\data\BRAF_EB_landrover_co.paa", }; }; }; // [_textureSourceClass1, _probability1, _textureSourceClass2, _probability2, ...] // Default behavior of the VhC is to select one of these sources, with a weighted random textureList[]= { "red", 1 // You can noticed that the white source is missing, therefore, it won't be part of the random };*/ class AnimationSources: AnimationSources { class HideDoor1 { scope = 0; }; class HideDoor2: HideDoor1 { scope = 0; }; class HideGlass2 { scope = 0; }; class HideDoor3: HideDoor1 { scope = 0; }; class HideBackpacks { scope = 0; }; class HideBumper1 { displayName = "Hide Bumper Brazilian Army"; source = "user"; initPhase = 1; animPeriod = 0.001; forceAnimatePhase = 0; forceAnimate[] = {"HideBumper2", 1}; forceAnimate2[] = {"HideBumper2", 0}; mass = -50; }; class HideBumper2 { displayName = "Hide Bumper Gendarmerie"; source = "user"; initPhase = 1; animPeriod = 0.001; forceAnimatePhase = 0; forceAnimate[] = {"HideBumper1", 1}; forceAnimate2[] = {"HideBumper1", 0}; mass = -90; }; class hidePolicelights { displayName = "Hide Policy Light"; source = "Proxy"; initPhase = 1; mass = -12; }; class HideConstruction { scope = 0; }; class hidePolice { scope = 0; }; class HideServices { scope = 0; }; class BeaconsStart { scope = 0; }; class BeaconsServicesStart { scope = 0; }; class Hide_Dashboard { scope = 0; }; class Doors { scope = 0; }; /* class Proxy { source = "user"; animPeriod = 0.001; initPhase = 1; }; */ class Beacons { scope = 0; }; class Destruct { scope = 0; }; }; class HitPoints: HitPoints { class HitLFWheel: HitLFWheel {armor=0.125; passThrough=0;}; /// it is easier to destroy wheels than hull of the vehicle class HitLF2Wheel: HitLF2Wheel {armor=0.125; passThrough=0;}; class HitRFWheel: HitRFWheel {armor=0.125; passThrough=0;}; class HitRF2Wheel: HitRF2Wheel {armor=0.125; passThrough=0;}; class HitFuel {armor=0.50; material=-1; name="fueltank"; visual=""; passThrough=0.2;}; /// correct points for fuel tank, some of the damage is aFRLied to the whole class HitEngine {armor=0.50; material=-1; name="engine"; visual=""; passThrough=0.2;}; class HitBody: HitBody {name = "body"; visual="camo1"; passThrough=1;}; /// all damage to the hull is aFRLied to total damage class HitGlass1: HitGlass1 {armor=0.25;}; /// it is pretty easy to puncture the glass but not so easy to remove it class HitGlass2: HitGlass2 {armor=0.25;}; class HitGlass3: HitGlass3 {armor=0.25;}; class HitGlass4: HitGlass4 {armor=0.25;}; }; class MFD /// Clocks on the car board { class ClockHUD { #include "cfgHUD.hpp" }; }; }; /*class BRAF_LR_110_SW: BRAF_LR_Base { forceInGarage=1; // This will force the garage to display this vehicle, otherwise it won't because it shares the same p3d as the previous scopeCurator=2; faction = "BRAF_ARMY"; side = 2; scope = 2; typicalcargo[] = {}; displayname = "Land Rover 110 SW"; hiddenSelectionsTextures[] = { "braf\braf_soft\braf_land_rover\data\BRAF_LANDROVER_BASE_co.paa", "braf\braf_soft\braf_land_rover\data\BRAF_EB_landrover_co.paa", }; class Turrets { }; class HitPoints: HitPoints { class HitGlass1 { armor = 0.15; }; class HitGlass2 { armor = 0.1; }; class HitGlass3 { armor = 0.1; }; }; class TransportMagazines { }; class TransportWeapons { }; class NVGMarkers { class NVGMarker01 { ambient[] = {0.003, 0.0003, 0.0003, 1}; blinking = 1; brightness = 0.001; color[] = {0.03, 0.003, 0.003, 1}; name = "nvg_marker"; }; };*/ // Derivate from the base class class BRAF_LR110_Hardtop: BRAF_LR_01_Base /// some class that is going to be visible in editor { scope = 2; /// makes the car visible in editor scopeCurator = 2; // scope 2 means it's available in Zeus mode (0 means hidden) crew = "braf_soldier_light"; /// we need someone to fit into the car side = 2; /// civilian car should be on civilian side faction = "BRAF_ARMY"; /// and with civilian faction displayName = "Land Rover 110 SW (Hard Top)"; hiddenSelections[] = { "camo1", "camo2" }; hiddenSelectionsTextures[] = { "braf\braf_soft\braf_land_rover\data\Skins\EB\braf_EB_landroverout_co.paa", "braf\braf_soft\braf_land_rover\data\Skins\EB\braf_EB_landroverin_co.paa" }; hiddenSelectionsMaterials[] = { "braf\braf_soft\braf_land_rover\data\Skins\EB\braf_EB_landrover_out.rvmat", "braf\braf_soft\braf_land_rover\data\Skins\EB\braf_EB_landrover_in.rvmat" }; animationList[] = { "HideBumper1", 0, "HideBumper2", 1 }; textureList[] = { "C_BRAF_LR110_SW", 1, "C_BRAF_LR_110_GEN", 0, "C_BRAF_LR_110_white", 0, "C_BRAF_LR_110_white", 0 }; }; class BRAF_LR110_CIV: BRAF_LR_01_Base /// some class that is going to be visible in editor { scope = 2; /// makes the car visible in editor scopeCurator = 2; // scope 2 means it's available in Zeus mode (0 means hidden) crew = "braf_soldier_light"; /// we need someone to fit into the car side = 3; /// civilian car should be on civilian side faction = "BRAF_CIV"; /// and with civilian faction displayName = "Land Rover 110 SW (Hard Top)"; animationList[] = { "HideBumper1", 1, "HideBumper2", 1 }; textureList[] = { "C_BRAF_LR110_SW", 0, "C_BRAF_LR_110_GEN", 0, "C_BRAF_LR_110_white", 0, "C_BRAF_LR_110_white", 1 }; }; class BRAF_LR110_gendarmerie: BRAF_LR_01_Base /// some class that is going to be visible in editor { scope = 2; /// makes the car visible in editor scopeCurator = 2; // scope 2 means it's available in Zeus mode (0 means hidden) crew = "braf_soldier_light"; /// we need someone to fit into the car side = 1; faction = "BLU_GEN_F"; displayName = "Land Rover 110 SW (Hard Top)"; hiddenSelections[] = { "camo1", "camo2" }; hiddenSelectionsTextures[] = { "braf\braf_soft\braf_land_rover\data\Skins\GEN\braf_landrover_GENout_co.paa", "braf\braf_soft\braf_land_rover\data\Skins\GEN\braf_landrover_GENin_co.paa" }; hiddenSelectionsMaterials[] = { "braf\braf_soft\braf_land_rover\data\Skins\GEN\braf_GEN_landrover_out.rvmat", "braf\braf_soft\braf_land_rover\data\Skins\GEN\braf_GEN_landrover_in.rvmat" }; animationList[] = { "HideBumper1", 1, "HideBumper2", 0, "hidePolicelights", 1, }; textureList[] = { "C_BRAF_LR110_SW", 0, "C_BRAF_LR_110_GEN", 1, "C_BRAF_LR_110_white", 0, "C_BRAF_LR_110_white", 0 }; }; class BRAF_LR110_UN: BRAF_LR_01_Base /// some class that is going to be visible in editor { scope = 2; /// makes the car visible in editor scopeCurator = 2; // scope 2 means it's available in Zeus mode (0 means hidden) crew = "braf_soldier_light"; /// we need someone to fit into the car side = 1; faction = "UN"; displayName = "Land Rover 110 SW (Hard Top)"; hiddenSelections[] = { "camo1", "camo2" }; hiddenSelectionsTextures[] = { "braf\braf_soft\braf_land_rover\data\Skins\UN\braf_landrover_UN_out_co.paa", "braf\braf_soft\braf_land_rover\data\Skins\UN\braf_landrover_UN_in_co.paa" }; hiddenSelectionsMaterials[] = { "braf\braf_soft\braf_land_rover\data\Skins\UN\braf_landrover_un_out.rvmat", "braf\braf_soft\braf_land_rover\data\Skins\UN\braf_landrover_un_in.rvmat" }; animationList[] = { "HideBumper1", 1, "HideBumper2", 0 }; textureList[] = { "C_BRAF_LR110_SW", 0, "C_BRAF_LR_110_GEN", 0, "C_BRAF_LR_110_white", 1, "C_BRAF_LR_110_white", 0 }; }; class BRAF_LR_softtop_4d: BRAF_LR_01_Base /// some class that is going to be visible in editor { model = "braf\braf_soft\braf_land_rover\bRAF_LR_softtop_4d"; /// simple path to model scope = 2; /// makes the car visible in editor displayname = "Land Rover 110 SW (Soft Top)" ; /// displayed in Editor scopeCurator=2; // scope 2 means it's available in Zeus mode (0 means hidden) crew = "braf_Soldier_light_naval"; /// we need someone to fit into the car side = 2; faction = "BRAF_ARMY"; hiddenSelections[] = {"camo1","camo2"}; ///we want to allow changing the color of this selection hiddenSelectionsTextures[] = { "braf\braf_soft\braf_land_rover\data\Skins\EB\braf_EB_landroverout_co.paa", "braf\braf_soft\braf_land_rover\data\Skins\EB\braf_EB_landroverin_co.paa", }; hiddenSelectionsMaterials[] = { "braf\braf_soft\braf_land_rover\data\Skins\EB\braf_EB_landrover_out.rvmat", "braf\braf_soft\braf_land_rover\data\Skins\EB\braf_EB_landrover_in.rvmat", }; animationList[] = { "HideBumper1", 0, "HideBumper2", 1 }; textureList[] = { "C_BRAF_LR110_SW", 1, "C_BRAF_LR_110_GEN", 0, "C_BRAF_LR_110_white", 0 }; }; class BRAF_LR_softtop_4d_armed: BRAF_LR_01_Base /// some class that is going to be visible in editor { model = "braf\braf_soft\braf_land_rover\BRAF_LR_softtop_4d_armed"; /// simple path to model scope = 2; /// makes the car visible in editor displayname = "Land Rover 110 (ARMED)" ; /// displayed in Editor scopeCurator=2; // scope 2 means it's available in Zeus mode (0 means hidden) crew = "braf_Soldier_light_naval"; /// we need someone to fit into the car side = 2; faction = "BRAF_ARMY"; hiddenSelections[] = {"camo1","camo2"}; ///we want to allow changing the color of this selection hiddenSelectionsTextures[] = { "braf\braf_soft\braf_land_rover\data\Skins\EB\braf_EB_landroverout_co.paa", "braf\braf_soft\braf_land_rover\data\Skins\EB\braf_EB_landroverin_co.paa", }; hiddenSelectionsMaterials[] = { "braf\braf_soft\braf_land_rover\data\Skins\EB\braf_EB_landrover_out.rvmat", "braf\braf_soft\braf_land_rover\data\Skins\EB\braf_EB_landrover_in.rvmat", }; animationList[] = { "HideBumper1", 0, "HideBumper2", 1 }; textureList[] = { "C_BRAF_LR110_SW", 1, "C_BRAF_LR_110_GEN", 0, "C_BRAF_LR_110_white", 0 }; }; /* class BRAF_LR110_SW_01_Special_F: BRAF_LR_01_Base /// some class that is going to be visible in editor { model = "braf\braf_soft\braf_land_rover\bRAF_LR_navy.p3d"; /// simple path to model forceInGarage=1; // This will force the garage to display this vehicle, otherwise it won't because it shares the same p3d as the previous displayName="Defender 110 SW (Open)"; scope=2; /// makes the car visible in editor crew = "braf_Soldier_light_naval"; /// we need someone to fit into the car side=2; /// civilian car should be on civilian side faction = "braf_fn"; /// and with civilian faction // the texture source used will be the green one, whatever it probability because it's the only one defined here hiddenSelections[] = {"camo1","camo2"}; ///we want to allow changing the color of this selection hiddenSelectionsTextures[] = { "braf\braf_soft\braf_land_rover\data\Skins\BRAF_FN_landrover_co.paa", "braf\braf_soft\braf_land_rover\data\Skins\lr_special_FN_co.paa" }; };*/ };