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...


3333333333