Jump to content
scotg

New driver/pilot poses

Recommended Posts

This might seem a little crazy, but is there a way to get driver poses from vanilla RTMs and edit them to fit into other vehicles? There are a lot of good choices to start from, but none of them are ever a perfect fit for my vehicles. Starting from scratch is one option, using the sample files, but then there are the hands. Yeah... it's mostly all about the hands. Moving arms and legs around is tedious enough, but moving individual fingers seems exhausting, especially when the driver has to grip something like a wheel or control stick.
 

Alternatively, does anyone have any p3d pose models featuring hand gripping, that they are willing to share?

Share this post


Link to post
Share on other sites

Of course it's a blender plugin, but I'm a 3DS Max guy. I don't understand why RTMs, especially static ones, are binarized. Anyway, I went ahead and spent all afternoon arranging the T-pose hands from the sample rig to fit a steering wheel. I'm happy to share the p3d if anyone wants to copy/paste any part of the figure. I'd just need to find a good place to upload it.

Share this post


Link to post
Share on other sites

That's just a rig to reduce some of the tedium involved in posing/ interacting with other objects. Especially the hands. Alwarren's export suite could be considered a "plugin".  I'm not going to sing Blender's praises. You either use it or you don't. But there are other people getting stuff done with it, as and when it's required. And then going back to what they're used to.

 

What you've done yourself works. But it might be frustrating if you needed to do a set of them.

 

Think of binarising as an optimisation process. Which may help performance, besides reducing the overall weight of a project. I assume making a file awkward to open for the average user, was secondary. :smile_o:

  • Like 1

Share this post


Link to post
Share on other sites

I have a new problem, but since it's very related to this thread I'm just going to keep it here.

My custom driver pose is working, but my custom passenger pose is not. I'm not sure why it's happening, but I'm including the screencaps from OB and Eden to show what's expected vs. what I get, along with the config text - just in case. Please pay no attention to the textures; I have paused working on them for a little while.


OB - Buggy with proxies

 

OB - Buggy with extracted proxies

 

EDEN - What went wrong?

It may be worth noting that I can no longer get into the passenger seat from outside the buggy. I can only sit there after getting into the driver position. AI aren't smart enough to figure this out, so that's my character standing in passenger seat and the AI in the driver position. Before I created the passenger seat pose I was just using the driver pose for both seats, and it was working - the pose and the outside access. I'm not entirely entirely not sure why it is being stubborn, now. Anyway, here's the config in case that has something to do with it:

 

Spoiler


#define _ARMA_

//ndefs=13
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 DefaultEventhandlers;
class CfgPatches
{
    class GIJoeAWEStriker
    {
        units[] = {"C_aweStriker_01_F"};
        weapons[] = {};
        requiredVersion = 0.1;
        requiredAddons[] = {"A3_Soft_F"};
    };
};
class CfgFactionClasses
{
    class GIJOE
    {
        displayName = "GI*JOE";
        author = "Scot Gilmore";
        icon = "aweStriker\data\ui\faction_gijoe_co.paa"
        priority = 2;
        side = 1;
    };
};
class CfgVehicleClasses
{
    class GIJoe_Ground
    {
        displayName = "GI*JOE Ground";
    };
};
class CfgMovesBasic
{
    class Default;
    class DefaultDie;
    class ManActions
    {
        
