diff --git a/src/r_bsp.cpp b/src/r_bsp.cpp index 545d009d9..8ea5c963f 100644 --- a/src/r_bsp.cpp +++ b/src/r_bsp.cpp @@ -541,7 +541,7 @@ void R_AddLine (seg_t *line) if (WallC.Init(tx1, ty1, tx2, ty2, 32)) return; - if (WallC.sx1 > WindowRight || WallC.sx2 < WindowLeft) + if (WallC.sx1 >= WindowRight || WallC.sx2 <= WindowLeft) return; if (line->linedef == NULL) diff --git a/src/r_main.cpp b/src/r_main.cpp index b136d9cc6..4cb78311f 100644 --- a/src/r_main.cpp +++ b/src/r_main.cpp @@ -667,10 +667,10 @@ void R_EnterMirror (drawseg_t *ds, int depth) ActiveWallMirror = ds->curline; R_ClearPlanes (false); - R_ClearClipSegs (ds->x1, ds->x2 + 1); + R_ClearClipSegs (ds->x1, ds->x2); - memcpy (ceilingclip + ds->x1, openings + ds->sprtopclip, (ds->x2 - ds->x1 + 1)*sizeof(*ceilingclip)); - memcpy (floorclip + ds->x1, openings + ds->sprbottomclip, (ds->x2 - ds->x1 + 1)*sizeof(*floorclip)); + memcpy (ceilingclip + ds->x1, openings + ds->sprtopclip, (ds->x2 - ds->x1)*sizeof(*ceilingclip)); + memcpy (floorclip + ds->x1, openings + ds->sprbottomclip, (ds->x2 - ds->x1)*sizeof(*floorclip)); WindowLeft = ds->x1; WindowRight = ds->x2; @@ -777,7 +777,7 @@ void R_RenderActorView (AActor *actor, bool dontmaplines) } WindowLeft = 0; - WindowRight = viewwidth - 1; + WindowRight = viewwidth; MirrorFlags = 0; ActiveWallMirror = NULL; diff --git a/src/r_plane.cpp b/src/r_plane.cpp index 84967c164..8238adec2 100644 --- a/src/r_plane.cpp +++ b/src/r_plane.cpp @@ -708,8 +708,8 @@ visplane_t *R_FindPlane (const secplane_t &height, FTextureID picnum, int lightl check->colormap = basecolormap; // [RH] Save colormap check->sky = sky; check->skybox = skybox; - check->minx = viewwidth; // Was SCREENWIDTH -- killough 11/98 - check->maxx = -1; + check->left = viewwidth; // Was SCREENWIDTH -- killough 11/98 + check->right = 0; check->extralight = stacked_extralight; check->visibility = stacked_visibility; check->viewx = stacked_viewx; @@ -740,38 +740,38 @@ visplane_t *R_CheckPlane (visplane_t *pl, int start, int stop) int x; assert (start >= 0 && start < viewwidth); - assert (stop >= start && stop < viewwidth); + assert (stop > start && stop <= viewwidth); - if (start < pl->minx) + if (start < pl->left) { - intrl = pl->minx; + intrl = pl->left; unionl = start; } else { - unionl = pl->minx; + unionl = pl->left; intrl = start; } - if (stop > pl->maxx) + if (stop > pl->right) { - intrh = pl->maxx; + intrh = pl->right; unionh = stop; } else { - unionh = pl->maxx; + unionh = pl->right; intrh = stop; } - for (x = intrl; x <= intrh && pl->top[x] == 0x7fff; x++) + for (x = intrl; x < intrh && pl->top[x] == 0x7fff; x++) ; - if (x > intrh) + if (x >= intrh) { // use the same visplane - pl->minx = unionl; - pl->maxx = unionh; + pl->left = unionl; + pl->right = unionh; } else { @@ -811,8 +811,8 @@ visplane_t *R_CheckPlane (visplane_t *pl, int start, int stop) new_pl->MirrorFlags = pl->MirrorFlags; new_pl->CurrentSkybox = pl->CurrentSkybox; pl = new_pl; - pl->minx = start; - pl->maxx = stop; + pl->left = start; + pl->right = stop; clearbufshort (pl->top, viewwidth, 0x7fff); } return pl; @@ -922,23 +922,23 @@ static void R_DrawSky (visplane_t *pl) { int x; - if (pl->minx > pl->maxx) + if (pl->left >= pl->right) return; dc_iscale = skyiscale; - clearbuf (swall+pl->minx, pl->maxx-pl->minx+1, dc_iscale<<2); + clearbuf (swall+pl->left, pl->right-pl->left, dc_iscale<<2); if (MirrorFlags & RF_XFLIP) { - for (x = pl->minx; x <= pl->maxx; ++x) + for (x = pl->left; x < pl->right; ++x) { lwall[x] = (viewwidth - x) << FRACBITS; } } else { - for (x = pl->minx; x <= pl->maxx; ++x) + for (x = pl->left; x < pl->right; ++x) { lwall[x] = x << FRACBITS; } @@ -961,7 +961,7 @@ static void R_DrawSky (visplane_t *pl) { lastskycol[x] = 0xffffffff; } - wallscan (pl->minx, pl->maxx, (short *)pl->top, (short *)pl->bottom, swall, lwall, + wallscan (pl->left, pl->right, (short *)pl->top, (short *)pl->bottom, swall, lwall, frontyScale, backskytex == NULL ? R_GetOneSkyColumn : R_GetTwoSkyColumns); } else @@ -1001,7 +1001,7 @@ static void R_DrawSkyStriped (visplane_t *pl) while (yl < viewheight) { - for (x = pl->minx; x <= pl->maxx; ++x) + for (x = pl->left; x < pl->right; ++x) { top[x] = MAX (yl, (short)pl->top[x]); bot[x] = MIN (yh, (short)pl->bottom[x]); @@ -1010,7 +1010,7 @@ static void R_DrawSkyStriped (visplane_t *pl) { lastskycol[x] = 0xffffffff; } - wallscan (pl->minx, pl->maxx, top, bot, swall, lwall, rw_pic->yScale, + wallscan (pl->left, pl->right, top, bot, swall, lwall, rw_pic->yScale, backskytex == NULL ? R_GetOneSkyColumn : R_GetTwoSkyColumns); yl = yh; yh += drawheight; @@ -1094,7 +1094,7 @@ void R_DrawSinglePlane (visplane_t *pl, fixed_t alpha, bool additive, bool maske { // pl->angle = pa<minx > pl->maxx) + if (pl->left >= pl->right) return; if (r_drawflat) @@ -1205,7 +1205,7 @@ void R_DrawSkyBoxes () visplanes[MAXVISPLANES] = pl->next; pl->next = NULL; - if (pl->maxx < pl->minx || !r_skyboxes || numskyboxes == MAX_SKYBOX_PLANES) + if (pl->right < pl->left || !r_skyboxes || numskyboxes == MAX_SKYBOX_PLANES) { R_DrawSinglePlane (pl, OPAQUE, false, false); *freehead = pl; @@ -1250,11 +1250,11 @@ void R_DrawSkyBoxes () validcount++; // Make sure we see all sprites R_ClearPlanes (false); - R_ClearClipSegs (pl->minx, pl->maxx + 1); - WindowLeft = pl->minx; - WindowRight = pl->maxx; + R_ClearClipSegs (pl->left, pl->right); + WindowLeft = pl->left; + WindowRight = pl->right; - for (i = pl->minx; i <= pl->maxx; i++) + for (i = pl->left; i < pl->right; i++) { if (pl->top[i] == 0x7fff) { @@ -1274,16 +1274,16 @@ void R_DrawSkyBoxes () ds_p->siz2 = INT_MAX; ds_p->sz1 = 0; ds_p->sz2 = 0; - ds_p->x1 = pl->minx; - ds_p->x2 = pl->maxx; + ds_p->x1 = pl->left; + ds_p->x2 = pl->right; ds_p->silhouette = SIL_BOTH; - ds_p->sprbottomclip = R_NewOpening (pl->maxx - pl->minx + 1); - ds_p->sprtopclip = R_NewOpening (pl->maxx - pl->minx + 1); + ds_p->sprbottomclip = R_NewOpening (pl->right - pl->left); + ds_p->sprtopclip = R_NewOpening (pl->right - pl->left); ds_p->maskedtexturecol = ds_p->swall = -1; ds_p->bFogBoundary = false; ds_p->fake = 0; - memcpy (openings + ds_p->sprbottomclip, floorclip + pl->minx, (pl->maxx - pl->minx + 1)*sizeof(short)); - memcpy (openings + ds_p->sprtopclip, ceilingclip + pl->minx, (pl->maxx - pl->minx + 1)*sizeof(short)); + memcpy (openings + ds_p->sprbottomclip, floorclip + pl->left, (pl->right - pl->left)*sizeof(short)); + memcpy (openings + ds_p->sprtopclip, ceilingclip + pl->left, (pl->right - pl->left)*sizeof(short)); firstvissprite = vissprite_p; firstdrawseg = ds_p++; @@ -1542,7 +1542,7 @@ void R_DrawNormalPlane (visplane_t *pl, fixed_t alpha, bool additive, bool maske ystepscale = (DWORD)(-(SDWORD)ystepscale); } - int x = pl->maxx - halfviewwidth; + int x = pl->right - halfviewwidth - 1; planeang = (planeang + (ANG90 >> ANGLETOFINESHIFT)) & FINEMASK; basexfrac = FixedMul (xscale, finecosine[planeang]) + x*xstepscale; baseyfrac = FixedMul (yscale, -finesine[planeang]) + x*ystepscale; @@ -1742,7 +1742,7 @@ void R_DrawTiltedPlane (visplane_t *pl, fixed_t alpha, bool additive, bool maske void R_MapVisPlane (visplane_t *pl, void (*mapfunc)(int y, int x1)) { - int x = pl->maxx; + int x = pl->right - 1; int t2 = pl->top[x]; int b2 = pl->bottom[x]; @@ -1751,7 +1751,7 @@ void R_MapVisPlane (visplane_t *pl, void (*mapfunc)(int y, int x1)) clearbufshort (spanend+t2, b2-t2, x); } - for (--x; x >= pl->minx; --x) + for (--x; x >= pl->left; --x) { int t1 = pl->top[x]; int b1 = pl->bottom[x]; @@ -1790,7 +1790,7 @@ void R_MapVisPlane (visplane_t *pl, void (*mapfunc)(int y, int x1)) // Draw any spans that are still open while (t2 < b2) { - mapfunc (--b2, pl->minx); + mapfunc (--b2, pl->left); } } diff --git a/src/r_plane.h b/src/r_plane.h index 231fa3ad4..cb1448dcc 100644 --- a/src/r_plane.h +++ b/src/r_plane.h @@ -38,7 +38,7 @@ struct visplane_s FTextureID picnum; int lightlevel; fixed_t xoffs, yoffs; // killough 2/28/98: Support scrolling flats - int minx, maxx; + int left, right; FDynamicColormap *colormap; // [RH] Support multiple colormaps fixed_t xscale, yscale; // [RH] Support flat scaling angle_t angle; // [RH] Support flat rotation diff --git a/src/r_segs.cpp b/src/r_segs.cpp index ebf525569..d55b31bbe 100644 --- a/src/r_segs.cpp +++ b/src/r_segs.cpp @@ -206,13 +206,13 @@ void ClipMidtex(int x1, int x2) short most[MAXWIDTH]; WallMost(most, curline->frontsector->ceilingplane, &WallC); - for (int i = x1; i <= x2; ++i) + for (int i = x1; i < x2; ++i) { if (wallupper[i] < most[i]) wallupper[i] = most[i]; } WallMost(most, curline->frontsector->floorplane, &WallC); - for (int i = x1; i <= x2; ++i) + for (int i = x1; i < x2; ++i) { if (walllower[i] > most[i]) walllower[i] = most[i]; @@ -398,12 +398,12 @@ void R_RenderMaskedSegRange (drawseg_t *ds, int x1, int x2) OWallMost(walllower, textop - texheight, &WallC); } - for (i = x1; i <= x2; i++) + for (i = x1; i < x2; i++) { if (wallupper[i] < mceilingclip[i]) wallupper[i] = mceilingclip[i]; } - for (i = x1; i <= x2; i++) + for (i = x1; i < x2; i++) { if (walllower[i] > mfloorclip[i]) walllower[i] = mfloorclip[i]; @@ -426,7 +426,7 @@ void R_RenderMaskedSegRange (drawseg_t *ds, int x1, int x2) // draw the columns one at a time if (drawmode == DoDraw0) { - for (dc_x = x1; dc_x <= x2; ++dc_x) + for (dc_x = x1; dc_x < x2; ++dc_x) { BlastMaskedColumn (R_DrawMaskedColumn, tex); } @@ -434,9 +434,9 @@ void R_RenderMaskedSegRange (drawseg_t *ds, int x1, int x2) else { // [RH] Draw up to four columns at once - int stop = (x2+1) & ~3; + int stop = x2 & ~3; - if (x1 > x2) + if (x1 >= x2) goto clearfog; dc_x = x1; @@ -458,7 +458,7 @@ void R_RenderMaskedSegRange (drawseg_t *ds, int x1, int x2) dc_x++; } - while (dc_x <= x2) + while (dc_x < x2) { BlastMaskedColumn (R_DrawMaskedColumn, tex); dc_x++; @@ -486,7 +486,7 @@ void R_RenderMaskedSegRange (drawseg_t *ds, int x1, int x2) if (fake3D & FAKE3D_CLIPTOP) { OWallMost(wallupper, sclipTop - viewz, &WallC); - for (i = x1; i <= x2; i++) + for (i = x1; i < x2; i++) { if (wallupper[i] < mceilingclip[i]) wallupper[i] = mceilingclip[i]; @@ -496,7 +496,7 @@ void R_RenderMaskedSegRange (drawseg_t *ds, int x1, int x2) if (fake3D & FAKE3D_CLIPBOTTOM) { OWallMost(walllower, sclipBottom - viewz, &WallC); - for (i = x1; i <= x2; i++) + for (i = x1; i < x2; i++) { if (walllower[i] > mfloorclip[i]) walllower[i] = mfloorclip[i]; @@ -520,11 +520,11 @@ clearfog: if (fake3D & FAKE3D_REFRESHCLIP) { assert(ds->bkup >= 0); - memcpy(openings + ds->sprtopclip, openings + ds->bkup, (ds->x2-ds->x1+1) * 2); + memcpy(openings + ds->sprtopclip, openings + ds->bkup, (ds->x2 - ds->x1) * 2); } else { - clearbufshort(openings + ds->sprtopclip - ds->x1 + x1, x2-x1+1, viewheight); + clearbufshort(openings + ds->sprtopclip - ds->x1 + x1, x2 - x1, viewheight); } } return; @@ -539,7 +539,7 @@ void R_RenderFakeWall(drawseg_t *ds, int x1, int x2, F3DFloor *rover) fixed_t Alpha = Scale(rover->alpha, OPAQUE, 255); ESPSResult drawmode; drawmode = R_SetPatchStyle (LegacyRenderStyles[rover->flags & FF_ADDITIVETRANS ? STYLE_Add : STYLE_Translucent], - Alpha, 0, 0); + Alpha, 0, 0); if(drawmode == DontDraw) { R_FinishSetPatchStyle(); @@ -617,12 +617,12 @@ void R_RenderFakeWall(drawseg_t *ds, int x1, int x2, F3DFloor *rover) OWallMost(wallupper, sclipTop - viewz, &WallC); OWallMost(walllower, sclipBottom - viewz, &WallC); - for (i = x1; i <= x2; i++) + for (i = x1; i < x2; i++) { if (wallupper[i] < mceilingclip[i]) wallupper[i] = mceilingclip[i]; } - for (i = x1; i <= x2; i++) + for (i = x1; i < x2; i++) { if (walllower[i] > mfloorclip[i]) walllower[i] = mfloorclip[i]; @@ -1093,7 +1093,7 @@ void wallscan (int x1, int x2, short *uwal, short *dwal, fixed_t *swal, fixed_t palookupoffse[3] = dc_colormap; } - for(; (x <= x2) && (x & 3); ++x) + for(; (x < x2) && (x & 3); ++x) { light += rw_lightstep; y1ve[0] = uwal[x];//max(uwal[x],umost[x]); @@ -1116,7 +1116,7 @@ void wallscan (int x1, int x2, short *uwal, short *dwal, fixed_t *swal, fixed_t dovline1(); } - for(; x <= x2-3; x += 4) + for(; x < x2-3; x += 4) { bad = 0; for (z = 3; z>= 0; --z) @@ -1186,7 +1186,7 @@ void wallscan (int x1, int x2, short *uwal, short *dwal, fixed_t *swal, fixed_t } } } - for(;x<=x2;x++) + for(;x x2); + assert(WallC.sx2 >= x2); // kg3D - fake floors instead of zdoom light list for (unsigned int i = 0; i < frontsector->e->XFloor.lightlist.Size(); i++) @@ -1235,7 +1235,7 @@ void wallscan_striped (int x1, int x2, short *uwal, short *dwal, fixed_t *swal, int j = WallMost (most3, frontsector->e->XFloor.lightlist[i].plane, &WallC); if (j != 3) { - for (int j = x1; j <= x2; ++j) + for (int j = x1; j < x2; ++j) { down[j] = clamp (most3[j], up[j], dwal[j]); } @@ -1317,7 +1317,7 @@ void wallscan_np2(int x1, int x2, short *uwal, short *dwal, fixed_t *swal, fixed int j = OWallMost(most3, partition - viewz, &WallC); if (j != 3) { - for (int j = x1; j <= x2; ++j) + for (int j = x1; j < x2; ++j) { down[j] = clamp(most3[j], up[j], dwal[j]); } @@ -1341,7 +1341,7 @@ void wallscan_np2(int x1, int x2, short *uwal, short *dwal, fixed_t *swal, fixed int j = OWallMost(most3, partition - viewz, &WallC); if (j != 12) { - for (int j = x1; j <= x2; ++j) + for (int j = x1; j < x2; ++j) { up[j] = clamp(most3[j], uwal[j], down[j]); } @@ -1460,7 +1460,7 @@ void maskwallscan (int x1, int x2, short *uwal, short *dwal, fixed_t *swal, fixe domvline1(); } - for(; x <= x2-3; x += 4, p+= 4) + for(; x < x2-3; x += 4, p+= 4) { bad = 0; for (z = 3, dax = x+3; z >= 0; --z, --dax) @@ -1528,7 +1528,7 @@ void maskwallscan (int x1, int x2, short *uwal, short *dwal, fixed_t *swal, fixe } } } - for(; x <= x2; ++x, ++p) + for(; x < x2; ++x, ++p) { light += rw_lightstep; y1ve[0] = uwal[x]; @@ -1612,7 +1612,7 @@ void transmaskwallscan (int x1, int x2, short *uwal, short *dwal, fixed_t *swal, palookupoffse[3] = dc_colormap; } - for(; (x <= x2) && ((size_t)p & 3); ++x, ++p) + for(; (x < x2) && ((size_t)p & 3); ++x, ++p) { light += rw_lightstep; y1ve[0] = uwal[x];//max(uwal[x],umost[x]); @@ -1633,7 +1633,7 @@ void transmaskwallscan (int x1, int x2, short *uwal, short *dwal, fixed_t *swal, tmvline1(); } - for(; x <= x2-3; x += 4, p+= 4) + for(; x < x2-3; x += 4, p+= 4) { bad = 0; for (z = 3, dax = x+3; z >= 0; --z, --dax) @@ -1704,7 +1704,7 @@ void transmaskwallscan (int x1, int x2, short *uwal, short *dwal, fixed_t *swal, } } } - for(; x <= x2; ++x, ++p) + for(; x < x2; ++x, ++p) { light += rw_lightstep; y1ve[0] = uwal[x]; @@ -1855,11 +1855,11 @@ void R_RenderSegLoop () } if (rw_pic->GetHeight() != 1 << rw_pic->HeightBits) { - wallscan_np2(x1, x2-1, walltop, wallbottom, swall, lwall, yscale, MAX(rw_frontcz1, rw_frontcz2), MIN(rw_frontfz1, rw_frontfz2), false); + wallscan_np2(x1, x2, walltop, wallbottom, swall, lwall, yscale, MAX(rw_frontcz1, rw_frontcz2), MIN(rw_frontfz1, rw_frontfz2), false); } else { - call_wallscan(x1, x2-1, walltop, wallbottom, swall, lwall, yscale, false); + call_wallscan(x1, x2, walltop, wallbottom, swall, lwall, yscale, false); } } clearbufshort (ceilingclip+x1, x2-x1, viewheight); @@ -1898,11 +1898,11 @@ void R_RenderSegLoop () } if (rw_pic->GetHeight() != 1 << rw_pic->HeightBits) { - wallscan_np2(x1, x2-1, walltop, wallupper, swall, lwall, yscale, MAX(rw_frontcz1, rw_frontcz2), MIN(rw_backcz1, rw_backcz2), false); + wallscan_np2(x1, x2, walltop, wallupper, swall, lwall, yscale, MAX(rw_frontcz1, rw_frontcz2), MIN(rw_backcz1, rw_backcz2), false); } else { - call_wallscan(x1, x2-1, walltop, wallupper, swall, lwall, yscale, false); + call_wallscan(x1, x2, walltop, wallupper, swall, lwall, yscale, false); } } memcpy (ceilingclip+x1, wallupper+x1, (x2-x1)*sizeof(short)); @@ -1944,11 +1944,11 @@ void R_RenderSegLoop () } if (rw_pic->GetHeight() != 1 << rw_pic->HeightBits) { - wallscan_np2(x1, x2-1, walllower, wallbottom, swall, lwall, yscale, MAX(rw_backfz1, rw_backfz2), MIN(rw_frontfz1, rw_frontfz2), false); + wallscan_np2(x1, x2, walllower, wallbottom, swall, lwall, yscale, MAX(rw_backfz1, rw_backfz2), MIN(rw_frontfz1, rw_frontfz2), false); } else { - call_wallscan(x1, x2-1, walllower, wallbottom, swall, lwall, yscale, false); + call_wallscan(x1, x2, walllower, wallbottom, swall, lwall, yscale, false); } } memcpy (floorclip+x1, walllower+x1, (x2-x1)*sizeof(short)); @@ -2368,7 +2368,7 @@ void R_StoreWallRange (int start, int stop) ds_p->siz1 = (DWORD)DivScale32 (1, WallC.sz1) >> 1; ds_p->siz2 = (DWORD)DivScale32 (1, WallC.sz2) >> 1; ds_p->x1 = rw_x = start; - ds_p->x2 = stop-1; + ds_p->x2 = stop; ds_p->curline = curline; rw_stopx = stop; ds_p->bFogBoundary = false; @@ -2547,7 +2547,7 @@ void R_StoreWallRange (int start, int stop) { if (ceilingplane) { // killough 4/11/98: add NULL ptr checks - ceilingplane = R_CheckPlane (ceilingplane, start, stop-1); + ceilingplane = R_CheckPlane (ceilingplane, start, stop); } else { @@ -2559,7 +2559,7 @@ void R_StoreWallRange (int start, int stop) { if (floorplane) { // killough 4/11/98: add NULL ptr checks - floorplane = R_CheckPlane (floorplane, start, stop-1); + floorplane = R_CheckPlane (floorplane, start, stop); } else { @@ -2707,8 +2707,8 @@ int OWallMost (short *mostbuf, fixed_t z, const FWallCoords *wallc) #endif if (mostbuf[ix1] < 0) mostbuf[ix1] = 0; else if (mostbuf[ix1] > viewheight) mostbuf[ix1] = (short)viewheight; - if (mostbuf[ix2] < 0) mostbuf[ix2] = 0; - else if (mostbuf[ix2] > viewheight) mostbuf[ix2] = (short)viewheight; + if (mostbuf[ix2-1] < 0) mostbuf[ix2-1] = 0; + else if (mostbuf[ix2-1] > viewheight) mostbuf[ix2-1] = (short)viewheight; return bad; } @@ -2865,8 +2865,8 @@ int WallMost (short *mostbuf, const secplane_t &plane, const FWallCoords *wallc) if (mostbuf[ix1] < 0) mostbuf[ix1] = 0; else if (mostbuf[ix1] > viewheight) mostbuf[ix1] = (short)viewheight; - if (mostbuf[ix2] < 0) mostbuf[ix2] = 0; - else if (mostbuf[ix2] > viewheight) mostbuf[ix2] = (short)viewheight; + if (mostbuf[ix2-1] < 0) mostbuf[ix2-1] = 0; + else if (mostbuf[ix2-1] > viewheight) mostbuf[ix2-1] = (short)viewheight; return bad; } @@ -3063,7 +3063,7 @@ static void R_RenderDecal (side_t *wall, DBaseDecal *decal, drawseg_t *clipper, x1 = WallC.sx1; x2 = WallC.sx2; - if (x1 > clipper->x2 || x2 <= clipper->x1) + if (x1 >= clipper->x2 || x2 <= clipper->x1) goto done; WallT.InitFromWallCoords(&WallC); @@ -3126,14 +3126,8 @@ static void R_RenderDecal (side_t *wall, DBaseDecal *decal, drawseg_t *clipper, dc_texturemid = topoff + FixedDiv (zpos - viewz, yscale); // Clip sprite to drawseg - if (x1 < clipper->x1) - { - x1 = clipper->x1; - } - if (x2 > clipper->x2) - { - x2 = clipper->x2 + 1; - } + x1 = MAX(clipper->x1, x1); + x2 = MIN(clipper->x2, x2); if (x1 >= x2) { goto done; diff --git a/src/r_things.cpp b/src/r_things.cpp index 8ad5f76a9..57a82ebb0 100644 --- a/src/r_things.cpp +++ b/src/r_things.cpp @@ -352,7 +352,7 @@ void R_DrawVisSprite (vissprite_t *vis) else // DoDraw1 { // Up to four columns at a time - stop4 = (vis->x2 + 1) & ~3; + stop4 = vis->x2 & ~3; } tex = vis->pic; @@ -366,7 +366,7 @@ void R_DrawVisSprite (vissprite_t *vis) sprtopscreen = centeryfrac - FixedMul (dc_texturemid, spryscale); dc_x = vis->x1; - x2 = vis->x2 + 1; + x2 = vis->x2; if (dc_x < x2) { @@ -412,7 +412,7 @@ void R_DrawWallSprite(vissprite_t *spr) fixed_t yscale; x1 = MAX(spr->x1, spr->wallc.sx1); - x2 = MIN(spr->x2 + 1, spr->wallc.sx2 + 1); + x2 = MIN(spr->x2, spr->wallc.sx2); if (x1 >= x2) return; WallT.InitFromWallCoords(&spr->wallc); @@ -868,7 +868,7 @@ void R_ProjectSprite (AActor *thing, int fakeside, F3DFloor *fakefloor, F3DFloor x1 = centerx + MulScale32 (tx, xscale); // off the right side? - if (x1 > WindowRight) + if (x1 >= WindowRight) return; tx += tex->GetWidth() * thingxscalemul; @@ -880,7 +880,6 @@ void R_ProjectSprite (AActor *thing, int fakeside, F3DFloor *fakefloor, F3DFloor xscale = FixedDiv(FixedMul(spritescaleX, xscale), tex->xScale); iscale = (tex->GetWidth() << FRACBITS) / (x2 - x1); - x2--; fixed_t yscale = SafeDivScale16(spritescaleY, tex->yScale); @@ -1062,7 +1061,7 @@ static void R_ProjectWallSprite(AActor *thing, fixed_t fx, fixed_t fy, fixed_t f if (wallc.Init(lx1, ly1, lx2, ly2, TOO_CLOSE_Z)) return; - if (wallc.sx1 > WindowRight || wallc.sx2 <= WindowLeft) + if (wallc.sx1 >= WindowRight || wallc.sx2 <= WindowLeft) return; // Sprite sorting should probably treat these as walls, not sprites, @@ -1076,7 +1075,7 @@ static void R_ProjectWallSprite(AActor *thing, fixed_t fx, fixed_t fy, fixed_t f vis = R_NewVisSprite(); vis->x1 = wallc.sx1 < WindowLeft ? WindowLeft : wallc.sx1; - vis->x2 = wallc.sx2 >= WindowRight ? WindowRight : wallc.sx2-1; + vis->x2 = wallc.sx2 >= WindowRight ? WindowRight : wallc.sx2; vis->yscale = yscale; vis->idepth = (unsigned)DivScale32(1, tz) >> 1; vis->depth = tz; @@ -1213,10 +1212,10 @@ void R_DrawPSprite (pspdef_t* psp, int pspnum, AActor *owner, fixed_t sx, fixed_ return; tx += tex->GetScaledWidth() << FRACBITS; - x2 = ((centerxfrac + FixedMul (tx, pspritexscale)) >>FRACBITS) - 1; + x2 = ((centerxfrac + FixedMul (tx, pspritexscale)) >>FRACBITS); // off the left side - if (x2 < 0) + if (x2 <= 0) return; // store information in a vissprite @@ -1255,7 +1254,7 @@ void R_DrawPSprite (pspdef_t* psp, int pspnum, AActor *owner, fixed_t sx, fixed_ vis->texturemid -= BaseRatioSizes[WidescreenRatio][2]; } vis->x1 = x1 < 0 ? 0 : x1; - vis->x2 = x2 >= viewwidth ? viewwidth-1 : x2; + vis->x2 = x2 >= viewwidth ? viewwidth : x2; vis->xscale = DivScale16(pspritexscale, tex->xScale); vis->yscale = DivScale16(pspriteyscale, tex->yScale); vis->Translation = 0; // [RH] Use default colors @@ -1807,7 +1806,7 @@ void R_DrawSprite (vissprite_t *spr) x2 = spr->x2; // [RH] Quickly reject sprites with bad x ranges. - if (x1 > x2) + if (x1 >= x2) return; // [RH] Sprites split behind a one-sided line can also be discarded. @@ -2050,7 +2049,7 @@ void R_DrawSprite (vissprite_t *spr) return; } - i = x2 - x1 + 1; + i = x2 - x1; clip1 = clipbot + x1; clip2 = cliptop + x1; do @@ -2073,7 +2072,7 @@ void R_DrawSprite (vissprite_t *spr) // kg3D - no clipping on fake segs if(ds->fake) continue; // determine if the drawseg obscures the sprite - if (ds->x1 > x2 || ds->x2 < x1 || + if (ds->x1 >= x2 || ds->x2 <= x1 || (!(ds->silhouette & SIL_BOTH) && ds->maskedtexturecol == -1 && !ds->bFogBoundary) ) { @@ -2116,7 +2115,7 @@ void R_DrawSprite (vissprite_t *spr) { clip1 = clipbot + r1; clip2 = openings + ds->sprbottomclip + r1 - ds->x1; - i = r2 - r1 + 1; + i = r2 - r1; do { if (*clip1 > *clip2) @@ -2130,7 +2129,7 @@ void R_DrawSprite (vissprite_t *spr) { clip1 = cliptop + r1; clip2 = openings + ds->sprtopclip + r1 - ds->x1; - i = r2 - r1 + 1; + i = r2 - r1; do { if (*clip1 < *clip2) @@ -2182,7 +2181,7 @@ void R_DrawSprite (vissprite_t *spr) } if (x2 < viewwidth - 1) { - clearbufshort(cliptop + x2 + 1, viewwidth - x2 - 1, viewheight); + clearbufshort(cliptop + x2, viewwidth - x2, viewheight); } int minvoxely = spr->gzt <= hzt ? 0 : (spr->gzt - hzt) / spr->yscale; int maxvoxely = spr->gzb > hzb ? INT_MAX : (spr->gzt - hzb) / spr->yscale; @@ -2459,13 +2458,13 @@ static void R_DrawMaskedSegsBehindParticle (const vissprite_t *vis) drawseg_t *ds = &drawsegs[InterestingDrawsegs[p]]; // kg3D - no fake segs if(ds->fake) continue; - if (ds->x1 >= x2 || ds->x2 < x1) + if (ds->x1 >= x2 || ds->x2 <= x1) { continue; } if (Scale (ds->siz2 - ds->siz1, (x2 + x1)/2 - ds->sx1, ds->sx2 - ds->sx1) + ds->siz1 < vis->idepth) { - R_RenderMaskedSegRange (ds, MAX (ds->x1, x1), MIN (ds->x2, x2-1)); + R_RenderMaskedSegRange (ds, MAX(ds->x1, x1), MIN(ds->x2, x2)); } } } @@ -2480,7 +2479,7 @@ void R_DrawParticle (vissprite_t *vis) int yl = vis->gzb; int ycount = vis->gzt - yl + 1; int x1 = vis->x1; - int countbase = vis->x2 - x1 + 1; + int countbase = vis->x2 - x1; R_DrawMaskedSegsBehindParticle (vis);