From 7dbd34345c717d76735a8e06daab92f8af7cdcae Mon Sep 17 00:00:00 2001 From: Jaime Passos Date: Tue, 13 Oct 2020 01:09:17 -0300 Subject: [PATCH] Fix splat sorting --- src/r_things.c | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/src/r_things.c b/src/r_things.c index f1d564362..d873b806b 100644 --- a/src/r_things.c +++ b/src/r_things.c @@ -2630,7 +2630,32 @@ static void R_CreateDrawNodes(maskcount_t* mask, drawnode_t* head, boolean temps } 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) continue; @@ -2638,8 +2663,7 @@ static void R_CreateDrawNodes(maskcount_t* mask, drawnode_t* head, boolean temps continue; } - if (r2->sprite->sortscale > rover->sortscale - || (r2->sprite->sortscale == rover->sortscale && r2->sprite->dispoffset > rover->dispoffset)) + if (infront) { entry = R_CreateDrawNode(NULL); (entry->prev = r2->prev)->next = entry;