]> de.git.xonotic.org Git - voretournament/voretournament.git/blobdiff - data/qcsrc/server/cl_player.qc
Attempt to fix multiplayer animation issue found in 0.5.1. This also fixes a dumb...
[voretournament/voretournament.git] / data / qcsrc / server / cl_player.qc
index 14d44a236eeee3c4b0b265891a38deab044eba2b..41dc8f40dca6a1dba7f53d1ab1e7abd1987302a2 100644 (file)
@@ -282,16 +282,17 @@ void player_setupanimsformodel()
        else\r
                dprint("File ", animfilename, " not found, assuming legacy .zym model animation timings\n");\r
 \r
-       // the line below is disabled due to issues with the stomach model, which cannot be animated.\r
-       // customizeentityforclient cannot let this part of the code know whether it's the stomach model or normal\r
-       // player model we're using. Attempting to animate the stomach model causes BIG issues, and must not be allowed.\r
-\r
-       // reset animstate now\r
-       //setanim(self, self.anim_idle, TRUE, FALSE, TRUE);\r
+       // if this is the stomach model (or any model that can't be animated), don't attempt to animate\r
+       if not(substring(self.model, strlen(self.model) - 3, 3) == "md3") // check model extension\r
+               setanim(self, self.anim_idle, TRUE, FALSE, TRUE);\r
 };\r
 \r
 void player_anim (void)\r
 {\r
+       // if this is the stomach model (or any model that can't be animated), don't attempt to animate\r
+       if(substring(self.model, strlen(self.model) - 3, 3) == "md3") // check model extension\r
+               return;\r
+\r
        updateanim(self);\r
        if (self.weaponentity)\r
                updateanim(self.weaponentity);\r
@@ -357,9 +358,9 @@ void player_anim (void)
                setanim(self.weaponentity, self.weaponentity.anim_idle, TRUE, FALSE, FALSE);\r
 }\r
 \r
-void SpawnThrownWeapon (vector org, float w)\r
+void SpawnThrownWeapon (vector org, float w, float doreduce)\r
 {\r
-       W_ThrowWeapon(randomvec() * 125 + '0 0 200', org - self.origin, FALSE);\r
+       W_ThrowWeapon(randomvec() * 125 + '0 0 200', org - self.origin, doreduce);\r
 }\r
 \r
 void PlayerCorpseDamage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)\r
@@ -402,7 +403,7 @@ void PlayerCorpseDamage (entity inflictor, entity attacker, float damage, float
        self.dmg_take = self.dmg_take + take;//max(take - 10, 0);\r
        self.dmg_inflictor = inflictor;\r
 \r
-       if (self.health <= -75 && self.modelindex != 0)\r
+       if (self.health <= -cvar("sv_gibhealth") && self.modelindex != 0)\r
        {\r
                // don't use any animations as a gib\r
                self.frame = 0;\r
@@ -593,7 +594,7 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht
                // clear selected player display\r
                ClearSelectedPlayer();\r
                // throw a weapon\r
-               SpawnThrownWeapon (self.origin + (self.mins + self.maxs) * 0.5, self.switchweapon);\r
+               SpawnThrownWeapon (self.origin + (self.mins + self.maxs) * 0.5, self.switchweapon, FALSE);\r
                // print an obituary message\r
                Obituary (attacker, inflictor, self, deathtype);\r
                race_PreDie();\r
@@ -745,7 +746,6 @@ void ClearSelectedPlayer()
        }\r
 }\r
 \r
-.float dropweapon_check;\r
 void UpdateSelectedPlayer()\r
 {\r
        entity selected;\r
@@ -758,7 +758,7 @@ void UpdateSelectedPlayer()
                if(!self.dropweapon_check)\r
                if(self.predator.team != self.team) // don't disarm team mates when swallowing them\r
                if(random() < cvar("g_balance_vore_swallow_dropweapon"))\r
-                       SpawnThrownWeapon (self.origin + (self.mins + self.maxs) * 0.5, self.switchweapon);\r
+                       SpawnThrownWeapon (self.origin + (self.mins + self.maxs) * 0.5, self.switchweapon, TRUE);\r
                self.dropweapon_check = TRUE;\r
        }\r
        else\r
@@ -1211,7 +1211,6 @@ void UpdatePlayerSounds()
        LoadPlayerSounds(strcat(self.model, ".sounds"), 0);\r
 }\r
 \r
-.float soundtimefilter;\r
 void GlobalSound(string sample, float chan, float voicetype)\r
 {\r
        float n;\r
@@ -1295,21 +1294,15 @@ void GlobalSound(string sample, float chan, float voicetype)
                        tauntrand = random();\r
                        FOR_EACH_REALCLIENT(msg_entity)\r
                                if (tauntrand < msg_entity.cvar_cl_autotaunt)\r
-                               if not (self.taunt_soundtimefiltered && msg_entity.soundtimefilter > time)\r
+                               if (msg_entity.cvar_cl_voice_directional >= 1)\r
                                {\r
-                                       if (msg_entity.cvar_cl_voice_directional >= 1)\r
-                                       {\r
-                                               if(self.predator.classname == "player")\r
-                                                       soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE * bound(0, cvar("g_vore_soundocclusion"), 1), bound(ATTN_MIN, msg_entity.cvar_cl_voice_directional_taunt_attenuation, ATTN_MAX));\r
-                                               else\r
-                                                       soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, bound(ATTN_MIN, msg_entity.cvar_cl_voice_directional_taunt_attenuation, ATTN_MAX));\r
-                                       }\r
+                                       if(self.predator.classname == "player")\r
+                                               soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE * bound(0, cvar("g_vore_soundocclusion"), 1), bound(ATTN_MIN, msg_entity.cvar_cl_voice_directional_taunt_attenuation, ATTN_MAX));\r
                                        else\r
-                                               soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTN_NONE);\r
-\r
-                                       if(self.taunt_soundtimefiltered)\r
-                                               msg_entity.soundtimefilter = time + msg_entity.cvar_cl_autotaunt_repeat;\r
+                                               soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, bound(ATTN_MIN, msg_entity.cvar_cl_voice_directional_taunt_attenuation, ATTN_MAX));\r
                                }\r
+                               else\r
+                                       soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTN_NONE);\r
                        break;\r
                case VOICETYPE_TAUNT:\r
                        if(self.classname == "player")\r