Animations - Creating Custom Animations
by Titak and SSJ6Wolf

There are many animation programs around. Not all of them can import and export TR compatible files though.

The two most important programs to create custom animations for custom Tomb Raider levels are WADMerger Animation Editor and 3D Studio Max.

Both programs are capable of creating smooth animations for objects, including Lara.

This tutorial includes:

- WADMerger Animation Editor by Titak
- 3D Studio Max by Titak
- StateID's and stateID changes explained by SSJ6Wolf
- Step by Step: Creating a sprint jump for Lara by SSJ6Wolf

WADMerger Animation Editor

1. Open WADMerger and load your wad.
2. Select the object you want to animate.
3. Open Animation Editor.

4. Select the animation you want to change/create in the Current Animation box.

5. Create the animation.
The basics:

- Select mesh: right mouse click.

- You can rotate or move the mesh after clicking the Move or Rotate buttons, right below the File and Edit dropdown menus. Three coloured arrows representing the X, Y and Z axis will appear. Pull these to move or rotate the mesh.

- You can add extra animations by clicking the Add button.

- You can delete frames using the button.

- The button lets you add effects to the animation, such as sounds.

Frame rate determines the speed of the animation: the higher the number, the slower the animation.

- If you want to link several animations into one long one you can put the number of the Next Animation in this box. Also put in a Next Frame.

Copy and paste frames or entire animations using the Frame and Animation dropdown menus.

6. Save the changes and save your wad.

7. Check out your new animation.

Animation Editor also has an Animation Wizard  feature. This feature allows you to create the first frame, then the last frame and the Wizard will then calculate the frames in between. Saves time and makes the animation smoother.

The WADMerger download comes with a readme file describing more features. It is best to also read that. 

Creating animations isn't as easy as it looks. But practice makes perfect.

3d Studio Max

I'm using 3D Studio Max 6. The buttons and layout of the window may look different in another version. Other programs needed when creating animations in 3D Studio Max are:

Wadmerger 
to create the wad, to copy animations from one wad to another and to add State-ID's, effects and sounds to an animation.

TRViewer 
to export the animation to .3ds format.

FexAnim
to fix to collisionbox of the new animation (WADMerger also has a feature like this).

TRUpdate
to transfer the new animation data from the TR4 file to the wad.

1. Create a dummy wad, containing at least the animating object you want to change. 
2. Convert the wad into a dummy level (tr4)
3. Open TRViewer and open your dummy tr4.
4. Select the animating object you want to change in 3d Studio Max .
5. Export into 3ds format. 
-If the animating object has more than one animation you can select which animation you want to export with the object.
-If you want to change one of Lara's animations you first need to export the skin meshes (select skin meshes and export into TRMVB format) and then import them again in the Lara object.
After that you can export the Lara object with one animation.
6. Import the object with animation into 3d Studio Max and create the animation.

Here is a full screenshot of the 3d Studio Max 6 window.

- Use import instead of open.
- Click the Auto button before starting to animate the object.

- Set the first key (=frame), move the strackbar thingy and create the next key. 3D Studio Max will calculate the frames in between. 
- Use the Move feature only on Lara's hip mesh when animating Lara!

- After you have finished the animation you need to set keys to every frame and to every mesh, depending on the frame rate you want. In the screenshot the animation will have frame rate 2.
Make sure the animation range to ends with a key!!!! (Even if you have set keys every other frame. You can see it in the below screenshot)

Info about assigning keys:
In the bottom right hand corner of the 3D MAX window is a Key filters button which has to do with the keys that can be assigned to a frame/animation. When you click on this button a dropdown menu will appear with the key types listed. For LE related animations it is enough to only have rotation and position keys checked.

- To assign rotate keys only you need to uncheck the position key in this dropdown menu. Now you can assign the rotate key to each frame of each mesh by pressing the K button, or by clicking on the set key button. You can use the . button on your keyboard or drag the trackbar ruler to go to the next frame.
- For the hipmesh you need to have both rotate and position checked in the key filters dropdownmenu. 

