Skip to content

Commit

Permalink
Add custom particle shape by sw_custom_particles.
Browse files Browse the repository at this point in the history
 0 - use rectangle (default shape)
 1 - use hexagon
  • Loading branch information
0lvin committed Apr 13, 2018
1 parent 23d25db commit 189a34e
Show file tree
Hide file tree
Showing 2 changed files with 91 additions and 33 deletions.
2 changes: 2 additions & 0 deletions src/client/refresh/soft/sw_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ cvar_t *sw_stipplealpha;
cvar_t *sw_surfcacheoverride;
cvar_t *sw_waterwarp;
static cvar_t *sw_overbrightbits;
cvar_t *sw_custom_particles;

cvar_t *r_drawworld;
static cvar_t *r_drawentities;
Expand Down Expand Up @@ -269,6 +270,7 @@ R_Register (void)
sw_surfcacheoverride = ri.Cvar_Get ("sw_surfcacheoverride", "0", 0);
sw_waterwarp = ri.Cvar_Get ("sw_waterwarp", "1", 0);
sw_overbrightbits = ri.Cvar_Get("sw_overbrightbits", "1.0", CVAR_ARCHIVE);
sw_custom_particles = ri.Cvar_Get("sw_custom_particles", "0", CVAR_ARCHIVE);
r_mode = ri.Cvar_Get( "r_mode", "0", CVAR_ARCHIVE );

r_lefthand = ri.Cvar_Get( "hand", "0", CVAR_USERINFO | CVAR_ARCHIVE );
Expand Down
122 changes: 89 additions & 33 deletions src/client/refresh/soft/sw_part.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "header/local.h"

static vec3_t r_pright, r_pup, r_ppn;
extern cvar_t *sw_custom_particles;

#define PARTICLE_33 0
#define PARTICLE_66 1
Expand Down Expand Up @@ -54,7 +55,8 @@ static void R_DrawParticle(partparms_t *partparms)
byte *pdest;
zvalue_t *pz;
int color = pparticle->color;
int i, izi, pix, count, u, v, min_int, max_int;
int i, izi, pix, count, u, v;
int custom_particle = (int)sw_custom_particles->value;

/*
** transform the particle
Expand Down Expand Up @@ -96,7 +98,7 @@ static void R_DrawParticle(partparms_t *partparms)
** determine the screen area covered by the particle,
** which also means clamping to a min and max
*/
pix = (izi * d_pix_mul) >> 8;
pix = (izi * d_pix_mul) >> 7;
if (pix < d_pix_min)
pix = d_pix_min;
else if (pix > d_pix_max)
Expand All @@ -107,58 +109,112 @@ static void R_DrawParticle(partparms_t *partparms)
*/
count = pix;

min_int = pix / 2;
max_int = (pix * 2) - min_int;
if (custom_particle == 0)
{
switch (level) {
case PARTICLE_33 :
for ( ; count ; count--, pz += d_zwidth, pdest += r_screenwidth)
{
//FIXME--do it in blocks of 8?
for (i=0 ; i<pix ; i++)
{
if (pz[i] <= izi)
{
pz[i] = izi;
pdest[i] = vid_alphamap[color + ((int)pdest[i]<<8)];
}
}
}
break;

switch (level) {
case PARTICLE_33 :
for ( ; count ; count--, pz += d_zwidth, pdest += r_screenwidth)
case PARTICLE_66 :
{
//FIXME--do it in blocks of 8?
for (i=0 ; i<pix ; i++)
int color_part = (color<<8);
for ( ; count ; count--, pz += d_zwidth, pdest += r_screenwidth)
{
int pos = i + count;
if (pos >= min_int && pos <= max_int && pz[i] <= izi)
for (i=0 ; i<pix ; i++)
{
pz[i] = izi;
pdest[i] = vid_alphamap[color + ((int)pdest[i]<<8)];
if (pz[i] <= izi)
{
pz[i] = izi;
pdest[i] = vid_alphamap[color_part + (int)pdest[i]];
}
}
}
break;
}
break;

case PARTICLE_66 :
{
int color_part = (color<<8);
for ( ; count ; count--, pz += d_zwidth, pdest += r_screenwidth)
{
for (i=0 ; i<pix ; i++)
default: //100
for ( ; count ; count--, pz += d_zwidth, pdest += r_screenwidth)
{
int pos = i + count;
if (pos >= min_int && pos <= max_int && pz[i] <= izi)
for (i=0 ; i<pix ; i++)
{
pz[i] = izi;
pdest[i] = vid_alphamap[color_part + (int)pdest[i]];
if (pz[i] <= izi)
{
pz[i] = izi;
pdest[i] = color;
}
}
}
break;
}
break;
}
else
{
int min_int, max_int;
min_int = pix / 2;
max_int = (pix * 2) - min_int;

default: //100
for ( ; count ; count--, pz += d_zwidth, pdest += r_screenwidth)
switch (level) {
case PARTICLE_33 :
for ( ; count ; count--, pz += d_zwidth, pdest += r_screenwidth)
{
//FIXME--do it in blocks of 8?
for (i=0 ; i<pix ; i++)
{
int pos = i + count;
if (pos >= min_int && pos <= max_int && pz[i] <= izi)
{
pz[i] = izi;
pdest[i] = vid_alphamap[color + ((int)pdest[i]<<8)];
}
}
}
break;

case PARTICLE_66 :
{
for (i=0 ; i<pix ; i++)
int color_part = (color<<8);
for ( ; count ; count--, pz += d_zwidth, pdest += r_screenwidth)
{
for (i=0 ; i<pix ; i++)
{
int pos = i + count;
if (pos >= min_int && pos <= max_int && pz[i] <= izi)
{
pz[i] = izi;
pdest[i] = vid_alphamap[color_part + (int)pdest[i]];
}
}
}
break;
}

default: //100
for ( ; count ; count--, pz += d_zwidth, pdest += r_screenwidth)
{
int pos = i + count;
if (pos >= min_int && pos <= max_int && pz[i] <= izi)
for (i=0 ; i<pix ; i++)
{
pz[i] = izi;
pdest[i] = color;
int pos = i + count;
if (pos >= min_int && pos <= max_int && pz[i] <= izi)
{
pz[i] = izi;
pdest[i] = color;
}
}
}
break;
}
break;
}
}

Expand Down

0 comments on commit 189a34e

Please sign in to comment.