Animating Weapons for Counter-Strike Source/Reload Animation


Please save your work periodically.

Creating the SceneEdit

  • Open css-lr300-idle.exp.
  • Go to File>Save As. Save it as css-lr300-reload.exp.
  • Match the scene's FPS with the QC's reload fps. (You should already know how to do this from the idle animation page.) The fps for the sg552 reload animation is 37.
  • Match the scene's end frame with the SMD's end frame minus one. (103 - 1 = 102). The end frame is 102 for the sg552 reload animation.
  • Find the null Frame. Below the Parent button, there is a CnsComp button. Press it.
  • Click the word Constrain above the Parent button, and click Pose.
  • Click the left hand null. Now whenever you rotate or move the hand, the gun will follow it.
  • Now constrain the right arm to the left hand.
  • A popup will appear. Click the green square next to the word Active.


You will be using more constraints in the reload animation. First think about what should be constrained. If you give up, take a look:

  • Magazine constrained to support hand, while pulling the magazine in and out.
  • Bolt constrained to support hand, while pulling the bolt.
  • In a more general sense, constraints could be used when a hand interacts with an object.

Setting Up ConstraintsEdit

Because these constraints will be deactivated and activated at certain times in the animation, it not feasible to leave a null without a constraint. To resolve this we will add a new null that matches the place of the original null and constrain the original null to the new null.

  • Add the following nulls in the following hierarchy:
    • constraints
      • arm_constraint
      • magazine_constraint
      • bolt_constraint
  • Make ValveBiped.ValveBiped the parent of constraints.

Press 9 to bring out the schematic view. You will need it.

  • Select arm_constraint. On the right hand panel click Transform, and click Match All Transforms.
  • Click the supporting arm's null.
  • Repeat for the magazine and bolt constraints.
  • Click constraints and its children. On the right hand panel click Transform, and click Set Neutral Pose.
  • Take some time to think. Use the analogy of couples to rationalize the constraint process. The nulls must always have a couple for these constraints to function properly.
    • Right_Arm is going out with Left_Hand. It will break this bond as it leaves the gun and becomes constrained to arm_constraint. Eventually it will meet the magazine and become a couple with the magazine.
    • Magazine is not going out yet. magazine_constraint will go out with it. Constrain magazine_constraint to Magazine.
    • Bolt is not going out yet. bolt_constraint will go out with it. Constrain bolt_constraint to magazine.

A popup will appear after setting a constraint. Click the green square next to the word Active. This sets a key for the constraint's status.

  • Make sure the constraints are working by rotating the trigger hand around and seeing if it makes a smooth movement.

Animation LayersEdit

  • Select all nulls.
  • Make two animation layers -
    • movement - this covers the movement that makes the animation look less robotic.
    • base - this covers everything else.


  • Make sure the base layer is the activate animation layer.
  • Set a key for all nulls at frame 0.
  • Think about the major poses in the animation. They are:
    • Idle pose (already done)
    • Holding the magazine
    • Magazine fully taken out (do not make this pose yet, it requires a constraint)
    • Hand on bolt
    • Bolt pulled by hand (do not make this pose yet, it requires a constraint)
  • We can store these poses in random frames of the animation and move them using the Dopesheet Editor. Later we will move the positions around and fix the interpolation using the FCurve Editor.

The supporting arm is constrained already. In this case you will have to set a key for the deactivation of its constraint to the trigger hand. Click the supporting hand null. On the right hand panel click the Selection button. Expand constraints and click double click Pose Cns. Uncheck its activity and press the green square to set a key. Now constrain the supporting arm to arm_constraint.