]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - clvm_cmds.c
Separate box and trail particles. Makes Xonotic's Nex beam possible again.
[xonotic/darkplaces.git] / clvm_cmds.c
index 6ca2749c89746e45e64f2fe6c918ce2e9c839a29..c0cad22641676d07702b8cce2b5f62825e75265f 100644 (file)
@@ -1364,10 +1364,13 @@ static void VM_CL_boxparticles (prvm_prog_t *prog)
        vec3_t origin_from, origin_to, dir_from, dir_to;
        float count;
        int flags;
-       float tintmins[4], tintmaxs[4];
+       qboolean istrail;
+       float tintmins[4], tintmaxs[4], fade;
        VM_SAFEPARMCOUNTRANGE(7, 8, VM_CL_boxparticles);
 
        effectnum = (int)PRVM_G_FLOAT(OFS_PARM0);
+       if (effectnum < 0)
+               return;
        // own = PRVM_G_EDICT(OFS_PARM1); // TODO find use for this
        VectorCopy(PRVM_G_VECTOR(OFS_PARM2), origin_from);
        VectorCopy(PRVM_G_VECTOR(OFS_PARM3), origin_to  );
@@ -1378,8 +1381,12 @@ static void VM_CL_boxparticles (prvm_prog_t *prog)
                flags = PRVM_G_FLOAT(OFS_PARM7);
        else
                flags = 0;
+
        Vector4Set(tintmins, 1, 1, 1, 1);
        Vector4Set(tintmaxs, 1, 1, 1, 1);
+       fade = 1;
+       istrail = false;
+
        if(flags & 1) // read alpha
        {
                tintmins[3] = PRVM_clientglobalfloat(particles_alphamin);
@@ -1390,9 +1397,19 @@ static void VM_CL_boxparticles (prvm_prog_t *prog)
                VectorCopy(PRVM_clientglobalvector(particles_colormin), tintmins);
                VectorCopy(PRVM_clientglobalvector(particles_colormax), tintmaxs);
        }
-       if (effectnum < 0)
-               return;
-       CL_ParticleTrail(effectnum, count, origin_from, origin_to, dir_from, dir_to, NULL, 0, true, true, tintmins, tintmaxs);
+       if(flags & 4) // read fade
+       {
+               fade = PRVM_clientglobalfloat(particles_fade);
+       }
+       if(flags & 128) // draw as trail
+       {
+               istrail = true;
+       }
+
+       if (istrail)
+               CL_ParticleTrail(effectnum, count, origin_from, origin_to, dir_from, dir_to, NULL, 0, true, true, tintmins, tintmaxs, fade);
+       else
+               CL_ParticleBox(effectnum, count, origin_from, origin_to, dir_from, dir_to, NULL, 0, true, true, tintmins, tintmaxs, fade);
 }
 
 //#531 void(float pause) setpause