mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-02-18 09:51:40 +00:00
total merge of the particle system (except r_part.c isn't in qw yet)
This commit is contained in:
parent
6ee0692e58
commit
664c640e42
8 changed files with 46 additions and 65 deletions
|
@ -319,6 +319,7 @@ void CL_InitInput (void);
|
||||||
void CL_SendCmd (void);
|
void CL_SendCmd (void);
|
||||||
void CL_SendMove (usercmd_t *cmd);
|
void CL_SendMove (usercmd_t *cmd);
|
||||||
|
|
||||||
|
void CL_ParseParticleEffect (void);
|
||||||
void CL_ParseTEnt (void);
|
void CL_ParseTEnt (void);
|
||||||
void CL_UpdateTEnts (void);
|
void CL_UpdateTEnts (void);
|
||||||
|
|
||||||
|
|
|
@ -139,7 +139,6 @@ void R_RemoveEfrags (entity_t *ent);
|
||||||
void R_NewMap (void);
|
void R_NewMap (void);
|
||||||
|
|
||||||
|
|
||||||
void R_ParseParticleEffect (void);
|
|
||||||
struct entity_s;
|
struct entity_s;
|
||||||
void R_RocketTrail (int type, struct entity_s *ent);
|
void R_RocketTrail (int type, struct entity_s *ent);
|
||||||
void R_RunParticleEffect (vec3_t org, int color, int count);
|
void R_RunParticleEffect (vec3_t org, int color, int count);
|
||||||
|
|
|
@ -790,7 +790,7 @@ CL_ParseServerMessage (void)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case svc_particle:
|
case svc_particle:
|
||||||
R_ParseParticleEffect ();
|
CL_ParseParticleEffect ();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case svc_spawnbaseline:
|
case svc_spawnbaseline:
|
||||||
|
|
|
@ -524,3 +524,30 @@ CL_UpdateTEnts (void)
|
||||||
CL_UpdateBeams ();
|
CL_UpdateBeams ();
|
||||||
CL_UpdateExplosions ();
|
CL_UpdateExplosions ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
CL_ParseParticleEffect
|
||||||
|
|
||||||
|
Parse an effect out of the server message
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
CL_ParseParticleEffect (void)
|
||||||
|
{
|
||||||
|
vec3_t org, dir;
|
||||||
|
int i, count, msgcount, color;
|
||||||
|
|
||||||
|
for (i = 0; i < 3; i++)
|
||||||
|
org[i] = MSG_ReadCoord (net_message);
|
||||||
|
for (i = 0; i < 3; i++)
|
||||||
|
dir[i] = MSG_ReadChar (net_message) * (1.0 / 16);
|
||||||
|
msgcount = MSG_ReadByte (net_message);
|
||||||
|
color = MSG_ReadByte (net_message);
|
||||||
|
|
||||||
|
if (msgcount == 255)
|
||||||
|
count = 1024;
|
||||||
|
else
|
||||||
|
count = msgcount;
|
||||||
|
|
||||||
|
R_RunParticleEffect (org, color, count);
|
||||||
|
}
|
||||||
|
|
|
@ -299,7 +299,6 @@ R_RunGunshotEffect (vec3_t org, int count)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
static void
|
static void
|
||||||
R_BloodPuff (vec3_t org, int count)
|
R_BloodPuff (vec3_t org, int count)
|
||||||
{
|
{
|
||||||
|
@ -310,7 +309,6 @@ R_BloodPuff (vec3_t org, int count)
|
||||||
vec3_origin, cl.time + 99, 68 + (rand () & 3), 128,
|
vec3_origin, cl.time + 99, 68 + (rand () & 3), 128,
|
||||||
vec3_origin, vec3_origin);
|
vec3_origin, vec3_origin);
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -323,6 +321,12 @@ R_RunPuffEffect (vec3_t org, byte type, byte count)
|
||||||
case TE_GUNSHOT:
|
case TE_GUNSHOT:
|
||||||
R_RunGunshotEffect (org, count);
|
R_RunGunshotEffect (org, count);
|
||||||
break;
|
break;
|
||||||
|
case TE_BLOOD:
|
||||||
|
R_BloodPuff (org, count);
|
||||||
|
break;
|
||||||
|
case TE_LIGHTNINGBLOOD:
|
||||||
|
R_BloodPuff (org, 5 + (rand () & 1));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -448,12 +452,12 @@ R_RocketTrail (int type, entity_t *ent)
|
||||||
byte palpha, pcolor;
|
byte palpha, pcolor;
|
||||||
|
|
||||||
if (type == 0)
|
if (type == 0)
|
||||||
R_AddFire (ent->msg_origins[1], ent->origin, ent);
|
R_AddFire (ent->old_origin, ent->origin, ent);
|
||||||
|
|
||||||
if (!r_particles->int_val)
|
if (!r_particles->int_val)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
VectorSubtract (ent->origin, ent->msg_origins[1], vec);
|
VectorSubtract (ent->origin, ent->old_origin, vec);
|
||||||
len = VectorNormalize (vec);
|
len = VectorNormalize (vec);
|
||||||
while (len > 0) {
|
while (len > 0) {
|
||||||
VectorCopy (vec3_origin, up);
|
VectorCopy (vec3_origin, up);
|
||||||
|
@ -477,7 +481,7 @@ R_RocketTrail (int type, entity_t *ent)
|
||||||
pcolor = (rand () & 3) + 12;
|
pcolor = (rand () & 3) + 12;
|
||||||
palpha = 128 + (rand () & 31);
|
palpha = 128 + (rand () & 31);
|
||||||
// VectorVectors(vec, right, up); // Mercury's Rings
|
// VectorVectors(vec, right, up); // Mercury's Rings
|
||||||
VectorCopy (ent->msg_origins[1], porg);
|
VectorCopy (ent->old_origin, porg);
|
||||||
// ptex = part_tex_smoke_ring[rand () & 7]; // Mercury's Rings
|
// ptex = part_tex_smoke_ring[rand () & 7]; // Mercury's Rings
|
||||||
ptex = part_tex_smoke[rand () & 7];
|
ptex = part_tex_smoke[rand () & 7];
|
||||||
break;
|
break;
|
||||||
|
@ -487,7 +491,7 @@ R_RocketTrail (int type, entity_t *ent)
|
||||||
// pcolor = (rand () & 255); // Misty-chan's Easter Egg
|
// pcolor = (rand () & 255); // Misty-chan's Easter Egg
|
||||||
pcolor = (rand () & 3);
|
pcolor = (rand () & 3);
|
||||||
palpha = 128 + (rand () & 31);
|
palpha = 128 + (rand () & 31);
|
||||||
VectorCopy (ent->msg_origins[1], porg);
|
VectorCopy (ent->old_origin, porg);
|
||||||
ptex = part_tex_smoke[rand () & 7];
|
ptex = part_tex_smoke[rand () & 7];
|
||||||
break;
|
break;
|
||||||
case 2: // blood
|
case 2: // blood
|
||||||
|
@ -498,7 +502,7 @@ R_RocketTrail (int type, entity_t *ent)
|
||||||
pcolor = 68 + (rand () & 3);
|
pcolor = 68 + (rand () & 3);
|
||||||
for (j = 0; j < 3; j++) {
|
for (j = 0; j < 3; j++) {
|
||||||
pvel[j] = lhrandom (-3, 3) * type;
|
pvel[j] = lhrandom (-3, 3) * type;
|
||||||
porg[j] = ent->msg_origins[1][j] + lhrandom (-1.5, 1.5);
|
porg[j] = ent->old_origin[j] + lhrandom (-1.5, 1.5);
|
||||||
}
|
}
|
||||||
ptype = pt_grav;
|
ptype = pt_grav;
|
||||||
break;
|
break;
|
||||||
|
@ -510,7 +514,7 @@ R_RocketTrail (int type, entity_t *ent)
|
||||||
pscale = lhrandom (.75, 1.5);
|
pscale = lhrandom (.75, 1.5);
|
||||||
pdie = cl.time + 0.3;
|
pdie = cl.time + 0.3;
|
||||||
for (j = 0; j < 3; j++)
|
for (j = 0; j < 3; j++)
|
||||||
porg[j] = ent->msg_origins[1][j] + lhrandom (-8, 8);
|
porg[j] = ent->old_origin[j] + lhrandom (-8, 8);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
case 5: // tracer
|
case 5: // tracer
|
||||||
|
@ -528,7 +532,7 @@ R_RocketTrail (int type, entity_t *ent)
|
||||||
|
|
||||||
tracercount++;
|
tracercount++;
|
||||||
|
|
||||||
VectorCopy (ent->msg_origins[1], porg);
|
VectorCopy (ent->old_origin, porg);
|
||||||
if (tracercount & 1) {
|
if (tracercount & 1) {
|
||||||
pvel[0] = 30 * vec[1];
|
pvel[0] = 30 * vec[1];
|
||||||
pvel[1] = 30 * -vec[0];
|
pvel[1] = 30 * -vec[0];
|
||||||
|
@ -541,7 +545,7 @@ R_RocketTrail (int type, entity_t *ent)
|
||||||
}
|
}
|
||||||
|
|
||||||
VectorScale (vec, min(dist, len), subtract);
|
VectorScale (vec, min(dist, len), subtract);
|
||||||
VectorAdd (ent->msg_origins[1], subtract, ent->msg_origins[1]);
|
VectorAdd (ent->old_origin, subtract, ent->old_origin);
|
||||||
len -= dist;
|
len -= dist;
|
||||||
|
|
||||||
particle_new (ptype, ptex, porg, pscale, pvel, pdie, pcolor, palpha,
|
particle_new (ptype, ptex, porg, pscale, pvel, pdie, pcolor, palpha,
|
||||||
|
|
|
@ -34,10 +34,10 @@
|
||||||
#include "QF/qargs.h"
|
#include "QF/qargs.h"
|
||||||
#include "QF/compat.h"
|
#include "QF/compat.h"
|
||||||
#include "QF/console.h"
|
#include "QF/console.h"
|
||||||
#include "QF/msg.h"
|
|
||||||
|
|
||||||
|
#include "client.h"
|
||||||
#include "r_local.h"
|
#include "r_local.h"
|
||||||
#include "server.h"
|
#include "render.h"
|
||||||
|
|
||||||
#define MAX_PARTICLES 2048 // default max # of particles at one
|
#define MAX_PARTICLES 2048 // default max # of particles at one
|
||||||
// time
|
// time
|
||||||
|
@ -53,26 +53,6 @@ int r_numparticles;
|
||||||
vec3_t r_pright, r_pup, r_ppn;
|
vec3_t r_pright, r_pup, r_ppn;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
R_InitParticles (void)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
i = COM_CheckParm ("-particles");
|
|
||||||
|
|
||||||
if (i) {
|
|
||||||
r_numparticles = (int) (atoi (com_argv[i + 1]));
|
|
||||||
if (r_numparticles < ABSOLUTE_MIN_PARTICLES)
|
|
||||||
r_numparticles = ABSOLUTE_MIN_PARTICLES;
|
|
||||||
} else {
|
|
||||||
r_numparticles = MAX_PARTICLES;
|
|
||||||
}
|
|
||||||
|
|
||||||
particles = (particle_t *)
|
|
||||||
Hunk_AllocName (r_numparticles * sizeof (particle_t), "particles");
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef QUAKE2
|
#ifdef QUAKE2
|
||||||
void
|
void
|
||||||
R_DarkFieldParticles (entity_t *ent)
|
R_DarkFieldParticles (entity_t *ent)
|
||||||
|
@ -181,32 +161,3 @@ R_EntityParticles (entity_t *ent)
|
||||||
forward[2] * beamlength;
|
forward[2] * beamlength;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
===============
|
|
||||||
R_ParseParticleEffect
|
|
||||||
|
|
||||||
Parse an effect out of the server message
|
|
||||||
===============
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
R_ParseParticleEffect (void)
|
|
||||||
{
|
|
||||||
vec3_t org, dir;
|
|
||||||
int i, count, msgcount, color;
|
|
||||||
|
|
||||||
for (i = 0; i < 3; i++)
|
|
||||||
org[i] = MSG_ReadCoord (net_message);
|
|
||||||
for (i = 0; i < 3; i++)
|
|
||||||
dir[i] = MSG_ReadChar (net_message) * (1.0 / 16);
|
|
||||||
msgcount = MSG_ReadByte (net_message);
|
|
||||||
color = MSG_ReadByte (net_message);
|
|
||||||
|
|
||||||
if (msgcount == 255)
|
|
||||||
count = 1024;
|
|
||||||
else
|
|
||||||
count = msgcount;
|
|
||||||
|
|
||||||
R_RunParticleEffect (org, color, count);
|
|
||||||
}
|
|
||||||
|
|
|
@ -173,8 +173,6 @@ R_Init (void)
|
||||||
r_refdef.xOrigin = XCENTERING;
|
r_refdef.xOrigin = XCENTERING;
|
||||||
r_refdef.yOrigin = YCENTERING;
|
r_refdef.yOrigin = YCENTERING;
|
||||||
|
|
||||||
R_InitParticles ();
|
|
||||||
|
|
||||||
// TODO: collect 386-specific code in one place
|
// TODO: collect 386-specific code in one place
|
||||||
#ifdef USE_INTEL_ASM
|
#ifdef USE_INTEL_ASM
|
||||||
Sys_MakeCodeWriteable ((long) R_EdgeCodeStart,
|
Sys_MakeCodeWriteable ((long) R_EdgeCodeStart,
|
||||||
|
|
|
@ -66,6 +66,7 @@ D_DrawParticle (particle_t *pparticle)
|
||||||
|
|
||||||
if (transformed[2] < PARTICLE_Z_CLIP)
|
if (transformed[2] < PARTICLE_Z_CLIP)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// project the point
|
// project the point
|
||||||
// FIXME: preadjust xcenter and ycenter
|
// FIXME: preadjust xcenter and ycenter
|
||||||
zi = 1.0 / transformed[2];
|
zi = 1.0 / transformed[2];
|
||||||
|
|
Loading…
Reference in a new issue