X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Fcsqcmodel_hooks.qc;h=0b38b108bdc5e8c63a57c1fb86ac300f0f80e584;hb=bb27a7450133e9fb4b11b37f3b38e19ea232ff82;hp=82b045801429a2f750c2513db28fa0b148d552b8;hpb=d44927502027bfa3ccd6ccc98d9b7d6285c182c3;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/csqcmodel_hooks.qc b/qcsrc/client/csqcmodel_hooks.qc index 82b045801..0b38b108b 100644 --- a/qcsrc/client/csqcmodel_hooks.qc +++ b/qcsrc/client/csqcmodel_hooks.qc @@ -1,20 +1,17 @@ #include "csqcmodel_hooks.qh" -#include "autocvars.qh" -#include "main.qh" -#include "miscfunctions.qh" + #include -#include -#include "player_skeleton.qh" -#include "weapons/projectile.qh" +#include +#include #include +#include +#include #include #include #include #include #include #include -#include -#include #include #include #include @@ -247,8 +244,7 @@ void CSQCPlayer_ModelAppearance_Apply(entity this, bool islocalplayer) if(autocvar_cl_forcemyplayercolors) forcecolor_friend = 1024 + autocvar_cl_forcemyplayercolors; - if((autocvar_cl_forceplayercolors == 2 && team_count == 2) - || (autocvar_cl_forceplayercolors == 3 && IS_GAMETYPE(DUEL))) + if(autocvar_cl_forceplayercolors != 3 && autocvar_cl_forceplayercolors == 2 && team_count == 2) forcecolor_enemy = 1024 + autocvar__cl_color; if(forcecolor_enemy && !forcecolor_friend) @@ -287,7 +283,7 @@ void CSQCPlayer_ModelAppearance_Apply(entity this, bool islocalplayer) { if(autocvar_cl_forcemyplayercolors && islocalplayer) this.colormap = 1024 + autocvar_cl_forcemyplayercolors; - else if(autocvar_cl_forceplayercolors) + else if(autocvar_cl_forceplayercolors && (autocvar_cl_forceplayercolors != 3 || ISGAMETYPE(DUEL))) this.colormap = player_localnum + 1; } @@ -425,7 +421,7 @@ void CSQCModel_AutoTagIndex_Apply(entity this) } // recursive predraw call to fix issues with forcemodels and LOD if bone indexes mismatch - if(this.tag_entity.classname == "csqcmodel") + if(this.tag_entity.classname == "ENT_CLIENT_MODEL") { CSQCModel_Hook_PreDraw(this.tag_entity, (this.tag_entity.isplayermodel & ISPLAYER_CLIENT)); } @@ -621,7 +617,7 @@ void CSQCModel_Hook_PreDraw(entity this, bool isplayer) return; this.csqcmodel_predraw_run = framecount; - if(!this.modelindex || this.model == "null" || this.alpha < 0) + if(!this.modelindex || this.model == "null") { this.drawmask = 0; if(this.snd_looping > 0) @@ -677,6 +673,8 @@ void CSQCModel_Hook_PreDraw(entity this, bool isplayer) tracebox(this.origin + '0 0 1', this.mins, this.maxs, this.origin - '0 0 4', MOVE_NORMAL, this); if(trace_startsolid || trace_fraction < 1) onground = 1; + // predicted clients handle smoothing in the prediction code + this.origin = CSQCModel_ApplyStairSmoothing(this, onground, this.origin); } animdecide_load_if_needed(this); animdecide_setimplicitstate(this, onground); @@ -739,6 +737,7 @@ void CSQCModel_Hook_PostUpdate(entity this, bool isnew, bool isplayer, bool islo bool is_playermodel = (substring(this.model, 0, 14) == "models/player/" || substring(this.model, 0, 17) == "models/ok_player/" || (substring(this.model, 0, 16) == "models/monsters/" && (this.isplayermodel & BIT(1)))); this.isplayermodel = BITSET(this.isplayermodel, ISPLAYER_MODEL, is_playermodel); + this.csqcmodel_isdead = false; // workaround for dead players who become a spectator // save values set by server if((this.isplayermodel & ISPLAYER_MODEL))