When you assign the keys to the frames with the K button (on your keyboard) or with the Set Key button, a green rectangle should appear beneath the frame number. (you can see those green rectangles in the below screenshot, right below the red border.)
If you assign both Rotate and Position keys to the frames the rectangle will be red and green.

7. Export the object.
8. Open Trviewer and open the dummy tr4.
9. Right-click o the Lara movable in TRViewer and select 'import from 3DS'. Check the circle in front of 'animation' and then check 'replace this animation...' and select an animation. 

Like in the screenshot below.

Then you can save the .tr4 file with the new animation.

10. Open FEXanim and select the object. Fix the collision and save the tr4 again.
11. Open Trupdate and run the program to transfer the new animation data to the dummy wad. (make sure you press the Update button before saving the wad!!!!)
12. Open WADMerger and load the dummy wad. Select the object and open AnimationEditor .
13. Select the new animation from the animation list and copy the entire animation ( animation dropdown menu - copy )
14. Close AnimationEditor and load your level wad. Select the object that needs the new animation and open AnimationEditor again.
15. Paste the new animation into the right animation slot. ( animation - copy (replace) )
NOTE: I tried to copy and paste the entire object with the new animation into the levelwad using WADMerger but that caused bugs in the animation ingame. That's why I only copy and paste the animation. 
16. Save the changes and save the wad. Convert the wad and check out your new animation ingame!

Note: 
I've had cases in which the animation looked good in 3D Studio Max but after importing it with TRViewer it looked all messed up. I then exported the animation again in 3D Studio Max and imported it again in TRViewer. It was okay the second time. I have no idea what causes this and I have the problem more often with objects other than Lara.

StateID and stateID changes


StateID
stateID is a number that the game engine uses to determine what a given object is doing. For example, for Lara this number decides what buttons the player can press, how Lara reacts to the environment, and how objects react to Lara. Each animation has its own stateID assigned to it, and each object has its own set of stateIDs.

StateID changes
These reactions are often stateID changes. A stateID change is when a new stateID is generated by the engine, either by a button press or an environmental change (or for baddies, the AI makes a decision). When these changes occur and to what animation they go, is determined by the stateID change editor. The editor is set up as a series of five numbers, each in a column:

StateID, low frame, high frame, next animation, next frame.

1. StateID is the new number that the engine has generated.
2 and 3. Low frame and High frame set the boundaries for when the change occurs. For example if low frame is 4 and high frame is 6, then the change will only occur between frames 4 and 6.
4. Next animation is the new animation the object will go to.
5. Next frame is the starting frame within the new animation.

When making custom animations, it is important to remember that you can only change between stateIDs if the change already occurs; you cannot make up your own. For example you cannot have the jump button do anything during Lara's monkeyswing because that stateID change was never put into the engine. It is very important that you investigate the existing animations and compare them to the new ones you are to make. What stateIDs are used? Which ones do they use to get to new animations?

Also, stateIDs have some hardcoded effects as well. For example, stateID 3 which is Lara's foward jump, lets the player use left and right to rotate her, and this will also apply to any custom animations with stateID 3.

Moving an object about
Now, about moving the object about. I'll use Lara for simplicity's sake. 
There are three ways that Lara can move in the game:

1. Using the speed and acceleration fields at the bottom of the editor will move Lara forward or backward in a given animation. Positive numbers typically move her foward, but some stateIDs use negative numbers to move her foward...just test your animation in-game and you'll see if you got it right or not. This is used typically for running animations.

Speed = the initial speed of the animation. Without acceleration, it sets the constant speed. 47 is running pace and 87 is sprinting pace, to give you an idea of what number to use.

Acceleration = the value that is added to the current speed, each frame. For example if the speed is 1 and acceleration is 2, then each frame Lara will go from 1, to 3, to 5, etc. until the animation ends.

NOTE: Do NOT use acceleration for looping animations, because Lara will drop back to the initial speed each time the animation starts over, which looks and feels very bad to the player.

