]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cl_particles.c
Fixed ambient sound volume (it was reset each frame, and cannot change by more than...
[xonotic/darkplaces.git] / cl_particles.c
index e33bba65f3461ce52f5758c252c03a705ea1e533..0cf228972524c51343f2dbf1128d4b95a98eadda 100644 (file)
@@ -782,46 +782,53 @@ void CL_RunParticleEffect (vec3_t org, vec3_t dir, int color, int count)
 CL_SparkShower
 ===============
 */
-void CL_SparkShower (vec3_t org, vec3_t dir, int count)
+void CL_SparkShower (vec3_t org, vec3_t dir, int count, vec_t gravityscale)
 {
-       vec3_t org2, org3;
        int k;
 
-       if (cl_stainmaps.integer)
-               R_Stain(org, 32, 96, 96, 96, 24, 128, 128, 128, 24);
-       CL_SpawnDecalParticleForPoint(org, 6, 3, 255, tex_bulletdecal[rand()&7], 0xFFFFFF, 0xFFFFFF);
-
        if (!cl_particles.integer) return;
 
-       if (cl_particles_bulletimpacts.integer)
+       if (cl_particles_sparks.integer)
        {
-               // smoke puff
-               if (cl_particles_smoke.integer)
+               // sparks
+               count *= cl_particles_quality.value;
+               while(count--)
                {
-                       k = count * 0.25 * cl_particles_quality.value;
-                       while(k--)
-                       {
-                               org2[0] = org[0] + 0.125f * lhrandom(-count, count);
-                               org2[1] = org[1] + 0.125f * lhrandom(-count, count);
-                               org2[2] = org[2] + 0.125f * lhrandom(-count, count);
-                               CL_TraceLine(org, org2, org3, NULL, true, NULL, SUPERCONTENTS_SOLID);
-                               particle(pt_grow, PARTICLE_BILLBOARD, 0x101010, 0x202020, tex_smoke[rand()&7], true, PBLEND_ADD, 3, 3, (1.0f / cl_particles_quality.value) * 255, (1.0f / cl_particles_quality.value) * 1024, 9999, -0.2, 0, org3[0], org3[1], org3[2], lhrandom(-8, 8), lhrandom(-8, 8), lhrandom(0, 16), 15, 0, 0, 0, 0.2, 0);
-                       }
+                       k = particlepalette[0x68 + (rand() & 7)];
+                       particle(pt_static, PARTICLE_SPARK, k, k, tex_particle, false, PBLEND_ADD, 0.4f, 0.015f, (1.0f / cl_particles_quality.value) * lhrandom(64, 255), (1.0f / cl_particles_quality.value) * 512, 9999, gravityscale, 0, org[0], org[1], org[2], lhrandom(-64, 64) + dir[0], lhrandom(-64, 64) + dir[1], lhrandom(0, 128) + dir[2], 0, 0, 0, 0, 0, 0);
                }
+       }
+}
+
+void CL_Smoke (vec3_t org, vec3_t dir, int count)
+{
+       vec3_t org2, org3;
+       int k;
 
-               if (cl_particles_sparks.integer)
+       if (!cl_particles.integer) return;
+
+       // smoke puff
+       if (cl_particles_smoke.integer)
+       {
+               k = count * 0.25 * cl_particles_quality.value;
+               while(k--)
                {
-                       // sparks
-                       count *= cl_particles_quality.value;
-                       while(count--)
-                       {
-                               k = particlepalette[0x68 + (rand() & 7)];
-                               particle(pt_static, PARTICLE_SPARK, k, k, tex_particle, false, PBLEND_ADD, 0.4f, 0.015f, (1.0f / cl_particles_quality.value) * lhrandom(64, 255), (1.0f / cl_particles_quality.value) * 512, 9999, 1, 0, org[0], org[1], org[2], lhrandom(-64, 64) + dir[0], lhrandom(-64, 64) + dir[1], lhrandom(0, 128) + dir[2], 0, 0, 0, 0, 0.2, 0);
-                       }
+                       org2[0] = org[0] + 0.125f * lhrandom(-count, count);
+                       org2[1] = org[1] + 0.125f * lhrandom(-count, count);
+                       org2[2] = org[2] + 0.125f * lhrandom(-count, count);
+                       CL_TraceLine(org, org2, org3, NULL, true, NULL, SUPERCONTENTS_SOLID);
+                       particle(pt_grow, PARTICLE_BILLBOARD, 0x101010, 0x202020, tex_smoke[rand()&7], true, PBLEND_ADD, 3, 3, (1.0f / cl_particles_quality.value) * 255, (1.0f / cl_particles_quality.value) * 1024, 9999, 0, 0, org3[0], org3[1], org3[2], lhrandom(-8, 8), lhrandom(-8, 8), lhrandom(-8, 8), 15, 0, 0, 0, 0, 0);
                }
        }
 }
 
+void CL_BulletMark (vec3_t org)
+{
+       if (cl_stainmaps.integer)
+               R_Stain(org, 32, 96, 96, 96, 24, 128, 128, 128, 24);
+       CL_SpawnDecalParticleForPoint(org, 6, 3, 255, tex_bulletdecal[rand()&7], 0xFFFFFF, 0xFFFFFF);
+}
+
 void CL_PlasmaBurn (vec3_t org)
 {
        if (cl_stainmaps.integer)
@@ -1499,7 +1506,7 @@ static particletexture_t particletexture[MAX_PARTICLETEXTURES];
 
 static cvar_t r_drawparticles = {0, "r_drawparticles", "1"};
 
-#define PARTICLETEXTURESIZE 32
+#define PARTICLETEXTURESIZE 64
 #define PARTICLEFONTSIZE (PARTICLETEXTURESIZE*8)
 
 static qbyte shadebubble(float dx, float dy, vec3_t light)
@@ -1761,6 +1768,11 @@ static void R_InitParticleTexture (void)
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
 #else
+
+#if 0
+       Image_WriteTGARGBA ("particles/particlefont.tga", PARTICLEFONTSIZE, PARTICLEFONTSIZE, particletexturedata);
+#endif
+
        particlefonttexture = loadtextureimage(particletexturepool, "particles/particlefont.tga", 0, 0, false, TEXF_ALPHA | TEXF_PRECACHE);
        if (!particlefonttexture)
                particlefonttexture = R_LoadTexture2D(particletexturepool, "particlefont", PARTICLEFONTSIZE, PARTICLEFONTSIZE, particletexturedata, TEXTYPE_RGBA, TEXF_ALPHA | TEXF_PRECACHE, NULL);