        awes_driver = "awes_driver";
    };
};
class CfgMovesMaleSdr: CfgMovesBasic
{
    class States
    {
        class Crew;
        class awes_driver: Crew
        {
            file = "aweStriker\Anims\awes_driver.rtm";
            InterpolateTo[] = {"Unconscious",0.1};
        };
        /* class awes_cargo: Crew
        {
            file = "aweStriker\Anims\awes_cargo.rtm";
            actions = "CargoActions";
            aiming = "aimingNo";
            aimingBody = "aimingNo";
            //legs = "legsNo";
            //head = "headNo";
            disableWeapons = 1;
            interpolationRestart = 1;
            soundEdge[] = {0.45};
            boundingSphere = 2.5;
            canPullTrigger = 0;
            leaning = "crewShake";
            rightHandIKCurve[] = {1};
            leftHandIKCurve[] = {1};
            rightLegIKCurve[] = {1};
            leftLegIKCurve[] = {1};
            ConnectTo[] = {};
            InterpolateTo[] = {"Unconscious",0.1};
        }; */
        
    };
};
class WeaponFireGun;
class WeaponCloudsGun;
class WeaponFireMGun;
class WeaponCloudsMGun;
class CfgVehicles
{
    class LandVehicle;
    class Car: LandVehicle
    {
        class HitPoints;
    };
    class Car_F: Car
    {
        class HitPoints
        {
            class HitLFWheel;
            class HitLF2Wheel;
            class HitRFWheel;
            class HitRF2Wheel;
            class HitGlass1;
            class HitGlass2;
            class HitGlass3;
            class HitGlass4;
            class HitGlass5;
            class HitGlass6;
        };
        class EventHandlers;
        class AnimationSources;
    };
    class aweStriker_01_base_F: Car_F
    {
        //features = "Randomization: Yes, 8 skins, disabled by: this setVariable [""BIS_enableRandomization"",false];                        <br />Specific skin may be set by: this setVariable [""color"",X]; (the number ranges from 0 to 7)                        <br />Camo selections: 1 - the whole body                        <br />Script door sources: None                        <br />Script animations: None                        <br />Executed scripts: \scripts\clock.sqf, \randomize.sqf                         <br />Firing from vehicles: No                        <br />Slingload: Slingloadable                        <br />Cargo proxy indexes: 1 to 3";
        mapSize = 6.18;
        author = "Scot Gilmore";
        _generalMacro = "aweStriker_01_base_F";
        displayName = "AWE Striker";
        class Library
        {
            libTextDesc = "All Weather Environment Striker";
        };
        model     = "aweStriker\aweStriker1";
        picture    = "aweStriker\Data\UI\icon_aweStriker_co.paa";
        Icon    = "aweStriker\Data\UI\map_aweStriker_co.paa";
        cost = 50000;
        slingLoadCargoMemoryPoints[] = {"SlingLoadCargo1","SlingLoadCargo2","SlingLoadCargo3","SlingLoadCargo4"};
        unitInfoType = "RscUnitInfoNoWeapon";
        class Turrets{};
        class HitPoints: HitPoints
        {
            class HitLFWheel: HitLFWheel
            {
                armor = 0.15;
            };
            class HitLF2Wheel: HitLF2Wheel
            {
                armor = 0.15;
            };
            class HitRFWheel: HitRFWheel
            {
                armor = 0.15;
            };
            class HitRF2Wheel: HitRF2Wheel
            {
                armor = 0.15;
            };
            class HitFuel
            {
                armor = 0.14;
                material = -1;
                name = "palivo";
                visual = "";
                passThrough = 1;
            };
            class HitEngine
            {
                armor = 0.5;
                material = -1;
                name = "engine";
                visual = "";
                passThrough = 1;
            };
            class HitGlass1: HitGlass1
            {
                armor = 1;
            };
            class HitGlass2: HitGlass2
            {
                armor = 1;
            };
            class HitGlass3: HitGlass3
            {
                armor = 1;
            };
            class HitGlass4: HitGlass4
            {
                armor = 1;
            };
            class HitGlass5: HitGlass5
            {
                armor = 1;
            };
            class HitGlass6: HitGlass6
            {
                armor = 0.5;
            };
        };
        transportSoldier = 1;
        class TransportItems
        {
            class _xx_FirstAidKit
            {
                name = "FirstAidKit";
                count = 4;
            };
        };
        driverAction = "awes_driver";
        cargoAction[] = {"awes_cargo"};
        armor = 32;
        fireResistance = 5;
        terrainCoef = 2.5;
        turnCoef = 3.1;
        precision = 20;
        brakeDistance = 5;
        acceleration = 12;
        class AnimationSources: AnimationSources
        {
            class Hide
            {
                source = "user";
                animPeriod = 1;
                initPhase = 0;
            };
        };
        
        
        #include "sounds.hpp" //separate file for better work flow
        
