CL_ParticleEffect(EFFECT_SVC_PARTICLE, 10*count, originmins, originmaxs, velocitymins, velocitymaxs, NULL, 0);
}
else
+ {
CL_Smoke(originmins, originmaxs, velocitymins, velocitymaxs, 4*count);
+ CL_Sparks(originmins, originmaxs, velocitymins, velocitymaxs, 15*count);
+ }
}
// bullet hole
if (cl_stainmaps.integer) R_Stain(center, 32, 96, 96, 96, 24, 128, 128, 128, 24);
CL_ParticleEffect(EFFECT_SVC_PARTICLE, 10*count, originmins, originmaxs, velocitymins, velocitymaxs, NULL, 0);
}
else
+ {
CL_Smoke(originmins, originmaxs, velocitymins, velocitymaxs, 4*count);
+ CL_Sparks(originmins, originmaxs, velocitymins, velocitymaxs, 15*count);
+ }
}
// bullet hole
if (cl_stainmaps.integer) R_Stain(center, 32, 96, 96, 96, 24, 128, 128, 128, 24);
CL_ParticleEffect(EFFECT_SVC_PARTICLE, 20*count, originmins, originmaxs, velocitymins, velocitymaxs, NULL, 0);
}
else
+ {
CL_Smoke(originmins, originmaxs, velocitymins, velocitymaxs, 8*count);
+ CL_Sparks(originmins, originmaxs, velocitymins, velocitymaxs, 30*count);
+ }
}
// bullet hole
if (cl_stainmaps.integer) R_Stain(center, 32, 96, 96, 96, 24, 128, 128, 128, 24);
CL_ParticleEffect(EFFECT_SVC_PARTICLE, 20*count, originmins, originmaxs, velocitymins, velocitymaxs, NULL, 0);
}
else
+ {
CL_Smoke(originmins, originmaxs, velocitymins, velocitymaxs, 8*count);
+ CL_Sparks(originmins, originmaxs, velocitymins, velocitymaxs, 30*count);
+ }
}
// bullet hole
if (cl_stainmaps.integer) R_Stain(center, 32, 96, 96, 96, 24, 128, 128, 128, 24);
if (cl_particles_quake.integer)
CL_ParticleEffect(EFFECT_SVC_PARTICLE, 20*count, originmins, originmaxs, velocitymins, velocitymaxs, NULL, 0);
else
+ {
CL_Smoke(originmins, originmaxs, velocitymins, velocitymaxs, 4*count);
+ CL_Sparks(originmins, originmaxs, velocitymins, velocitymaxs, 20*count);
+ }
}
// bullet hole
if (cl_stainmaps.integer) R_Stain(center, 32, 96, 96, 96, 24, 128, 128, 128, 24);
if (cl_particles_quake.integer)
CL_ParticleEffect(EFFECT_SVC_PARTICLE, 20*count, originmins, originmaxs, velocitymins, velocitymaxs, NULL, 0);
else
+ {
CL_Smoke(originmins, originmaxs, velocitymins, velocitymaxs, 4*count);
+ CL_Sparks(originmins, originmaxs, velocitymins, velocitymaxs, 20*count);
+ }
}
// bullet hole
if (cl_stainmaps.integer) R_Stain(center, 32, 96, 96, 96, 24, 128, 128, 128, 24);
}
else
{
- particle(particletype + pt_smoke, 0x303030, 0x606060, tex_smoke[rand()&7], 3, 0, cl_particles_smoke_alpha.value*50, cl_particles_smoke_alphafade.value*50, 0, 0, pos[0], pos[1], pos[2], 0, 0, 0, 0, 0, 0, 0);
+ particle(particletype + pt_smoke, 0x303030, 0x606060, tex_smoke[rand()&7], 3, 0, cl_particles_smoke_alpha.value*50, cl_particles_smoke_alphafade.value*75, 0, 0, pos[0], pos[1], pos[2], 0, 0, 0, 0, 0, 0, 0);
}
}
else if (effectnameindex == EFFECT_TR_WIZSPIKE)
{
sparkcount *= cl_particles_quality.value;
while(sparkcount-- > 0)
- particle(particletype + pt_spark, particlepalette[0x68], particlepalette[0x6f], tex_particle, 0.4f, 0, lhrandom(64, 255), 512, 1, 0, lhrandom(originmins[0], originmaxs[0]), lhrandom(originmins[1], originmaxs[1]), lhrandom(originmins[2], originmaxs[2]), lhrandom(velocitymins[0], velocitymaxs[0]), lhrandom(velocitymins[1], velocitymaxs[1]), lhrandom(velocitymins[2], velocitymaxs[2]) + sv_gravity.value * 0.1, 0, 0, 0, 64);
+ particle(particletype + pt_spark, particlepalette[0x68], particlepalette[0x6f], tex_particle, 0.5f, 0, lhrandom(64, 255), 512, 1, 0, lhrandom(originmins[0], originmaxs[0]), lhrandom(originmins[1], originmaxs[1]), lhrandom(originmins[2], originmaxs[2]), lhrandom(velocitymins[0], velocitymaxs[0]), lhrandom(velocitymins[1], velocitymaxs[1]), lhrandom(velocitymins[2], velocitymaxs[2]) + sv_gravity.value * 0.1f, 0, 0, 0, 64);
}
}
{
smokecount *= cl_particles_quality.value;
while(smokecount-- > 0)
- particle(particletype + pt_smoke, 0x101010, 0x101010, tex_smoke[rand()&7], 4, 0, 255, 512, 0, 0, lhrandom(originmins[0], originmaxs[0]), lhrandom(originmins[1], originmaxs[1]), lhrandom(originmins[2], originmaxs[2]), lhrandom(velocitymins[0], velocitymaxs[0]), lhrandom(velocitymins[1], velocitymaxs[1]), lhrandom(velocitymins[2], velocitymaxs[2]), 0, 0, 0, 16);
+ particle(particletype + pt_smoke, 0x101010, 0x101010, tex_smoke[rand()&7], 2, 2, 255, 256, 0, 0, lhrandom(originmins[0], originmaxs[0]), lhrandom(originmins[1], originmaxs[1]), lhrandom(originmins[2], originmaxs[2]), lhrandom(velocitymins[0], velocitymaxs[0]), lhrandom(velocitymins[1], velocitymaxs[1]), lhrandom(velocitymins[2], velocitymaxs[2]), 0, 0, 0, smokecount > 0 ? 16 : 0);
}
}
content = 0;
+ p->size += p->sizeincrease * frametime;
p->alpha -= p->alphafade * frametime;
if (p->alpha <= 0)
p->liquidfriction = 0;
p->gravity = 0;
p->size *= 1.0f;
- p->sizeincrease = p->size * 16;
+ p->sizeincrease = p->size * 2;
count = rand() & 3;
while(count--)
particle(particletype + pt_spark, 0x000000, 0x707070, tex_particle, 0.25f, 0, lhrandom(64, 255), 512, 1, 0, p->org[0], p->org[1], p->org[2], p->vel[0]*16, p->vel[1]*16, sv_gravity.value * 0.04 + p->vel[2]*16, 0, 0, 0, 32);
R_Mesh_Matrix(&identitymatrix);
R_Mesh_ResetTextureState();
- R_Mesh_VertexPointer(particle_vertex3f);
- R_Mesh_TexCoordPointer(0, 2, particle_texcoord2f);
- R_Mesh_ColorPointer(particle_color4f);
+ R_Mesh_VertexPointer(particle_vertex3f, 0, 0);
+ R_Mesh_TexCoordPointer(0, 2, particle_texcoord2f, 0, 0);
+ R_Mesh_ColorPointer(particle_color4f, 0, 0);
GL_DepthMask(false);
+ GL_DepthRange(0, 1);
GL_DepthTest(true);
GL_CullFace(GL_FRONT); // quake is backwards, this culls back faces
{
particletexture_t *tex;
const float *org;
- float up2[3], v[3], right[3], up[3], fog, ifog, cr, cg, cb, ca, size;
+ float up2[3], v[3], right[3], up[3], fog, cr, cg, cb, ca, size;
p = cl.particles + surfacelist[surfacelistindex];
}
if (r_refdef.fogenabled)
{
- fog = VERTEXFOGTABLE(VectorDistance(p->org, r_view.origin));
- ifog = 1 - fog;
- cr = cr * ifog;
- cg = cg * ifog;
- cb = cb * ifog;
+ fog = FogPoint_World(p->org);
+ cr = cr * fog;
+ cg = cg * fog;
+ cb = cb * fog;
if (blendmode == PBLEND_ALPHA)
{
+ fog = 1 - fog;
cr += r_refdef.fogcolor[0] * fog * r_view.colorscale;
cg += r_refdef.fogcolor[1] * fog * r_view.colorscale;
cb += r_refdef.fogcolor[2] * fog * r_view.colorscale;
if (blendmode != p->type->blendmode)
{
if (batchcount > 0)
- R_Mesh_Draw(batchstart * 4, batchcount * 4, batchcount * 2, particle_element3i + batchstart * 6);
+ R_Mesh_Draw(batchstart * 4, batchcount * 4, batchcount * 2, particle_element3i + batchstart * 6, 0, 0);
batchcount = 0;
batchstart = surfacelistindex;
blendmode = p->type->blendmode;
if (texture != particletexture[p->texnum].texture)
{
if (batchcount > 0)
- R_Mesh_Draw(batchstart * 4, batchcount * 4, batchcount * 2, particle_element3i + batchstart * 6);
+ R_Mesh_Draw(batchstart * 4, batchcount * 4, batchcount * 2, particle_element3i + batchstart * 6, 0, 0);
batchcount = 0;
batchstart = surfacelistindex;
texture = particletexture[p->texnum].texture;
batchcount++;
}
if (batchcount > 0)
- R_Mesh_Draw(batchstart * 4, batchcount * 4, batchcount * 2, particle_element3i + batchstart * 6);
+ R_Mesh_Draw(batchstart * 4, batchcount * 4, batchcount * 2, particle_element3i + batchstart * 6, 0, 0);
GL_LockArrays(0, 0);
}