Doom Wiki
Doom Wiki


Cuando es golpeada por un ataque, un Alma perdida que está cargando contra su objetivo se alejará lentamente de la dirección del ataque mientras permanece bastante impotente en su propio estado de ataque. Esto es, en primer lugar, porque el ataque al Alma perdida cancela el movimiento hacia adelante de su carga. En segundo lugar, dado que el Alma perdida flota, se alejará persistentemente del efecto del ataque, en lugar de simplemente ser empujada a una distancia corta y limitada.

Una vez que comienza, la 'carga rechazada' se detendrá cuando:

  • El Alma perdida es golpeada por un atacante diferente, que se convierte en su nuevo objetivo.
  • El Alma perdida es detenida por una linedef infranqueable o bloqueadora de monstruos.
  • El Alma perdida es detenida por una cosa que es un 'obstáculo' o por un objeto recolectable.
  • El objetivo del Alma perdida que causó el efecto, es destruido.

En el tercer caso, si el objeto golpeado tiene puntos de daño, recibe el daño de ataque normal (sin importar en qué dirección esté mirando el Alma perdida).

Normalmente, cuando un Alma perdida carga, tiene un área donde "muerde" a cualquier persona dentro del alcance. Sin embargo, si se la empuja hacia atrás durante su posición de ataque, el área de ataque se balancea hacia atrás, esencialmente haciendo que el Alma perdida "muerda" a cualquier persona desde la parte trasera mientras tocar su parte delantera es inofensiva.

Aspectos técnicos[]

Este comportamiento es causado por una codificación especial en P_DamageMobj. Cuando un Alma perdida comienza a cargar, tiene el indicador MF_SKULLFLY establecido. Un actor (mobj) que está dañado y que tiene esta bandera establecida tiene su impulso reducido a cero:

    if ( target->flags & MF_SKULLFLY )
    {
	target->momx = target->momy = target->momz = 0;
    }

Más adelante en la función, el Alma perdida ajusta su impulso un poco a medida que cada mobj dañado es empujado por el ataque, dependiendo del daño infligido y la masa del mobj (a menos que el daño haya sido infligido por una motosierra). Esta parte del código no es específica de las Almas perdidas.

La segunda parte de la codificación especial para la carga de Almas perdidas en P_DamageMobj evita que el Alma perdida se ponga en su estado de dolor normal, como si tuviera cero posibilidades de dolor.

  if ( (P_Random () < target->info->painchance)
	 && !(target->flags&MF_SKULLFLY) )
    {
	target->flags |= MF_JUSTHIT;	// fight back!
	
	P_SetMobjState (target, target->info->painstate);
    }

La combinación de estas dos codificaciones especiales hace que un Alma perdida que se daña durante una carga permanezca en una carga y, por lo tanto, tenga que esperar hasta que choque con algo para comenzar a realizar cualquier acción nueva, mientras se le roba su impulso original.

Véase también[]