Doom Wiki
Advertisement
Doom Wiki


Strife modificó los proyectiles para que puedan activar linedefs de tipo "impacto", que en Doom solo se activaban con las armas del jugador basadas en trazadoras.

Como parte del código que permite esto, Strife agregó una verificación de líneas especiales que se han cruzado durante el movimiento del proyectil en la función P_XYMovement usando lo siguiente:

if(numspechit)
   P_ShootSpecialLine(thing, spechit[numspechit]);

El problema con este código es que numspechit a menudo se deja establecido en el valor -1 después de que se usa un bucle para ejecutar su valor más allá de 0 con el fin de activar cada línea que se ha cruzado.

Dado que la comprobación if(numspechit) solo comprueba que el valor es distinto de cero, -1 puede pasar la comprobación y alguna memoria no relacionada fuera de la matriz se usa como linedef, en teoría el comportamiento del programa se vuelve impredecible. Las pruebas empíricas parecen indicar que la memoria a la que accede el motor de juego Vainilla debido a este problema siempre contiene un valor "especial" que no es igual a ninguno de los tipos de línea de disparo admitidos y, P_ShootSpecialLine simplemente regresa como resultado.

Cuando este código se implementó en el proyecto Chocolate Strife sin modificaciones, el juego comenzó a bloquearse con una violación de acceso. La comprobación if(numspechit) tuvo que modificarse a if(numspechit > 0) para preservar el nivel de funcionalidad del motor de juego estándar.

Advertisement