2. When an animation has Lara end at a different spot (like one square to the left), a set position command can be used to shift her over to that spot. This command can be set in the animcommands window. Set position commands occur AFTER the animation finishes. Set position uses coordinates (x, y, z) with 1000 being a tile. (so 250 is one click, etc.) Negative numbers may be used. The Y axis is upside-down here. Use negative numbers to move her up and vise-versa.

NOTE: The "move" function in the editor uses these same values except divided by 1000. So 1 is a tile, 0.25 is 1 click, etc. Knowing this will let you move Lara precisely.

3. When Lara jumps, a grab position command forms a parabolic path for her to fly through, also set in the animcommands window. The grab position command also occurs AFTER the animation finishes. Its coordinates are (y,z) and check with the original animations for the values, and experiment with them. For example animation 76 sets the command for Lara's standing forward jump. You need a stateID that is used for a jump (3, 25, 26, or 27). The y value should always be negative and the z value should always be positive no matter which stateID is being used, unless you truly want the opposite effect to occur.

NOTE: As far as I know, only the Lara object uses this command.

Command 3
Also, I should mention Command 3. If, after a certain animation, Lara has trouble doing a mid-air grab, or crawling, or drawing her guns, place command 3 in the animation and the problem should be fixed.

Play effect 12
If you play effect 12 during an animation, it serves the same purpose as command 3 except that Lara will be able to draw her guns during the animation, starting at the frame when the effect is played. This is used typically for pull-up animations.

NOTE: Effect 12 does not appear in the drop-down menu for effects. Instead of using the drop-down menu, just type in 12 instead.

Addition by Titak:
StateID 89
When you have created a custom animation for Lara (a new move or a cutscene animation) you can add StateID 89 to the animation to disable Lara control. Lara won't do anything during the animation, no matter what button you press, includign the look button. 
This way you'll make sure that the animation won't get interrupted, even if you are already using a flyby sequence with look button disabled.

Step by Step: Creating a sprint jump for Lara

This tutorial is intended to increase understanding of the animation editor as you create a sprint jump for Lara. Please PM me if you have any questions!

Prerequisites:
WADMerger (preferably 1.96 or later so you can calculate collision)
A WAD you're ready to experiment with.
Patience!
Read the "creating custom animations" thread to understand these terms, that will be used in this tutorial:
-Speed and acceleration
-Grab position
-StateID
-StateID change
-stateID change editor and how it works


Objectives:
1. Enable the player to cross a gap of four squares when they press "jump" while sprinting - a sprint jump.
2. Enable the player to grab ledges during this sprint jump.
3. Reassign the diving roll move to be used when "shift" and "jump" are used together while sprinting.

Part 1 - Gathering information
Open WADMerger, and load a WAD. I found it fitting to use tut1.was but you can choose any WAD with Lara in it. Select Lara and click the "animation editor" button.

There are 444 animations for Lara in Tomb Raider 4 - that's a lot! But the more time you spend here, the easier it will be to find a specific animation.

When you want to make a custom animation you need to make sure you know how it will be used in-game. In this case you most likely know beforehand that the jump button may be used while sprinting to perform a diving roll, so it is therefore possible to use this button for a new animation.

What you need to do is find reference animations so you know what kinds of commands to use for our dash jump. Wouldn't it make sense to find the running jump animations? On your own you would have to keep scrolling until you spotted your reference animations, but this time it wouldn't have taken long - Lara's running jump is found in animations 16, 17, 18, and 19.

Looking at the "next animation" field, notice that these animations come in pairs. Animation 16 goes to animation 17 and animation 18 goes to animation 19. Both 17 and 19 lead to animation 77 (a continuation of the jump). Also notice that animations 16 and 17 jump off of the right foot, and animations 18 and 19 jump off the left foot. Making a flow chart will be helpful here. Like this:

This tells you that you will actually need 5 animations for the sprint jump. Now let's gather information about the individual animations. The most important things to find for each animation are:

