add r_noshadow_list cvar (from MarkV), removing hardcoded list of models to not have shadows

git-svn-id: svn://svn.code.sf.net/p/quakespasm/code/trunk/quakespasm@1210 af15c1b1-3010-417e-b628-4374ebc0bcbd
This commit is contained in:
Eric Wasylishen 2015-05-18 18:00:49 +00:00
parent 2e2b110ecb
commit 95e0be7afe
3 changed files with 35 additions and 26 deletions

View file

@ -2399,25 +2399,15 @@ void Mod_CalcAliasBounds (aliashdr_t *a)
loadmodel->ymaxs[2] = loadmodel->maxs[2];
}
/*
=================
Mod_SetExtraFlags -- johnfitz -- set up extra flags that aren't in the mdl
=================
*/
void Mod_SetExtraFlags (qmodel_t *mod)
static qboolean
nameInList(const char *list, const char *name)
{
extern cvar_t r_nolerp_list;
const char *s;
char tmp[MAX_QPATH];
int i;
if (!mod || !mod->name || mod->type != mod_alias)
return;
s = list;
mod->flags &= 0xFF; //only preserve first byte
// nolerp flag
s = r_nolerp_list.string;
while (*s)
{
// make a copy until the next comma or end of string
@ -2430,23 +2420,37 @@ void Mod_SetExtraFlags (qmodel_t *mod)
}
tmp[i] = '\0';
//compare it to the model name
if (!strcmp(mod->name, tmp))
if (!strcmp(name, tmp))
{
mod->flags |= MOD_NOLERP;
break;
return true;
}
//search forwards to the next comma or end of string
while (*s && *s == ',')
s++;
}
return false;
}
// noshadow flag (TODO: make this a cvar list)
if (!strcmp (mod->name, "progs/flame2.mdl") ||
!strcmp (mod->name, "progs/flame.mdl") ||
!strcmp (mod->name, "progs/bolt1.mdl") ||
!strcmp (mod->name, "progs/bolt2.mdl") ||
!strcmp (mod->name, "progs/bolt3.mdl") ||
!strcmp (mod->name, "progs/laser.mdl"))
/*
=================
Mod_SetExtraFlags -- johnfitz -- set up extra flags that aren't in the mdl
=================
*/
void Mod_SetExtraFlags (qmodel_t *mod)
{
extern cvar_t r_nolerp_list, r_noshadow_list;
if (!mod || !mod->name || mod->type != mod_alias)
return;
mod->flags &= 0xFF; //only preserve first byte
// nolerp flag
if (nameInList(r_nolerp_list.string, mod->name))
mod->flags |= MOD_NOLERP;
// noshadow flag
if (nameInList(r_noshadow_list.string, mod->name))
mod->flags |= MOD_NOSHADOW;
// fullbright hack (TODO: make this a cvar list)

View file

@ -96,6 +96,8 @@ cvar_t r_showbboxes = {"r_showbboxes", "0", CVAR_NONE};
cvar_t r_lerpmodels = {"r_lerpmodels", "1", CVAR_NONE};
cvar_t r_lerpmove = {"r_lerpmove", "1", CVAR_NONE};
cvar_t r_nolerp_list = {"r_nolerp_list", "progs/flame.mdl,progs/flame2.mdl,progs/braztall.mdl,progs/brazshrt.mdl,progs/longtrch.mdl,progs/flame_pyre.mdl,progs/v_saw.mdl,progs/v_xfist.mdl,progs/h2stuff/newfire.mdl", CVAR_NONE};
cvar_t r_noshadow_list = {"r_noshadow_list", "progs/flame2.mdl,progs/flame.mdl,progs/bolt1.mdl,progs/bolt2.mdl,progs/bolt3.mdl,progs/laser.mdl", CVAR_NONE};
extern cvar_t r_vfog;
//johnfitz

View file

@ -44,6 +44,7 @@ extern cvar_t r_showbboxes;
extern cvar_t r_lerpmodels;
extern cvar_t r_lerpmove;
extern cvar_t r_nolerp_list;
extern cvar_t r_noshadow_list;
//johnfitz
extern cvar_t gl_zfix; // QuakeSpasm z-fighting fix
@ -98,10 +99,10 @@ static void R_VisChanged (cvar_t *var)
/*
===============
R_NoLerpList_f -- johnfitz -- called when r_nolerp_list cvar changes
R_Model_ExtraFlags_List_f -- johnfitz -- called when r_nolerp_list or r_noshadow_list cvar changes
===============
*/
static void R_NoLerpList_f (cvar_t *var)
static void R_Model_ExtraFlags_List_f (cvar_t *var)
{
int i;
for (i=0; i < MAX_MODELS; i++)
@ -166,7 +167,9 @@ void R_Init (void)
Cvar_RegisterVariable (&r_lerpmodels);
Cvar_RegisterVariable (&r_lerpmove);
Cvar_RegisterVariable (&r_nolerp_list);
Cvar_SetCallback (&r_nolerp_list, R_NoLerpList_f);
Cvar_SetCallback (&r_nolerp_list, R_Model_ExtraFlags_List_f);
Cvar_RegisterVariable (&r_noshadow_list);
Cvar_SetCallback (&r_noshadow_list, R_Model_ExtraFlags_List_f);
//johnfitz
Cvar_RegisterVariable (&gl_zfix); // QuakeSpasm z-fighting fix