I still dont know how to animate I hate my self D:
I should really post a complete tutorial on that, but I can give you a quick run-down.
Your first step, before doing anything, is to Save the model for backup purposes. If you forget to do something in the Animation after you've finished it, or if you want to change something, it will be a whole lot easier just starting from scratch. Milkshape is notorious at completely ruining animation once you try to change something later on, and then it just becomes a nonsensical mess.
Your second step is creating Joints, unconnected ones. These can be placed wherever if you just want to make a simple Translation animation, but you'll need to center them to make Rotations.
Alright so let's say our animation will make a gun barrel Recoil. This is a very simple Translation animation (top part of the gun moves backwards, then comes back forward to it's original position). First off you will make a single Joint, name it JointA or some other name (NO NUMBERS).
Next, select the Polygon or set of polygons you want to move. Then, go in the Joints tab and assign it to JointA. Now when you hit that fancy Animation button down in the right corner of MS3D, and you decide to select and move the joint, the polygons you assigned to it should also move while everything else remains motionless. (Note, if you decide to try and move the joint to see if it works, remember to Undo afterwards)
Alright so your JointA is connected to the gun barrel or whatever else you want to move. Now to explain what the animation stuff at the bottom of the screen means. The meter with the small tab-arrow that you can slide from one point to another is the Keyframe bar. Animation Steps are basically called Keyframes. You can have as many keyframes in a model as you want, but for Blockland you'll be playing around with low numbers of them to keep things simple.
First thing to do at this point is set the tab-arrow thing on the first keyframe (keyframe 1.0), go in the Animate tab at the top of the screen, and hit Set Keyframe. This will save-keep your model's current state on keyframe 1.0, and basically this will be how the model is supposed to look like all the time. Next, you want to make the barrel Recoil Backwards. Drag the tab-arrow thing on Keyframe 2.0, then select the Joint and use Move to move the joint backwards (You will see the barrel move backwards with it).
The move itself isn't saved, only the End Position of the joint. Move the joint all the way back, as if at the very peak of the recoil. Then go in the Animate tab and hit Set Keyframe once again.
Next is the tricky part, you'll have to bring the joint back to it's original position. First, set the Tab-arrow thing on Keyframe 3.0, then try to get your Joint back on the starting position. When you think you have the right position, go in Animate again and hit Set Keyframe. You can now go back to Keyframe 1.0 and compare the two positions to see if your joint position on 3.0 matches well. The reason the joint in 1.0 has to be the same as 3.0 is to give you a clean animation. You could try using Copy Keyframe but if you're making something complex, I wouldn't risk it.
Alright cool, you have a basic 3 frame recoil animation. How do you translate that to fit in Blockland?
There are two ways: If you're using the DTS PLUS exporter, you can add any animation in easily. If you're using the regular exporter, it gets a tiny bit more complicated.
To understand what's going on completely, we'll assume you're using the regular exporter. This method also works if you're using the DTS PLUS, no worries.
We'll start by creating a new Material. You don't need to assign it to any polygon, this material acts purely as a Carrier for Animation information when you export the model.
Now what to name it? This question is a biggy unless you look up some good tutorials.
For your purposes, we name it this:
seq: fire=1-3, fps=15The sequence refers to which imageState will play the animation, in this case it's the "fire" state. The "1-3" simply says the animation will play using frame 1.0 going through 2.0 and then finishing with 3.0. In game, this produces a smooth animation of the Gun Barrel recoiling backwards and then coming back to it's initial position.
Then, save the model under another file name (backup for the animation), then Flatshade it (save it as your final product) and finally, export it using either DTS or DTS PLUS.
Now you might be wondering where "fire" and FPS fits in. If you open up your weapon script and scroll down to the ImageStates, you will notice a few lines looking something like this:
...
stateName[2] = "Fire";
stateTransitionOnTimeout[2] = "Reload";
stateTimeoutValue[2] = 0.05;
stateFire[2] = true;
stateblahblah = blah;
...
This state is called Fire, so when you'll use your weapon and click the trigger, it will eventually hit this state and your Barrel Recoil animation will play!
Ok so the animation will play, but now what role does FPS play in all of this? Is it speed?
So far in blockland, FPS doesn't do much when it comes to connecting Animation with imageStates.
Animation appears to size itself depending on the TimeoutValue (life time) of the image state that plays it. In the above example, you have a TimeoutValue of 0.05, so the animation will play COMPLETELY and only ONCE over 0.05 seconds (it will be quite fast).
You can do allot of fun stuff by combining imageStates and animation in creative ways, like collapsible weapons and cool weapon effects.
Edit: Jesus this is long, well ok here's your full tutorial. So much for a quick run-down, I spent half an hour writing this.