Printable Version of Topic

Click here to view this topic in its original format

Armed Assault Info Forums _ Addons - Works in Progress _ Rigging tank models for ArmA 2

Posted by: Carnaxus Mar 29 2014, 00:32

I have searched no less than six forums, Google, and Youtube for nearly a week now with no success. I am trying to add some new tanks to ArmA 2. I cannot find any information anywhere about how to set up the bones and/or attachment points. Does anyone here know of a tutorial that will explain this?

Posted by: D@V£ Mar 29 2014, 14:52

Download one of the sample model packages https://community.bistudio.com/wiki/Arma_2_Sample_Models and look at the tanks in that. It's probably easiest to name the selections in Oxygen.

If you're not familar with the idea of naming selections, have a read of http://ofp.gamepark.cz/_hosted/brsseb/tutorials/lesson2/lesson2_d.htm - it's for OFP, but the basic idea is the same. You'll also need to define the axis for moving parts in the memory LOD (again, if you're confused, look at the sample models - they explain it better than I ever could tongue.gif )

For a basic tank, you'll want a model.cfg that looks like this:

CODE
class CfgSkeletons
{
    class Vehicle;
    class TankBase: Vehicle
    {
        skeletonInherit="Vehicle";
        skeletonBones[]=
        {
            "kolL1","",
            "kolL2","",
            "kolL3","",
            "kolL4","",
            "kolL5","",
            "kolL6","",
            "kolL7","",
            "kolL8","",
            "kolP1","",
            "kolP2","",
            "kolP3","",
            "kolP4","",
            "kolP5","",
            "kolP6","",
            "kolP7","",
            "kolP8","",
            "podkoloL1","",
            "podkoloL2","",
            "podkoloL3","",
            "podkoloL4","",
            "podkoloL5","",
            "podkoloL6","",
            "podkoloL7","",
            "podkoloL8","",
            "podkoloP1","",
            "podkoloP2","",
            "podkoloP3","",
            "podkoloP4","",
            "podkoloP5","",
            "podkoloP6","",
            "podkoloP7","",
            "podkoloP8","",
            "koloL1","podkoloL1",
            "koloL2","podkoloL2",
            "koloL3","podkoloL3",
            "koloL4","podkoloL4",
            "koloL5","podkoloL5",
            "koloL6","podkoloL6",
            "koloL7","podkoloL7",
            "koloL8","podkoloL8",
            "koloP1","podkoloP1",
            "koloP2","podkoloP2",
            "koloP3","podkoloP3",
            "koloP4","podkoloP4",
            "koloP5","podkoloP5",
            "koloP6","podkoloP6",
            "koloP7","podkoloP7",
            "koloP8","podkoloP8",
            "ukaz_rychlo","",
            "ukaz_rychlo2","",
            "ukaz_rpm","",
            "ukaz_radar","",
            "hodinova","",
            "minutova","",
            "kompas","",
            "ukazsmer","",
            "damageHide","",
            "podkoloL1_hide","podkoloL1",
            "podkoloL2_hide","podkoloL2",
            "podkoloL3_hide","podkoloL3",
            "podkoloL4_hide","podkoloL4",
            "podkoloL5_hide","podkoloL5",
            "podkoloL6_hide","podkoloL6",
            "podkoloL7_hide","podkoloL7",
            "podkoloL8_hide","podkoloL8",
            "podkoloP1_hide","podkoloP1",
            "podkoloP2_hide","podkoloP2",
            "podkoloP3_hide","podkoloP3",
            "podkoloP4_hide","podkoloP4",
            "podkoloP5_hide","podkoloP5",
            "podkoloP6_hide","podkoloP6",
            "podkoloP7_hide","podkoloP7",
            "podkoloP8_hide","podkoloP8"
        };
    };
    class Tank: TankBase
    {
        skeletonInherit="TankBase";
        skeletonBones[]=
        {
            "OtocVez","",
            "OtocHlaven","OtocVez",
            "OtocVelitele","OtocVez",
            "OtocHlavenVelitele","OtocVelitele",
            "poklop_driver","",
            "poklop_commander","OtocVelitele",
            "poklop_gunner","OtocVez",
            "damageVez","OtocVez"
        };
    };
};
class Rotation;
class CfgModels
{
    class Vehicle;
    class Tank: Vehicle
    {
        sectionsInherit="Vehicle";
        sections[]=
        {
            "zadni svetlo",
            "brzdove svetlo",
            "PasOffsetP",
            "PasOffsetL",
            "telo",
            "pas_L",
            "pas_P",
            "motor",
            "vez",
            "zbran",
            "clan",
            "clan_sign",
            "loader_turret"
        };
        skeletonName="Tank";
        class Animations
        {
            // destruct BASE START
            class MainTurret_destructY
            {
                type="rotationY";
                source="damage"; //damage //test
                selection="OtocVez";
                axis="osaveze";
                animPeriod=0;
                minValue=0.99;
                maxValue=1;
                angle0=0;
                angle1="rad 15";
            };

