// client side frame inferring void animdecide_init(entity e); void animdecide_setimplicitstate(entity e, float onground); void animdecide_setframes(entity e, float support_blending, .float fld_frame, .float fld_frame1time, .float fld_frame2, .float fld_frame2time); // please network this one .float anim_state; .float anim_time; .float anim_lower_action; .float anim_lower_time; .float anim_upper_action; .float anim_upper_time; // when copying entities, copy these too .float anim_implicit_state; .float anim_implicit_time; .float anim_lower_implicit_action; .float anim_lower_implicit_time; .float anim_upper_implicit_action; .float anim_upper_implicit_time; // explicit anim states (networked) void animdecide_setstate(entity e, float newstate, float restart); #define ANIMSTATE_DEAD1 1 // base frames: die1 #define ANIMSTATE_DEAD2 2 // base frames: die2 #define ANIMSTATE_DUCK 4 // turns walk into duckwalk, jump into duckjump, etc. #define ANIMSTATE_FROZEN 8 // force idle // implicit anim states (inferred from velocity, etc.) #define ANIMIMPLICITSTATE_INAIR 1 #define ANIMIMPLICITSTATE_FORWARD 2 #define ANIMIMPLICITSTATE_BACKWARDS 4 #define ANIMIMPLICITSTATE_LEFT 8 #define ANIMIMPLICITSTATE_RIGHT 16 #define ANIMIMPLICITSTATE_JUMPRELEASED 32 // explicit actions (networked); negative values are for lower body void animdecide_setaction(entity e, float action, float restart); #define ANIMACTION_JUMP -1 // jump #define ANIMACTION_DRAW 1 // draw #define ANIMACTION_PAIN1 2 // pain #define ANIMACTION_PAIN2 3 // pain #define ANIMACTION_SHOOT 4 // shoot #define ANIMACTION_TAUNT 5 // taunt #define ANIMACTION_MELEE 6 // melee