]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/cl_player.qc
Merge branch 'master' into terencehill/hud_skin_files_sync
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / cl_player.qc
index 298948ffa91f43695190eb2b71369d4aea40da46..2b3e4d4db1995400d26feaeeaa73af814b8c8e74 100644 (file)
@@ -186,6 +186,9 @@ void CopyBody(float keepvelocity)
 
        Drag_MoveDrag(oldself, self);
 
+       if(self.colormap <= maxclients && self.colormap > 0)
+               self.colormap = 1024 + self.clientcolors;
+
        self = oldself;
 }
 
@@ -226,11 +229,18 @@ void player_setupanimsformodel()
        self.anim_forwardleft = animfixfps(self, '20 1 1');
        self.anim_backright = animfixfps(self, '21 1 1');
        self.anim_backleft  = animfixfps(self, '22 1 1');
-       self.anim_melee = animfixfps(self, '23 1 1');
+       self.anim_melee = animfixfps2(self, '23 1 1', '11 1 5');
+       self.anim_duckwalkbackwards = animfixfps2(self, '24 1 1', '4 1 1');
+       self.anim_duckwalkstrafeleft = animfixfps2(self, '25 1 1', '4 1 1');
+       self.anim_duckwalkstraferight = animfixfps2(self, '26 1 1', '4 1 1');
+       self.anim_duckwalkforwardright = animfixfps2(self, '27 1 1', '4 1 1');
+       self.anim_duckwalkforwardleft = animfixfps2(self, '28 1 1', '4 1 1');
+       self.anim_duckwalkbackright = animfixfps2(self, '29 1 1', '4 1 1');
+       self.anim_duckwalkbackleft  = animfixfps2(self, '30 1 1', '4 1 1');
        // TODO introspect models for finding right "fps" value (1/duration)
        // reset animstate now
        setanim(self, self.anim_idle, TRUE, FALSE, TRUE);
-};
+}
 
 void player_anim (void)
 {
@@ -283,8 +293,22 @@ void player_anim (void)
                }
                else if (self.crouch)
                {
-                       if (self.movement_x * self.movement_x + self.movement_y * self.movement_y > 20)
+                       if (self.movement_x > 0 && self.movement_y == 0)
                                setanim(self, self.anim_duckwalk, TRUE, FALSE, FALSE);
+                       else if (self.movement_x < 0 && self.movement_y == 0)
+                               setanim(self, self.anim_duckwalkbackwards, TRUE, FALSE, FALSE);
+                       else if (self.movement_x == 0 && self.movement_y > 0)
+                               setanim(self, self.anim_duckwalkstraferight, TRUE, FALSE, FALSE);
+                       else if (self.movement_x == 0 && self.movement_y < 0)
+                               setanim(self, self.anim_duckwalkstrafeleft, TRUE, FALSE, FALSE);
+                       else if (self.movement_x > 0 && self.movement_y > 0)
+                               setanim(self, self.anim_duckwalkforwardright, TRUE, FALSE, FALSE);
+                       else if (self.movement_x > 0 && self.movement_y < 0)
+                               setanim(self, self.anim_duckwalkforwardleft, TRUE, FALSE, FALSE);
+                       else if (self.movement_x < 0 && self.movement_y > 0)
+                               setanim(self, self.anim_duckwalkbackright, TRUE, FALSE, FALSE);
+                       else if (self.movement_x < 0 && self.movement_y < 0)
+                               setanim(self, self.anim_duckwalkbackleft, TRUE, FALSE, FALSE);
                        else
                                setanim(self, self.anim_duckidle, TRUE, FALSE, FALSE);
                }
@@ -493,7 +517,8 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht
                        self.armorvalue = self.armorvalue - save;
                        self.health = self.health - take;
                        // pause regeneration for 5 seconds
-                       self.pauseregen_finished = max(self.pauseregen_finished, time + autocvar_g_balance_pause_health_regen);
+                       if(take)
+                self.pauseregen_finished = max(self.pauseregen_finished, time + autocvar_g_balance_pause_health_regen);
 
                        if (time > self.pain_finished)          //Don't switch pain sequences like crazy
                        {
@@ -660,6 +685,8 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht
                MUTATOR_CALLHOOK(PlayerDies);
                weapon_action(self.weapon, WR_PLAYERDEATH);
 
+               RemoveGrapplingHook(self);
+
                if(self.flagcarried)
                {
                        if(attacker.classname != "player")