Re: Big list of small bugs
Posted: Fri Jul 15, 2016 1:04 am
Try running 3DGE with the command line parameter:
-sprite_kludge 0
and, if you don't see anything different, try:
-sprite_kludge 1
And boot into your test map -- it looks like the following check will remove sprites, since it seems the previous team tried to correct the clipping:
I have a feeling that this was always set to "1" in order to try and correct the "sprites sitting wrongly in the floor or ceiling", thus preventing any kind of Y clipping. However, disabling the "sprite kludge" produces much different results:
If turning sprite kludge to "0" produces better results, I will add this as a compatibility option, and further tweak the source code. Most of the Y-clipping collision detection was removed between 1.29 <-> 1.31 in an attempt to fix it all up once and for all, but it seems some code was indeed left in there.
At any rate, try that and let me know if it works any differently. I have a good understanding of how Y-clipping works now, so please let me know. If this all fails to produce results, I may have a solution ready. . .
EDIT:
Saw this in the disabled part of the code, in THING rendering:
So, provide me a test map of the existing behavior -- I think I can fix this and make it a "gameplay" option.
-sprite_kludge 0
and, if you don't see anything different, try:
-sprite_kludge 1
And boot into your test map -- it looks like the following check will remove sprites, since it seems the previous team tried to correct the clipping:
Code: Select all
// fix for sprites that sit wrongly into the floor/ceiling
int y_clipping = YCLIP_Soft;
if (is_model || (mo->flags & MF_FUZZY) || (mo->hyperflags & HF_HOVER))
{
[b]y_clipping = YCLIP_Never;[/b]
}
Code: Select all
else if (sprite_kludge==0 && gzb < [b]mo->floorz[/b])
{
// explosion ?
if (mo->info->flags & MF_MISSILE)
{
[b]y_clipping = YCLIP_Hard;[/b]
}
else
{
[b]gzt += mo->floorz - gzb;
gzb = mo->floorz;[/b]
}
}
else if (sprite_kludge==0 && gzt > [b]mo->ceilingz[/b])
{
// explosion ?
if (mo->info->flags & MF_MISSILE)
{
[b]y_clipping = YCLIP_Hard;[/b]
}
else
{
[b]gzb -= gzt - mo->ceilingz;
gzt = mo->ceilingz;[/b]
}
}
At any rate, try that and let me know if it works any differently. I have a good understanding of how Y-clipping works now, so please let me know. If this all fails to produce results, I may have a solution ready. . .
EDIT:
Saw this in the disabled part of the code, in THING rendering:
Code: Select all
// Note that sprites are not clipped by the lowest floor or
// highest ceiling, OR by *solid* extrafloors (even translucent
// ones) -- UNLESS y_clipping == YCLIP_Hard.