]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/client/csqcmodel_hooks.qc
Merge branch 'master' into develop
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / csqcmodel_hooks.qc
index f0ff55e8ab56a09021c507bfd963d6a72a19a3dd..a4f81a3304c426e2ea0385c1266546e427bf4d1d 100644 (file)
@@ -1,19 +1,17 @@
 #include "csqcmodel_hooks.qh"
-#include "autocvars.qh"
-#include "main.qh"
+
 #include <client/mutators/_mod.qh>
-#include <client/main.qh>
-#include "player_skeleton.qh"
-#include "weapons/projectile.qh"
+#include <client/player_skeleton.qh>
+#include <client/weapons/projectile.qh>
 #include <common/animdecide.qh>
+#include <common/effects/all.inc>
+#include <common/effects/all.qh>
 #include <common/ent_cs.qh>
 #include <common/gamemodes/_mod.qh>
 #include <common/mapinfo.qh>
 #include <common/physics/movetypes/movetypes.qh>
 #include <common/physics/player.qh>
 #include <common/viewloc.qh>
-#include <common/effects/all.qh>
-#include <common/effects/all.inc>
 #include <lib/csqcmodel/cl_model.qh>
 #include <lib/csqcmodel/cl_player.qh>
 #include <lib/csqcmodel/interpolate.qh>
@@ -301,7 +299,7 @@ void CSQCPlayer_ModelAppearance_Apply(entity this, bool islocalplayer)
 
        // GLOWMOD AND DEATH FADING
        if(this.colormap > 0)
-               this.glowmod = colormapPaletteColor(((this.colormap >= 1024) ? this.colormap : entcs_GetClientColors(this.colormap - 1)) & 0x0F, true) * 2;
+               this.glowmod = colormapPaletteColor(((this.colormap >= 1024) ? this.colormap : entcs_GetClientColors(this.colormap - 1)) & 0x0F, true);
        else
                this.glowmod = '1 1 1';
 
@@ -319,6 +317,10 @@ void CSQCPlayer_ModelAppearance_Apply(entity this, bool islocalplayer)
                }
        }
 
+       // don't let the engine increase player's glowmod
+       if (autocvar_r_hdr_glowintensity > 1)
+               this.glowmod /= autocvar_r_hdr_glowintensity;
+
        //printf("CSQCPlayer_ModelAppearance_Apply(): state = %s, colormap = %f, glowmod = %s\n", (this.csqcmodel_isdead ? "DEAD" : "ALIVE"), this.colormap, vtos(this.glowmod));
 }
 
@@ -424,7 +426,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));
                }
@@ -620,7 +622,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)
@@ -676,6 +678,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);
@@ -738,6 +742,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))