]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - r_part.c
rearranged sky rendering code
[xonotic/darkplaces.git] / r_part.c
index fff8f378d92a76098bb53acc7ee8b4ef55239939..b5624af09b501195e340eb4a5d41acdb31988fb6 100644 (file)
--- a/r_part.c
+++ b/r_part.c
@@ -32,20 +32,19 @@ ptype_t;
 
 typedef struct particle_s
 {
+       ptype_t         type;
        vec3_t          org;
-       float           color;
        vec3_t          vel;
-       float           die;
-       ptype_t         type;
-       float           scale;
        rtexture_t      *tex;
        byte            dynlight; // if set the particle will be dynamically lit (if r_dynamicparticles is on), used for smoke and blood
        byte            rendermode; // a TPOLYTYPE_ value
-       byte            pad1;
+       byte            color;
        byte            pad2;
+       float           die;
+       float           scale;
        float           alpha; // 0-255
        float           time2; // used for various things (snow fluttering, for example)
-       float           bounce; // how much bounce-back from a surface the particle hits (0 = no physics, 1 = stop and slide, 2 = keep bouncing forever, 1.5 is typical of bouncing particles)
+       float           bounce; // how much bounce-back from a surface the particle hits (0 = no physics, 1 = stop and slide, 2 = keep bouncing forever, 1.5 is typical)
        vec3_t          oldorg;
        vec3_t          vel2; // used for snow fluttering (base velocity, wind for instance)
 //     vec3_t          direction; // used by decals
@@ -263,7 +262,7 @@ void R_InitParticleTexture (void)
        rocketglowparticletexture = R_LoadTexture ("glowparticletexture", 32, 32, &data[0][0][0], TEXF_MIPMAP | TEXF_ALPHA | TEXF_RGBA | TEXF_PRECACHE);
 }
 
-void r_part_start()
+void r_part_start(void)
 {
        particles = (particle_t *) qmalloc(r_numparticles * sizeof(particle_t));
        freeparticles = (void *) qmalloc(r_numparticles * sizeof(particle_t *));
@@ -271,14 +270,14 @@ void r_part_start()
        R_InitParticleTexture ();
 }
 
-void r_part_shutdown()
+void r_part_shutdown(void)
 {
        numparticles = 0;
        qfree(particles);
        qfree(freeparticles);
 }
 
-void r_part_newmap()
+void r_part_newmap(void)
 {
        numparticles = 0;
 }
@@ -467,7 +466,7 @@ void R_EntityParticles (entity_t *ent)
 
 void R_ReadPointFile_f (void)
 {
-       FILE    *f;
+       QFile   *f;
        vec3_t  org;
        int             r;
        int             c;
@@ -475,7 +474,7 @@ void R_ReadPointFile_f (void)
        
        sprintf (name,"maps/%s.pts", sv.name);
 
-       COM_FOpenFile (name, &f, false);
+       COM_FOpenFile (name, &f, false, true);
        if (!f)
        {
                Con_Printf ("couldn't open %s\n", name);
@@ -486,7 +485,8 @@ void R_ReadPointFile_f (void)
        c = 0;
        for (;;)
        {
-               r = fscanf (f,"%f %f %f\n", &org[0], &org[1], &org[2]);
+               char *str = Qgetline (f);
+               r = sscanf (str,"%f %f %f\n", &org[0], &org[1], &org[2]);
                if (r != 3)
                        break;
                c++;
@@ -499,7 +499,7 @@ void R_ReadPointFile_f (void)
                particle(pt_static, (-c)&15, particletexture, TPOLYTYPE_ALPHA, false, 2, 255, 99999, 0, org[0], org[1], org[2], 0, 0, 0);
        }
 
-       fclose (f);
+       Qclose (f);
        Con_Printf ("%i points read\n", c);
 }
 
@@ -853,7 +853,7 @@ void R_RocketTrail (vec3_t start, vec3_t end, int type, entity_t *ent)
        VectorSubtract(end, start, dir);
        VectorNormalize(dir);
 
-       if (type == 0) // rocket glow
+       if (type == 0 && host_frametime != 0) // rocket glow
                particle(pt_oneframe, 254, rocketglowparticletexture, TPOLYTYPE_ADD, false, 24, 255, 9999, 0, end[0] - 12 * dir[0], end[1] - 12 * dir[1], end[2] - 12 * dir[2], 0, 0, 0);
 
        t = ent->render.trail_time;
@@ -1014,8 +1014,6 @@ void R_RocketTrail2 (vec3_t start, vec3_t end, int color, entity_t *ent)
 R_DrawParticles
 ===============
 */
-extern cvar_t  sv_gravity;
-
 void R_MoveParticles (void)
 {
        particle_t              *p;
@@ -1366,7 +1364,7 @@ void R_DrawParticles (void)
        uprightangles[2] = 0;
        AngleVectors (uprightangles, NULL, right2, up2);
 
-       minparticledist = DotProduct(r_refdef.vieworg, vpn) + 16.0f;
+       minparticledist = DotProduct(r_origin, vpn) + 16.0f;
 
        for (i = 0, p = particles;i < numparticles;i++, p++)
        {
@@ -1386,7 +1384,7 @@ void R_DrawParticles (void)
                /*
                if (p->type == pt_decal)
                {
-                       VectorSubtract(p->org, r_refdef.vieworg, v);
+                       VectorSubtract(p->org, r_origin, v);
                        if (DotProduct(p->direction, v) < 0)
                                continue;
                }