Add r_nolerp_list (matching QS) for people who insist on breaking lerping on eg wall torches. Also add a dupe cvar name to provide compat with QS's r_noshadow_list.
This commit is contained in:
parent
5dba16de0d
commit
bb9f7eb51a
5 changed files with 36 additions and 13 deletions
|
@ -4303,6 +4303,12 @@ void CL_LinkPacketEntities (void)
|
||||||
Con_DPrintf("Bad modelindex (%i)\n", state->modelindex);
|
Con_DPrintf("Bad modelindex (%i)\n", state->modelindex);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (model->loadstate != MLS_LOADED)
|
||||||
|
{
|
||||||
|
if (model->loadstate == MLS_NOTLOADED)
|
||||||
|
Mod_LoadModel(model, MLV_WARN);
|
||||||
|
continue; //still waiting for it to load, don't poke anything here
|
||||||
|
}
|
||||||
|
|
||||||
//DP extension. .modelflags (which is sent in the high parts of effects) allows to specify exactly the q1-compatible flags.
|
//DP extension. .modelflags (which is sent in the high parts of effects) allows to specify exactly the q1-compatible flags.
|
||||||
//the extra bit allows for setting to 0.
|
//the extra bit allows for setting to 0.
|
||||||
|
|
|
@ -1992,7 +1992,7 @@ qboolean Alias_GAliasBuildMesh(mesh_t *mesh, vbo_t **vbop, galiasinfo_t *inf, in
|
||||||
frame1=floor(lerp);
|
frame1=floor(lerp);
|
||||||
frame2=frame1+1;
|
frame2=frame1+1;
|
||||||
lerp-=frame1;
|
lerp-=frame1;
|
||||||
if (r_noframegrouplerp.ival)
|
if (r_noframegrouplerp.ival || (e->model->engineflags&MDLF_NOLERP))
|
||||||
lerp = 0;
|
lerp = 0;
|
||||||
if (g1->loop)
|
if (g1->loop)
|
||||||
{
|
{
|
||||||
|
@ -2006,7 +2006,15 @@ qboolean Alias_GAliasBuildMesh(mesh_t *mesh, vbo_t **vbop, galiasinfo_t *inf, in
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else //don't bother with a four way lerp. Yeah, this will produce jerkyness with models with just framegroups.
|
else //don't bother with a four way lerp. Yeah, this will produce jerkyness with models with just framegroups.
|
||||||
{ //FIXME: find the two poses with the strongest influence.
|
{
|
||||||
|
if (e->model->engineflags&MDLF_NOLERP)
|
||||||
|
{
|
||||||
|
if (lerp > 0.5)
|
||||||
|
g2 = g1;
|
||||||
|
else
|
||||||
|
g1 = g2;
|
||||||
|
}
|
||||||
|
//FIXME: find the two poses with the strongest influence.
|
||||||
frame1=0;
|
frame1=0;
|
||||||
frame2=0;
|
frame2=0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2185,7 +2185,7 @@ void R_DrawGAliasShadowVolume(entity_t *e, vec3_t lightpos, float radius)
|
||||||
if (qrenderer != QR_OPENGL)
|
if (qrenderer != QR_OPENGL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (clmodel->engineflags & (MDLF_FLAME | MDLF_BOLT))
|
if (clmodel->engineflags & MDLF_NOSHADOWS)
|
||||||
return;
|
return;
|
||||||
if (r_noaliasshadows.ival)
|
if (r_noaliasshadows.ival)
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -43,8 +43,9 @@ cvar_t mod_lightpoint_distance = CVARD("mod_lightpoint_distance", "8192", "Th
|
||||||
#ifdef SPRMODELS
|
#ifdef SPRMODELS
|
||||||
cvar_t r_sprite_backfacing = CVARD ("r_sprite_backfacing", "0", "Make oriented sprites face backwards relative to their orientation, for compat with q1.");
|
cvar_t r_sprite_backfacing = CVARD ("r_sprite_backfacing", "0", "Make oriented sprites face backwards relative to their orientation, for compat with q1.");
|
||||||
#endif
|
#endif
|
||||||
|
cvar_t r_nolerp_list = CVARFD ("r_nolerp_list"/*qs*/, "", CVAR_RENDERERLATCH, "Models in this list will not interpolate. Any models included here should be considered bad.");
|
||||||
#ifdef RTLIGHTS
|
#ifdef RTLIGHTS
|
||||||
cvar_t r_noEntityCastShadowList = CVARD ("r_noEntityCastShadowList", "progs/missile.mdl,progs/flame.mdl,progs/flame2.mdl,progs/lavaball.mdl,progs/grenade.mdl,progs/spike.mdl,progs/s_spike.mdl,progs/laser.mdl,progs/lspike.mdl,progs/candle.mdl", "Models in this list will not cast shadows.");
|
cvar_t r_noshadow_list = CVARAFD ("r_noshadow_list"/*qs*/, "r_noEntityCastShadowList", "progs/missile.mdl,progs/flame.mdl,progs/flame2.mdl,progs/lavaball.mdl,progs/grenade.mdl,progs/spike.mdl,progs/s_spike.mdl,progs/laser.mdl,progs/lspike.mdl,progs/candle.mdl", CVAR_RENDERERLATCH, "Models in this list will not cast shadows.");
|
||||||
#endif
|
#endif
|
||||||
#ifdef SERVERONLY
|
#ifdef SERVERONLY
|
||||||
cvar_t gl_overbright, gl_specular, gl_load24bit, r_replacemodels, gl_miptexLevel, r_fb_bmodels; //all of these can/should default to 0
|
cvar_t gl_overbright, gl_specular, gl_load24bit, r_replacemodels, gl_miptexLevel, r_fb_bmodels; //all of these can/should default to 0
|
||||||
|
@ -676,8 +677,9 @@ void Mod_Init (qboolean initial)
|
||||||
Cvar_Register(&mod_lightpoint_distance, NULL);
|
Cvar_Register(&mod_lightpoint_distance, NULL);
|
||||||
Cvar_Register (&r_meshpitch, "Gamecode");
|
Cvar_Register (&r_meshpitch, "Gamecode");
|
||||||
Cvar_Register (&r_meshroll, "Gamecode");
|
Cvar_Register (&r_meshroll, "Gamecode");
|
||||||
|
Cvar_Register(&r_nolerp_list, "Graphical Nicaties");
|
||||||
#ifdef RTLIGHTS
|
#ifdef RTLIGHTS
|
||||||
Cvar_Register(&r_noEntityCastShadowList, "Graphical Nicaties");
|
Cvar_Register(&r_noshadow_list, "Graphical Nicaties");
|
||||||
#endif
|
#endif
|
||||||
Cmd_AddCommandD("sv_saveentfile", Mod_SaveEntFile_f, "Dumps a copy of the map's entities to disk, so that it can be edited and used as a replacement for slightly customised maps.");
|
Cmd_AddCommandD("sv_saveentfile", Mod_SaveEntFile_f, "Dumps a copy of the map's entities to disk, so that it can be edited and used as a replacement for slightly customised maps.");
|
||||||
Cmd_AddCommandD("mod_showent", Mod_ShowEnt_f, "Allows you to quickly search through a map's entities.");
|
Cmd_AddCommandD("mod_showent", Mod_ShowEnt_f, "Allows you to quickly search through a map's entities.");
|
||||||
|
@ -1140,7 +1142,7 @@ static void Mod_LoadModelWorker (void *ctx, void *data, size_t a, size_t b)
|
||||||
|| !strcmp(mod->publicname, "models/cflmtrch.mdl") //hexen2 wall torch
|
|| !strcmp(mod->publicname, "models/cflmtrch.mdl") //hexen2 wall torch
|
||||||
#endif
|
#endif
|
||||||
)
|
)
|
||||||
mod->engineflags |= MDLF_FLAME;
|
mod->engineflags |= MDLF_FLAME|MDLF_NOSHADOWS;
|
||||||
else if (!strcmp(mod->publicname, "progs/bolt.mdl")
|
else if (!strcmp(mod->publicname, "progs/bolt.mdl")
|
||||||
|| !strcmp(mod->publicname, "progs/bolt2.mdl")
|
|| !strcmp(mod->publicname, "progs/bolt2.mdl")
|
||||||
|| !strcmp(mod->publicname, "progs/bolt3.mdl")
|
|| !strcmp(mod->publicname, "progs/bolt3.mdl")
|
||||||
|
@ -1151,7 +1153,7 @@ static void Mod_LoadModelWorker (void *ctx, void *data, size_t a, size_t b)
|
||||||
|| !strcmp(mod->publicname, "models/stice.mdl")
|
|| !strcmp(mod->publicname, "models/stice.mdl")
|
||||||
#endif
|
#endif
|
||||||
)
|
)
|
||||||
mod->engineflags |= MDLF_BOLT;
|
mod->engineflags |= MDLF_NOSHADOWS;
|
||||||
else if (!strcmp(mod->publicname, "progs/backpack.mdl"))
|
else if (!strcmp(mod->publicname, "progs/backpack.mdl"))
|
||||||
mod->engineflags |= MDLF_NOTREPLACEMENTS;
|
mod->engineflags |= MDLF_NOTREPLACEMENTS;
|
||||||
else if (!strcmp(mod->publicname, "progs/eyes.mdl"))
|
else if (!strcmp(mod->publicname, "progs/eyes.mdl"))
|
||||||
|
@ -1368,13 +1370,20 @@ model_t *Mod_LoadModel (model_t *mod, enum mlverbosity_e verbose)
|
||||||
{
|
{
|
||||||
if (mod->loadstate == MLS_NOTLOADED && *mod->name != '*')
|
if (mod->loadstate == MLS_NOTLOADED && *mod->name != '*')
|
||||||
{
|
{
|
||||||
#ifdef RTLIGHTS
|
const char *s = strstr(r_nolerp_list.string, mod->publicname);
|
||||||
char *s = strstr(r_noEntityCastShadowList.string, mod->publicname);
|
|
||||||
COM_AssertMainThread("Mod_LoadModel");
|
COM_AssertMainThread("Mod_LoadModel");
|
||||||
if (s)
|
if (s)
|
||||||
{
|
{
|
||||||
size_t l = strlen(mod->publicname);
|
size_t l = strlen(mod->publicname);
|
||||||
if ((s == r_noEntityCastShadowList.string || s[-1]==',') && (s[l] == 0 || s[l] == ','))
|
if ((s == r_nolerp_list.string || s[-1]==',') && (s[l] == 0 || s[l] == ','))
|
||||||
|
mod->engineflags |= MDLF_NOLERP;
|
||||||
|
}
|
||||||
|
#ifdef RTLIGHTS
|
||||||
|
s = strstr(r_noshadow_list.string, mod->publicname);
|
||||||
|
if (s)
|
||||||
|
{
|
||||||
|
size_t l = strlen(mod->publicname);
|
||||||
|
if ((s == r_noshadow_list.string || s[-1]==',') && (s[l] == 0 || s[l] == ','))
|
||||||
mod->engineflags |= MDLF_NOSHADOWS;
|
mod->engineflags |= MDLF_NOSHADOWS;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -972,6 +972,7 @@ typedef struct model_s
|
||||||
char name[MAX_QPATH]; //actual name on disk
|
char name[MAX_QPATH]; //actual name on disk
|
||||||
char publicname[MAX_QPATH]; //name that the gamecode etc sees
|
char publicname[MAX_QPATH]; //name that the gamecode etc sees
|
||||||
int datasequence; //if it gets old enough, we can purge it.
|
int datasequence; //if it gets old enough, we can purge it.
|
||||||
|
int engineflags; //
|
||||||
int loadstate; //MLS_
|
int loadstate; //MLS_
|
||||||
qboolean tainted; // differs from the server's version. this model will be invisible as a result, to avoid spiked models.
|
qboolean tainted; // differs from the server's version. this model will be invisible as a result, to avoid spiked models.
|
||||||
qboolean pushdepth; // bsp submodels have this flag set so you don't get z fighting on co-planar surfaces.
|
qboolean pushdepth; // bsp submodels have this flag set so you don't get z fighting on co-planar surfaces.
|
||||||
|
@ -986,7 +987,6 @@ typedef struct model_s
|
||||||
synctype_t synctype;
|
synctype_t synctype;
|
||||||
|
|
||||||
int flags;
|
int flags;
|
||||||
int engineflags;
|
|
||||||
int particleeffect;
|
int particleeffect;
|
||||||
int particletrail;
|
int particletrail;
|
||||||
int traildefaultindex;
|
int traildefaultindex;
|
||||||
|
@ -1135,10 +1135,10 @@ typedef struct model_s
|
||||||
#define MDLF_FLAME 0x0020 // can be excluded with r_drawflame, fullbright render hack
|
#define MDLF_FLAME 0x0020 // can be excluded with r_drawflame, fullbright render hack
|
||||||
#define MDLF_DOCRC 0x0040 // model needs CRC built
|
#define MDLF_DOCRC 0x0040 // model needs CRC built
|
||||||
#define MDLF_NEEDOVERBRIGHT 0x0080 // only overbright these models with gl_overbright_all set
|
#define MDLF_NEEDOVERBRIGHT 0x0080 // only overbright these models with gl_overbright_all set
|
||||||
#define MDLF_BOLT 0x0100 // doesn't produce shadows
|
#define MDLF_NOSHADOWS 0x0100 // doesn't produce shadows for one reason or another
|
||||||
#define MDLF_NOTREPLACEMENTS 0x0200 // can be considered a cheat, disable texture replacements
|
#define MDLF_NOTREPLACEMENTS 0x0200 // can be considered a cheat, disable texture replacements
|
||||||
#define MDLF_EZQUAKEFBCHEAT 0x0400 // this is a blatent cheat, one that can disadvantage us fairly significantly if we don't support it.
|
#define MDLF_EZQUAKEFBCHEAT 0x0400 // this is a blatent cheat, one that can disadvantage us fairly significantly if we don't support it.
|
||||||
#define MDLF_NOSHADOWS 0x0800 // do not cast shadows from this entity, ever.
|
#define MDLF_NOLERP 0x0800 // doesn't lerp, ever. for dodgy models that don't scale to nothingness before jumping.
|
||||||
#define MDLF_RECALCULATERAIN 0x1000 // particles changed, recalculate any sky polys
|
#define MDLF_RECALCULATERAIN 0x1000 // particles changed, recalculate any sky polys
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
Loading…
Reference in a new issue