mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-02-16 17:11:33 +00:00
Handle sorting against water FOFs properly
This commit is contained in:
parent
ee9ebe6c54
commit
fa10530d37
2 changed files with 13 additions and 5 deletions
|
@ -1066,7 +1066,7 @@ static void R_SplitSprite(vissprite_t *sprite)
|
|||
if (testheight <= sprite->gz)
|
||||
return;
|
||||
|
||||
cutfrac = (INT16)((centeryfrac - FixedMul(testheight - viewz, sprite->sortscale))>>FRACBITS);
|
||||
cutfrac = (INT16)((centeryfrac - FixedMul(testheight - viewz, sprite->linkscale))>>FRACBITS);
|
||||
if (cutfrac < 0)
|
||||
continue;
|
||||
if (cutfrac > viewheight)
|
||||
|
@ -1436,6 +1436,7 @@ static void R_ProjectSprite(mobj_t *thing)
|
|||
fixed_t tx, tz;
|
||||
fixed_t xscale, yscale; //added : 02-02-98 : aaargll..if I were a math-guy!!!
|
||||
fixed_t sortscale, sortsplat = 0;
|
||||
fixed_t linkscale = 0;
|
||||
fixed_t sort_x = 0, sort_y = 0, sort_z;
|
||||
|
||||
INT32 x1, x2;
|
||||
|
@ -1827,7 +1828,6 @@ static void R_ProjectSprite(mobj_t *thing)
|
|||
if ((thing->flags2 & MF2_LINKDRAW) && thing->tracer) // toast 16/09/16 (SYMMETRY)
|
||||
{
|
||||
interpmobjstate_t tracer_interp = {0};
|
||||
fixed_t linkscale;
|
||||
|
||||
thing = thing->tracer;
|
||||
|
||||
|
@ -1859,6 +1859,10 @@ static void R_ProjectSprite(mobj_t *thing)
|
|||
|
||||
cut |= SC_LINKDRAW;
|
||||
}
|
||||
else
|
||||
{
|
||||
linkscale = sortscale;
|
||||
}
|
||||
|
||||
// Calculate the splat's sortscale
|
||||
if (splat)
|
||||
|
@ -2048,6 +2052,7 @@ static void R_ProjectSprite(mobj_t *thing)
|
|||
vis->mobjflags = thing->flags;
|
||||
vis->sortscale = sortscale;
|
||||
vis->sortsplat = sortsplat;
|
||||
vis->linkscale = linkscale;
|
||||
vis->dispoffset = dispoffset; // Monster Iestyn: 23/11/15
|
||||
vis->gx = interp.x;
|
||||
vis->gy = interp.y;
|
||||
|
@ -2078,8 +2083,10 @@ static void R_ProjectSprite(mobj_t *thing)
|
|||
vis->x2 = x2 >= portalclipend ? portalclipend-1 : x2;
|
||||
|
||||
vis->sector = thing->subsector->sector;
|
||||
vis->szt = (INT16)((centeryfrac - FixedMul(vis->gzt - viewz, sortscale))>>FRACBITS);
|
||||
vis->sz = (INT16)((centeryfrac - FixedMul(vis->gz - viewz, sortscale))>>FRACBITS);
|
||||
|
||||
// Using linkscale here improves cut detection for LINKDRAW.
|
||||
vis->szt = (INT16)((centeryfrac - FixedMul(vis->gzt - viewz, linkscale))>>FRACBITS);
|
||||
vis->sz = (INT16)((centeryfrac - FixedMul(vis->gz - viewz, linkscale))>>FRACBITS);
|
||||
vis->cut = cut;
|
||||
|
||||
if (thing->subsector->sector->numlights)
|
||||
|
|
|
@ -159,8 +159,9 @@ typedef struct vissprite_s
|
|||
fixed_t startfrac; // horizontal position of x1
|
||||
fixed_t xscale, scale; // projected horizontal and vertical scales
|
||||
fixed_t thingscale; // the object's scale
|
||||
fixed_t sortscale; // sortscale only differs from scale for paper sprites, floor sprites, and MF2_LINKDRAW
|
||||
fixed_t sortscale; // sortscale only differs from scale for paper sprites and floor sprites
|
||||
fixed_t sortsplat; // the sortscale from behind the floor sprite
|
||||
fixed_t linkscale; // the sortscale for MF2_LINKDRAW sprites
|
||||
fixed_t scalestep; // only for paper sprites, 0 otherwise
|
||||
fixed_t paperoffset, paperdistance; // for paper sprites, offset/dist relative to the angle
|
||||
fixed_t xiscale; // negative if flipped
|
||||
|
|
Loading…
Reference in a new issue