- // calculate start
- VectorCopy(explosion[i].origin, explosion[i].vert[j]);
- // calculate velocity
- dist = noise[explosionnoiseindex[j]] * (1.0f / 255.0f) + 0.5;
- VectorScale(explosionspherevertvel[j], dist, explosion[i].vertvel[j]);
+ // calculate start origin and velocity
+ n = noise[explosionnoiseindex[j]] * (1.0f / 255.0f) + 0.5;
+ dist = n * cl_explosions_size_start.value;
+ VectorMA(e->origin, dist, explosionpoint[j], e->vert[j]);
+ dist = n * (cl_explosions_size_end.value - cl_explosions_size_start.value) / cl_explosions_lifetime.value;
+ VectorScale(explosionpoint[j], dist, e->vertvel[j]);
+ // clip start origin
+ if (e->clipping)
+ {
+ trace = CL_TraceBox(e->origin, vec3_origin, vec3_origin, e->vert[j], true, NULL, SUPERCONTENTS_SOLID, false);
+ VectorCopy(trace.endpos, e->vert[i]);
+ }