Fix splat sorting
This commit is contained in:
parent
f2aca01e2b
commit
7dbd34345c
|
@ -2630,7 +2630,32 @@ static void R_CreateDrawNodes(maskcount_t* mask, drawnode_t* head, boolean temps
|
||||||
}
|
}
|
||||||
else if (r2->sprite)
|
else if (r2->sprite)
|
||||||
{
|
{
|
||||||
if (!(r2->sprite->cut & SC_SPLAT || rover->cut & SC_SPLAT))
|
boolean infront = (r2->sprite->sortscale > rover->sortscale
|
||||||
|
|| (r2->sprite->sortscale == rover->sortscale && r2->sprite->dispoffset > rover->dispoffset));
|
||||||
|
|
||||||
|
if (rover->cut & SC_SPLAT
|
||||||
|
&& r2->sprite->cut & SC_SPLAT)
|
||||||
|
{
|
||||||
|
fixed_t z1 = 0, z2 = 0;
|
||||||
|
|
||||||
|
if (rover->mobj->z - viewz > 0)
|
||||||
|
{
|
||||||
|
z1 = rover->pz;
|
||||||
|
z2 = r2->sprite->pz;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
z1 = r2->sprite->pz;
|
||||||
|
z2 = rover->pz;
|
||||||
|
}
|
||||||
|
|
||||||
|
z1 -= viewz;
|
||||||
|
z2 -= viewz;
|
||||||
|
|
||||||
|
if (z1 >= z2)
|
||||||
|
infront = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
if (r2->sprite->x1 > rover->x2 || r2->sprite->x2 < rover->x1)
|
if (r2->sprite->x1 > rover->x2 || r2->sprite->x2 < rover->x1)
|
||||||
continue;
|
continue;
|
||||||
|
@ -2638,8 +2663,7 @@ static void R_CreateDrawNodes(maskcount_t* mask, drawnode_t* head, boolean temps
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r2->sprite->sortscale > rover->sortscale
|
if (infront)
|
||||||
|| (r2->sprite->sortscale == rover->sortscale && r2->sprite->dispoffset > rover->dispoffset))
|
|
||||||
{
|
{
|
||||||
entry = R_CreateDrawNode(NULL);
|
entry = R_CreateDrawNode(NULL);
|
||||||
(entry->prev = r2->prev)->next = entry;
|
(entry->prev = r2->prev)->next = entry;
|
||||||
|
|
Loading…
Reference in a new issue