Doom Wiki
Advertisement
Doom Wiki


Si un Alma perdida choca con algún objeto mientras carga hacia adelante, el monstruo se detendrá y comenzará a moverse normalmente de nuevo como si nada hubiera pasado. Un ejemplo notable se puede ver en E2M8: Tower of Babel en Doom: mientras el jugador permanezca detrás de los elementos en los nichos, es efectivamente inalcanzable para los cráneos en llamas presentes en el nivel.

Aspectos técnicos[]

El razonamiento detrás de este comportamiento no parece muy obvio.

En el código fuente de Doom, PIT_CheckThing es la función genérica que maneja las colisiones entre cosas, como golpes de proyectiles y elementos recolectables.

Aquí, los proyectiles (actores (mobjs) que tienen la bandera de bits MF_MISSILE sobre ellos) se verifican si realmente golpean algo sólido y / o disparable, teniendo en cuenta la coordenada Z (la función devuelve verdadero si la colisión no tiene lugar):

  // missiles can hit other things
  if (tmthing->flags & MF_MISSILE)
     {
        // see if it went over / under
        if (tmthing->z > thing->z + thing->height)
           return true;		// overhead
        if (tmthing->z+tmthing->height < thing->z)
           return true;		// underneath

Por razones desconocidas, el código de colisión del Alma perdida (mientras corre, tiene el conjunto de banderas MF_SKULLFLY, aunque la diferencia no es significativa) no realiza ninguna de las comprobaciones anteriores, simplemente pone a cero el impulso del monstruo, junto con una llamada a P_DamageMobj.

Además, no verifica qué tipo de cosa golpea (banderas MF_SOLID, MF_SPECIAL, MF_SHOOTABLE, que nuevamente se manejan adecuadamente para misiles).

El resultado de una lógica tan defectuosa es que la carga del Alma perdida será interrumpida por cualquier tipo de cosa, un monstruo, un potenciador o una decoración, situada en cualquier altura a lo largo de la trayectoria del Alma perdida.

Advertisement