JustMathew
-
Content Count
27 -
Joined
-
Last visited
-
Medals
Posts posted by JustMathew
-
-
I actually stumbled upon this youtube playlist last night and think it's worth mentioning. It's for Arma 2, but most of it should be the same.
-
OB creates new "named selections" (which you can turn off if you want to btw, depending on file format you use for import) for each individual "connected" mesh. It doesn't matter if you modelling software considers it a single object if that said object has multiple subcomponents.
You can ctrl click select these and create a new named selection based on the ones you have, or you can have redefine the existing ones (r_click redefine)
Thanks for the advice, I might as well do it like that. That makes sense when it comes to applying textures.
-
This looks awesome! I'm excited to see what come out of this :-)
-
Hi!
I would suggest looking at Mondkalb's Addon Tutorial and GameDev Burne video tutorials.
Someone recomended this too, but I have not used that, yet ;-)
Hope that helps!
-
Thanks guys, I did not have that in my model.
My tilting model is kind of fixed now, only issue now is the dampers are inverted (going up when it should go down). I think what fixed it was making the verts from LandContact lod touching the wheels. Can't confirm tho.
-
As I have never seen the "autocenter", I do not know if I have that enabled or what not. How do I check that?
-
Hi!
I am currently working on a 8-wheeled truck and I'm experiencing some weird bugs when I get it in game. The first version had the 4 front wheels all the way at the top of the damper, whereas the rear 4 wheels were relaxed. You can see the different heights in this picture:
When I was messing around trying to fix this issue, I tried changing the parent-classes in my model.cfg, so my class inherits from "Truck" instead of "Car", as I could suspect "Car" does not support 8 wheels.
As I did so, the model animations stopped working completely, it now does nothing.
I therefore need some assistance understanding which classes my class can inherit from in model.cfg. How come I can not inherit from "Truck"?
I've attached my config.cpp and model.cfg, in case you need to see them.
Config.cpp
#include "basicdefines_A3.hpp" class DefaultEventhandlers; #include "CfgPatches.hpp" class WeaponFireGun; class WeaponCloudsGun; class WeaponFireMGun; class WeaponCloudsMGun; class CfgVehicles { class Car; class Car_F: Car { class HitPoints; class Turrets; }; class Truck_F: Car_F { unitInfoType = "RscUnitInfoNoWeapon"; class Exhausts { class Exhaust1 { position = "exhaust1_pos"; direction = "exhaust1_dir"; effect = "ExhaustEffectHEMTT"; }; }; class HitPoints: HitPoints { class HitRGlass; class HitLGlass; class HitGlass1; class HitGlass2; class HitGlass3; class HitGlass4; class HitGlass5; class HitBody; class HitFuel; class HitLFWheel; class HitLBWheel; class HitLMWheel; class HitLF2Wheel; class HitRFWheel; class HitRBWheel; class HitRMWheel; class HitRF2Wheel; class HitEngine; }; class EventHandlers; class AnimationSources; class Turrets: Turrets { class MainTurret; class ViewGunner; }; }; class Truck_01_base_F: Truck_F { author = "$STR_A3_Bohemia_Interactive"; mapSize = 12.02; _generalMacro = "Truck_01_base_F"; class Library { libTextDesc = "$STR_A3_CfgVehicles_Truck_01_base_Library0"; }; editorSubcategory = "EdSubcat_Cars"; vehicleClass = "Car"; transportSoldier = 1; memoryPointTaskMarker = "TaskMarker_1_pos"; slingLoadCargoMemoryPoints[] = {"SlingLoadCargo1","SlingLoadCargo2","SlingLoadCargo3","SlingLoadCargo4"}; armor = 200; class HitPoints: HitPoints { class HitFuel: HitFuel { armor = 1.0; passThrough = 1; minimalHit = 0.1; explosionShielding = 1.5; radius = 0.45; }; class HitEngine: HitEngine { armor = 0.5; passThrough = 1; minimalHit = 0.1; explosionShielding = 0.5; radius = 0.45; }; class HitBody: HitBody { armor = 1.0; passThrough = 1; minimalHit = 0.0; explosionShielding = 1.5; radius = 0.33; }; class HitLFWheel: HitLFWheel { armor = 0.5; minimalHit = 0.02; passThrough = 0.3; explosionShielding = 4; radius = 0.33; }; class HitLBWheel: HitLBWheel { armor = 0.5; minimalHit = 0.02; passThrough = 0.3; explosionShielding = 4; radius = 0.33; }; class HitLMWheel: HitLMWheel { armor = 0.5; minimalHit = 0.02; passThrough = 0.3; explosionShielding = 4; radius = 0.33; }; class HitLF2Wheel: HitLF2Wheel { armor = 0.5; minimalHit = 0.02; passThrough = 0.3; explosionShielding = 4; radius = 0.33; }; class HitRFWheel: HitRFWheel { armor = 0.5; minimalHit = 0.02; passThrough = 0.3; explosionShielding = 4; radius = 0.33; }; class HitRBWheel: HitRBWheel { armor = 0.5; minimalHit = 0.02; passThrough = 0.3; explosionShielding = 4; radius = 0.33; }; class HitRMWheel: HitRMWheel { armor = 0.5; minimalHit = 0.02; passThrough = 0.3; explosionShielding = 4; radius = 0.33; }; class HitRF2Wheel: HitRF2Wheel { armor = 0.5; minimalHit = 0.02; passThrough = 0.3; explosionShielding = 4; radius = 0.33; }; class HitGlass1: HitGlass1 { armor = 1.5; passThrough = 0; explosionShielding = 3; radius = 0.33; }; class HitGlass2: HitGlass2 { armor = 1.5; passThrough = 0; explosionShielding = 3; radius = 0.33; }; class HitGlass3: HitGlass3 { armor = 1.5; passThrough = 0; explosionShielding = 3; radius = 0.33; }; class HitGlass4: HitGlass4 { armor = 1.5; passThrough = 0; explosionShielding = 3; radius = 0.33; }; }; cost = 50000; weapons[] = {"TruckHorn2"}; driverAction = "driver_hemtt"; cargoAction[] = {"passenger_generic01_foldhands","passenger_apc_generic02","passenger_apc_generic04","passenger_apc_generic03","passenger_apc_generic01","passenger_apc_narrow_generic01","passenger_generic01_foldhands","passenger_generic01_leanleft","passenger_generic01_leanright","passenger_apc_generic01","passenger_generic01_leanleft","passenger_generic01_foldhands","passenger_apc_generic02","passenger_apc_generic03","passenger_apc_narrow_generic01","passenger_apc_narrow_generic03","passenger_generic01_foldhands"}; cargoIsCoDriver[] = {1,0}; cargo[] = {"GetOutMedium","GetOutHighHemtt"}; getInAction = "GetInMRAP_01"; getOutAction = "GetOutLow"; cargoGetInAction[] = {"GetInMRAP_01","GetInHemttBack"}; hideWeaponsDriver = 1; hideWeaponsCargo = 1; driverCompartments = "Compartment1"; cargoCompartments[] = {"Compartment1","Compartment2"}; destrType = "DestructWreck"; showNVGCargo[] = {0,1}; soundAttenuationCargo[] = {1,0}; attenuationEffectType = "CarAttenuation"; soundGetIn[] = {"A3\Sounds_F\vehicles\soft\Truck_02\getin",0.56234133,1}; soundGetOut[] = {"A3\Sounds_F\vehicles\soft\Truck_02\getout",0.56234133,1,20}; soundDammage[] = {"",0.56234133,1}; soundEngineOnInt[] = {"A3\Sounds_F\vehicles\soft\Truck_02\int_start",0.70794576,1.0}; soundEngineOnExt[] = {"A3\Sounds_F\vehicles\soft\Truck_02\ext_start",0.70794576,1.0,200}; soundEngineOffInt[] = {"A3\Sounds_F\vehicles\soft\Truck_02\int_stop",0.70794576,1.0}; soundEngineOffExt[] = {"A3\Sounds_F\vehicles\soft\Truck_02\ext_stop",0.70794576,1.0,200}; buildCrash0[] = {"A3\Sounds_F\vehicles\crashes\cars\cars_coll_big_default_ext_1",1.0,1,200}; buildCrash1[] = {"A3\Sounds_F\vehicles\crashes\cars\cars_coll_big_default_ext_2",1.0,1,200}; buildCrash2[] = {"A3\Sounds_F\vehicles\crashes\cars\cars_coll_big_default_ext_3",1.0,1,200}; buildCrash3[] = {"A3\Sounds_F\vehicles\crashes\cars\cars_coll_big_default_ext_4",1.0,1,200}; soundBuildingCrash[] = {"buildCrash0",0.25,"buildCrash1",0.25,"buildCrash2",0.25,"buildCrash3",0.25}; WoodCrash0[] = {"A3\Sounds_F\vehicles\crashes\cars\cars_coll_big_wood_ext_1",1.0,1,200}; WoodCrash1[] = {"A3\Sounds_F\vehicles\crashes\cars\cars_coll_big_wood_ext_1",1.0,1,200}; WoodCrash2[] = {"A3\Sounds_F\vehicles\crashes\cars\cars_coll_big_wood_ext_1",1.0,1,200}; WoodCrash3[] = {"A3\Sounds_F\vehicles\crashes\cars\cars_coll_big_wood_ext_1",1.0,1,200}; soundWoodCrash[] = {"woodCrash0",0.25,"woodCrash1",0.25,"woodCrash2",0.25,"woodCrash3",0.25}; armorCrash0[] = {"A3\Sounds_F\vehicles\crashes\cars\cars_coll_big_default_ext_1",1.0,1,200}; armorCrash1[] = {"A3\Sounds_F\vehicles\crashes\cars\cars_coll_big_default_ext_2",1.0,1,200}; armorCrash2[] = {"A3\Sounds_F\vehicles\crashes\cars\cars_coll_big_default_ext_3",1.0,1,200}; armorCrash3[] = {"A3\Sounds_F\vehicles\crashes\cars\cars_coll_big_default_ext_4",1.0,1,200}; soundArmorCrash[] = {"ArmorCrash0",0.25,"ArmorCrash1",0.25,"ArmorCrash2",0.25,"ArmorCrash3",0.25}; Crash0[] = {"A3\Sounds_F\vehicles\crashes\cars\cars_coll_big_default_ext_1",1.0,1,200}; Crash1[] = {"A3\Sounds_F\vehicles\crashes\cars\cars_coll_big_default_ext_2",1.0,1,200}; Crash2[] = {"A3\Sounds_F\vehicles\crashes\cars\cars_coll_big_default_ext_3",1.0,1,200}; Crash3[] = {"A3\Sounds_F\vehicles\crashes\cars\cars_coll_big_default_ext_4",1.0,1,200}; soundCrashes[] = {"Crash0",0.25,"Crash1",0.25,"Crash2",0.25,"Crash3",0.25}; class Sounds { class Idle_ext { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\ext_engine_00",0.56234133,1,200}; frequency = "0.95 + ((rpm/ 3000) factor[(100/ 3000),(800/ 3000)])*0.15"; volume = "engineOn*camPos*(((rpm/ 3000) factor[(10/ 3000),(50/ 3000)]) * ((rpm/ 3000) factor[(800/ 3000),(600/ 3000)]))"; }; class Engine { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\ext_engine_01",0.63095737,1,200}; frequency = "0.8 + ((rpm/ 3000) factor[(610/ 3000),(1200/ 3000)])*0.2"; volume = "engineOn*camPos*(((rpm/ 3000) factor[(620/ 3000),(820/ 3000)]) * ((rpm/ 3000) factor[(1200/ 3000),(1000/ 3000)]))"; }; class Engine1_ext { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\ext_engine_02",0.70794576,1,200}; frequency = "0.8 + ((rpm/ 3000) factor[(1000/ 3000),(1500/ 3000)])*0.2"; volume = "engineOn*camPos*(((rpm/ 3000) factor[(950/ 3000),(1150/ 3000)]) * ((rpm/ 3000) factor[(1500/ 3000),(1300/ 3000)]))"; }; class Engine2_ext { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\ext_engine_03",0.7943282,1,250}; frequency = "0.8 + ((rpm/ 3000) factor[(1300/ 3000),(1850/ 3000)])*0.2"; volume = "engineOn*camPos*(((rpm/ 3000) factor[(1260/ 3000),(1500/ 3000)]) * ((rpm/ 3000) factor[(1850/ 3000),(1600/ 3000)]))"; }; class Engine3_ext { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\ext_engine_04",1.1220185,1,300}; frequency = "0.8 + ((rpm/ 3000) factor[(1600/ 3000),(2200/ 3000)])*0.1"; volume = "engineOn*camPos*(((rpm/ 3000) factor[(1550/ 3000),(1800/ 3000)]) * ((rpm/ 3000) factor[(2200/ 3000),(1950/ 3000)]))"; }; class Engine4_ext { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\ext_engine_05",1.4125376,1,350}; frequency = "0.8 + ((rpm/ 3000) factor[(2000/ 3000),(2600/ 3000)])*0.1"; volume = "engineOn*camPos*(((rpm/ 3000) factor[(1900/ 3000),(2150/ 3000)]) * ((rpm/ 3000) factor[(2600/ 3000),(2300/ 3000)]))"; }; class Engine5_ext { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\ext_engine_06",1.7782794,1,400}; frequency = "0.8 + ((rpm/ 3000) factor[(2300/ 3000),(3000/ 3000)])*0.1"; volume = "engineOn*camPos*((rpm/ 3000) factor[(2300/ 3000),(2700/ 3000)])"; }; class IdleThrust { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\ext_exhaust_00",1.0,1,250}; frequency = "0.8 + ((rpm/ 3000) factor[(100/ 3000),(800/ 3000)])*0.15"; volume = "engineOn*camPos*(0.4+(0.6*(thrust factor[0.1,1])))*(((rpm/ 3000) factor[(10/ 3000),(50/ 3000)]) * ((rpm/ 3000) factor[(800/ 3000),(600/ 3000)]))"; }; class EngineThrust { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\ext_exhaust_01",1.2589254,1,300}; frequency = "0.8 + ((rpm/ 3000) factor[(610/ 3000),(1200/ 3000)])*0.2"; volume = "engineOn*camPos*(0.4+(0.6*(thrust factor[0.1,1])))*(((rpm/ 3000) factor[(620/ 3000),(820/ 3000)]) * ((rpm/ 3000) factor[(1200/ 3000),(1000/ 3000)]))"; }; class Engine1_Thrust_ext { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\ext_exhaust_02",1.4125376,1,350}; frequency = "0.8 + ((rpm/ 3000) factor[(1000/ 3000),(1500/ 3000)])*0.2"; volume = "engineOn*camPos*(0.4+(0.6*(thrust factor[0.1,1])))*(((rpm/ 3000) factor[(950/ 3000),(1150/ 3000)]) * ((rpm/ 3000) factor[(1500/ 3000),(1300/ 3000)]))"; }; class Engine2_Thrust_ext { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\ext_exhaust_03",1.5848932,1,400}; frequency = "0.8 + ((rpm/ 3000) factor[(1300/ 3000),(1850/ 3000)])*0.2"; volume = "engineOn*camPos*(0.4+(0.6*(thrust factor[0.1,1])))*(((rpm/ 3000) factor[(1260/ 3000),(1500/ 3000)]) * ((rpm/ 3000) factor[(1850/ 3000),(1600/ 3000)]))"; }; class Engine3_Thrust_ext { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\ext_exhaust_04",1.9952624,1,450}; frequency = "0.8 + ((rpm/ 3000) factor[(1600/ 3000),(2200/ 3000)])*0.1"; volume = "engineOn*camPos*(0.4+(0.6*(thrust factor[0.1,1])))*(((rpm/ 3000) factor[(1550/ 3000),(1800/ 3000)]) * ((rpm/ 3000) factor[(2200/ 3000),(1950/ 3000)]))"; }; class Engine4_Thrust_ext { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\ext_exhaust_05",1.9952624,1,450}; frequency = "0.8 + ((rpm/ 3000) factor[(2000/ 3000),(2600/ 3000)])*0.1"; volume = "engineOn*camPos*(0.4+(0.6*(thrust factor[0.1,1])))*(((rpm/ 3000) factor[(1900/ 3000),(2150/ 3000)]) * ((rpm/ 3000) factor[(2600/ 3000),(2300/ 3000)]))"; }; class Engine5_Thrust_ext { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\ext_exhaust_06",2.2387211,1,500}; frequency = "0.8 + ((rpm/ 3000) factor[(2300/ 3000),(3000/ 3000)])*0.1"; volume = "engineOn*camPos*(0.4+(0.6*(thrust factor[0.1,1])))*((rpm/ 3000) factor[(2300/ 3000),(2700/ 3000)])"; }; class Idle_int { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\int_engine_00",0.39810717,1}; frequency = "0.8 + ((rpm/ 3000) factor[(100/ 3000),(800/ 3000)])*0.15"; volume = "engineOn*(1-camPos)*(((rpm/ 3000) factor[(10/ 3000),(50/ 3000)]) * ((rpm/ 3000) factor[(800/ 3000),(600/ 3000)]))"; }; class Engine_int { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\int_engine_01",0.4466836,1}; frequency = "0.8 + ((rpm/ 3000) factor[(610/ 3000),(1200/ 3000)])*0.2"; volume = "engineOn*(1-camPos)*(((rpm/ 3000) factor[(620/ 3000),(820/ 3000)]) * ((rpm/ 3000) factor[(1200/ 3000),(1000/ 3000)]))"; }; class Engine1_int { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\int_engine_02",0.5011872,1}; frequency = "0.8 + ((rpm/ 3000) factor[(1000/ 3000),(1500/ 3000)])*0.2"; volume = "engineOn*(1-camPos)*(((rpm/ 3000) factor[(950/ 3000),(1150/ 3000)]) * ((rpm/ 3000) factor[(1500/ 3000),(1300/ 3000)]))"; }; class Engine2_int { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\int_engine_03",0.5011872,1}; frequency = "0.8 + ((rpm/ 3000) factor[(1300/ 3000),(1850/ 3000)])*0.2"; volume = "engineOn*(1-camPos)*(((rpm/ 3000) factor[(1260/ 3000),(1500/ 3000)]) * ((rpm/ 3000) factor[(1850/ 3000),(1600/ 3000)]))"; }; class Engine3_int { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\int_engine_04",0.56234133,1}; frequency = "0.8 + ((rpm/ 3000) factor[(1600/ 3000),(2200/ 3000)])*0.1"; volume = "engineOn*(1-camPos)*(((rpm/ 3000) factor[(1550/ 3000),(1800/ 3000)]) * ((rpm/ 3000) factor[(2200/ 3000),(1950/ 3000)]))"; }; class Engine4_int { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\int_engine_05",0.56234133,1}; frequency = "0.8 + ((rpm/ 3000) factor[(2000/ 3000),(2600/ 3000)])*0.1"; volume = "engineOn*(1-camPos)*(((rpm/ 3000) factor[(1900/ 3000),(2150/ 3000)]) * ((rpm/ 3000) factor[(2600/ 3000),(2300/ 3000)]))"; }; class Engine5_int { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\int_engine_06",0.63095737,1}; frequency = "0.8 + ((rpm/ 3000) factor[(2300/ 3000),(3000/ 3000)])*0.1"; volume = "engineOn*(1-camPos)*((rpm/ 3000) factor[(2300/ 3000),(2700/ 3000)])"; }; class IdleThrust_int { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\int_exhaust_00",0.5011872,1}; frequency = "0.8 + ((rpm/ 3000) factor[(100/ 3000),(800/ 3000)])*0.15"; volume = "engineOn*(1-camPos)*(0.4+(0.6*(thrust factor[0.1,1])))*(((rpm/ 3000) factor[(10/ 3000),(50/ 3000)]) * ((rpm/ 3000) factor[(800/ 3000),(600/ 3000)]))"; }; class EngineThrust_int { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\int_exhaust_01",0.56234133,1}; frequency = "0.8 + ((rpm/ 3000) factor[(610/ 3000),(1200/ 3000)])*0.2"; volume = "engineOn*(1-camPos)*(0.4+(0.6*(thrust factor[0.1,1])))*(((rpm/ 3000) factor[(620/ 3000),(820/ 3000)]) * ((rpm/ 3000) factor[(1200/ 3000),(1000/ 3000)]))"; }; class Engine1_Thrust_int { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\int_exhaust_02",0.63095737,1}; frequency = "0.8 + ((rpm/ 3000) factor[(1000/ 3000),(1500/ 3000)])*0.2"; volume = "engineOn*(1-camPos)*(0.4+(0.6*(thrust factor[0.1,1])))*(((rpm/ 3000) factor[(950/ 3000),(1150/ 3000)]) * ((rpm/ 3000) factor[(1500/ 3000),(1300/ 3000)]))"; }; class Engine2_Thrust_int { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\int_exhaust_03",0.63095737,1}; frequency = "0.8 + ((rpm/ 3000) factor[(1300/ 3000),(1850/ 3000)])*0.2"; volume = "engineOn*(1-camPos)*(0.4+(0.6*(thrust factor[0.1,1])))*(((rpm/ 3000) factor[(1260/ 3000),(1500/ 3000)]) * ((rpm/ 3000) factor[(1850/ 3000),(1600/ 3000)]))"; }; class Engine3_Thrust_int { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\int_exhaust_04",0.70794576,1}; frequency = "0.8 + ((rpm/ 3000) factor[(1600/ 3000),(2200/ 3000)])*0.1"; volume = "engineOn*(1-camPos)*(0.4+(0.6*(thrust factor[0.1,1])))*(((rpm/ 3000) factor[(1550/ 3000),(1800/ 3000)]) * ((rpm/ 3000) factor[(2200/ 3000),(1950/ 3000)]))"; }; class Engine4_Thrust_int { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\int_exhaust_05",0.7943282,1}; frequency = "0.8 + ((rpm/ 3000) factor[(2000/ 3000),(2600/ 3000)])*0.1"; volume = "engineOn*(1-camPos)*(0.4+(0.6*(thrust factor[0.1,1])))*(((rpm/ 3000) factor[(1900/ 3000),(2150/ 3000)]) * ((rpm/ 3000) factor[(2600/ 3000),(2300/ 3000)]))"; }; class Engine5_Thrust_int { sound[] = {"A3\Sounds_F\vehicles\soft\Truck_02\int_exhaust_06",1.0,1}; frequency = "0.8 + ((rpm/ 3000) factor[(2300/ 3000),(3000/ 3000)])*0.1"; volume = "engineOn*(1-camPos)*(0.4+(0.6*(thrust factor[0.1,1])))*((rpm/ 3000) factor[(2300/ 3000),(2700/ 3000)])"; }; class Movement { sound = "soundEnviron"; frequency = "1"; volume = "0"; }; class TiresRockOut { sound[] = {"A3\Sounds_F\vehicles\soft\tires\ext_tires_dirt_soft_1",1.0,1.0,60}; frequency = "1"; volume = "camPos*rock*(speed factor[2, 20])"; }; class TiresSandOut { sound[] = {"A3\Sounds_F\vehicles\soft\tires\ext-tires-sand1",1.0,1.0,60}; frequency = "1"; volume = "camPos*sand*(speed factor[2, 20])"; }; class TiresGrassOut { sound[] = {"A3\Sounds_F\vehicles\soft\tires\ext_tires_dirt_soft_2",1.0,1.0,60}; frequency = "1"; volume = "camPos*grass*(speed factor[2, 20])"; }; class TiresMudOut { sound[] = {"A3\Sounds_F\vehicles\soft\tires\ext-tires-mud2",1.0,1.0,60}; frequency = "1"; volume = "camPos*mud*(speed factor[2, 20])"; }; class TiresGravelOut { sound[] = {"A3\Sounds_F\vehicles\soft\tires\ext_tires_gravel_1",1.0,1.0,60}; frequency = "1"; volume = "camPos*gravel*(speed factor[2, 20])"; }; class TiresAsphaltOut { sound[] = {"A3\Sounds_F\vehicles\soft\tires\ext_tires_asfalt_2",1.0,1.0,60}; frequency = "1"; volume = "camPos*asphalt*(speed factor[2, 20])"; }; class NoiseOut { sound[] = {"A3\Sounds_F\vehicles\soft\noises\noise_int_car_3",1.0,1.0,90}; frequency = "1"; volume = "camPos*(damper0 max 0.02)*(speed factor[0, 8])"; }; class TiresRockIn { sound[] = {"A3\Sounds_F\vehicles\soft\tires\int_tires_dirt_soft_1",0.70794576,1.0}; frequency = "1"; volume = "(1-camPos)*rock*(speed factor[2, 20])"; }; class TiresSandIn { sound[] = {"A3\Sounds_F\vehicles\soft\tires\int-tires-sand2",0.70794576,1.0}; frequency = "1"; volume = "(1-camPos)*sand*(speed factor[2, 20])"; }; class TiresGrassIn { sound[] = {"A3\Sounds_F\vehicles\soft\tires\int_tires_dirt_soft_2",0.70794576,1.0}; frequency = "1"; volume = "(1-camPos)*grass*(speed factor[2, 20])"; }; class TiresMudIn { sound[] = {"A3\Sounds_F\vehicles\soft\tires\int-tires-mud2",0.70794576,1.0}; frequency = "1"; volume = "(1-camPos)*mud*(speed factor[2, 20])"; }; class TiresGravelIn { sound[] = {"A3\Sounds_F\vehicles\soft\tires\int_tires_gravel_1",0.70794576,1.0}; frequency = "1"; volume = "(1-camPos)*gravel*(speed factor[2, 20])"; }; class TiresAsphaltIn { sound[] = {"A3\Sounds_F\vehicles\soft\tires\int_tires_asfalt_2",0.70794576,1.0}; frequency = "1"; volume = "(1-camPos)*asphalt*(speed factor[2, 20])"; }; class NoiseIn { sound[] = {"A3\Sounds_F\vehicles\soft\noises\noise_int_car_3",0.70794576,1.0}; frequency = "1"; volume = "(damper0 max 0.1)*(speed factor[0, 8])*(1-camPos)"; }; class breaking_ext_road { sound[] = {"A3\Sounds_F\vehicles\soft\noises\slipping_tires_loop_04",0.70794576,1,80}; frequency = 1; volume = "engineOn*camPos*asphalt*(LongSlipDrive Factor[-0.15, -0.3])*(Speed Factor[2, 10])"; }; class acceleration_ext_road { sound[] = {"A3\Sounds_F\vehicles\soft\noises\slipping_tires_loop_02",0.70794576,1,80}; frequency = 1; volume = "engineOn*camPos*asphalt*(LongSlipDrive Factor[0.15, 0.3])*(Speed Factor[10, 0])"; }; class turn_left_ext_road { sound[] = {"A3\Sounds_F\vehicles\soft\noises\slipping_tires_loop_02",0.70794576,1,80}; frequency = 1; volume = "engineOn*camPos*asphalt*(latSlipDrive Factor[0.15, 0.3])*(Speed Factor[0, 10])"; }; class turn_right_ext_road { sound[] = {"A3\Sounds_F\vehicles\soft\noises\slipping_tires_loop_02",0.70794576,1,80}; frequency = 1; volume = "engineOn*camPos*asphalt*(latSlipDrive Factor[-0.15, -0.3])*(Speed Factor[0, 10])"; }; class breaking_ext_dirt { sound[] = {"A3\Sounds_F\vehicles\soft\noises\slipping_tires_14_dirt_breaking",0.70794576,1,60}; frequency = 1; volume = "engineOn*camPos*(1-asphalt)*(LongSlipDrive Factor[-0.15, -0.3])*(Speed Factor[2, 10])"; }; class acceleration_ext_dirt { sound[] = {"A3\Sounds_F\vehicles\soft\noises\acceleration_dirt_ext_1",0.70794576,1,60}; frequency = 1; volume = "engineOn*camPos*(1-asphalt)*(LongSlipDrive Factor[0.15, 0.3])*(Speed Factor[10, 0])"; }; class turn_left_ext_dirt { sound[] = {"A3\Sounds_F\vehicles\soft\noises\slipping_tires_18_dirt",0.70794576,1,60}; frequency = 1; volume = "engineOn*camPos*(1-asphalt)*(latSlipDrive Factor[0.15, 0.3])*(Speed Factor[0, 10])"; }; class turn_right_ext_dirt { sound[] = {"A3\Sounds_F\vehicles\soft\noises\slipping_tires_18_dirt",0.70794576,1,60}; frequency = 1; volume = "engineOn*camPos*(1-asphalt)*(latSlipDrive Factor[-0.15, -0.3])*(Speed Factor[0, 10])"; }; class breaking_int_road { sound[] = {"A3\Sounds_F\vehicles\soft\noises\slipping_tires_loop_04_int",0.63095737,1}; frequency = 1; volume = "engineOn*asphalt*(1-camPos)*(LongSlipDrive Factor[-0.15, -0.3])*(Speed Factor[2, 6])"; }; class acceleration_int_road { sound[] = {"A3\Sounds_F\vehicles\soft\noises\slipping_tires_loop_02_int",0.63095737,1}; frequency = 1; volume = "engineOn*asphalt*(1-camPos)*(LongSlipDrive Factor[0.15, 0.3])*(Speed Factor[10, 0])"; }; class turn_left_int_road { sound[] = {"A3\Sounds_F\vehicles\soft\noises\slipping_tires_loop_02_int",0.63095737,1}; frequency = 1; volume = "engineOn*asphalt*(1-camPos)*(latSlipDrive Factor[0.15, 0.3])*(Speed Factor[0, 10])"; }; class turn_right_int_road { sound[] = {"A3\Sounds_F\vehicles\soft\noises\slipping_tires_loop_02_int",0.63095737,1}; frequency = 1; volume = "engineOn*asphalt*(1-camPos)*(latSlipDrive Factor[-0.15, -0.3])*(Speed Factor[0, 10])"; }; class breaking_int_dirt { sound[] = {"A3\Sounds_F\vehicles\soft\noises\slipping_tires_14_dirt_breaking_int",0.63095737,1}; frequency = 1; volume = "engineOn*(1-asphalt)*(1-camPos)*(LongSlipDrive Factor[-0.15, -0.3])*(Speed Factor[2, 6])"; }; class acceleration_int_dirt { sound[] = {"A3\Sounds_F\vehicles\soft\noises\acceleration_dirt_int_1",0.63095737,1}; frequency = 1; volume = "engineOn*(1-asphalt)*(1-camPos)*(LongSlipDrive Factor[0.15, 0.3])*(Speed Factor[10, 0])"; }; class turn_left_int_dirt { sound[] = {"A3\Sounds_F\vehicles\soft\noises\slipping_tires_18_dirt_int",0.63095737,1}; frequency = 1; volume = "engineOn*(1-asphalt)*(1-camPos)*(latSlipDrive Factor[0.15, 0.3])*(Speed Factor[0, 10])"; }; class turn_right_int_dirt { sound[] = {"A3\Sounds_F\vehicles\soft\noises\slipping_tires_18_dirt_int",0.63095737,1}; frequency = 1; volume = "engineOn*(1-asphalt)*(1-camPos)*(latSlipDrive Factor[-0.15, -0.3])*(Speed Factor[0, 10])"; }; }; thrustDelay = 0.5; brakeIdleSpeed = 1.78; maxSpeed = 80; fuelCapacity = 45; antiRollbarForceCoef = 0; antiRollbarForceLimit = 5; antiRollbarSpeedMin = 0; antiRollbarSpeedMax = 20; idleRpm = 600; redRpm = 3000; class complexGearbox { GearboxRatios[] = {"R1",-10.094,"N",0,"D1",5.562,"D2",3.456,"D3",2.623,"D4",1.678,"D5",1.078}; TransmissionRatios[] = {"High",5.0}; gearBoxMode = "auto"; moveOffGear = 1; driveString = "D"; neutralString = "N"; reverseString = "R"; }; simulation = "carx"; dampersBumpCoef = 6.0; differentialType = "all_limited"; frontRearSplit = 0.5; frontBias = 1.3; rearBias = 1.3; centreBias = 1.3; clutchStrength = 55.0; enginePower = 450; maxOmega = 320; peakTorque = 1950; dampingRateFullThrottle = 0.08; dampingRateZeroThrottleClutchEngaged = 2.0; dampingRateZeroThrottleClutchDisengaged = 0.35; torqueCurve[] = {{0.0,0.2},{0.278,0.5},{0.35,0.85},{0.461,1.0},{0.7,0.95},{0.75,0.85},{0.8,0.7},{1.0,0.5}}; switchTime = 0.51; 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 = 80; MOI = 40; dampingRate = 0.1; dampingRateDamaged = 1.0; dampingRateDestroyed = 1000.0; maxBrakeTorque = 10000; maxHandBrakeTorque = 0; suspTravelDirection[] = {0,-1,0}; suspForceAppPointOffset = "wheel_1_1_axis"; tireForceAppPointOffset = "wheel_1_1_axis"; maxCompression = 0.15; mMaxDroop = 0.15; sprungMass = 250; springStrength = 6250; springDamperRate = 1000; longitudinalStiffnessPerUnitGravity = 10000; latStiffX = 25; latStiffY = 180; frictionVsSlipGraph[] = {{0,1},{0.5,1},{1,1}}; }; class L2: L1 { boneName = "wheel_1_2_damper"; steering = 0; 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 = 0; 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; }; }; class RenderTargets { class mirrorL { renderTarget = "rendertarget0"; class mirror { pointPosition = "PIP0_pos"; pointDirection = "PIP0_dir"; renderVisionMode = 4; renderQuality = 2; fov = 0.5; }; }; }; extCameraPosition[] = {0,3,-15}; class Turrets{}; class Damage { /* tex[] = {}; mat[] = {"A3\soft_f_beta\Truck_01\Data\Truck_01_cargo.rvmat","A3\soft_f_beta\Truck_01\Data\Truck_01_cargo_damage.rvmat","A3\soft_f_beta\Truck_01\Data\Truck_01_cargo_destruct.rvmat","A3\soft_f_beta\Truck_01\Data\Truck_01_cover.rvmat","A3\soft_f_beta\Truck_01\Data\Truck_01_cover_damage.rvmat","A3\soft_f_beta\Truck_01\Data\Truck_01_cover_destruct.rvmat","A3\soft_f_beta\Truck_01\Data\Truck_01_ext_01.rvmat","A3\soft_f_beta\Truck_01\Data\Truck_01_ext_01_damage.rvmat","A3\soft_f_beta\Truck_01\Data\Truck_01_ext_01_destruct.rvmat","A3\soft_f_beta\Truck_01\Data\Truck_01_ext_02.rvmat","A3\soft_f_beta\Truck_01\Data\Truck_01_ext_02_damage.rvmat","A3\soft_f_beta\Truck_01\Data\Truck_01_ext_02_destruct.rvmat","A3\soft_f_beta\Truck_01\Data\Truck_01_int_base.rvmat","A3\soft_f_beta\Truck_01\Data\Truck_01_int_base_damage.rvmat","A3\soft_f_beta\Truck_01\Data\Truck_01_int_base_destruct.rvmat","A3\soft_f_beta\Truck_01\Data\Truck_01_int_base_VP.rvmat","A3\soft_f_beta\Truck_01\Data\Truck_01_int_base_VP_damage.rvmat","A3\soft_f_beta\Truck_01\Data\Truck_01_int_base_destruct.rvmat","A3\soft_f_beta\Truck_01\Data\Truck_01_int_board.rvmat","A3\soft_f_beta\Truck_01\Data\Truck_01_int_board_damage.rvmat","A3\soft_f_beta\Truck_01\Data\Truck_01_int_board_destruct.rvmat","A3\soft_f_beta\Truck_01\Data\Truck_01_int_board_VP.rvmat","A3\soft_f_beta\Truck_01\Data\Truck_01_int_board_VP_damage.rvmat","A3\soft_f_beta\Truck_01\Data\Truck_01_int_board_destruct.rvmat","A3\data_f\Glass_veh.rvmat","A3\data_f\Glass_veh_armored_damage.rvmat","A3\data_f\Glass_veh_armored_damage.rvmat","A3\data_f\Glass_veh_int.rvmat","A3\data_f\Glass_veh_armored_damage.rvmat","A3\data_f\Glass_veh_armored_damage.rvmat"}; */ }; 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; 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 { useFlare = 1; position = "light_R_flare"; }; class Left2: Left { useFlare = 1; position = "light_L_flare"; }; }; aggregateReflectors[] = {{"Left","Right","Left2","Right2"}}; numberPhysicalWheels = 8; }; class JustMathew_M1070_Truck_01_base: Truck_01_base_F { model = "\JustMathew_M1070_Truck_01\JustMathew_M1070_Truck_01"; /// simple path to model picture = "\A3\Weapons_F\Data\placeholder_co.paa"; /// just some icon in command bar Icon = "\A3\Weapons_F\Data\placeholder_co.paa"; /// icon in map terrainCoef = 6.5; /// different surface affects this car more, stick to tarmac turnCoef = 2.5; /// should match the wheel turn radius precision = 10; /// how much freedom has the AI for its internal waypoints - lower number means more precise but slower approach to way brakeDistance = 3.0; /// how many internal waypoints should the AI plan braking in advance acceleration = 15; /// how fast acceleration does the AI think the car has fireResistance = 5; /// lesser protection against fire than tanks armor = 32; /// just some protection against missiles, collisions and explosions cost = 50000; /// how likely is the enemy going to target this vehicle transportMaxBackpacks = 3; /// just some backpacks fit the trunk by default transportSoldier = 3; /// number of cargo except driver /// some values from parent class to show how to set them up wheelDamageRadiusCoef = 0.9; /// for precision tweaking of damaged wheel size wheelDestroyRadiusCoef = 0.4; /// for tweaking of rims size to fit ground maxFordingDepth = 0.5; /// how high water would damage the engine of the car waterResistance = 1; /// if the depth of water is bigger than maxFordingDepth it starts to damage the engine after this time crewCrashProtection = 0.25; /// multiplier of damage to crew of the vehicle => low number means better protection driverLeftHandAnimName = "drivewheel"; /// according to what bone in model of car does hand move driverRightHandAnimName = "drivewheel"; /// beware, non-existent bones may cause game crashes (even if the bones are hidden during play) /* class TransportItems /// some first aid kits in trunk according to safety regulations { item_xx(FirstAidKit,4); }; */ class Turrets{}; /// doesn't have any gunner nor commander class HitPoints: HitPoints { class HitLFWheel: HitLFWheel {armor=0.125; passThrough=0;}; /// it is easier to destroy wheels than hull of the vehicle class HitLF2Wheel: HitLF2Wheel {armor=0.125; passThrough=0;}; class HitRFWheel: HitRFWheel {armor=0.125; passThrough=0;}; class HitRF2Wheel: HitRF2Wheel {armor=0.125; passThrough=0;}; class HitFuel {armor=0.50; material=-1; name="fueltank"; visual=""; passThrough=0.2;}; /// correct points for fuel tank, some of the damage is aFRLied to the whole class HitEngine {armor=0.50; material=-1; name="engine"; visual=""; passThrough=0.2;}; class HitBody: HitBody {name = "body"; visual="camo1"; passThrough=1;}; /// all damage to the hull is aFRLied to total damage class HitGlass1: HitGlass1 {armor=0.25;}; /// it is pretty easy to puncture the glass but not so easy to remove it class HitGlass2: HitGlass2 {armor=0.25;}; class HitGlass3: HitGlass3 {armor=0.25;}; class HitGlass4: HitGlass4 {armor=0.25;}; }; 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 // front left track, left offset memoryPointTrackFLL = "TrackFLL"; // front left track, right offset memoryPointTrackFLR = "TrackFLR"; // back left track, left offset memoryPointTrackBLL = "TrackBLL"; // back left track, right offset memoryPointTrackBLR = "TrackBLR"; // front right track, left offset memoryPointTrackFRL = "TrackFRL"; // front right track, right offset memoryPointTrackFRR = "TrackFRR"; // back right track, left offset memoryPointTrackBRL = "TrackBRL"; // back right track, right offset memoryPointTrackBRR = "TrackBRR"; class Damage /// damage changes material in specific places (visual in hitPoint) { /* tex[]={}; mat[]= { "A3\data_f\glass_veh_int.rvmat", /// material mapped in model "A3\data_f\Glass_veh_damage.rvmat", /// changes to this one once damage of the part reaches 0.5 "A3\data_f\Glass_veh_damage.rvmat", /// changes to this one once damage of the part reaches 1 "A3\data_f\glass_veh.rvmat", /// another material "A3\data_f\Glass_veh_damage.rvmat", /// changes into different ones "A3\data_f\Glass_veh_damage.rvmat" }; */ }; /* DEFINED EARLIER class Exhausts /// specific exhaust effects for the car { class Exhaust1 /// the car has two exhausts - each on one side { position = "exhaust1_pos"; /// name of initial memory point direction = "exhaust1_dir"; /// 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 LightCarHeadL02: LightCarHeadL01 { position = "LightCarHeadL02"; direction = "LightCarHeadL02_end"; FlareSize = 0.5; /// side bulbs aren't that strong }; class LightCarHeadR01: LightCarHeadL01 { position = "LightCarHeadR01"; direction = "LightCarHeadR01_end"; hitpoint = "Light_R"; selection = "Light_R"; }; class LightCarHeadR02: LightCarHeadR01 { position = "LightCarHeadR02"; direction = "LightCarHeadR02_end"; FlareSize = 0.5; }; }; aggregateReflectors[] = {{"LightCarHeadL01", "LightCarHeadL02"}, {"LightCarHeadR01", "LightCarHeadR02"}}; /// aggregating reflectors helps the engine a lot /// it might be even good to aggregate all lights into one source as it is done for most of the cars /* class EventHandlers: EventHandlers { // (_this select 0): the vehicle // """" Random texture source (pick one from the property textureList[]) // []: randomize the animation sources (accordingly to the property animationList[]) // false: Don't change the mass even if an animation source has a defined mass init="if (local (_this select 0)) then {[(_this select 0), """", [], false] call bis_fnc_initVehicle;};"; }; */ // Must be kept as fail-safe in case of issue with the function // hiddenSelectionsTextures[]={"\A3\Weapons_F\Data\placeholder_co.paa"}; /// we could use any texture to cover the car /* class MFD /// Clocks on the car board { class ClockHUD { #include "cfgHUD.hpp" }; }; */ }; class JustMathew_M1070_Truck_01: JustMathew_M1070_Truck_01_base { scope = 2; /// makes the car visible in editor scopeCurator=2; /// scope 2 means it's available in Zeus mode (0 means hidden) crew = "B_crew_F"; /// we need someone to fit into the car side = 1; /// civilian car should be on civilian side faction = BLU_F; /// and with civilian faction displayName = "M1070 HET"; /// displayed in Editor }; /* // Derivate from the base class class JustMathew_M1070_Truck_01_Olive: JustMathew_M1070_Truck_01 /// 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 = "B_crew_F"; /// we need someone to fit into the car side = 1; /// civilian car should be on civilian side faction = BLU_F; /// and with civilian faction }; // Derivate from the base class class JustMathew_M1070_Truck_01_Sand: JustMathew_M1070_Truck_01_Olive /// some class that is going to be visible in editor { forceInGarage=1; // This will force the garage to display this vehicle, otherwise it won't because it shares the same p3d as the previous displayName="Test Car (Black)"; scope=2; /// makes the car visible in editor scopeCurator=2; // scope 2 means it's available in Zeus mode (0 means hidden) crew="C_man_1"; /// we need someone to fit into the car side=3; /// civilian car should be on civilian side faction = CIV_F; /// and with civilian faction // the texture source used will be the green one, whatever it probability because it's the only one defined here textureList[]= { "black", 1 }; }; */ };
Model.cfg
class Rotation { type = "rotation"; memory = 1; minValue = 0; maxValue = 1; angle0 = 0; angle1 = 1; }; class CfgSkeletons { class Default { isDiscrete = 1; skeletonInherit = ""; skeletonBones[] = {}; }; class Vehicle : Default {}; class Car : Vehicle { skeletonBones[]= { "drivewheel","", "wheel_1_1_damper_land","", "wheel_1_2_damper_land","", "wheel_1_3_damper_land","", "wheel_1_4_damper_land","", "wheel_2_1_damper_land","", "wheel_2_2_damper_land","", "wheel_2_3_damper_land","", "wheel_2_4_damper_land","", "wheel_1_1_damper","wheel_1_1_damper_land", "wheel_1_2_damper","wheel_1_2_damper_land", "wheel_1_3_damper","wheel_1_3_damper_land", "wheel_1_4_damper","wheel_1_4_damper_land", "wheel_2_1_damper","wheel_2_1_damper_land", "wheel_2_2_damper","wheel_2_2_damper_land", "wheel_2_3_damper","wheel_2_3_damper_land", "wheel_2_4_damper","wheel_2_4_damper_land", "wheel_1_1_steering","wheel_1_1_damper", "wheel_1_2_steering","wheel_1_2_damper", "wheel_1_3_steering","wheel_1_3_damper", "wheel_1_4_steering","wheel_1_4_damper", "wheel_2_1_steering","wheel_2_1_damper", "wheel_2_2_steering","wheel_2_2_damper", "wheel_2_3_steering","wheel_2_3_damper", "wheel_2_4_steering","wheel_2_4_damper", "wheel_1_1","wheel_1_1_steering", "wheel_1_2","wheel_1_2_steering", "wheel_1_3","wheel_1_3_steering", "wheel_1_4","wheel_1_4_steering", "wheel_2_1","wheel_2_1_steering", "wheel_2_2","wheel_2_2_steering", "wheel_2_3","wheel_2_3_steering", "wheel_2_4","wheel_2_4_steering", "wheel_1_1_unhide","wheel_1_1", "wheel_1_2_unhide","wheel_1_2", "wheel_1_3_unhide","wheel_1_3", "wheel_1_4_unhide","wheel_1_4", "wheel_2_1_unhide","wheel_2_1", "wheel_2_2_unhide","wheel_2_2", "wheel_2_3_unhide","wheel_2_3", "wheel_2_4_unhide","wheel_2_4", "wheel_1_1_hide","wheel_1_1", "wheel_1_2_hide","wheel_1_2", "wheel_1_3_hide","wheel_1_3", "wheel_1_4_hide","wheel_1_4", "wheel_2_1_hide","wheel_2_1", "wheel_2_2_hide","wheel_2_2", "wheel_2_3_hide","wheel_2_3", "wheel_2_4_hide","wheel_2_4", "OtocVez","", "OtocHlaven","OtocVez", "damageHide","", "damageVez","OtocVez", "damageHlaven","OtocHlaven", "ukaz_rychlo","", "ukaz_rychlo2","", "ukaz_rpm","", "mph","", "rpm","", "fuel","", "fuel_1","", "fuel_01","", "fuel_2","", "fuel_3","", "prop_01","", "prop_02","", "prop_2","", "prop_1","", "glass1","damageHide", "glass2","damageHide", "glass3","damageHide", "glass4","damageHide" }; }; class Truck: Car; class JustMathew_M1070_Truck_01_bones: Truck { skeletonInherit="Truck"; skeletonBones[]= { "reverse_light","", "daylights","damageHide", "door1","", "door2","", "glass5","damageHide" }; }; }; class CfgModels { class Default { sectionsInherit = ""; sections[] = {}; skeletonName = ""; }; class Vehicle: Default { sections[] = { "cislo", "grupa", "side", "sektor", "clan", "clan_sign", "podsvit pristroju", "poskozeni", "L svetlo", "P svetlo", "zasleh" }; }; class Car: Vehicle { htMin = 60; // Minimum half-cooling time (in seconds) htMax = 180; // Maximum half-cooling time (in seconds) afMax = 100; // Maximum temperature in case the model is alive (in celsius) mfMax = 8; // 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 = 150; // Metabolism temperature of the model (in celsius) sections[]= { "ammo", "zadni svetlo", "brzdove svetlo", "spz", "motor", "body", "clan", "clan_sign", "zasleh", "Light_R", "Light_L", "podsvit pristroju", "glass1", "glass2", "glass3", "glass4", "glass5", "glass6" }; skeletonName="Car"; class Animations { // destruct START class damageHide { type="hide"; source="damage"; selection="damageHide"; hideValue=1.0; }; class damageHideVez:damageHide { selection="OtocVez"; }; class damageHideHlaven:damageHide { selection="OtocHlaven"; }; // Wheels START // Wheels Complete Destruct START class wheel_1_1_destruct { type="hide"; selection="wheel_1_1_hide"; source="HitLFWheel"; minValue = 0; // upravit na 0.99 maxValue = 1; // upravit na 1.0 hidevalue = 0.99999; }; class wheel_1_2_destruct: wheel_1_1_destruct {source="HitLBWheel";selection="wheel_1_2_hide";}; class wheel_1_3_destruct: wheel_1_1_destruct {source="HitLMWheel";selection="wheel_1_3_hide";}; class wheel_1_4_destruct: wheel_1_1_destruct {source="HitLF2Wheel";selection="wheel_1_4_hide";}; class wheel_2_1_destruct: wheel_1_1_destruct {source="HitRFWheel";selection="wheel_2_1_hide";}; class wheel_2_2_destruct: wheel_1_1_destruct {source="HitRBWheel";selection="wheel_2_2_hide";}; class wheel_2_3_destruct: wheel_1_1_destruct {source="HitRMWheel";selection="wheel_2_3_hide";}; class wheel_2_4_destruct: wheel_1_1_destruct {source="HitRF2Wheel";selection="wheel_2_4_hide";}; class wheel_1_1_destruct_unhide { type="hide"; selection="wheel_1_1_unhide"; source="HitLFWheel"; minValue = 0; maxValue = 1; hidevalue = 0.00000; UnHidevalue = 1.00000; }; class wheel_1_2_destruct_unhide: wheel_1_1_destruct_unhide {source="HitLBWheel";selection="wheel_1_2_unhide";}; class wheel_1_3_destruct_unhide: wheel_1_1_destruct_unhide {source="HitLMWheel";selection="wheel_1_3_unhide";}; class wheel_1_4_destruct_unhide: wheel_1_1_destruct_unhide {source="HitLF2Wheel";selection="wheel_1_4_unhide";}; class wheel_2_1_destruct_unhide: wheel_1_1_destruct_unhide {source="HitRFWheel";selection="wheel_2_1_unhide";}; class wheel_2_2_destruct_unhide: wheel_1_1_destruct_unhide {source="HitRBWheel";selection="wheel_2_2_unhide";}; class wheel_2_3_destruct_unhide: wheel_1_1_destruct_unhide {source="HitRMWheel";selection="wheel_2_3_unhide";}; class wheel_2_4_destruct_unhide: wheel_1_1_destruct_unhide {source="HitRF2Wheel";selection="wheel_2_4_unhide";}; // Wheels Complete Destruct END #define DamageOffset 0.2 // Wheels Damage START class wheel_1_1_Damage: wheel_1_1_destruct { type="translation"; axis="Basic_Damper_Destruct_Axis"; memory=1; selection="wheel_1_1_damper"; source="HitLFWheel"; minValue = 0.0; maxValue = 1; offset0 = 0; offset1 = DamageOffset; }; class wheel_1_2_Damage: wheel_1_1_Damage {source="HitLBWheel";selection="wheel_1_2_damper";}; class wheel_1_3_Damage: wheel_1_1_Damage {source="HitLMWheel";selection="wheel_1_3_damper";}; class wheel_1_4_Damage: wheel_1_1_Damage {source="HitLF2Wheel";selection="wheel_1_4_damper";}; class wheel_2_1_Damage: wheel_1_1_Damage {source="HitRFWheel";selection="wheel_2_1_damper";}; class wheel_2_2_Damage: wheel_1_1_Damage {source="HitRBWheel";selection="wheel_2_2_damper";}; class wheel_2_3_Damage: wheel_1_1_Damage {source="HitRMWheel";selection="wheel_2_3_damper";}; class wheel_2_4_Damage: wheel_1_1_Damage {source="HitRF2Wheel";selection="wheel_2_4_damper";}; class wheel_1_1_Damper_Damage_BackAnim: wheel_1_1_Damage {selection="wheel_1_1_damper";offset1 = -1.2*DamageOffset;}; class wheel_1_2_Damper_Damage_BackAnim: wheel_1_1_Damper_Damage_BackAnim {source="HitLBWheel";selection="wheel_1_2_damper";}; class wheel_1_3_Damper_Damage_BackAnim: wheel_1_1_Damper_Damage_BackAnim {source="HitLMWheel";selection="wheel_1_3_damper";}; class wheel_1_4_Damper_Damage_BackAnim: wheel_1_1_Damper_Damage_BackAnim {source="HitLF2Wheel";selection="wheel_1_4_damper";}; class wheel_2_1_Damper_Damage_BackAnim: wheel_1_1_Damper_Damage_BackAnim {source="HitRFWheel";selection="wheel_2_1_damper";}; class wheel_2_2_Damper_Damage_BackAnim: wheel_1_1_Damper_Damage_BackAnim {source="HitRBWheel";selection="wheel_2_2_damper";}; class wheel_2_3_Damper_Damage_BackAnim: wheel_1_1_Damper_Damage_BackAnim {source="HitRMWheel";selection="wheel_2_3_damper";}; class wheel_2_4_Damper_Damage_BackAnim: wheel_1_1_Damper_Damage_BackAnim {source="HitRF2Wheel";selection="wheel_2_4_damper";}; // Wheels Damage END // Wheels END //Glass Damage START class Glass1_destruct { type="hide"; selection="glass1"; source="HitGlass1"; minValue = 0; maxValue = 1; hidevalue = 0.99999; }; class Glass2_destruct: Glass1_destruct {selection="glass2";source="HitGlass2";}; // Inherits from the the glass 1, only the selection and the source will be changed class Glass3_destruct: Glass1_destruct {selection="glass3";source="HitGlass3";}; class Glass4_destruct: Glass1_destruct {selection="glass4";source="HitGlass4";}; class Glass5_destruct: Glass1_destruct {selection="glass5";source="HitGlass5";}; class Glass6_destruct: Glass1_destruct {selection="glass6";source="HitGlass6";}; //Glass Damage END // destruct END class Fuel: Rotation { source="fuel"; selection="fuel"; axis="fuel_axis"; maxValue=1; memory=1; angle0="rad -110"; angle1=0; }; class IndicatorSpeed: Rotation { source="speed"; selection="mph"; axis="mph_axis"; memory=1; maxValue=38.900002; angle1="rad -265"; }; class IndicatorFuel: Rotation { type="rotation"; source="fuel"; selection="fuel_1"; axis="fuel_1_axis"; memory=1; minValue=0.000000; maxValue=1.000000; angle0=-0.087266; angle1=-1.658063; }; class IndicatorRPM: Rotation { source="rpm"; selection="rpm"; axis="rpm_axis"; memory=1; angle1="rad 80"; }; class DrivingWheel: Rotation { source="drivingWheel"; selection="drivewheel"; axis="drivewheel_axis"; minValue=-1; maxValue=1; angle0=(rad 80); angle1=(rad -80); }; class Steering_1_1 { type="rotationY"; source="drivingWheel"; selection="wheel_1_1_steering"; axis="wheel_1_1_steering_axis"; memory=1; minValue= -1; maxValue= 1; angle0=1.047198; angle1=-1.047198; }; class Steering_2_1: Steering_1_1 { selection="wheel_2_1_steering"; axis="wheel_2_1_steering_axis"; }; class Wheel_1_1 { type="rotationX"; source="wheel"; selection="wheel_1_1"; axis="wheel_1_1_axis"; memory=1; sourceAddress="loop"; minValue=0; maxValue=1; angle0=0; angle1="rad -360"; }; class wheel_2_1: Wheel_1_1 { selection="wheel_2_1"; axis="wheel_2_1_axis"; }; class wheel_1_2: Wheel_1_1 { selection="wheel_1_2"; axis="wheel_1_2_axis"; }; class wheel_1_3: Wheel_1_1 { selection="wheel_1_3"; axis="wheel_1_3_axis"; }; class Wheel_2_2: Wheel_1_1 { selection="wheel_2_2"; axis="wheel_2_2_axis"; }; class Wheel_2_3: Wheel_1_1 { selection="wheel_2_3"; axis="wheel_2_3_axis"; }; class Wheel_1_4: Wheel_1_1 { selection="wheel_1_4"; axis="wheel_1_4_axis"; }; class Wheel_2_4: Wheel_1_1 { selection="wheel_2_4"; axis="wheel_2_4_axis"; }; class Wheel_1_1_Damper { type="translation"; source="damper"; selection="wheel_1_1_damper_land"; axis="posun wheel_1_1"; animPeriod = 1; minValue="0"; maxValue="1"; offset0= "0.5"; offset1= "-0.5"; memory=0; }; class wheel_2_1_Damper: Wheel_1_1_Damper { selection="wheel_2_1_damper_land"; }; class wheel_1_2_Damper: Wheel_1_1_Damper { selection="wheel_1_2_damper_land"; }; class Wheel_1_3_Damper: Wheel_1_1_Damper { selection="wheel_1_3_damper_land"; }; class Wheel_1_4_Damper: Wheel_1_1_Damper { selection="wheel_1_4_damper_land"; }; class Wheel_2_2_Damper: Wheel_1_1_Damper { selection="wheel_2_2_damper_land"; }; class Wheel_2_3_Damper: Wheel_1_1_Damper { selection="wheel_2_3_damper_land"; }; class Wheel_2_4_Damper: Wheel_1_1_Damper { selection="wheel_2_4_damper_land"; }; class daylights { type="hide"; source="rpm"; selection="daylights"; minValue=-0.8; maxValue=0.2; unhidevalue=1; sourceAddress="clamp"; }; class reverse_light { type="Hide"; selection="reverse_light"; sourceAddress="clamp"; source="Gear"; minValue = -1; maxValue = 0; hideValue = "0.2"; }; }; }; class Truck: Car { skeletonName="Truck"; sectionsInherit = "Car"; sections[] =""; }; class JustMathew_M1070_Truck_01: Truck { skeletonName = "JustMathew_M1070_Truck_01_bones"; sectionsInherit = "Truck"; sections[]= { "Camo1", "Camo2", "Camo3", "body", "karoserie", "palivo" }; class Animations: Animations { class DrivingWheel { type="rotation"; source="drivingWheel"; selection="drivewheel"; axis="drivewheel_axis"; memory=1; minValue=-1; maxValue=1; angle0=(rad 70); angle1=(rad -70); }; class Steering_1_1 { type="rotationY"; source="drivingWheel"; selection="wheel_1_1_steering"; axis="wheel_1_1_steering_axis"; memory=1; minValue="rad -90"; maxValue="rad +90"; angle0=1.0471981; angle1=-1.0471981; }; class Steering_2_1: Steering_1_1 { selection="wheel_2_1_steering"; axis="wheel_2_1_steering_axis"; angle0=1.0471981; angle1=-1.0471981; }; class IndicatorSpeed: Rotation { source="speed"; selection="mph"; axis="mph_axis"; memory=1; maxValue=28; angle0=0.17453299; angle1=-3.141593; }; class IndicatorRPM: Rotation { type="rotation"; source="rpm"; selection="rpm"; axis="rpm_axis"; memory=1; minValue=0; maxValue=7500; angle0=(rad 0); angle1=(rad 250); }; class fuel { type="rotation"; source="fuel"; selection="fuel"; axis="fuel_axis"; memory=1; minValue=0; maxValue=1; angle0=0; angle1="rad +55"; }; class prop_01 { type="rotation"; source="rpm"; selection="prop_1"; axis="prop_1_axis"; memory=1; minValue=1000; maxValue=7000; angle0="rad 30"; angle1="rad 35"; }; class daylights { type="hide"; source="rpm"; selection="daylights"; minValue=-0.8; maxValue=0.2; unhidevalue=1; sourceAddress="clamp"; }; class reverse_light { type="Hide"; selection="reverse_light"; sourceAddress="clamp"; source="Gear"; minValue = -1; maxValue = 0; hideValue = "0.2"; }; class damageHidedoor1: damageHide { selection="door1"; }; class damageHidedoor2: damageHide { selection="door2"; }; class Glass5_destruct { type="hide"; selection="glass5"; source="HitGlass5"; minValue = 0; maxValue = 1; hidevalue = 0.99999; }; class Wheel_1_1_Damper: Wheel_1_1_Damper { type="translation"; source="damper"; selection="wheel_1_1_damper_land"; axis="basic_damper_destruct_axis"; animPeriod = 1; minValue="0"; maxValue="1"; offset0= "0.5"; offset1= "-0.5"; memory=1; }; class wheel_2_1_Damper: Wheel_1_1_Damper { selection="wheel_2_1_damper_land"; }; class wheel_1_2_Damper: Wheel_1_1_Damper { selection="wheel_1_2_damper_land"; }; class Wheel_2_2_Damper: Wheel_1_1_Damper { selection="wheel_2_2_damper_land"; }; }; }; };
Update:
I figured out how to get wheel dampers working, I forgot to define the rear 4 wheels in my class at the end of model.cfg. At this point I'm trying to get the dampers working the right way. When t should go up it goes down, and vice versa.
-
For the benefit of the guy who a year from now has this same problem and finds this thread, how did the visual LOD cause the problem, and how did you solve it?
It didn't even take a year for someone to need that answer, as I am in the same trouble, even tho my model is tilting to the side. Any update on how to fix this?
- 1
-
Hello there!
I have trouble getting my truck driving properly, and I suspect it's a config error I've made. Right now I have 2 problems:
- The wheels are not turning, no matter what I do. In the visual LOD I've made selections for the wheels called "wheel_X_X_hide" as the example from Arma 3 Samples have done it. In the memory LOD I have defined a corresponding axis, containing 2 verts in a names selection called the wheels name with "_axis" at the end. For the front 2 wheels, which will be the steering ones, I have made another selection called "wheel_X_X_steering".
- My model are tilted a bit to the left in-game. I have no idea why, but it seems it ignores my LandContact LOD, since the wheels on the down-side are under ground. When I drive around in the truck, it seems like the Geometry LOD are hitting the ground.
For each wheel this is defined:
- wheel_X_X_hide - in the visual LOD
- wheel_X_X_axis - in memory
- wheel_X_X_steering - in visual LOD
- wheel_X_X_steering_axis - in memory
- wheel_X_X_damper - in geometry
- wheel_X_X_damper_land - in LandContact
- wheel_X_X_bound - in memory
Anyone who can spot what I'm missing? My config.cpp and model.cfg are almost identical with the one from the car sample, as I made a sanity-check not so long ago.
-
Good evening!
I've just made my low-poly model, which is still in a lot of different "objects" or "meshes".
I have still some work to do before I'm done with the model, so I would like to avoid joining the meshes, yet. When I export to .p3d tho, I get a lot of visual-layers, as all of the objects have their own visual layer in Object Builder, even tho I have put them on the same layer in Blender.
My question is now; How do you do it, do you join all the meshes and work on the whole model like that?
Any advice is much appreciated, thanks!
-
I will give Blender and maybe 3D Studio a go, due to licences, number of users and available resources, tutorials etc. I wish companies other than Autodesk made their software freely accessible to academic/community users.
Most of Autodesk's products are indeed free for academic use. All you have to do is study something, doesn't matter if the program you want is not within your area of study.
You can find a list of free Autodesk software here.
-
I've had the same problem, but I haven't had the time lately to figure out why.
When you get it working again, could you please post how you did it?
Thanks!
-
Hi!
It seems a link is broken at the BI wiki page for this tool.
Under "Description" --> "Notes" it says:
That link gives me a 404.
The documentation link just below works just fine tho.
-
Edit:
It seems I might have been a little too quick on the trigger there, as my issue was with the points not being on the right places, since I forgot to apply their location in blender.
I can confirm that you do not have to declare the points in model.cfg, they just have to be in the memory-LOD and in a named group.
I think what made my trouble before starting this thread, was my not-working config.cpp, since a fresh copy made it work like a charm.
Before discovering the root of my issue, I managed to make yet another post, but since it is obsolete now, I've deleted it.
Thanks for your help guys!
-
Thanks for the answers!
I have made 2 points defining the cargo-space and one defining the enter/exit point, in the memory-LOD. I have named them the same as in the reference.
I'm sorry I have to ask, but do I have to declare the points within model.cfg? In that case I suspect the problem is solved.
I copied the example of the carrier from the reference, into the class Carrier as mentioned in the original post.
-
Hello there!
I'm having trouble setting up vehicle-in-vehicle transport and I think the major cause is my lack of knowledge about my models config.cfg file.
As I understand the official vehicle-in-vehicle transport wiki page, there should be 2 verts defining the cargo-space, and at least one defining the enter-exit point. My question is then, where do I define them?My problem is, I cant load anything into the truck, not from the editor nor in-game. I'm fairly used to cpp programming, but I can't quite wrap my head around this issue.
If anyone have some good documentation for the config.cfg, it will be much appreciated!
(I know of this)
My basic config.cfg structure is as follows:
class cfgVehicles { class Truck; class Truck_F : Truck { // Hitpoints defined }; class my_base_class : Truck_F { // Model definition etc. }; class actual_used_class : my_base_class { class VehicleTransport { scope = 2; class Carrier { // the stuff from the wiki-page };};};};
-
Ah okay, then I will use .tga!
Thanks for the good answers guys :D
-
Are there any advantages of using .tga?
When I make textures in blender, it is made in .png.
-
Thanks man, that was exactly what I was looking for!
Do I have to convert the maps manually to .paa, or is that done when I pack the addon with Addon Builder?
In the Naming rules you linked to, it says source textures are OK to have as .png.
-
Hello there!
I'm looking for a clear list of which different "texture layers" (or maps) to make for my model and I would like some advise for where to look for tutorials etc.
As of now, I know of these types of maps:
- Diffuse (General color)
- Opacity (Opacity, greyscale)
- Bump map (White is "pop-out")
- Normal map (Something like bumpmap, but different?)
- Specular map (Shinyness)
- Glow map (Glow in the dark, used on chemlights?)
- Reflection map (The how well if reflects other objects)
When texturing, is it correct that maps I assign to the model in blender, will be carried over to Arma through Object builder?
- In that case, I should be able to use general blender-texturing tutorials as reference, right?
As of now, this video is the best explanation of realistic texturing in blender, I have found.
Any kind of pointing-towards-where-I-can-learn-more is much appreciated!
// JustMathew
-
Hi there!
Is it just the textures you have trouble making?
In case you have not seen these videoes GameDevBurnes have made here they are.
I would like to help you, if I can. You are welcome to send me a PM here, or on Steam.
-
Hi there!
My team and I are currently working on a logistics mod, which will add vehicles capable of moving containers, tanks etc.
To do this, we need som help with the models, or even a modeller, since neither of us are good at that part. We can take care of the scripting, vert-sellections etc. All we need is a model just before the stage of exporting to .p3d. From there, we can take care of the rest.
If you are reading this and thinks you want to help us, but do not want to make full models, it would be of great help to us if we could just ask you for advice when we need it.
Thanks for even reading this, hope you can help!
-
I would suggest taking a look at:
https://community.bistudio.com/wiki/CfgVehicles_Config_Reference#sound
Hope that helps
-
If you want to change the loadout of units placed with Eden editor, you can right-click and choose Arsenal.
Else you might want to take a look at Eden Enhanced
https://forums.bistudio.com/topic/188312-3den-enhanced/Hope that helps
Model is front heavy
in ARMA 3 - MODELLING - (O2)
Posted
Oh, sounds like it will do the trick, I'll try that!