Revised and re-organized P_DoFakeFloorAlpha fading procedure
* dosolid routine now refers to spawnflags
This commit is contained in:
parent
677f19ede6
commit
020b18b84b
203
src/p_spec.c
203
src/p_spec.c
|
@ -7214,74 +7214,34 @@ static boolean P_DoFakeFloorAlpha(ffloor_t *rover, INT16 destvalue, INT16 speed,
|
||||||
boolean doexists, boolean dotranslucent, boolean dosolid, boolean dospawnflags,
|
boolean doexists, boolean dotranslucent, boolean dosolid, boolean dospawnflags,
|
||||||
boolean doghostfade)
|
boolean doghostfade)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
boolean stillfading = false;
|
||||||
|
|
||||||
|
// routines specific to fade in and fade out
|
||||||
if (rover->alpha == destvalue)
|
if (rover->alpha == destvalue)
|
||||||
return result;
|
return stillfading;
|
||||||
// fade out
|
else if (rover->alpha > destvalue) // fade out
|
||||||
else if (rover->alpha > destvalue)
|
|
||||||
{
|
{
|
||||||
// finish fading out
|
// finish fading out
|
||||||
if (speed < 1 || rover->alpha - speed <= destvalue + speed)
|
if (speed < 1 || rover->alpha - speed <= destvalue + speed)
|
||||||
{
|
{
|
||||||
rover->alpha = destvalue;
|
rover->alpha = destvalue;
|
||||||
|
|
||||||
if (doexists)
|
if (dosolid)
|
||||||
{
|
{
|
||||||
if (rover->alpha <= 1)
|
if (rover->spawnflags & FF_SOLID)
|
||||||
rover->flags &= ~FF_EXISTS;
|
rover->flags &= ~FF_SOLID;
|
||||||
else
|
if (rover->spawnflags & FF_SWIMMABLE)
|
||||||
rover->flags |= FF_EXISTS;
|
rover->flags &= ~FF_SWIMMABLE;
|
||||||
}
|
if (rover->spawnflags & FF_QUICKSAND)
|
||||||
|
rover->flags &= ~FF_QUICKSAND;
|
||||||
if (dosolid
|
if (rover->spawnflags & FF_BUSTUP)
|
||||||
&& !(rover->flags & FF_SWIMMABLE)
|
rover->flags &= ~FF_BUSTUP;
|
||||||
&& !(rover->flags & FF_QUICKSAND))
|
|
||||||
rover->flags &= ~FF_SOLID; // make intangible at end of fade-out
|
|
||||||
|
|
||||||
if (dotranslucent)
|
|
||||||
{
|
|
||||||
if (rover->alpha >= 256)
|
|
||||||
{
|
|
||||||
rover->flags |= FF_CUTLEVEL;
|
|
||||||
rover->flags &= ~(FF_TRANSLUCENT|FF_EXTRA|FF_CUTEXTRA);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
rover->flags |= FF_TRANSLUCENT|FF_EXTRA|FF_CUTEXTRA;
|
|
||||||
rover->flags &= ~FF_CUTLEVEL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rover->flags & FF_SOLID)
|
|
||||||
rover->flags &= ~FF_CUTSPRITES;
|
|
||||||
else
|
|
||||||
rover->flags |= FF_CUTSPRITES;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // continue fading out
|
else // continue fading out
|
||||||
{
|
{
|
||||||
rover->alpha -= speed;
|
rover->alpha -= speed;
|
||||||
|
stillfading = true;
|
||||||
if (doexists)
|
|
||||||
rover->flags |= FF_EXISTS;
|
|
||||||
|
|
||||||
if (dosolid
|
|
||||||
&& !(rover->flags & FF_SWIMMABLE)
|
|
||||||
&& !(rover->flags & FF_QUICKSAND))
|
|
||||||
rover->flags |= FF_SOLID; // keep solid during fade
|
|
||||||
|
|
||||||
if (dotranslucent)
|
|
||||||
{
|
|
||||||
rover->flags |= FF_TRANSLUCENT|FF_EXTRA|FF_CUTEXTRA;
|
|
||||||
rover->flags &= ~FF_CUTLEVEL;
|
|
||||||
|
|
||||||
if (rover->flags & FF_SOLID)
|
|
||||||
rover->flags &= ~FF_CUTSPRITES;
|
|
||||||
else
|
|
||||||
rover->flags |= FF_CUTSPRITES;
|
|
||||||
}
|
|
||||||
|
|
||||||
result = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // fade in
|
else // fade in
|
||||||
|
@ -7291,66 +7251,99 @@ static boolean P_DoFakeFloorAlpha(ffloor_t *rover, INT16 destvalue, INT16 speed,
|
||||||
{
|
{
|
||||||
rover->alpha = destvalue;
|
rover->alpha = destvalue;
|
||||||
|
|
||||||
if (doexists)
|
if (dosolid)
|
||||||
{
|
{
|
||||||
if (rover->alpha <= 1)
|
if (rover->spawnflags & FF_SOLID)
|
||||||
rover->flags &= ~FF_EXISTS;
|
rover->flags |= FF_SOLID;
|
||||||
else
|
if (rover->spawnflags & FF_SWIMMABLE)
|
||||||
rover->flags |= FF_EXISTS;
|
rover->flags |= FF_SWIMMABLE;
|
||||||
}
|
if (rover->spawnflags & FF_QUICKSAND)
|
||||||
|
rover->flags |= FF_QUICKSAND;
|
||||||
if (dosolid
|
if (rover->spawnflags & FF_BUSTUP)
|
||||||
&& !(rover->flags & FF_SWIMMABLE)
|
rover->flags |= FF_BUSTUP;
|
||||||
&& !(rover->flags & FF_QUICKSAND))
|
|
||||||
rover->flags |= FF_SOLID; // make solid at end of fade-in
|
|
||||||
|
|
||||||
if (dotranslucent)
|
|
||||||
{
|
|
||||||
if (rover->alpha >= 256)
|
|
||||||
{
|
|
||||||
rover->flags |= FF_CUTLEVEL;
|
|
||||||
rover->flags &= ~(FF_TRANSLUCENT|FF_EXTRA|FF_CUTEXTRA);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
rover->flags |= FF_TRANSLUCENT|FF_EXTRA|FF_CUTEXTRA;
|
|
||||||
rover->flags &= ~FF_CUTLEVEL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rover->flags & FF_SOLID)
|
|
||||||
rover->flags &= ~FF_CUTSPRITES;
|
|
||||||
else
|
|
||||||
rover->flags |= FF_CUTSPRITES;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // continue fading in
|
else // continue fading in
|
||||||
{
|
{
|
||||||
rover->alpha += speed;
|
rover->alpha += speed;
|
||||||
|
stillfading = true;
|
||||||
if (doexists)
|
|
||||||
rover->flags |= FF_EXISTS;
|
|
||||||
|
|
||||||
if (dosolid
|
|
||||||
&& !(rover->flags & FF_SWIMMABLE)
|
|
||||||
&& !(rover->flags & FF_QUICKSAND))
|
|
||||||
rover->flags |= FF_SOLID; // keep solid during fade
|
|
||||||
|
|
||||||
if (dotranslucent)
|
|
||||||
{
|
|
||||||
rover->flags |= FF_TRANSLUCENT|FF_EXTRA|FF_CUTEXTRA;
|
|
||||||
rover->flags &= ~FF_CUTLEVEL;
|
|
||||||
|
|
||||||
if (rover->flags & FF_SOLID)
|
|
||||||
rover->flags &= ~FF_CUTSPRITES;
|
|
||||||
else
|
|
||||||
rover->flags |= FF_CUTSPRITES;
|
|
||||||
}
|
|
||||||
|
|
||||||
result = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
// routines common to both fade in and fade out
|
||||||
|
if (!stillfading)
|
||||||
|
{
|
||||||
|
if (doexists)
|
||||||
|
{
|
||||||
|
if (rover->alpha <= 1)
|
||||||
|
rover->flags &= ~FF_EXISTS;
|
||||||
|
else
|
||||||
|
rover->flags |= FF_EXISTS;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dotranslucent)
|
||||||
|
{
|
||||||
|
if (rover->alpha >= 256)
|
||||||
|
{
|
||||||
|
//rover->flags |= FF_CUTLEVEL;
|
||||||
|
rover->flags &= ~FF_TRANSLUCENT;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rover->flags |= FF_TRANSLUCENT;
|
||||||
|
//rover->flags &= ~FF_CUTLEVEL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if (rover->flags & FF_SOLID)
|
||||||
|
// rover->flags &= ~FF_CUTSPRITES;
|
||||||
|
// else
|
||||||
|
// rover->flags |= FF_CUTSPRITES;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (doexists)
|
||||||
|
rover->flags |= FF_EXISTS;
|
||||||
|
|
||||||
|
if (dotranslucent)
|
||||||
|
{
|
||||||
|
rover->flags |= FF_TRANSLUCENT;
|
||||||
|
//rover->flags &= ~FF_CUTLEVEL;
|
||||||
|
|
||||||
|
// if (rover->flags & FF_SOLID)
|
||||||
|
// rover->flags &= ~FF_CUTSPRITES;
|
||||||
|
// else
|
||||||
|
// rover->flags |= FF_CUTSPRITES;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dosolid)
|
||||||
|
{
|
||||||
|
if (doghostfade) // remove interaction flags during fade
|
||||||
|
{
|
||||||
|
if (rover->spawnflags & FF_SOLID)
|
||||||
|
rover->flags &= ~FF_SOLID;
|
||||||
|
if (rover->spawnflags & FF_SWIMMABLE)
|
||||||
|
rover->flags &= ~FF_SWIMMABLE;
|
||||||
|
if (rover->spawnflags & FF_QUICKSAND)
|
||||||
|
rover->flags &= ~FF_QUICKSAND;
|
||||||
|
if (rover->spawnflags & FF_BUSTUP)
|
||||||
|
rover->flags &= ~FF_BUSTUP;
|
||||||
|
}
|
||||||
|
else // keep interaction during fade
|
||||||
|
{
|
||||||
|
if (rover->spawnflags & FF_SOLID)
|
||||||
|
rover->flags |= FF_SOLID;
|
||||||
|
if (rover->spawnflags & FF_SWIMMABLE)
|
||||||
|
rover->flags |= FF_SWIMMABLE;
|
||||||
|
if (rover->spawnflags & FF_QUICKSAND)
|
||||||
|
rover->flags |= FF_QUICKSAND;
|
||||||
|
if (rover->spawnflags & FF_BUSTUP)
|
||||||
|
rover->flags |= FF_BUSTUP;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return stillfading;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Adds master fader thinker.
|
/** Adds master fader thinker.
|
||||||
|
|
Loading…
Reference in New Issue