Blast damage attacks, also referred to as splash damage, inflict radius damage in the area surrounding their point of explosion, in addition to any damage inflicted by the direct hit from the source actor. The original Doom engine uses the same code for all blasts, and even the same sound effect. In that game, the blast radius is either 70 or 128 map units, and all objects within that radius are examined. For each object that can be damaged, the distance to the center of the explosion is calculated as the greater of the x-distance and the y-distance of the centers, less the radius of the object. The line-of-sight is checked, and if the view of the object from the explosion is obstructed, no damage is inflicted. Otherwise, damage (in hit points) is equal to blast radius minus the distance. Other games based on the engine introduce more variability and additional mechanics to explosions.
Unless specially coded as being immune to blast damage (see below), an enemy that is hit will receive blast damage depending on its distance from the epicenter of the explosion on the X-Y plane. Since the center of the thing doing damage is usually separated from the target by a small amount of distance, this is generally somewhat less than the full potential amount. There is no attenuation of the effect along the Z axis, however.
Properties of radius attacks in Doom
Counting both the hit and the blast, a successful rocket launcher attack averages about the same damage as the super shotgun at close range (about three times the regular shotgun), but is equally effective at long range.
Cyberdemons and spiderdemons are immune to all blast damage (which does not include the tracer damage from BFG blasts). Therefore, a greater number of rockets is required to kill these bosses than might be expected, and they cannot be damaged at all by barrels. They receive only the direct damage from arch-vile attacks. The arch-vile itself is not immune to blast radius damage, and may take splash-back from its own attacks if it is too close when the detonation of its flame cloud is initiated. It is possible for arch-viles to eventually kill themselves when engaging a target with sufficient health due to this effect. Note that this does not cause arch-viles to infight with themselves, or with other arch-viles, due to the fact that arch-viles are specially excluded from being the target of monster infighting.
Extra effects in other games
Blast radii induce certain other effects in other games based on the Doom engine. In Heretic and Hexen, blast radius attacks will trigger terrain hit effects if they occur at a distance from the floor that is equal to or less than the explosion's radius. In Strife, blast radius attacks fire four invisible non-damaging tracers in the cardinal directions. These tracers enable nearby blasts to break glass screens and windows. Most code that creates blast radius attacks in Strife will additionally make a call to the function P_NoiseAlert to awaken monsters and set off the alarm, though this is done separately outside the actual blast damage code itself.
Extensions were also made in Hexen that allow explosions to be clipped to a certain z height around the projectile, have differing damage and radius measurements, and to optionally not inflict damage to the actor which originated the explosion (such as is used for Baratus's Hammer of Retribution).
In Heretic, all monsters flagged as being bosses are immune to splash damage attacks in the same manner as Doom's boss creatures. This includes the maulotaur and both forms of D'Sparil, but does not include iron liches.
In Strife, only the inquisitor is specifically immune to blast damage, though the spectres and the Entity are also immune to most blasts due to the fact that they are only allowed to take damage from the Sigil.
The blast radius code, like virtually all of the clipping engine code in Doom, is non-reentrant, meaning that it can cause recursive calls into the clipping engine and into its own code, but will not properly tolerate such calls and will therefore malfunction. It is possible for the ordering of the blockmap list used to damage objects in explosions to be changed during the explosion calculation simply through the calls it makes to the function P_DamageMobj, which can change the position of monsters, and thereby inflict damage to some monsters more than once. If multiple explosions cause each other directly within the same gametic, the recursive explosions will interfere with previous explosions' damage, location, and blockmap iteration properties.
- Barrel suicide
- Phoenix Rod
- Rocket launcher
- Timebomb of the Ancients