FANDOM

1.062 Páginas

Formato de niveles Doom

La tabla REJECT es un recurso adjunto a los niveles, que se utiliza para acelerar los cálculos de línea de visión. Al inicio de un nivel, los monstruos están en un estado "de sueño", en el que se mantienen inmóviles en su posición. Ellos pueden ser activados por "ver" al jugador o por medio de algún sonido (como que el jugador dispare un arma cerca de ellos). Los niveles grandes pueden contener muchos monstruos; la tabla REJECT hace posible que Doom pueda determinar cuando es imposible que los monstruos vean a los jugadores.

La tabla funciona pre-calculando si la línea de visión directa entre sectores es posible. Para generar la tabla se utiliza un constructor de mapas REJECT (reject map builder), que puede tomar una cantidad considerable de tiempo para hacer los cálculos. Cuando se han completado, genera una tabla de valores booleanos, uno para cada combinación de posibles pares de sectores. Con el fin de determinar si un monstruo puede ver a un jugador, el motor busca el valor de la tabla REJECT, utilizando el número del sector en donde está el jugador y el número del sector donde está el monstruo. Si el valor resulta ser verdadero, se sabe de inmediato que no hay una línea de visión posible entre los dos sectores y es imposible que el monstruo pueda ver al jugador. Si el valor es falso, una línea de visión entre los sectores puede ser posible: entonces, se realiza un cálculo más complicado para determinar si el jugador es visible para el monstruo.

Formato

El formato de la tabla REJECT es muy simple. Puede representarse como sigue (teniendo en cuenta un nivel de cinco sectores):

Sector en donde está el jugador
0 1 2 3 4
Sector
en
donde
está
el
monstruo
0 1 0 1 0 0
1 0 1 1 0 1
2 1 1 1 1 0
3 0 0 1 1 0
4 0 1 0 0 1

Los valores booleanos se leen de izquierda a derecha y de arriba a abajo y se empaquetan en bytes (produciendo ocho valores por byte). En el embalaje en bytes, el bit menos significativo se utiliza primero. Así que el valor del recurso REJECT para la tabla anterior debe ser:

 Binary: 11000101 00111110 00100110 00000001
 Hexadecimal:  0xC5, 0x3E, 0x26, 0x01

Se puede observar que el tamaño de un lump REJECT en bytes se puede calcular así:

tamaño = ( s2 ) / 8

donde "s" es el número de sectores que hay en el nivel.

Efectos especiales

Algunos niveles han utilizado el recurso REJECT para producir efectos especiales.

La tabla puede ser utilizada para controlar si los monstruos pueden ver a los jugadores, por lo que una tabla cuidadosamente creada se puede utilizar para hacer que el jugador resulte "invisible" para los monstruos. Es posible mantener a los monstruos en su lugar, por ejemplo, mediante la colocación de un monstruo en un sector que se ha "aislado" a través de configurar todos sus entradas REJECT en verdadero.

Los monstruos todavía se activarán cuando sean golpeados o cuando oyen un sonido, sin embargo.

Desbordamiento

Si el lump REJECT para un mapa es más pequeño que el límite necesario de ( s2 ) / 8, entonces, algunas de las operaciones de búsqueda de línea de visión se perderán. Doom no hace ninguna comprobación de límites en la búsqueda, por lo que si el jugador y un monstruo están en sectores que no están en la tabla, lo que pase a estar en la memoria después del final de la tabla se utilizará como el valor de REJECT.

Para compatibilidad de las demo, Chocolate Doom y PrBoom plus tratan de emular este comportamiento en pequeños desbordamientos mediante la predicción de lo que estaría en la memoria después del lump REJECT, pero es casi imposible de hacer en desbordamientos de mayor tamaño, por lo que muchas demos en mapas con tablas REJECT muy cortas serían desincronizadas incluso en Vanilla Doom. La mayoría de los source ports sustituyen las búsquedas fuera de los límites REJECT con 0, que requiere una verificación costosa de la línea de visión en casos de desbordamiento.

¡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