seta crosshair_ring_minelayer 1
seta crosshair_ring_minelayer_alpha 0.15
+ seta crosshair_ring_hagar 1
+ seta crosshair_ring_hagar_alpha 0.15
+
seta crosshair_ring_reload 1 "main cvar to enable or disable ammo crosshair rings"
seta crosshair_ring_reload_size 2.5 "reload ring size"
seta crosshair_ring_reload_alpha 0.2 "reload ring alpha"
v_kicktime 0 // how long damage kicks of the view last, default is 0 seconds
gl_polyblend 0 // whether to use screen tints, this has now been replaced by a better system in CSQC
r_motionblur 0 // motion blur value, default is 0
-r_damageblur 0 // motion blur when damaged, default is 0
+r_damageblur 0 // motion blur when damaged, default is 0 (removed in Xonotic)
r_bloom_blur 8
r_bloom_brighten 3
set g_multijump_speed -999999 "Minimum vertical speed a player must have in order to jump again"
// effects
+r_glsl_postprocess 1
r_picmipsprites 0 // Xonotic uses sprites that should never be picmipped (team mate, typing, waypoints)
r_picmipworld 1
gl_picmip_world 0
seta hud_colorflash_alpha 0.5 "starting alpha of the color flash"
seta hud_damage 0.55 "an improved version of gl_polyblend for damage, draw an image instead when hurt"
+seta hud_damage_blur 10 "Use postprocessing to blur the screen when you have taken damage. This can be paired with current hud damage or just used alone. Higher values = more blur"
+seta hud_damage_blur_alpha 0.5 "Amount of alpha to use when merging the blurred layers back into the render. Turning this up higher will remove bloom, so it's best to find a balance"
seta hud_damage_gentle_alpha_multiplier 0.10 "how much to multiply alpha of flash when using the cl_gentle version, it's much more opaque than the non-gentle version"
seta hud_damage_gentle_color "1 0.7 1" "color of flash for cl_gentle version"
seta hud_damage_color "1 0 0" "color of flash"
seta hud_damage_pain_threshold_pulsating_min 0.6 "minimum value when calculating the pulse: max(pulsating_min, fabs(sin(PI * time / period))"
seta hud_damage_pain_threshold_pulsating_period 0.8 "one pulse every X seconds"
+seta hud_powerup 0 "power of the sharpen effect when owning the shield or strength powerups, default is 0.5"
+
+seta hud_postprocessing 1 "enables the ability for effects such as hud_damage_blur and hud_contents to apply a postprocessing method upon the screen - enabling this disables manual editing of the postprocess cvars"
+seta hud_postprocessing_maxbluralpha 0 "maximum alpha which the blur postprocess can be, default is 0.5"
+seta hud_postprocessing_maxblurradius 8 "maximum radius which the blur postprocess can be, default is 8"
+
seta hud_contents 1 "an improved version of gl_polyblend for liquids such as water/lava/slime, draw a filler when inside the liquid"
+seta hud_contents_blur 10 "Use postprocessing to blur the screen when you are inside a liquid. Higher values = more blur"
+seta hud_contents_blur_alpha 0.5 "Amount of alpha to use when merging the blurred layers back into the render. Turning this up higher will remove bloom, so it's best to find a balance"
seta hud_contents_factor 1 "factor at which to multiply the current faded value."
seta hud_contents_fadeintime 0.02 "factor of time it takes for the alpha level to reach normal value when entering the liquid"
seta hud_contents_fadeouttime 0.1 "factor of time it takes for the alpha level to reach normal value when leaving the liquid"
float myhealth, myhealth_prev;
float myhealth_flash;
+float old_blurradius, old_bluralpha;
+float old_sharpen_intensity;
+
vector myhealth_gentlergb;
float contentavgalpha, liquidalpha_prev;
float eventchase_current_distance;
+vector damage_blurpostprocess, content_blurpostprocess;
+
float checkfail[16];
void CSQC_UpdateView(float w, float h)
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
ring_rgb = wcross_color;
ring_image = "gfx/crosshair_ring.tga";
}
+ else if (activeweapon == WEP_HAGAR && getstati(STAT_HAGAR_LOAD) && autocvar_crosshair_ring_hagar)
+ {
+ ring_value = bound(0, getstati(STAT_HAGAR_LOAD) / hagar_maxrockets, 1);
+ ring_alpha = autocvar_crosshair_ring_hagar_alpha;
+ ring_rgb = wcross_color;
+ ring_image = "gfx/crosshair_ring.tga";
+ }
if(autocvar_crosshair_ring_reload && weapon_clipsize) // forces there to be only an ammo ring
{
float autocvar_crosshair_ring_inner;
float autocvar_crosshair_ring_minelayer;
float autocvar_crosshair_ring_minelayer_alpha;
+ float autocvar_crosshair_ring_hagar;
+ float autocvar_crosshair_ring_hagar_alpha;
float autocvar_crosshair_ring_nex;
float autocvar_crosshair_ring_nex_alpha;
float autocvar_crosshair_ring_nex_currentcharge_movingavg_rate;
float autocvar_hud_configure_grid_ysize;
float autocvar_hud_configure_teamcolorforced;
float autocvar_hud_contents;
+float autocvar_hud_contents_blur;
+float autocvar_hud_contents_blur_alpha;
float autocvar_hud_contents_factor;
float autocvar_hud_contents_fadeintime;
float autocvar_hud_contents_fadeouttime;
float autocvar_hud_contents_water_alpha;
string autocvar_hud_contents_water_color;
float autocvar_hud_damage;
+float autocvar_hud_damage_blur;
+float autocvar_hud_damage_blur_alpha;
string autocvar_hud_damage_color;
float autocvar_hud_damage_factor;
float autocvar_hud_damage_fade_rate;
float autocvar_hud_damage_pain_threshold_lower_health;
float autocvar_hud_damage_pain_threshold_pulsating_min;
float autocvar_hud_damage_pain_threshold_pulsating_period;
+float autocvar_hud_powerup;
+float autocvar_hud_postprocessing;
+float autocvar_hud_postprocessing_maxbluralpha;
+float autocvar_hud_postprocessing_maxblurradius;
string autocvar_hud_dock;
float autocvar_hud_dock_alpha;
string autocvar_hud_dock_color;