From: tomaz Date: Fri, 17 Sep 2004 21:51:20 +0000 (+0000) Subject: Clears stainmaps on map restart/change based on cl_stainmapsclearonload cvar. Also... X-Git-Tag: xonotic-v0.1.0preview~5590 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=32eb5f826419e6b2b9b904a3305bc5d01b9c49da;p=xonotic%2Fdarkplaces.git Clears stainmaps on map restart/change based on cl_stainmapsclearonload cvar. Also added to effects menu. git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@4516 d7cf8633-e32d-0410-b094-e92efae38249 --- diff --git a/cl_main.c b/cl_main.c index 1006559d..ddc51144 100644 --- a/cl_main.c +++ b/cl_main.c @@ -53,6 +53,7 @@ cvar_t cl_explosions_size_end = {CVAR_SAVE, "cl_explosions_size_end", "128"}; cvar_t cl_explosions_lifetime = {CVAR_SAVE, "cl_explosions_lifetime", "0.5"}; cvar_t cl_stainmaps = {CVAR_SAVE, "cl_stainmaps", "1"}; +cvar_t cl_stainmapsclearonload = {CVAR_SAVE, "cl_stainmapsclearonload", "0"}; cvar_t cl_beams_polygons = {CVAR_SAVE, "cl_beams_polygons", "1"}; cvar_t cl_beams_relative = {CVAR_SAVE, "cl_beams_relative", "1"}; @@ -1325,6 +1326,7 @@ void CL_Init (void) Cvar_RegisterVariable(&cl_explosions_size_end); Cvar_RegisterVariable(&cl_explosions_lifetime); Cvar_RegisterVariable(&cl_stainmaps); + Cvar_RegisterVariable(&cl_stainmapsclearonload); Cvar_RegisterVariable(&cl_beams_polygons); Cvar_RegisterVariable(&cl_beams_relative); Cvar_RegisterVariable(&cl_beams_lightatend); diff --git a/client.h b/client.h index 38ef0b79..13d28593 100644 --- a/client.h +++ b/client.h @@ -594,6 +594,7 @@ extern cvar_t cl_explosions_size_start; extern cvar_t cl_explosions_size_end; extern cvar_t cl_explosions_lifetime; extern cvar_t cl_stainmaps; +extern cvar_t cl_stainmapsclearonload; // these are updated by CL_ClearState extern int cl_num_entities; diff --git a/menu.c b/menu.c index 917374f3..f86ac695 100644 --- a/menu.c +++ b/menu.c @@ -1466,7 +1466,7 @@ void M_Options_Key (int k, char ascii) } } -#define OPTIONS_EFFECTS_ITEMS 33 +#define OPTIONS_EFFECTS_ITEMS 34 int options_effects_cursor; @@ -1481,6 +1481,7 @@ void M_Menu_Options_Effects_f (void) extern cvar_t r_detailtextures; extern cvar_t cl_particles; extern cvar_t cl_stainmaps; +extern cvar_t cl_stainmapsclearonload; extern cvar_t cl_decals; extern cvar_t r_explosionclip; extern cvar_t r_modellights; @@ -1517,6 +1518,7 @@ void M_Menu_Options_Effects_AdjustSliders (int dir) else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&cl_particles_explosions_shell, !cl_particles_explosions_shell.integer); else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&r_explosionclip, !r_explosionclip.integer); else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&cl_stainmaps, !cl_stainmaps.integer); + else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&cl_stainmapsclearonload, !cl_stainmapsclearonload.integer); else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&cl_decals, !cl_decals.integer); else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&r_detailtextures, !r_detailtextures.integer); else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&cl_particles_bulletimpacts, !cl_particles_bulletimpacts.integer); @@ -1568,6 +1570,7 @@ void M_Options_Effects_Draw (void) M_Options_PrintCheckbox(" Explosion Shell", true, cl_particles_explosions_shell.integer); M_Options_PrintCheckbox(" Explosion Shell Clip", true, r_explosionclip.integer); M_Options_PrintCheckbox(" Stainmaps", true, cl_stainmaps.integer); + M_Options_PrintCheckbox("Onload Clear Stainmaps", true, cl_stainmapsclearonload.integer); M_Options_PrintCheckbox(" Decals", true, cl_decals.integer); M_Options_PrintCheckbox(" Detail Texturing", true, r_detailtextures.integer); M_Options_PrintCheckbox(" Bullet Impacts", true, cl_particles_bulletimpacts.integer); diff --git a/model_shared.c b/model_shared.c index 309b40e1..1db17890 100644 --- a/model_shared.c +++ b/model_shared.c @@ -194,6 +194,34 @@ static void mod_shutdown(void) static void mod_newmap(void) { + msurface_t *surf; + int i, surfnum, ssize, tsize; + + if (!cl_stainmapsclearonload.integer) + return; + + for (i=0; itexinfo->texture->flags & SURF_LIGHTMAP) + { + ssize = (surf->extents[0] >> 4) + 1; + tsize = (surf->extents[1] >> 4) + 1; + + if (ssize > 256 || tsize > 256) + Host_Error("Bad surface extents"); + + if (surf->stainsamples) + memset(surf->stainsamples, 255, ssize * tsize * 3); + + surf->cached_dlight = true; + } + } + } + } } /*