]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/client/csqcmodel_hooks.qc
Merge branch 'sev/scoreboard_skin' into 'master'
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / csqcmodel_hooks.qc
index 6f008fb541a118c53c2a10cf0513d64fffe61dd9..4cb416063509daca3b6ad6b8b920dbf2ce0a7a53 100644 (file)
@@ -218,16 +218,11 @@ void CSQCPlayer_ModelAppearance_Apply(float islocalplayer)
                // own team's color is never forced
                float forcecolor_friend = 0;
                float forcecolor_enemy = 0;
-               float teams_count = 0;
                entity tm;
 
-               for(tm = teams.sort_next; tm; tm = tm.sort_next)
-                       if(tm.team != NUM_SPECTATOR)
-                               ++teams_count;
-
                if(autocvar_cl_forcemyplayercolors)
                        forcecolor_friend = 1024 + autocvar_cl_forcemyplayercolors;
-               if(autocvar_cl_forceplayercolors && teams_count == 2)
+               if(autocvar_cl_forceplayercolors && team_count == 2)
                        forcecolor_enemy = 1024 + autocvar__cl_color;
 
                if(forcecolor_enemy && !forcecolor_friend)
@@ -475,8 +470,14 @@ void CSQCModel_Effects_PreUpdate(void)
        self.effects = self.csqcmodel_effects;
        self.modelflags = self.csqcmodel_modelflags;
 }
+void Reset_ArcBeam(void);
 void CSQCModel_Effects_PostUpdate(void)
 {
+       if (self == csqcplayer) {
+               if (self.csqcmodel_teleported) {
+                       Reset_ArcBeam();
+               }
+       }
        self.csqcmodel_effects = self.effects;
        self.csqcmodel_modelflags = self.modelflags;
        self.effects = 0;
@@ -648,7 +649,7 @@ void CSQCModel_Hook_PreDraw(float isplayer)
                                if(trace_startsolid || trace_fraction < 1)
                                        onground = 1;
                        }
-                       animdecide_init(self);
+                       animdecide_load_if_needed(self);
                        animdecide_setimplicitstate(self, onground);
                        animdecide_setframes(self, doblend, anim_frame, anim_frame1time, anim_frame2, anim_frame2time);
                        float sf = 0;
@@ -660,16 +661,15 @@ void CSQCModel_Hook_PreDraw(float isplayer)
                        self.anim_saveframe1time = self.anim_frame1time;
                        self.anim_saveframe2 = self.anim_frame2;
                        self.anim_saveframe2time = self.anim_frame2time;
-                       if(sf)
-                       {
-                               CSQCModel_InterpolateAnimation_2To4_PreNote(sf | CSQCMODEL_PROPERTY_LERPFRAC);
-                               self.lerpfrac = (doblend ? 0.5 : 0);
-                               self.frame = self.anim_frame;
-                               self.frame1time = self.anim_frame1time;
-                               self.frame2 = self.anim_frame2;
-                               self.frame2time = self.anim_frame2time;
-                               CSQCModel_InterpolateAnimation_2To4_Note(sf | CSQCMODEL_PROPERTY_LERPFRAC, FALSE);
-                       }
+                       // Note: we always consider lerpfrac "changed", as it uses fixed values every time anyway.
+                       // This ensures that .frame etc. are always written.
+                       CSQCModel_InterpolateAnimation_2To4_PreNote(sf | CSQCMODEL_PROPERTY_LERPFRAC);
+                       self.lerpfrac = (doblend ? 0.5 : 0);
+                       self.frame = self.anim_frame;
+                       self.frame1time = self.anim_frame1time;
+                       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)
                        {