1. StateID (the number that tells the game engine what Lara's doing)
2. Speed and Acceleration, if any (moves Lara back and forth)
3. Animation commands (click the button with all the 0's and 1's, this is for playing sounds and other special commands, more on this later)
4. StateID changes (click the button that looks like 1->2, this is for changing what Lara is doing)

On your own you should write this stuff down. All of the animations have stateID 3. Animations 16 and 18 have a speed of 47, Lara's running pace. In the animcommands window, animations 16 and 18 both have a GRAB POSITION command (-100,75). Don't worry about the sound commands, they're not fundamental right now and you will insert them of your own accord later on in the tutorial. In the stateID change editor, animations 16 and 18 go to animation 133 for stateID 8. If you find animation 133 you'll see this is for if Lara dies before she can take off.

Animations 17 and 19 do not have any speed settings or animation commands, but they do have a lot of stateID changes. If you track down all of the animations these lead to, you should form a list like this:

StateID 1 (animation 92) = Lara lands and continues running
StateID 2 (animation 82) = Lara lands and stops moving
StateID 11 (animation 251) = Lara does a mid-air grab
StateID 52 (animation 157) = Lara goes into a swan dive
StateID 68 (animation 207) = Lara turns to face the opposite direction

Animation 77 is essentially the same as 17 and 19, except it has another stateID, stateID 9. Tracking it down to animation 45 you see it is for when Lara starts to fall straight downwards. Animation 77 also has a bunch of different animations stemming off of stateID 11. This is because Lara needs to be able to grab when her arms are at different angles, as the animation progresses. Don't worry about copying all the grabbing animations' numbers down, we'll be making our own anyway.

Part 2 - Letting Lara Launch
You might think it would make sense to replace the diving roll animations with your new ones, but it is wise to keep them for later. (You will use them for the third objective). Instead we will add new slots.

Click the "add" button under the animation drop-down menu. You have just created a new slot, numbered 445. Click the add button 4 more times. Now we have slots 445-449 to work with for our 5 animations. You want to follow the existing running jump animations as closely as possible, so write down a list matching your new animations to the running jump animations (or just keep it in your memory).

Animation 445 -> Animation 16
Animation 446 -> Animation 17
Animation 447 -> Animation 18
Animation 448 -> Animation 19
Animation 449 -> Animation 77

The flow chart for your new animations then looks like this:

To make a good animation, you need a good starting frame. Animations 445 and 447 will stem off of the sprinting animation, so let's copy over your starting frames from there. The sprinting animation is 223. Animations 16 and 18 start just before the foot hits the ground, so you will start there as well. Go to animation 223 and select frame 12, when the right foot is about to hit the ground. Under the frame menu at the top, choose "copy". Now go to animation 445 and under the frame menu choose "paste (replace)" to replace the only frame there. Go back to animation 223 and copy frame 2, and paste (replace) 447's only frame.

Let's save here. Select file menu -> save wad. 
NOTE: This OVERWRITES your current Wad. If you want to save it under a different name or in a different place, close the animation editor (say 'yes' to the save changes dialog) and use the "save WAD" button instead.

Start with animation 445. The animation it is based off of, animation 16, has Lara push off of her right foot to jump, so animation 445 will do the same. Press the button with the blue plus sign near the top of the editor to duplicate the frame. (Don't worry about the collision box yet.) In this frame, have Lara push on her foot. 

Press the move button and change the Y value to -0.314 to lower her. Select mesh 4 and press the rotate button. Change the X value to 90 to raise the leg. Select mesh 5 and press the rotate button. Change the X value to 270 to bend the knee. Select mesh 7 and change its x value to 320 to make Lara bend over more. Select mesh 1 and change its x value to 20 to pull that leg in more. Now compare this frame to the first frame and yeah, it looks like she's ready to leap! 

Go back to frame 1 (frame 1 is the second frame, frame 0 is the first frame. Confusing, I know) and duplicate it. In this new frame, move Lara up to -0.414 again. Move Mesh 1's x value to 40 and Mesh 4's value to 45. Move mesh 5's x value to 310. Move mesh 7's x value to 310 so she bends even further down. 

Duplicate frame 2 and in the new frame. change mesh 4's x value to 320 and mesh 5's x value to 0. Change mesh 7's x value to 0. Change Mesh 1's x value to 90.

Select collision -> calculate collision (animation) to fix the collision box. This helps generate Lara's shadow accurately and it tells the camera where to look.

To smooth this animation out, highlight the number 1 and press "2" to change the framerate to 2. You CANNOT delete this number or the editor crashes. You have to replace it like I instructed. Now press the auto animate object button to play your new animation. It is hard to see since it goes by fast, but you made your first animation!

NOTE: Notice how the frame numbers change when you change the framerate. This is because frames are actually CALCULATED by the game engine in between the frames you made. Now frame 1 is frame 2, frame 2 is frame 4, etc.

Now create animation 447 the exact same way, except the legs are switched. So do with Mesh 1 what you did with mesh 4 last time, and do with mesh 2 what you did with mesh 5 last time, and vice versa.

Now that you've made two animations, here is how rotating meshes works for when you do it by yourself:

The x value moves the mesh up and down
The y value twists the mesh in place
The z value moves the mesh side-to-side


The values are in degrees, from 0 to 360. So 180 is halfway...etc.

It takes LOTS of experimentation when you rotate meshes, so don't get discouraged! Just keep trying until you get the meshes facing the way you want.

Oh yeah, you might have noticed that when moving Lara with the y value, the smaller the number, the higher Lara goes. This is because y-axis is upside down.

Now, remember those four important things we found earlier about animations 16 and 18? Animations 16 and 18 have the same things: StateID 3. A stateID change for stateID 8, low frame 0 high frame 7 next animation 133. Speed 47. Grab position command (-100,75).

Let's put these same things into animations 445 and 447 - however we should change two of these things. The speed should be 87, because Lara is dashing. And grab position command should be (-100,100) because the sprint jump will cover another square (when you do the math, 25 is the equivalent of a square).

Set animation 445's "next animation" field to 446 (remember the flow chart!) and 447's "next animation" field to 448.

Last but certainly not least, we need to enable these animations. First take a look at animation 0, Lara's running animation. The stateID change editor has these lines:

3, 0, 11, 18, 0
3, 11, 22, 16, 0

Essentially, the guys at Core Design split this animation in half, one half when Lara steps on the left foot, another half for when she steps on her right foot.

Let's apply this same principle to the sprinting animation. So go to animation 223 and open the stateID change editor. On your own you would track all of these animations down to find out what they do, but I can just tell you that stateID 74 is for when the jump button is pressed. Delete the current lines with stateID 74 and add these instead:

74, 0, 9, 447, 0
74, 9, 18, 445, 0

Now you have split up the sprinting animation so Lara can get to the sprint jump animations.

Part 3 - Continuing the jump
Now on to animations 446 and 448. These are the equivalents of animations 17 and 19. Animations 17 and 19 are 5 frames, but have a framerate of 2 so they really have 10 frames each. 

Copy the last frame of animation 445, then paste (replace) it over 446's single frame. Then copy the last frame of 447 and paste (replace) it over 448's single frame. I am leaving these animations up to you. Make five frames like before and then make the framerate 2. These animations are when Lara has jumped forward. Be creative! Will Lara fling her arms upward and then drop them to her sides? Or will she fold them across her chest and then fling them outward like an eagle? It's up to you! Make sure animations 446 and 448 end with the same frame, because these animations will both lead to a common, looping animation. Don't forget to calculate the collision!

When you're done, put the four important things in for animations 446 and 448. In this case it's simply stateID 3 and the stateID changes. But the stateID changes will be different. The change for stateID 1 and stateID 2 should both go to animation 82, where Lara lands and stops, because I feel it is too extravagant that Lara could continue running after jumping with such momentum. For the same reason I did not include the StateID 68 change. And the stateID 52 change will be used for objective #3, so don't include that either. The changes need low frame 0 and high frame 8, except for stateID 11 which has low frame 5. In the end your stateID change editor should look like this for animations 446 and 448:

1, 0, 8, 82, 0
2, 0, 8, 82, 0
11, 5, 8, 251, 0

Then complete your animation flow chart by setting both of their "next animation" fields to animation 449. 

On to animation 449. Copy the last frame from either 446 or 448 and paste it over 449's single frame. Again I encourage creativity here. This is a looping animation so I have Lara flailing her arms about like she does in TR6. Make the animation 11 frames long and then give it framerate 2. Don't forget it's looping so have the last frame match the first frame.

NOTE: If you don't want the animation to loop, set the "next frame" field to the number of the last frame (22) so that the last frame keeps playing until a stateID change kicks in.

Now to add the four important things. StateID 3. The same stateID changes will get deleted, except now you have stateID 9, so the stateID change editor should look like this (each number indicates a new column)

1, 0, 22, 82, 0
2, 0, 22, 82, 0
9, 0, 22, 45, 0

Notice I left out stateID 11, because now you're going to make some grabbing animations with the Animation Wizard.

Objective 1 complete.

Part 4 - Letting Lara Grab
Since animation 449 is long, you should use 3 different grabbing animations to cover it.

Click the add button, and now you're at animation 450. Copy frame 0 from 449 and paste (replace) it over 450's single frame. Duplicate it. Now go to animation 95 - this is where Lara is going. So copy 95's frame and paste it over 450's second frame. Now you should have the beginning and end of the animation. That's just what you need for the animation wizard. Copy the last frame again (you'll need it in a second). Go to the first frame, then click the animation wizard button.

The first step of the animation wizard is just introduction. Read it then press next. The second step asks you to make the first frame. It is already there, so press next. The third step asks for the last frame. Click on the animation editor and press ctrl+v to paste the last frame there. Then click next in the animation wizard. The fourth step asks for the length (the number of frames) and the start (the starting frame) Let's make the length 6, and the start should be 0.

Now look at your animation. Lara goes smoothly from the first to frame 5. However the wizard made an extra frame - frame 6. And what is now frame 7 is what I asked you to paste in to see that it would be the end frame. These frames are no longer needed, so delete them. Now you should have frames 0-5 that make a smooth grabbing animation. It's kind of short so make the framerate 2. Set the stateID to 11 and next animation to 95. Calculate the collision for the animation and you're done!

Isn't that easy? Now, make 2 more grabbing animations just like 450, except for animation 451 use animation 449's frame 8 as the first frame, and for animation 452 use animation 449's frame 16 as the first frame.

Now to enable these animations. Go back to animation 449 and open the stateID change editor. Add these three lines:

11, 0, 7, 450, 0
11, 8, 15, 451, 0
11, 16, 22, 452, 0

Now Lara will use three animations for grabbing depending on when you press action. More animations = Lara flows better.

Objective 2 complete.

Part 5 - Enabling the Diving Roll
What if Lara still wants to do the diving roll? You know that the shift key can be used during a forward jump, so the diving roll can be used for shift + jump while sprinting.

Go to animation 445 and add this line in the stateID change editor:
52, 0, 7, 308, 0
Go to animation 447 and add this line in the stateID change editor:
52, 0, 7, 230, 0

Objective 3 complete.

Now we should add some sounds. Go to animation 445 and open the animcommands window. To add a sound, select the "play sound" command in the dropdown menu. The next box sets the frame at which the sound plays, then the next dropdown menu lets you choose the sound. The last dropdown menu lets you choose "land" "water" or "always".

Land = sounds for when moving on dry land only.
Water = sounds for when moving in water only.
Always = Always!


You'll probably want to add a Lara_jump in animation 445. Make it "always" since whether it's dry land or not doesn't matter with that sound. Then do the same with animation 447. Add any other sounds you wish.

Now, save, convert the level and test the sprint jump and diving roll in-game. Congratulations, your tutorial is complete!

I followed along with the tutorial and this is how my sprint jump turned out (yep, that's my tutorial level):