Jump to content

scotg

Member
  • Content Count

    416
  • Joined

  • Last visited

  • Medals

Posts posted by scotg


  1. On 1/9/2018 at 11:34 AM, DSabre said:

    The TacOps update of November 2017 forces us to use wheel.cfg

    This is confusing. @DSabre mentions wheel.cfg a few times throughout his first post, but I am not sure what wheel.cfg is. He has also mentioned it in other threads, if I recall correctly, and he has brought it up with me in private messages. Unless someone else knows what he's referring to, we may not be sure what this is until if/when he gets back into working on airplaneX stuff. It is taxing on one's sanity, especially if they feel like they're doing it alone. Getting this even just close to being right is a thing that really separates the big-team mod developers from individual, talented mod'ers.


  2. So now I'm trying to figure out how to use the diag_mergeConfigFile command. I did what @reyhard and @TeTeT said, esp. reyhard's advice about keeping a copy of the .exe before switching back to stable.

    Based on the example here: https://community.bistudio.com/wiki/diag_mergeConfigFile, I replaced it with my plane's path:  diag_mergeConfigFile ["P:\gijoe\vhx_plane\cobra_firebat\config.cpp"]. Got an error message saying it was missing a ';' so I tried placing it at the end. Nothing. For unknown reason I tried placing it before the path. I would never have thought of that except for that one moment of randomness, but it did something. Started up scenario, and it didn't let me enter the plane. Weird. I didn't delete plane entry point; all I did was bump the spring strength up to to a ridiculous number, for the sake of testing the config merge. I'm guessing the missing ';' wasn't supposed to be where I put it, after all. For grits and shins, I shut down game and compiled with pboProject, but noisy output just gave me missing sound file warnings (i.e.: for sure no missing ';' in the config).

     

    I think you guys are right about this saving me loads of time; I just need to figure it out first.


  3. Forgive me for the double post, but I wanted to distinguish these next thoughts from the previous one. Since that post was a little in-depth, I didn't want this to get glossed over.

    1.) Let me impart some wisdom to you guys about case sensitivity. It was a major source of my problems which led to a bunch of unnecessary anguish and repeated trials. Even if you read an official statement somewhere claiming that a parameter is case insensitive, forget that noise and just stick to your principles. Always practice case sensitivity, and hunt down and assimilate rogue letters if you are pasting from someone else's script. For me, it was a 'w' where I needed a 'W' for Wheel_*. The W is sneaky for me, especially in the Courier-esque fonts that Notepad++ uses.

    2.) This one is really more of a question, but first a brief outline of my trial and error process:

    • Start up A3, play-test, observe, shut down A3
    • Make changes to config.cpp, model.cfg, and/or [model].p3d
    • Compile in Addon Builder. If it fails without good explanation, compile in pboProject (free version) for better output. On successful compile in AB (needed for including .rtm files), move on.
    • Repeat process

    It can be quite time-consuming, especially with all the load times. I feel like there should be a way to make changes in Eden to save time, and then use that data to make the changes permanent in the config (where most of the alterations take place). This would save time from all the load screens, not to mention how it would cut down on all the anguish over waiting, anticipating, and lingering disappointment accumulated between changes and results. I ran across this page: https://community.bistudio.com/wiki/Mission_Editor:_Debug_Console_(Arma_3). It seems to cover more about configuring for servers, but it does say changes can be made on the fly. It just doesn't specify what kind of changes - changes to an .sqf, .cpp, .cfg, or what? It seems to also be a fairly new feature, in the scheme of things. My question is: Has anyone used Eden's Debug Console to do fast edits to their config.cpp settings? Can it be done?

     

    Edit: This question, though maybe not presented in the most efficient thread, is super important to anyone who has spent time tweaking airplane suspension. Thus, this is a good place for it. 


  4. Kind of on a side note, but I think it's very relevant: None of your visible geometry have to have the same names as your virtual components. I found this useful when aligning the dampers/pistons and their stabilizers, the little elbows that keep the gears from turning out of position. Instead of using a translation animation approach in the model.cfg animations, use a rotation for your damper part - just like you would for those elbows.

     

    In the skeleton section make the damper a child of the lower stabilizer elbow.

    "damper_guide" ,"", //To provide something to inherit in animations. Might be redundant. 
    "gear_1"	,"",  // The front gear mast, which lowers for landing. Connected to the root
    "gear_1_2"	,"gear_1", // The first arm of the elbow, connected to the gear mast
    "gear_1_3"	,"gear_1_2", // The second gear arm, its axis is the elbow joint. Connected to first arm
    "gear_1_damper"	,"gear_1_3", //* The piston that goes in to and out of the gear mast. Connected to 2nd gear arm
    "gear_1_caster"	,"gear_1_damper", //* Don't forget the steering on the front wheel.Connected to the piston. 
    "visWheel_1"	,"gear_1_caster", //* The visible wheel; turns at virtual wheel's rate. Connected last.
    
    // Steering can go before or after the three parts of the elbow assembly, but never within.
    //* These have corresponding virtual components, and for this set up should be named differently. 


    If your elbow parts are the same length, rotate the first elbow and the damper the same radian value, and rotate the middle (where it actually looks like an elbow) the negative of twice that amount. The goal is to nullify the difference. The piston will stay in its sleeve, and the joints will all stay "connected."

    			class damper_guide_move ///again: this class might be redundant...
    			{
    				type="translation";
    				source="Damper_1_source";
    				selection="damper_guide";
    				axis="basic_damper_destruct_axis"; //This is in a lot of vanilla vehicles
    //				sourceAddress = clamp;// (default) ///these are in here, but why?
    				minValue = 0.0;
    				maxValue = 1;
    				offset0 = 1;
    				offset1 = -1;
    				animPeriod = 0.0;
    				initPhase = 0.0;
    //				memory = true;//(default assumed)
    			};
    			
    			class gear_1_stabil_1_rot: damper_guide_move ///...but we'll inherit from it anyway
    			{
    				type="rotation";
    				source="Damper_1_source";///if inheriting from damper_guide_move, this might be redundant
    				selection="gear_1_2";
    				axis="gear_1_2_axis";
    				minValue = 0.0; 		///redundant
    				maxValue = 1;			///redundant
    				angle0 = -0.0;
    				angle1 = 1.0472;//rad 60; //Use also for Damper rotation when both elbow sections are equidistant. 
    				animPeriod = 0.0;		///redundant
    				initPhase = 0.0;		///redundant
    //				memory = true;//(default assumed)
    			};
    			class gear_1_stabil_2_rot: gear_1_stabil_1_rot
    			{
    				selection="gear_1_3";
    				axis="gear_1_3_axis";
    				angle0 = 0.0;
    				angle1 = -2.0944;//rad -120.0; //nullifies sum of angle changes for gear_1_2 and gear_1_damper
    			};
    			
    			class gear_1_damper_rot: gear_1_stabil_1_rot //inherits most of gear_1_2 values
    			{
    				selection="gear_1_damper";
    				axis="gear_1_damper_axis";
    			};

    It can still be done for landing gear stabilizers of different lengths, but it would require a little more math, knowing the lengths of the arms in the elbow, and thus knowing the initial and terminal angles. I believe the elbow angle should still be the negative of the sum of the other two angles. An example of this setup is in the A-10's Main Gear (rear). Despite the focus, the difference is clear here, too. What I did for my A-10 was I measured the angles in 3DSMax, at both extremes. I don't have actual specs on A-10 suspension stabilizer lengths, so I could fudge with it a little. Just make sure your angles add up to 180 in each position/phase, since it's technically a triangle. EDIT: After going back to look at my model rig, I remembered that the A-10 main suspension wasn't as simple as this. I had to set up an IK Arm Solver in 3DSMax, keyframe the damper going between its motion range extremes, and jot down the angles at both extremes. The problem arises with this one because the 2 axes of the elbow closest to the piston are not parallel to the piston. There probably is a mathematical way to sort it out, but it in this case it was easier for me to have the beginning and ending angles and then plug that data into the model.cfg. If you are having problems with a piece rotating the wrong way, then you can either A) try using the negative of whatever value you used, or keep the value but instead B) scale the axis to -1,1,1 in Object Builder MemLOD (if it's not on the X coordinate then  use -1,-1,-1).

    I think I covered everything about this. The result should be a nice, connected, fluid motion on the suspension parts when dampering, whereas before it was misaligned or broken.


  5. Another technical question here. Most user/custom animations are dependent on a key press or scroll menu selection, and then the full animation is carried out. What I want to know is how (if possible) to make the animation happen only while a key is being pressed. When the player releases the key, the animation pauses. It would also be helpful to disable it from appearing in the scroll menu, since holding a selection in the scroll menu might be impractical.

    EDIT: I should also mention that when the animation is paused from key release, the animated part (named selection) should remain where it is and be able to go in reverse with another key press. Practical example: Say there's a sliding missile rack on a helicopter, going between left and right in both directions. I want to use Num4 and Num6 for left and right input (I may want to try other keys or controls if these are too cumbersome). I want to have the ability to interrupt the missile rack moving left and go right (and vice versa) on a whim if necessary, and movement should cease if there is no key press at all. I hope that's more clear.

    If anyone knows how to do this, please show me! Also, is there a list of UserActions>Conditions and Statement keywords? I'm no programmer, but it looks like condition is the "IF" part of an if/then and statement is the "THEN." I know some phrases like this, animatePhase, >, <, and say3D, but there must be a list of more terms. That's probably a huge list, I realize. Anyway, I'm still digging around through the links for bits, pieces, clues. If I can familiarize myself with all this, then I won't have to dig around and beg for help so much! LOL


  6. After some adjustments and some trial and error, it's still having issues. It's a little better than it was, but there are still a lot of problems to work through. This video explains and demos my issues better:


    Here's the updated config.cpp:
     

    Spoiler

    #define _ARMA_

    enum {
        destructengine = 2,
        destructdefault = 6,
        destructwreck = 7,
        destructtree = 3,
        destructtent = 4,
        stabilizedinaxisx = 1,
        stabilizedinaxesxyz = 4,
        stabilizedinaxisy = 2,
        stabilizedinaxesboth = 3,
        destructno = 0,
        stabilizedinaxesnone = 0,
        destructman = 5,
        destructbuilding = 1
    };

    class CfgPatches
    {
        class ViboraHellwing
        {
            addonRootClass = "A3_Air_F_EPC";
            units[] = {"plane_hellwing_bomber_F"};
            weapons[] = {};
            requiredVersion = 0.1;
            requiredAddons[] = {"A3_Air_F", "A3_Air_F_EPC"};
        };
    };
    class CfgFactionClasses
    {
        class VIBORA
        {
            displayName = "VIBORA";
            author = "Scot Gilmore";
            icon = "data_f\faction_vibora_ca.paa";
            priority = 2;
            side = 2;
        };
    };
    class CfgVehicleClasses
    {
        class Vibora_Air
        {
            displayName = "Vibora Air";
        };
    };
    class CfgWeapons
    {
        class LMG_Minigun;
        class RocketPods;
        class Safe: RocketPods
        {
            CanLock = 0;
            displayName = "Safe";
            displayNameMagazine = "Safe";
            shortNameMagazine = "Safe";
            nameSound = "";
            cursor = "EmptyCursor";
            cursorAim = "EmptyCursor";
            magazines[] = {};
            burst = 0;
            reloadTime = 0.01;
            magazineReloadTime = 0.1;
        };
        class LMG_Minigun2: LMG_Minigun
        {
            class gunParticles
            {
                class effect1
                {
                    positionName = "machinegun2_eject_pos";
                    directionName = "machinegun2_eject_dir";
                    effectName = "MachineGunCartridge1";
                };
            };
        };
        class HMG_127: LMG_Minigun
        {
            class gunParticles
            {
                class effect1
                {
                    positionName = "machinegun_eject_pos";
                    directionName = "machinegun_eject_dir";
                    effectName = "MachineGunCartridge1";
                };
            };
        };
        class HMG_127_APC: HMG_127
        {
            class gunParticles
            {
                class effect1
                {
                    positionName = "machinegun2_eject_pos";
                    directionName = "machinegun2_eject_dir";
                    effectName = "MachineGunCartridge1";
                };
            };
        };
    };
    class CfgMovesBasic
    {
        class DefaultDie;
        class ManActions
        {
            firebat_Pilot = "firebat_Pilot";
        };
    };
    class CfgMovesMaleSdr: CfgMovesBasic
    {
        class States
        {
            class Crew;
            class firebat_Pilot: Crew
            {
                file = "vhx_plane\cobra_firebat\Anims\pilot_firebat_static.rtm";
                interpolateTo[] = {"KIA_firebat_Pilot",1};
            };
            class firebat_Dead: DefaultDie
            {
                actions = "DeadActions";
                file = "vhx_plane\cobra_firebat\Anims\firebat_Dead.rtm";
                speed = 0.5;
                looped = 0;
                terminal = 1;
                soundEnabled = 0;
                connectTo[] = {"Unconscious",0.1};
            };
            class KIA_firebat_Pilot: DefaultDie
            {
                actions = "DeadActions";
                speed = 0.5;
                looped = 0;
                terminal = 1;
                file = "vhx_plane\cobra_firebat\Anims\KIA_firebat_Pilot.rtm";
                connectTo[] = {"Unconscious",0.1};
            };
        };
    };
    class SensorTemplatePassiveRadar;
    class SensorTemplateAntiRadiation;
    class SensorTemplateActiveRadar;
    class SensorTemplateIR;
    class SensorTemplateVisual;
    class SensorTemplateMan;
    class SensorTemplateLaser;
    class SensorTemplateNV;
    class SensorTemplateDataLink;
    class DefaultVehicleSystemsDisplayManagerLeft
    {
        class components;
    };
    class DefaultVehicleSystemsDisplayManagerRight
    {
        class components;
    };
    class CfgVehicles
    {
        //class AllVehicles;
        class Air;
        class Plane: Air
        {
            class HitPoints;
        };
        class Plane_Base_F: Plane
        {
            class HitPoints: HitPoints
            {
                class HitHull;
            };
            class AnimationSources;
            class Components;
            class Eventhandlers;
        };
        class firebat1_base_F: Plane_Base_F
        {
            author = "Scot Gilmore";
            destrType = "DestructWreck";
            displayName = "firebat_base";
            model = "vhx_plane\cobra_firebat\firebat1.p3d";
            picture = "vhx_plane\cobra_firebat\data\ui\pic_firebat_co.paa";
            Icon = "vhx_plane\cobra_firebat\data\ui\map_firebat_co.paa";
            animated = 1;
            mapSize = 7;
            //DLC = "COBRA_Air"; // - keep to test for garage icon
            crew = "firebat1_Pilot";
            typicalcargo[] = {"firebat1_Pilot"};
            crewVulnerable = 1;
            driverAction = "firebat_Pilot";
            //driverlefthandanimname = "throttle";
            driverleftleganimname = "";
            driverrighthandanimname = "stick_pilot";
            driverrightleganimname = "";
            preciseGetInOut = 1;
            driverCanEject = 1;
            cargoCanEject = 0;
            ejectDeadGunner = 0;
            ejectDeadCargo = 0;
            ejectDeadDriver = 0;
            disableInventory = 1;
            memoryPointsGetInDriver = "pos_driver";
            memoryPointsGetInDriverDir = "pos_driver_dir";
            getInAction = "GetInLow";
            getOutAction = "GetOutLow";
            getInRadius = 2.5;
            
            ejectSpeed[] = {0,-2,0};
            cabinOpening = 1;
            gearRetracting = 1;
            gearDownTime = 0.25;
            gearUpTime = 2.35;
            fuelCapacity = 300;
            fuelConsumptionRate = 0.05;
            supplyRadius = 4;
            incomingMissileDetectionSystem = 16;
            LockDetectionSystem = "2 + 8 + 4";
            driverhasflares = 0;
            radarType = 4;
            soundLocked[] = {"vhx_plane\cobra_firebat\Sounds\opfor_lock_1",0.1,1};
            soundIncommingMissile[] = {"vhx_plane\cobra_firebat\Sounds\opfor_lock_2",0.1,1};
            cost = 20000;
            threat[] = {0.1,1,0.7};
            damageEffect = "AirDestructionEffects";
            armor = 60;
            accuracy = 0.5;
            damageResistance = 0.01593;
            weapons[] = {"gatling_20mm","missiles_DAGR"};
            magazines[] = {"1000Rnd_20mm_shells","12Rnd_PG_missiles"};
            availableForSupportTypes[] = {"CAS_Bombing"};
                    
            simulation = "airplaneX";
                    
            maxSpeed = 2000;
            landingAoa = 0.174533;
            landingSpeed = 255;
            stallSpeed = 80;
            stallWarningTreshold = 0.05;
            acceleration = 200;
            wheelSteeringSensitivity = 1.3;
            airBrake = 1;
            airBrakeFrictionCoef = 7.2;
            flaps = 1;
            flapsFrictionCoef = 0.3;
            altNoForce = 35000;
            altFullForce = 13636;
            angleOfIndicence = "-0.04*3.1415/180";
            envelope[] = {0.2,0.6,1.1,1.5,2.6,3.3,3.5,3.2,2.6,2,1.5,1,1,1,1,1,1,1,1,0.5,0};
            thrustCoef[] = {0.9,1.1,2.3,3.5,3.4,2.9,2.9,2.5,2.1,1.8,1.4,0.9,0.4,0.0,0.0,0.0};
                    
            aileronSensitivity = 2.2;
            aileronCoef[] = {0.0,0.8,1.0,1.1,1.2,1.2,1.2};
            aileronControlsSensitivityCoef = 3.5;
            elevatorSensitivity = 1.75;
            elevatorCoef[] = {0.1,0.4,0.7,0.7,0.6,0.45,0.3,0.3};
            elevatorControlsSensitivityCoef = 3;
            rudderInfluence = 0.897;
            rudderCoef[] = {0.0,0.8,1.5,1.8,2.1,2.3,2.4,2.4,2.4,2.3,2.2};
            rudderControlsSensitivityCoef = 4;
            
            draconicForceXCoef = 7.0;
            draconicForceYCoef = 0.4;
            draconicForceZCoef = 1.0;
            draconicTorqueXCoef[] = {2.9,3.0,3.1,3.2,3.5,3.8,4.2,4.6,4.9,5.2,5.4,5.6,5.7,5.8,5.9,6.0};
            draconicTorqueYCoef[] = {4.0,0.8,0.5,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
            airFrictionCoefs0[] = {0.0,0.0,0.0};
            airFrictionCoefs1[] = {0.1,0.05,0.0066};
            airFrictionCoefs2[] = {0.001,0.005,6.4e-005};
            
            maxOmega = 2000;
            
            memoryPointLMissile = "Missile_1";
            memoryPointRMissile = "Missile_2";
            memoryPointCM[] = {"flare_launcher1","flare_launcher2"};
            memoryPointCMDir[] = {"flare_launcher1_dir","flare_launcher2_dir"};
            
            
            driverCompartments = "Compartment1";
            namesound = "Plane";
            sensitivity = 2.5;
            driverCanSee = 31;
            extCameraPosition[] = {0,2,-20};
            irScanRangeMax = 10000;
            cameraBegin = "rtd1_pos";
            cameraEnd = "rtd1_dir";
            memoryPointDriverOptics = "slingCamera";
            memoryPointGun[] = {"z_gunL_muzzle","z_gunR_muzzle"};
            gunBeg[] = {"z_gunL_muzzle","z_gunR_muzzle"};
            gunEnd[] = {"z_gunL_chamber","z_gunR_chamber"};
            laserScanner = 1;
            epeImpulseDamageCoef = 20;
            hiddenSelectionsTextures[] = {};
            brakeDistance = 150;
            antiRollbarForceCoef = 24;
            antiRollbarForceLimit = 12;
            antiRollbarSpeedMin = 30;
            antiRollbarSpeedMax = 55;
            
            driveOnComponent[] = {};
            clutchStrength = 100.0;
            class Wheels
            {
                class Wheel_1
                {
                    boneName = "wheel_1";
                    steering = 1;
                    side = "left";
                    center = "Wheel_1_center";
                    boundary = "Wheel_1_rim";
                    width = 0.1;
                    mass = 10; //150;
                    MOI = 3;
                    dampingRate = 0.1; //2;
                    dampingRateDamaged = 1;
                    dampingRateDestroyed = 1000;
                    maxBrakeTorque = 1000;
                    maxHandBrakeTorque = 0;
                    suspTravelDirection[] = {0,-1,0};
                    suspForceAppPointOffset = "Wheel_1_center";
                    tireForceAppPointOffset = "Wheel_1_center";
                    maxCompression = 0.5;
                    maxDroop = 0.01;
                    sprungMass = 381;
                    springStrength = 6100; //9525;
                    springDamperRate = 28900;
                    longitudinalStiffnessPerUnitGravity = 4000;
                    latStiffX = 3;
                    latStiffY = 20;
                    frictionVsSlipGraph[] = {{0,0.6},{0.2,1.0},{0.6,0.8}};
                };
                class Wheel_2: Wheel_1
                {
                    boneName = "wheel_2";
                    steering = 0;
                    side = "left";
                    center = "Wheel_2_center";
                    boundary = "Wheel_2_rim";
                    width = 0.11;
                    mass = 15;
                    maxBrakeTorque = 8500;
                    suspForceAppPointOffset = "Wheel_2_center";
                    tireForceAppPointOffset = "Wheel_2_center";
                    maxCompression = 0.5;
                    maxDroop = 0.01
                    sprungMass = 452;
                    springStrength = 10700; //11300;
                    springDamperRate = 32300;
                };
                class Wheel_3: Wheel_2
                {
                    boneName = "wheel_3";
                    side = "right";
                    center = "Wheel_3_center";
                    boundary = "Wheel_3_rim";
                    suspForceAppPointOffset = "Wheel_3_center";
                    tireForceAppPointOffset = "Wheel_3_center";
                };

            };
                    
            #include "sounds.hpp"
            
            class RenderTargets
            {
                class LowerMirror
                {
                    renderTarget = "rendertarget1";
                    class CameraView
                    {
                        pointPosition = "rtd1_pos";
                        pointDirection = "rtd1_dir";
                        renderQuality = 0;
                        renderVisionMode = 0;
                        fov = 0.7;
                    };
                };
            };
            class Reflectors
            {
                class Middle
                {
                    color[] = {7000,7500,10000,1};
                    ambient[] = {100,100,100,0};
                    position = "L svetlo";
                    direction = "konec L svetla";
                    hitpoint = "L svetlo";
                    selection = "L svetlo";
                    size = 1;
                    innerAngle = 20;
                    outerAngle = 60;
                    coneFadeCoef = 10;
                    intensity = 50;
                    useFlare = 1;
                    dayLight = 0;
                    FlareSize = 6;
                    class Attenuation
                    {
                        start = 1;
                        constant = 0;
                        linear = 0;
                        quadratic = 4;
                    };
                };
            };
            class Exhausts
            {
                class Exhaust1
                {
                    position = "exhaust1";
                    direction = "exhaust1_dir";
                    effect = "ExhaustsEffectJet";
                };
            };
            class WingVortices
            {
                class StabilizerLeft
                {
                    effectName = "BodyVortices";
                    position = "pos_vortex_vStab_L";
                };
                class StabilizerRight
                {
                    effectName = "BodyVortices";
                    position = "pos_vortex_vStab_R";
                };
                class WingTipLeft
                {
                    effectName = "WingVortices";
                    position = "pos_vortex_wTip_L";
                };
                class WingTipRight
                {
                    effectName = "WingVortices";
                    position = "pos_vortex_wTip_R";
                };
            };
            class MarkerLights
            {
                class WhiteStill
                {
                    name = "bily pozicni";
                    color[] = {1.0,1.0,1.0};
                    ambient[] = {0.1,0.1,0.1};
                    blinking = 1;
                    intensity = 75;
                    blinkingPattern[] = {0.1,0.9};
                    blinkingPatternGuarantee = 0;
                    drawLightSize = 0.2;
                    drawLightCenterSize = 0.04;
                };
                class RedStill
                {
                    name = "cerveny pozicni";
                    color[] = {0.8,0.0,0.0};
                    ambient[] = {0.08,0.0,0.0};
                    intensity = 75;
                    drawLight = 1;
                    drawLightSize = 0.15;
                    drawLightCenterSize = 0.04;
                    activeLight = 0;
                    blinking = 0;
                    dayLight = 0;
                    useFlare = 0;
                };
                class GreenStill
                {
                    name = "zeleny pozicni";
                    color[] = {0.0,0.8,0.0};
                    ambient[] = {0.0,0.08,0.0};
                    intensity = 75;
                    drawLight = 1;
                    drawLightSize = 0.15;
                    drawLightCenterSize = 0.04;
                    activeLight = 0;
                    blinking = 0;
                    dayLight = 0;
                    useFlare = 0;
                };
                class RedBlinking
                {
                    name = "bily pozicni blik";
                    color[] = {0.9,0.15,0.1};
                    ambient[] = {0.09,0.015,0.01};
                    intensity = 75;
                    blinking = 1;
                    blinkingPattern[] = {0.1,0.9};
                    blinkingPatternGuarantee = 0;
                    drawLightSize = 0.2;
                    drawLightCenterSize = 0.04;
                };
                class WhiteBlinking
                {
                    name = "cerveny pozicni blik";
                    color[] = {0.9,0.15,0.1};
                    intensity = 75;
                    ambient[] = {0.09,0.015,0.01};
                    blinking = 1;
                    blinkingPattern[] = {0.2,1.3};
                    blinkingPatternGuarantee = 0;
                    drawLightSize = 0.25;
                    drawLightCenterSize = 0.08;
                };
            };
            class Damage
            {
                tex[] = {};
                mat[] = {};
            };
            class UserActions
            {
                class firebat1_fold_wings
                {
                    priority = 0.05;
                    displayName = "Wings Up";
                    shortcut = "ToggleRaiseWeapon";
                    condition = "this animationPhase 'Leftwing' < 0.1 and (speed this) < 100 and player in this";
                    statement = "this animate ['Leftwing',1]; this animate ['Rightwing',1]; this say3D 'Plane_Fighter_01_foldwing_sound'";
                    position = "pilotcontrol";
                    radius = 10;
                    onlyforplayer = 1;
                    showWindow = 0;
                    hideOnUse = 1;
                };
                class firebat1_unfold_wings: firebat1_fold_wings
                {
                    displayName = "Wings Out";
                    condition = "this animationPhase 'Leftwing' > 0.9 and (speed this) < 100 and player in this";
                    statement = "this animate ['Leftwing',0]; this animate ['Rightwing',0]; this say3D 'Plane_Fighter_01_foldwing_sound'";
                    shortcut = "ToggleRaiseWeapon";
                };         
            };
            class AnimationSources: AnimationSources
            {
                class Leftwing
                {
                    source = "user";
                    animPeriod = 1.2;
                    initPhase = 1;
                    displayName = "Wings";
                    mass = 0;
                    forceAnimatePhase = 1;
                    forceAnimatePhase2 = 0;
                    forceAnimate[] = {"Leftwing",1,"Rightwing",1};
                    forceAnimate2[] = {"Leftwing",0,"Rightwing",0};
                };
                class Rightwing
                {
                    source = "user";
                    animPeriod = 1.2;
                    initPhase = 1;
                };
                class AddScreen1
                {
                    source = "user";
                    animPeriod = 1e-006;
                    initPhase = 0;
                };
                class Damper_1_source
                {
                    source = "damper";
                    wheel = "Wheel_1";
                };
                class Damper_2_source
                {
                    source = "damper";
                    wheel = "Wheel_2";
                };
                class Damper_3_source
                {
                    source = "damper";
                    wheel = "Wheel_3";
                };
                class Wheel_1_source
                {
                    source = "wheel";
                    wheel = "Wheel_1";
                };
                class Wheel_2_source
                {
                    source = "wheel";
                    wheel = "Wheel_2";
                };
                class Wheel_3_source
                {
                    source = "wheel";
                    wheel = "Wheel_3";
                };   
                class HitGlass1
                {
                    source = "Hit";
                    hitpoint = "HitGlass1";
                    raw = 1;
                };
                class HitGlass2: HitGlass1
                {
                    hitpoint = "HitGlass2";
                };
            };
            class AircraftAutomatedSystems
            {
                wingStateControl = 1;
                wingFoldAnimations[] = {"Leftwing","Rightwing"};
                wingStateFolded = 1;
                wingStateUnFolded = 0;
                wingAutoUnFoldSpeed = 100;
            };
            class Eventhandlers: Eventhandlers
            {
                hit = "_this call bis_fnc_planeAiEject";
                //landing = "[_this,true] call bis_fnc_aircraftTailhookAi";
                //landingcanceled = "[_this,false] call bis_fnc_aircraftTailhookAi";
                engine = "_this call bis_fnc_aircraftFoldingWings";
                gear = "_this call bis_fnc_aircraftFoldingWings";
            };
            
        };
        class plane_hellwing_bomber_F: firebat1_base_F
        {
            author = "Scot Gilmore";
            displayName = "-- Hellwing --";
            scope = 2;
            side = 2;
            faction = "VIBORA";
            vehicleClass = "Vibora_Air";
            hiddenSelections[] = {"Camo1","Camo2"};
            
        };
    };

     

    And here's the model.cfg:
     

    Spoiler


    class cfgSkeletons
    {
        
        class firebatbones
        {
            isDiscrete = 0;
            skeletonInherit = "";
            SkeletonBones[]=
            {
                "fan_1"                        ,"",
                "exhaust1"                    ,"",
                "flapArmL"                    ,"",
                "flapArmR"                    ,"",
                "flapL"                        ,"flapArmL",
                "flapR"                        ,"flapArmR",
                "i_mph"                        ,"",
                "i_bank"                    ,"",
                "i_horizont"                ,"i_bank",
                "i_alt_100f"                ,"",
                "i_alt_1000f"                ,"",
                "i_alt_10000f"                ,"",
                "i_compass"                    ,"",
                "i_vSpeed"                    ,"",
                "i_fuel"                    ,"",
                "dg_pitch"                    ,"",
                "dg_bank"                    ,"",
                "dg_pitch2"                    ,"",
                "dg_bank2"                    ,"",
                "dg_vertspeed"                ,"",
                "dg_vertspeed2"                ,"",
                "barrel_1"                    ,"",
                "barrel_2"                    ,"",
                "muzzleflash_1"                ,"barrel_1",
                "muzzleflash_2"                ,"barrel_2",
                "l svetlo"                    ,"",
                "konec l svetla"            ,"",
                "machinegun"                ,"",
                "otochlavne"                ,"",
                "zasleh"                    ,"",
                "damagehide"                ,"",
                "gear_1"                    ,"",
                "gear_1_damper"                ,"gear_1",
                "gDoor1_3"                    ,"gear_1",
                "gear_1_2"                    ,"gear_1",
                "gear_1_3"                    ,"gear_1_2",
                "gear_1_steer"                ,"gear_1_damper",
                "wheel_1"                    ,"gear_1_steer",
                "gDoor1_1"                    ,"",
                "gDoor1_2"                    ,"gDoor1_1",
                "gear_2"                    ,"",
                "gear_2_damper"                ,"gear_2",
                "gear_2_2"                    ,"gear_2",
                "gear_2_3"                    ,"gear_2_2",
                "wheel_2"                    ,"gear_2_damper",
                "gArm2_1"                    ,"",
                "gArm2_2"                    ,"gArm2_1",
                "gear_3"                    ,"",
                "gear_3_damper"                ,"gear_3",
                "gear_3_2"                    ,"gear_3",
                "gear_3_3"                    ,"gear_3_2",
                "wheel_3"                    ,"gear_3_damper",
                "gArm3_1"                    ,"",
                "gArm3_2"                    ,"gArm3_1",
                "canopyB"                    ,"canopyA",
                "canopyA"                    ,"canopyC",
                "canopyC"                    ,"",
                "glass1"                    ,"canopyA",
                "glass2"                    , "",
                "stick_pilot"                ,"",
                "stick_bank_axis"             ,"",
                "stick_dive_axis"            ,"stick_bank_axis",
                "lever_pilot"                ,"",
                "throttle_pilot"            ,"lever_pilot",
                "throttle_switch_pilot"        ,"lever_pilot",
                "display_off"                ,"",
                "rudderL"                    ,"",
                "rudderR"                    ,"",
                "canardL"                    , "",
                "canardR"                    , "",
                "wingL"                        , "",
                "alrnL"                        , "wingL",
                "wingR"                        , "",
                "alrnR"                        , "wingR"
            };
        };
    };
    class CfgModels
    {
        class Default
        {
            sections[] = {};
            sectionsInherit="";
            skeletonName = "";
        };
        class firebat1: default
        {
            skeletonName="firebatbones";
            sections[]=
            {
                "elektronika",
                "glass1",
                "glass2",
                "glass3",
                "glass4",
                "glass5",
                "zbytek",
                "mala vrtule",
                "velka vrtule",
                "motor",
                "munice",
                "vez",
                "zbran",
                "trup",
                "muzzleflash",
                "zasleh"
            };
        
            class Animations
            {
                class I_Speed
                {
                    type="rotation";
                    source="speed";
                    selection="i_mph";
                    axis="i_mph_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;//rad 0.0
                    maxValue = 10.288889;//rad 589.5099
                    angle0 = -0.034906585;//rad -2.0;
                    angle1 = 0.19198622;//rad 11.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class I_Speed_02
                {
                    type="rotation";
                    source="speed";
                    selection="i_mph";
                    axis="i_mph_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = 10.28889;//rad 589.50995
                    maxValue = 41.155556;//rad 2358.0396
                    angle0 = 0.0;//rad 0.0;
                    angle1 = 2.9496064;//rad 169.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class I_Speed_03
                {
                    type="rotation";
                    source="speed";
                    selection="i_mph";
                    axis="i_mph_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = 41.155556;//rad 2358.0396
                    maxValue = 46.3;//rad 2652.7944
                    angle0 = 0.0;//rad 0.0;
                    angle1 = 0.36651915;//rad 21.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class I_Speed_04
                {
                    type="rotation";
                    source="speed";
                    selection="i_mph";
                    axis="i_mph_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = 46.3;//rad 2652.7944
                    maxValue = 92.6;//rad 5305.589
                    angle0 = 0.0;//rad 0.0;
                    angle1 = 2.1816616;//rad 125.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class I_Bank
                {
                    type="rotation";
                    source="horizonBank";
                    selection="i_bank";
                    axis="i_bank_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = -6.2831855;//rad -360.0
                    maxValue = 6.2831855;//rad 360.0
                    angle0 = 6.2831855;//rad 360.0;
                    angle1 = -6.2831855;//rad -360.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class I_Horizont_Dive
                {
                    type="translation";
                    source="horizonDive";
                    selection="i_horizont";
                    axis="i_horizont_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = -6.2831855;//rad -360.0
                    maxValue = 6.2831855;//rad 360.0
                    offset0 = -0.25;//rad -360.0;
                    offset1 = 0.25;//rad 360.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class I_Altitude_100f
                {
                    type="rotation";
                    source="altBaro";
                    selection="i_alt_100f";
                    axis="i_alt_axis";//*probably*
                    sourceAddress = loop;
                    minValue = 0.0;//rad 0.0
                    maxValue = 304.8;//rad 17463.752
                    angle0 = 0.0;//rad 0.0;
                    angle1 = 6.2831855;//rad 360.0;
                    animPeriod = 1.4013e-045/*#DEN*/;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class I_Altitude_1000f
                {
                    type="rotation";
                    source="altBaro";
                    selection="i_alt_1000f";
                    axis="i_alt_axis";//*probably*
                    sourceAddress = loop;
                    minValue = 0.0;//rad 0.0
                    maxValue = 3048.0;//rad 174637.53
                    angle0 = 0.0;//rad 0.0;
                    angle1 = 6.2831855;//rad 360.0;
                    animPeriod = 1.4013e-045/*#DEN*/;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class I_Altitude_10000f
                {
                    type="rotation";
                    source="altBaro";
                    selection="i_alt_10000f";
                    axis="i_alt_axis";//*probably*
                    sourceAddress = loop;
                    minValue = 0.0;//rad 0.0
                    maxValue = 30480.0;//rad 1746375.4
                    angle0 = 0.0;//rad 0.0;
                    angle1 = 6.2831855;//rad 360.0;
                    animPeriod = 1.4013e-045/*#DEN*/;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class I_Compass
                {
                    type="rotation";
                    source="direction";
                    selection="i_compass";
                    axis="i_compass_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = -3.1415927;//rad -180.0
                    maxValue = 3.1415927;//rad 180.0
                    angle0 = -3.1415927;//rad -180.0;
                    angle1 = 3.1415927;//rad 180.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class I_VSpeed
                {
                    type="rotation";
                    source="vertSpeed";
                    selection="i_vSpeed";
                    axis="i_vSpeed_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = -15.24;//rad -873.1877
                    maxValue = 15.24;//rad 873.1877
                    angle0 = 4.6076694;//rad -264.0;
                    angle1 = -1.43117;//rad 82.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class I_Fuel
                {
                    type="rotation";
                    source="fuel";
                    selection="i_fuel";
                    axis="i_fuel_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;//rad 0.0
                    maxValue = 1.0;//rad 57.29578
                    angle0 = -0.6109;//rad -35.0;
                    angle1 = 0.6109;//rad 35.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class dg_pitch
                {
                    type="rotation";
                    source="horizonDive";
                    selection="dg_pitch";
                    axis="dg_pitch_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = -6.2831855;//rad -360.0
                    maxValue = 6.2831855;//rad 360.0
                    angle0 = 1.5707964;//rad 90.0;
                    angle1 = -1.5707964;//rad -90.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class dg_bank
                {
                    type="rotation";
                    source="horizonBank";
                    selection="dg_bank";
                    axis="dg_bank_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = -3.1415927;//rad -180.0
                    maxValue = 3.1415927;//rad 180.0
                    angle0 = -1.5707964;//rad -90.0;
                    angle1 = 1.5707964;//rad 90.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class dg_pitch2
                {
                    type="rotation";
                    source="horizonDive";
                    selection="dg_pitch2";
                    axis="dg_pitch2_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = -6.2831855;//rad -360.0
                    maxValue = 6.2831855;//rad 360.0
                    angle0 = 1.5707964;//rad 90.0;
                    angle1 = -1.5707964;//rad -90.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class dg_bank2
                {
                    type="rotation";
                    source="horizonBank";
                    selection="dg_bank2";
                    axis="dg_bank2_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = -3.1415927;//rad -180.0
                    maxValue = 3.1415927;//rad 180.0
                    angle0 = -1.5707964;//rad -90.0;
                    angle1 = 1.5707964;//rad 90.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class dg_vertspeed
                {
                    type="translation";
                    source="vertSpeed";
                    selection="dg_vertspeed";
                    axis="dg_vertspeed_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = -30.0;//rad -1718.8734
                    maxValue = 30.0;//rad 1718.8734
                    offset0 = -0.5;
                    offset1 = 0.5;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class dg_vertspeed2
                {
                    type="translation";
                    source="vertSpeed";
                    selection="dg_vertspeed2";
                    axis="dg_vertspeed2_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = -30.0;//rad -1718.8734
                    maxValue = 30.0;//rad 1718.8734
                    offset0 = -0.5;
                    offset1 = 0.5;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class display_on
                {
                    type="hide";
                    source="rpm";
                    selection="display_off";
    //                sourceAddress = clamp;// (default)
                    minValue = -0.8;//rad -45.836624
                    maxValue = 0.2;//rad 11.459156
                    hideValue = 0.99;
    //                unHideValue = -1.0;//(default)
                    animPeriod = 0.0;
                    initPhase = 0.0;
                };
                class Canopy_rot_p1
                {
                    type="rotation";
                    source="cabin";
                    selection="canopyA";
                    axis="canopyA_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = 2.001;//rad 429.71835
                    maxValue = 4.0;//rad 859.4367
                    angle0 = 1.0;//rad 115.0;
                    angle1 = 0.0;//rad 0.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Canopy_rot_p2
                {
                    type="rotation";
                    source="cabin";
                    selection="canopyA";
                    axis="canopyA_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;//rad 429.71835
                    maxValue = 2.0;//rad 859.4367
                    angle0 = 0.76;//rad 115.0;
                    angle1 = 0.0;//rad 0.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Canopy_hinge1_rot
                {
                    type="rotation";
                    source="cabin";
                    selection="canopyB";
                    axis="canopyB_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;//rad 429.71835
                    maxValue = 4.0;//rad 859.4367
                    angle0 = -2.32;//rad -115.0;
                    angle1 = 0.0;//rad 0.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Canopy_hinge2_rot
                {
                    type="rotation";
                    source="cabin";
                    selection="canopyC";
                    axis="canopyC_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;//rad 429.71835
                    maxValue = 4.0;//rad 859.4367
                    angle0 = -2.007;//rad -115.0;
                    angle1 = 0.0;//rad 0.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                
                class Wheel_1_rot
                {
                    type="rotation";
                    source="wheel";
                    selection="wheel_1";
                    axis="wheel_1_axis";//*probably*
                    sourceAddress = loop;
                    minValue = 0.0;//rad 0.0
                    maxValue = 1.0;//rad 57.29578
                    angle0 = 0.0;//rad 0.0;
                    angle1 = -6.2831855;//rad -360.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Wheel_2_rot
                {
                    type="rotation";
                    source="wheel";
                    selection="wheel_2";
                    axis="wheel_2_axis";//*probably*
                    sourceAddress = loop;
                    minValue = 0.0;//rad 0.0
                    maxValue = 1.0;//rad 57.29578
                    angle0 = 0.0;//rad 0.0;
                    angle1 = 6.2831855;//rad 360.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Wheel_3_rot
                {
                    type="rotation";
                    source="wheel";
                    selection="wheel_3";
                    axis="wheel_3_axis";//*probably*
                    sourceAddress = loop;
                    minValue = 0.0;//rad 0.0
                    maxValue = 1.0;//rad 57.29578
                    angle0 = 0.0;//rad 0.0;
                    angle1 = -6.2831855;//rad -360.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Gear_1_rot
                {
                    type="rotation";
                    source="gear";
                    selection="gear_1";
                    axis="gear_1_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;//rad 0.0
                    maxValue = 1.0;//rad 40.107044
                    angle0 = 0.0;//rad 0.0;
                    angle1 = -1.885;//rad -108.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Gear_1_hatch_1_rot: Gear_1_rot
                {
                    selection="gDoor1_1";
                    axis="gDoor1_1_axis";//*probably*
                    angle0 = 0.0;//rad 0.0;
                    angle1 = -2.094;//rad -120.0;
                };
                class Gear_1_hatch_2_rot: Gear_1_rot
                {
                    selection="gDoor1_2";
                    axis="gDoor1_2_axis";//*probably*
                    angle0 = 0.0;//rad 0.0;
                    angle1 = -1.453;//rad -83.25;
                };
                class Gear_1_hatch_hinge_rot: Gear_1_rot
                {
                    selection="gDoor1_3";
                    axis="gDoor1_3_axis";//*probably*
                    angle0 = 0.0;//rad 0.0;
                    angle1 = -1.117;//rad -64;
                };
                class gear_1_damper_move
                {
                    type="translation";
                    source="damper_1_source";
                    selection="gear_1_damper";
                    axis="gear_1_damper_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;
                    maxValue = 1.0;
                    offset0 = 0.0;
                    offset1 = -1.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class gear_1_stabil_1_rot: gear_1_damper_move
                {
                    type="rotation";
                    selection="gear_1_2";
                    axis="gear_1_2_axis";//*probably*
                    angle0 = 0.0;
                    angle1 = 1.134;//rad 65;
                };
                class gear_1_stabil_2_rot: gear_1_damper_move
                {
                    type="rotation";
                    selection="gear_1_3";
                    axis="gear_1_3_axis";//*probably*
                    angle0 = 0.0;
                    angle1 = 2.268;//rad 130.0;
                };
                class Gear_1_hatch_2_susp
                {
                    type="rotation";
                    source="damper_1_source";
                    selection="gDoor1_2";
                    axis="gDoor1_2_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;
                    maxValue = 1.0;
                    angle0 = 0.0;
                    angle1 = 0.7854;//rad 45.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;
                };
                class gear_1_steering_rot
                {
                    type="rotation";
                    source="noseWheelTurn";
                    selection="gear_1_steer";
                    axis="gear_1_steer_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = -1.0;//rad -57.29578
                    maxValue = 1.0;//rad 57.29578
                    angle0 = -0.6981317;//rad -40.0;
                    angle1 = 0.6981317;//rad 40.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                
                //////// MAIN GEARS ////////
                class Gear_2_rot
                {
                    type="rotation";
                    source="gear";
                    selection="gear_2";
                    axis="gear_2_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;//rad 0.0
                    maxValue = 1.0;//rad 40.107044
                    angle0 = 0.0;//rad 0.0;
                    angle1 = -2.094;//rad -120.37;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Gear_2_piston_1_rot1
                {
                    type="rotation";
                    source="gear";
                    selection="gArm2_1";
                    axis="gArm2_1_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;//rad 0.0
                    maxValue = 0.5;//rad 40.107044
                    angle0 = 0.0;//rad 0.0
                    angle1 = -0.07854;//rad -4.5
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Gear_2_piston_1_rot2
                {
                    type="rotation";
                    source="gear";
                    selection="gArm2_1";
                    axis="gArm2_1_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = 0.5001;//rad 0.0
                    maxValue = 0.7;//rad 40.107044
                    angle0 = 0.0;//rad 0.0
                    angle1 = 0.05236;//rad 3
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Gear_2_piston_1_rot3
                {
                    type="rotation";
                    source="gear";
                    selection="gArm2_1";
                    axis="gArm2_1_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = 0.7001;//rad 0.0
                    maxValue = 1.0;//rad 40.107044
                    angle0 = 0.0;//rad 0.0;
                    angle1 = 0.1222;//rad 7;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Gear_2_piston_2
                {
                    type="translation";
                    source="gear";
                    selection="gArm2_2";
                    axis="gArm2_2_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;//rad 0.0
                    maxValue = 1.0;//rad 40.107044
                    offset0 = 0.0;
                    offset1 = -0.87;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                
                class gear_2_damper_move
                {
                    type="translation";
                    source="damper_2_source";
                    selection="gear_2_damper";
                    axis="gear_2_damper_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;
                    maxValue = 1.0;
                    offset0 = 0.0;
                    offset1 = -1.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Gear_2_stabil_1_1_rot: gear_2_damper_move
                {
                    type="rotation";
                    selection="gear_2_2";
                    axis="gear_2_2_axis";//*probably*
                    angle0 = 0.0;
                    angle1 = 1.23;//rad 70.5;
                };
                class Gear_2_stabil_1_2_rot: gear_2_damper_move
                {
                    type="rotation";
                    selection="gear_2_3";
                    axis="gear_2_3_axis";//*probably*
                    angle0 = 0.0;
                    angle1 = 2.46;//rad 141.0;
                };
                
                
                class Gear_3_rot: Gear_2_rot
                {
                    selection="gear_3";
                    axis="gear_3_axis";//*probably*
                };
                class Gear_3_piston_1_rot1: Gear_2_piston_1_rot1
                {
                    selection="gArm3_1";
                    axis="gArm3_1_axis";//*probably*
                };
                class Gear_3_piston_1_rot2: Gear_2_piston_1_rot2
                {
                    selection="gArm3_1";
                    axis="gArm3_1_axis";//*probably*
                };
                class Gear_3_piston_1_rot3: Gear_2_piston_1_rot3
                {
                    selection="gArm3_1";
                    axis="gArm3_1_axis";//*probably*
                };
                class Gear_3_piston_2: Gear_2_piston_2
                {
                    source="gear";
                    selection="gArm3_2";
                    axis="gArm3_2_axis";//*probably*
                };
                
                class gear_3_damper_move: gear_2_damper_move
                {
                    source="damper_3_source";
                    selection="gear_3_damper";
                    axis="gear_3_damper_axis";//*probably*
                };
                class Gear_3_stabil_1_1_rot: gear_3_damper_move
                {
                    type="rotation";
                    selection="gear_3_2";
                    axis="gear_3_2_axis";//*probably*
                    angle0 = 0.0;
                    angle1 = 1.23;//rad 70.5;
                    
                };
                class Gear_3_stabil_1_2_rot: gear_3_damper_move
                {
                    type="rotation";
                    selection="gear_3_3";
                    axis="gear_3_3_axis";//*probably*
                    angle0 = 0.0;
                    angle1 = 2.46;//rad 141.0;
                };
                
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                
                class Flap_L_move
                {
                    type="translation";
                    source="flap";
                    selection="flapArmL";
                    axis="flapArmL_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;//rad 0.0
                    maxValue = 0.5;//rad 28.64789
                    offset0 = 0.0;
                    offset1 = 0.6;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Flap_R_move
                {
                    type="translation";
                    source="flap";
                    selection="flapArmR";
                    axis="flapArmR_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;//rad 0.0
                    maxValue = 0.5;//rad 28.64789
                    offset0 = 0.0;
                    offset1 = 0.6;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Flap_L_rot
                {
                    type="rotation";
                    source="flap";
                    selection="flapL";
                    axis="flapL_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = 0.5;//rad 28.64789
                    maxValue = 1.0;//rad 57.29578
                    angle0 = 0.0;//rad 0.0;
                    angle1 = -0.34906584;//rad -20.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Flap_R_rot
                {
                    type="rotation";
                    source="flap";
                    selection="flapR";
                    axis="flapR_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = 0.5;//rad 28.64789
                    maxValue = 1.0;//rad 57.29578
                    angle0 = 0.0;//rad 0.0;
                    angle1 = 0.34906584;//rad 20.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Stick_Pilot_Dive
                {
                    type="rotation";
                    source="elevator";
                    selection="stick_pilot";
                    axis="stick_dive_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = -1.0;//rad -57.29578
                    maxValue = 1.0;//rad 57.29578
                    angle0 = -0.05235988;//rad -3.0;
                    angle1 = 0.05235988;//rad 3.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Stick_Pilot_Bank
                {
                    type="rotation";
                    source="aileron";
                    selection="stick_pilot";
                    axis="stick_bank_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = -0.5;//rad -28.64789
                    maxValue = 0.5;//rad 28.64789
                    angle0 = -0.05235988;//rad -3.0;
                    angle1 = 0.05235988;//rad 3.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class aileron_1
                {
                    type="rotation";
                    source="aileron";
                    selection="alrnL";
                    axis="alrnL_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = -0.5;//rad -28.64789
                    maxValue = 0.5;//rad 28.64789
                    angle0 = -0.34906584;//rad -20.0;
                    angle1 = 0.34906584;//rad 20.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class aileron_2
                {
                    type="rotation";
                    source="aileron";
                    selection="alrnR";
                    axis="alrnR_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = -0.5;//rad -28.64789
                    maxValue = 0.5;//rad 28.64789
                    angle0 = -0.34906584;//rad -20.0;
                    angle1 = 0.34906584;//rad 20.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Elevator_L
                {
                    type="rotation";
                    source="elevator";
                    selection="canardL";
                    axis="canardL_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = -1.0;//rad -57.29578
                    maxValue = 1.0;//rad 57.29578
                    angle0 = 0.24434611;//rad -14.000001;
                    angle1 = -0.24434611;//rad 14.000001;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Elevator_R
                {
                    type="rotation";
                    source="elevator";
                    selection="canardR";
                    axis="canardR_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = -1.0;//rad -57.29578
                    maxValue = 1.0;//rad 57.29578
                    angle0 = -0.24434611;//rad -14.000001;
                    angle1 = 0.24434611;//rad 14.000001;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class RudderL
                {
                    type="rotation";
                    source="rudder";
                    selection="rudderL";
                    axis="rudderL_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = -1.0;//rad -57.29578
                    maxValue = 1.0;//rad 57.29578
                    angle0 = 0.39968044;//rad 22.900002;
                    angle1 = -0.39968044;//rad -22.900002;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class RudderR
                {
                    type="rotation";
                    source="rudder";
                    selection="rudderR";
                    axis="rudderR_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = -1.0;//rad -57.29578
                    maxValue = 1.0;//rad 57.29578
                    angle0 = 0.39968044;//rad 22.900002;
                    angle1 = -0.39968044;//rad -22.900002;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Leftwing
                {
                    type = "rotation";
                    source="user";
                    selection="wingL";
                    axis="wingL_axis";
                    minValue=0;
                    maxValue=1;
                    angle0=0;
                    angle1=1.571;// i.e.: 90 deg
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Rightwing
                {
                    type = "rotation";
                    source="user";
                    selection="wingR";
                    axis="wingR_axis";
                    minValue=0;
                    maxValue=1;
                    angle0=0;
                    angle1=-1.571;// i.e.: -90 deg
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Rotor_1
                {
                    type="rotation";
                    source="rotor";
                    selection="fan_1";
                    axis="fan_1_axis";//*probably*
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;//rad 0.0
                    maxValue = 1.0;//rad 57.29578
                    angle0 = 0.0;//rad 0.0;
                    angle1 = -6.2831855;//rad -360.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Glass1_destruct
                {
                    type="hide";
                    source="HitGlass1";
                    selection="glass1";
                    minValue=0;
                    maxValue=1;
                    hideValue=0.99000001;
                    animPeriod=0;
                    initPhase=0;
                };
                class Glass2_destruct
                {
                    type="hide";
                    source="HitGlass2";
                    selection="glass2";
                    minValue=0;
                    maxValue=1;
                    hideValue=0.99000001;
                    animPeriod=0;
                    initPhase=0;
                };
            };
        };
    };


    As always, any help is much appreciated!


  7. I could sure use some help figuring out how to get this working nicely. Here's the list of things that I am trying to fix right now:
    1) Flight stability - adjusted, but it's far from right. Adjusting is not straight forward, so finding the sweetspot or magic combination is elusive.
    2) Wheel suspension - Animations are fixed, but the physical handling is way off.
    3) Folding wingtips, F/A-18 style FIXED
    4) remove co-pilot FIXED

    AirplaneX vs Geom LOD
    After spending several hours messing with "draconic forces" and planar surface values in the config, my airplane is still acting weird. Currently, it requires 232kph to take off, whereas I'd prefer it to be about 80mph (~129kph). Once it takes off, there is little forgiveness in pitch changes before it starts to bob up and down violently, but with very subtle changes it can do a steady climb. It's like the config parameters are fighting with the plane's shape. I've started the config from the NATO UAV, which shares a similar wing layout (forward canard style elevators), but I must be overlooking something, I think. How much does the actual shape of the Geometry LOD and GeomPhys LOD affect its flight? Here is a printscreen of its GEOM LOD in OB.
    firebat_in_ob_by_rooster3d-dclu15s.jpg
    Fig. 1: Firebat/Hellwing Geom_LOD in Object builder.
    config.cpp (updated):

    Spoiler

    class CfgPatches
    {
        class ViboraHellwing
        {
            units[] = {"firebat_Pilot","firebat1"};
            weapons[] = {};
            requiredVersion = 0.1;
            requiredAddons[] = {"A3_Air_F","A3_Weapons_F"/*,"A3_Air_F_Exp"*/};
        };
    };
    class CfgFactionClasses
    {
        class VIBORA
        {
            displayName = "VIBORA";
            author = "Scot Gilmore";
            icon = "data_f\faction_vibora_ca.paa";
            priority = 2;
            side = 2;
        };
    };
    class CfgVehicleClasses
    {
        class Vibora_Air
        {
            displayName = "Vibora Air";
        };
    };
    class CfgWeapons
    {
        class LMG_Minigun;
        class RocketPods;
        class Safe: RocketPods
        {
            CanLock = 0;
            displayName = "Safe";
            displayNameMagazine = "Safe";
            shortNameMagazine = "Safe";
            nameSound = "";
            cursor = "EmptyCursor";
            cursorAim = "EmptyCursor";
            magazines[] = {};
            burst = 0;
            reloadTime = 0.01;
            magazineReloadTime = 0.1;
        };
        class LMG_Minigun2: LMG_Minigun
        {
            class gunParticles
            {
                class effect1
                {
                    positionName = "machinegun2_eject_pos";
                    directionName = "machinegun2_eject_dir";
                    effectName = "MachineGunCartridge1";
                };
            };
        };
        class HMG_127: LMG_Minigun
        {
            class gunParticles
            {
                class effect1
                {
                    positionName = "machinegun_eject_pos";
                    directionName = "machinegun_eject_dir";
                    effectName = "MachineGunCartridge1";
                };
            };
        };
        class HMG_127_APC: HMG_127
        {
            class gunParticles
            {
                class effect1
                {
                    positionName = "machinegun2_eject_pos";
                    directionName = "machinegun2_eject_dir";
                    effectName = "MachineGunCartridge1";
                };
            };
        };
    };
    class CfgMovesBasic
    {
        class DefaultDie;
        class ManActions
        {
            firebat_Pilot = "firebat_Pilot";
            firebat_Gunner = "firebat_Pilot";
        };
    };
    class CfgMovesMaleSdr: CfgMovesBasic
    {
        class States
        {
            class Crew;
            class firebat_Dead: DefaultDie
            {
                actions = "DeadActions";
                file = "vhx_plane\cobra_firebat\Anims\firebat_Dead.rtm";
                speed = 0.5;
                looped = 0;
                terminal = 1;
                soundEnabled = 0;
                connectTo[] = {"Unconscious",0.1};
            };
            class KIA_firebat_Pilot: DefaultDie
            {
                actions = "DeadActions";
                speed = 0.5;
                looped = 0;
                terminal = 1;
                file = "vhx_plane\cobra_firebat\Anims\KIA_firebat_Pilot.rtm";
                connectTo[] = {"Unconscious",0.1};
            };
            class firebat_Pilot: Crew
            {
                file = "vhx_plane\cobra_firebat\Anims\pilot_firebat_static.rtm";
                interpolateTo[] = {"KIA_firebat_Pilot",1};
            };
        };
    };
    class CfgVehicles
    {
        class B_Helipilot_F;
        class firebat_Pilot: B_Helipilot_F
        {
            class SpeechVariants
            {
                class Default
                {
                    speechSingular[] = {"veh_infantry_pilot_s"};
                    speechPlural[] = {"veh_infantry_pilot_p"};
                };
            };
            textSingular = "$STR_A3_nameSound_veh_infantry_pilot_s";
            textPlural = "$STR_A3_nameSound_veh_infantry_pilot_p";
            nameSound = "veh_infantry_pilot_s";
            scope = 2;
            identityTypes[] = {"LanguageENG_F","Head_NATO","G_NATO_pilot"};
            modelSides[] = {3,1};
            uniformClass = "U_B_HeliPilotCoveralls";
            displayName = "firebat-Pilot";
            linkedItems[] = {"V_TacVestIR_blk","H_PilotHelmetHeli_O","ItemMap","ItemCompass","ItemWatch","ItemRadio","NVGoggles_INDEP","ItemGPS"};
            respawnLinkedItems[] = {"V_TacVestIR_blk","H_PilotHelmetHeli_O","ItemMap","ItemCompass","ItemWatch","ItemRadio","NVGoggles_INDEP","ItemGPS"};
            weapons[] = {"hgun_Rook40_F","Throw","Put"};
            respawnWeapons[] = {"hgun_Rook40_F","Throw","Put"};
            magazines[] = {"16Rnd_9x21_Mag","16Rnd_9x21_Mag","16Rnd_9x21_Mag","16Rnd_9x21_Mag","SmokeShellGreen","Chemlight_green","SmokeShellGreen","B_IR_Grenade","Chemlight_green"};
            respawnMagazines[] = {"16Rnd_9x21_Mag","16Rnd_9x21_Mag","16Rnd_9x21_Mag","16Rnd_9x21_Mag","SmokeShellGreen","Chemlight_green","SmokeShellGreen","B_IR_Grenade","Chemlight_green"};
            cost = 160000;
            camouflage = 2.0;
        };
        class AllVehicles;
        class Air;
        class Plane: Air
        {
            class HitPoints;
        };
        class Plane_Base_F: Plane
        {
            class HitPoints: HitPoints
            {
                class HitHull;
            };
            class AnimationSources;
        };
        class firebat1: Plane_Base_F
        {
            author = "Scot Gilmore";
            destrType = "DestructWreck";
            scope = 2;
            side = 2;
            faction = "VIBORA";
            displayName = "-- Hellwing --";
            vehicleClass = "Vibora_Air";
            hiddenSelections[] = {"Camo1","Camo2"};
            model = "vhx_plane\cobra_firebat\firebat1.p3d";
            picture = "vhx_plane\cobra_firebat\data\ui\pic_firebat_co.paa";
            Icon = "vhx_plane\cobra_firebat\data\ui\map_firebat_co.paa";
            mapSize = 7;
            driverlefthandanimname = "lever_pilot";
            driverleftleganimname = "";
            driverrighthandanimname = "stick_pilot";
            driverrightleganimname = "";
            crew = "firebat_Pilot";
            ejectSpeed[] = {0,-2,0};
            cabinOpening = 1;
            gearRetracting = 1;
            gearDownTime = 0.25;
            gearUpTime = 0.35;
            driverAction = "firebat_Pilot";
            fuelCapacity = 300;
            fuelConsumptionRate = 0.05;
            supplyRadius = 4;
            incomingMissileDetectionSystem = 16;
            LockDetectionSystem = "2 + 8 + 4";
            driverhasflares = 0;
            radarType = 4;
            soundLocked[] = {"vhx_plane\cobra_firebat\Sounds\opfor_lock_1",0.1,1};
            soundIncommingMissile[] = {"vhx_plane\cobra_firebat\Sounds\opfor_lock_2",0.1,1};
            cost = 20000;
            threat[] = {0.1,1,0.7};
            damageEffect = "AirDestructionEffects";
            armor = 60;
            accuracy = 0.5;
            damageResistance = 0.01593;
            weapons[] = {"gatling_20mm","missiles_DAGR"};
            magazines[] = {"1000Rnd_20mm_shells","12Rnd_PG_missiles"};
            availableForSupportTypes[] = {"CAS_Bombing"};
                   
            simulation = "airplaneX";
                   
            maxSpeed = 350;
            landingAoa = "5*3.1415/180";
            landingSpeed = 95;
            stallSpeed = 80;
            stallWarningTreshold = 0.05;
            wheelSteeringSensitivity = 0.25;
            airBrake = 1;
            airBrakeFrictionCoef = 2.4;
            flaps = 1;
            flapsFrictionCoef = 0.3;
            angleOfIndicence = "1.5*3.1415/180";
            envelope[] = {0,0.05,0.3,2.8,6.0,6.2,6.3,6.4,6.4,6.5,6.5,6.5,1.0};
            altNoForce = 35000;
            altFullForce = 13636;
            thrustCoef[] = {1.48,1.45,1.4,1.35,1.3,1.24,1.17,1.1,0.9,0.7,0.3,0.0,0.0,0.0,0.0,0.0};
            
            
            aileronSensitivity = 1.2;
            aileronCoef[] = {0.0,0.8,1.0,1.1,1.2,1.2,1.2};
            aileronControlsSensitivityCoef = 2.8;
            elevatorSensitivity = 2.25;
            elevatorCoef[] = {0.0,0.13,0.2,0.26,0.32,0.38,0.43,0.48,0.54,0.58,0.53};
            elevatorControlsSensitivityCoef = 3;
            rudderInfluence = 0.7071;
            rudderCoef[] = {0.0,0.8,1.5,1.8,2.1,2.3,2.4,2.4,2.4,2.3,2.2};
            rudderControlsSensitivityCoef = 4;
            
            draconicForceXCoef = 9.0;
            draconicForceYCoef = 1.0;
            draconicForceZCoef = 1.0;
            draconicTorqueXCoef[] = {7.5,4.0,3.5,3.2,3.0,3.4,4.0,5.5,6.0,7.5,9.0};
            draconicTorqueYCoef[] = {9.0,8.3,5.0,4.3,4.0,3.7,3.5,3.3,3.1,2.9,2.8};
            
            maxOmega = 2000;
            
            memoryPointLMissile = "Missile_1";
            memoryPointRMissile = "Missile_2";
            // selectionFireAnim = "muzzleflash";
            memoryPointCM[] = {"flare_launcher1","flare_launcher2"};
            memoryPointCMDir[] = {"flare_launcher1_dir","flare_launcher2_dir"};
            memoryPointsGetInDriver = "pos_driver";
            memoryPointsGetInDriverDir = "pos_driver_dir";
            getInAction = "GetInLow";
            getOutAction = "GetOutLow";
            typicalCargo[] = {"B_Helipilot_F"};
            driverCompartments = "Compartment1";
           
            nameSound = "veh_helicopter";
            preciseGetInOut = 0;
            sensitivity = 2.5;
            driverCanSee = 31;
            extCameraPosition[] = {0,2,-15};
            gunnerUsesPilotView = 1;
            irScanRangeMax = 10000;
            cameraBegin = "rtd1_pos";
            cameraEnd = "rtd1_dir";
            memoryPointDriverOptics = "slingCamera";
            enableManualFire = 1;
            memoryPointGun[] = {"z_gunL_muzzle","z_gunR_muzzle"};
            gunBeg[] = {"z_gunL_muzzle","z_gunR_muzzle"};
            gunEnd[] = {"z_gunL_chamber","z_gunR_chamber"};
            laserScanner = 1;
            epeImpulseDamageCoef = 20;
            hiddenSelectionsTextures[] = {};
            driverCanEject = 1;
            
            class Wheels
            {
                class Wheel_1
                {
                    boneName = "Wheel_1";
                    steering = 1;
                    side = "left";
                    center = "Wheel_1_center";
                    boundary = "Wheel_1_rim";
                    width = 0.16;
                    mass = 20; //150;
                    MOI = 40;
                    dampingRate = 0.5; //2;
                    dampingRateDamaged = 1;
                    dampingRateDestroyed = 1000;
                    maxBrakeTorque = 2500;
                    maxHandBrakeTorque = 0;
                    suspTravelDirection[] = {0,-1,0};
                    suspForceAppPointOffset = "Wheel_1_center";
                    tireForceAppPointOffset = "Wheel_1_center";
                    maxCompression = 0.4;
                    maxDroop = 0.4;                
                    sprungMass = 350;
                    springStrength = 14366; //1200234;
                    springDamperRate = 3448; //128025;
                    longitudinalStiffnessPerUnitGravity = 40; //4000;
                    latStiffX = 25;
                    latStiffY = 180;
                    frictionVsSlipGraph[] = {{0,1},{0.5,1},{1,1}};
                };
                class Wheel_2: Wheel_1
                {
                    boneName = "Wheel_2";
                    steering = 0;
                    center = "Wheel_2_center";
                    boundary = "Wheel_2_rim";
                    width = 0.28;
                    mass = 25;
                    sprungMass = 150;
                    springStrength = 8757;
                    springDamperRate = 3062;
                    suspForceAppPointOffset = "Wheel_2_center";
                    tireForceAppPointOffset = "Wheel_2_center";
                    maxCompression = 0.8;
                    maxDroop = 0.8;                
                };
                class Wheel_3: Wheel_2
                {
                    boneName = "Wheel_3";
                    side = "right";
                    center = "Wheel_3_center";
                    boundary = "Wheel_3_rim";
                    suspForceAppPointOffset = "Wheel_3_center";
                    tireForceAppPointOffset = "Wheel_3_center";
                };

            };
            
            
            #include "sounds.hpp"
            
            class RenderTargets
            {
                class LowerMirror
                {
                    renderTarget = "rendertarget1";
                    class CameraView
                    {
                        pointPosition = "rtd1_pos";
                        pointDirection = "rtd1_dir";
                        renderQuality = 0;
                        renderVisionMode = 0;
                        fov = 0.7;
                    };
                };
            };
            class Reflectors
            {
                class Middle
                {
                    color[] = {7000,7500,10000,1};
                    ambient[] = {100,100,100,0};
                    position = "L svetlo";
                    direction = "konec L svetla";
                    hitpoint = "L svetlo";
                    selection = "L svetlo";
                    size = 1;
                    innerAngle = 20;
                    outerAngle = 60;
                    coneFadeCoef = 10;
                    intensity = 50;
                    useFlare = 1;
                    dayLight = 0;
                    FlareSize = 6;
                    class Attenuation
                    {
                        start = 1;
                        constant = 0;
                        linear = 0;
                        quadratic = 4;
                    };
                };
            };
            class Exhausts
            {
                class Exhaust1
                {
                    position = "exhaust1";
                    direction = "exhaust1_dir";
                    effect = "ExhaustsEffectJet";
                };
            };
            class WingVortices
            {
                class StabilizerLeft
                {
                    effectName = "BodyVortices";
                    position = "pos_vortex_vStab_L";
                };
                class StabilizerRight
                {
                    effectName = "BodyVortices";
                    position = "pos_vortex_vStab_R";
                };
                class WingTipLeft
                {
                    effectName = "WingVortices";
                    position = "pos_vortex_wTip_L";
                };
                class WingTipRight
                {
                    effectName = "WingVortices";
                    position = "pos_vortex_wTip_R";
                };
            };
            class MarkerLights
            {
                class WhiteStill
                {
                    name = "bily pozicni";
                    color[] = {1.0,1.0,1.0};
                    ambient[] = {0.1,0.1,0.1};
                    blinking = 1;
                    intensity = 75;
                    blinkingPattern[] = {0.1,0.9};
                    blinkingPatternGuarantee = 0;
                    drawLightSize = 0.2;
                    drawLightCenterSize = 0.04;
                };
                class RedStill
                {
                    name = "cerveny pozicni";
                    color[] = {0.8,0.0,0.0};
                    ambient[] = {0.08,0.0,0.0};
                    intensity = 75;
                    drawLight = 1;
                    drawLightSize = 0.15;
                    drawLightCenterSize = 0.04;
                    activeLight = 0;
                    blinking = 0;
                    dayLight = 0;
                    useFlare = 0;
                };
                class GreenStill
                {
                    name = "zeleny pozicni";
                    color[] = {0.0,0.8,0.0};
                    ambient[] = {0.0,0.08,0.0};
                    intensity = 75;
                    drawLight = 1;
                    drawLightSize = 0.15;
                    drawLightCenterSize = 0.04;
                    activeLight = 0;
                    blinking = 0;
                    dayLight = 0;
                    useFlare = 0;
                };
                class RedBlinking
                {
                    name = "bily pozicni blik";
                    color[] = {0.9,0.15,0.1};
                    ambient[] = {0.09,0.015,0.01};
                    intensity = 75;
                    blinking = 1;
                    blinkingPattern[] = {0.1,0.9};
                    blinkingPatternGuarantee = 0;
                    drawLightSize = 0.2;
                    drawLightCenterSize = 0.04;
                };
                class WhiteBlinking
                {
                    name = "cerveny pozicni blik";
                    color[] = {0.9,0.15,0.1};
                    intensity = 75;
                    ambient[] = {0.09,0.015,0.01};
                    blinking = 1;
                    blinkingPattern[] = {0.2,1.3};
                    blinkingPatternGuarantee = 0;
                    drawLightSize = 0.25;
                    drawLightCenterSize = 0.08;
                };
            };
            class AnimationSources: AnimationSources
            {
                class wingsFold
                {
                    source = "user";
                    animPeriod = 1;
                    initPhase = 0;
                };
                class AddScreen1
                {
                    source = "user";
                    animPeriod = 1e-006;
                    initPhase = 0;
                };
                class Damper_1_source
                {
                    source = "damper";
                    wheel = "Wheel_1";
                };
                class Damper_2_source
                {
                    source = "damper";
                    wheel = "Wheel_2";
                };
                class Damper_3_source
                {
                    source = "damper";
                    wheel = "Wheel_3";
                };
                class Wheel_1_source
                {
                    source = "wheel";
                    wheel = "Wheel_1";
                };
                class Wheel_2_source
                {
                    source = "wheel";
                    wheel = "Wheel_2";
                };
                class Wheel_3_source
                {
                    source = "wheel";
                    wheel = "Wheel_3";
                };   
                class HitGlass1
                {
                    source = "Hit";
                    hitpoint = "HitGlass1";
                    raw = 1;
                };
                class HitGlass2: HitGlass1
                {
                    hitpoint = "HitGlass2";
                };
            };
            class UserActions
            {
                class Wings_Fold
                {
                    displayName = "Tuck Wings";
                    textToolTip = "";
                    shortcut = "";
                    priority = 2.0;
                    position = "";
                    radius = 2;
                    showWindow = 0;
                    onlyForPlayer = 1;
                    condition = "(this animationPhase 'wingsFold' < 0.5) AND (alive this)";
                    statement = "this animate ['wingsFold', 1]";
                };
                class Wings_UnFold : Wings_Fold
                {
                    displayName = "Extend Wings";
                    condition = "(this animationPhase 'wingsFold' > 0.5) AND (alive this)";
                    statement = "this animate ['wingsFold', 0];";
                };          
            };
        };
    }


    Wheels & Suspension
    Notice in the image above that the front wheel doesn't droop as far as the main/rear wheels do. It is intended to have a nose down stance while on the ground, but I aligned it to its flight path (Z axis) in OB. I'm not sure if that's the correct way to do it; I just assumed its weight distribution and suspension settings would make it rest properly on ground. Something weird was also happening: Addon Breaker was compiling my PBO, even though it had some syntax errors. During that time, the wheels were aligned to the ground and working fine. The truly weird part: after I found and corrected the missing semi-colons (located after the map icon .paa line), the wheel behavior became wonky as you see in the images below. In short, the jacked up syntax version made the suspension and wheels work better. Huh.
     

    This is what the wheels look like when the plane is freshly loaded into the arsenal/garage:
    20180902094301_1_by_rooster3d-dclu04r.jp
    Fig. 2: Fresh spawn


    ...and after starting the engine and moving forward a few feet, the rear wheels are a little less sunken while the front wheel is still raised:
    20180902094338_1_by_rooster3d-dclu045.jp

    Fig. 3: Allowing the wheel physics to readjust/kick in

     

    20180902094712_1_by_rooster3d-dclu04l.jp
    Fig. 4: After getting out and looking at it from prone, the wheels are sunken again.

    Some information about the plane:
    This is based on two planes - the real life BD5J and the fictional Cobra Firebat. It's a small, light weight, short-range bomber/fighter with very limited avionic technology. It has a wide gliding surface and canard-style elevators. The wings are supposed to fold upwards for storage (but that isn't working either) and vertical catapult launching (from e.g. a missile silo) , and it barely has room for one pilot.

    As always, any help is much appreciated!

    EDIT:
    here is also the model.cfg (updated):
     

    Spoiler


    class cfgSkeletons
    {
        
        class firebatbones
        {
            isDiscrete = 0;
            skeletonInherit = "";
            SkeletonBones[]=
            {
                "fan_1"                        ,"",
                "exhaust1"                    ,"",
                "flapArmL"                    ,"",
                "flapArmR"                    ,"",
                "flapL"                        ,"flapArmL",
                "flapR"                        ,"flapArmR",
                "i_mph"                        ,"",
                "i_bank"                    ,"",
                "i_horizont"                ,"i_bank",
                "i_alt_100f"                ,"",
                "i_alt_1000f"                ,"",
                "i_alt_10000f"                ,"",
                "i_compass"                    ,"",
                "i_vSpeed"                    ,"",
                "i_fuel"                    ,"",
                "dg_pitch"                    ,"",
                "dg_bank"                    ,"",
                "dg_pitch2"                    ,"",
                "dg_bank2"                    ,"",
                "dg_vertspeed"                ,"",
                "dg_vertspeed2"                ,"",
                "barrel_1"                    ,"",
                "barrel_2"                    ,"",
                "muzzleflash_1"                ,"barrel_1",
                "muzzleflash_2"                ,"barrel_2",
                "l svetlo"                    ,"",
                "konec l svetla"            ,"",
                "machinegun"                ,"",
                "otochlavne"                ,"",
                "zasleh"                    ,"",
                "damagehide"                ,"",
                "virtual_damper"            ,"",
                "gear_1"                    ,"",
                "gDoor1_3"                    ,"gear_1",
                "gear_1_2"                    ,"gear_1",
                "gear_1_3"                    ,"gear_1_2",
                "gear_1_damper"                ,"gear_1_3",
                "gear_1_caster"                ,"gear_1_damper",
                "visWheel_1"                ,"gear_1_caster",
                "gDoor1_1"                    ,"",
                "gDoor1_2"                    ,"gDoor1_1",
                "gear_2"                    ,"",
                "gear_2_2"                    ,"gear_2",
                "gear_2_3"                    ,"gear_2_2",
                "gear_2_damper"                ,"gear_2_3",
                "visWheel_2"                ,"gear_2_damper",
                "gArm2_1"                    ,"",
                "gArm2_2"                    ,"gArm2_1",
                "gear_3"                    ,"",
                "gear_3_2"                    ,"gear_3",
                "gear_3_3"                    ,"gear_3_2",
                "gear_3_damper"                ,"gear_3_3",
                "visWheel_3"                ,"gear_3_damper",
                "gArm3_1"                    ,"",
                "gArm3_2"                    ,"gArm3_1",
                "canopyB"                    ,"canopyA",
                "canopyA"                    ,"canopyC",
                "canopyC"                    ,"",
                "glass1"                    ,"canopyA",
                "glass2"                    , "",
                "stick_pilot"                ,"",
                "stick_bank_axis"             ,"",
                "stick_dive_axis"            ,"stick_bank_axis",
                "lever_pilot"                ,"",
                "throttle_pilot"            ,"lever_pilot",
                "throttle_switch_pilot"        ,"lever_pilot",
                "display_off"                ,"",
                "rudderL"                    ,"",
                "rudderR"                    ,"",
                "canardL"                    , "",
                "canardR"                    , "",
                "wingL"                        , "",
                "alrnL"                        , "wingL",
                "wingR"                        , "",
                "alrnR"                        , "wingR"
            };
        };
    };
    class CfgModels
    {
        class Default
        {
            sections[] = {};
            sectionsInherit="";
            skeletonName = "";
        };
        class firebat1: default
        {
            skeletonName="firebatbones";
            sections[]=
            {
                "elektronika",
                "glass1",
                "glass2",
                "glass3",
                "glass4",
                "glass5",
                "zbytek",
                "mala vrtule",
                "velka vrtule",
                "motor",
                "munice",
                "vez",
                "zbran",
                "trup",
                "muzzleflash",
                "zasleh"
            };
        
            class Animations
            {
                class I_Speed
                {
                    type="rotation";
                    source="speed";
                    selection="i_mph";
                    axis="i_mph_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;//rad 0.0
                    maxValue = 10.288889;//rad 589.5099
                    angle0 = -0.034906585;//rad -2.0;
                    angle1 = 0.19198622;//rad 11.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class I_Speed_02
                {
                    type="rotation";
                    source="speed";
                    selection="i_mph";
                    axis="i_mph_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = 10.28889;//rad 589.50995
                    maxValue = 41.155556;//rad 2358.0396
                    angle0 = 0.0;//rad 0.0;
                    angle1 = 2.9496064;//rad 169.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class I_Speed_03
                {
                    type="rotation";
                    source="speed";
                    selection="i_mph";
                    axis="i_mph_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = 41.155556;//rad 2358.0396
                    maxValue = 46.3;//rad 2652.7944
                    angle0 = 0.0;//rad 0.0;
                    angle1 = 0.36651915;//rad 21.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class I_Speed_04
                {
                    type="rotation";
                    source="speed";
                    selection="i_mph";
                    axis="i_mph_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = 46.3;//rad 2652.7944
                    maxValue = 92.6;//rad 5305.589
                    angle0 = 0.0;//rad 0.0;
                    angle1 = 2.1816616;//rad 125.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class I_Bank
                {
                    type="rotation";
                    source="horizonBank";
                    selection="i_bank";
                    axis="i_bank_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = -6.2831855;//rad -360.0
                    maxValue = 6.2831855;//rad 360.0
                    angle0 = 6.2831855;//rad 360.0;
                    angle1 = -6.2831855;//rad -360.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class I_Horizont_Dive
                {
                    type="translation";
                    source="horizonDive";
                    selection="i_horizont";
                    axis="i_horizont_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = -6.2831855;//rad -360.0
                    maxValue = 6.2831855;//rad 360.0
                    offset0 = -0.25;//rad -360.0;
                    offset1 = 0.25;//rad 360.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class I_Altitude_100f
                {
                    type="rotation";
                    source="altBaro";
                    selection="i_alt_100f";
                    axis="i_alt_axis";
                    sourceAddress = loop;
                    minValue = 0.0;//rad 0.0
                    maxValue = 304.8;//rad 17463.752
                    angle0 = 0.0;//rad 0.0;
                    angle1 = 6.2831855;//rad 360.0;
                    animPeriod = 1.4013e-045/*#DEN*/;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class I_Altitude_1000f
                {
                    type="rotation";
                    source="altBaro";
                    selection="i_alt_1000f";
                    axis="i_alt_axis";
                    sourceAddress = loop;
                    minValue = 0.0;//rad 0.0
                    maxValue = 3048.0;//rad 174637.53
                    angle0 = 0.0;//rad 0.0;
                    angle1 = 6.2831855;//rad 360.0;
                    animPeriod = 1.4013e-045/*#DEN*/;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class I_Altitude_10000f
                {
                    type="rotation";
                    source="altBaro";
                    selection="i_alt_10000f";
                    axis="i_alt_axis";
                    sourceAddress = loop;
                    minValue = 0.0;//rad 0.0
                    maxValue = 30480.0;//rad 1746375.4
                    angle0 = 0.0;//rad 0.0;
                    angle1 = 6.2831855;//rad 360.0;
                    animPeriod = 1.4013e-045/*#DEN*/;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class I_Compass
                {
                    type="rotation";
                    source="direction";
                    selection="i_compass";
                    axis="i_compass_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = -3.1415927;//rad -180.0
                    maxValue = 3.1415927;//rad 180.0
                    angle0 = -3.1415927;//rad -180.0;
                    angle1 = 3.1415927;//rad 180.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class I_VSpeed
                {
                    type="rotation";
                    source="vertSpeed";
                    selection="i_vSpeed";
                    axis="i_vSpeed_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = -15.24;//rad -873.1877
                    maxValue = 15.24;//rad 873.1877
                    angle0 = 4.6076694;//rad -264.0;
                    angle1 = -1.43117;//rad 82.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class I_Fuel
                {
                    type="rotation";
                    source="fuel";
                    selection="i_fuel";
                    axis="i_fuel_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;//rad 0.0
                    maxValue = 1.0;//rad 57.29578
                    angle0 = -0.6109;//rad -35.0;
                    angle1 = 0.6109;//rad 35.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class dg_pitch
                {
                    type="rotation";
                    source="horizonDive";
                    selection="dg_pitch";
                    axis="dg_pitch_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = -6.2831855;//rad -360.0
                    maxValue = 6.2831855;//rad 360.0
                    angle0 = 1.5707964;//rad 90.0;
                    angle1 = -1.5707964;//rad -90.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class dg_bank
                {
                    type="rotation";
                    source="horizonBank";
                    selection="dg_bank";
                    axis="dg_bank_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = -3.1415927;//rad -180.0
                    maxValue = 3.1415927;//rad 180.0
                    angle0 = -1.5707964;//rad -90.0;
                    angle1 = 1.5707964;//rad 90.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class dg_pitch2
                {
                    type="rotation";
                    source="horizonDive";
                    selection="dg_pitch2";
                    axis="dg_pitch2_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = -6.2831855;//rad -360.0
                    maxValue = 6.2831855;//rad 360.0
                    angle0 = 1.5707964;//rad 90.0;
                    angle1 = -1.5707964;//rad -90.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class dg_bank2
                {
                    type="rotation";
                    source="horizonBank";
                    selection="dg_bank2";
                    axis="dg_bank2_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = -3.1415927;//rad -180.0
                    maxValue = 3.1415927;//rad 180.0
                    angle0 = -1.5707964;//rad -90.0;
                    angle1 = 1.5707964;//rad 90.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class dg_vertspeed
                {
                    type="translation";
                    source="vertSpeed";
                    selection="dg_vertspeed";
                    axis="dg_vertspeed_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = -30.0;//rad -1718.8734
                    maxValue = 30.0;//rad 1718.8734
                    offset0 = -0.5;
                    offset1 = 0.5;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class dg_vertspeed2
                {
                    type="translation";
                    source="vertSpeed";
                    selection="dg_vertspeed2";
                    axis="dg_vertspeed2_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = -30.0;//rad -1718.8734
                    maxValue = 30.0;//rad 1718.8734
                    offset0 = -0.5;
                    offset1 = 0.5;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class display_on
                {
                    type="hide";
                    source="rpm";
                    selection="display_off";
    //                sourceAddress = clamp;// (default)
                    minValue = -0.8;//rad -45.836624
                    maxValue = 0.2;//rad 11.459156
                    hideValue = 0.99;
    //                unHideValue = -1.0;//(default)
                    animPeriod = 0.0;
                    initPhase = 0.0;
                };
                class Canopy_rot_p1
                {
                    type="rotation";
                    source="cabin";
                    selection="canopyA";
                    axis="canopyA_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = 2.001;//rad 429.71835
                    maxValue = 4.0;//rad 859.4367
                    angle0 = 1.0;//rad 115.0;
                    angle1 = 0.0;//rad 0.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Canopy_rot_p2
                {
                    type="rotation";
                    source="cabin";
                    selection="canopyA";
                    axis="canopyA_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;//rad 429.71835
                    maxValue = 2.0;//rad 859.4367
                    angle0 = 0.76;//rad 115.0;
                    angle1 = 0.0;//rad 0.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Canopy_hinge1_rot
                {
                    type="rotation";
                    source="cabin";
                    selection="canopyB";
                    axis="canopyB_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;//rad 429.71835
                    maxValue = 4.0;//rad 859.4367
                    angle0 = -2.32;//rad -115.0;
                    angle1 = 0.0;//rad 0.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Canopy_hinge2_rot
                {
                    type="rotation";
                    source="cabin";
                    selection="canopyC";
                    axis="canopyC_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;//rad 429.71835
                    maxValue = 4.0;//rad 859.4367
                    angle0 = -2.007;//rad -115.0;
                    angle1 = 0.0;//rad 0.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                
                class Wheel_1_rot
                {
                    type="rotation";
                    source="wheel";
                    selection="visWheel_1";
                    axis="visWheel_1_axis";
                    sourceAddress = loop;
                    minValue = 0.0;//rad 0.0
                    maxValue = 1.0;//rad 57.29578
                    angle0 = 0.0;//rad 0.0;
                    angle1 = -6.2831855;//rad -360.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Wheel_2_rot
                {
                    type="rotation";
                    source="wheel";
                    selection="visWheel_2";
                    axis="visWheel_2_axis";
                    sourceAddress = loop;
                    minValue = 0.0;//rad 0.0
                    maxValue = 1.0;//rad 57.29578
                    angle0 = 0.0;//rad 0.0;
                    angle1 = 6.2831855;//rad 360.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Wheel_3_rot
                {
                    type="rotation";
                    source="wheel";
                    selection="visWheel_3";
                    axis="visWheel_3_axis";
                    sourceAddress = loop;
                    minValue = 0.0;//rad 0.0
                    maxValue = 1.0;//rad 57.29578
                    angle0 = 0.0;//rad 0.0;
                    angle1 = -6.2831855;//rad -360.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Gear_1_rot
                {
                    type="rotation";
                    source="gear";
                    selection="gear_1";
                    axis="gear_1_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;//rad 0.0
                    maxValue = 1.0;//rad 40.107044
                    angle0 = 0.0;//rad 0.0;
                    angle1 = -1.885;//rad -108.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Gear_1_hatch_1_rot: Gear_1_rot
                {
                    selection="gDoor1_1";
                    axis="gDoor1_1_axis";
                    angle0 = 0.0;//rad 0.0;
                    angle1 = -2.094;//rad -120.0;
                };
                class Gear_1_hatch_2_rot: Gear_1_rot
                {
                    selection="gDoor1_2";
                    axis="gDoor1_2_axis";
                    angle0 = 0.0;//rad 0.0;
                    angle1 = -1.453;//rad -83.25;
                };
                class Gear_1_hatch_hinge_rot: Gear_1_rot
                {
                    selection="gDoor1_3";
                    axis="gDoor1_3_axis";
                    angle0 = 0.0;//rad 0.0;
                    angle1 = -1.117;//rad -64;
                };
                
                class virtual_damper_move
                {
                    type="translation";
                    source="Damper_1_source";
                    selection="virtual_damper";
                    axis="basic_damper_destruct_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;
                    maxValue = 1;
                    offset0 = 1;
                    offset1 = -1;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                
                class gear_1_stabil_1_rot: virtual_damper_move
                {
                    type="rotation";
                    source="Damper_1_source";
                    selection="gear_1_2";
                    axis="gear_1_2_axis";
                    minValue = 0.0;
                    maxValue = 1;
                    angle0 = -0.0;
                    angle1 = 1.0472;//rad 60;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class gear_1_stabil_2_rot: gear_1_stabil_1_rot
                {
                    selection="gear_1_3";
                    axis="gear_1_3_axis";
                    angle0 = 0.0;
                    angle1 = -2.0944;//rad 120.0;
                };
                
                class gear_1_damper_rot: gear_1_stabil_1_rot
                {
                    selection="gear_1_damper";
                    axis="gear_1_damper_axis";
                };
                
                class Gear_1_hatch_2_susp_p1: gear_1_stabil_1_rot
                {
                    selection="gDoor1_2";
                    axis="gDoor1_2_axis";
                    minValue = 0.0;
                    maxValue = 0.5;
                    angle0 = 0.0;
                    angle1 = 0.2269;//rad 13
                };
                class Gear_1_hatch_2_susp_p2: Gear_1_hatch_2_susp_p1
                {
                    minValue = 0.5001;
                    maxValue = 1;
                    angle0 = 0.0;
                    angle1 = 0.4538;//rad 26.0;
                };
                class gear_1_steering_rot
                {
                    type="rotation";
                    source="noseWheelTurn";
                    selection="gear_1_caster";
                    axis="gear_1_caster_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = -1.0;//rad -57.29578
                    maxValue = 1.0;//rad 57.29578
                    angle0 = -0.6981317;//rad -40.0;
                    angle1 = 0.6981317;//rad 40.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                
                //////// MAIN GEARS ////////
                class Gear_2_rot
                {
                    type="rotation";
                    source="gear";
                    selection="gear_2";
                    axis="gear_2_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;//rad 0.0
                    maxValue = 1.0;//rad 40.107044
                    angle0 = 0.0;//rad 0.0;
                    angle1 = -2.094;//rad -120.37;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Gear_2_piston_1_rot1
                {
                    type="rotation";
                    source="gear";
                    selection="gArm2_1";
                    axis="gArm2_1_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;//rad 0.0
                    maxValue = 0.5;//rad 40.107044
                    angle0 = 0.0;//rad 0.0
                    angle1 = -0.07854;//rad -4.5
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Gear_2_piston_1_rot2
                {
                    type="rotation";
                    source="gear";
                    selection="gArm2_1";
                    axis="gArm2_1_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = 0.5001;//rad 0.0
                    maxValue = 0.7;//rad 40.107044
                    angle0 = 0.0;//rad 0.0
                    angle1 = 0.05236;//rad 3
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Gear_2_piston_1_rot3
                {
                    type="rotation";
                    source="gear";
                    selection="gArm2_1";
                    axis="gArm2_1_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = 0.7001;//rad 0.0
                    maxValue = 1.0;//rad 40.107044
                    angle0 = 0.0;//rad 0.0;
                    angle1 = 0.1222;//rad 7;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Gear_2_piston_2
                {
                    type="translation";
                    source="gear";
                    selection="gArm2_2";
                    axis="gArm2_2_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;//rad 0.0
                    maxValue = 1.0;//rad 40.107044
                    offset0 = 0.0;
                    offset1 = -0.87;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                
                class gear_2_stabil_1_rot: gear_1_stabil_1_rot
                {
                    source="Damper_2_source";
                    selection="gear_2_2";
                    axis="gear_2_2_axis";
                };
                class gear_2_stabil_2_rot: gear_1_stabil_2_rot
                {
                    source="Damper_2_source";
                    selection="gear_2_3";
                    axis="gear_2_3_axis";
                };
                class gear_2_damper_rot: gear_1_stabil_1_rot
                {
                    source="Damper_2_source";
                    selection="gear_2_damper";
                    axis="gear_2_damper_axis";
                };
                
                
                class Gear_3_rot: Gear_2_rot
                {
                    selection="gear_3";
                    axis="gear_3_axis";
                };
                class Gear_3_piston_1_rot1: Gear_2_piston_1_rot1
                {
                    selection="gArm3_1";
                    axis="gArm3_1_axis";
                };
                class Gear_3_piston_1_rot2: Gear_2_piston_1_rot2
                {
                    selection="gArm3_1";
                    axis="gArm3_1_axis";
                };
                class Gear_3_piston_1_rot3: Gear_2_piston_1_rot3
                {
                    selection="gArm3_1";
                    axis="gArm3_1_axis";
                };
                class Gear_3_piston_2: Gear_2_piston_2
                {
                    source="gear";
                    selection="gArm3_2";
                    axis="gArm3_2_axis";
                };
                
                class gear_3_stabil_1_1_rot: gear_1_stabil_1_rot
                {
                    source="Damper_3_source";
                    selection="gear_3_2";
                    axis="gear_3_2_axis";
                    
                };
                class gear_3_stabil_1_2_rot: gear_1_stabil_2_rot
                {
                    source="Damper_3_source";
                    selection="gear_3_3";
                    axis="gear_3_3_axis";
                };
                class gear_3_damper_rot: gear_1_stabil_1_rot
                {
                    source="Damper_3_source";
                    selection="gear_3_damper";
                    axis="gear_3_damper_axis";
                };
                
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                
                class Flap_L_move
                {
                    type="translation";
                    source="flap";
                    selection="flapArmL";
                    axis="flapArmL_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;//rad 0.0
                    maxValue = 0.5;//rad 28.64789
                    offset0 = 0.0;
                    offset1 = 0.6;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Flap_R_move
                {
                    type="translation";
                    source="flap";
                    selection="flapArmR";
                    axis="flapArmR_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;//rad 0.0
                    maxValue = 0.5;//rad 28.64789
                    offset0 = 0.0;
                    offset1 = 0.6;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Flap_L_rot
                {
                    type="rotation";
                    source="flap";
                    selection="flapL";
                    axis="flapL_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = 0.5;//rad 28.64789
                    maxValue = 1.0;//rad 57.29578
                    angle0 = 0.0;//rad 0.0;
                    angle1 = -0.34906584;//rad -20.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Flap_R_rot
                {
                    type="rotation";
                    source="flap";
                    selection="flapR";
                    axis="flapR_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = 0.5;//rad 28.64789
                    maxValue = 1.0;//rad 57.29578
                    angle0 = 0.0;//rad 0.0;
                    angle1 = 0.34906584;//rad 20.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Stick_Pilot_Dive
                {
                    type="rotation";
                    source="elevator";
                    selection="stick_pilot";
                    axis="stick_dive_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = -1.0;//rad -57.29578
                    maxValue = 1.0;//rad 57.29578
                    angle0 = -0.05235988;//rad -3.0;
                    angle1 = 0.05235988;//rad 3.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Stick_Pilot_Bank
                {
                    type="rotation";
                    source="aileron";
                    selection="stick_pilot";
                    axis="stick_bank_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = -0.5;//rad -28.64789
                    maxValue = 0.5;//rad 28.64789
                    angle0 = -0.05235988;//rad -3.0;
                    angle1 = 0.05235988;//rad 3.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class aileron_1
                {
                    type="rotation";
                    source="aileron";
                    selection="alrnL";
                    axis="alrnL_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = -0.5;//rad -28.64789
                    maxValue = 0.5;//rad 28.64789
                    angle0 = -0.34906584;//rad -20.0;
                    angle1 = 0.34906584;//rad 20.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class aileron_2
                {
                    type="rotation";
                    source="aileron";
                    selection="alrnR";
                    axis="alrnR_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = -0.5;//rad -28.64789
                    maxValue = 0.5;//rad 28.64789
                    angle0 = -0.34906584;//rad -20.0;
                    angle1 = 0.34906584;//rad 20.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Elevator_L
                {
                    type="rotation";
                    source="elevator";
                    selection="canardL";
                    axis="canardL_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = -1.0;//rad -57.29578
                    maxValue = 1.0;//rad 57.29578
                    angle0 = 0.24434611;//rad -14.000001;
                    angle1 = -0.24434611;//rad 14.000001;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Elevator_R
                {
                    type="rotation";
                    source="elevator";
                    selection="canardR";
                    axis="canardR_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = -1.0;//rad -57.29578
                    maxValue = 1.0;//rad 57.29578
                    angle0 = -0.24434611;//rad -14.000001;
                    angle1 = 0.24434611;//rad 14.000001;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class RudderL
                {
                    type="rotation";
                    source="rudder";
                    selection="rudderL";
                    axis="rudderL_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = -1.0;//rad -57.29578
                    maxValue = 1.0;//rad 57.29578
                    angle0 = 0.39968044;//rad 22.900002;
                    angle1 = -0.39968044;//rad -22.900002;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class RudderR
                {
                    type="rotation";
                    source="rudder";
                    selection="rudderR";
                    axis="rudderR_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = -1.0;//rad -57.29578
                    maxValue = 1.0;//rad 57.29578
                    angle0 = 0.39968044;//rad 22.900002;
                    angle1 = -0.39968044;//rad -22.900002;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Leftwing
                {
                    type = "rotation";
                    source="user";
                    selection="wingL";
                    axis="wingL_axis";
                    minValue=0;
                    maxValue=1;
                    angle0=0;
                    angle1=1.571;// i.e.: 90 deg
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Rightwing
                {
                    type = "rotation";
                    source="user";
                    selection="wingR";
                    axis="wingR_axis";
                    minValue=0;
                    maxValue=1;
                    angle0=0;
                    angle1=-1.571;// i.e.: -90 deg
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Rotor_1
                {
                    type="rotation";
                    source="rotor";
                    selection="fan_1";
                    axis="fan_1_axis";
    //                sourceAddress = clamp;// (default)
                    minValue = 0.0;//rad 0.0
                    maxValue = 1.0;//rad 57.29578
                    angle0 = 0.0;//rad 0.0;
                    angle1 = -6.2831855;//rad -360.0;
                    animPeriod = 0.0;
                    initPhase = 0.0;
    //                memory = true;//(default assumed)
                };
                class Glass1_destruct
                {
                    type="hide";
                    source="HitGlass1";
                    selection="glass1";
                    minValue=0;
                    maxValue=1;
                    hideValue=0.99000001;
                    animPeriod=0;
                    initPhase=0;
                };
                class Glass2_destruct
                {
                    type="hide";
                    source="HitGlass2";
                    selection="glass2";
                    minValue=0;
                    maxValue=1;
                    hideValue=0.99000001;
                    animPeriod=0;
                    initPhase=0;
                };
            };
        };
    };


    Edit 2: I am realizing to my horror how messed up my model.cfg is, with redundant selections and obsolete min/maxValue settings for dampers. My corrections so far have allowed the wheels to rest on the ground, yet the suspension is still really stiff. I have to hard dive into the ground in order to notice any change.

    Edit 3: Docs are updated, and some fixes were noted. Problems still persist.

    • Like 2

  8. There seems to be some confusion over the terms "rim" and "boundary," and the two are inaccurately used interchangeably. I noticed in @firewill's figure 5 that he has the wheel_1_rim set to the part where the metal meets the rubber - the rim of the literal wheel as if without a tire. This is the common understanding of the term "rim," however in the sample plane supplied by BIS they put the wheel_1_rim, wheel_2_rim, and wheel_3_rim on the very edges of the tires. As I am testing it, the inaccurate name position also seems to work better so far.


  9. @Sgt.Makarov, @RicHornet I actually tried looking through that mod by Nodunit and Franze. It's even more intense than the RHS AH64 because you can interact with its dash menus, and you have to go through a series of switches to enable pilot control of the M230. Looking through the code was a nightmare, and the RHS code is equally scary (in a good way - it's advanced stuff way over my head). Most GI Joe-Arma crossover fans aren't going to want to mess with all the real-sim functions. I want the visual immersion, but less complicated to use. It's an elusive sweetspot, and alas I know my hopes are super lofty.


  10. 1 minute ago, da12thMonkey said:

    The PNVS turret model is slaved to the pilot's head in cockpit view or pilotcamera view. Theoretically the M320 could do the same if there heli was a single seater or something.

    The switching of full PNVS and TADS animation control sources between two crew members, that is not a simple matter. Which is why the CPG is the only one controlling TADS+M320, as it's primarily their job to operate the weapon targeting system while the pilot focusses on flying the aircraft, and using the PNVS turret for navigation.

    I get it, and let me say this is truly astounding what the RHS guys have done! I just want to point out that the documentation on the RHS site does imply that the pilot can control the M230. Further down it also says the Apaches are a work in progress overall, but doesn't specify what doesn't work.


  11. I came here looking to see if, in Arma 3, the pilot can control the aiming and firing of the main turret and main gun. In the case of the RHS Apaches it's the M230. I need something like this for this helicopter:


    As you can see, it's a one-man job with a mg turret up front. I know it's not as realistic as the AH64s, but I've put some research into it to make it plausible. It's at least game-plausible, and it's way more realistic than its toy counterpart ever was. I've been playing the RHS:USF mod trying to figure out how to get the IHADSS system to work, but so far no dice.

    Any help on getting the pilot turret to work in-game would be nice, and help getting a simplified version of it on the FANG would be AMAZING! (I can dream.)

    • Like 4
    • Haha 1

  12. Perhaps he's building an ATM that spits out cash.

    I think what @Dedmen is trying to say, maybe not in the best way, is that you need to elaborate in order for us to understand your problem. If you can get past the inherent snarkiness, he has quite helpfully parted out all the ambiguous portions of your post, so you can help us help you.

    In OP's defense, the terminology can be quite elusive to newbies.

    • Like 1

  13. Well that sucks. I was thinking maybe attaching to the Neck instead, but I think we'd see the same problem with slightly different obstruction. There has to be something different, because while there are visible indications of ambient animation in 1stPOV, the player view is more subtle and not exactly synced up to what the character is doing. To be specific, we might see a brow wipe and walk/run bobbing, but we are never subject to having to look down at our shoes and weapons - BUT THESE ANIMATIONS ARE STILL GOING ON! See, I didn't even know that until I put the helmet in pilot_view and tested in-game.


  14. Hey all. I have a helmet that comes into the wearer's view just barely, so I've put it into the view_pilot LOD. Unfortunately, the ambient soldier animations make this impractical, and half the time he's checking for gum on his boot. The helmet in view_pilot consequently obscures all visibility while the character's head is down. I'm trying not to go into an NCO tirade of how wriggly the soldier and his head are -- no military bearing whatsoever! Instead, I was wondering what the name of the player camera view is, so I can name or attach the view_pilot helmet to that. The camera is a lot less affected by these animations.

    An answer would also help with future models since I intend to make visors, sunglasses, and other head attachments that will come into view.

    Of course, the best option would be for BI to have made the ambient animations much, much more subtle, and to attach the player view point at a better place on the head. This would solve so many other problems (like looking down and not seeing where my neck should be, better sight alignment, proper visibility in vehicles, etc).

×