Gargoyle crash bugs

The "crash" feature of the gargoyle when it dies in Heretic, whereby it enters a special falling state until it hits the ground and then explodes into gibs on contact, is subject to several bugs which can cause interesting behaviors.

Mechanics
The was added to the  structure by Raven Software to allow the gargoyle's special falling behavior. Special-case code in the function will place it into this state when it is detected as having hit the ground. The normal death frame of a gargoyle always depicts it in a pose of falling through the air. It is the which transforms it into a pile of gibs and spawns additional gib objects.

No gibs
If the gargoyle is already touching the ground before the game makes the first check for impact, but after the gargoyle has already entered its, then the crash will never occur as the function will never be invoked for the object at all. This will cause the gargoyle to remain solid and affected by gravity while holding its falling pose. This most commonly occurs if the gargoyle is perfectly level with a floor behind it and is pushed back onto the floor by the damage that kills it, resulting in no Z momentum. A common place to observe this is in, just beyond the yellow key door.

Multiple gibs
If the gargoyle crosses multiple sectors while dying, such as by sliding down a set of stairs, it may enter its repeatedly, becoming a fountain of gibs in the process. This happens due to interaction between the functions and ; neither function checks if a gargoyle is already in its, so when it hits each floor, it satisfies the conditions for the crash animation to occur.

Fixes
These bugs are fixed by some Heretic source ports:
 * Eternity Engine
 * ZDoom and derivatives (GZDoom et al.)

The problem of no gibbing is addressed by adding a special-case check for objects with crash animations already being in contact with a floor when they die; they will be set into that state immediately instead of assuming that they will necessarily acquire Z momentum at some later point in execution.

The problem of gibbing multiple times must be addressed by adding some type of tracking to the actor. In both Eternity and ZDoom this is accomplished with an internal bit flag which records the "has crashed" state for that object. An object attempting to crash again will not repeat the animation if this bit is set.