ref: d1fc5eb5e8e11fa231383a2aa02d275429b06dfa
parent: 471b912a41d283f28b5fec6382adbdc13251fa8d
author: Samuel Villareal <svkaiser@gmail.com>
date: Mon Sep 6 19:18:42 EDT 2010
+ Vissprite clipping for MF_FEETCLIPPED flag Subversion-branch: /branches/strife-branch Subversion-revision: 2027
--- a/src/strife/r_segs.c
+++ b/src/strife/r_segs.c
@@ -182,7 +182,8 @@
col = (column_t *)(
(byte *)R_GetColumn(texnum,maskedtexturecol[dc_x]) -3);
- R_DrawMaskedColumn (col);
+ // villsa [STRIFE] added 0 argument
+ R_DrawMaskedColumn (col, 0);
maskedtexturecol[dc_x] = SHRT_MAX;
}
spryscale += rw_scalestep;
--- a/src/strife/r_things.c
+++ b/src/strife/r_things.c
@@ -289,6 +289,7 @@
vissprite_t vissprites[MAXVISSPRITES];
vissprite_t* vissprite_p;
int newvissprite;
+int sprbotscreen; // villsa [STRIFE]
@@ -348,7 +349,8 @@
fixed_t spryscale;
fixed_t sprtopscreen;
-void R_DrawMaskedColumn (column_t* column)
+// villsa [STRIFE] new baseclip argument
+void R_DrawMaskedColumn (column_t *column, int baseclip)
{
int topscreen;
int bottomscreen;
@@ -371,6 +373,13 @@
if (dc_yl <= mceilingclip[dc_x])
dc_yl = mceilingclip[dc_x]+1;
+ // villsa [STRIFE] checks for clipping
+ if(baseclip)
+ {
+ if(dc_yh > baseclip)
+ dc_yh = baseclip;
+ }
+
if (dc_yl <= dc_yh)
{
dc_source = (byte *)column + 3;
@@ -403,6 +412,7 @@
int texturecolumn;
fixed_t frac;
patch_t* patch;
+ int clip; // villsa [STRIFE]
patch = W_CacheLumpNum (vis->patch+firstspritelump, PU_CACHE);
@@ -427,6 +437,15 @@
frac = vis->startfrac;
spryscale = vis->scale;
sprtopscreen = centeryfrac - FixedMul(dc_texturemid,spryscale);
+
+ // villsa [STRIFE] clip sprite's feet if needed
+ if(vis->mobjflags & MF_FEETCLIPPED)
+ {
+ sprbotscreen = sprtopscreen + FixedMul(spryscale, patch->height<<FRACBITS);
+ clip = (sprbotscreen - FixedMul(10*FRACUNIT, spryscale)) >> FRACBITS;
+ }
+ else
+ clip = 0;
for (dc_x=vis->x1 ; dc_x<=vis->x2 ; dc_x++, frac += vis->xiscale)
{
@@ -437,7 +456,7 @@
#endif
column = (column_t *) ((byte *)patch +
LONG(patch->columnofs[texturecolumn]));
- R_DrawMaskedColumn (column);
+ R_DrawMaskedColumn (column, clip); // villsa [STRIFE] clip argument
}
colfunc = basecolfunc;
--- a/src/strife/r_things.h
+++ b/src/strife/r_things.h
@@ -51,7 +51,8 @@
extern fixed_t pspriteiscale;
-void R_DrawMaskedColumn (column_t* column);
+// villsa [STIFE] new argument
+void R_DrawMaskedColumn (column_t *column, int baseclip);
void R_SortVisSprites (void);