Hi,
@adr - I'm not at my DBP machine, and won't be for a while (especially with the footie tonight...), so no snips yet, but I got the object interpolation command to work. I have Psionic's ninja, exported from cshop, and I can flip between all animation sequences, using interpol to make the switch between sequences smooth, as apposed to the instant change. It took me a while to figure it out, but I got it.
The problems/restrictions I found with it, are that once you are interpolating between two frames, the only interuption you can do is pause/stop, i.e. you can't set a new target frame during the interpol so you have to wait for it to complete before doing another anim. If you have interpol really low, i.e. mega slow/smooth, this will make your charaters animation seem unresponsive, so its a question of balancing this value out along side the anim speed and intertia speed of the player. However, I've found normally interpol is set fairly high so this shouldn't really matter, and isn't overly noticable.
Also I found that some poses can interpol in such a way that limbs go through each other on their way to the target frame, but there ya go. I mean, its basically a smoothing of limb angles, so it's not going to know about limb collisions.
So, its quite cool, and does make basic flipping between anim sequences much nicer, but there are the draw backs above. A system more like half life, using proper blends would be groovy.
I found how I stored the animation data and player data/states was key to implementing it well. For each anim sequence you need to know start and end frames, say in an array. For the player, (s)he needs to have a state. When you change states, i.e. from idle to walk, you need to trigger interpolation. Thats the bit that I got stuck on as I was calling it every loop.
To get it going I had a seperate player interpol_state with three possibilities, 1) not interpolating (ie normal, loop object stuff), 2) interpol initiated, and 3) interpolating.
When a player state changed, interpol is now initiated. I'd use stop object, then set object interoplation, then set object frame (to newstate.startframe), then change the interpol state to 3. State 3 would then check if newstate.startframe had been met, using object frame(obj), and if so, go back to interpol state 1. Something like like.
Some pseudo that may help, sorry about my explanations
oldstate=state
if spacekey()=0 then state=idle
if spacekey()=1 then state=walk
if state<>oldstate
interpol=init
endif
if interpol=normal
play animation normally, loop object etc.
endif
if interpol=init
stop object
set object interpolation 10
set object frame state.walk.startframe
interpol=happening
endif
if interpol=happening
if object frame(player)=state.walk.startframe
set object interpolation to 0
interpol=normal
endif
endif
The key thing, for me at least, was seperating out the interopl. The basics of it are, stop the player, set interpol value, use set object frame, then let DB take the player from where they are to the intended frame. Don't have loop/play object happening while interpol is happening, make sure you stop the player obj before you set a new frame.
This is all from memory, but I hope it helps you in some way for now! I did nearly finish a function to do this, might dig that out and/or make a tutorial.
p.s. I just read a comment in your first post, about setting frame to a frame that doesn't exist. This isn't how it works, you take your current frame, then let DBP interpol to a target frame. That frame has to exist. All interpol does is work out the angles between current_frame and target_frame and then smoothly rotate the limbs to meet their target angles. Just like people do in manual animation systems.
At least you know now that the basics can be done, using the command set, not many commands etc. sorry I can't pass you anything at the moment, work calls.
Cheers.