-
+.float isplayermodel;
// FEATURE: LOD
.float lodmodelindex0;
{
print(sprintf(_("Trying to use non existing model %s. "), modelname));
modelname = cvar_defstring("_cl_playermodel");
- print(sprintf(_("Reverted to %s."), modelname));
+ print(sprintf(_("Reverted to %s.\n"), modelname));
}
// set modelindex
.string forceplayermodels_savemodel;
.float forceplayermodels_savemodelindex;
.float forceplayermodels_saveskin;
+.float forceplayermodels_savecolormap;
void CSQCPlayer_ForceModel_PreUpdate(void)
{
self.model = self.forceplayermodels_savemodel;
self.modelindex = self.forceplayermodels_savemodelindex;
self.skin = self.forceplayermodels_saveskin;
+ self.colormap = self.forceplayermodels_savecolormap;
}
void CSQCPlayer_ForceModel_PostUpdate(void)
{
self.forceplayermodels_savemodel = self.model;
self.forceplayermodels_savemodelindex = self.modelindex;
self.forceplayermodels_saveskin = self.skin;
+ self.forceplayermodels_savecolormap = self.colormap;
}
void CSQCPlayer_ForceModel_Apply(float islocalplayer)
{
self.modelindex = self.forceplayermodels_savemodelindex;
self.skin = self.forceplayermodels_saveskin;
}
+
+ // forceplayercolors too
+ if(!teamplay)
+ if(autocvar_cl_forceplayercolors)
+ self.colormap = player_localnum + 1;
}
// FEATURE: fallback frames
self.frame3 = self.csqcmodel_saveframe3;
self.frame4 = self.csqcmodel_saveframe4;
}
-void CSQCPlayer_FallbackFrame_PostUpdate(void)
+void CSQCPlayer_FallbackFrame_PostUpdate(float isnew)
{
self.csqcmodel_saveframe = self.frame;
self.csqcmodel_saveframe2 = self.frame2;
self.csqcmodel_saveframe3 = self.frame3;
self.csqcmodel_saveframe4 = self.frame4;
+
+ // hack for death animations: set their frametime to zero in case a
+ // player "pops in"
+ if(isnew)
+ {
+#define FIX_FRAMETIME(f,ft) \
+ switch(self.f) \
+ { \
+ case 0: \
+ case 1: \
+ self.ft = 0; \
+ break; \
+ }
+ FIX_FRAMETIME(frame, frame1time)
+ FIX_FRAMETIME(frame2, frame2time)
+ FIX_FRAMETIME(frame3, frame3time)
+ FIX_FRAMETIME(frame4, frame4time)
+ }
}
float CSQCPlayer_FallbackFrame(float f)
{
float EF_DIMLIGHT = 8;
float EF_DOUBLESIDED = 32768;
float EF_NOSELFSHADOW = 65536;
+float EF_DYNAMICMODELLIGHT = 131072;
float MF_ROCKET = 1; // leave a trail
float MF_GRENADE = 2; // leave a trail
float MF_GIB = 4; // leave a trail
adddynamiclight(self.origin, 400, '3 3 3');
if(eff & EF_DIMLIGHT)
adddynamiclight(self.origin, 200, '1.5 1.5 1.5');
- if((eff & EF_NODRAW) || (self.csqcmodel_effects & CSQCMODEL_EF_INVISIBLE))
+ if((eff & EF_NODRAW) || (self.csqcmodel_effects & CSQCMODEL_EF_INVISIBLE) || (self.alpha < 0))
self.drawmask = 0;
if(eff & EF_ADDITIVE)
self.renderflags |= RF_ADDITIVE;
self.effects |= EF_DOUBLESIDED;
if(eff & EF_NOSELFSHADOW)
self.effects |= EF_NOSELFSHADOW;
- // ignoring EF_UNUSED17, EF_UNUSED18, EF_UNUSED19, EF_RESTARTANIM_BIT, EF_TELEPORT_BIT, EF_LOWPRECISION
+ if(eff & EF_DYNAMICMODELLIGHT)
+ self.renderflags |= RF_DYNAMICMODELLIGHT;
+ // ignoring EF_UNUSED18, EF_UNUSED19, EF_RESTARTANIM_BIT, EF_TELEPORT_BIT, EF_LOWPRECISION
if(self.csqcmodel_modelflags & MF_ROCKET)
self.traileffect = particleeffectnum("TR_ROCKET");
if(self.csqcmodel_modelflags & MF_GRENADE)
else
self.drawmask = MASK_NORMAL;
- if(isplayer)
+ if(self.isplayermodel) // this checks if it's a player MODEL!
{
CSQCPlayer_GlowMod_Apply();
CSQCPlayer_ForceModel_Apply(islocalplayer);
CSQCPlayer_FallbackFrame_Apply();
}
- if(!isplayer)
+ if(!isplayer) // this checks if it's a player SLOT!
CSQCModel_AutoTagIndex_Apply();
CSQCModel_Effects_Apply();
}
-void CSQCModel_Hook_PreUpdate(float isplayer, float islocalplayer)
+void CSQCModel_Hook_PreUpdate(float isnew, float isplayer, float islocalplayer)
{
+ // revert to values from server
CSQCModel_Effects_PreUpdate();
- if(isplayer)
+ if(self.isplayermodel)
{
- // revert to values from server
CSQCPlayer_FallbackFrame_PreUpdate();
CSQCPlayer_ForceModel_PreUpdate();
}
}
-void CSQCModel_Hook_PostUpdate(float isplayer, float islocalplayer)
+void CSQCModel_Hook_PostUpdate(float isnew, float isplayer, float islocalplayer)
{
- if(isplayer)
+ // is it a player model? (shared state)
+ self.isplayermodel = (substring(self.model, 0, 14) == "models/player/");
+
+ // save values set by server
+ if(self.isplayermodel)
{
- // save values set by server
CSQCPlayer_ForceModel_PostUpdate();
- CSQCPlayer_FallbackFrame_PostUpdate();
+ CSQCPlayer_FallbackFrame_PostUpdate(isnew);
}
CSQCModel_Effects_PostUpdate();
}