CfgMoves Config Reference: Difference between revisions
(leftHandIKCurve) |
|||
Line 539: | Line 539: | ||
leftHandIKEnd = 0; | leftHandIKEnd = 0; | ||
==leftHandIKCurve== | |||
[[TokenNameValueTypes|Array]]<br> | |||
'''Description:''' | |||
As the name suggests, this array describes the curve controlling [http://en.wikipedia.org/wiki/Forward_kinematics FK]/[http://en.wikipedia.org/wiki/Inverse_kinematics IK] blending on the left arm. | |||
Every pair of values describe a 2D point, with the first number representing ''time'' (horizontal) and the second being the ''weight'' (vertical). | |||
''Time'' ranges from 0-1, where 0 is animation start, 0.5 is half way, and 1 the end. ''Weight'' also ranges from 0-1, where 0 means animation is taken from RTM file (FK) and IK is disabled, 0.6 meaning a 40% blend of FK and 60% IK, and 1 is 100% IK. | |||
Let me interpret the last example below (the long one). The curve has 4 points [0, 1], [0.05, 0], [0.95, 0] and [1, 1]. When the animation starts playing, the IK takes full effect, but is gradually disabled by point #2. It stays disabled until point #4 towards the end, when it's ''weight'' starts climbing again. At the end, at point #4, the IK is fully on again, overriding all FK. | |||
leftHandIKCurve[] = {}; //IK OFF. | |||
leftHandIKCurve[] = {1}; //IK fully ON. | |||
leftHandIKCurve[] = {0.1, 1, 0.15, 0}; //IK fully ON one-tenth into the animation, but disabled soon afterwards. | |||
leftHandIKCurve[] = {0, 1, 0.05, 0, 0.95, 0, 1, 1}; //IK ON at start, but soon disabled. Re-enabled towards the end. | |||
==legs== | ==legs== |
Revision as of 16:17, 5 December 2012
Introduction
CfgMoves is the nerve center of all skeletal character animation. The animation of human characters that is - not the simple, procedural animation of objects (e.g. raising/lowering a barrier, opening/closing of an aircraft canopy). CfgMoves has two major sections: Actions and States.
Actions
It is where the character animation state machine is set up. It's a bit confusing that BIS called the animation state handler "Actions", and the actions are called "States", but this is what it is. What this thing does, is configure all the possible animation states (e.g. standing upright with a rifle, kneeling with a pistol, parachuting), and define for each of them which animations can be played in and from that given state. For instance, from the kneeling with a pistol state (PistolKneelActions), you cannot directly go into crawling forward on your stomach with a rifle (even if you have a rifle). First you would have to holster the pistol and grab your rifle, then lie down, or viceversa. Similarly, if you're prone (whether unarmed, or armed with a pistol or rifle), you cannot salute - first you'd have to stand up. What animation can or cannot be played, in what situation, is set up here in Actions. Player input (key presses, clicks) are then directed to this state machine, which interprets them and decides what action/animation the avatar will perform next, according to these rules. Same rules apply to AI players.
States
In this section, each animation file (RTM) has a corresponding entry. Animation properties, such as playback speed, interpolation rules, blending times, collision shapes to use during animation, etc.., are configured here. These animations are the ones referenced in the Actions section above. While Actions represents a complex graph, States is more like a list of items, even though some rules are also set up here (see the ConnectTo[] and InterpolateTo[] properties).
CfgGestures is similar to States, it holds the bone-masked or layered animations introduced in ArmAII. Welcome to reloading-while-running.
A
access
Integer
Description: See CfgVehicles_Config_Reference#access
access = 3;
actions
String
Description:
actions = "SitActions";
aiming
String
Description:
aiming = "aimingPistol";
aimingDefault[]
Array
Description:
aimingDefault[] = {};
aimingNo[]
Array
Description:
aimingNo[] = {};
aimPrecision
Float
Description:
aimPrecision = 0.3;
B
binocOff
String
Description:
binocOff = "AmovPpneMstpSrasWrflDnon";
binocOn
String
Description:
binocOn = "AwopPpneMstpSoptWbinDnon_rfl";
boundingSphere
Float
Description:
boundingSphere = 1.5;
C
CanNotMove
String
Description:
CanNotMove = "AmovPpneMstpSrasWrflDnon";
canPullTrigger
Boolean
Description:
canPullTrigger = 1;
Civil
String
Description:
Civil = "AmovPercMstpSnonWnonDnon";
CivilLying
String
Description:
CivilLying = "AmovPpneMstpSnonWnonDnon";
collisionGeomCompPattern[]
Array
Description:
collisionGeomCompPattern[] = {1,3,6};
collisionShape
String
Description:
collisionShape = "ca\Anims\Characters\data\Geom\Sdr\Sstanistat_safe_geom.p3d";
collisionShapeSafe
String
Description:
collisionShapeSafe = "ca\Anims\Characters\data\Geom\Sdr\sbeh45l_safe_geom.p3d";
collisionVertexPattern[]
Array
Description:
collisionVertexPattern[] = {"1a","2a","3a","4a","5a","6a","7a","8a","1c","2c"};
Combat
String
Description:
Combat = "AmovPknlMstpSrasWrflDnon";
connectAs
Float
Description:
connectAs = "";
connectFrom[]
Array
Description:
connectFrom[] = {"TestSurrender",0.9,"AdthPercMstpSlowWrflDnon_1",0.9};
connectTo[]
Array
Description:
connectTo[] = {"TestSurrender",0.9,"AdthPercMstpSlowWrflDnon_1",0.9};
Crouch
String
Description:
Crouch = "AmovPknlMstpSnonWnonDnon";
D
default
String
Description:
default = "LadderRifleStatic";
die
String
Description:
die = "DeadState";
disableWeapons
Boolean
Description:
disableWeapons = 1;
disableWeaponsLong
Boolean
Description:
disableWeaponsLong = 1;
down
String
Description:
down = "LadderRifleDownLoop";
duty
Float
Description:
duty = -1;
E
enableAutoActions
Boolean
Description:
enableAutoActions = 1;
enableBinocular
Boolean
Description:
enableBinocular = 1;
enableMissile
Boolean
Description:
enableMissile = 1;
enableOptics
Boolean
Description:
enableOptics = 1;
equivalentTo
String
Description:
equivalentTo = "AmovPsitMstpSlowWrflDnon";
EvasiveBack
String
Description:
EvasiveBack = "AmovPercMrunSlowWrflDf_AmovPercMevaSrasWrflDb";
EvasiveForward
String
Description:
EvasiveForward = "AmovPercMevaSlowWlnrDf";
EvasiveLeft
String
Description:
EvasiveLeft = "AmovPercMrunSlowWrflDf_AmovPercMevaSrasWrflDl";
EvasiveRight
String
Description:
EvasiveRight = "AmovPpneMstpSrasWrflDnon_AmovPpneMevaSlowWrflDr";
F
fastB
String
Description:
fastB = "AswmPercMstpSnonWnonDnon";
fastF
String
Description:
fastF = "AswmPercMsprSnonWnonDf";
fastL
String
Description:
fastL = "AswmPercMstpSnonWnonDnon";
fastLB
String
Description:
fastLB = "AswmPercMstpSnonWnonDnon";
fastLF
String
Description:
fastLF = "AswmPercMsprSnonWnonDf";
fastR
String
Description:
fastR = "AswmPercMstpSnonWnonDnon";
fastRB
String
Description:
fastRB = "AswmPercMstpSnonWnonDnon";
fastRF
String
Description:
fastRF = "AswmPercMsprSnonWnonDf";
file
String
Description:
file = "\ca\Anims\Characters\data\Anim\Wmn\cts\erc\stp\non\non\ActsPercMstpSnonWnonDnon_MarianQ_shot5.rtm";
FireNotPossible
String
Description:
FireNotPossible = "AmovPpneMstpSrasWrflDnon";
G
getInCar
String
Description:
getInCar = "AmovPknlMstpSrasWrflDnon";
GetInHigh
String
Description:
GetInHigh = "AmovPercMstpSnonWnonDnon_AcrgPknlMstpSnonWnonDnon_getInHigh";
GetInLow
String
Description:
GetInLow = "AmovPercMstpSnonWnonDnon_AcrgPknlMstpSnonWnonDnon_getInLow";
GetInMedium
String
Description:
GetInMedium = "AmovPercMstpSnonWnonDnon_AcrgPknlMstpSnonWnonDnon_getInMedium";
getInTank
String
Description:
getInTank = "AmovPknlMstpSrasWrflDnon";
getOutCar
String
Description:
getOutCar = "AmovPknlMstpSrasWrflDnon";
GetOutHigh
String
Description:
GetOutHigh = "AcrgPknlMstpSnonWnonDnon_AmovPercMstpSrasWrflDnon_getOutHigh";
GetOutLow
String
Description:
GetOutLow = "AcrgPknlMstpSnonWnonDnon_AmovPercMstpSrasWrflDnon_getOutLow";
GetOutMedium
String
Description:
GetOutMedium = "AcrgPknlMstpSnonWnonDnon_AmovPercMstpSrasWrflDnon_getOutMedium";
getOutTank
String
Description:
getOutTank = "AmovPknlMstpSrasWrflDnon";
H
handGunOn
String
Description:
handGunOn = "AmovPpneMstpSrasWrflDnon";
hasCollShapeSafe
Boolean
Description:
hasCollShapeSafe = 0;
head
String
Description:
head = "headNo";
headDefault[]
Array
Description:
headDefault[] = {};
headNo[]
Array
Description:
headNo[] = {};
I
interpolateFrom[]
Array
Description:
interpolateFrom[] = {"TestSurrender",0.9,"AdthPercMstpSlowWrflDnon_1",0.9};
interpolateTo[]
Array
Description:
interpolateTo[] = {"AinvPknlMstpSlayWrflDnon",0.01,"AinvPknlMstpSlayWrflDnon_1",0.01,"AinvPknlMstpSnonWnonDnon_1",0.01,"AinvPknlMstpSnonWnonDnon_2",0.01,"AinvPknlMstpSnonWnonDnon_3",0.01,"AinvPknlMstpSnonWnonDnon_4",0.01,"AdthPknlMstpSnonWnonDnon_inventory",0.1};
interpolateWith[]
Array
Description:
interpolateWith[] = {"BasicDriver",0.02};
interpolationRestart
Boolean
Description:
interpolationRestart = 0;
interpolationSpeed
Float
Description:
interpolationSpeed = 6;
J
JumpOff
Float
Description:
JumpOff = "";
K
L
ladderOff
String
Description:
ladderOff = "AmovPercMstpSnonWnonDnon";
ladderOffBottom
String
Description:
ladderOffBottom = "LadderRifleDownOff";
ladderOffTop
String
Description:
ladderOffTop = "LadderRifleTopOff";
ladderOnDown
String
Description:
ladderOnDown = "LadderRifleOn";
ladderOnUp
String
Description:
ladderOnUp = "LadderRifleOn";
leaning
String
Description:
leaning = "aimingLying";
leaningCorrectionAngleBeg
Float
Description:
leaningCorrectionAngleBeg = 0;
leaningFactorBeg
Float
Description:
leaningFactorBeg = 0.75;
leaningFactorEnd
Float
Description:
leaningFactorEnd = 0.75;
leaningFactorZeroPoint
Float
Description:
leaningFactorZeroPoint = -1;
leanLRot
Float
Description:
leanLRot = 0.57;
leanLShift
Float
Description:
leanLShift = 0.07;
leanRRot
Float
Description:
leanRRot = 0.57;
leanRShift
Float
Description:
leanRShift = 0.01;
leftHandIKBeg
Boolean
Description:
leftHandIKBeg = 0;
leftHandIKEnd
Boolean
Description:
leftHandIKEnd = 0;
leftHandIKCurve
Array
Description:
As the name suggests, this array describes the curve controlling FK/IK blending on the left arm.
Every pair of values describe a 2D point, with the first number representing time (horizontal) and the second being the weight (vertical).
Time ranges from 0-1, where 0 is animation start, 0.5 is half way, and 1 the end. Weight also ranges from 0-1, where 0 means animation is taken from RTM file (FK) and IK is disabled, 0.6 meaning a 40% blend of FK and 60% IK, and 1 is 100% IK.
Let me interpret the last example below (the long one). The curve has 4 points [0, 1], [0.05, 0], [0.95, 0] and [1, 1]. When the animation starts playing, the IK takes full effect, but is gradually disabled by point #2. It stays disabled until point #4 towards the end, when it's weight starts climbing again. At the end, at point #4, the IK is fully on again, overriding all FK.
leftHandIKCurve[] = {}; //IK OFF. leftHandIKCurve[] = {1}; //IK fully ON. leftHandIKCurve[] = {0.1, 1, 0.15, 0}; //IK fully ON one-tenth into the animation, but disabled soon afterwards. leftHandIKCurve[] = {0, 1, 0.05, 0, 0.95, 0, 1, 1}; //IK ON at start, but soon disabled. Re-enabled towards the end.
legs
String
Description:
legs = "legsLyingAiming";
legsDefault[]
Array
Description:
legsDefault[] = {};
legsNo[]
Array
Description:
legsNo[] = {};
limitFast
Float
Description:
limitFast = 5.5;
limitGunMovement
Boolean
Description:
limitGunMovement = 1;
looped
Boolean
Description:
looped = 1;
Lying
String
Description:
Lying = "AmovPpneMstpSnonWnonDnon";
M
medic
String
Description:
medic = "AinvPknlMstpSlayWrflDnon_medic";
N
O
onLadder
Boolean
Description:
onLadder = 1;
onLandBeg
Boolean
Description:
onLandBeg = 1;
onLandEnd
Boolean
Description:
onLandEnd = 1;
P
PlayerCrouch
String
Description:
PlayerCrouch = "AmovPknlMstpSrasWlnrDnon";
PlayerProne
String
Description:
PlayerProne = "AmovPpneMstpSnonWnonDnon";
PlayerStand
String
Description:
PlayerStand = "AwopPercMstpSoptWbinDnon_rfl";
predictSpeedCoef
Float
Description:
predictSpeedCoef = 1;
preload
Boolean
Description:
preload = 1;
primaryActionMaps[]
Array
Description:
primaryActionMaps[] = {"DeadActions","LauncherKneelActions","BinocProneRflActions","BinocProneCivilActions","RifleProneActions","PistolProneActions","RifleKneelActions","PistolKneelActions","RifleStandActions","PistolStandActions","RifleLowStandActions","SwimmingActions","CivilStandActions","BinocKneelRflActions","BinocStandRflActions"};
putDown
String
Description:
putDown = "AmovPpneMstpSrasWrflDnon";
PutDownEnd
Float
Description:
PutDownEnd = "";
Q
R
reloadAT
String
Description:
reloadAT = "LauncherReloadKneel";
reloadMagazine
String
Description:
reloadMagazine = "WeaponMagazineReloadStand";
reloadMGun
String
Description:
reloadMGun = "AmovPpneMstpSrasWrflDnon";
reloadMortar
String
Description:
reloadMortar = "AmovPpneMstpSrasWrflDnon";
relSpeedMax
Float
Description:
relSpeedMax = 0.6;
relSpeedMin
Float
Description:
relSpeedMin = 0.5;
rightHandIKBeg
Boolean
Description:
rightHandIKBeg = 1;
rightHandIKEnd
Boolean
Description:
rightHandIKEnd = 1;
S
salute
String
Description:
salute = "AmovPercMstpSlowWrflDnon";
showHandGun
Boolean
Description:
showHandGun = 1;
showItemInHand
Boolean
Description:
showItemInHand = 1;
showItemInRightHand
Boolean
Description:
showItemInRightHand = 0;
showWeaponAim
Boolean
Description:
showWeaponAim = 1;
sitDown
String
Description:
sitDown = "AmovPsitMstpSnonWpstDnon_ground";
skeletonName
String
Description:
skeletonName = "OFP2_ManSkeleton";
slowB
String
Description:
slowB = "AmovPercMrunSlowWlnrDb";
slowF
String
Description:
slowF = "AmovPercMevaSlowWlnrDf";
slowL
String
Description:
slowL = "AmovPercMrunSlowWlnrDl";
slowLB
String
Description:
slowLB = "AmovPercMrunSlowWlnrDbl";
slowLF
String
Description:
slowLF = "AmovPercMrunSlowWlnrDfl";
slowR
String
Description:
slowR = "AmovPercMrunSlowWlnrDr";
slowRB
String
Description:
slowRB = "AmovPercMrunSlowWlnrDbr";
slowRF
String
Description:
slowRF = "AswmPercMrunSnonWnonDf";
soundEdge1
Float
Description:
soundEdge1 = 0.45;
soundEdge2
Float
Description:
soundEdge2 = 1;
soundEnabled
Boolean
Description:
soundEnabled = 1;
soundOverride
String
Description:
soundOverride = "bodyfall";
speed
Float
Description:
speed = 0.00833333;
Stand
String
Description:
Stand = "AmovPknlMstpSrasWrflDnon";
startSwim
String
Description:
startSwim = "AswmPercMrunSnonWnonDf";
stop
String
Description:
stop = "AinvPknlMstpSlayWrflDnon";
stop
String
Description:
stop = "AwopPercMstpSoptWbinDnon_non";
StopRelaxed
String
Description:
StopRelaxed = "AidlPercMstpSlowWrflDnon01";
stopSwim
String
Description:
stopSwim = "AmovPercMstpSnonWnonDnon";
StrokeFist
Float
Description:
StrokeFist = "";
strokeGun
String
Description:
strokeGun = "AmovPercMstpSnonWnonDnon";
T
takeFlag
String
Description:
takeFlag = "AinvPknlMstpSlayWrflDnon";
terminal
Boolean
Description:
terminal = 1;
TestDriver
String
Description:
TestDriver = "BasicDriver";
TestDriverOut
String
Description:
TestDriverOut = "BasicDriverOut";
TestGunner
String
Description:
TestGunner = "BasicSittingGunner";
throwGrenade
String
Description:
throwGrenade = "AmovPercMrunSlowWpstDf_AmovPercMstpSrasWpstDnon_gthThrow";
transitionsDisabled[]
Array
Description:
transitionsDisabled[] = {};
transitionsInterpolated[]
Array
Description:
transitionsInterpolated[] = {};
transitionsSimple[]
Array
Description:
transitionsSimple[] = {};
treated
String
Description:
treated = "AinvPknlMstpSlayWrflDnon_healed";
turnL
String
Description:
turnL = "AmovPercMstpSlowWrflDnon_turnL";
turnLRelaxed
String
Description:
turnLRelaxed = "AmovPercMstpSlowWrflDnon_turnL";
turnR
String
Description:
turnR = "AmovPpneMstpSrasWrflDnon_turnR";
turnRRelaxed
String
Description:
turnRRelaxed = "AmovPpneMstpSrasWrflDnon_turnR";
turnSpeed
Float
Description:
turnSpeed = 0.1;
U
untiltWeapon
String
Description:
untiltWeapon = "untiltWeaponDefault";
untiltWeaponDefault[]
Array
Description:
untiltWeaponDefault[] = {};
up
String
Description:
up = "AmovPercMstpSnonWnonDnon";
upDegree
String
Description:
upDegree = "ManPosBinoc";
useFastMove
Boolean
Description:
useFastMove = 1;
V
variantAfter[]
Array
Description:
variantAfter[] = {20,40,100};
variantsAI[]
Array
Description:
variantsAI[] = {"AidlPpneMstpSrasWrflDnon0S",0.7,"AidlPpneMstpSrasWrflDnon01",0.1,"AidlPpneMstpSrasWrflDnon02",0.1,"AidlPpneMstpSrasWrflDnon03",0.1};
variantsPlayer[]
Array
Description:
variantsPlayer[] = {"AdthPercMrunSlowWlnrDf_1",0.5,"AdthPercMrunSlowWlnrDf_2",0.5};
visibleSize
Float
Description:
visibleSize = 0.25;
W
walkB
String
Description:
walkB = "AmovPercMwlkSlowWrflDb";
walkF
String
Description:
walkF = "AmovPercMevaSlowWlnrDf";
walkL
String
Description:
walkL = "AmovPercMwlkSlowWrflDl";
walkLB
String
Description:
walkLB = "AmovPercMwlkSlowWrflDbl";
walkLF
String
Description:
walkLF = "AswmPercMwlkSnonWnonDf";
walkR
String
Description:
walkR = "AmovPpneMrunSnonWnonDr";
walkR
String
Description:
walkR = "AswmPercMstpSnonWnonDnon";
walkRB
String
Description:
walkRB = "AmovPercMwlkSlowWrflDbr";
walkRF
String
Description:
walkRF = "AmovPercMwlkSlowWrflDfr";
weaponOff
String
Description:
weaponOff = "AmovPercMstpSnonWnonDnon";
weaponOn
String
Description:
weaponOn = "AmovPknlMstpSrasWlnrDnon";
X
Y
Z
Namespace of anim classes and files
A...P...M...S...W...D[_A...P...M...S...W...D][_Comment]
A: Description of the animation type, ie: mov for movement, cts for cutscene
P: Stance: erc for erected, knl for kneel, pne for prone
M: Speed of animation: stp for stopped, wlk for walk, run for runnin, eva for evasive
S: Weapon holding: low for lowered, ras for raised
W: Weapon: non for unarmed, pst for pistol, lnr for launcher, rfl for rifle.
D: Direction of movement: non for no direction, f for forward, etc.
If there is a second movement definition named [_A...P...M...S...W...D] after the first one, the animation is a transition from the first animation to the second.
[_Comment]: additional comments, if required
Example:
AmovPpneMstpSnonWnonDnon
means: Movement - Prone - Stopped - civil (no weapon) - no direction (due to being static)