extern cvar_t mod_noshader_default_offsetmapping;
extern cvar_t mod_q3shader_default_offsetmapping;
+extern cvar_t mod_q3shader_default_offsetmapping_bias;
extern cvar_t mod_q3shader_default_polygonoffset;
extern cvar_t mod_q3shader_default_polygonfactor;
void Mod_LoadQ3Shaders(void)
shader.r_water_wateralpha = 1;
shader.offsetmapping = (mod_q3shader_default_offsetmapping.value) ? OFFSETMAPPING_DEFAULT : OFFSETMAPPING_OFF;
shader.offsetscale = 1;
+ shader.offsetbias = bound(0, mod_q3shader_default_offsetmapping_bias.integer, 255);
shader.specularscalemod = 1;
shader.specularpowermod = 1;
shader.biaspolygonoffset = mod_q3shader_default_polygonoffset.value;
// this sets dpshaderkill to true if dpshaderkillifcvar was used, and to false if dpnoshaderkillifcvar was used
else if (((dpshaderkill = !strcasecmp(parameter[0], "dpshaderkillifcvar")) || !strcasecmp(parameter[0], "dpnoshaderkillifcvar")) && numparameters >= 2)
{
- const char *operator = NULL;
+ const char *op = NULL;
if (numparameters >= 3)
- operator = parameter[2];
- if(!operator)
+ op = parameter[2];
+ if(!op)
{
if (Cvar_VariableValue(parameter[1]) != 0.0f)
shader.dpshaderkill = dpshaderkill;
}
- else if (numparameters >= 4 && !strcmp(operator, "=="))
+ else if (numparameters >= 4 && !strcmp(op, "=="))
{
if (Cvar_VariableValue(parameter[1]) == atof(parameter[3]))
shader.dpshaderkill = dpshaderkill;
}
- else if (numparameters >= 4 && !strcmp(operator, "!="))
+ else if (numparameters >= 4 && !strcmp(op, "!="))
{
if (Cvar_VariableValue(parameter[1]) != atof(parameter[3]))
shader.dpshaderkill = dpshaderkill;
}
- else if (numparameters >= 4 && !strcmp(operator, ">"))
+ else if (numparameters >= 4 && !strcmp(op, ">"))
{
if (Cvar_VariableValue(parameter[1]) > atof(parameter[3]))
shader.dpshaderkill = dpshaderkill;
}
- else if (numparameters >= 4 && !strcmp(operator, "<"))
+ else if (numparameters >= 4 && !strcmp(op, "<"))
{
if (Cvar_VariableValue(parameter[1]) < atof(parameter[3]))
shader.dpshaderkill = dpshaderkill;
}
- else if (numparameters >= 4 && !strcmp(operator, ">="))
+ else if (numparameters >= 4 && !strcmp(op, ">="))
{
if (Cvar_VariableValue(parameter[1]) >= atof(parameter[3]))
shader.dpshaderkill = dpshaderkill;
}
- else if (numparameters >= 4 && !strcmp(operator, "<="))
+ else if (numparameters >= 4 && !strcmp(op, "<="))
{
if (Cvar_VariableValue(parameter[1]) <= atof(parameter[3]))
shader.dpshaderkill = dpshaderkill;
}
else
{
- Con_DPrintf("%s parsing warning: unknown dpshaderkillifcvar operator \"%s\", or not enough arguments\n", search->filenames[fileindex], operator);
+ Con_DPrintf("%s parsing warning: unknown dpshaderkillifcvar op \"%s\", or not enough arguments\n", search->filenames[fileindex], op);
}
}
else if (!strcasecmp(parameter[0], "sky") && numparameters >= 2)
{
shader.rtlightambient = atof(parameter[1]);
}
- else if (!strcasecmp(parameter[0], "dpoffsetmapping") && numparameters >= 3)
+ else if (!strcasecmp(parameter[0], "dpoffsetmapping") && numparameters >= 2)
{
if (!strcasecmp(parameter[1], "disable") || !strcasecmp(parameter[1], "none") || !strcasecmp(parameter[1], "off"))
shader.offsetmapping = OFFSETMAPPING_OFF;
- else if (!strcasecmp(parameter[1], "default"))
+ else if (!strcasecmp(parameter[1], "default") || !strcasecmp(parameter[1], "normal"))
shader.offsetmapping = OFFSETMAPPING_DEFAULT;
else if (!strcasecmp(parameter[1], "linear"))
shader.offsetmapping = OFFSETMAPPING_LINEAR;
else if (!strcasecmp(parameter[1], "relief"))
shader.offsetmapping = OFFSETMAPPING_RELIEF;
- shader.offsetscale = atof(parameter[2]);
+ if (numparameters >= 3)
+ shader.offsetscale = atof(parameter[2]);
+ if (numparameters >= 4)
+ shader.offsetbias = bound(0, atoi(parameter[3]), 255);
}
else if (!strcasecmp(parameter[0], "deformvertexes") && numparameters >= 2)
{
// unless later loaded from the shader
texture->offsetmapping = (mod_noshader_default_offsetmapping.value) ? OFFSETMAPPING_DEFAULT : OFFSETMAPPING_OFF;
texture->offsetscale = 1;
+ texture->offsetbias = 0;
texture->specularscalemod = 1;
texture->specularpowermod = 1;
+ texture->rtlightambient = 0;
// WHEN ADDING DEFAULTS HERE, REMEMBER TO SYNC TO SHADER LOADING ABOVE
// HERE, AND Q1BSP LOADING
// JUST GREP FOR "specularscalemod = 1".
Vector2Copy(shader->r_water_waterscroll, texture->r_water_waterscroll);
texture->offsetmapping = shader->offsetmapping;
texture->offsetscale = shader->offsetscale;
+ texture->offsetbias = shader->offsetbias;
texture->specularscalemod = shader->specularscalemod;
texture->specularpowermod = shader->specularpowermod;
texture->rtlightambient = shader->rtlightambient;