]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cl_particles.c
fix a bunch of warnings
[xonotic/darkplaces.git] / cl_particles.c
index 7b5f663514c57df14dd20c51e4575a96fc5fb6f3..3747c31ebd2d495ad4b3710b887ca57cdcf14341 100644 (file)
@@ -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);
@@ -1301,14 +1307,12 @@ void CL_ParticleEffect_Fallback(int effectnameindex, float count, const vec3_t o
 // these parameters, only trail handling does
 void CL_ParticleTrail(int effectnameindex, float pcount, const vec3_t originmins, const vec3_t originmaxs, const vec3_t velocitymins, const vec3_t velocitymaxs, entity_t *ent, int palettecolor, qboolean spawndlight, qboolean spawnparticles)
 {
-       vec3_t center;
        qboolean found = false;
        if (effectnameindex < 1 || effectnameindex >= MAX_PARTICLEEFFECTNAME || !particleeffectname[effectnameindex][0])
        {
                Con_DPrintf("Unknown effect number %i received from server\n", effectnameindex);
                return; // no such effect
        }
-       VectorLerp(originmins, 0.5, originmaxs, center);
        if (!cl_particles_quake.integer && particleeffectinfo[0].effectnameindex)
        {
                int effectinfoindex;
@@ -1316,7 +1320,6 @@ void CL_ParticleTrail(int effectnameindex, float pcount, const vec3_t originmins
                int tex, staintex;
                particleeffectinfo_t *info;
                vec3_t center;
-               vec3_t centervelocity;
                vec3_t traildir;
                vec3_t trailpos;
                vec3_t rvec;
@@ -1327,7 +1330,6 @@ void CL_ParticleTrail(int effectnameindex, float pcount, const vec3_t originmins
                particle_t *part;
                // note this runs multiple effects with the same name, each one spawns only one kind of particle, so some effects need more than one
                VectorLerp(originmins, 0.5, originmaxs, center);
-               VectorLerp(velocitymins, 0.5, velocitymaxs, centervelocity);
                supercontents = CL_PointSuperContents(center);
                underwater = (supercontents & (SUPERCONTENTS_WATER | SUPERCONTENTS_SLIME)) != 0;
                VectorSubtract(originmaxs, originmins, traildir);
@@ -2079,7 +2081,7 @@ static void R_InitParticleTexture (void)
        }
 
 #ifndef DUMPPARTICLEFONT
-       particletexture[tex_beam].texture = loadtextureimage(particletexturepool, "particles/nexbeam.tga", false, TEXF_ALPHA | TEXF_FORCELINEAR, true);
+       particletexture[tex_beam].texture = loadtextureimage(particletexturepool, "particles/nexbeam.tga", false, TEXF_ALPHA | TEXF_FORCELINEAR, true, r_texture_convertsRGB_particles.integer);
        if (!particletexture[tex_beam].texture)
 #endif
        {
@@ -2281,9 +2283,7 @@ void R_DrawDecal_TransparentCallback(const entity_render_t *ent, const rtlight_t
        // (this assumes they all use one particle font texture!)
        GL_BlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_COLOR);
        R_SetupShader_Generic(particletexture[63].texture, NULL, GL_MODULATE, 1);
-       GL_LockArrays(0, numsurfaces*4);
        R_Mesh_Draw(0, numsurfaces * 4, 0, numsurfaces * 2, NULL, particle_elements, 0, 0);
-       GL_LockArrays(0, 0);
 }
 
 void R_DrawDecals (void)
@@ -2547,7 +2547,6 @@ void R_DrawParticle_TransparentCallback(const entity_render_t *ent, const rtligh
        // now render batches of particles based on blendmode and texture
        blendmode = PBLEND_INVALID;
        texture = NULL;
-       GL_LockArrays(0, numsurfaces*4);
        batchstart = 0;
        batchcount = 0;
        for (surfacelistindex = 0;surfacelistindex < numsurfaces;)
@@ -2589,16 +2588,15 @@ void R_DrawParticle_TransparentCallback(const entity_render_t *ent, const rtligh
                batchcount = surfacelistindex - batchstart;
                R_Mesh_Draw(batchstart * 4, batchcount * 4, batchstart * 2, batchcount * 2, NULL, particle_elements, 0, 0);
        }
-       GL_LockArrays(0, 0);
 }
 
 void R_DrawParticles (void)
 {
-       int i, a, content;
+       int i, a;
        int drawparticles = r_drawparticles.integer;
        float minparticledist;
        particle_t *p;
-       float gravity, dvel, decalfade, frametime, f, dist, oldorg[3];
+       float gravity, frametime, f, dist, oldorg[3];
        float drawdist2;
        int hitent;
        trace_t trace;
@@ -2613,8 +2611,6 @@ void R_DrawParticles (void)
 
        minparticledist = DotProduct(r_refdef.view.origin, r_refdef.view.forward) + 4.0f;
        gravity = frametime * cl.movevars_gravity;
-       dvel = 1+4*frametime;
-       decalfade = frametime * 255 / cl_decals_fadetime.value;
        update = frametime > 0;
        drawdist2 = r_drawparticles_drawdistance.value * r_refdef.view.quality;
        drawdist2 = drawdist2*drawdist2;
@@ -2634,8 +2630,6 @@ void R_DrawParticles (void)
                                continue;
                        p->delayedspawn = 0;
 
-                       content = 0;
-
                        p->size += p->sizeincrease * frametime;
                        p->alpha -= p->alphafade * frametime;
 
@@ -2706,7 +2700,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;