X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=data%2Fqcsrc%2Fclient%2FView.qc;h=0e4167c83fff54e70f9dbb7bff3e2c9aa5b1a41b;hb=8cac9a6f0e00ad7b1a39f9b616e4da769550df3d;hp=37090311ca38342258b94c9451e20733d5f00eb9;hpb=ab879337bb60c220f47d15fcfdf6f8c52fe77dea;p=voretournament%2Fvoretournament.git diff --git a/data/qcsrc/client/View.qc b/data/qcsrc/client/View.qc index 37090311..0e4167c8 100644 --- a/data/qcsrc/client/View.qc +++ b/data/qcsrc/client/View.qc @@ -253,8 +253,13 @@ float camera_mode; float chase_active_old; float artwork_fade; float pickup_crosshair_time, pickup_crosshair_size; +float myhealth, myhealth_prev, myhealth_flash; float contentavgalpha, liquidalpha_prev; +float stomachsplash_alpha, stomachsplash_remove_at_respawn; +float volume_modify_1, volume_modify_2, volume_modify_default_1, volume_modify_default_2; +vector myhealth_gentlergb; vector liquidcolor_prev; +vector damage_blurpostprocess, content_blurpostprocess; string artwork_image; string intermission_song; string NextFrameCommand; @@ -457,32 +462,41 @@ void CSQC_UpdateView(float w, float h) { float contentalpha_temp, incontent, liquidalpha, contentfadetime; vector liquidcolor; - - switch(pointcontents(view_origin)) + + if (getstati(STAT_VORE_EATEN)) { - case CONTENT_WATER: - liquidalpha = cvar("hud_contents_water_alpha"); - liquidcolor = stov(cvar_string("hud_contents_water_color")); - incontent = 1; - break; - - case CONTENT_LAVA: - liquidalpha = cvar("hud_contents_lava_alpha"); - liquidcolor = stov(cvar_string("hud_contents_lava_color")); - incontent = 1; - break; - - case CONTENT_SLIME: - liquidalpha = cvar("hud_contents_slime_alpha"); - liquidcolor = stov(cvar_string("hud_contents_slime_color")); - incontent = 1; - break; - - default: - liquidalpha = 0; - liquidcolor = '0 0 0'; - incontent = 0; - break; + liquidalpha = cvar("hud_contents_stomach_alpha"); + liquidcolor = stov(cvar_string("hud_contents_stomach_color")); + incontent = 1; + } + else + { + switch(pointcontents(view_origin)) + { + case CONTENT_WATER: + liquidalpha = cvar("hud_contents_water_alpha"); + liquidcolor = stov(cvar_string("hud_contents_water_color")); + incontent = 1; + break; + + case CONTENT_LAVA: + liquidalpha = cvar("hud_contents_lava_alpha"); + liquidcolor = stov(cvar_string("hud_contents_lava_color")); + incontent = 1; + break; + + case CONTENT_SLIME: + liquidalpha = cvar("hud_contents_slime_alpha"); + liquidcolor = stov(cvar_string("hud_contents_slime_color")); + incontent = 1; + break; + + default: + liquidalpha = 0; + liquidcolor = '0 0 0'; + incontent = 0; + break; + } } if(incontent) // fade in/out at different speeds so you can do e.g. instant fade when entering water and slow when leaving it. @@ -499,6 +513,236 @@ void CSQC_UpdateView(float w, float h) if(contentavgalpha) drawfill('0 0 0', '1 0 0' * vid_conwidth + '0 1 0' * vid_conheight, liquidcolor_prev, contentavgalpha * liquidalpha_prev, DRAWFLAG_NORMAL); + + if(cvar("hud_postprocessing")) + { + if(cvar("hud_contents_liquid_blur")) + { + // when inside the stomach, we use different blur settings than when we're inside other fluids + content_blurpostprocess_x = 1; + if(getstati(STAT_VORE_EATEN)) + { + content_blurpostprocess_y = contentavgalpha * cvar("hud_contents_stomach_blur"); + content_blurpostprocess_z = contentavgalpha * cvar("hud_contents_stomach_blur_alpha"); + } + else + { + content_blurpostprocess_y = contentavgalpha * cvar("hud_contents_liquid_blur"); + content_blurpostprocess_z = contentavgalpha * cvar("hud_contents_liquid_blur_alpha"); + } + } + else + { + content_blurpostprocess_x = 0; + content_blurpostprocess_y = 0; + content_blurpostprocess_z = 0; + } + } + } + + if(cvar("hud_damage")) + { + float myhealth_flash_temp; + myhealth = getstati(STAT_HEALTH); + + // fade out + myhealth_flash = max(0, myhealth_flash - cvar("hud_damage_fade_rate") * frametime); + // add new damage + myhealth_flash = bound(0, myhealth_flash + dmg_take * cvar("hud_damage_factor"), cvar("hud_damage_maxalpha")); + + float pain_threshold, pain_threshold_lower, pain_threshold_lower_health; + pain_threshold = cvar("hud_damage_pain_threshold"); + pain_threshold_lower = cvar("hud_damage_pain_threshold_lower"); + pain_threshold_lower_health = cvar("hud_damage_pain_threshold_lower_health"); + + if(pain_threshold_lower && myhealth < pain_threshold_lower_health) + { + pain_threshold = pain_threshold - max(cvar("hud_damage_pain_threshold_pulsating_min"), fabs(sin(M_PI * time / cvar("hud_damage_pain_threshold_pulsating_period")))) * pain_threshold_lower * (1 - max(0, myhealth)/pain_threshold_lower_health); + } + + myhealth_flash_temp = bound(0, myhealth_flash - pain_threshold, 1); + + if(myhealth_prev < 1) + { + if(myhealth >= 1) + { + myhealth_flash = 0; // just spawned, clear the flash immediately + myhealth_flash_temp = 0; + } + else + { + myhealth_flash += cvar("hud_damage_fade_rate") * frametime; // dead + } + } + + if(spectatee_status == -1 || intermission) + { + myhealth_flash = 0; // observing, or match ended + myhealth_flash_temp = 0; + } + + myhealth_prev = myhealth; + + if(cvar("cl_gentle_damage") || cvar("cl_gentle")) + { + if(cvar("cl_gentle_damage") == 2) + { + if(myhealth_flash < pain_threshold) // only randomize when the flash is gone + { + myhealth_gentlergb = '1 0 0' * random() + '0 1 0' * random() + '0 0 1' * random(); + } + } + else + myhealth_gentlergb = stov(cvar_string("hud_damage_gentle_color")); + + drawfill('0 0 0', '1 0 0' * vid_conwidth + '0 1 0' * vid_conheight, myhealth_gentlergb, cvar("hud_damage_gentle_alpha_multiplier") * bound(0, myhealth_flash_temp, 1) * cvar("hud_damage"), DRAWFLAG_NORMAL); + } + else + drawpic('0 0 0', "gfx/blood", '1 0 0' * vid_conwidth + '0 1 0' * vid_conheight, stov(cvar_string("hud_damage_color")), bound(0, myhealth_flash_temp, 1) * cvar("hud_damage"), DRAWFLAG_NORMAL); + + if(cvar("hud_postprocessing")) + { + if(cvar("hud_damage_blur")) + { + damage_blurpostprocess_x = 1; + damage_blurpostprocess_y = bound(0, myhealth_flash_temp, 1) * cvar("hud_damage_blur"); + damage_blurpostprocess_z = bound(0, myhealth_flash_temp, 1) * cvar("hud_damage_blur_alpha"); + } + else + { + damage_blurpostprocess_x = 0; + damage_blurpostprocess_y = 0; + damage_blurpostprocess_z = 0; + } + } + } + + if(cvar("hud_stomach")) + { + if(getstati(STAT_VORE_EATEN)) + { + if(stomachsplash_alpha < cvar("hud_stomach")) + stomachsplash_alpha += cvar("hud_stomach_fade_in") * frametime; + else + stomachsplash_alpha = cvar("hud_stomach"); + } + else if(getstati(STAT_HEALTH) > 0) + { + if(stomachsplash_alpha > 0) + stomachsplash_alpha -= cvar("hud_stomach_fade_out") * frametime; + else + stomachsplash_alpha = 0; + } + if(getstati(STAT_HEALTH) <= 0) + stomachsplash_remove_at_respawn = 1; // schedule the effect to be removed next respawn + + if(getstati(STAT_HEALTH) > 0 && stomachsplash_remove_at_respawn) + stomachsplash_alpha = stomachsplash_remove_at_respawn = 0; // we respawned, remove the effect + if(spectatee_status == -1) + stomachsplash_alpha = 0; + + stomachsplash_alpha = bound(0, stomachsplash_alpha, 1); + drawpic('0 0 0', "gfx/food", '1 0 0' * vid_conwidth + '0 1 0' * vid_conheight, stov(cvar_string("hud_stomach_color")), stomachsplash_alpha, DRAWFLAG_NORMAL); + } + + if(cvar("hud_postprocessing")) + { + // 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, cvar("hud_postprocessing_maxblurradius")); + float bluralpha = bound(0, damage_blurpostprocess_z + content_blurpostprocess_z, cvar("hud_postprocessing_maxbluralpha")); + cvar_set("r_glsl_postprocess_uservec1", strcat(ftos(blurradius), " ", ftos(bluralpha), " 0 0")); + cvar_set("r_glsl_postprocess_uservec1_enable", "1"); + } + else + { + cvar_set("r_glsl_postprocess_uservec1", "0 0 0 0"); + cvar_set("r_glsl_postprocess_uservec1_enable", "0"); + } + + if(cvar("hud_powerup")) + { + 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); + sharpen_intensity = bound(0, sharpen_intensity, 5); // powerup warning time is 5 seconds, so fade the effect from there + + if(sharpen_intensity > 0) + { + cvar_set("r_glsl_postprocess_uservec2", strcat("0 ", ftos(-sharpen_intensity * cvar("hud_powerup")), " 0 0")); + cvar_set("r_glsl_postprocess_uservec2_enable", "1"); + } + else + { + cvar_set("r_glsl_postprocess_uservec2", "0 0 0 0"); + cvar_set("r_glsl_postprocess_uservec2_enable", "0"); + } + } + } + + if not(cvar("hud_damage") && cvar("hud_postprocessing")) + { + // don't allow blur to get stuck on if we disable the cvar while damaged + cvar_set("r_glsl_postprocess_uservec1", "0 0 0 0"); + cvar_set("r_glsl_postprocess_uservec1_enable", "0"); + } + if not(cvar("hud_powerup") && cvar("hud_postprocessing")) + { + // don't allow sharpen to get stuck on if we disable the cvar while powered up + cvar_set("r_glsl_postprocess_uservec2", "0 0 0 0"); + cvar_set("r_glsl_postprocess_uservec2_enable", "0"); + } + + if(cvar("cl_vore_cutvolume_sound") < 1 || cvar("cl_vore_cutvolume_music") < 1) + { + float volume_modify_1_target, volume_modify_2_target, volume_modify_fade; + if(getstati(STAT_VORE_EATEN)) + { + volume_modify_1_target = volume_modify_default_1 * cvar("cl_vore_cutvolume_sound"); + volume_modify_2_target = volume_modify_default_2 * cvar("cl_vore_cutvolume_music"); + } + else + { + volume_modify_1_target = 1; + volume_modify_2_target = 1; + } + volume_modify_fade = cvar("cl_vore_cutvolume_fade") * frametime; + + if(spectatee_status == -1 || intermission) + { + // no volume fading is currently taking place, so if we change the volume settings, update the initial volume + volume_modify_default_1 = cvar("volume"); + volume_modify_default_2 = cvar("bgmvolume"); + } + else if(volume_modify_1 != volume_modify_1_target || volume_modify_2 != volume_modify_2_target) + { + if (volume_modify_1 > volume_modify_1_target + volume_modify_fade) + volume_modify_1 -= volume_modify_fade; + else if (volume_modify_1 < volume_modify_1_target - volume_modify_fade) + volume_modify_1 += volume_modify_fade; + else + volume_modify_1 = volume_modify_1_target; + + if (volume_modify_2 > volume_modify_2_target + volume_modify_fade) + volume_modify_2 -= volume_modify_fade; + else if (volume_modify_2 < volume_modify_2_target - volume_modify_fade) + volume_modify_2 += volume_modify_fade; + else + volume_modify_2 = volume_modify_1_target; + + cvar_set("volume", ftos(volume_modify_1)); + cvar_set("bgmvolume", ftos(volume_modify_2)); + // TODO: Setting the "volume" cvar is a bad way to go, and modifies the menu slider! We need a better way + } + else if(cvar("volume") != volume_modify_default_1 || cvar("bgmvolume") != volume_modify_default_2) + { + // no volume fading is currently taking place, so if we change the volume settings, update the initial volume + volume_modify_default_1 = cvar("volume"); + volume_modify_default_2 = cvar("bgmvolume"); + } } // Draw the mouse cursor