Fandom

Doom

Suicidio por barril

1.037páginas en
el wiki
Crear una página
Discusión0 Compartir
Cacodemon comete suicidio en Doom 1.101:13

Cacodemon comete suicidio en Doom 1.1

Debido a un error en la implementación de las luchas internas entre monstruos en Doom v1.1 y anteriores, los monstruos intentarán suicidarse atacándose a sí mismos si reciben daño cuando destruyen barriles.

Una simple explicación para este comportamiento es la siguiente: cuando explota un barril, el motor de Doom busca qué jugador o monstruo fue el causante de la explosión. Cuando otro objeto se daña como resultado de la explosión del barril, la "fuente" de la explosión se pasa entonces al objeto dañado. Un monstruo herido en una explosión de barril luego tomará represalias contra el monstruo o jugador que provocó que explotara.

Sin embargo, si un monstruo se daña a sí mismo en la explosión del barril, es la causa de su propia lesión. Las versiones de Doom anteriores a v1.1 no comprobaban este caso especial (no es un escenario que se repita con frecuencia durante un juego normal).

Como resultado, los monstruos que se lesionan a sí mismos por la explosión de un barril tomarán represalias contra ellos mismos.

Los monstruos como Cacodemons, Barones del infierno y Diablillos se "romper diferenciarse" con su propio ataque cuerpo a cuerpo. Los Zombis (o monstruos sin ataques cuerpo a cuerpo) se "vuelven locos", disparando ciegamente por delante, lo que puede causar que se generen luchas internas entre monstruos como resultado.

Aspectos técnicos

La causa probable de esto puede verse en el código fuente de Doom. En la función P_DamageMobj en p_inter.c es el siguiente código:

if ( (!target->threshold || target->type == MT_VILE)
        && source && source != target
        && source->type != MT_VILE)
   {
       // if not intent on another player,
       // chase after this one
       target->target = source;
       target->threshold = BASETHRESHOLD;
       if (target->state == &states[target->info->spawnstate]
           && target->info->seestate != S_NULL)
           P_SetMobjState (target, target->info->seestate);
   }

Se ejecuta este código cuando un objeto es dañado por otro objeto, incluyendo explosiones de barriles. La variable source es una referencia al objeto que causó el daño, mientras que la variable target es una referencia al objeto sobre el que se inflige daño. Cuando se destruye el barril, a los enemigos afectados se lesionan con source igual al jugador o enemigo que causó la explosión.

Se supone que el código anterior produce que los monstruos tomen represalias contra los jugadores que les atacan. Sin embargo, cuando un monstruo se daña sí mismo a través de una explosión de barril, tanto target como source hacen referencia al propio monstruo. Es probable que el código en negrita no estaba presente en la versión 1.1. Como resultado de ello, el objetivo del monstruo (target->target, el objeto en la actualidad está persiguiendo / ataque) se enfoca sí mismo. El resultado es que ataca a sí mismo.

¡Interferencia de bloqueo de anuncios detectada!


Wikia es un sitio libre de uso que hace dinero de la publicidad. Contamos con una experiencia modificada para los visitantes que utilizan el bloqueo de anuncios

Wikia no es accesible si se han hecho aún más modificaciones. Si se quita el bloqueador de anuncios personalizado, la página cargará como se esperaba.

También en Fandom

Wiki al azar