mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2024-12-28 13:21:10 +00:00
large dispoffset values no longer cause sprites to be distorted
more detailed description: vissprites now store dispoffset in a separate variable from (y)scale, and uses it to influence order between sprites without it affecting the actual drawing of the sprites themselves
This commit is contained in:
parent
fea0a9577a
commit
049689334d
2 changed files with 15 additions and 3 deletions
|
@ -1257,7 +1257,8 @@ static void R_ProjectSprite(mobj_t *thing)
|
||||||
vis = R_NewVisSprite();
|
vis = R_NewVisSprite();
|
||||||
vis->heightsec = heightsec; //SoM: 3/17/2000
|
vis->heightsec = heightsec; //SoM: 3/17/2000
|
||||||
vis->mobjflags = thing->flags;
|
vis->mobjflags = thing->flags;
|
||||||
vis->scale = yscale + thing->info->dispoffset; //<<detailshift;
|
vis->scale = yscale; //<<detailshift;
|
||||||
|
vis->dispoffset = thing->info->dispoffset; // Monster Iestyn: 23/11/15
|
||||||
vis->gx = thing->x;
|
vis->gx = thing->x;
|
||||||
vis->gy = thing->y;
|
vis->gy = thing->y;
|
||||||
vis->gz = gz;
|
vis->gz = gz;
|
||||||
|
@ -1473,6 +1474,7 @@ static void R_ProjectPrecipitationSprite(precipmobj_t *thing)
|
||||||
// store information in a vissprite
|
// store information in a vissprite
|
||||||
vis = R_NewVisSprite();
|
vis = R_NewVisSprite();
|
||||||
vis->scale = yscale; //<<detailshift;
|
vis->scale = yscale; //<<detailshift;
|
||||||
|
vis->dispoffset = 0; // Monster Iestyn: 23/11/15
|
||||||
vis->gx = thing->x;
|
vis->gx = thing->x;
|
||||||
vis->gy = thing->y;
|
vis->gy = thing->y;
|
||||||
vis->gz = gz;
|
vis->gz = gz;
|
||||||
|
@ -1624,6 +1626,7 @@ void R_SortVisSprites(void)
|
||||||
vissprite_t *best = NULL;
|
vissprite_t *best = NULL;
|
||||||
vissprite_t unsorted;
|
vissprite_t unsorted;
|
||||||
fixed_t bestscale;
|
fixed_t bestscale;
|
||||||
|
INT32 bestdispoffset;
|
||||||
|
|
||||||
if (!visspritecount)
|
if (!visspritecount)
|
||||||
return;
|
return;
|
||||||
|
@ -1654,12 +1657,19 @@ void R_SortVisSprites(void)
|
||||||
vsprsortedhead.next = vsprsortedhead.prev = &vsprsortedhead;
|
vsprsortedhead.next = vsprsortedhead.prev = &vsprsortedhead;
|
||||||
for (i = 0; i < visspritecount; i++)
|
for (i = 0; i < visspritecount; i++)
|
||||||
{
|
{
|
||||||
bestscale = INT32_MAX;
|
bestscale = bestdispoffset = INT32_MAX;
|
||||||
for (ds = unsorted.next; ds != &unsorted; ds = ds->next)
|
for (ds = unsorted.next; ds != &unsorted; ds = ds->next)
|
||||||
{
|
{
|
||||||
if (ds->scale < bestscale)
|
if (ds->scale < bestscale)
|
||||||
{
|
{
|
||||||
bestscale = ds->scale;
|
bestscale = ds->scale;
|
||||||
|
bestdispoffset = ds->dispoffset;
|
||||||
|
best = ds;
|
||||||
|
}
|
||||||
|
// order visprites of same scale by dispoffset, smallest first
|
||||||
|
else if (ds->scale == bestscale && ds->dispoffset < bestdispoffset)
|
||||||
|
{
|
||||||
|
bestdispoffset = ds->dispoffset;
|
||||||
best = ds;
|
best = ds;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1911,7 +1921,8 @@ static void R_CreateDrawNodes(void)
|
||||||
if (r2->sprite->szt > rover->sz || r2->sprite->sz < rover->szt)
|
if (r2->sprite->szt > rover->sz || r2->sprite->sz < rover->szt)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (r2->sprite->scale > rover->scale)
|
if (r2->sprite->scale > rover->scale
|
||||||
|
|| (r2->sprite->scale == rover->scale && 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;
|
||||||
|
|
|
@ -162,6 +162,7 @@ typedef struct vissprite_s
|
||||||
boolean precip;
|
boolean precip;
|
||||||
boolean vflip; // Flip vertically
|
boolean vflip; // Flip vertically
|
||||||
boolean isScaled;
|
boolean isScaled;
|
||||||
|
INT32 dispoffset; // copy of info->dispoffset, affects ordering but not drawing
|
||||||
} vissprite_t;
|
} vissprite_t;
|
||||||
|
|
||||||
// A drawnode is something that points to a 3D floor, 3D side, or masked
|
// A drawnode is something that points to a 3D floor, 3D side, or masked
|
||||||
|
|
Loading…
Reference in a new issue