            class MainGun_destructX:MainTurret_destructY
            {
                type="rotationX";
                selection="OtocHlaven";
                axis="osahlavne";
                angle1="rad -10";
            };
            class MainGun_destructY:MainGun_destructX
            {
                type="rotationY";
                angle1="rad +5";
            };
            class MainGun_destructZ:MainGun_destructX
            {
                type="rotationZ";
                angle1="rad +5";
            };

            class OtocVelitele_destruct:MainTurret_destructY
            {
                selection="OtocVelitele";
                type="rotation";
                axis="osavelitele";
                angle1="rad -25";
            };

            class OtocHlavenVelitele_destructX:MainTurret_destructY
            {
                selection="OtocHlavenVelitele";
                type="rotation";
                axis="OsaHlavneVelitele";
                angle1="rad -20";
            };

            class OtocHlavenVelitele_destructY:OtocHlavenVelitele_destructX
            {
                type="rotationY";
                angle1="rad +5";
            };
            class OtocHlavenVelitele_destructZ:OtocHlavenVelitele_destructX
            {
                type="rotationZ";
                angle1="rad -3";
            };


            // destruct BASE END

            class damageHide
            {
                type="hide";
                source="damage";
                selection="damageHide";
            };
            class HatchDriver
            {
                type="rotation";
                source="hatchDriver";
                selection="poklop_driver";
                axis="osa_poklop_driver";
                animPeriod=0;
                angle0=0;
                angle1="rad -100";
            };
            class IndicatorSpeed
            {
                type="rotation";
                source="speed";
                selection="ukaz_rychlo";
                axis="osa_rychlo";
                memory=1;
                animPeriod=0;
                minValue=0;
                maxValue=16.670000;
                angle0=0;
                angle1="rad -240";
            };
            class IndicatorSpeed2
            {
                type="rotation";
                source="speed";
                selection="ukaz_rychlo2";
                axis="osa_rychlo2";
                memory=1;
                animPeriod=0;
                minValue=0;
                maxValue=16.670000;
                angle0=0;
                angle1="rad -240";
            };
            class IndicatorRPM
            {
                type="rotation";
                source="rpm";
                selection="ukaz_rpm";
                axis="osa_rpm";
                memory=1;
                animPeriod=0;
                minValue=0;
                maxValue=1;
                angle0=0;
                angle1="rad -340";
            };
            class Radar
            {
                type="rotation";
                source="time";
                selection="ukaz_radar";
                axis="osa_radar";
                memory=1;
                minValue=0;
                maxValue=2;
                sourceAddress="loop";
                angle0=0;
                angle1="rad 360";
            };
            class IndicatorTurret
            {
                type="rotation";
                source="turretDir";
                selection="ukazsmer";
                axis="osa_ukazsmer";
                memory=1;
                animPeriod=0;
                minValue=0;
                maxValue=6.283185;
                angle0=0;
                angle1="rad 360";
            };
            class WatchHour
            {
                type="rotation";
                source="clockHour";
                selection="hodinova";
                axis="osa_time";
                memory=1;
                animPeriod=0;
                angle0=0;
                angle1="rad 360";
            };
            class WatchMinute
            {
                type="rotation";
                source="clockMinute";
                selection="minutova";
                axis="osa_time";
                memory=1;
                animPeriod=0;
                angle0=0;
                angle1="rad 360";
            };
            class Wheel_kolL1
            {
                type="rotationX";
                source="wheelL";
                selection="kolL1";
                axis="";
                memory=1;
                animPeriod=0;
                angle0=0;
                angle1="rad -360";
                sourceAddress="loop";
            };
            class Wheel_koloL1: Wheel_kolL1
            {
                selection="koloL1";
            };
            class Wheel_podkoloL1
            {
                type="translationY";
                source="damper";
                selection="podkoloL1";
                axis="";
                memory=1;
                animPeriod=0;
                minValue=-1000;
                maxValue=1000;
            };
            class Wheel_kolP1: Wheel_kolL1
            {
                source="wheelR";
                selection="kolP1";
            };
            class Wheel_koloP1: Wheel_koloL1
            {
                source="wheelR";
                selection="koloP1";
            };
            class Wheel_podkoloP1: Wheel_podkoloL1
            {
                selection="podkoloP1";
            };
            class Wheel_kolL2: Wheel_kolL1
            {
                selection="kolL2";
            };
            class Wheel_kolL3: Wheel_kolL1
            {
                selection="kolL3";
            };
            class Wheel_kolL4: Wheel_kolL1
            {
                selection="kolL4";
            };
            class Wheel_kolL5: Wheel_kolL1
            {
                selection="kolL5";
            };
            class Wheel_kolL6: Wheel_kolL1
            {
                selection="kolL6";
            };
            class Wheel_kolL7: Wheel_kolL1
            {
                selection="kolL7";
            };
            class Wheel_kolL8: Wheel_kolL1
            {
                selection="kolL8";
            };
            class Wheel_kolP2: Wheel_kolP1
            {
                selection="kolP2";
            };
            class Wheel_kolP3: Wheel_kolP1
            {
                selection="kolP3";
            };
            class Wheel_kolP4: Wheel_kolP1
            {
                selection="kolP4";
            };
            class Wheel_kolP5: Wheel_kolP1
            {
                selection="kolP5";
            };
            class Wheel_kolP6: Wheel_kolP1
            {
                selection="kolP6";
            };
            class Wheel_kolP7: Wheel_kolP1
            {
                selection="kolP7";
            };
            class Wheel_kolP8: Wheel_kolP1
            {
                selection="kolP8";
            };
            class Wheel_koloL2: Wheel_koloL1
            {
                selection="koloL2";
            };
            class Wheel_koloL3: Wheel_koloL1
            {
                selection="koloL3";
            };
            class Wheel_koloL4: Wheel_koloL1
            {
                selection="koloL4";
            };
            class Wheel_koloL5: Wheel_koloL1
            {
                selection="koloL5";
            };
            class Wheel_koloL6: Wheel_koloL1
            {
                selection="koloL6";
            };
            class Wheel_koloL7: Wheel_koloL1
            {
                selection="koloL7";
            };
            class Wheel_koloL8: Wheel_koloL1
            {
                selection="koloL8";
            };
            class Wheel_koloP2: Wheel_koloP1
            {
                selection="koloP2";
            };
            class Wheel_koloP3: Wheel_koloP1
            {
                selection="koloP3";
            };
            class Wheel_koloP4: Wheel_koloP1
            {
                selection="koloP4";
            };
            class Wheel_koloP5: Wheel_koloP1
            {
                selection="koloP5";
            };
            class Wheel_koloP6: Wheel_koloP1
            {
                selection="koloP6";
            };
            class Wheel_koloP7: Wheel_koloP1
            {
                selection="koloP7";
            };
            class Wheel_koloP8: Wheel_koloP1
            {
                selection="koloP8";
            };
            class Wheel_podkoloL2: Wheel_podkoloL1
            {
                selection="podkoloL2";
            };
            class Wheel_podkoloL3: Wheel_podkoloL1
            {
                selection="podkoloL3";
            };
            class Wheel_podkoloL4: Wheel_podkoloL1
            {
                selection="podkoloL4";
            };
            class Wheel_podkoloL5: Wheel_podkoloL1
            {
                selection="podkoloL5";
            };
            class Wheel_podkoloL6: Wheel_podkoloL1
            {
                selection="podkoloL6";
            };
            class Wheel_podkoloL7: Wheel_podkoloL1
            {
                selection="podkoloL7";
            };
            class Wheel_podkoloL8: Wheel_podkoloL1
            {
                selection="podkoloL8";
            };
            class Wheel_podkoloP2: Wheel_podkoloP1
            {
                selection="podkoloP2";
            };
            class Wheel_podkoloP3: Wheel_podkoloP1
            {
                selection="podkoloP3";
            };
            class Wheel_podkoloP4: Wheel_podkoloP1
            {
                selection="podkoloP4";
            };
            class Wheel_podkoloP5: Wheel_podkoloP1
            {
                selection="podkoloP5";
            };
            class Wheel_podkoloP6: Wheel_podkoloP1
            {
                selection="podkoloP6";
            };
            class Wheel_podkoloP7: Wheel_podkoloP1
            {
                selection="podkoloP7";
            };
            class Wheel_podkoloP8: Wheel_podkoloP1
            {
                selection="podkoloP8";
            };
            class podkoloL1_hide_damage: damageHide
            {
                selection="podkoloL1_hide";
            };
            class podkoloL2_hide_damage: damageHide
            {
                selection="podkoloL2_hide";
            };
            class podkoloL3_hide_damage: damageHide
            {
                selection="podkoloL3_hide";
            };
            class podkoloL4_hide_damage: damageHide
            {
                selection="podkoloL4_hide";
            };
            class podkoloL5_hide_damage: damageHide
            {
                selection="podkoloL5_hide";
            };
            class podkoloL6_hide_damage: damageHide
            {
                selection="podkoloL6_hide";
            };
            class podkoloL7_hide_damage: damageHide
            {
                selection="podkoloL7_hide";
            };
            class podkoloL8_hide_damage: damageHide
            {
                selection="podkoloL8_hide";
            };
            class podkoloP1_hide_damage: damageHide
            {
                selection="podkoloP1_hide";
            };
            class podkoloP2_hide_damage: damageHide
            {
                selection="podkoloP2_hide";
            };
            class podkoloP3_hide_damage: damageHide
            {
                selection="podkoloP3_hide";
            };
            class podkoloP4_hide_damage: damageHide
            {
                selection="podkoloP4_hide";
            };
            class podkoloP5_hide_damage: damageHide
            {
                selection="podkoloP5_hide";
            };
            class podkoloP6_hide_damage: damageHide
            {
                selection="podkoloP6_hide";
            };
            class podkoloP7_hide_damage: damageHide
            {
                selection="podkoloP7_hide";
            };
            class podkoloP8_hide_damage: damageHide
            {
                selection="podkoloP8_hide";
            };
            class damageVez: damageHide
            {
                selection="damageVez";
            };
        };
    };
    class mymodelname: Tank {};
};