        thrustDelay = 0.2;
        brakeIdleSpeed = 1.78;
        maxSpeed = 249;
        fuelCapacity = 45;
        wheelCircumference = 3.0;
        antiRollbarForceCoef = 2.0;
        antiRollbarForceLimit = 10;
        antiRollbarSpeedMin = 10;
        antiRollbarSpeedMax = 200;
        idleRpm = 800;
        redRpm = 6000;
        class complexGearbox
        {
            GearboxRatios[] = {"R1",-6.575,"N",0,"D1",4.827,"D2",2.855,"D3",1.716,"D4",1.073,"D5",0.755,"D6",0.575};
            TransmissionRatios[] = {"High",5.69};
            gearBoxMode = "auto";
            moveOffGear = 1;
            driveString = "D";
            neutralString = "N";
            reverseString = "R";
        };
        simulation = "carx";
        dampersBumpCoef = 0.3;
        differentialType = "rear_limited";
        frontRearSplit = 0.5;
        frontBias = 1.9;
        rearBias = 1.9;
        centreBias = 1.9;
        clutchStrength = 50.0;
        enginePower = 408;
        maxOmega = 600;
        peakTorque = 680;
        dampingRateFullThrottle = 0.1;
        dampingRateZeroThrottleClutchEngaged = 1.0;
        dampingRateZeroThrottleClutchDisengaged = 0.35;
        torqueCurve[] = {{0.0,0.0},{0.185,0.713},{0.35,1.0},{0.5,0.975},{0.75,0.755},{0.85,0.627},{1.0,0.415}};
        changeGearMinEffectivity[] = {0.95,0.15,0.65,0.65,0.65,0.55,0.55,0.55};
        switchTime = 0.21;
        latency = 0.25;
        class Wheels
        {
            class LF
            {
                boneName = "wheel_1_1_damper";
                steering = 1;
                side = "left";
                center = "wheel_1_1_axis";
                boundary = "wheel_1_1_bound";
                width = "0.2";
                mass = 25;
                MOI = 8;
                dampingRate = 0.3;
                maxBrakeTorque = 4000;
                maxHandBrakeTorque = 0;
                suspTravelDirection[] = {0,-1,0};
                suspForceAppPointOffset = "wheel_1_1_axis";
                tireForceAppPointOffset = "wheel_1_1_axis";
                longitudinalStiffnessPerUnitGravity = 100000;
                latStiffX = 2.5;
                latStiffY = 18.0;
                frictionVsSlipGraph[] = {{0,1},{0.5,1},{1,1}};
                maxCompression = 0.2;
                mMaxDroop = 0.1;
                sprungMass = 110;
                springStrength = 4000;
                springDamperRate = 1000;
            };
            class LR
            {
                boneName = "wheel_1_2_damper";
                steering = 0;
                side = "left";
                center = "wheel_1_2_axis";
                boundary = "wheel_1_2_bound";
                width = "0.2";
                mass = 25;
                MOI = 8;
                dampingRate = 0.3;
                maxBrakeTorque = 4000;
                maxHandBrakeTorque = 12000;
                suspTravelDirection[] = {0,-1,0};
                suspForceAppPointOffset = "wheel_1_2_axis";
                tireForceAppPointOffset = "wheel_1_2_axis";
                longitudinalStiffnessPerUnitGravity = 100000;
                latStiffX = 2.5;
                latStiffY = 18.0;
                frictionVsSlipGraph[] = {{0,1},{0.5,1},{1,1}};
                maxCompression = 0.2;
                mMaxDroop = 0.1;
                sprungMass = 120;
                springStrength = 4000;
                springDamperRate = 1000;
            };
            class RF: LF
            {
                boneName = "wheel_2_1_damper";
                side = "right";
                center = "wheel_2_1_axis";
                boundary = "wheel_2_1_bound";
                suspForceAppPointOffset = "wheel_2_1_axis";
                tireForceAppPointOffset = "wheel_2_1_axis";
            };
            class RR: LR
            {
                boneName = "wheel_2_2_damper";
                side = "right";
                center = "wheel_2_2_axis";
                boundary = "wheel_2_2_bound";
                suspForceAppPointOffset = "wheel_2_2_axis";
                tireForceAppPointOffset = "wheel_2_2_axis";
            };
        };
        class RenderTargets
        {
            class LeftMirror
            {
                renderTarget = "rendertarget0";
                class CameraView1
                {
                    pointPosition = "PIP0_pos";
                    pointDirection = "PIP0_dir";
                    renderQuality = 2;
                    renderVisionMode = 0;
                    fov = 0.6;
                };
            };
            class RightMirror
            {
                renderTarget = "rendertarget2";
                class CameraView1
                {
                    pointPosition = "PIP2_pos";
                    pointDirection = "PIP2_dir";
                    renderQuality = 2;
                    renderVisionMode = 0;
                    fov = 0.6;
                };
            };
            class IntMirror
            {
                renderTarget = "rendertarget1";
                class CameraView1
                {
                    pointPosition = "PIP1_pos";
                    pointDirection = "PIP1_dir";
                    renderQuality = 2;
                    renderVisionMode = 0;
                    fov = 0.6;
                };
            };
        };
        class Reflectors
        {
            class Left
            {
                color[] = {1900,1800,1700};
                ambient[] = {5,5,5};
                position = "light_L";
                direction = "light_L_end";
                hitpoint = "light_L";
                selection = "light_L";
                size = 1;
                innerAngle = 100;
                outerAngle = 179;
                coneFadeCoef = 10;
                intensity = 1;
                useFlare = 1;
                dayLight = 0;
                flareSize = 1.0;
                class Attenuation
                {
                    start = 1.0;
                    constant = 0;
                    linear = 0;
                    quadratic = 0.25;
                    hardLimitStart = 60;
                    hardLimitEnd = 120;
                };
            };
            class Right: Left
            {
                position = "light_R";
                direction = "light_R_end";
                hitpoint = "light_R";
                selection = "light_R";
            };
        };
        aggregateReflectors[] = {{"Left","Right"}};
        class Damage
        {
            tex[] = {};
            mat[] = {"A3\soft_f_gamma\SUV_01\Data\SUV_01_ext.rvmat","A3\soft_f_gamma\SUV_01\Data\SUV_01_ext_damage.rvmat","A3\soft_f_gamma\SUV_01\Data\SUV_01_ext_destruct.rvmat","A3\soft_f_gamma\SUV_01\Data\SUV_01_int_base.rvmat","A3\soft_f_gamma\SUV_01\Data\SUV_01_int_base_damage.rvmat","A3\soft_f_gamma\SUV_01\Data\SUV_01_int_base_destruct.rvmat","A3\soft_f_gamma\SUV_01\Data\SUV_01_int_board.rvmat","A3\soft_f_gamma\SUV_01\Data\SUV_01_int_board_damage.rvmat","A3\soft_f_gamma\SUV_01\Data\SUV_01_int_board_destruct.rvmat","A3\soft_f_gamma\SUV_01\Data\SUV_01_int_base_VP.rvmat","A3\soft_f_gamma\SUV_01\Data\SUV_01_int_base_damage.rvmat","A3\soft_f_gamma\SUV_01\Data\SUV_01_int_base_destruct.rvmat","A3\soft_f_gamma\SUV_01\Data\SUV_01_int_board_VP.rvmat","A3\soft_f_gamma\SUV_01\Data\SUV_01_int_board_damage.rvmat","A3\soft_f_gamma\SUV_01\Data\SUV_01_int_board_destruct.rvmat","a3\data_f\glass_veh.rvmat","a3\data_f\Glass_veh_damage.rvmat","a3\data_f\Glass_veh_damage.rvmat","a3\data_f\Glass_veh_int.rvmat","a3\data_f\Glass_veh_damage.rvmat","a3\data_f\Glass_veh_damage.rvmat"};
        };
        hiddenSelections[] = {"Camo1"};
        class Exhausts
        {
            class Exhaust1
            {
                position = "exhaust_1";
                direction = "exhaust_1_dir";
                effect = "ExhaustsEffect";
            };
            class Exhaust2
            {
                position = "exhaust_2";
                direction = "exhaust_2_dir";
                effect = "ExhaustsEffect";
            };
        };
        /* class textureSources
        {
            class fpg
            {
                displayName = "Faceplant Games, Yo";
                author = "Scot Gilmore";
                textures[] = {"aweStriker\data\awes_ext_base01_co.paa"};
                materials[] ={"aweStriker\data\awes_ext_02.rvmat"};
                factions[] = {};
            };
            class gray
            {
                displayName = "Gray";
                author = "Scot Gilmore";
                textures[] = {"aweStriker\data\awes_ext_base02_co.paa"};
                factions[] = {};
            };
            class red
            {
                displayName = "Red";
                author = "Scot Gilmore";
                textures[] = {"aweStriker\data\awes_ext_base03_co.paa"};
                factions[] = {};
            };
            class blue
            {
                displayName = "Blue";
                author = "Scot Gilmore";
                textures[] = {"aweStriker\data\awes_ext_base04_co.paa"};
                materials[] ={"aweStriker\data\awes_ext_03.rvmat"};
                factions[] = {};
            };
            class yellow
            {
                displayName = "Yellow";
                author = "Scot Gilmore";
                textures[] = {"aweStriker\data\awes_ext_base05_co.paa"};
                factions[] = {};
            };
            class white
            {
                displayName = "White";
                author = "Scot Gilmore";
                textures[] = {"aweStriker\data\awes_ext_base06_co.paa"};
                factions[] = {};
            };
            class black
            {
                displayName = "Black";
                author = "Scot Gilmore";
                textures[] = {"aweStriker\data\awes_ext_base07_co.paa"};
                materials[] ={"aweStriker\data\awes_ext_02.rvmat"};
                factions[] = {};
            };
            class blkItl
            {
                displayName = "Italian colors on Black";
                author = "Scot Gilmore";
                textures[] = {"aweStriker\data\awes_ext_base08_co.paa"};
                factions[] = {};
            };
        };
        textureList[] = {"FPG",1,"Gray",1,"Red",1,"Blue",1,"Yellow",1,"White",1,"Black",1,"BlkItl",1};
         */
        class MFD
        {
            class AirplaneHUD
            {
                topLeft = "HUD_top_left";
                topRight = "HUD_top_right";
                bottomLeft = "HUD_bottom_left";
                borderLeft = 0;
                borderRight = 0;
                borderTop = 0;
                borderBottom = 0.0;
                color[] = {0.15,0.15,1.0,1.0};
                enableParallax = 0;
                class Bones{};
                class Draw
                {
                    color[] = {0.07,0.67,0.745};
                    alpha = 1;
                    class ClockHour
                    {
                        type = "text";
                        source = "ClockHour";
                        sourceScale = 12;
                        align = "right";
                        scale = 2;
                        pos[] = {{0.05,0.0},1};
                        right[] = {{0.4,0.0},1};
                        down[] = {{0.05,1.0},1};
                    };
                    class ClockMinute
                    {
                        type = "text";
                        source = "ClockMinute";
                        sourceScale = 60;
                        align = "right";
                        scale = 2;
                        pos[] = {{0.55,0.0},1};
                        right[] = {{0.9,0.0},1};
                        down[] = {{0.55,1.0},1};
                    };
                };
            };
        };
    };
    class aweStriker1: aweStriker_01_base_F
    {
        author = "Scot Gilmore";
        _generalMacro = "aweStriker1";
        scope = 2;
        crew = "C_man_1";
        typicalCargo[] = {"C_man_1"};
        side = 1;
        faction = "GIJOE";
        displayName = "** AWE Striker **";
        vehicleClass = "GIJoe_Ground";
        accuracy = 1.25;
        hiddenSelectionsTextures[] = {"aweStriker\data\awes_ext_W_co.paa"};
        class EventHandlers: EventHandlers
        {
            init = "if (local (_this select 0)) then {[(_this select 0), """", [], false] call bis_fnc_initVehicle;};";
        };
    };
    /* class aweStriker_01_base_blkItl_F: C_aweStriker_01_F
    {
        displayName = "Italian colors on black";
        scope = 1;
        scopeCurator = 0;
        author = "Scot Gilmore";
        textureList[] = {"BlkItl",1};
    };
     */
};

 

I humbly ask for your help, folks. Maybe I just need a second pair of eyes for the moment, or maybe I messed up big. Also, please excuse the scripting, y'all. I know it needs tidying up, and it will get it - eventually.
 

Share this post


Link to post
Share on other sites

Does your cargo proxy have a \cargo ending in the model?
its the same for driver/gunner proxies, it needs it to know what kind of proxy it should be.

 

vgLFY7o.png

  • Like 1

Share this post


Link to post
Share on other sites

I followed Abs' video tutorial, and just renamed it cargo. I get it that it might not take if you don't end it with cargo, but in the video he just replaces the whole directory path with cargo. I did that for the driver proxy (renamed it driver), which worked. So... I just still don't understand why the driver proxy is working but the cargo proxy isn't.

Share this post


Link to post
Share on other sites
19 hours ago, Whitefame said:

Does your cargo proxy have a \cargo ending in the model?
its the same for driver/gunner proxies, it needs it to know what kind of proxy it should be.

 

vgLFY7o.png

These are vanilla paths. Does this work with custom paths that point to custom poses?
Could it be a problem with the config? I'm thinking that since the pose is extracted correctly in OB, then the RTM is not the problem.

Share this post


Link to post
Share on other sites

the path is irrelevant, at least for the ingame functionality. Its only the name and the number.

  • Like 1

Share this post


Link to post
Share on other sites

That's what I thunk, but I had to be sure. LOL
So the problem persists...

Share this post


Link to post
Share on other sites

I found the solution for the passenger pose; it was a line of the config, in class ManActions, that was accidentally still commented. I can't remember why I commented it, though.

Now that I've been able to move it along, I am not too happy with the poses. They are suffering from deformation because of me adjusting them in OB. Is there a way to make bone sections rotate around their pivot points and obey the hierarchy, when editing? Currently, they are only rotating on the selection center, which means I have to reconnect the joints. Apparently, I missed in several places. Note the passenger's right arm, trigger finger, and left forearm, as well as the driver's wrists.

Wonky bone structure

Share this post


Link to post
Share on other sites

Anyone know what to do if you jack up the default pose when creating a new one? I spent a few hours getting a pose just right, only to finally realize that it was the initial T-pose frame. Any way to re-import the initial pose without losing the new one?

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

×