diff options
author | James Haley | 2010-09-16 00:08:25 +0000 |
---|---|---|
committer | James Haley | 2010-09-16 00:08:25 +0000 |
commit | 0ac04776267a1a84724fcccfada12f769f4c315a (patch) | |
tree | 3e0f1cffdb2f1c88af6f7d00678fb240c5304fb2 /src/strife/r_things.c | |
parent | bbb39c2906ab01b75e7959a0d07560a4a56c459a (diff) | |
download | chocolate-doom-0ac04776267a1a84724fcccfada12f769f4c315a.tar.gz chocolate-doom-0ac04776267a1a84724fcccfada12f769f4c315a.tar.bz2 chocolate-doom-0ac04776267a1a84724fcccfada12f769f4c315a.zip |
Some reformatting, change of some strings to use DEH_String and
DEH_snprintf. Implemented proper logic for Shadowarmor that was missing
from P_GivePower, and added the code for making psprites translucent
and/or godmode-colormapped in R_DrawPSprite.
Subversion-branch: /branches/strife-branch
Subversion-revision: 2089
Diffstat (limited to 'src/strife/r_things.c')
-rw-r--r-- | src/strife/r_things.c | 68 |
1 files changed, 43 insertions, 25 deletions
diff --git a/src/strife/r_things.c b/src/strife/r_things.c index 792c9f95..bda7a81c 100644 --- a/src/strife/r_things.c +++ b/src/strife/r_things.c @@ -43,6 +43,9 @@ #include "doomstat.h" +// haleyjd +#include "p_local.h" + #define MINZ (FRACUNIT*4) @@ -710,14 +713,14 @@ void R_DrawPSprite (pspdef_t* psp) // decide which patch to use #ifdef RANGECHECK if ( (unsigned)psp->state->sprite >= (unsigned int) numsprites) - I_Error ("R_ProjectSprite: invalid sprite number %i ", - psp->state->sprite); + I_Error ("R_ProjectSprite: invalid sprite number %i ", + psp->state->sprite); #endif sprdef = &sprites[psp->state->sprite]; #ifdef RANGECHECK if ( (psp->state->frame & FF_FRAMEMASK) >= sprdef->numframes) - I_Error ("R_ProjectSprite: invalid sprite frame %i : %i ", - psp->state->sprite, psp->state->frame); + I_Error ("R_ProjectSprite: invalid sprite frame %i : %i ", + psp->state->sprite, psp->state->frame); #endif sprframe = &sprdef->spriteframes[ psp->state->frame & FF_FRAMEMASK ]; @@ -726,20 +729,20 @@ void R_DrawPSprite (pspdef_t* psp) // calculate edges of the shape tx = psp->sx-160*FRACUNIT; - + tx -= spriteoffset[lump]; x1 = (centerxfrac + FixedMul (tx,pspritescale) ) >>FRACBITS; // off the right side if (x1 > viewwidth) - return; + return; tx += spritewidth[lump]; x2 = ((centerxfrac + FixedMul (tx, pspritescale) ) >>FRACBITS) - 1; // off the left side if (x2 < 0) - return; + return; // store information in a vissprite vis = &avis; @@ -750,46 +753,61 @@ void R_DrawPSprite (pspdef_t* psp) if (flip) { - vis->xiscale = -pspriteiscale; - vis->startfrac = spritewidth[lump]-1; + vis->xiscale = -pspriteiscale; + vis->startfrac = spritewidth[lump]-1; } else { - vis->xiscale = pspriteiscale; - vis->startfrac = 0; + vis->xiscale = pspriteiscale; + vis->startfrac = 0; } // villsa [STRIFE] calculate y offset with view pitch vis->texturemid = ((BASEYCENTER<<FRACBITS)+FRACUNIT/2)-(psp->sy-spritetopoffset[lump]) + FixedMul(vis->xiscale, (centery-viewheight/2)<<FRACBITS); - + if (vis->x1 > x1) - vis->startfrac += vis->xiscale*(vis->x1-x1); + vis->startfrac += vis->xiscale*(vis->x1-x1); vis->patch = lump; if (viewplayer->powers[pw_invisibility] > 4*32 - || viewplayer->powers[pw_invisibility] & 8) + || viewplayer->powers[pw_invisibility] & 8) { - // shadow draw - vis->colormap = NULL; + // shadow draw + vis->colormap = spritelights[MAXLIGHTSCALE-1]; + vis->mobjflags |= MF_SHADOW; } - else if (fixedcolormap) + else if(viewplayer->powers[pw_invisibility] & 4) { - // fixed color - vis->colormap = fixedcolormap; + vis->mobjflags |= (MF_SHADOW|MF_MVIS); } - else if (psp->state->frame & FF_FULLBRIGHT) + + // When not MVIS, or if SHADOW, behave normally: + if(!(viewplayer->mo->flags & MF_MVIS) || (viewplayer->mo->flags & MF_SHADOW)) { - // full bright - vis->colormap = colormaps; + if (fixedcolormap) + { + // fixed color + vis->colormap = fixedcolormap; + } + else if (psp->state->frame & FF_FULLBRIGHT) + { + // full bright + vis->colormap = colormaps; + } + else + { + // local light + vis->colormap = spritelights[MAXLIGHTSCALE-1]; + } } else { - // local light - vis->colormap = spritelights[MAXLIGHTSCALE-1]; + // When MVIS, use invulnerability colormap + vis->colormap = colormaps + INVERSECOLORMAP * 256 * sizeof(lighttable_t); } - + R_DrawVisSprite (vis, vis->x1, vis->x2); } |