Doom Wiki
Advertisement
Doom Wiki


Todas las versiones del motor de Doom, incluidas las variantes utilizadas para Heretic, Hexen y Strife, han presentado limitaciones en el momento de manejar áreas que sean muy altas.

Esto a veces simplemente se manifiesta como fallas en la renderización (como una pantalla que se llena con un plano similar al horizonte), pero también puede bloquear el juego de forma efectiva. Aunque no se presentan comúnmente, estas limitaciones pueden comenzar a manifestarse con tan solo 2.500 unidades de diferencia entre el piso y el techo.

Cabe señalar que este fenómeno está relacionado con el error de Moiré, pero es distinto de él, que se restringió a los efectos visuales y se produjo en diferencias de altura mucho más pequeñas. Ese problema fue reparado en la versión 1.4 de Doom, pero el problema mayor se mantuvo.

Aspectos técnicos[]

Aunque en teoría el motor de Doom debería ser capaz de manejar áreas que tengan entre -32.768 y 32.767 unidades de altura, las limitaciones surgen cuando se deben sumar o multiplicar grandes números. Con el fin de ahorrar memoria y lograr un mejor rendimiento de la memoria caché, Doom reduce las coordenadas de asignación de texturas en 12 bits para encajarlas en una matriz de recorte formada por enteros "cortos" de 16 bits.

Para situaciones normales, esto funciona bien, pero si el resultado de una operación de recorte produce un valor demasiado pequeño (menor que -32.768), el motor del juego fuerza este valor fuera de rango en la matriz de recorte y termina con un valor muy grande en su lugar.

Los valores muy grandes en la matriz de recortes son equivalentes a decirle al motor del juego que extraiga la parte inferior de la pantalla, y en aras de la eficiencia, no se realiza ninguna comprobación de límites en los valores recuperados de las matrices. Esto puede hacer que cualquiera de las rutinas de dibujo de Doom se ejecute más allá de los límites del framebuffer, y también puede causar un bucle en la función R_MakeSpans se salga de los límites en la matriz SpanStart, sobrescribiendo la mayor parte de la memoria variable estática de Doom (también conocida como el segmento BSS).

Cualquiera de las tres formas diferentes en que esto puede fallar resultará en un Error "Persiana veneciana".

Véase también[]

Advertisement