p->next = active_particles;
active_particles = p;
- p->contents = 0;
p->texnum = flareparticletexture;
p->scale = 2;
p->alpha = 255;
p->next = active_particles;
active_particles = p;
- p->contents = 0;
p->texnum = particletexture;
p->scale = 2;
p->alpha = 255;
particle_t *p;
if (!r_particles.value) return; // LordHavoc: particles are optional
- for (i=0 ; i<2048 ; i++)
+ for (i=0 ; i<1024 ; i++)
{
if (!free_particles)
return;
p->next = active_particles;
active_particles = p;
- p->contents = 0;
- p->texnum = flareparticletexture;
- p->scale = lhrandom(2,5);
+ p->texnum = smokeparticletexture[rand()&7];
+ p->scale = lhrandom(1,3);
p->alpha = rand()&255;
p->die = cl.time + 5;
p->color = ramp1[0];
- p->ramp = rand()&3;
- /*
- if (i & 1)
- p->type = pt_explode;
- else
- p->type = pt_explode2;
- */
+ p->ramp = lhrandom(0, 4);
+// if (i & 1)
+// p->type = pt_explode;
+// else
+// p->type = pt_explode2;
p->color = ramp1[rand()&7];
p->type = pt_fallfadespark;
for (j=0 ; j<3 ; j++)
{
p->org[j] = org[j] + ((rand()&15)-8);
- p->vel[j] = (rand()&511)-256;
+ p->vel[j] = lhrandom(-192, 192);
}
- p->vel[j] += 200;
+ p->vel[2] += 160;
}
if (smoke)
p->next = active_particles;
active_particles = p;
- p->contents = 0;
p->texnum = smokeparticletexture[rand()&7];
p->scale = 12;
p->alpha = 80;
p->next = active_particles;
active_particles = p;
- p->contents = 0;
- p->texnum = flareparticletexture;
- p->scale = 4;
+ p->texnum = smokeparticletexture[rand()&7];
+ p->scale = 1.5;
p->alpha = 255;
p->die = cl.time + 0.3;
p->color = colorStart + (colorMod % colorLength);
for (j=0 ; j<3 ; j++)
{
p->org[j] = org[j] + ((rand()&15)-8);
- p->vel[j] = (rand()%512)-256;
+ p->vel[j] = lhrandom(-128, 128);
}
}
}
p->next = active_particles;
active_particles = p;
- p->contents = 0;
- p->texnum = flareparticletexture;
- p->scale = 4;
+ p->texnum = smokeparticletexture[rand()&7];
+ p->scale = 2;
p->alpha = 255;
p->die = cl.time + 1 + (rand()&8)*0.05;
for (j=0 ; j<3 ; j++)
{
p->org[j] = org[j] + ((rand()%32)-16);
- p->vel[j] = (rand()%512)-256;
+ p->vel[j] = lhrandom(-128, 128);
}
}
else
for (j=0 ; j<3 ; j++)
{
p->org[j] = org[j] + ((rand()%32)-16);
- p->vel[j] = (rand()%512)-256;
+ p->vel[j] = lhrandom(-128, 128);
}
}
+ p->vel[0] *= 0.25;
+ p->vel[1] *= 0.25;
}
}
*/
void R_RunParticleEffect (vec3_t org, vec3_t dir, int color, int count)
{
- int i, j;
+ int j;
particle_t *p;
if (!r_particles.value) return; // LordHavoc: particles are optional
- for (i=0 ; i<count ; i++)
+ if (count == 1024)
+ {
+ R_ParticleExplosion(org, false);
+ return;
+ }
+ while (count)
{
if (!free_particles)
return;
free_particles = p->next;
p->next = active_particles;
active_particles = p;
-
- p->contents = 0;
- if (count == 1024)
- { // rocket explosion
- p->texnum = flareparticletexture;
- p->scale = 4;
- p->alpha = 255;
- p->die = cl.time + 5;
- p->color = ramp1[0];
- p->ramp = rand()&3;
- if (i & 1)
- {
- p->type = pt_explode;
- for (j=0 ; j<3 ; j++)
- {
- p->org[j] = org[j] + ((rand()%32)-16);
- p->vel[j] = (rand()%512)-256;
- }
- }
- else
- {
- p->type = pt_explode2;
- for (j=0 ; j<3 ; j++)
- {
- p->org[j] = org[j] + ((rand()%32)-16);
- p->vel[j] = (rand()%512)-256;
- }
- }
+ if (count & 3)
+ {
+ p->alpha = (count & 3) * 16 + (rand()&15);
+ count &= ~3;
}
else
{
- p->texnum = flareparticletexture;
- p->scale = 4;
- p->alpha = 255;
- p->die = cl.time + 0.1*(rand()%5);
- p->color = (color&~7) + (rand()&7);
- p->type = pt_static; //slowgrav;
- for (j=0 ; j<3 ; j++)
- {
- p->org[j] = org[j] + ((rand()&15)-8);
- p->vel[j] = dir[j]*15;// + (rand()%300)-150;
- }
+ p->alpha = 64;
+ count -= 4;
+ }
+
+ p->texnum = particletexture;
+ p->scale = 6;
+ p->die = cl.time + 1; //lhrandom(0.1, 0.5);
+ p->color = (color&~7) + (rand()&7);
+ p->type = pt_fade; //static; //slowgrav;
+ for (j=0 ; j<3 ; j++)
+ {
+ p->org[j] = org[j] + ((rand()&15)-8);
+ p->vel[j] = dir[j]*15;// + (rand()%300)-150;
}
}
}
free_particles = p->next;
p->next = active_particles;
active_particles = p;
- p->contents = 0;
if (type == 0) // sparks
{
p->texnum = smokeparticletexture[rand()&7];
}
else // blood
{
- p->texnum = bloodcloudparticletexture;
+ p->texnum = smokeparticletexture[rand()&7];
p->scale = 12;
p->alpha = 128;
p->color = (rand()&3)+68;
p->next = active_particles;
active_particles = p;
- p->contents = 0;
p->texnum = flareparticletexture;
p->scale = 2;
p->alpha = 255;
p->next = active_particles;
active_particles = p;
- p->contents = 0;
p->texnum = bloodcloudparticletexture;
p->scale = 12;
p->alpha = 96 + (rand()&63);
p->next = active_particles;
active_particles = p;
- p->contents = 0;
p->texnum = flareparticletexture;
p->scale = 6;
p->alpha = 255;
org[1] = diff[1] * (float) (rand()&1023) * (1.0 / 1024.0) + mins[1];
org[2] = z;
- p->contents = 0;
p->scale = 1.5;
p->alpha = 255;
p->die = t;
p->next = active_particles;
active_particles = p;
- p->contents = 0;
p->texnum = flareparticletexture;
p->scale = 10;
p->alpha = 128;
p->next = active_particles;
active_particles = p;
- p->contents = 0;
p->texnum = flareparticletexture;
p->scale = 4;
- p->alpha = (1 + rand()&7) * 32;
+ p->alpha = lhrandom(32,256);
p->die = cl.time + 5;
p->color = 254; //8 + (rand()&7);
p->type = pt_fadespark;
void R_RocketTrail (vec3_t start, vec3_t end, int type, entity_t *ent)
{
vec3_t vec;
- float len, dec, t, nt, speed;
+ float len, dec = 0, t, nt, speed;
int j, contents, bubbles;
particle_t *p;
static int tracercount;
p->next = active_particles;
active_particles = p;
- p->contents = 0;
p->vel[0] = p->vel[1] = p->vel[2] = 0;
p->die = cl.time + 2;
if (bubbles)
{
dec = 0.005f;
- p->contents = contents;
p->texnum = bubbleparticletexture;
p->scale = lhrandom(1,2);
p->alpha = 255;
*/
case 2: // blood
- dec = 0.03f;
- p->texnum = bloodcloudparticletexture;
- p->scale = lhrandom(8, 12);
+ dec = 0.025f;
+ p->texnum = smokeparticletexture[rand()&7];
+ p->scale = lhrandom(6, 8);
p->alpha = 255;
p->color = (rand()&3)+68;
p->type = pt_bloodcloud;
break;
case 4: // slight blood
- dec = 0.03f; // sparse trail
- p->texnum = bloodcloudparticletexture;
- p->scale = lhrandom(8,12);
- p->alpha = 255;
+ dec = 0.025f; // sparse trail
+ p->texnum = smokeparticletexture[rand()&7];
+ p->scale = lhrandom(6, 8);
+ p->alpha = 192;
p->color = (rand()&3)+68;
p->type = pt_fadespark2;
p->die = cl.time + 2;
case 6: // voor trail
dec = 0.05f; // sparse trail
- p->texnum = flareparticletexture;
- p->scale = lhrandom(4, 8);
+ p->texnum = smokeparticletexture[rand()&7];
+ p->scale = lhrandom(3, 5);
p->alpha = 255;
p->color = 9*16 + 8 + (rand()&3);
p->type = pt_fadespark2;
vec3_t vec;
float len;
particle_t *p;
- static int tracercount;
if (!r_particles.value) return; // LordHavoc: particles are optional
VectorSubtract (end, start, vec);
VectorCopy (vec3_origin, p->vel);
- p->contents = 0;
p->texnum = flareparticletexture;
p->scale = 8;
p->alpha = 192;
if (!p)
break;
- a = Mod_PointInLeaf(p->org, cl.worldmodel)->contents;
- if (a == CONTENTS_SOLID || p->contents && p->contents != a)
- {
- p->die = -1;
- continue;
- }
VectorSubtract(p->org, r_refdef.vieworg, v);
if (DotProduct(v, v) >= 256.0f)
{
p->color = ramp2[(int)p->ramp];
// p->vel[2] -= grav1; // LordHavoc: apply full gravity to explosion sparks
for (i=0 ; i<3 ; i++)
- p->vel[i] -= p->vel[i]*frametime;
-// p->vel[2] -= grav;
+// p->vel[i] -= p->vel[i]*frametime;
+ p->vel[i] *= dvel;
+//// p->vel[2] -= grav;
break;
case pt_blob:
p->die = -1;
break;
case pt_bloodcloud:
- p->scale -= frametime * 24;
- p->alpha -= frametime * 128;
+ p->scale += frametime * 4;
+ p->alpha -= frametime * 64;
p->vel[2] -= grav;
if (p->alpha < 1 || p->scale < 1)
p->die = -1;
if (p->alpha < 1)
p->die = -1;
break;
+ case pt_fade:
+ p->alpha -= frametime * 512;
+ if (p->alpha < 1)
+ p->die = -1;
+ break;
case pt_bubble:
+ if (Mod_PointInLeaf(p->org, cl.worldmodel)->contents == CONTENTS_EMPTY)
+ p->die = -1;
p->vel[2] += grav1 * 2;
if (p->vel[2] >= 200)
- p->vel[2] = 136+rand()&63;
+ p->vel[2] = lhrandom(130, 200);
if (cl.time > p->time2)
{
- p->time2 = cl.time + (rand()&7)*0.0625;
- p->vel[0] = (rand()&63)-32;
- p->vel[1] = (rand()&63)-32;
+ p->time2 = cl.time + lhrandom(0, 0.5);
+ p->vel[0] = lhrandom(-32,32);
+ p->vel[1] = lhrandom(-32,32);
}
p->alpha -= frametime * 64;
if (p->alpha < 1)