Doom Wiki
Advertisement
Doom Wiki


Todas las versiones del motor de Doom, incluidas las variantes utilizadas para Heretic, Hexen y Strife, han presentado limitaciones al trabajar con áreas muy altas. Esto a veces simplemente se manifiesta como fallas de renderizado (como la pantalla que se llena con un plano similar al horizonte), pero también puede bloquear el juego de manera efectiva. Aunque no se conocen 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 patrón de Moiré, pero es distinto de este, que está restringido a los efectos visuales y se producía a diferencias de altura mucho más pequeñas. Ese problema se reparó en la versión 1.4 de Doom, pero el problema mayor permaneció.

Aspectos técnicos[]

Aunque, en teoría, Doom debería poder manejar áreas de hasta 32.767 unidades de altura, surgen limitaciones cuando se deben sumar o multiplicar grandes números. Para ahorrar memoria y lograr un mejor rendimiento de la caché, Doom reduce las coordenadas de mapeo de texturas en 12 bits para ajustarlas a una matriz de recorte compuesta por enteros "cortos" de 16 bits. Para situaciones normales, esto funciona bien, pero si el resultado de una operación de recorte arroja un valor demasiado pequeño (menos de -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 recorte equivalen a decirle al motor del juego que dibuje la parte inferior de la pantalla, y en aras de la eficiencia, no se comprueban los límites de los valores recuperados de las matrices.

Esto puede hacer que cualquiera de las rutinas de dibujo de Doom supere los límites del framebuffer, y también puede causar un bucle en la función R_MakeSpans para quedar fuera de los límites de la matriz spanstart, sobrescribiendo la mayor parte de la memoria variable estática de Doom (también conocida como segmento BSS).

Cualquiera de las tres formas diferentes en las que esto puede fallar puede resultar en un error de persiana veneciana.

Véase también[]

Advertisement