hmm i understand your consideration about state machines but you can overcome this easily
define all your scene names as STRING* and then use ie.
STRING* anim_frame;
STRING* anim_frame_old;
STRING* anim_walk = "walk";
STRING* anim_stand = "stand";
... and so on
then:
if(key_w){
if(anim_frame!=anim_frame_old)anim_frame_old = anim_frame;
anim_frame = walk;
}
else{
if(anim_frame!=anim_frame_old)anim_frame_old = anim_frame;
anim_frame = stand;
}
and at the end of your action
if(anim_frame_old!=NULL){
start blending here
if( blending finishes) anim_frame_old = NULL;
}
ent_animate(..,anim_frame,..,..);
etc.
you can create a system of yourself for easy blending....
and if you do not want to repeat same lines either write a macro or a function like
void set_anim(STRING* animpointer){
if(anim_frame!=anim_frame_old)anim_frame_old = anim_frame;
anim_frame = animpointer;
}
and use set_anim(walk); etc...