]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/csqcmodellib/cl_model.qc
Merge branch 'master' into terencehill/ca_arena_freezetag_bugfixes
[xonotic/xonotic-data.pk3dir.git] / qcsrc / csqcmodellib / cl_model.qc
index 03226613b6afcf7641b99fe55dddd539cb6907c6..8ccdf814e7362296b49209c647ed7ab0a0b6bf32 100644 (file)
@@ -134,7 +134,10 @@ void CSQCModel_InterpolateAnimation_Do()
        }
        else
        {
-               self.lerpfrac = 1 - bound(0, (time - self.frame1time) / autocvar_cl_lerpanim_maxdelta_framegroups, 1);
+               if(self.frame2time == 0) // if frame2 was not previously displayed, only frame1 can make sense
+                       self.lerpfrac = 0;
+               else
+                       self.lerpfrac = 1 - bound(0, (time - self.frame1time) / autocvar_cl_lerpanim_maxdelta_framegroups, 1);
        }
 #endif
 }
@@ -142,9 +145,9 @@ void CSQCModel_InterpolateAnimation_Do()
 void CSQCModel_Draw()
 {
        // some nice flags for CSQCMODEL_IF and the hooks
-       float isplayer = (self.entnum >= 1 && self.entnum <= maxclients);
-       float islocalplayer = (self.entnum == player_localnum + 1);
-       float isnolocalplayer = (isplayer && (self.entnum != player_localnum + 1));
+       local noref float isplayer = (self.entnum >= 1 && self.entnum <= maxclients);
+       local noref float islocalplayer = (self.entnum == player_localnum + 1);
+       local noref float isnolocalplayer = (isplayer && (self.entnum != player_localnum + 1));
 
        // we don't do this for the local player as that one is already handled
        // by CSQCPlayer_SetCamera()
@@ -170,16 +173,17 @@ void CSQCModel_Draw()
        self.csqcmodel_teleported = 0;
 }
 
-void CSQCModel_Read()
+void CSQCModel_Read(float isnew)
 {
        float sf;
        sf = ReadShort();
 
        // some nice flags for CSQCMODEL_IF and the hooks
-       float isplayer = (self.entnum >= 1 && self.entnum <= maxclients);
-       float islocalplayer = (self.entnum == player_localnum + 1);
-       float isnolocalplayer = (isplayer && (self.entnum != player_localnum + 1));
+       local noref float isplayer = (self.entnum >= 1 && self.entnum <= maxclients);
+       local noref float islocalplayer = (self.entnum == player_localnum + 1);
+       local noref float isnolocalplayer = (isplayer && (self.entnum != player_localnum + 1));
 
+       self.classname = "csqcmodel";
        self.iflags |= IFLAG_ANGLES; // interpolate angles too
 
        { CSQCMODEL_HOOK_PREUPDATE }
@@ -195,7 +199,7 @@ void CSQCModel_Read()
                self.f = r();
 #define CSQCMODEL_PROPERTY_SCALED(flag,t,r,w,f,s,mi,ma) \
        if(sf & flag) \
-               self.f = r() / s;
+               self.f = (r() + mi) / s;
        ALLPROPERTIES
 #undef CSQCMODEL_PROPERTY_SCALED
 #undef CSQCMODEL_PROPERTY
@@ -204,6 +208,7 @@ void CSQCModel_Read()
 
        if(sf & CSQCMODEL_PROPERTY_MODELINDEX)
                setmodelindex(self, self.modelindex); // this retrieves the .model key and sets mins/maxs/absmin/absmax
+               // FIXME do we WANT this to override mins/maxs?
 
        if(sf & CSQCMODEL_PROPERTY_TELEPORTED)
        {