From: vortex Date: Sun, 17 Jan 2010 21:41:49 +0000 (+0000) Subject: Two new cvars for blood particles: decal alpha, decal random scaling (min/max) X-Git-Tag: xonotic-v0.1.0preview~811 X-Git-Url: http://git.xonotic.org/?a=commitdiff_plain;h=c67bcb2b5f7e826497a148ca6ca8e5b8c89ebe67;p=xonotic%2Fdarkplaces.git Two new cvars for blood particles: decal alpha, decal random scaling (min/max) Protect against float values on stain colors in DP_CSQC_SPAWNPARTICLE git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@9837 d7cf8633-e32d-0410-b094-e92efae38249 ::stable-branch::merge=ab9c17fbb62210574e50347558b6a1cbce9c390e --- diff --git a/cl_particles.c b/cl_particles.c index 5229124a..eb850f06 100644 --- a/cl_particles.c +++ b/cl_particles.c @@ -194,7 +194,10 @@ cvar_t cl_particles_alpha = {CVAR_SAVE, "cl_particles_alpha", "1", "multiplies o cvar_t cl_particles_size = {CVAR_SAVE, "cl_particles_size", "1", "multiplies particle size"}; cvar_t cl_particles_quake = {CVAR_SAVE, "cl_particles_quake", "0", "makes particle effects look mostly like the ones in Quake"}; cvar_t cl_particles_blood = {CVAR_SAVE, "cl_particles_blood", "1", "enables blood effects"}; -cvar_t cl_particles_blood_alpha = {CVAR_SAVE, "cl_particles_blood_alpha", "1", "opacity of blood"}; +cvar_t cl_particles_blood_alpha = {CVAR_SAVE, "cl_particles_blood_alpha", "1", "opacity of blood, does not affect decals"}; +cvar_t cl_particles_blood_decal_alpha = {CVAR_SAVE, "cl_particles_blood_decal_alpha", "1", "opacity of blood decal"}; +cvar_t cl_particles_blood_decal_scalemin = {CVAR_SAVE, "cl_particles_blood_decal_scalemin", "1.5", "minimal random scale of decal"}; +cvar_t cl_particles_blood_decal_scalemax = {CVAR_SAVE, "cl_particles_blood_decal_scalemax", "2", "maximal random scale of decal"}; cvar_t cl_particles_blood_bloodhack = {CVAR_SAVE, "cl_particles_blood_bloodhack", "1", "make certain quake particle() calls create blood effects instead"}; cvar_t cl_particles_bulletimpacts = {CVAR_SAVE, "cl_particles_bulletimpacts", "1", "enables bulletimpact effects"}; cvar_t cl_particles_explosions_sparks = {CVAR_SAVE, "cl_particles_explosions_sparks", "1", "enables sparks from explosions"}; @@ -490,6 +493,9 @@ void CL_Particles_Init (void) Cvar_RegisterVariable (&cl_particles_quake); Cvar_RegisterVariable (&cl_particles_blood); Cvar_RegisterVariable (&cl_particles_blood_alpha); + Cvar_RegisterVariable (&cl_particles_blood_decal_alpha); + Cvar_RegisterVariable (&cl_particles_blood_decal_scalemin); + Cvar_RegisterVariable (&cl_particles_blood_decal_scalemax); Cvar_RegisterVariable (&cl_particles_blood_bloodhack); Cvar_RegisterVariable (&cl_particles_explosions_sparks); Cvar_RegisterVariable (&cl_particles_explosions_shell); @@ -2702,7 +2708,7 @@ void R_DrawParticles (void) if (cl_decals.integer) { // create a decal for the blood splat - CL_SpawnDecalParticleForSurface(hitent, p->org, trace.plane.normal, p->color[0] * 65536 + p->color[1] * 256 + p->color[2], p->color[0] * 65536 + p->color[1] * 256 + p->color[2], tex_blooddecal[rand()&7], p->size * 2, p->alpha); + CL_SpawnDecalParticleForSurface(hitent, p->org, trace.plane.normal, p->color[0] * 65536 + p->color[1] * 256 + p->color[2], p->color[0] * 65536 + p->color[1] * 256 + p->color[2], tex_blooddecal[rand()&7], p->size * lhrandom(cl_particles_blood_decal_scalemin.value, cl_particles_blood_decal_scalemax.value), cl_particles_blood_decal_alpha.value * 768); } } goto killparticle; diff --git a/client.h b/client.h index 07945307..e67d827a 100644 --- a/client.h +++ b/client.h @@ -1396,6 +1396,9 @@ extern cvar_t cl_particles_size; extern cvar_t cl_particles_quake; extern cvar_t cl_particles_blood; extern cvar_t cl_particles_blood_alpha; +extern cvar_t cl_particles_blood_decal_alpha; +extern cvar_t cl_particles_blood_decal_scalemin; +extern cvar_t cl_particles_blood_decal_scalemax; extern cvar_t cl_particles_blood_bloodhack; extern cvar_t cl_particles_bulletimpacts; extern cvar_t cl_particles_explosions_sparks; diff --git a/clvm_cmds.c b/clvm_cmds.c index 393531ea..32e0300f 100644 --- a/clvm_cmds.c +++ b/clvm_cmds.c @@ -2655,12 +2655,12 @@ void VM_CL_ParticleThemeToGlobals(vmparticletheme_t *theme) *vmpartspawner.particle_velocityjitter = theme->velocityjitter; *vmpartspawner.particle_qualityreduction = theme->qualityreduction; *vmpartspawner.particle_stretch = theme->stretch; - vmpartspawner.particle_staincolor1[0] = (theme->staincolor1 >> 16) & 0xFF; - vmpartspawner.particle_staincolor1[1] = (theme->staincolor1 >> 8) & 0xFF; - vmpartspawner.particle_staincolor1[2] = (theme->staincolor1 >> 0) & 0xFF; - vmpartspawner.particle_staincolor2[0] = (theme->staincolor2 >> 16) & 0xFF; - vmpartspawner.particle_staincolor2[1] = (theme->staincolor2 >> 8) & 0xFF; - vmpartspawner.particle_staincolor2[2] = (theme->staincolor2 >> 0) & 0xFF; + vmpartspawner.particle_staincolor1[0] = ((int)theme->staincolor1 >> 16) & 0xFF; + vmpartspawner.particle_staincolor1[1] = ((int)theme->staincolor1 >> 8) & 0xFF; + vmpartspawner.particle_staincolor1[2] = ((int)theme->staincolor1 >> 0) & 0xFF; + vmpartspawner.particle_staincolor2[0] = ((int)theme->staincolor2 >> 16) & 0xFF; + vmpartspawner.particle_staincolor2[1] = ((int)theme->staincolor2 >> 8) & 0xFF; + vmpartspawner.particle_staincolor2[2] = ((int)theme->staincolor2 >> 0) & 0xFF; *vmpartspawner.particle_staintex = (float)theme->staintex; *vmpartspawner.particle_delayspawn = theme->delayspawn; *vmpartspawner.particle_delaycollision = theme->delaycollision; @@ -2688,8 +2688,8 @@ void VM_CL_ParticleThemeFromGlobals(vmparticletheme_t *theme) theme->velocityjitter = *vmpartspawner.particle_velocityjitter; theme->qualityreduction = (*vmpartspawner.particle_qualityreduction) ? true : false; theme->stretch = *vmpartspawner.particle_stretch; - theme->staincolor1 = vmpartspawner.particle_staincolor1[0]*65536 + vmpartspawner.particle_staincolor1[1]*256 + vmpartspawner.particle_staincolor1[2]; - theme->staincolor2 = vmpartspawner.particle_staincolor2[0]*65536 + vmpartspawner.particle_staincolor2[1]*256 + vmpartspawner.particle_staincolor2[2]; + theme->staincolor1 = ((int)vmpartspawner.particle_staincolor1[0])*65536 + (int)(vmpartspawner.particle_staincolor1[1])*256 + (int)(vmpartspawner.particle_staincolor1[2]); + theme->staincolor2 = (int)(vmpartspawner.particle_staincolor2[0])*65536 + (int)(vmpartspawner.particle_staincolor2[1])*256 + (int)(vmpartspawner.particle_staincolor2[2]); theme->staintex =(int)*vmpartspawner.particle_staintex; theme->delayspawn = *vmpartspawner.particle_delayspawn; theme->delaycollision = *vmpartspawner.particle_delaycollision; @@ -2839,7 +2839,7 @@ void VM_CL_SpawnParticle (void) if (prog->argc < 3) // global-set particle { - part = CL_NewParticle((unsigned short)*vmpartspawner.particle_type, ((int)vmpartspawner.particle_color1[0] << 16) + ((int)vmpartspawner.particle_color1[1] << 8) + ((int)vmpartspawner.particle_color1[2]), ((int)vmpartspawner.particle_color2[0] << 16) + ((int)vmpartspawner.particle_color2[1] << 8) + ((int)vmpartspawner.particle_color2[2]), (int)*vmpartspawner.particle_tex, *vmpartspawner.particle_size, *vmpartspawner.particle_sizeincrease, (int)(*vmpartspawner.particle_alpha*256), (int)(*vmpartspawner.particle_alphafade*256), *vmpartspawner.particle_gravity, *vmpartspawner.particle_bounce, org[0], org[1], org[2], dir[0], dir[1], dir[2], *vmpartspawner.particle_airfriction, *vmpartspawner.particle_liquidfriction, *vmpartspawner.particle_originjitter, *vmpartspawner.particle_velocityjitter, (*vmpartspawner.particle_qualityreduction) ? true : false, *vmpartspawner.particle_time, *vmpartspawner.particle_stretch, (pblend_t)*vmpartspawner.particle_blendmode, (porientation_t)*vmpartspawner.particle_orientation, ((int)vmpartspawner.particle_staincolor1[0] << 16) + ((int)vmpartspawner.particle_staincolor1[1] << 8) + ((int)vmpartspawner.particle_staincolor1[2]), ((int)vmpartspawner.particle_staincolor2[0] << 16) + ((int)vmpartspawner.particle_staincolor2[1] << 8) + ((int)vmpartspawner.particle_staincolor2[2]), (int)*vmpartspawner.particle_staintex); + part = CL_NewParticle((unsigned short)*vmpartspawner.particle_type, ((int)(vmpartspawner.particle_color1[0]) << 16) + ((int)(vmpartspawner.particle_color1[1]) << 8) + ((int)(vmpartspawner.particle_color1[2])), ((int)vmpartspawner.particle_color2[0] << 16) + ((int)vmpartspawner.particle_color2[1] << 8) + ((int)vmpartspawner.particle_color2[2]), (int)*vmpartspawner.particle_tex, *vmpartspawner.particle_size, *vmpartspawner.particle_sizeincrease, (int)(*vmpartspawner.particle_alpha*256), (int)(*vmpartspawner.particle_alphafade*256), *vmpartspawner.particle_gravity, *vmpartspawner.particle_bounce, org[0], org[1], org[2], dir[0], dir[1], dir[2], *vmpartspawner.particle_airfriction, *vmpartspawner.particle_liquidfriction, *vmpartspawner.particle_originjitter, *vmpartspawner.particle_velocityjitter, (*vmpartspawner.particle_qualityreduction) ? true : false, *vmpartspawner.particle_time, *vmpartspawner.particle_stretch, (pblend_t)*vmpartspawner.particle_blendmode, (porientation_t)*vmpartspawner.particle_orientation, (int)(vmpartspawner.particle_staincolor1[0])*65536 + (int)(vmpartspawner.particle_staincolor1[1])*256 + (int)(vmpartspawner.particle_staincolor1[2]), (int)(vmpartspawner.particle_staincolor2[0])*65536 + (int)(vmpartspawner.particle_staincolor2[1])*256 + (int)(vmpartspawner.particle_staincolor2[2]), (int)*vmpartspawner.particle_staintex); if (!part) { PRVM_G_FLOAT(OFS_RETURN) = 0;