TeRp/Sandbox – User
Article: How to animate a model.
Introduction
To animate a model, you have to make use of both, the cfgModels and cfgSkeletons class.
The cfgSkeletons class defines the bones of a vehicle. Bones are, more or less, the animated selections of a model.
The cfgModels class is an extended version of the OFP cfgModels class. It defines the selections of a model which you want to animate or use with the setObjectTexture command, but since ArmA, you have to put everything related to animate your model in here.
model.cfg
According to the article about Model Config, the cfgSkeletons and cfgModels class should be part of a model.cfg file which is located in the addon pbo file. However, this does not seems to work (I assume the model.cfg files will be put into the model p3d file during binarization). For now, you can add the cfgSkeletons and cfgModels class to your config.cpp which works like a charm.
cfgSkeletons
The cfgSkeletons class defines, as mentioned before, the bones (= animated selections) of a vehicle.
Each skeleton is a subclass within the cfgSkeletons class, consisting of three parameters:
Parameter | Description |
---|---|
isDiscrete | currently unknown, set to 1. |
skeletonInherit | inherit bones from given class. |
skeletonBones[] | define your own bones here. |
Defining a bone
Bones are defined in the skeletonBones[]-array which is made of a list of unsorted bones. Each bone is the name of a selection you want to animate.
A single bone
A bone is defined by using two strings:
- "bone",""
You may define multiple bones by strining them togeter.
Example
skeletonBones[]= { "bone1","", //defines bone1 "bone2","" //defines bone2 };
Linked bones
The second argument (empty in the example above) is used for linking two bones:
- "bone1","bone2"
Linking is used to make the animation of "bone1" depending on the movement of "bone2". If you e.g. have a turret, you have to make use of linking here, because the up and down movement of the turrets weapon is typically influenced by left and right movement of the turret:
Example
skeletonBones[]= { "turret_x","", //defines bone turret_x "turret_y","turret_x" //defines bone turret_y and makes it linked to bone turret_x };
Attention:
You can not link more than two bones in a row!
If you do something like
"bone1","bone2","bone3"
this will result in an error, as Armed Assault interprets this as
- defining "bone1" which is linked to "bone2"
- defining "bone3", which misses the second argument.
However, it should be possible to use a syntax like this (not tested yet):
skeletonBones[]= { "bone1","bone2", //defines bone "bone1" and makes it linked to "bone2" "bone2","bone3", //defines bone "bone2" and makes it linked to "bone3" "bone3","" //defines bone "bone3". };
In conclusion, "bone1" is linked to "bone2", which is linked to "bone3".
So "bone1" should be depending on the movement of both, "bone2" and "bone3".
cfgSkeletons Example
class BWMod_Tiger_Skeleton { isDiscrete=1; skeletonInherit=""; skeletonBones[]= { "mainRotor","", "tailRotor","", "turret_RMK_x","", "turret_RMK_y","turret_RMK_x", }; };
cfgModels
The cfgModels class is used to declare the selections of a model you want to animate or access via the setObjectTexture command. Since ArmA, the cfgModels class has been extended an is now used to define all animations of a model.
Each of your model is a subclass inside of the cfgModels class and the models filename is used as the name of your class (without .p3d). E.g. your model p3d is named "myVehicle.p3d" your class is "class myvehicle {}".