(Obviously, change "mymodelname" to the name of your model. Ie, if you're named your model "Mytank.p3d", you'll want to have "class Mytank: Tank {};" for that line)

Posted by: Carnaxus Apr 1 2014, 03:41

So I don't have to add a crapton of bones in 3Ds Max?

Posted by: D@V£ Apr 1 2014, 10:24

There's probably is a way you can do it in 3Ds Max, but Oxygen's made to do this sort of thing, so... tongue.gif

Posted by: Carnaxus Apr 8 2014, 02:16

Good. That's all I really needed to know. Thanks!

Posted by: Carnaxus Apr 11 2014, 01:15

Actually. Is there any way to make an ArmA 2 tank not able to neutral steer? Like instead of spinning in place it skid-steers?

Posted by: D@V£ Apr 11 2014, 11:44

I don't think so. I'm pretty sure that sort of thing is hardcoded.

(You might be able to emulate the effect by using the wheeled base class and having a very tight turning circle, but IIRC you can't get track textures working then. Though I may be thinking of ArmA.1, there. Iron Front has working half-tracks using the wheeled model, and I don't think they changed the engine that much from ArmA.2)

Posted by: Carnaxus Apr 13 2014, 05:12

QUOTE(D@V£ @ Apr 11 2014, 02:44) *
I don't think so. I'm pretty sure that sort of thing is hardcoded.

(You might be able to emulate the effect by using the wheeled base class and having a very tight turning circle, but IIRC you can't get track textures working then. Though I may be thinking of ArmA.1, there. Iron Front has working half-tracks using the wheeled model, and I don't think they changed the engine that much from ArmA.2)


Either I44 or Hell in the Pacific also have working halftracks that drive as "trucks." I'm trying to bring over a bunch of tanks from the game World of Tanks. My intention was to convert every single one (eventually), but I want them to drive correctly. I wonder if I can trick the game engine into putting forward drive onto the track that would normally be going "backwards" during a neutral steer, thereby countering the reverse drive, for those tanks that aren't supposed to have that ability?

Also, something else I just thought of. How hard is it to set up a non-missile-based artillery unit to use the artillery computer system?

Posted by: Carnaxus Apr 19 2014, 00:08

*nudge*

Posted by: D@V£ Apr 19 2014, 11:40

Please don't bump threads. If people don't know the answer, asking repeatedly isn't going to help.

Posted by: Carnaxus Apr 26 2014, 07:24

Probably should have mentioned I was only doing one bump then was gonna let it die, though I really really do hope someone out there has an answer. Last post barring anyone knowing the answer.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)