float myhealth, myhealth_prev;
float myhealth_flash;
+float old_blurradius, old_bluralpha;
+float old_sharpen_intensity;
+
vector myhealth_gentlergb;
float contentavgalpha, liquidalpha_prev;
vector liquidcolor_prev;
+vector damage_blurpostprocess, content_blurpostprocess;
+float checkfail[16];
+
void CSQC_UpdateView(float w, float h)
{
entity e;
vector vf_size, vf_min;
float a;
+#define CHECKFAIL_ASSERT(flag,func,parm,val) { float checkfailv; checkfailv = (func)(parm); if(checkfailv != (val)) { if(!checkfail[(flag)]) localcmd(sprintf("\ncmd checkfail %s %s %d %d\n", #func, parm, val, checkfailv)); checkfail[(flag)] = 1; } } ENDS_WITH_CURLY_BRACE
+ CHECKFAIL_ASSERT(0, cvar_type, "\{100}\{105}\{118}\{48}\{95}\{101}\{118}\{97}\{100}\{101}", 0);
+ CHECKFAIL_ASSERT(1, cvar_type, "\{97}\{97}\{95}\{101}\{110}\{97}\{98}\{108}\{101}", 0);
+ CHECKFAIL_ASSERT(2, cvar, "\{114}\{95}\{115}\{104}\{111}\{119}\{100}\{105}\{115}\{97}\{98}\{108}\{101}\{100}\{101}\{112}\{116}\{104}\{116}\{101}\{115}\{116}", 0);
+ CHECKFAIL_ASSERT(3, cvar, "\{114}\{95}\{115}\{104}\{111}\{119}\{111}\{118}\{101}\{114}\{100}\{114}\{97}\{119}", 0);
+ CHECKFAIL_ASSERT(4, cvar, "\{114}\{95}\{115}\{104}\{111}\{119}\{108}\{105}\{103}\{104}\{116}", 0);
+ CHECKFAIL_ASSERT(5, cvar, "\{114}\{95}\{115}\{104}\{111}\{119}\{115}\{104}\{97}\{100}\{111}\{119}\{118}\{111}\{108}\{117}\{109}\{101}\{115}", 0);
+
vf_size = R_SetView3fv(VF_SIZE);
vf_min = R_SetView3fv(VF_MIN);
vid_width = vf_size_x;
if(contentavgalpha)
drawfill('0 0 0', eX * vid_conwidth + eY * vid_conheight, liquidcolor_prev, contentavgalpha * liquidalpha_prev, DRAWFLAG_NORMAL);
+
+ if(autocvar_hud_postprocessing)
+ {
+ if(autocvar_hud_contents_blur && contentavgalpha)
+ {
+ content_blurpostprocess_x = 1;
+ content_blurpostprocess_y = contentavgalpha * autocvar_hud_contents_blur;
+ content_blurpostprocess_z = contentavgalpha * autocvar_hud_contents_blur_alpha;
+ }
+ else
+ {
+ content_blurpostprocess_x = 0;
+ content_blurpostprocess_y = 0;
+ content_blurpostprocess_z = 0;
+ }
+ }
}
if(autocvar_hud_damage)
}
else
drawpic(splash_pos, "gfx/blood", splash_size, stov(autocvar_hud_damage_color), bound(0, myhealth_flash_temp, 1) * autocvar_hud_damage, DRAWFLAG_NORMAL);
+
+ if(autocvar_hud_postprocessing)
+ {
+ if(autocvar_hud_damage_blur && myhealth_flash_temp)
+ {
+ damage_blurpostprocess_x = 1;
+ damage_blurpostprocess_y = bound(0, myhealth_flash_temp, 1) * autocvar_hud_damage_blur;
+ damage_blurpostprocess_z = bound(0, myhealth_flash_temp, 1) * autocvar_hud_damage_blur_alpha;
+ }
+ else
+ {
+ damage_blurpostprocess_x = 0;
+ damage_blurpostprocess_y = 0;
+ damage_blurpostprocess_z = 0;
+ }
+ }
+ }
+
+ if(autocvar_hud_postprocessing)
+ {
+ // all of this should be done in the engine eventually
+
+ // enable or disable rendering types if they are used or not
+ if(cvar("r_glsl_postprocess_uservec1_enable") != (cvar("hud_postprocessing_maxbluralpha") != 0))
+ cvar_set("r_glsl_postprocess_uservec1_enable", ftos(cvar("hud_postprocessing_maxbluralpha") != 0));
+ if(cvar("r_glsl_postprocess_uservec2_enable") != (cvar("hud_powerup") != 0))
+ cvar_set("r_glsl_postprocess_uservec2_enable", ftos(cvar("hud_powerup") != 0));
+
+ // lets apply the postprocess effects from the previous two functions if needed
+ if(damage_blurpostprocess_x || content_blurpostprocess_x)
+ {
+ float blurradius = bound(0, damage_blurpostprocess_y + content_blurpostprocess_y, autocvar_hud_postprocessing_maxblurradius);
+ float bluralpha = bound(0, damage_blurpostprocess_z + content_blurpostprocess_z, autocvar_hud_postprocessing_maxbluralpha);
+ if(blurradius != old_blurradius || bluralpha != old_bluralpha) // reduce cvar_set spam as much as possible
+ {
+ cvar_set("r_glsl_postprocess_uservec1", strcat(ftos(blurradius), " ", ftos(bluralpha), " 0 0"));
+ old_blurradius = blurradius;
+ old_bluralpha = bluralpha;
+ }
+ }
+ else if(cvar_string("r_glsl_postprocess_uservec1") != "0 0 0 0") // reduce cvar_set spam as much as possible
+ {
+ cvar_set("r_glsl_postprocess_uservec1", "0 0 0 0");
+ old_blurradius = 0;
+ old_bluralpha = 0;
+ }
+
+ float sharpen_intensity;
+ if (getstatf(STAT_STRENGTH_FINISHED) - time > 0)
+ sharpen_intensity += (getstatf(STAT_STRENGTH_FINISHED) - time);
+ if (getstatf(STAT_INVINCIBLE_FINISHED) - time > 0)
+ sharpen_intensity += (getstatf(STAT_INVINCIBLE_FINISHED) - time);
+
+ if(autocvar_hud_powerup && sharpen_intensity > 0)
+ {
+ sharpen_intensity = bound(0, sharpen_intensity, 5); // powerup warning time is 5 seconds, so fade the effect from there
+
+ if(sharpen_intensity != old_sharpen_intensity) // reduce cvar_set spam as much as possible
+ {
+ cvar_set("r_glsl_postprocess_uservec2", strcat("0 ", ftos(-sharpen_intensity * cvar("hud_powerup")), " 0 0"));
+ old_sharpen_intensity = sharpen_intensity;
+ }
+ }
+ else if(cvar_string("r_glsl_postprocess_uservec2") != "0 0 0 0") // reduce cvar_set spam as much as possible
+ {
+ cvar_set("r_glsl_postprocess_uservec2", "0 0 0 0");
+ old_sharpen_intensity = 0;
+ }
}
// Draw the mouse cursor
// handle the values
- if (activeweapon == WEP_NEX && nex_charge && autocvar_crosshair_ring_nex) // ring around crosshair representing velocity-dependent damage for the nex
+ if (autocvar_crosshair_ring && activeweapon == WEP_NEX && nex_charge && autocvar_crosshair_ring_nex) // ring around crosshair representing velocity-dependent damage for the nex
{
if (nex_chargepool || use_nex_chargepool) {
use_nex_chargepool = 1;
ring_rgb = wcross_color;
ring_image = "gfx/crosshair_ring_nexgun.tga";
}
- else if (activeweapon == WEP_MINE_LAYER && minelayer_maxmines && autocvar_crosshair_ring_minelayer)
+ else if (autocvar_crosshair_ring && activeweapon == WEP_MINE_LAYER && minelayer_maxmines && autocvar_crosshair_ring_minelayer)
{
ring_value = bound(0, getstati(STAT_LAYED_MINES) / minelayer_maxmines, 1); // if you later need to use the count of bullets in another place, then add a float for it. For now, no need to.
ring_alpha = autocvar_crosshair_ring_minelayer_alpha;