#include "csqcmodel_hooks.qh"
#include "autocvars.qh"
-#include "csqcmodel_hooks.qh"
#include "miscfunctions.qh"
#include <client/mutators/_mod.qh>
#include "player_skeleton.qh"
int forceplayermodels_goodmodelindex;
.vector glowmod;
-.vector old_glowmod;
void CSQCPlayer_ModelAppearance_PreUpdate(entity this)
{
{
if(this.csqcmodel_isdead)
{
- // Fade out to black now...
- if(this.old_glowmod == '0 0 0') { this.old_glowmod = this.glowmod; }
- this.colormap = 0;
-
- this.glowmod = this.old_glowmod * bound(0, 1 - (time - this.death_time) / autocvar_cl_deathglow, 1);
- this.glowmod_x = max(this.glowmod.x, 0.0001);
- this.glowmod_y = max(this.glowmod.y, 0.0001);
- this.glowmod_z = max(this.glowmod.z, 0.0001);
+ float min_factor = bound(0, autocvar_cl_deathglow_min, 1);
+ if(this.colormap > 0)
+ min_factor /= 2;
+ float glow_fade = bound(0, 1 - (time - this.death_time) / autocvar_cl_deathglow, 1);
+ this.glowmod *= (min_factor + glow_fade * (1 - min_factor));
+ if (this.glowmod == '0 0 0')
+ this.glowmod.x = 0.000001;
}
- else if(this.old_glowmod != '0 0 0') { this.old_glowmod = '0 0 0'; }
}
//printf("CSQCPlayer_ModelAppearance_Apply(): state = %s, colormap = %f, glowmod = %s\n", (this.csqcmodel_isdead ? "DEAD" : "ALIVE"), this.colormap, vtos(this.glowmod));
// player "pops in"
if(isnew)
{
-#define FIX_FRAMETIME(f,ft) MACRO_BEGIN { \
- if(IS_DEAD_FRAME(this.f) && this.ft != 0 && this.death_time != 0) \
- this.ft = this.death_time; \
-} MACRO_END
+#define FIX_FRAMETIME(f,ft) MACRO_BEGIN \
+ if(IS_DEAD_FRAME(this.f) && this.ft != 0 && this.death_time != 0) \
+ this.ft = this.death_time; \
+MACRO_END
FIX_FRAMETIME(frame, frame1time);
FIX_FRAMETIME(frame2, frame2time);
#ifdef CSQCMODEL_HAVE_TWO_FRAMES
LOG_TRACE("h_ model lacks weapon attachment, but v_ model is attached to it");
}
}
- else if(this.tag_entity.isplayermodel)
+ else if((this.tag_entity.isplayermodel & ISPLAYER_MODEL))
{
skeleton_loadinfo(this.tag_entity);
this.tag_index = this.tag_entity.bone_weapon;
{
// This will be hard to replace with MAKE_VECTORS because it's called as part of the predraw function
// as documented in csprogs.h in the engine. The globals can then be read in many places in the engine.
- // However MR_ROTATE is currently only used in one place - might be possible to get rid of it entirely.
+ // However MF_ROTATE is currently only used in one place - might be possible to get rid of it entirely.
this.renderflags |= RF_USEAXIS;
makevectors(this.angles + '0 100 0' * fmod(time, 3.6));
}
if(!this.modelindex || this.model == "null" || this.alpha < 0)
{
this.drawmask = 0;
+ if(this.snd_looping > 0)
+ {
+ sound(this, this.snd_looping, SND_Null, VOL_BASE, autocvar_cl_jetpack_attenuation);
+ this.snd_looping = 0;
+ }
return;
}
else
this.drawmask = MASK_NORMAL;
- if(this.isplayermodel && this.drawmask) // this checks if it's a player MODEL!
+ if((this.isplayermodel & ISPLAYER_MODEL) && this.drawmask) // this checks if it's a player MODEL!
{
CSQCPlayer_ModelAppearance_Apply(this, (this.isplayermodel & ISPLAYER_LOCAL));
CSQCPlayer_LOD_Apply(this);
this.iflags |= IFLAG_V_ANGLE_X;
// revert to values from server
CSQCModel_Effects_PreUpdate(this);
- if(this.isplayermodel)
+ if((this.isplayermodel & ISPLAYER_MODEL))
{
if(!isplayer)
CSQCPlayer_FallbackFrame_PreUpdate(this);
this.isplayermodel = BITSET(this.isplayermodel, ISPLAYER_MODEL, is_playermodel);
// save values set by server
- if(this.isplayermodel)
+ if((this.isplayermodel & ISPLAYER_MODEL))
{
CSQCPlayer_ModelAppearance_PostUpdate(this);
if(isplayer)