CSQCPlayer_ForceModel_Apply(self.entnum == player_localnum + 1);
CSQCPlayer_GlowMod_Apply();
CSQCPlayer_LOD_Apply();
- if(!isplayer || !autocvar_cl_csad)
+ if(!isplayer)
CSQCPlayer_FallbackFrame_Apply();
else
{
// we know that frame3 and frame4 fields, used by InterpolateAnimation, are left alone - but that is all we know!
- float doblend = FALSE;
- float flg = 0;
+ float doblend = autocvar__animblend;
+ float onground = 0;
if(self == csqcplayer)
{
if(self.pmove_flags & PMF_ONGROUND)
- flg |= FL_ONGROUND;
- if(!(self.pmove_flags & PMF_JUMPRELEASED))
- if(self.anim_prev_pmove_flags & PMF_JUMPRELEASED)
- animdecide_setaction(self, ANIMACTION_JUMP, TRUE);
+ onground = 1;
self.anim_prev_pmove_flags = self.pmove_flags;
+ if(self.pmove_flags & PMF_DUCKED)
+ animdecide_setstate(self, self.anim_state | ANIMSTATE_DUCK, FALSE);
+ else if(self.anim_state & ANIMSTATE_DUCK)
+ animdecide_setstate(self, self.anim_state - ANIMSTATE_DUCK, FALSE);
}
else
{
traceline(self.origin + '0 0 1' * self.maxs_z, self.origin + '0 0 1' * (self.mins_z - 4), MOVE_NOMONSTERS, self);
if(trace_startsolid || trace_fraction < 1)
- flg |= FL_ONGROUND;
+ onground = 1;
}
- animdecide_setframes(self, flg, doblend, anim_frame, anim_frame1time, anim_frame2, anim_frame2time);
+ animdecide_init(self); // FIXME only do this on model change
+ animdecide_setimplicitstate(self, onground);
+ animdecide_setframes(self, doblend, anim_frame, anim_frame1time, anim_frame2, anim_frame2time);
float sf = 0;
if(self.anim_saveframe != self.anim_frame || self.anim_saveframe1time != self.anim_frame1time)
sf |= CSQCMODEL_PROPERTY_FRAME;
sf |= CSQCMODEL_PROPERTY_FRAME2;
self.anim_saveframe = self.anim_frame;
self.anim_saveframe1time = self.anim_frame1time;
- self.anim_saveframe = self.anim_frame2;
+ self.anim_saveframe2 = self.anim_frame2;
self.anim_saveframe2time = self.anim_frame2time;
if(sf)
{
self.lerpfrac = (doblend ? 0.5 : 0);
self.frame = self.anim_frame;
self.frame1time = self.anim_frame1time;
- self.frame = self.anim_frame2;
+ self.frame2 = self.anim_frame2;
self.frame2time = self.anim_frame2time;
CSQCModel_InterpolateAnimation_2To4_Note(sf | CSQCMODEL_PROPERTY_LERPFRAC, FALSE);
}
CSQCModel_InterpolateAnimation_2To4_Do();
if(doblend)
{
- // build a skeletonobject
+ skeleton_from_frames(self);
}
else
{
- // remove skeletonobject if any
- // all is done
+ free_skeleton_from_frames(self);
+ // just in case, clear these
+ self.lerpfrac3 = 0;
+ self.lerpfrac4 = 0;
}
}
}
CSQCModel_Effects_PreUpdate();
if(self.isplayermodel)
{
- if(!isplayer || !autocvar_cl_csad)
+ if(!isplayer)
CSQCPlayer_FallbackFrame_PreUpdate();
CSQCPlayer_ForceModel_PreUpdate();
}
if(self.isplayermodel)
{
CSQCPlayer_ForceModel_PostUpdate();
- if(!isplayer || !autocvar_cl_csad)
+ if(!isplayer)
CSQCPlayer_FallbackFrame_PostUpdate(isnew);
}
CSQCModel_Effects_PostUpdate();